Skip to content

Commit 39cccb6

Browse files
feat(vehicle_cmd_gate): support for real time update params for v cmd gate (#6951)
* WIP add param update Signed-off-by: Daniel Sanchez <danielsanchezaran@gmail.com> * solve crash when updating filter Signed-off-by: Daniel Sanchez <danielsanchezaran@gmail.com> * remove extra space Signed-off-by: Daniel Sanchez <danielsanchezaran@gmail.com> * delete comments Signed-off-by: Daniel Sanchez <danielsanchezaran@gmail.com> --------- Signed-off-by: Daniel Sanchez <danielsanchezaran@gmail.com>
1 parent e517f09 commit 39cccb6

File tree

4 files changed

+82
-1
lines changed

4 files changed

+82
-1
lines changed

control/vehicle_cmd_gate/src/vehicle_cmd_filter.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ void VehicleCmdFilter::setParam(const VehicleCmdFilterParam & p)
9090
}
9191
}
9292

93+
VehicleCmdFilterParam VehicleCmdFilter::getParam() const
94+
{
95+
return param_;
96+
}
97+
9398
void VehicleCmdFilter::limitLongitudinalWithVel(AckermannControlCommand & input) const
9499
{
95100
input.longitudinal.speed = std::max(

control/vehicle_cmd_gate/src/vehicle_cmd_filter.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class VehicleCmdFilter
5858
void setActualSteerDiffLim(LimitArray v);
5959
void setCurrentSpeed(double v) { current_speed_ = v; }
6060
void setParam(const VehicleCmdFilterParam & p);
61+
VehicleCmdFilterParam getParam() const;
6162
void setPrevCmd(const AckermannControlCommand & v) { prev_cmd_ = v; }
6263

6364
void limitLongitudinalWithVel(AckermannControlCommand & input) const;

control/vehicle_cmd_gate/src/vehicle_cmd_gate.cpp

+71
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "vehicle_cmd_gate.hpp"
1616

1717
#include "marker_helper.hpp"
18+
#include "tier4_autoware_utils/ros/update_param.hpp"
1819

1920
#include <rclcpp/logging.hpp>
2021
#include <tier4_api_utils/tier4_api_utils.hpp>
@@ -244,6 +245,76 @@ VehicleCmdGate::VehicleCmdGate(const rclcpp::NodeOptions & node_options)
244245
logger_configure_ = std::make_unique<tier4_autoware_utils::LoggerLevelConfigure>(this);
245246

246247
published_time_publisher_ = std::make_unique<tier4_autoware_utils::PublishedTimePublisher>(this);
248+
249+
// Parameter Callback
250+
set_param_res_ =
251+
this->add_on_set_parameters_callback(std::bind(&VehicleCmdGate::onParameter, this, _1));
252+
}
253+
254+
rcl_interfaces::msg::SetParametersResult VehicleCmdGate::onParameter(
255+
const std::vector<rclcpp::Parameter> & parameters)
256+
{
257+
using tier4_autoware_utils::updateParam;
258+
// Parameter
259+
updateParam<bool>(parameters, "use_emergency_handling", use_emergency_handling_);
260+
updateParam<bool>(
261+
parameters, "check_external_emergency_heartbeat", check_external_emergency_heartbeat_);
262+
updateParam<double>(
263+
parameters, "system_emergency_heartbeat_timeout", system_emergency_heartbeat_timeout_);
264+
updateParam<double>(
265+
parameters, "external_emergency_stop_heartbeat_timeout",
266+
external_emergency_stop_heartbeat_timeout_);
267+
updateParam<double>(parameters, "stop_hold_acceleration", stop_hold_acceleration_);
268+
updateParam<double>(parameters, "emergency_acceleration", emergency_acceleration_);
269+
updateParam<double>(
270+
parameters, "moderate_stop_service_acceleration", moderate_stop_service_acceleration_);
271+
updateParam<double>(parameters, "stop_check_duration", stop_check_duration_);
272+
updateParam<bool>(parameters, "enable_cmd_limit_filter", enable_cmd_limit_filter_);
273+
updateParam<int>(
274+
parameters, "filter_activated_count_threshold", filter_activated_count_threshold_);
275+
updateParam<double>(
276+
parameters, "filter_activated_velocity_threshold", filter_activated_velocity_threshold_);
277+
278+
// Vehicle Parameter
279+
const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo();
280+
{
281+
VehicleCmdFilterParam p = filter_.getParam();
282+
p.wheel_base = vehicle_info.wheel_base_m;
283+
updateParam<double>(parameters, "nominal.vel_lim", p.vel_lim);
284+
updateParam<std::vector<double>>(
285+
parameters, "nominal.reference_speed_points", p.reference_speed_points);
286+
updateParam<std::vector<double>>(parameters, "nominal.steer_lim", p.steer_lim);
287+
updateParam<std::vector<double>>(parameters, "nominal.steer_rate_lim", p.steer_rate_lim);
288+
updateParam<std::vector<double>>(parameters, "nominal.lon_acc_lim", p.lon_acc_lim);
289+
updateParam<std::vector<double>>(parameters, "nominal.lon_jerk_lim", p.lon_jerk_lim);
290+
updateParam<std::vector<double>>(parameters, "nominal.lat_acc_lim", p.lat_acc_lim);
291+
updateParam<std::vector<double>>(parameters, "nominal.lat_jerk_lim", p.lat_jerk_lim);
292+
updateParam<std::vector<double>>(
293+
parameters, "nominal.actual_steer_diff_lim", p.actual_steer_diff_lim);
294+
filter_.setParam(p);
295+
}
296+
297+
{
298+
VehicleCmdFilterParam p = filter_on_transition_.getParam();
299+
p.wheel_base = vehicle_info.wheel_base_m;
300+
updateParam<double>(parameters, "on_transition.vel_lim", p.vel_lim);
301+
updateParam<std::vector<double>>(
302+
parameters, "on_transition.reference_speed_points", p.reference_speed_points);
303+
updateParam<std::vector<double>>(parameters, "on_transition.steer_lim", p.steer_lim);
304+
updateParam<std::vector<double>>(parameters, "on_transition.steer_rate_lim", p.steer_rate_lim);
305+
updateParam<std::vector<double>>(parameters, "on_transition.lon_acc_lim", p.lon_acc_lim);
306+
updateParam<std::vector<double>>(parameters, "on_transition.lon_jerk_lim", p.lon_jerk_lim);
307+
updateParam<std::vector<double>>(parameters, "on_transition.lat_acc_lim", p.lat_acc_lim);
308+
updateParam<std::vector<double>>(parameters, "on_transition.lat_jerk_lim", p.lat_jerk_lim);
309+
updateParam<std::vector<double>>(
310+
parameters, "on_transition.actual_steer_diff_lim", p.actual_steer_diff_lim);
311+
filter_on_transition_.setParam(p);
312+
}
313+
314+
rcl_interfaces::msg::SetParametersResult result;
315+
result.successful = true;
316+
result.reason = "success";
317+
return result;
247318
}
248319

249320
bool VehicleCmdGate::isHeartbeatTimeout(

control/vehicle_cmd_gate/src/vehicle_cmd_gate.hpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include <visualization_msgs/msg/marker_array.hpp>
5050

5151
#include <memory>
52+
#include <vector>
5253

5354
namespace vehicle_cmd_gate
5455
{
@@ -111,7 +112,10 @@ class VehicleCmdGate : public rclcpp::Node
111112
rclcpp::Publisher<MarkerArray>::SharedPtr filter_activated_marker_pub_;
112113
rclcpp::Publisher<MarkerArray>::SharedPtr filter_activated_marker_raw_pub_;
113114
rclcpp::Publisher<BoolStamped>::SharedPtr filter_activated_flag_pub_;
114-
115+
// Parameter callback
116+
OnSetParametersCallbackHandle::SharedPtr set_param_res_;
117+
rcl_interfaces::msg::SetParametersResult onParameter(
118+
const std::vector<rclcpp::Parameter> & parameters);
115119
// Subscription
116120
rclcpp::Subscription<Heartbeat>::SharedPtr external_emergency_stop_heartbeat_sub_;
117121
rclcpp::Subscription<GateMode>::SharedPtr gate_mode_sub_;

0 commit comments

Comments
 (0)