Apollo 10.0
自动驾驶开放平台
apollo::planning::SpeedData类 参考

#include <speed_data.h>

类 apollo::planning::SpeedData 继承关系图:
apollo::planning::SpeedData 的协作图:

Public 成员函数

 SpeedData ()=default
 
virtual ~SpeedData ()=default
 
 SpeedData (std::vector< common::SpeedPoint > speed_points)
 
void AppendSpeedPoint (const double s, const double time, const double v, const double a, const double da)
 
bool EvaluateByTime (const double time, common::SpeedPoint *const speed_point) const
 
bool EvaluateByS (const double s, common::SpeedPoint *const speed_point) const
 
double TotalTime () const
 
double TotalLength () const
 
virtual std::string DebugString () const
 

详细描述

在文件 speed_data.h30 行定义.

构造及析构函数说明

◆ SpeedData() [1/2]

apollo::planning::SpeedData::SpeedData ( )
default

◆ ~SpeedData()

virtual apollo::planning::SpeedData::~SpeedData ( )
virtualdefault

◆ SpeedData() [2/2]

apollo::planning::SpeedData::SpeedData ( std::vector< common::SpeedPoint speed_points)
explicit

在文件 speed_data.cc41 行定义.

42 : std::vector<SpeedPoint>(std::move(speed_points)) {
43 std::sort(begin(), end(), [](const SpeedPoint& p1, const SpeedPoint& p2) {
44 return p1.t() < p2.t();
45 });
46}

成员函数说明

◆ AppendSpeedPoint()

void apollo::planning::SpeedData::AppendSpeedPoint ( const double  s,
const double  time,
const double  v,
const double  a,
const double  da 
)

在文件 speed_data.cc48 行定义.

50 {
51 static std::mutex mutex_speedpoint;
52 UNIQUE_LOCK_MULTITHREAD(mutex_speedpoint);
53
54 if (!empty()) {
55 ACHECK(back().t() < time);
56 }
57 push_back(common::util::PointFactory::ToSpeedPoint(s, time, v, a, da));
58}
static SpeedPoint ToSpeedPoint(const double s, const double t, const double v=0, const double a=0, const double da=0)
#define ACHECK(cond)
Definition log.h:80
#define UNIQUE_LOCK_MULTITHREAD(mutex_type)
Definition util.h:162

◆ DebugString()

std::string apollo::planning::SpeedData::DebugString ( ) const
virtual

在文件 speed_data.cc154 行定义.

154 {
155 const auto limit = std::min(
156 size(), static_cast<size_t>(FLAGS_trajectory_point_num_for_debug));
157 return absl::StrCat(
158 "[\n",
159 absl::StrJoin(begin(), begin() + limit, ",\n",
161 "]\n");
162}

◆ EvaluateByS()

bool apollo::planning::SpeedData::EvaluateByS ( const double  s,
common::SpeedPoint *const  speed_point 
) const

在文件 speed_data.cc100 行定义.

101 {
102 if (size() < 2) {
103 return false;
104 }
105 if (!(front().s() < s + 1.0e-6 && s - 1.0e-6 < back().s())) {
106 return false;
107 }
108
109 auto comp = [](const common::SpeedPoint& sp, const double s) {
110 return sp.s() < s;
111 };
112
113 auto it_lower = std::lower_bound(begin(), end(), s, comp);
114 if (it_lower == end()) {
115 *speed_point = back();
116 } else if (it_lower == begin()) {
117 *speed_point = front();
118 } else {
119 const auto& p0 = *(it_lower - 1);
120 const auto& p1 = *it_lower;
121 double s0 = p0.s();
122 double s1 = p1.s();
123
124 speed_point->Clear();
125 speed_point->set_s(s);
126 speed_point->set_t(common::math::lerp(p0.t(), s0, p1.t(), s1, s));
127 if (p0.has_v() && p1.has_v()) {
128 speed_point->set_v(common::math::lerp(p0.v(), s0, p1.v(), s1, s));
129 }
130 if (p0.has_a() && p1.has_a()) {
131 speed_point->set_a(common::math::lerp(p0.a(), s0, p1.a(), s1, s));
132 }
133 if (p0.has_da() && p1.has_da()) {
134 speed_point->set_da(common::math::lerp(p0.da(), s0, p1.da(), s1, s));
135 }
136 }
137 return true;
138}
T lerp(const T &x0, const double t0, const T &x1, const double t1, const double t)
Linear interpolation between two points of type T.

◆ EvaluateByTime()

bool apollo::planning::SpeedData::EvaluateByTime ( const double  time,
common::SpeedPoint *const  speed_point 
) const

在文件 speed_data.cc60 行定义.

61 {
62 if (size() < 2) {
63 return false;
64 }
65 if (!(front().t() < t + 1.0e-6 && t - 1.0e-6 < back().t())) {
66 return false;
67 }
68
69 auto comp = [](const common::SpeedPoint& sp, const double t) {
70 return sp.t() < t;
71 };
72
73 auto it_lower = std::lower_bound(begin(), end(), t, comp);
74 if (it_lower == end()) {
75 *speed_point = back();
76 } else if (it_lower == begin()) {
77 *speed_point = front();
78 } else {
79 const auto& p0 = *(it_lower - 1);
80 const auto& p1 = *it_lower;
81 double t0 = p0.t();
82 double t1 = p1.t();
83
84 speed_point->Clear();
85 speed_point->set_s(common::math::lerp(p0.s(), t0, p1.s(), t1, t));
86 speed_point->set_t(t);
87 if (p0.has_v() && p1.has_v()) {
88 speed_point->set_v(common::math::lerp(p0.v(), t0, p1.v(), t1, t));
89 }
90 if (p0.has_a() && p1.has_a()) {
91 speed_point->set_a(common::math::lerp(p0.a(), t0, p1.a(), t1, t));
92 }
93 if (p0.has_da() && p1.has_da()) {
94 speed_point->set_da(common::math::lerp(p0.da(), t0, p1.da(), t1, t));
95 }
96 }
97 return true;
98}

◆ TotalLength()

double apollo::planning::SpeedData::TotalLength ( ) const

在文件 speed_data.cc147 行定义.

147 {
148 if (empty()) {
149 return 0.0;
150 }
151 return back().s() - front().s();
152}

◆ TotalTime()

double apollo::planning::SpeedData::TotalTime ( ) const

在文件 speed_data.cc140 行定义.

140 {
141 if (empty()) {
142 return 0.0;
143 }
144 return back().t() - front().t();
145}

该类的文档由以下文件生成: