21#include <boost/uuid/uuid_generators.hpp>
22#include <boost/uuid/uuid_io.hpp>
23#include <lanelet2_core/geometry/Point.h>
24#include <trajectory_utils/trajectory_utils.hpp>
25#include <trajectory_utils/conversions/conversions.hpp>
28#include <carma_ros2_utils/containers/containers.hpp>
30#include <Eigen/Geometry>
33#include <unordered_set>
35using oss = std::ostringstream;
40 std::shared_ptr<carma_ros2_utils::timers::TimerFactory> timer_factory)
41 : wm_(wm), config_(config), timer_factory_(timer_factory)
45 carma_planning_msgs::srv::PlanTrajectory::Response& resp)
47 auto start_time = std::chrono::high_resolution_clock::now();
49 lanelet::BasicPoint2d veh_pos(req.vehicle_state.x_pos_global, req.vehicle_state.y_pos_global);
50 double current_downtrack =
wm_->routeTrackPos(veh_pos).downtrack;
53 std::vector<carma_planning_msgs::msg::Maneuver> maneuver_plan;
54 for(
size_t i = req.maneuver_index_to_plan;
i < req.maneuver_plan.maneuvers.size();
i++)
56 if(req.maneuver_plan.maneuvers[
i].type == carma_planning_msgs::msg::Maneuver::LANE_FOLLOWING)
58 if (req.maneuver_plan.maneuvers[
i].lane_following_maneuver.parameters.negotiation_type != carma_planning_msgs::msg::ManeuverParameters::NO_NEGOTIATION)
60 maneuver_plan.push_back(req.maneuver_plan.maneuvers[
i]);
61 resp.related_maneuvers.push_back(
i);
89 RCLCPP_DEBUG_STREAM(rclcpp::get_logger(
"platooning_tactical_plugin"),
"points_and_target_speeds: " << points_and_target_speeds.size());
91 RCLCPP_DEBUG_STREAM(rclcpp::get_logger(
"platooning_tactical_plugin"),
"PlanTrajectory");
93 carma_planning_msgs::msg::TrajectoryPlan original_trajectory;
94 original_trajectory.header.frame_id =
"map";
100 original_trajectory.initial_longitudinal_velocity = std::max(req.vehicle_state.longitudinal_vel,
config_.
minimum_speed);
102 resp.trajectory_plan = original_trajectory;
105 debug_msg_.trajectory_plan = resp.trajectory_plan;
109 resp.maneuver_status.push_back(carma_planning_msgs::srv::PlanTrajectory::Response::MANEUVER_IN_PROGRESS);
111 auto end_time = std::chrono::high_resolution_clock::now();
113 auto nano_s = std::chrono::duration_cast<std::chrono::nanoseconds>(end_time - start_time);
114 RCLCPP_DEBUG_STREAM(rclcpp::get_logger(
"platooning_tactical_plugin"),
"ExecutionTime: " << ((
double)nano_s.count() * 1e9));
carma_planning_msgs::msg::VehicleState ending_state_before_buffer_
carma_debug_ros2_msgs::msg::TrajectoryCurvatureSpeeds debug_msg_
std::shared_ptr< carma_ros2_utils::timers::TimerFactory > timer_factory_
DebugPublisher debug_publisher_
PlatooningTacticalPlugin(carma_wm::WorldModelConstPtr wm, PlatooningTacticalPluginConfig config, std::shared_ptr< carma_ros2_utils::timers::TimerFactory > timer_factory)
Constructor.
carma_wm::WorldModelConstPtr wm_
void set_config(PlatooningTacticalPluginConfig config)
Set the current config.
bool plan_trajectory_cb(carma_planning_msgs::srv::PlanTrajectory::Request &req, carma_planning_msgs::srv::PlanTrajectory::Response &resp)
Service callback for trajectory planning.
PlatooningTacticalPluginConfig config_
GeneralTrajConfig compose_general_trajectory_config(const std::string &trajectory_type, int default_downsample_ratio, int turn_downsample_ratio)
DetailedTrajConfig compose_detailed_trajectory_config(double trajectory_time_length, double curve_resample_step_size, double minimum_speed, double max_accel, double lateral_accel_limit, int speed_moving_average_window_size, int curvature_moving_average_window_size, double back_distance, double buffer_ending_downtrack, std::string desired_controller_plugin="default")
std::vector< PointSpeedPair > create_geometry_profile(const std::vector< carma_planning_msgs::msg::Maneuver > &maneuvers, double max_starting_downtrack, const carma_wm::WorldModelConstPtr &wm, carma_planning_msgs::msg::VehicleState &ending_state_before_buffer, const carma_planning_msgs::msg::VehicleState &state, const GeneralTrajConfig &general_config, const DetailedTrajConfig &detailed_config)
Creates geometry profile to return a point speed pair struct for LANE FOLLOW and LANE CHANGE maneuver...
std::vector< carma_planning_msgs::msg::TrajectoryPlanPoint > compose_lanefollow_trajectory_from_path(const std::vector< PointSpeedPair > &points, const carma_planning_msgs::msg::VehicleState &state, const rclcpp::Time &state_time, const carma_wm::WorldModelConstPtr &wm, const carma_planning_msgs::msg::VehicleState &ending_state_before_buffer, carma_debug_ros2_msgs::msg::TrajectoryCurvatureSpeeds &debug_msg, const DetailedTrajConfig &detailed_config)
Method converts a list of lanelet centerline points and current vehicle state into a usable list of t...
auto to_string(const UtmZone &zone) -> std::string
std::shared_ptr< const WorldModel > WorldModelConstPtr
Stuct containing the algorithm configuration values for the PlatooningTacticalPlugin.
double lateral_accel_limit
int speed_moving_average_window_size
double lat_accel_multiplier
int default_downsample_ratio
std::string desired_controller_plugin
int turn_downsample_ratio
int curvature_moving_average_window_size
double trajectory_time_length
double max_accel_multiplier
double buffer_ending_downtrack
double curve_resample_step_size