Apollo 11.0
自动驾驶开放平台
apollo::planning::NaviSpeedDecider类 参考

NaviSpeedDecider is used to generate an appropriate speed curve of the vehicle in navigation mode. 更多...

#include <navi_speed_decider.h>

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

Public 成员函数

 NaviSpeedDecider ()
 
virtual ~NaviSpeedDecider ()=default
 
bool Init (const PlannerNaviConfig &config) override
 
apollo::common::Status Execute (Frame *frame, ReferenceLineInfo *reference_line_info) override
 Overrided implementation of the virtual function "Execute" in the base class "Task".
 
- Public 成员函数 继承自 apollo::planning::NaviTask
 NaviTask (const std::string &name)
 
virtual ~NaviTask ()=default
 
virtual const std::string & Name () const
 

额外继承的成员函数

- Protected 属性 继承自 apollo::planning::NaviTask
bool is_init_ = false
 
Frame * frame_ = nullptr
 
ReferenceLineInfo * reference_line_info_ = nullptr
 

详细描述

NaviSpeedDecider is used to generate an appropriate speed curve of the vehicle in navigation mode.

Note that NaviSpeedDecider is only used in navigation mode (turn on navigation mode by setting "FLAGS_use_navigation_mode" to "true") and do not use it in standard mode.

在文件 navi_speed_decider.h 第 52 行定义.

构造及析构函数说明

◆ NaviSpeedDecider()

apollo::planning::NaviSpeedDecider::NaviSpeedDecider ( )

在文件 navi_speed_decider.cc 第 52 行定义.

52: NaviTask("NaviSpeedDecider") {}
NaviTask(const std::string &name)
Definition navi_task.cc:30

◆ ~NaviSpeedDecider()

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

成员函数说明

◆ Execute()

Status apollo::planning::NaviSpeedDecider::Execute ( Frame *  frame,
ReferenceLineInfo *  reference_line_info 
)
overridevirtual

Overrided implementation of the virtual function "Execute" in the base class "Task".

参数
frameCurrent planning frame.
reference_line_infoCurrently available reference line information.
返回
Status::OK() if a suitable path is created; error otherwise.

重载 apollo::planning::NaviTask .

在文件 navi_speed_decider.cc 第 118 行定义.

119 {
120 NaviTask::Execute(frame, reference_line_info);
121
122 // get cruise speed
123 const auto& planning_target = reference_line_info_->planning_target();
124 preferred_speed_ = planning_target.has_cruise_speed()
125 ? std::abs(planning_target.cruise_speed())
126 : 0.0;
127 preferred_speed_ = std::min(max_speed_, preferred_speed_);
128
129 // expected status of vehicle
130 const auto& planning_start_point = frame->PlanningStartPoint();
131 auto expected_v =
132 planning_start_point.has_v() ? planning_start_point.v() : 0.0;
133 auto expected_a =
134 planning_start_point.has_a() ? planning_start_point.a() : 0.0;
135
136 // current status of vehicle
137 const auto& vehicle_state = frame->vehicle_state();
138 auto current_v = vehicle_state.has_linear_velocity()
139 ? vehicle_state.linear_velocity()
140 : 0.0;
141 auto current_a = vehicle_state.has_linear_acceleration()
142 ? vehicle_state.linear_acceleration()
143 : 0.0;
144
145 // get the start point
146 double start_v;
147 double start_a;
148 double start_da;
149
150 if (enable_planning_start_point_) {
151 start_v = std::max(0.0, expected_v);
152 start_a = expected_a;
153 start_da = 0.0;
154 } else {
155 start_v = std::max(0.0, current_v);
156 start_a = current_a;
157 start_da = 0.0;
158 }
159
160 // acceleration auto compensation
161 if (enable_accel_auto_compensation_) {
162 if (prev_v_ > 0.0 && current_v > 0.0 && prev_v_ > expected_v) {
163 auto raw_ratio = (prev_v_ - expected_v) / (prev_v_ - current_v);
164 raw_ratio = Clamp(raw_ratio, 0.0, kDecelCompensationLimit);
165 decel_compensation_ratio_ = (decel_compensation_ratio_ + raw_ratio) / 2.0;
166 decel_compensation_ratio_ =
167 Clamp(decel_compensation_ratio_, 1.0, kDecelCompensationLimit);
168 ADEBUG << "change decel_compensation_ratio: " << decel_compensation_ratio_
169 << " raw: " << raw_ratio;
170 }
171 prev_v_ = current_v;
172 }
173
174 // get the path
175 auto& discretized_path = reference_line_info_->path_data().discretized_path();
176
177 auto ret = MakeSpeedDecision(
178 start_v, start_a, start_da, discretized_path, frame_->obstacles(),
179 [&](const std::string& id) { return frame_->Find(id); },
181 RecordDebugInfo(reference_line_info->speed_data());
182 if (ret != Status::OK()) {
183 reference_line_info->SetDrivable(false);
184 AERROR << "Reference Line " << reference_line_info->Lanes().Id()
185 << " is not drivable after " << Name();
186 }
187
188 return ret;
189}
static Status OK()
generate a success status.
Definition status.h:60
const std::vector< const Obstacle * > obstacles() const
Definition frame.cc:577
virtual const std::string & Name() const
Definition navi_task.cc:32
virtual apollo::common::Status Execute(Frame *frame, ReferenceLineInfo *reference_line_info)
Definition navi_task.cc:36
ReferenceLineInfo * reference_line_info_
Definition navi_task.h:48
const DiscretizedPath & discretized_path() const
Definition path_data.cc:90
const PlanningTarget & planning_target() const
#define ADEBUG
Definition log.h:41
#define AERROR
Definition log.h:44
T Clamp(const T value, T bound1, T bound2)
Clamp a value between two bounds.
Definition math_utils.h:155

◆ Init()

bool apollo::planning::NaviSpeedDecider::Init ( const PlannerNaviConfig &  config)
overridevirtual

重载 apollo::planning::NaviTask .

在文件 navi_speed_decider.cc 第 54 行定义.

54 {
55 CHECK_GT(FLAGS_planning_upper_speed_limit, 0.0);
56 ACHECK(config.has_navi_speed_decider_config());
57 ACHECK(config.navi_speed_decider_config().has_preferred_accel());
58 ACHECK(config.navi_speed_decider_config().has_preferred_decel());
59 ACHECK(config.navi_speed_decider_config().has_max_accel());
60 ACHECK(config.navi_speed_decider_config().has_max_decel());
61 ACHECK(config.navi_speed_decider_config().has_preferred_jerk());
62 ACHECK(config.navi_speed_decider_config().has_obstacle_buffer());
63 ACHECK(config.navi_speed_decider_config().has_safe_distance_base());
64 ACHECK(config.navi_speed_decider_config().has_safe_distance_ratio());
65 ACHECK(config.navi_speed_decider_config().has_following_accel_ratio());
66 ACHECK(config.navi_speed_decider_config().has_soft_centric_accel_limit());
67 ACHECK(config.navi_speed_decider_config().has_hard_centric_accel_limit());
68 ACHECK(config.navi_speed_decider_config().has_hard_speed_limit());
69 ACHECK(config.navi_speed_decider_config().has_hard_accel_limit());
70 ACHECK(config.navi_speed_decider_config().has_enable_safe_path());
71 ACHECK(config.navi_speed_decider_config().has_enable_planning_start_point());
72 ACHECK(
73 config.navi_speed_decider_config().has_enable_accel_auto_compensation());
74 ACHECK(config.navi_speed_decider_config().has_kappa_preview());
75 ACHECK(config.navi_speed_decider_config().has_kappa_threshold());
76
77 max_speed_ = FLAGS_planning_upper_speed_limit;
78 preferred_accel_ =
79 std::abs(config.navi_speed_decider_config().preferred_accel());
80 preferred_decel_ =
81 std::abs(config.navi_speed_decider_config().preferred_decel());
82 preferred_jerk_ =
83 std::abs(config.navi_speed_decider_config().preferred_jerk());
84 max_accel_ = std::abs(config.navi_speed_decider_config().max_accel());
85 max_decel_ = std::abs(config.navi_speed_decider_config().max_decel());
86 preferred_accel_ = std::min(max_accel_, preferred_accel_);
87 preferred_decel_ = std::min(max_decel_, preferred_accel_);
88
89 obstacle_buffer_ =
90 std::abs(config.navi_speed_decider_config().obstacle_buffer());
91 safe_distance_base_ =
92 std::abs(config.navi_speed_decider_config().safe_distance_base());
93 safe_distance_ratio_ =
94 std::abs(config.navi_speed_decider_config().safe_distance_ratio());
95 following_accel_ratio_ =
96 std::abs(config.navi_speed_decider_config().following_accel_ratio());
97 soft_centric_accel_limit_ =
98 std::abs(config.navi_speed_decider_config().soft_centric_accel_limit());
99 hard_centric_accel_limit_ =
100 std::abs(config.navi_speed_decider_config().hard_centric_accel_limit());
101 soft_centric_accel_limit_ =
102 std::min(hard_centric_accel_limit_, soft_centric_accel_limit_);
103 hard_speed_limit_ =
104 std::abs(config.navi_speed_decider_config().hard_speed_limit());
105 hard_accel_limit_ =
106 std::abs(config.navi_speed_decider_config().hard_accel_limit());
107 enable_safe_path_ = config.navi_speed_decider_config().enable_safe_path();
108 enable_planning_start_point_ =
109 config.navi_speed_decider_config().enable_planning_start_point();
110 enable_accel_auto_compensation_ =
111 config.navi_speed_decider_config().enable_accel_auto_compensation();
112 kappa_preview_ = config.navi_speed_decider_config().kappa_preview();
113 kappa_threshold_ = config.navi_speed_decider_config().kappa_threshold();
114
115 return obstacle_decider_.Init(config);
116}
bool Init(const PlannerNaviConfig &config) override
Initialization parameters
#define ACHECK(cond)
Definition log.h:80

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