Carma-platform v4.11.0
CARMA Platform is built on robot operating system (ROS) and utilizes open source software (OSS) that enables Cooperative Driving Automation (CDA) features to allow Automated Driving Systems to interact and cooperate with infrastructure and other vehicles through communication.
inlanecruising_plugin::InLaneCruisingPlugin Class Reference

Class containing primary business logic for the In-Lane Cruising Plugin. More...

#include <inlanecruising_plugin.hpp>

Collaboration diagram for inlanecruising_plugin::InLaneCruisingPlugin:
Collaboration graph

Public Member Functions

 InLaneCruisingPlugin (std::shared_ptr< carma_ros2_utils::CarmaLifecycleNode > nh, carma_wm::WorldModelConstPtr wm, const InLaneCruisingPluginConfig &config, const DebugPublisher &debug_publisher=[](const auto &msg){}, const std::string &plugin_name="inlanecruising_plugin", const std::string &version_id="v1.0")
 Constructor. More...
 
void plan_trajectory_callback (carma_planning_msgs::srv::PlanTrajectory::Request::SharedPtr req, carma_planning_msgs::srv::PlanTrajectory::Response::SharedPtr resp)
 Service callback for trajectory planning. More...
 

Public Attributes

carma_planning_msgs::msg::VehicleState ending_state_before_buffer_
 

Private Member Functions

 FRIEND_TEST (InLaneCruisingPluginTest, rostest1)
 

Private Attributes

std::string plugin_name_
 
std::string version_id_
 
carma_wm::WorldModelConstPtr wm_
 
InLaneCruisingPluginConfig config_
 
DebugPublisher debug_publisher_
 
carma_debug_ros2_msgs::msg::TrajectoryCurvatureSpeeds debug_msg_
 
std::shared_ptr< carma_ros2_utils::CarmaLifecycleNode > nh_
 

Detailed Description

Class containing primary business logic for the In-Lane Cruising Plugin.

Definition at line 50 of file inlanecruising_plugin.hpp.

Constructor & Destructor Documentation

◆ InLaneCruisingPlugin()

inlanecruising_plugin::InLaneCruisingPlugin::InLaneCruisingPlugin ( std::shared_ptr< carma_ros2_utils::CarmaLifecycleNode >  nh,
carma_wm::WorldModelConstPtr  wm,
const InLaneCruisingPluginConfig config,
const DebugPublisher debug_publisher = [](const auto& msg){},
const std::string &  plugin_name = "inlanecruising_plugin",
const std::string &  version_id = "v1.0" 
)

Constructor.

Parameters
nhPointer to the lifecyle node
wmPointer to intialized instance of the carma world model for accessing semantic map data
configThe configuration to be used for this object
debug_publisherCallback which will publish a debug message. The callback defaults to no-op.
plugin_nameRetrieved from the plugin node
version_idRetrieved from the plugin node

Definition at line 41 of file inlanecruising_plugin.cpp.

47 : nh_(nh), wm_(wm), config_(config), debug_publisher_(debug_publisher), plugin_name_(plugin_name), version_id_ (version_id)
48{
49 basic_autonomy::set_logger(nh_->get_logger().get_child("basic_autonomy"));
50}
std::shared_ptr< carma_ros2_utils::CarmaLifecycleNode > nh_
void set_logger(rclcpp::Logger logger)
Replace the module-level logger used by all basic_autonomy functions.
Definition: log.cpp:33
string version_id

References nh_, and basic_autonomy::set_logger().

Here is the call graph for this function:

Member Function Documentation

◆ FRIEND_TEST()

inlanecruising_plugin::InLaneCruisingPlugin::FRIEND_TEST ( InLaneCruisingPluginTest  ,
rostest1   
)
private

◆ plan_trajectory_callback()

void inlanecruising_plugin::InLaneCruisingPlugin::plan_trajectory_callback ( carma_planning_msgs::srv::PlanTrajectory::Request::SharedPtr  req,
carma_planning_msgs::srv::PlanTrajectory::Response::SharedPtr  resp 
)

Service callback for trajectory planning.

Parameters
srv_headerheader
reqThe service request
respThe service response

Definition at line 52 of file inlanecruising_plugin.cpp.

55{
56 std::chrono::system_clock::time_point start_time = std::chrono::system_clock::now(); // Start timing the execution time for planning so it can be logged
57
58 lanelet::BasicPoint2d veh_pos(req->vehicle_state.x_pos_global, req->vehicle_state.y_pos_global);
59 double current_downtrack = wm_->routeTrackPos(veh_pos).downtrack;
60
61 // Only plan the trajectory for the initial LANE_FOLLOWING maneuver and any immediately sequential maneuvers of the same type
62 std::vector<carma_planning_msgs::msg::Maneuver> maneuver_plan;
63 for(size_t i = req->maneuver_index_to_plan; i < req->maneuver_plan.maneuvers.size(); i++)
64 {
65 if(req->maneuver_plan.maneuvers[i].type == carma_planning_msgs::msg::Maneuver::LANE_FOLLOWING)
66 {
67 maneuver_plan.push_back(req->maneuver_plan.maneuvers[i]);
68 resp->related_maneuvers.push_back((uint8_t)i);
69 }
70 else
71 {
72 break;
73 }
74 }
75
78
82
90
91 auto points_and_target_speeds = basic_autonomy::waypoint_generation::create_geometry_profile(maneuver_plan, std::max((double)0, current_downtrack - config_.back_distance),
92 wm_, ending_state_before_buffer_, req->vehicle_state, wpg_general_config, wpg_detail_config);
93
94 RCLCPP_DEBUG_STREAM(nh_->get_logger(), "points_and_target_speeds: " << points_and_target_speeds.size());
95
96 RCLCPP_DEBUG_STREAM(nh_->get_logger(), "PlanTrajectory");
97
98 carma_planning_msgs::msg::TrajectoryPlan original_trajectory;
99 original_trajectory.header.frame_id = "map";
100 original_trajectory.header.stamp = nh_->now();
101 original_trajectory.trajectory_id = boost::uuids::to_string(boost::uuids::random_generator()());
102
103 original_trajectory.trajectory_points = basic_autonomy:: waypoint_generation::compose_lanefollow_trajectory_from_path(points_and_target_speeds,
104 req->vehicle_state, req->header.stamp, wm_, ending_state_before_buffer_, debug_msg_,
105 wpg_detail_config); // Compute the trajectory
106 original_trajectory.initial_longitudinal_velocity = std::max(req->vehicle_state.longitudinal_vel, config_.minimum_speed);
107
108 // Set the planning plugin field name
109 for (auto& p : original_trajectory.trajectory_points) {
110 p.planner_plugin_name = plugin_name_;
111 }
112
113 resp->trajectory_plan = original_trajectory;
114
115 if (config_.publish_debug) { // Publish the debug message if in debug logging mode
116 debug_msg_.trajectory_plan = resp->trajectory_plan;
118 }
119
120 resp->maneuver_status.push_back(carma_planning_msgs::srv::PlanTrajectory::Response::MANEUVER_IN_PROGRESS);
121
122 std::chrono::system_clock::time_point end_time = std::chrono::system_clock::now(); // Planning complete
123
124 auto duration = end_time - start_time;
125 RCLCPP_DEBUG_STREAM(
126 rclcpp::get_logger("inlanecruising_plugin"),
127 "ILC ExecutionTime: " << std::chrono::duration<double>(duration).count());
128}
carma_debug_ros2_msgs::msg::TrajectoryCurvatureSpeeds debug_msg_
carma_planning_msgs::msg::VehicleState ending_state_before_buffer_
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...
rclcpp::Logger get_logger()
Return the module-level logger used by all basic_autonomy functions.
Definition: log.cpp:32
auto to_string(const UtmZone &zone) -> std::string
Definition: utm_zone.cpp:21

References InLaneCruisingPluginConfig::back_distance, InLaneCruisingPluginConfig::buffer_ending_downtrack, basic_autonomy::waypoint_generation::compose_detailed_trajectory_config(), basic_autonomy::waypoint_generation::compose_general_trajectory_config(), basic_autonomy::waypoint_generation::compose_lanefollow_trajectory_from_path(), config_, basic_autonomy::waypoint_generation::create_geometry_profile(), InLaneCruisingPluginConfig::curvature_moving_average_window_size, InLaneCruisingPluginConfig::curve_resample_step_size, debug_msg_, debug_publisher_, InLaneCruisingPluginConfig::default_downsample_ratio, ending_state_before_buffer_, basic_autonomy::get_logger(), process_bag::i, InLaneCruisingPluginConfig::lat_accel_multiplier, InLaneCruisingPluginConfig::lateral_accel_limit, InLaneCruisingPluginConfig::max_accel, InLaneCruisingPluginConfig::max_accel_multiplier, InLaneCruisingPluginConfig::minimum_speed, nh_, plugin_name_, InLaneCruisingPluginConfig::publish_debug, InLaneCruisingPluginConfig::speed_moving_average_window_size, carma_cooperative_perception::to_string(), InLaneCruisingPluginConfig::trajectory_time_length, InLaneCruisingPluginConfig::turn_downsample_ratio, and wm_.

Here is the call graph for this function:

Member Data Documentation

◆ config_

InLaneCruisingPluginConfig inlanecruising_plugin::InLaneCruisingPlugin::config_
private

Definition at line 87 of file inlanecruising_plugin.hpp.

Referenced by plan_trajectory_callback().

◆ debug_msg_

carma_debug_ros2_msgs::msg::TrajectoryCurvatureSpeeds inlanecruising_plugin::InLaneCruisingPlugin::debug_msg_
private

Definition at line 89 of file inlanecruising_plugin.hpp.

Referenced by plan_trajectory_callback().

◆ debug_publisher_

DebugPublisher inlanecruising_plugin::InLaneCruisingPlugin::debug_publisher_
private

Definition at line 88 of file inlanecruising_plugin.hpp.

Referenced by plan_trajectory_callback().

◆ ending_state_before_buffer_

carma_planning_msgs::msg::VehicleState inlanecruising_plugin::InLaneCruisingPlugin::ending_state_before_buffer_

Definition at line 80 of file inlanecruising_plugin.hpp.

Referenced by plan_trajectory_callback().

◆ nh_

std::shared_ptr<carma_ros2_utils::CarmaLifecycleNode> inlanecruising_plugin::InLaneCruisingPlugin::nh_
private

Definition at line 90 of file inlanecruising_plugin.hpp.

Referenced by InLaneCruisingPlugin(), and plan_trajectory_callback().

◆ plugin_name_

std::string inlanecruising_plugin::InLaneCruisingPlugin::plugin_name_
private

Definition at line 84 of file inlanecruising_plugin.hpp.

Referenced by plan_trajectory_callback().

◆ version_id_

std::string inlanecruising_plugin::InLaneCruisingPlugin::version_id_
private

Definition at line 85 of file inlanecruising_plugin.hpp.

◆ wm_

carma_wm::WorldModelConstPtr inlanecruising_plugin::InLaneCruisingPlugin::wm_
private

Definition at line 86 of file inlanecruising_plugin.hpp.

Referenced by plan_trajectory_callback().


The documentation for this class was generated from the following files: