From 0979ba7ca18e2818dd894ba8c0806f36eb56b442 Mon Sep 17 00:00:00 2001 From: zusizusi <sho.iwasawa.2@tier4.jp> Date: Wed, 5 Jun 2024 14:25:07 +0900 Subject: [PATCH 1/6] replace subscriber --- .../raw_vehicle_cmd_converter/src/node.cpp | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/vehicle/raw_vehicle_cmd_converter/src/node.cpp b/vehicle/raw_vehicle_cmd_converter/src/node.cpp index 91c668f63dfbd..e95a8238a8542 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/node.cpp +++ b/vehicle/raw_vehicle_cmd_converter/src/node.cpp @@ -75,13 +75,19 @@ RawVehicleCommandConverterNode::RawVehicleCommandConverterNode( min_ret_i_steer, max_ret_d_steer, min_ret_d_steer); steer_pid_.setInitialized(); } + rclcpp::CallbackGroup::SharedPtr callback_group = + this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive, false); + auto subscription_options = rclcpp::SubscriptionOptions(); + subscription_options.callback_group = callback_group; pub_actuation_cmd_ = create_publisher<ActuationCommandStamped>("~/output/actuation_cmd", 1); sub_control_cmd_ = create_subscription<Control>( "~/input/control_cmd", 1, std::bind(&RawVehicleCommandConverterNode::onControlCmd, this, _1)); sub_velocity_ = create_subscription<Odometry>( - "~/input/odometry", 1, std::bind(&RawVehicleCommandConverterNode::onVelocity, this, _1)); + "~/input/odometry", 1, std::bind(&RawVehicleCommandConverterNode::onVelocity, this, _1), + subscription_options); sub_steering_ = create_subscription<Steering>( - "~/input/steering", 1, std::bind(&RawVehicleCommandConverterNode::onSteering, this, _1)); + "~/input/steering", 1, std::bind(&RawVehicleCommandConverterNode::onSteering, this, _1), + subscription_options); debug_pub_steer_pid_ = create_publisher<Float32MultiArrayStamped>( "/vehicle/raw_vehicle_cmd_converter/debug/steer_pid", 1); @@ -219,6 +225,21 @@ void RawVehicleCommandConverterNode::onVelocity(const Odometry::ConstSharedPtr m void RawVehicleCommandConverterNode::onControlCmd(const Control::ConstSharedPtr msg) { control_cmd_ptr_ = msg; + Odometry::SharedPtr velocity_msg_; + Odometry velocity_msg; + rclcpp::MessageInfo velocity_info; + Steering::SharedPtr steering_msg_; + Steering steering_msg; + rclcpp::MessageInfo steering_info; + + if ( + sub_velocity_->take(velocity_msg, velocity_info) && + sub_steering_->take(steering_msg, steering_info)) { + velocity_msg_ = std::make_shared<Odometry>(velocity_msg); + steering_msg_ = std::make_shared<Steering>(steering_msg); + onVelocity(velocity_msg_); + onSteering(steering_msg_); + } publishActuationCmd(); } } // namespace raw_vehicle_cmd_converter From b9ddf8288cfc4e8c02ed68067c92f1441936b839 Mon Sep 17 00:00:00 2001 From: zusizusi <sho.iwasawa.2@tier4.jp> Date: Thu, 6 Jun 2024 11:33:25 +0900 Subject: [PATCH 2/6] replace subscriber --- .../raw_vehicle_cmd_converter/node.hpp | 15 ++++---- .../raw_vehicle_cmd_converter/src/node.cpp | 35 +++++-------------- 2 files changed, 17 insertions(+), 33 deletions(-) diff --git a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp b/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp index d71ff96abade0..89dc37ab5d959 100644 --- a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp +++ b/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp @@ -20,6 +20,7 @@ #include "raw_vehicle_cmd_converter/pid.hpp" #include "raw_vehicle_cmd_converter/steer_map.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include <rclcpp/rclcpp.hpp> @@ -74,12 +75,14 @@ class RawVehicleCommandConverterNode : public rclcpp::Node //!< @brief topic publisher for low level vehicle command rclcpp::Publisher<ActuationCommandStamped>::SharedPtr pub_actuation_cmd_; - //!< @brief subscriber for current velocity - rclcpp::Subscription<Odometry>::SharedPtr sub_velocity_; //!< @brief subscriber for vehicle command rclcpp::Subscription<Control>::SharedPtr sub_control_cmd_; - //!< @brief subscriber for steering - rclcpp::Subscription<Steering>::SharedPtr sub_steering_; + // polling subscribers + tier4_autoware_utils::InterProcessPollingSubscriber<Odometry> sub_velocity_{ + this, "~/input/odometry"}; + + tier4_autoware_utils::InterProcessPollingSubscriber<Steering> sub_steering_{ + this, "~/input/steering"}; rclcpp::TimerBase::SharedPtr timer_; @@ -109,9 +112,9 @@ class RawVehicleCommandConverterNode : public rclcpp::Node const double current_velocity, const double desired_acc, bool & accel_cmd_is_zero); double calculateBrakeMap(const double current_velocity, const double desired_acc); double calculateSteer(const double vel, const double steering, const double steer_rate); - void onSteering(const Steering::ConstSharedPtr msg); + void processSteering(const Steering::ConstSharedPtr msg); void onControlCmd(const Control::ConstSharedPtr msg); - void onVelocity(const Odometry::ConstSharedPtr msg); + void processVelocity(const Odometry::ConstSharedPtr msg); void publishActuationCmd(); // for debugging rclcpp::Publisher<Float32MultiArrayStamped>::SharedPtr debug_pub_steer_pid_; diff --git a/vehicle/raw_vehicle_cmd_converter/src/node.cpp b/vehicle/raw_vehicle_cmd_converter/src/node.cpp index e95a8238a8542..8c3447da436c1 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/node.cpp +++ b/vehicle/raw_vehicle_cmd_converter/src/node.cpp @@ -75,19 +75,9 @@ RawVehicleCommandConverterNode::RawVehicleCommandConverterNode( min_ret_i_steer, max_ret_d_steer, min_ret_d_steer); steer_pid_.setInitialized(); } - rclcpp::CallbackGroup::SharedPtr callback_group = - this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive, false); - auto subscription_options = rclcpp::SubscriptionOptions(); - subscription_options.callback_group = callback_group; pub_actuation_cmd_ = create_publisher<ActuationCommandStamped>("~/output/actuation_cmd", 1); sub_control_cmd_ = create_subscription<Control>( "~/input/control_cmd", 1, std::bind(&RawVehicleCommandConverterNode::onControlCmd, this, _1)); - sub_velocity_ = create_subscription<Odometry>( - "~/input/odometry", 1, std::bind(&RawVehicleCommandConverterNode::onVelocity, this, _1), - subscription_options); - sub_steering_ = create_subscription<Steering>( - "~/input/steering", 1, std::bind(&RawVehicleCommandConverterNode::onSteering, this, _1), - subscription_options); debug_pub_steer_pid_ = create_publisher<Float32MultiArrayStamped>( "/vehicle/raw_vehicle_cmd_converter/debug/steer_pid", 1); @@ -210,12 +200,12 @@ double RawVehicleCommandConverterNode::calculateBrakeMap( return desired_brake_cmd; } -void RawVehicleCommandConverterNode::onSteering(const Steering::ConstSharedPtr msg) +void RawVehicleCommandConverterNode::processSteering(const Steering::ConstSharedPtr msg) { current_steer_ptr_ = std::make_unique<double>(msg->steering_tire_angle); } -void RawVehicleCommandConverterNode::onVelocity(const Odometry::ConstSharedPtr msg) +void RawVehicleCommandConverterNode::processVelocity(const Odometry::ConstSharedPtr msg) { current_twist_ptr_ = std::make_unique<TwistStamped>(); current_twist_ptr_->header = msg->header; @@ -224,22 +214,13 @@ void RawVehicleCommandConverterNode::onVelocity(const Odometry::ConstSharedPtr m void RawVehicleCommandConverterNode::onControlCmd(const Control::ConstSharedPtr msg) { - control_cmd_ptr_ = msg; - Odometry::SharedPtr velocity_msg_; - Odometry velocity_msg; - rclcpp::MessageInfo velocity_info; - Steering::SharedPtr steering_msg_; - Steering steering_msg; - rclcpp::MessageInfo steering_info; - - if ( - sub_velocity_->take(velocity_msg, velocity_info) && - sub_steering_->take(steering_msg, steering_info)) { - velocity_msg_ = std::make_shared<Odometry>(velocity_msg); - steering_msg_ = std::make_shared<Steering>(steering_msg); - onVelocity(velocity_msg_); - onSteering(steering_msg_); + const auto velocity_msg = sub_velocity_.takeData(); + const auto steering_msg = sub_steering_.takeData(); + if (velocity_msg && steering_msg) { + processVelocity(velocity_msg); + processSteering(steering_msg); } + control_cmd_ptr_ = msg; publishActuationCmd(); } } // namespace raw_vehicle_cmd_converter From 171981639cb81ede5c352878a6f232140853f71c Mon Sep 17 00:00:00 2001 From: zusizusi <sho.iwasawa.2@tier4.jp> Date: Thu, 6 Jun 2024 11:48:45 +0900 Subject: [PATCH 3/6] replace subscriber --- vehicle/raw_vehicle_cmd_converter/src/node.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/vehicle/raw_vehicle_cmd_converter/src/node.cpp b/vehicle/raw_vehicle_cmd_converter/src/node.cpp index 8c3447da436c1..6f02298387b2c 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/node.cpp +++ b/vehicle/raw_vehicle_cmd_converter/src/node.cpp @@ -202,11 +202,17 @@ double RawVehicleCommandConverterNode::calculateBrakeMap( void RawVehicleCommandConverterNode::processSteering(const Steering::ConstSharedPtr msg) { + if (!msg) { + return; + } current_steer_ptr_ = std::make_unique<double>(msg->steering_tire_angle); } void RawVehicleCommandConverterNode::processVelocity(const Odometry::ConstSharedPtr msg) { + if (!msg) { + return; + } current_twist_ptr_ = std::make_unique<TwistStamped>(); current_twist_ptr_->header = msg->header; current_twist_ptr_->twist = msg->twist.twist; @@ -216,10 +222,8 @@ void RawVehicleCommandConverterNode::onControlCmd(const Control::ConstSharedPtr { const auto velocity_msg = sub_velocity_.takeData(); const auto steering_msg = sub_steering_.takeData(); - if (velocity_msg && steering_msg) { - processVelocity(velocity_msg); - processSteering(steering_msg); - } + processVelocity(velocity_msg); + processSteering(steering_msg); control_cmd_ptr_ = msg; publishActuationCmd(); } From 5339d5b4b09e33a9d05fd48f8254b83f7a01fe9b Mon Sep 17 00:00:00 2001 From: zusizusi <sho.iwasawa.2@tier4.jp> Date: Thu, 6 Jun 2024 12:03:10 +0900 Subject: [PATCH 4/6] fix document --- vehicle/raw_vehicle_cmd_converter/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vehicle/raw_vehicle_cmd_converter/README.md b/vehicle/raw_vehicle_cmd_converter/README.md index 6ac1ee4666cae..ccbce3372f6ae 100644 --- a/vehicle/raw_vehicle_cmd_converter/README.md +++ b/vehicle/raw_vehicle_cmd_converter/README.md @@ -29,8 +29,8 @@ For ease of calibration and adjustments to the lookup table, an auto-calibration | Name | Type | Description | | --------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | | `~/input/control_cmd` | autoware_control_msgs::msg::Control | target `velocity/acceleration/steering_angle/steering_angle_velocity` is necessary to calculate actuation command. | -| `~/input/steering"` | autoware_vehicle_msgs::SteeringReport | current status of steering used for steering feed back control | -| `~/input/twist` | navigation_msgs::Odometry | twist topic in odometry is used. | +| `~/input/steering"` | autoware_vehicle_msgs::msg::SteeringReport | current status of steering used for steering feed back control | +| `~/input/odometry` | navigation_msgs::Odometry | twist topic in odometry is used. | ## Output topics From df65d77882183e9a289aa80c199e212d5df894ab Mon Sep 17 00:00:00 2001 From: zusizusi <sho.iwasawa.2@tier4.jp> Date: Thu, 6 Jun 2024 12:03:47 +0900 Subject: [PATCH 5/6] change function name --- .../include/raw_vehicle_cmd_converter/node.hpp | 4 ++-- vehicle/raw_vehicle_cmd_converter/src/node.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp b/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp index 89dc37ab5d959..7096bb5c51a9c 100644 --- a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp +++ b/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp @@ -78,7 +78,7 @@ class RawVehicleCommandConverterNode : public rclcpp::Node //!< @brief subscriber for vehicle command rclcpp::Subscription<Control>::SharedPtr sub_control_cmd_; // polling subscribers - tier4_autoware_utils::InterProcessPollingSubscriber<Odometry> sub_velocity_{ + tier4_autoware_utils::InterProcessPollingSubscriber<Odometry> sub_odometry_{ this, "~/input/odometry"}; tier4_autoware_utils::InterProcessPollingSubscriber<Steering> sub_steering_{ @@ -114,7 +114,7 @@ class RawVehicleCommandConverterNode : public rclcpp::Node double calculateSteer(const double vel, const double steering, const double steer_rate); void processSteering(const Steering::ConstSharedPtr msg); void onControlCmd(const Control::ConstSharedPtr msg); - void processVelocity(const Odometry::ConstSharedPtr msg); + void processOdometry(const Odometry::ConstSharedPtr msg); void publishActuationCmd(); // for debugging rclcpp::Publisher<Float32MultiArrayStamped>::SharedPtr debug_pub_steer_pid_; diff --git a/vehicle/raw_vehicle_cmd_converter/src/node.cpp b/vehicle/raw_vehicle_cmd_converter/src/node.cpp index 6f02298387b2c..b274ea6b9806c 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/node.cpp +++ b/vehicle/raw_vehicle_cmd_converter/src/node.cpp @@ -208,7 +208,7 @@ void RawVehicleCommandConverterNode::processSteering(const Steering::ConstShared current_steer_ptr_ = std::make_unique<double>(msg->steering_tire_angle); } -void RawVehicleCommandConverterNode::processVelocity(const Odometry::ConstSharedPtr msg) +void RawVehicleCommandConverterNode::processOdometry(const Odometry::ConstSharedPtr msg) { if (!msg) { return; @@ -220,9 +220,9 @@ void RawVehicleCommandConverterNode::processVelocity(const Odometry::ConstShared void RawVehicleCommandConverterNode::onControlCmd(const Control::ConstSharedPtr msg) { - const auto velocity_msg = sub_velocity_.takeData(); + const auto odometry_msg = sub_odometry_.takeData(); const auto steering_msg = sub_steering_.takeData(); - processVelocity(velocity_msg); + processOdometry(odometry_msg); processSteering(steering_msg); control_cmd_ptr_ = msg; publishActuationCmd(); From 930240a86ab14933c27701408df6e1abb8e50f5f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 6 Jun 2024 07:21:59 +0000 Subject: [PATCH 6/6] style(pre-commit): autofix --- vehicle/raw_vehicle_cmd_converter/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vehicle/raw_vehicle_cmd_converter/README.md b/vehicle/raw_vehicle_cmd_converter/README.md index ccbce3372f6ae..585e5da6c05f6 100644 --- a/vehicle/raw_vehicle_cmd_converter/README.md +++ b/vehicle/raw_vehicle_cmd_converter/README.md @@ -26,11 +26,11 @@ For ease of calibration and adjustments to the lookup table, an auto-calibration ## Input topics -| Name | Type | Description | -| --------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -| `~/input/control_cmd` | autoware_control_msgs::msg::Control | target `velocity/acceleration/steering_angle/steering_angle_velocity` is necessary to calculate actuation command. | +| Name | Type | Description | +| --------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `~/input/control_cmd` | autoware_control_msgs::msg::Control | target `velocity/acceleration/steering_angle/steering_angle_velocity` is necessary to calculate actuation command. | | `~/input/steering"` | autoware_vehicle_msgs::msg::SteeringReport | current status of steering used for steering feed back control | -| `~/input/odometry` | navigation_msgs::Odometry | twist topic in odometry is used. | +| `~/input/odometry` | navigation_msgs::Odometry | twist topic in odometry is used. | ## Output topics