From 067cfb70d2b92ca9e51ce90bb8bdc5ea8e23c1b6 Mon Sep 17 00:00:00 2001 From: Berkay Karaman Date: Tue, 18 Apr 2023 03:23:12 +0300 Subject: [PATCH] readme --- control/predicted_path_checker/README.md | 93 ++++++++++++++++-- .../config/predicted_path_checker.param.yaml | 13 ++- .../images/FlowChart.png | Bin 0 -> 62997 bytes .../images/Z_axis_filtering.png | Bin 0 -> 22632 bytes .../predicted_path_checker_node.hpp | 6 +- .../launch/predicted_path_checker.launch.xml | 10 +- .../debug_marker.cpp | 4 +- .../predicted_path_checker_node.cpp | 26 ++--- 8 files changed, 110 insertions(+), 42 deletions(-) create mode 100644 control/predicted_path_checker/images/FlowChart.png create mode 100644 control/predicted_path_checker/images/Z_axis_filtering.png diff --git a/control/predicted_path_checker/README.md b/control/predicted_path_checker/README.md index ee904472958ab..91315e4b713c5 100644 --- a/control/predicted_path_checker/README.md +++ b/control/predicted_path_checker/README.md @@ -1,23 +1,96 @@ -# predicted_path_checker +# Predicted Path Checker ## Purpose -## Inner-workings / Algorithms +The Predicted Path Checker package is designed for autonomous vehicles to check the predicted path generated by control +modules. It handles potential collisions that the planning module might not be able to handle and that in the brake +distance. In case of collision in brake distance, the package will send a diagnostic message labeled "ERROR" to alert +the system to send emergency and in the case of collisions in outside reference trajectory, it sends pause request to +pause interface to make the vehicle stop. -### Flow chart +## Algorithm -### Algorithms +The package algorithm evaluates the predicted trajectory against the reference trajectory and the predicted objects in +the environment. It checks for potential collisions and, if necessary, generates an appropriate response to avoid them ( +emergency or pause request). -### Check data +### Inner Algorithm -### Diagnostic update +![FlowChart.png](images%2FFlowChart.png) -## Inputs / Outputs +**cutTrajectory() ->** It cuts the predicted trajectory with input length. Length is calculated by multiplying the +velocity +of ego vehicle with "trajectory_check_time" parameter and "min_trajectory_length". -### Input +**checkTrajectoryForCollision() ->** It checks the predicted trajectory for collision with the predicted objects. It +calculates both polygon of trajectory points and predicted objects and checks intersection of both polygons. If there is +an intersection, it calculates the nearest collision point. It returns the nearest collision point of polygon and the +predicted object. It also checks predicted objects history which are intersect with the footprint before to avoid +unexpected behaviors. Predicted objects history stores the objects if it was detected below the "chattering_threshold" +seconds ago. -### Output +If the "enable_z_axis_obstacle_filtering" parameter is set to true, it filters the predicted objects in the Z-axis by +using "z_axis_filtering_buffer". If the object does not intersect with the Z-axis, it is filtered out. + +![Z_axis_filtering.png](images%2FZ_axis_filtering.png) + +**calculateProjectedVelAndAcc() ->** It calculates the projected velocity and acceleration of the predicted object on +predicted trajectory's collision point's axes. + +**isInBrakeDistance() ->** It checks if the stop point is in brake distance. It gets relative velocity and +acceleration of ego vehicle with respect to the predicted object. It calculates the brake distance, if the point in +brake distance, it returns true. + +**isItDiscretePoint() ->** It checks if the stop point on predicted trajectory is discrete point or not. If it is not +discrete point, planning should handle the stop. + +**isThereStopPointOnRefTrajectory() ->** It checks if there is a stop point on reference trajectory. If there is a stop +point before the stop index, it returns true. Otherwise, it returns false, and node is going to call pause interface to +make the vehicle stop. + +## Inputs + +| Name | Type | Description | +|---------------------------------------|-------------------------------------------------------|-----------------------------------------------------| +| `~/input/reference_trajectory` | `autoware_auto_planning_msgs::msg::Trajectory` | Reference trajectory | +| `~/input/predicted_trajectory` | `autoware_auto_planning_msgs::msg::Trajectory` | Predicted trajectory | +| `~/input/objects` | `autoware_auto_perception_msgs::msg::PredictedObject` | Dynamic objects in the environment | +| `~/input/odometry` | `nav_msgs::msg::Odometry` | Odometry message of vehicle to get current velocity | +| `~/input/current_accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | Current acceleration | +| `/control/vehicle_cmd_gate/is_paused` | `tier4_control_msgs::msg::IsPaused` | Current pause state of the vehicle | + +## Outputs + +| Name | Type | Description | +|---------------------------------------|------------------------------------------|----------------------------------------| +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | Marker for visualization | +| `~/debug/virtual_wall` | `visualization_msgs::msg::MarkerArray` | Virtual wall marker for visualization | +| `/control/vehicle_cmd_gate/set_pause` | `tier4_control_msgs::srv::SetPause` | Pause service to make the vehicle stop | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticStatus` | Diagnostic status of vehicle | ## Parameters -## Assumptions / Known limits +**Node Parameters** + +| Name | Type | Description | Default value | +|:------------------------------------|:---------|:--------------------------------------------------------|:--------------| +| `update_rate` | `double` | The update rate [Hz] | 10.0 | +| `delay_time` | `double` | he time delay considered for the emergency response [s] | 0.17 | +| `max_deceleration` | `double` | Max deceleration for ego vehicle to stop [m/s^2] | 1.5 | +| `resample_interval` | `double` | Interval for resampling trajectory [m] | 0.5 | +| `stop_margin` | `double` | The stopping margin [m] | 0.5 | +| `ego_nearest_dist_threshold` | `double` | The nearest distance threshold for ego vehicle [m] | 3.0 | +| `ego_nearest_yaw_threshold` | `double` | The nearest yaw threshold for ego vehicle [rad] | 1.046 | +| `min_trajectory_check_length` | `double` | The minimum trajectory check length in meters [m] | 1.5 | +| `trajectory_check_time` | `double` | The trajectory check time in seconds. [s] | 3.0 | +| `distinct_point_distance_threshold` | `double` | The distinct point distance threshold [m] | 0.3 | +| `distinct_point_yaw_threshold` | `double` | The distinct point yaw threshold [deg] | 5.0 | + +**Collision Checker Parameters** + +| Name | Type | Description | Default value | +|:-----------------------------------|:---------|:------------------------------------------------------------------|:--------------| +| `width_margin` | `double` | The width margin for collision checking [Hz] | 0.2 | +| `chattering_threshold` | `double` | The chattering threshold for collision detection [s] | 0.2 | +| `z_axis_filtering_buffer` | `double` | The Z-axis filtering buffer [m] | 0.3 | +| `enable_z_axis_obstacle_filtering` | `bool` | A boolean flag indicating if Z-axis obstacle filtering is enabled | false | diff --git a/control/predicted_path_checker/config/predicted_path_checker.param.yaml b/control/predicted_path_checker/config/predicted_path_checker.param.yaml index cf2621b333491..0aa577de3098d 100644 --- a/control/predicted_path_checker/config/predicted_path_checker.param.yaml +++ b/control/predicted_path_checker/config/predicted_path_checker.param.yaml @@ -2,20 +2,19 @@ ros__parameters: # Node update_rate: 10.0 - max_deceleration: 1.5 delay_time: 0.17 + max_deceleration: 1.5 + resample_interval: 0.5 + stop_margin: 0.5 # [m] ego_nearest_dist_threshold: 3.0 # [m] ego_nearest_yaw_threshold: 1.046 # [rad] = 60 [deg] - stop_margin: 0.5 # [m] min_trajectory_check_length: 1.5 trajectory_check_time: 3.0 - resample_interval: 0.5 distinct_point_distance_threshold: 0.3 distinct_point_yaw_threshold: 5.0 # [deg] collision_checker_params: - width_margin: 0.1 - longitudinal_margin: 0.15 - enable_z_axis_obstacle_filtering: false - z_axis_filtering_buffer: 0.3 + width_margin: 0.2 chattering_threshold: 0.2 + z_axis_filtering_buffer: 0.3 + enable_z_axis_obstacle_filtering: false diff --git a/control/predicted_path_checker/images/FlowChart.png b/control/predicted_path_checker/images/FlowChart.png new file mode 100644 index 0000000000000000000000000000000000000000..9d93e37390c6b78687c754fb3f802d04fc43f296 GIT binary patch literal 62997 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

v+5!)p&VnwxK}r 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 VQxBWK18~4Ubro&p3dJiC{{yym>&pND literal 0 HcmV?d00001 diff --git a/control/predicted_path_checker/include/predicted_path_checker/predicted_path_checker_node.hpp b/control/predicted_path_checker/include/predicted_path_checker/predicted_path_checker_node.hpp index cee982bdcba8b..187d6b866337a 100644 --- a/control/predicted_path_checker/include/predicted_path_checker/predicted_path_checker_node.hpp +++ b/control/predicted_path_checker/include/predicted_path_checker/predicted_path_checker_node.hpp @@ -23,9 +23,7 @@ #include #include #include -#include #include -#include #include #include @@ -88,8 +86,6 @@ class PredictedPathCheckerNode : public rclcpp::Node // Subscriber std::shared_ptr self_pose_listener_; - std::shared_ptr transform_listener_; - tf2_ros::Buffer tf_buffer_{get_clock()}; rclcpp::Subscription::SharedPtr sub_dynamic_objects_; rclcpp::Subscription::SharedPtr sub_reference_trajectory_; @@ -150,7 +146,7 @@ class PredictedPathCheckerNode : public rclcpp::Node void sendRequest(bool make_stop_vehicle); - bool checkDiscretePoint( + bool isItDiscretePoint( const TrajectoryPoints & reference_trajectory, const TrajectoryPoint & collision_point) const; static Trajectory cutTrajectory(const Trajectory & trajectory, const double length); diff --git a/control/predicted_path_checker/launch/predicted_path_checker.launch.xml b/control/predicted_path_checker/launch/predicted_path_checker.launch.xml index f4c7f5dbb27a4..a35c11b80c1f7 100755 --- a/control/predicted_path_checker/launch/predicted_path_checker.launch.xml +++ b/control/predicted_path_checker/launch/predicted_path_checker.launch.xml @@ -12,10 +12,10 @@ - - - - - + + + + + diff --git a/control/predicted_path_checker/src/predicted_path_checker_node/debug_marker.cpp b/control/predicted_path_checker/src/predicted_path_checker_node/debug_marker.cpp index 24d3d3d3bb4f0..b3c5b8a8e8707 100644 --- a/control/predicted_path_checker/src/predicted_path_checker_node/debug_marker.cpp +++ b/control/predicted_path_checker/src/predicted_path_checker_node/debug_marker.cpp @@ -45,9 +45,9 @@ PredictedPathCheckerDebugNode::PredictedPathCheckerDebugNode( : node_(node), base_link2front_(base_link2front) { virtual_wall_pub_ = - node->create_publisher("~/predicted/virtual_wall", 1); + node->create_publisher("~/debug/virtual_wall", 1); debug_viz_pub_ = - node_->create_publisher("~/predicted/debug/marker", 1); + node_->create_publisher("~/debug/marker", 1); } bool PredictedPathCheckerDebugNode::pushPolygon( diff --git a/control/predicted_path_checker/src/predicted_path_checker_node/predicted_path_checker_node.cpp b/control/predicted_path_checker/src/predicted_path_checker_node/predicted_path_checker_node.cpp index d1faf7bb473a6..f387abd6773f8 100644 --- a/control/predicted_path_checker/src/predicted_path_checker_node/predicted_path_checker_node.cpp +++ b/control/predicted_path_checker/src/predicted_path_checker_node/predicted_path_checker_node.cpp @@ -45,8 +45,8 @@ PredictedPathCheckerNode::PredictedPathCheckerNode(const rclcpp::NodeOptions & n node_param_.ego_nearest_dist_threshold = declare_parameter("ego_nearest_dist_threshold", 3.0); node_param_.ego_nearest_yaw_threshold = declare_parameter("ego_nearest_yaw_threshold", 1.046); node_param_.max_deceleration = declare_parameter("max_deceleration", 1.5); - node_param_.delay_time = declare_parameter("delay_time", 0.5); - node_param_.stop_margin = declare_parameter("stop_margin", 1.0); + node_param_.delay_time = declare_parameter("delay_time", 0.17); + node_param_.stop_margin = declare_parameter("stop_margin", 0.5); node_param_.min_trajectory_check_length = declare_parameter("min_trajectory_check_length", 1.5); node_param_.trajectory_check_time = declare_parameter("trajectory_check_time", 3.0); node_param_.resample_interval = declare_parameter("resample_interval", 0.5); @@ -58,9 +58,9 @@ PredictedPathCheckerNode::PredictedPathCheckerNode(const rclcpp::NodeOptions & n collision_checker_param_.width_margin = declare_parameter("collision_checker_params.width_margin", 0.2); collision_checker_param_.enable_z_axis_obstacle_filtering = - declare_parameter("collision_checker_params.enable_z_axis_obstacle_filtering", true); + declare_parameter("collision_checker_params.enable_z_axis_obstacle_filtering", false); collision_checker_param_.z_axis_filtering_buffer = - declare_parameter("collision_checker_params.z_axis_filtering_buffer", 1.0); + declare_parameter("collision_checker_params.z_axis_filtering_buffer", 0.3); collision_checker_param_.chattering_threshold = declare_parameter("collision_checker_params.chattering_threshold", 0.2); @@ -68,18 +68,18 @@ PredictedPathCheckerNode::PredictedPathCheckerNode(const rclcpp::NodeOptions & n self_pose_listener_ = std::make_shared(this); sub_dynamic_objects_ = create_subscription( - "input/objects", rclcpp::SensorDataQoS(), + "~/input/objects", rclcpp::SensorDataQoS(), std::bind(&PredictedPathCheckerNode::onDynamicObjects, this, _1)); sub_reference_trajectory_ = create_subscription( - "input/reference_trajectory", 1, + "~/input/reference_trajectory", 1, std::bind(&PredictedPathCheckerNode::onReferenceTrajectory, this, _1)); sub_predicted_trajectory_ = create_subscription( - "input/predicted_trajectory", 1, + "~/input/predicted_trajectory", 1, std::bind(&PredictedPathCheckerNode::onPredictedTrajectory, this, _1)); sub_odom_ = create_subscription( - "input/odometry", 1, std::bind(&PredictedPathCheckerNode::onOdom, this, _1)); + "~/input/odometry", 1, std::bind(&PredictedPathCheckerNode::onOdom, this, _1)); sub_accel_ = create_subscription( - "input/current_accel", rclcpp::QoS{1}, std::bind(&PredictedPathCheckerNode::onAccel, this, _1)); + "~/input/current_accel", rclcpp::QoS{1}, std::bind(&PredictedPathCheckerNode::onAccel, this, _1)); debug_ptr_ = std::make_shared(this, vehicle_info_.max_longitudinal_offset_m); @@ -311,7 +311,7 @@ void PredictedPathCheckerNode::onTimer() motion_utils::convertToTrajectoryPointArray(*reference_trajectory_); const auto is_discrete_point = - checkDiscretePoint(reference_trajectory_array, predicted_trajectory_array.at(stop_idx)); + isItDiscretePoint(reference_trajectory_array, predicted_trajectory_array.at(stop_idx)); if (is_discrete_point) { // Check reference trajectory has stop point or not @@ -321,11 +321,11 @@ void PredictedPathCheckerNode::onTimer() if (!is_there_stop_in_ref_trajectory) { // Send pause - current_state_ = State::PAUSE; - updater_.force_update(); if (!is_paused_by_node_) { sendRequest(true); } + current_state_ = State::PAUSE; + updater_.force_update(); RCLCPP_WARN_THROTTLE( this->get_logger(), *this->get_clock(), 5000 /* ms */, @@ -406,7 +406,7 @@ void PredictedPathCheckerNode::sendRequest(bool make_stop_vehicle) cli_set_pause_->async_send_request(req, [this](auto) { is_calling_set_pause_ = false; }); } } -bool PredictedPathCheckerNode::checkDiscretePoint( +bool PredictedPathCheckerNode::isItDiscretePoint( const TrajectoryPoints & reference_trajectory, const TrajectoryPoint & collision_point) const { const auto nearest_segment =