Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
planning.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <yaml-cpp/yaml.h>
4
5#include <chrono>
6#include <functional>
7#include <map>
8#include <memory>
9#include <rclcpp/rclcpp.hpp>
10#include <string>
11#include <vector>
12
19#include "custom_interfaces/msg/cone_array.hpp"
20#include "custom_interfaces/msg/path_point.hpp"
21#include "custom_interfaces/msg/path_point_array.hpp"
22#include "custom_interfaces/msg/point2d.hpp"
23#include "custom_interfaces/msg/point_array.hpp"
24#include "custom_interfaces/msg/pose.hpp"
26#include "planning/skidpad.hpp"
29#include "rcl_interfaces/srv/get_parameters.hpp"
30#include "std_msgs/msg/float64.hpp"
31#include "std_srvs/srv/trigger.hpp"
32
36
54class Planning : public rclcpp::Node {
55public:
65 explicit Planning(const PlanningParameters &params);
66
76 static PlanningParameters load_config(std::string &adapter);
77
83 void set_mission(Mission mission);
84
85 friend class PacSimAdapter;
86 friend class EufsAdapter;
87 friend class FsdsAdapter;
88 friend class VehicleAdapter;
89
90private:
91 /*--------------------- Mission and Configuration --------------------*/
92 Mission mission_ = Mission::NONE;
95 std::string map_frame_id_;
98 int lap_counter_ = 0;
99
100 /*--------------------- Planning Modules --------------------*/
105
106 /*--------------------- State Tracking --------------------*/
107 bool is_braking_ = false;
109 bool has_received_pose_ = false;
110 bool is_path_final_ = false;
111 bool is_path_closed_ = false;
112 std::chrono::steady_clock::time_point brake_time_;
113
114 /*--------------------- Path Data --------------------*/
115
116 std::vector<PathPoint> full_path_;
117 std::vector<PathPoint> smoothed_path_;
118 std::vector<Cone> cone_array_;
119
120 /*--------------------- Subscriptions --------------------*/
121 rclcpp::Subscription<custom_interfaces::msg::Pose>::SharedPtr vehicle_localization_sub_;
122 rclcpp::Subscription<custom_interfaces::msg::ConeArray>::SharedPtr track_map_sub_;
123 rclcpp::Subscription<std_msgs::msg::Float64>::SharedPtr lap_counter_sub_;
124
125 /*--------------------- Publishers --------------------*/
127 rclcpp::Publisher<custom_interfaces::msg::PathPointArray>::SharedPtr path_pub_;
128 rclcpp::Publisher<std_msgs::msg::Float64>::SharedPtr planning_execution_time_pub_;
129
130 /*--------------------- Visualization Publishers --------------------*/
132 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr yellow_cones_pub_;
134 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr blue_cones_pub_;
136 rclcpp::Publisher<visualization_msgs::msg::Marker>::SharedPtr triangulations_pub_;
139 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr path_to_car_pub_;
141 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr full_path_pub_;
143 rclcpp::Publisher<visualization_msgs::msg::Marker>::SharedPtr smoothed_path_pub_;
145 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr velocity_hover_pub_;
146
147 /*--------------------- Service Clients --------------------*/
148 rclcpp::Client<rcl_interfaces::srv::GetParameters>::SharedPtr param_client_;
149
150 /*--------------------- Callbacks --------------------*/
159 void vehicle_localization_callback(const custom_interfaces::msg::Pose &message);
160
169 void track_map_callback(const custom_interfaces::msg::ConeArray &message);
170
171 /*--------------------- Mission-Specific Planning --------------------*/
177 void compute_path_orientation(std::vector<PathPoint> &path);
183 void run_full_map();
188 void run_acceleration();
189
197 void run_autocross();
198
207 void run_trackdrive();
208
209 /*--------------------- Core Planning Operations --------------------*/
214 void fetch_discipline();
215
223
224 /*--------------------- Publishing --------------------*/
229 void publish_path_points() const;
230
237 void publish_visualization_msgs() const;
238
245 void publish_execution_time(rclcpp::Time start_time);
246
247 /*--------------------- Abstract Methods --------------------*/
252 virtual void finish() = 0;
253};
Adapter class to interface with the EUFS simulator.
Definition eufs.hpp:14
Adapter for the PacSim simulator.
Definition pacsim.hpp:16
Generates optimal local paths.
class that defines the path smoothing algorithm
Definition smoothing.hpp:22
Responsible for path planning and trajectory generation for the autonomous vehicle.
Definition planning.hpp:54
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
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
bool is_braking_
Definition planning.hpp:107
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
std::chrono::steady_clock::time_point brake_time_
Definition planning.hpp:112
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
virtual void finish()=0
Called when planning mission is completed.
double desired_velocity_
Definition planning.hpp:96
VelocityPlanning velocity_planning_
Definition planning.hpp:103
class that defines the skidpad path algorithm
Definition skidpad.hpp:23
Adapter for interfacing with the real vehicle hardware.
Definition vehicle.hpp:15
Computes velocity profiles for a planned path based on curvature and dynamics constraints.
common_lib::competition_logic::Mission Mission
Definition planning.hpp:35
Definition types.hpp:66
Struct for pose representation.
Definition pose.hpp:13