Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
planning.cpp
Go to the documentation of this file.
2
3#include <vector>
4
8
9/*--------------------- Configuration Loading --------------------*/
10
12 PlanningParameters params;
13
14 std::string global_config_path =
15 common_lib::config_load::get_config_yaml_path("planning", "global", "global_config");
16 RCLCPP_DEBUG(rclcpp::get_logger("planning"), "Loading global config from: %s",
17 global_config_path.c_str());
18
19 YAML::Node global_config = YAML::LoadFile(global_config_path);
20 adapter = global_config["global"]["adapter"].as<std::string>();
21 params.planning_adapter_ = adapter;
22 params.planning_using_simulated_se_ = global_config["global"]["use_simulated_se"].as<bool>();
23
24 std::string planning_config_path =
25 common_lib::config_load::get_config_yaml_path("planning", "planning", adapter);
26 RCLCPP_DEBUG(rclcpp::get_logger("planning"), "Loading planning config from: %s",
27 planning_config_path.c_str());
28
29 YAML::Node planning = YAML::LoadFile(planning_config_path);
30 YAML::Node planning_config = planning["planning"];
31
32 /*--------------------- Midpoint Generator Parameters --------------------*/
33 params.mg_minimum_cone_distance_ = planning_config["mg_minimum_cone_distance"].as<double>();
34 params.mg_maximum_cone_distance_ = planning_config["mg_maximum_cone_distance"].as<double>();
35 params.mg_sliding_window_radius_ = planning_config["mg_sliding_window_radius"].as<double>();
36
37 /*--------------------- Path Calculation Parameters --------------------*/
38 params.pc_use_sliding_window_ = planning_config["pc_use_sliding_window"].as<bool>();
39 params.pc_angle_gain_ = planning_config["pc_angle_gain"].as<double>();
40 params.pc_distance_gain_ = planning_config["pc_distance_gain"].as<double>();
41 params.pc_angle_exponent_ = planning_config["pc_angle_exponent"].as<double>();
42 params.pc_distance_exponent_ = planning_config["pc_distance_exponent"].as<double>();
43 params.pc_max_cost_ = planning_config["pc_max_cost"].as<double>();
44 params.pc_lookback_points_ = planning_config["pc_lookback_points"].as<int>();
45 params.pc_search_depth_ = planning_config["pc_search_depth"].as<int>();
46 params.pc_max_points_ = planning_config["pc_max_points"].as<int>();
47 params.pc_minimum_point_distance_ = planning_config["pc_minimum_point_distance"].as<double>();
48 params.pc_reset_interval_ = planning_config["pc_reset_interval"].as<int>();
49 params.pc_use_reset_path_ = planning_config["pc_use_reset_path"].as<bool>();
50 params.pc_close_cost_ = planning_config["pc_close_cost"].as<double>();
51
52 /*--------------------- Skidpad Parameters --------------------*/
53 params.skidpad_minimum_cones_ = planning_config["skidpad_minimum_cones"].as<int>();
54 params.skidpad_tolerance_ = planning_config["skidpad_tolerance"].as<double>();
55
56 /*--------------------- Path Smoothing Parameters --------------------*/
57 params.smoothing_spline_precision_ = planning_config["smoothing_spline_precision"].as<int>();
58 params.smoothing_spline_order_ = planning_config["smoothing_spline_order"].as<int>();
60 planning_config["smoothing_spline_coeffs_ratio"].as<float>();
62 planning_config["smoothing_min_path_point_distance"].as<float>();
63 params.smoothing_use_path_smoothing_ = planning_config["smoothing_use_path_smoothing"].as<bool>();
64 params.smoothing_use_optimization_ = planning_config["smoothing_use_optimization"].as<bool>();
65 params.smoothing_car_width_ = planning_config["smoothing_car_width"].as<double>();
66 params.smoothing_safety_margin_ = planning_config["smoothing_safety_margin"].as<double>();
67 params.smoothing_curvature_weight_ = planning_config["smoothing_curvature_weight"].as<double>();
68 params.smoothing_safety_weight_ = planning_config["smoothing_safety_weight"].as<double>();
69 params.smoothing_max_iterations_ = planning_config["smoothing_max_iterations"].as<int>();
70 params.smoothing_tolerance_ = planning_config["smoothing_tolerance"].as<double>();
71
72 /*--------------------- Velocity Planning Parameters --------------------*/
73 params.vp_minimum_velocity_ = planning_config["vp_minimum_velocity"].as<double>();
74 params.vp_braking_acceleration_ = planning_config["vp_braking_acceleration"].as<double>();
75 params.vp_acceleration_ = planning_config["vp_acceleration"].as<double>();
76 params.vp_lateral_acceleration_ = planning_config["vp_lateral_acceleration"].as<double>();
78 planning_config["vp_longitudinal_acceleration"].as<double>();
79 params.vp_use_velocity_planning_ = planning_config["vp_use_velocity_planning"].as<bool>();
80 params.vp_desired_velocity_ = planning_config["vp_desired_velocity"].as<double>();
81
82 /*--------------------- Planning Configuration Parameters --------------------*/
84 planning_config["planning_publishing_visualization_msgs"].as<bool>();
85 params.planning_using_full_map_ = planning_config["planning_using_full_map"].as<bool>();
87 planning_config["planning_braking_distance_acceleration"].as<double>();
89 planning_config["planning_braking_distance_autocross"].as<double>();
90
91 if (adapter == "eufs") {
92 params.map_frame_id_ = "base_footprint";
93 } else {
94 params.map_frame_id_ = "map";
95 }
96
97 return params;
98}
99
100/*--------------------- Constructor --------------------*/
101
103 : Node("planning"),
104 planning_config_(params),
105 map_frame_id_(params.map_frame_id_),
106 desired_velocity_(params.vp_desired_velocity_) {
111
113 create_client<rcl_interfaces::srv::GetParameters>("/pacsim/pacsim_node/get_parameters");
114 if (planning_config_.adapter_ == "Pacsim" || planning_config_.adapter_ == "pacsim") {
116 }
117
118 path_pub_ = create_publisher<custom_interfaces::msg::PathPointArray>("/path_planning/path", 10);
119
121 create_publisher<std_msgs::msg::Float64>("/path_planning/execution_time", 10);
122
125 create_publisher<visualization_msgs::msg::MarkerArray>("/path_planning/yellow_cones", 10);
127 create_publisher<visualization_msgs::msg::MarkerArray>("/path_planning/blue_cones", 10);
129 create_publisher<visualization_msgs::msg::Marker>("/path_planning/triangulations", 10);
131 create_publisher<visualization_msgs::msg::MarkerArray>("/path_planning/path_to_car", 10);
133 create_publisher<visualization_msgs::msg::MarkerArray>("/path_planning/full_path", 10);
135 create_publisher<visualization_msgs::msg::Marker>("/path_planning/smoothed_path_", 10);
137 create_publisher<visualization_msgs::msg::MarkerArray>("/path_planning/velocity_hover", 10);
138 }
139
141 vehicle_localization_sub_ = create_subscription<custom_interfaces::msg::Pose>(
142 "/state_estimation/vehicle_pose", 10,
143 std::bind(&Planning::vehicle_localization_callback, this, std::placeholders::_1));
144
145 track_map_sub_ = create_subscription<custom_interfaces::msg::ConeArray>(
146 "/state_estimation/map", 10,
147 std::bind(&Planning::track_map_callback, this, std::placeholders::_1));
148
149 lap_counter_sub_ = create_subscription<std_msgs::msg::Float64>(
150 "/state_estimation/lap_counter", 10, [this](const std_msgs::msg::Float64::SharedPtr msg) {
151 lap_counter_ = static_cast<int>(msg->data);
152 });
153 }
154
155 RCLCPP_INFO(rclcpp::get_logger("planning"), "Using simulated state estimation: %d",
157}
158
159/*--------------------- Mission Management in Pacsim --------------------*/
160
162 Mission mission_result = Mission::NONE;
163
164 if (!param_client_->wait_for_service(std::chrono::milliseconds(100))) {
165 RCLCPP_ERROR(get_logger(), "Service /pacsim/pacsim_node/get_parameters not available.");
166 } else {
167 auto request = std::make_shared<rcl_interfaces::srv::GetParameters::Request>();
168 request->names.push_back("discipline");
169
170 (void)param_client_->async_send_request(
171 request, [this](rclcpp::Client<rcl_interfaces::srv::GetParameters>::SharedFuture future) {
172 auto response = future.get();
173 Mission mission_result = Mission::AUTOCROSS;
174
175 if (!response->values.empty() && response->values[0].type == 4) {
176 std::string discipline = response->values[0].string_value;
177 RCLCPP_INFO(get_logger(), "Discipline received: %s", discipline.c_str());
178
179 if (discipline == "skidpad") {
180 mission_result = Mission::SKIDPAD;
181 } else if (discipline == "acceleration") {
182 mission_result = Mission::ACCELERATION;
183 } else if (discipline == "trackdrive") {
184 mission_result = Mission::TRACKDRIVE;
185 } else {
186 mission_result = Mission::AUTOCROSS;
187 }
188 } else {
189 RCLCPP_ERROR(get_logger(), "Failed to retrieve discipline parameter.");
190 }
191
192 mission_ = mission_result;
193 });
194 }
195
196 mission_ = mission_result;
197}
198
199void Planning::set_mission(Mission mission) { mission_ = mission; }
200
201/*--------------------- Callbacks --------------------*/
202
203void Planning::vehicle_localization_callback(const custom_interfaces::msg::Pose &message) {
204 RCLCPP_DEBUG(get_logger(), "Received Pose: %lf - %lf - %lf", message.x, message.y, message.theta);
205
206 pose_ = Pose(message.x, message.y, message.theta);
208
209 if (!has_received_pose_) {
210 initial_car_orientation_ = message.theta;
211 }
212
215 }
216
217 has_received_pose_ = true;
218}
219
220void Planning::track_map_callback(const custom_interfaces::msg::ConeArray &message) {
221 int number_of_cones_received = static_cast<int>(message.cone_array.size());
222 RCLCPP_DEBUG(get_logger(), "Planning received %i cones", number_of_cones_received);
223
225 has_received_track_ = true;
226
227 if (has_received_pose_) {
229 }
230}
231
232/*--------------------- Mission-Specific Planning --------------------*/
233void Planning::compute_path_orientation(std::vector<PathPoint> &path) {
234 int n = static_cast<int>(path.size());
235 if (n <= 2) {
236 return;
237 }
238
239 if (!is_path_closed_) {
240 // Set orientation for the first point based on the first two points
241 double dx = path[1].position.x - path[0].position.x;
242 double dy = path[1].position.y - path[0].position.y;
243 path[0].orientation = std::atan2(dy, dx);
244
245 // Compute orientation for the rest of the points based on three consecutive points for better
246 // accuracy
247 for (int i = 1; i < n - 1; i++) {
248 dx = path[i + 1].position.x - path[i - 1].position.x;
249 dy = path[i + 1].position.y - path[i - 1].position.y;
250 path[i].orientation = std::atan2(dy, dx);
251 }
252
253 // Set orientation for the last point based on the last two points
254 dx = path[n - 1].position.x - path[n - 2].position.x;
255 dy = path[n - 1].position.y - path[n - 2].position.y;
256 path[n - 1].orientation = std::atan2(dy, dx);
257 } else {
258 // Orientation for circular path based on three consecutive points for better accuracy
259 for (int i = 0; i < n; i++) {
260 int prev = (i - 1 + n) % n;
261 int next = (i + 1) % n;
262
263 double dx = path[next].position.x - path[prev].position.x;
264 double dy = path[next].position.y - path[prev].position.y;
265
266 path[i].orientation = std::atan2(dy, dx);
267 }
268 }
269}
270
272 is_path_final_ = true;
274
275 const std::vector<PathPoint> yellow_cones = path_calculation_.get_yellow_cones();
276 const std::vector<PathPoint> blue_cones = path_calculation_.get_blue_cones();
277
278 smoothed_path_ = path_smoothing_.optimize_path(full_path_, yellow_cones, blue_cones);
281
282 if (smoothed_path_.size() > 1) {
283 double total_length = 0.0;
284 double lap_time = 0.0;
285
286 double sum_vel = 0.0;
287 double max_vel = smoothed_path_[0].ideal_velocity;
288 double min_vel = smoothed_path_[0].ideal_velocity;
289
290 for (size_t i = 1; i < smoothed_path_.size(); ++i) {
291 const auto &p1 = smoothed_path_[i - 1];
292 const auto &p2 = smoothed_path_[i];
293
294 // Euclidean distance
295 double dx = p2.position.x - p1.position.x;
296 double dy = p2.position.y - p1.position.y;
297 double ds = std::sqrt(dx * dx + dy * dy);
298
299 total_length += ds;
300
301 // Average segment velocity (more accurate)
302 double v_avg = (p1.ideal_velocity + p2.ideal_velocity) / 2.0;
303
304 // Avoid division by zero or very small speeds
305 v_avg = std::max(v_avg, 0.1);
306
307 lap_time += ds / v_avg;
308
309 // Stats
310 sum_vel += p1.ideal_velocity;
311 max_vel = std::max(max_vel, p1.ideal_velocity);
312 min_vel = std::min(min_vel, p1.ideal_velocity);
313 }
314
315 double avg_vel = sum_vel / smoothed_path_.size();
316
317 RCLCPP_DEBUG(get_logger(), "Trackdrive path calculated with %d points",
318 static_cast<int>(smoothed_path_.size()));
319
320 RCLCPP_DEBUG(get_logger(),
321 "Lap Time: %.2f s | Length: %.1f m | Avg: %.2f m/s | Min: %.2f m/s "
322 "| Max: %.2f m/s",
323 lap_time, total_length, avg_vel, min_vel, max_vel);
324 }
325}
326
333
360
387
388/*--------------------- Planning Algorithm Execution --------------------*/
389
391 RCLCPP_DEBUG(rclcpp::get_logger("planning"), "Running Planning Algorithms");
392
393 if (cone_array_.empty()) {
395 return;
396 }
397
398 rclcpp::Time start_time = now();
399
400 switch (mission_) {
401 case Mission::NONE:
402 RCLCPP_ERROR(get_logger(), "Mission is NONE, cannot run planning algorithms.");
403 return;
404
405 case Mission::SKIDPAD:
407 break;
408
409 case Mission::ACCELERATION:
410 case Mission::EBS_TEST:
412 break;
413
414 case Mission::AUTOCROSS:
416 break;
417
418 case Mission::TRACKDRIVE:
420 break;
421
422 default:
426 break;
427 }
428
429 if (smoothed_path_.size() < 10) {
430 RCLCPP_INFO(rclcpp::get_logger("planning"), "Final path size: %d",
431 static_cast<int>(smoothed_path_.size()));
432 }
433
434 if (!is_path_final_) {
436 }
437
438 publish_execution_time(start_time);
440
441 RCLCPP_DEBUG(get_logger(), "Planning will publish %i path points\n",
442 static_cast<int>(smoothed_path_.size()));
443
446 }
447}
448
449/*--------------------- Publishing --------------------*/
450
452 custom_interfaces::msg::PathPointArray message =
455 path_pub_->publish(message);
456}
457
458void Planning::publish_execution_time(rclcpp::Time start_time) {
459 rclcpp::Time end_time = now();
460 std_msgs::msg::Float64 planning_execution_time;
461 planning_execution_time.data = (end_time - start_time).seconds() * 1000;
462 planning_execution_time_pub_->publish(planning_execution_time);
463}
464
467 path_calculation_.get_triangulations(), "triangulations", map_frame_id_, 20, "white", 0.05f,
468 visualization_msgs::msg::Marker::MODIFY));
469
471 path_calculation_.get_yellow_cones(), "map_cones", map_frame_id_, "yellow"));
472
474 path_calculation_.get_blue_cones(), "map_cones", map_frame_id_, "blue"));
475
477 full_path_, "full_path", map_frame_id_, "orange"));
478
480 smoothed_path_, "smoothed_path__planning", map_frame_id_, 12, "green"));
481
483 path_calculation_.get_path_to_car(), "global_path", map_frame_id_, "white", "cylinder", 0.6,
484 visualization_msgs::msg::Marker::MODIFY));
485
488 smoothed_path_, "velocity", map_frame_id_, 0.25f,
490 } else {
492 smoothed_path_, "velocity", map_frame_id_, 0.25f, 1));
493 }
494}
Generates optimal local paths.
const std::vector< PathPoint > & get_yellow_cones() const
Gets the list of yellow cones detected or used in the path calculation.
std::vector< PathPoint > get_path_to_car() const
Get the path from the start to a lookback distance behind the car’s current position.
std::vector< PathPoint > calculate_path(const std::vector< Cone > &cone_array)
Generate a path from an array of cones.
bool is_map_closed(std::vector< PathPoint > &path) const
Checks if the path forms a closed loop and closes it if the transition cost is below config_....
const std::vector< PathPoint > & get_blue_cones() const
Gets the list of blue cones detected or used in the path calculation.
const std::vector< std::pair< Point, Point > > & get_triangulations() const
Get the triangulation segments used in path generation.
std::vector< PathPoint > calculate_trackdrive(const std::vector< Cone > &cone_array)
Generate a closed loop path for trackdrive competition.
void set_vehicle_pose(const common_lib::structures::Pose &vehicle_pose)
Set the current vehicle position and orientation.
class that defines the path smoothing algorithm
Definition smoothing.hpp:22
std::vector< PathPoint > smooth_path(const std::vector< PathPoint > &path, bool is_path_closed) const
Smooths a path by fitting a B-spline through the input points.
Definition smoothing.cpp:3
std::vector< PathPoint > optimize_path(const std::vector< PathPoint > &path, const std::vector< PathPoint > &yellow_cones, const std::vector< PathPoint > &blue_cones) const
Optimizes a racing line path by fitting splines through track boundaries and applying quadratic progr...
Definition smoothing.cpp:14
rclcpp::Publisher< visualization_msgs::msg::Marker >::SharedPtr smoothed_path_pub_
Publisher for velocity hover markers.
Definition planning.hpp:143
PathSmoothing path_smoothing_
Definition planning.hpp:102
void track_map_callback(const custom_interfaces::msg::ConeArray &message)
Callback for track map updates.
Definition planning.cpp:220
Planning(const PlanningParameters &params)
Constructs a Planning node with the specified configuration parameters.
Definition planning.cpp:102
bool is_path_closed_
Definition planning.hpp:111
void fetch_discipline()
Fetches the current mission/discipline from the pacsim simulation service.
Definition planning.cpp:161
void run_full_map()
Generates and optimizes a closed-loop global track path.
Definition planning.cpp:271
void vehicle_localization_callback(const custom_interfaces::msg::Pose &message)
Callback for vehicle localization pose updates.
Definition planning.cpp:203
rclcpp::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr velocity_hover_pub_
Definition planning.hpp:145
std::vector< Cone > cone_array_
Definition planning.hpp:118
bool is_path_final_
Definition planning.hpp:110
std::string map_frame_id_
Definition planning.hpp:95
rclcpp::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr path_to_car_pub_
Publisher for the entire planned path (from start to finish)
Definition planning.hpp:139
rclcpp::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr yellow_cones_pub_
< Publisher for the yellow cones
Definition planning.hpp:132
void run_acceleration()
Executes planning for the acceleration mission.
Definition planning.cpp:327
PathCalculation path_calculation_
Definition planning.hpp:101
Mission mission_
Definition planning.hpp:92
void set_mission(Mission mission)
Sets the mission type for planning execution.
Definition planning.cpp:199
static PlanningParameters load_config(std::string &adapter)
Loads planning configuration from YAML files.
Definition planning.cpp:11
rclcpp::Subscription< custom_interfaces::msg::Pose >::SharedPtr vehicle_localization_sub_
Definition planning.hpp:121
void run_autocross()
Executes planning for the autocross mission.
Definition planning.cpp:334
rclcpp::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr full_path_pub_
Publisher for the smoothed path.
Definition planning.hpp:141
std::vector< PathPoint > smoothed_path_
Definition planning.hpp:117
double initial_car_orientation_
Definition planning.hpp:97
rclcpp::Publisher< visualization_msgs::msg::Marker >::SharedPtr triangulations_pub_
Publisher for the past portion of the path (from the start to a lookback distance behind the car’s cu...
Definition planning.hpp:136
void compute_path_orientation(std::vector< PathPoint > &path)
Computes and assigns the orientation for each point in the path.
Definition planning.cpp:233
rclcpp::Publisher< visualization_msgs::msg::MarkerArray >::SharedPtr blue_cones_pub_
Publisher for Delaunay triangulations.
Definition planning.hpp:134
rclcpp::Subscription< custom_interfaces::msg::ConeArray >::SharedPtr track_map_sub_
Definition planning.hpp:122
void run_trackdrive()
Executes planning for the trackdrive mission.
Definition planning.cpp:361
std::vector< PathPoint > full_path_
Definition planning.hpp:116
rclcpp::Publisher< std_msgs::msg::Float64 >::SharedPtr planning_execution_time_pub_
Definition planning.hpp:128
Skidpad skidpad_
Definition planning.hpp:104
PlanningConfig planning_config_
Definition planning.hpp:93
rclcpp::Client< rcl_interfaces::srv::GetParameters >::SharedPtr param_client_
Definition planning.hpp:148
rclcpp::Subscription< std_msgs::msg::Float64 >::SharedPtr lap_counter_sub_
Definition planning.hpp:123
bool has_received_track_
Definition planning.hpp:108
void publish_path_points() const
Publishes the final planned path to the control module.
Definition planning.cpp:451
void publish_execution_time(rclcpp::Time start_time)
Publishes the planning algorithm execution time.
Definition planning.cpp:458
rclcpp::Publisher< custom_interfaces::msg::PathPointArray >::SharedPtr path_pub_
< Publisher of the smoothed path to control
Definition planning.hpp:127
bool has_received_pose_
Definition planning.hpp:109
int lap_counter_
Definition planning.hpp:98
Pose pose_
Definition planning.hpp:94
void publish_visualization_msgs() const
Publishes all visualization markers.
Definition planning.cpp:465
void run_planning_algorithms()
Runs the appropriate planning algorithm based on current mission.
Definition planning.cpp:390
VelocityPlanning velocity_planning_
Definition planning.hpp:103
class that defines the skidpad path algorithm
Definition skidpad.hpp:23
std::vector< PathPoint > skidpad_path(const std::vector< Cone > &cone_array, common_lib::structures::Pose pose)
Generate a path for skidpad course.
Definition skidpad.cpp:85
Computes velocity profiles for a planned path based on curvature and dynamics constraints.
void stop(std::vector< PathPoint > &final_path, double braking_distance)
Applies a braking velocity profile starting after a given braking distance.
void set_velocity(std::vector< PathPoint > &final_path)
Assigns an velocity to each point of the path.
void trackdrive_velocity(std::vector< PathPoint > &final_path)
Computes velocity for trackdrive scenarios.
custom_interfaces::msg::ConeArray custom_interfaces_array_from_vector(const std::vector< common_lib::structures::Cone > &input_cones)
std::vector< common_lib::structures::Cone > cone_vector_from_custom_interfaces(const custom_interfaces::msg::ConeArray &msg)
visualization_msgs::msg::Marker line_marker_from_structure_array(const std::vector< T > &structure_array, const std::string &name_space, const std::string &frame_id, const int id, const std::string &color="red", const std::string &shape="line", float scale=0.1f, int action=visualization_msgs::msg::Marker::MODIFY)
Converts a vector of cones to a marker array.
Definition marker.hpp:158
visualization_msgs::msg::MarkerArray marker_array_from_structure_array(const std::vector< T > &structure_array, const std::string &name_space, const std::string &frame_id, const std::string &color="red", const std::string &shape="cylinder", float scale=0.5, int action=visualization_msgs::msg::Marker::MODIFY)
Converts a vector of cones to a marker array.
Definition marker.hpp:79
visualization_msgs::msg::MarkerArray velocity_hover_markers(const std::vector< common_lib::structures::PathPoint > &path_array, const std::string &name_space, const std::string &frame_id, float scale=0.2f, int every_nth=1)
Creates sphere markers at each path point with velocity in the marker namespace When you hover over t...
Definition marker.cpp:79
visualization_msgs::msg::Marker lines_marker_from_triangulations(const std::vector< std::pair< Point, Point > > &triangulations, const std::string &name_space, const std::string &frame_id, int id, const std::string &color, float scale, int action)
Converts a vector of triangulation edges to a marker.
Definition marker.cpp:41
std::string get_config_yaml_path(const std::string &package_name, const std::string &dir, const std::string &filename)
std::string discipline
common_lib::competition_logic::Mission Mission
Definition planning.hpp:35
common_lib::structures::Pose Pose
Definition planning.hpp:34
bool use_path_smoothing_
Flag to enable/disable spline-based path smoothing.
int spline_precision_
Number of interpolated points between each pair of input points.
bool publishing_visualization_msgs_
double braking_distance_acceleration_
PathCalculationConfig path_calculation_
PathSmoothingConfig smoothing_
VelocityPlanningConfig velocity_planning_
SkidpadConfig skidpad_
double braking_distance_autocross_
double planning_braking_distance_acceleration_
Distance to start braking during acceleration mode.
double planning_braking_distance_autocross_
Distance to start braking during autocross/trackdrive mode.
bool planning_using_full_map_
Flag to enable/disable using planning with the full map.
std::string planning_adapter_
The adapter planning is currently using like Pacsim, Vehicle...
bool planning_using_simulated_se_
Flag to enable/disable the use of simulated State Estimation.
bool planning_publishing_visualization_msgs_
Flag to enable/disable publishing of visualization messages.
float smoothing_min_path_point_distance_