Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(obstacle_cruise_planner): support pointcloud-based obstacles #6907

Draft
wants to merge 60 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
e264cf3
add pointcloud to obstacle properties
mitukou1109 Apr 24, 2024
60224e1
add tf listener & pointcloud subscriber
mitukou1109 Apr 24, 2024
028e665
add parameters for pointcloud obstacle
mitukou1109 Apr 24, 2024
2f054cd
add type aliases
mitukou1109 Apr 24, 2024
c41ded8
convert pointcloud to obstacle
mitukou1109 Apr 24, 2024
84a31a9
Merge remote-tracking branch 'origin/main' into obstacle_cruise_plann…
mitukou1109 Apr 25, 2024
a19f529
add type alias
mitukou1109 Apr 25, 2024
29f9284
add polygon conversion for pointcloud obstacle
mitukou1109 Apr 25, 2024
ce95e63
initialize twist & pose of pointcloud obstacle
mitukou1109 Apr 25, 2024
30ccefe
overload to handle both obstacle & predicted path
mitukou1109 Apr 25, 2024
23c1fff
implement ego behavior determination against pointcloud obstacles
mitukou1109 Apr 25, 2024
fcbb887
Merge remote-tracking branch 'origin/main' into obstacle_cruise_plann…
mitukou1109 May 1, 2024
8924771
generate obstacle from point
mitukou1109 May 1, 2024
0d99190
revert getCollisionIndex()
mitukou1109 May 1, 2024
035ad99
generate obstacle from each point in cloud
mitukou1109 May 1, 2024
b724add
set pointcloud obstacle velocity to 0
mitukou1109 May 1, 2024
1a3151c
use tf buffer & listener with pointers
mitukou1109 May 1, 2024
7460587
update latest pointcloud data
mitukou1109 May 1, 2024
8df16ff
add topic remap
mitukou1109 May 1, 2024
fede0ff
remove unnecessary includes
mitukou1109 May 1, 2024
25731b3
set slow down obstacle velocity to 0
mitukou1109 May 2, 2024
c57545d
add flag to consider pointcloud obstacle for stopping & slowing down
mitukou1109 May 2, 2024
3b6a30c
style(pre-commit): autofix
pre-commit-ci[bot] May 2, 2024
db48811
Merge remote-tracking branch 'origin/main' into obstacle_cruise_plann…
mitukou1109 May 2, 2024
844393a
downsample pointcloud using voxel grid
mitukou1109 May 2, 2024
4c7a339
change shape type of pointcloud obstacle to polygon
mitukou1109 May 8, 2024
fb00bed
convert pointcloud to obstacle by clustering
mitukou1109 May 8, 2024
8869a2b
Merge remote-tracking branch 'origin/main' into obstacle_cruise_plann…
mitukou1109 May 8, 2024
06176a8
add parameters for clustering
mitukou1109 May 8, 2024
98bcd08
add max_num_points parameter to dummy object
mitukou1109 May 16, 2024
fb00b59
downsample pointcloud when the number of points is larger than max_nu…
mitukou1109 May 16, 2024
5f9e4ab
add max_num_points property to dummy bus
mitukou1109 May 16, 2024
0589073
add parameters for pointcloud based obstacles
mitukou1109 May 16, 2024
caf6e93
Merge remote-tracking branch 'origin/main' into obstacle_cruise_plann…
mitukou1109 May 16, 2024
7f9738e
store pointcloud in obstacle struct
mitukou1109 May 22, 2024
8784f59
change obstacle conversion method
mitukou1109 May 22, 2024
5f70818
Merge remote-tracking branch 'origin/main' into obstacle_cruise_plann…
mitukou1109 Jun 12, 2024
999605b
migrate previous changes to new package
mitukou1109 Jun 12, 2024
a22ef49
store necessary points only
mitukou1109 Jun 12, 2024
98ea643
move use_pointcloud to common parameter
mitukou1109 Jun 12, 2024
3cb8675
extract necessary points from pointcloud
mitukou1109 Jun 12, 2024
a6d1743
add use_pointcloud parameter to planner interface
mitukou1109 Jun 12, 2024
4925d0b
fix obstacle conversion
mitukou1109 Jun 12, 2024
f4a03c4
Merge branch 'main' into obstacle_cruise_planner_pointcloud
mitukou1109 Jun 13, 2024
fea93ed
fix collision point determination
mitukou1109 Jun 13, 2024
12044c1
simplify pointcloud transformation
mitukou1109 Jun 13, 2024
39d7a30
style(pre-commit): autofix
pre-commit-ci[bot] Jun 13, 2024
4c3519d
fix collision point determination
mitukou1109 Jun 13, 2024
d7851ff
pick nearest stop collision point
mitukou1109 Jun 13, 2024
cc29510
check collision for every point in cluster
mitukou1109 Jun 13, 2024
e7059bd
Merge remote-tracking branch 'origin/main' into obstacle_cruise_plann…
mitukou1109 Jun 19, 2024
63f6e1e
migrate previous changes to new files
mitukou1109 Jun 19, 2024
0c913b2
reduce diff
mitukou1109 Jun 20, 2024
f2dc8cf
remove use_pointcloud parameter
mitukou1109 Jun 20, 2024
bb2c5d6
add parameters for pointcloud filtering
mitukou1109 Jun 20, 2024
a2505af
Merge remote-tracking branch 'origin/awf-latest' into obstacle_cruise…
mitukou1109 Jun 20, 2024
299824b
add autoware namespace
mitukou1109 Jun 20, 2024
64a3191
Revert "add max_num_points parameter to dummy object"
mitukou1109 Jun 20, 2024
d5260f7
Revert "downsample pointcloud when the number of points is larger tha…
mitukou1109 Jun 20, 2024
d8c8dbb
Revert "add max_num_points property to dummy bus"
mitukou1109 Jun 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@
<remap from="~/input/odometry" to="/localization/kinematic_state"/>
<remap from="~/input/acceleration" to="/localization/acceleration"/>
<remap from="~/input/objects" to="/perception/object_recognition/objects"/>
<remap from="~/input/pointcloud" to="/perception/obstacle_segmentation/pointcloud"/>
<remap from="~/output/trajectory" to="$(var interface_output_topic)"/>
<remap from="~/output/stop_reasons" to="/planning/scenario_planning/status/stop_reasons"/>
<remap from="~/output/velocity_limit" to="/planning/scenario_planning/max_velocity_candidates"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
motorcycle: true
bicycle: true
pedestrian: true
pointcloud: false

cruise_obstacle_type:
inside:
Expand Down Expand Up @@ -68,8 +69,17 @@
motorcycle: true
bicycle: true
pedestrian: true
pointcloud: false

behavior_determination:
pointcloud_search_radius: 5.0
pointcloud_voxel_grid_x: 0.05
pointcloud_voxel_grid_y: 0.05
pointcloud_voxel_grid_z: 100000.0
pointcloud_cluster_tolerance: 1.0
pointcloud_min_cluster_size: 1
pointcloud_max_cluster_size: 100000

decimate_trajectory_step_length : 2.0 # longitudinal step length to calculate trajectory polygon for collision checking

prediction_resampling_time_interval: 0.1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,25 +58,42 @@ struct Obstacle
const geometry_msgs::msg::Pose & arg_pose, const double ego_to_obstacle_distance,
const double lat_dist_from_obstacle_to_traj)
: stamp(arg_stamp),
ego_to_obstacle_distance(ego_to_obstacle_distance),
lat_dist_from_obstacle_to_traj(lat_dist_from_obstacle_to_traj),
satoshi-ota marked this conversation as resolved.
Show resolved Hide resolved
pose(arg_pose),
orientation_reliable(true),
twist(object.kinematics.initial_twist_with_covariance.twist),
twist_reliable(true),
classification(object.classification.at(0)),
uuid(autoware::universe_utils::toHexString(object.object_id)),
shape(object.shape),
ego_to_obstacle_distance(ego_to_obstacle_distance),
lat_dist_from_obstacle_to_traj(lat_dist_from_obstacle_to_traj)
shape(object.shape)
{
predicted_paths.clear();
for (const auto & path : object.kinematics.predicted_paths) {
predicted_paths.push_back(path);
}
}

Polygon2d toPolygon() const { return autoware::universe_utils::toPolygon2d(pose, shape); }
Obstacle(
const rclcpp::Time & arg_stamp,
const std::optional<geometry_msgs::msg::Point> & stop_collision_point,
const std::optional<geometry_msgs::msg::Point> & slow_down_front_collision_point,
const std::optional<geometry_msgs::msg::Point> & slow_down_back_collision_point,
const double ego_to_obstacle_distance, const double lat_dist_from_obstacle_to_traj)
: stamp(arg_stamp),
ego_to_obstacle_distance(ego_to_obstacle_distance),
lat_dist_from_obstacle_to_traj(lat_dist_from_obstacle_to_traj),
stop_collision_point(stop_collision_point),
slow_down_front_collision_point(slow_down_front_collision_point),
slow_down_back_collision_point(slow_down_back_collision_point)
{
}

rclcpp::Time stamp; // This is not the current stamp, but when the object was observed.
double ego_to_obstacle_distance;
double lat_dist_from_obstacle_to_traj;
satoshi-ota marked this conversation as resolved.
Show resolved Hide resolved

// for PredictedObject
geometry_msgs::msg::Pose pose; // interpolated with the current stamp
bool orientation_reliable;
Twist twist;
Expand All @@ -85,8 +102,11 @@ struct Obstacle
std::string uuid;
Shape shape;
std::vector<PredictedPath> predicted_paths;
double ego_to_obstacle_distance;
double lat_dist_from_obstacle_to_traj;

// for PointCloud
std::optional<geometry_msgs::msg::Point> stop_collision_point;
std::optional<geometry_msgs::msg::Point> slow_down_front_collision_point;
std::optional<geometry_msgs::msg::Point> slow_down_back_collision_point;
};

struct TargetObstacleInterface
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
#include <autoware/universe_utils/ros/published_time_publisher.hpp>
#include <rclcpp/rclcpp.hpp>

#include <tf2_ros/buffer.h>
#include <tf2_ros/transform_listener.h>

#include <algorithm>
#include <memory>
#include <mutex>
Expand Down Expand Up @@ -58,10 +61,18 @@ class ObstacleCruisePlannerNode : public rclcpp::Node
std::vector<Obstacle> convertToObstacles(
const Odometry & odometry, const PredictedObjects & objects,
const std::vector<TrajectoryPoint> & traj_points) const;
std::vector<Obstacle> convertToObstacles(
const Odometry & odometry, const PointCloud2 & pointcloud,
const std::vector<TrajectoryPoint> & traj_points,
const std_msgs::msg::Header & traj_header) const;
std::tuple<std::vector<StopObstacle>, std::vector<CruiseObstacle>, std::vector<SlowDownObstacle>>
determineEgoBehaviorAgainstObstacles(
const Odometry & odometry, const PredictedObjects & objects,
const std::vector<TrajectoryPoint> & traj_points, const std::vector<Obstacle> & obstacles);
std::tuple<std::vector<StopObstacle>, std::vector<CruiseObstacle>, std::vector<SlowDownObstacle>>
determineEgoBehaviorAgainstObstacles(
const Odometry & odometry, const PointCloud2 & /* pointcloud */,
const std::vector<TrajectoryPoint> & traj_points, const std::vector<Obstacle> & obstacles);
std::vector<TrajectoryPoint> decimateTrajectoryPoints(
const Odometry & odometry, const std::vector<TrajectoryPoint> & traj_points) const;
std::optional<StopObstacle> createStopObstacle(
Expand Down Expand Up @@ -116,6 +127,9 @@ class ObstacleCruisePlannerNode : public rclcpp::Node

bool enable_debug_info_;
bool enable_calculation_time_info_;
bool enable_slow_down_planning_{false};
bool use_pointcloud_for_stop_;
bool use_pointcloud_for_slow_down_;
double min_behavior_stop_margin_;
bool enable_approaching_on_curve_;
double additional_safe_distance_margin_on_curve_;
Expand Down Expand Up @@ -149,9 +163,14 @@ class ObstacleCruisePlannerNode : public rclcpp::Node
this, "~/input/odometry"};
autoware::universe_utils::InterProcessPollingSubscriber<PredictedObjects> objects_sub_{
this, "~/input/objects"};
autoware::universe_utils::InterProcessPollingSubscriber<PointCloud2> pointcloud_sub_{
this, "~/input/pointcloud"};
autoware::universe_utils::InterProcessPollingSubscriber<AccelWithCovarianceStamped> acc_sub_{
this, "~/input/acceleration"};

std::unique_ptr<tf2_ros::Buffer> tf_buffer_;
std::shared_ptr<tf2_ros::TransformListener> tf_listener_{nullptr};

// Vehicle Parameters
VehicleInfo vehicle_info_;

Expand Down Expand Up @@ -182,6 +201,13 @@ class ObstacleCruisePlannerNode : public rclcpp::Node
void onParam(const std::vector<rclcpp::Parameter> & parameters);

double decimate_trajectory_step_length;
double pointcloud_search_radius;
double pointcloud_voxel_grid_x;
double pointcloud_voxel_grid_y;
double pointcloud_voxel_grid_z;
double pointcloud_cluster_tolerance;
int pointcloud_min_cluster_size;
int pointcloud_max_cluster_size;
// hysteresis for stop and cruise
double obstacle_velocity_threshold_from_cruise_to_stop;
double obstacle_velocity_threshold_from_stop_to_cruise;
Expand Down Expand Up @@ -270,7 +296,7 @@ class ObstacleCruisePlannerNode : public rclcpp::Node
EgoNearestParam ego_nearest_param_;

bool is_driving_forward_{true};
bool enable_slow_down_planning_{false};
bool use_pointcloud_{false};

std::vector<StopObstacle> prev_closest_stop_obstacles_{};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,13 @@ class PlannerInterface

void setParam(
const bool enable_debug_info, const bool enable_calculation_time_info,
const double min_behavior_stop_margin, const double enable_approaching_on_curve,
const double additional_safe_distance_margin_on_curve,
const bool use_pointcloud, const double min_behavior_stop_margin,
const double enable_approaching_on_curve, const double additional_safe_distance_margin_on_curve,
const double min_safe_distance_margin_on_curve, const bool suppress_sudden_obstacle_stop)
{
enable_debug_info_ = enable_debug_info;
enable_calculation_time_info_ = enable_calculation_time_info;
use_pointcloud_ = use_pointcloud;
min_behavior_stop_margin_ = min_behavior_stop_margin;
enable_approaching_on_curve_ = enable_approaching_on_curve;
additional_safe_distance_margin_on_curve_ = additional_safe_distance_margin_on_curve;
Expand Down Expand Up @@ -117,6 +118,7 @@ class PlannerInterface
// Parameters
bool enable_debug_info_{false};
bool enable_calculation_time_info_{false};
bool use_pointcloud_{false};
LongitudinalInfo longitudinal_info_;
double min_behavior_stop_margin_;
bool enable_approaching_on_curve_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "geometry_msgs/msg/transform_stamped.hpp"
#include "geometry_msgs/msg/twist_stamped.hpp"
#include "nav_msgs/msg/odometry.hpp"
#include "sensor_msgs/msg/point_cloud2.hpp"
#include "tier4_debug_msgs/msg/float32_stamped.hpp"
#include "tier4_planning_msgs/msg/stop_factor.hpp"
#include "tier4_planning_msgs/msg/stop_reason_array.hpp"
Expand All @@ -35,6 +36,9 @@
#include "tier4_planning_msgs/msg/velocity_limit_clear_command.hpp"
#include "visualization_msgs/msg/marker_array.hpp"

#include <pcl/point_cloud.h>
#include <pcl/point_types.h>

using autoware::vehicle_info_utils::VehicleInfo;
using autoware_adapi_v1_msgs::msg::PlanningBehavior;
using autoware_adapi_v1_msgs::msg::VelocityFactor;
Expand All @@ -50,6 +54,7 @@ using geometry_msgs::msg::AccelStamped;
using geometry_msgs::msg::AccelWithCovarianceStamped;
using geometry_msgs::msg::Twist;
using nav_msgs::msg::Odometry;
using sensor_msgs::msg::PointCloud2;
using tier4_debug_msgs::msg::Float32Stamped;
using tier4_planning_msgs::msg::StopFactor;
using tier4_planning_msgs::msg::StopReason;
Expand All @@ -63,4 +68,6 @@ namespace bg = boost::geometry;
using autoware::universe_utils::Point2d;
using autoware::universe_utils::Polygon2d;

using PointCloud = pcl::PointCloud<pcl::PointXYZ>;

#endif // AUTOWARE__OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_