Skip to content

Commit a5a27e8

Browse files
feat(autoware_trajectory_optimizer): add external velocity limit subscription (#12023)
* add external velocity limit subscription Signed-off-by: Daniel <danielsanchezaran@gmail.com> * change topic name in code Signed-off-by: Daniel <danielsanchezaran@gmail.com> * subscribe to the external velocity limiter selector topic and not directly the API's Signed-off-by: Daniel <danielsanchezaran@gmail.com> * make the default velocity limit the same as the common_param velocity Signed-off-by: Daniel <danielsanchezaran@gmail.com> * Add /output/current_velocity_limit_mps publisher Signed-off-by: Daniel <danielsanchezaran@gmail.com> * output right topic name Signed-off-by: Daniel <danielsanchezaran@gmail.com> * change velocity limit input to API only, add common param to sync default velocity limit to that of Autoware common.param.yaml Signed-off-by: Daniel <danielsanchezaran@gmail.com> * change launch to use var name for the input external velocity for consistency Signed-off-by: Daniel <danielsanchezaran@gmail.com> * add mps to var name for consistency Signed-off-by: Daniel <danielsanchezaran@gmail.com> * update dependencies in package.xml Signed-off-by: Daniel <danielsanchezaran@gmail.com> --------- Signed-off-by: Daniel <danielsanchezaran@gmail.com>
1 parent 6ceff4b commit a5a27e8

File tree

6 files changed

+53
-20
lines changed

6 files changed

+53
-20
lines changed

planning/autoware_trajectory_optimizer/config/plugins/trajectory_velocity_optimizer.param.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
target_pull_out_acc_mps2: 1.0 # [m/s²] Target acceleration during pull-out
1111
set_engage_speed: false # Set minimum speed during engage
1212

13-
# Speed limiting
14-
max_speed_mps: 13.88 # [m/s] Maximum allowed speed (30 km/h default)
13+
# Speed limiting (uses external_velocity_limit topic to set max speed)
1514
limit_speed: true # Enable speed limiting
1615

1716
# Lateral acceleration limiting

planning/autoware_trajectory_optimizer/include/autoware/trajectory_optimizer/trajectory_optimizer_plugins/trajectory_velocity_optimizer.hpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@
2020
#include "autoware/velocity_smoother/smoother/jerk_filtered_smoother.hpp"
2121

2222
#include <autoware_utils/system/time_keeper.hpp>
23+
#include <autoware_utils_rclcpp/polling_subscriber.hpp>
2324
#include <rclcpp/rclcpp.hpp>
2425

26+
#include <autoware_internal_planning_msgs/msg/velocity_limit.hpp>
2527
#include <autoware_planning_msgs/msg/trajectory.hpp>
2628
#include <autoware_planning_msgs/msg/trajectory_point.hpp>
2729

2830
#include <memory>
31+
#include <optional>
2932
#include <string>
3033
#include <vector>
3134

@@ -34,15 +37,16 @@ namespace autoware::trajectory_optimizer::plugin
3437
using autoware_planning_msgs::msg::TrajectoryPoint;
3538
using TrajectoryPoints = std::vector<TrajectoryPoint>;
3639
using autoware::velocity_smoother::JerkFilteredSmoother;
40+
using autoware_internal_planning_msgs::msg::VelocityLimit;
3741

3842
struct TrajectoryVelocityOptimizerParams
3943
{
4044
double nearest_dist_threshold_m{1.5};
4145
double nearest_yaw_threshold_deg{60.0};
4246
double target_pull_out_speed_mps{1.0};
4347
double target_pull_out_acc_mps2{1.0};
44-
double max_speed_mps{8.33};
4548
double max_lateral_accel_mps2{1.5};
49+
double default_max_velocity_mps{8.33}; // 30 km/h
4650
bool set_engage_speed{false};
4751
bool limit_speed{true};
4852
bool limit_lateral_acceleration{false};
@@ -55,6 +59,9 @@ class TrajectoryVelocityOptimizer : public TrajectoryOptimizerPluginBase
5559
TrajectoryVelocityOptimizer() = default;
5660
~TrajectoryVelocityOptimizer() = default;
5761

62+
void initialize(
63+
const std::string & name, rclcpp::Node * node_ptr,
64+
const std::shared_ptr<autoware_utils_debug::TimeKeeper> & time_keeper) override;
5865
void set_up_velocity_smoother(
5966
rclcpp::Node * node_ptr, const std::shared_ptr<autoware_utils_debug::TimeKeeper> time_keeper);
6067
void optimize_trajectory(
@@ -67,6 +74,9 @@ class TrajectoryVelocityOptimizer : public TrajectoryOptimizerPluginBase
6774
private:
6875
std::shared_ptr<JerkFilteredSmoother> jerk_filtered_smoother_{nullptr};
6976
TrajectoryVelocityOptimizerParams velocity_params_;
77+
std::shared_ptr<autoware_utils_rclcpp::InterProcessPollingSubscriber<VelocityLimit>>
78+
sub_planning_velocity_;
79+
rclcpp::Publisher<VelocityLimit>::SharedPtr pub_velocity_limit_;
7080
};
7181
} // namespace autoware::trajectory_optimizer::plugin
7282

planning/autoware_trajectory_optimizer/launch/trajectory_optimizer.launch.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<launch>
33
<arg name="trajectory_optimizer_param_path" default="$(find-pkg-share autoware_trajectory_optimizer)/config/trajectory_optimizer.param.yaml"/>
4-
54
<arg name="jerk_filtered_smoother_param_path" default="$(find-pkg-share autoware_trajectory_optimizer)/config/velocity_smoothing/JerkFiltered.param.yaml"/>
65
<arg name="velocity_smoother_param_path" default="$(find-pkg-share autoware_trajectory_optimizer)/config/velocity_smoothing/default_velocity_smoother.param.yaml"/>
76
<arg name="common_smoother_param_path" default="$(find-pkg-share autoware_trajectory_optimizer)/config/velocity_smoothing/default_common.param.yaml"/>
8-
97
<arg name="elastic_band_param_path" default="$(find-pkg-share autoware_trajectory_optimizer)/config/trajectory_smoothing/elastic_band_smoother.param.yaml"/>
8+
<arg name="common_param_path" default="$(find-pkg-share autoware_core_planning)/config/common.param.yaml"/>
109

1110
<arg name="trajectory_point_fixer_param_path" default="$(find-pkg-share autoware_trajectory_optimizer)/config/plugins/trajectory_point_fixer.param.yaml"/>
1211
<arg name="trajectory_extender_param_path" default="$(find-pkg-share autoware_trajectory_optimizer)/config/plugins/trajectory_extender.param.yaml"/>
@@ -18,11 +17,14 @@
1817

1918
<arg name="input_traj" default="/planning/diffusion_planner/trajectory"/>
2019
<arg name="input_trajectories" default="/planning/diffusion_planner/candidate_trajectories"/>
20+
<arg name="input_external_velocity_limit_mps" default="/planning/scenario_planning/max_velocity_default"/>
2121
<arg name="output_traj" default="/planning/trajectory"/>
2222
<arg name="output_trajectories" default="/planning/generator/candidate_trajectories"/>
23+
<arg name="output_current_velocity_limit_mps" default="/planning/scenario_planning/current_max_velocity"/>
2324

2425
<node pkg="autoware_trajectory_optimizer" exec="autoware_trajectory_optimizer_node" name="trajectory_optimizer_node" output="screen">
2526
<param from="$(var trajectory_optimizer_param_path)" allow_substs="true"/>
27+
<param from="$(var common_param_path)"/>
2628
<param from="$(var jerk_filtered_smoother_param_path)" allow_substs="true"/>
2729
<param from="$(var velocity_smoother_param_path)" allow_substs="true"/>
2830
<param from="$(var common_smoother_param_path)" allow_substs="true"/>
@@ -36,8 +38,10 @@
3638
<param from="$(var trajectory_mpt_optimizer_param_path)" allow_substs="true"/>
3739
<remap from="~/output/trajectory" to="$(var output_traj)"/>
3840
<remap from="~/output/trajectories" to="$(var output_trajectories)"/>
41+
<remap from="~/output/current_velocity_limit_mps" to="$(var output_current_velocity_limit_mps)"/>
3942
<remap from="~/input/traj" to="$(var input_traj)"/>
4043
<remap from="~/input/trajectories" to="$(var input_trajectories)"/>
44+
<remap from="~/input/external_velocity_limit_mps" to="$(var input_external_velocity_limit_mps)"/>
4145
<remap from="~/input/odometry" to="/localization/kinematic_state"/>
4246
<remap from="~/input/acceleration" to="/localization/acceleration"/>
4347
</node>

planning/autoware_trajectory_optimizer/package.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
<depend>tf2_geometry_msgs</depend>
3636
<depend>visualization_msgs</depend>
3737

38+
<exec_depend>autoware_core_planning</exec_depend>
39+
3840
<test_depend>ament_cmake_ros</test_depend>
3941
<test_depend>ament_lint_auto</test_depend>
4042
<test_depend>autoware_lint_common</test_depend>

planning/autoware_trajectory_optimizer/schema/trajectory_optimizer.schema.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -394,12 +394,6 @@
394394
"minimum": 0,
395395
"description": "Target acceleration during pull-out maneuver [m/s²]"
396396
},
397-
"max_speed_mps": {
398-
"type": "number",
399-
"default": 8.33,
400-
"minimum": 0,
401-
"description": "Maximum allowed speed [m/s]"
402-
},
403397
"max_lateral_accel_mps2": {
404398
"type": "number",
405399
"default": 1.5,
@@ -432,7 +426,6 @@
432426
"nearest_yaw_threshold_deg",
433427
"target_pull_out_speed_mps",
434428
"target_pull_out_acc_mps2",
435-
"max_speed_mps",
436429
"max_lateral_accel_mps2",
437430
"set_engage_speed",
438431
"limit_speed",

planning/autoware_trajectory_optimizer/src/trajectory_optimizer_plugins/trajectory_velocity_optimizer.cpp

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,36 @@
1919
#include <autoware_utils_math/unit_conversion.hpp>
2020
#include <autoware_utils_rclcpp/parameter.hpp>
2121
#include <autoware_vehicle_info_utils/vehicle_info_utils.hpp>
22+
#include <rclcpp/logging.hpp>
2223

2324
#include <memory>
2425
#include <string>
2526
#include <vector>
26-
2727
namespace autoware::trajectory_optimizer::plugin
2828
{
2929

30+
void TrajectoryVelocityOptimizer::initialize(
31+
const std::string & name, rclcpp::Node * node_ptr,
32+
const std::shared_ptr<autoware_utils_debug::TimeKeeper> & time_keeper)
33+
{
34+
TrajectoryOptimizerPluginBase::initialize(name, node_ptr, time_keeper);
35+
36+
set_up_params();
37+
38+
sub_planning_velocity_ =
39+
std::make_shared<autoware_utils_rclcpp::InterProcessPollingSubscriber<VelocityLimit>>(
40+
node_ptr, "~/input/external_velocity_limit_mps", rclcpp::QoS{1});
41+
42+
pub_velocity_limit_ = node_ptr->create_publisher<VelocityLimit>(
43+
"~/output/current_velocity_limit_mps", rclcpp::QoS{1}.transient_local());
44+
45+
// publish default max velocity
46+
VelocityLimit max_vel_msg{};
47+
max_vel_msg.stamp = node_ptr->now();
48+
max_vel_msg.max_velocity = static_cast<float>(velocity_params_.default_max_velocity_mps);
49+
pub_velocity_limit_->publish(max_vel_msg);
50+
}
51+
3052
void TrajectoryVelocityOptimizer::set_up_velocity_smoother(
3153
rclcpp::Node * node_ptr, const std::shared_ptr<autoware_utils_debug::TimeKeeper> time_keeper)
3254
{
@@ -51,7 +73,6 @@ void TrajectoryVelocityOptimizer::optimize_trajectory(
5173
const auto & current_linear_acceleration = current_acceleration.accel.accel.linear.x;
5274
const double & target_pull_out_speed_mps = velocity_params_.target_pull_out_speed_mps;
5375
const double & target_pull_out_acc_mps2 = velocity_params_.target_pull_out_acc_mps2;
54-
const double & max_speed_mps = velocity_params_.max_speed_mps;
5576

5677
if (velocity_params_.limit_lateral_acceleration) {
5778
trajectory_velocity_optimizer_utils::limit_lateral_acceleration(
@@ -71,8 +92,14 @@ void TrajectoryVelocityOptimizer::optimize_trajectory(
7192
}
7293

7394
if (velocity_params_.limit_speed) {
74-
trajectory_velocity_optimizer_utils::set_max_velocity(
75-
traj_points, static_cast<float>(max_speed_mps));
95+
const auto external_velocity_limit = sub_planning_velocity_->take_data();
96+
const auto max_speed_mps = (external_velocity_limit)
97+
? static_cast<float>(external_velocity_limit->max_velocity)
98+
: static_cast<float>(velocity_params_.default_max_velocity_mps);
99+
trajectory_velocity_optimizer_utils::set_max_velocity(traj_points, max_speed_mps);
100+
if (external_velocity_limit) {
101+
pub_velocity_limit_->publish(*external_velocity_limit);
102+
}
76103
}
77104

78105
if (velocity_params_.smooth_velocities) {
@@ -100,10 +127,10 @@ void TrajectoryVelocityOptimizer::set_up_params()
100127
*node_ptr, "trajectory_velocity_optimizer.target_pull_out_speed_mps");
101128
velocity_params_.target_pull_out_acc_mps2 = get_or_declare_parameter<double>(
102129
*node_ptr, "trajectory_velocity_optimizer.target_pull_out_acc_mps2");
103-
velocity_params_.max_speed_mps =
104-
get_or_declare_parameter<double>(*node_ptr, "trajectory_velocity_optimizer.max_speed_mps");
105130
velocity_params_.max_lateral_accel_mps2 = get_or_declare_parameter<double>(
106131
*node_ptr, "trajectory_velocity_optimizer.max_lateral_accel_mps2");
132+
velocity_params_.default_max_velocity_mps =
133+
get_or_declare_parameter<double>(*node_ptr, "max_vel");
107134
velocity_params_.set_engage_speed =
108135
get_or_declare_parameter<bool>(*node_ptr, "trajectory_velocity_optimizer.set_engage_speed");
109136
velocity_params_.limit_speed =
@@ -131,8 +158,6 @@ rcl_interfaces::msg::SetParametersResult TrajectoryVelocityOptimizer::on_paramet
131158
update_param(
132159
parameters, "trajectory_velocity_optimizer.target_pull_out_acc_mps2",
133160
velocity_params_.target_pull_out_acc_mps2);
134-
update_param(
135-
parameters, "trajectory_velocity_optimizer.max_speed_mps", velocity_params_.max_speed_mps);
136161
update_param(
137162
parameters, "trajectory_velocity_optimizer.max_lateral_accel_mps2",
138163
velocity_params_.max_lateral_accel_mps2);

0 commit comments

Comments
 (0)