Skip to content

Commit 7842772

Browse files
committed
replace rclcpp::Subscription to tier4_autoware_utils::InterProcessPollingSubscriber
Signed-off-by: Autumn60 <akiro.harada@tier4.jp>
1 parent e1a9939 commit 7842772

File tree

2 files changed

+23
-60
lines changed

2 files changed

+23
-60
lines changed

system/emergency_handler/include/emergency_handler/emergency_handler_core.hpp

+11-8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <autoware_auto_vehicle_msgs/msg/control_mode_report.hpp>
2727
#include <autoware_auto_vehicle_msgs/msg/gear_command.hpp>
2828
#include <autoware_auto_vehicle_msgs/msg/hazard_lights_command.hpp>
29+
#include <tier4_autoware_utils/ros/polling_subscriber.hpp>
2930
#include <tier4_system_msgs/msg/mrm_behavior_status.hpp>
3031
#include <tier4_system_msgs/srv/operate_mrm.hpp>
3132

@@ -56,18 +57,20 @@ class EmergencyHandler : public rclcpp::Node
5657
EmergencyHandler();
5758

5859
private:
59-
// Subscribers
60+
// Subscribers with Callback
6061
rclcpp::Subscription<autoware_auto_system_msgs::msg::HazardStatusStamped>::SharedPtr
6162
sub_hazard_status_stamped_;
6263
rclcpp::Subscription<autoware_auto_control_msgs::msg::AckermannControlCommand>::SharedPtr
6364
sub_prev_control_command_;
64-
rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr sub_odom_;
65-
rclcpp::Subscription<autoware_auto_vehicle_msgs::msg::ControlModeReport>::SharedPtr
66-
sub_control_mode_;
67-
rclcpp::Subscription<tier4_system_msgs::msg::MrmBehaviorStatus>::SharedPtr
68-
sub_mrm_comfortable_stop_status_;
69-
rclcpp::Subscription<tier4_system_msgs::msg::MrmBehaviorStatus>::SharedPtr
70-
sub_mrm_emergency_stop_status_;
65+
// Subscribers without Callback
66+
tier4_autoware_utils::InterProcessPollingSubscriber<nav_msgs::msg::Odometry> sub_odom_{
67+
this, "~/input/odometry"};
68+
tier4_autoware_utils::InterProcessPollingSubscriber<autoware_auto_vehicle_msgs::msg::ControlModeReport>
69+
sub_control_mode_{this, "~/input/control_mode"};
70+
tier4_autoware_utils::InterProcessPollingSubscriber<tier4_system_msgs::msg::MrmBehaviorStatus>
71+
sub_mrm_comfortable_stop_status_{this, "~/input/mrm/comfortable_stop/status"};
72+
tier4_autoware_utils::InterProcessPollingSubscriber<tier4_system_msgs::msg::MrmBehaviorStatus>
73+
sub_mrm_emergency_stop_status_{this, "~/input/mrm/emergency_stop/status"};
7174

7275
autoware_auto_system_msgs::msg::HazardStatusStamped::ConstSharedPtr hazard_status_stamped_;
7376
autoware_auto_control_msgs::msg::AckermannControlCommand::ConstSharedPtr prev_control_command_;

system/emergency_handler/src/emergency_handler/emergency_handler_core.cpp

+12-52
Original file line numberDiff line numberDiff line change
@@ -38,41 +38,6 @@ EmergencyHandler::EmergencyHandler() : Node("emergency_handler")
3838
"~/input/prev_control_command", rclcpp::QoS{1},
3939
std::bind(&EmergencyHandler::onPrevControlCommand, this, _1));
4040

41-
// Subscriber without callback
42-
rclcpp::CallbackGroup::SharedPtr cb_group_noexec = this->create_callback_group(
43-
rclcpp::CallbackGroupType::MutuallyExclusive, false);
44-
auto subscription_options = rclcpp::SubscriptionOptions();
45-
subscription_options.callback_group = cb_group_noexec;
46-
47-
sub_odom_ = create_subscription<nav_msgs::msg::Odometry>(
48-
"~/input/odometry", rclcpp::QoS{1},
49-
[this]([[maybe_unused]] nav_msgs::msg::Odometry::SharedPtr) -> void
50-
{
51-
assert(false);
52-
}, subscription_options);
53-
54-
sub_control_mode_ = create_subscription<autoware_auto_vehicle_msgs::msg::ControlModeReport>(
55-
"~/input/control_mode", rclcpp::QoS{1},
56-
[this]([[maybe_unused]] autoware_auto_vehicle_msgs::msg::ControlModeReport::SharedPtr) -> void
57-
{
58-
assert(false);
59-
}, subscription_options);
60-
61-
// subscribe control mode
62-
sub_mrm_comfortable_stop_status_ = create_subscription<tier4_system_msgs::msg::MrmBehaviorStatus>(
63-
"~/input/mrm/comfortable_stop/status", rclcpp::QoS{1},
64-
[this]([[maybe_unused]] tier4_system_msgs::msg::MrmBehaviorStatus::SharedPtr) -> void
65-
{
66-
assert(false);
67-
}, subscription_options);
68-
69-
sub_mrm_emergency_stop_status_ = create_subscription<tier4_system_msgs::msg::MrmBehaviorStatus>(
70-
"~/input/mrm/emergency_stop/status", rclcpp::QoS{1},
71-
[this]([[maybe_unused]] tier4_system_msgs::msg::MrmBehaviorStatus::SharedPtr) -> void
72-
{
73-
assert(false);
74-
}, subscription_options);
75-
7641
// Publisher
7742
pub_control_command_ = create_publisher<autoware_auto_control_msgs::msg::AckermannControlCommand>(
7843
"~/output/control_command", rclcpp::QoS{1});
@@ -442,36 +407,31 @@ bool EmergencyHandler::isEmergency()
442407

443408
bool EmergencyHandler::isStopped()
444409
{
445-
auto odom = std::make_shared<nav_msgs::msg::Odometry>();
446-
rclcpp::MessageInfo msg_info;
447-
if(!sub_odom_->take(*odom, msg_info)) return false;
448-
410+
if(!sub_odom_.updateLatestData()) return false;
411+
auto odom = sub_odom_.getData();
449412
constexpr auto th_stopped_velocity = 0.001;
450-
return (odom->twist.twist.linear.x < th_stopped_velocity);
413+
return (odom.twist.twist.linear.x < th_stopped_velocity);
451414
}
452415

453416
bool EmergencyHandler::isAutonomous()
454417
{
455418
using autoware_auto_vehicle_msgs::msg::ControlModeReport;
456419

457-
auto control_mode = std::make_shared<autoware_auto_vehicle_msgs::msg::ControlModeReport>();
458-
rclcpp::MessageInfo msg_info;
459-
if(!sub_control_mode_->take(*control_mode, msg_info)) return false;
460-
return control_mode->mode == ControlModeReport::AUTONOMOUS;
420+
if(!sub_control_mode_.updateLatestData()) return false;
421+
auto mode = sub_control_mode_.getData();
422+
return mode.mode == ControlModeReport::AUTONOMOUS;
461423
}
462424

463425
bool EmergencyHandler::isComfortableStopStatusAvailable()
464426
{
465-
auto status = std::make_shared<tier4_system_msgs::msg::MrmBehaviorStatus>();
466-
rclcpp::MessageInfo msg_info;
467-
if(!sub_mrm_comfortable_stop_status_->take(*status, msg_info)) return false;
468-
return status->state != tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE;
427+
if(!sub_mrm_comfortable_stop_status_.updateLatestData()) return false;
428+
auto status = sub_mrm_comfortable_stop_status_.getData();
429+
return status.state != tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE;
469430
}
470431

471432
bool EmergencyHandler::isEmergencyStopStatusAvailable()
472433
{
473-
auto status = std::make_shared<tier4_system_msgs::msg::MrmBehaviorStatus>();
474-
rclcpp::MessageInfo msg_info;
475-
if(!sub_mrm_emergency_stop_status_->take(*status, msg_info)) return false;
476-
return status->state != tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE;
434+
if(!sub_mrm_emergency_stop_status_.updateLatestData()) return false;
435+
auto status = sub_mrm_emergency_stop_status_.getData();
436+
return status.state != tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE;
477437
}

0 commit comments

Comments
 (0)