diff --git a/launch/tier4_system_launch/launch/system.launch.xml b/launch/tier4_system_launch/launch/system.launch.xml
index a1bbfc883de7c..e5f7aa4e18b33 100644
--- a/launch/tier4_system_launch/launch/system.launch.xml
+++ b/launch/tier4_system_launch/launch/system.launch.xml
@@ -25,11 +25,12 @@
-
-
-
-
-
+
+
+
+
+
+
@@ -57,6 +58,13 @@
+
+
+
+
+
+
+
@@ -70,8 +78,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -85,52 +105,34 @@
-
+
+
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/system/default_ad_api/src/operation_mode.cpp b/system/default_ad_api/src/operation_mode.cpp
index 829585ed4b8b4..d4b430ecd0579 100644
--- a/system/default_ad_api/src/operation_mode.cpp
+++ b/system/default_ad_api/src/operation_mode.cpp
@@ -39,18 +39,15 @@ OperationModeNode::OperationModeNode(const rclcpp::NodeOptions & options)
adaptor.init_cli(cli_mode_, group_cli_);
adaptor.init_cli(cli_control_, group_cli_);
- const std::vector module_names = {
- "sensing", "perception", "map", "localization", "planning", "control", "vehicle", "system",
+ const auto name = "/system/operation_mode/availability";
+ const auto qos = rclcpp::QoS(1);
+ const auto callback = [this](const OperationModeAvailability::ConstSharedPtr msg) {
+ mode_available_[OperationModeState::Message::STOP] = msg->stop;
+ mode_available_[OperationModeState::Message::AUTONOMOUS] = msg->autonomous;
+ mode_available_[OperationModeState::Message::LOCAL] = msg->local;
+ mode_available_[OperationModeState::Message::REMOTE] = msg->remote;
};
-
- for (size_t i = 0; i < module_names.size(); ++i) {
- const auto name = "/system/component_state_monitor/component/autonomous/" + module_names[i];
- const auto qos = rclcpp::QoS(1).transient_local();
- const auto callback = [this, i, module_names](const ModeChangeAvailable::ConstSharedPtr msg) {
- module_states_[module_names[i]] = msg->available;
- };
- sub_module_states_.push_back(create_subscription(name, qos, callback));
- }
+ sub_availability_ = create_subscription(name, qos, callback);
timer_ = rclcpp::create_timer(
this, get_clock(), rclcpp::Rate(5.0).period(), std::bind(&OperationModeNode::on_timer, this));
@@ -60,8 +57,8 @@ OperationModeNode::OperationModeNode(const rclcpp::NodeOptions & options)
mode_available_[OperationModeState::Message::UNKNOWN] = false;
mode_available_[OperationModeState::Message::STOP] = true;
mode_available_[OperationModeState::Message::AUTONOMOUS] = false;
- mode_available_[OperationModeState::Message::LOCAL] = true;
- mode_available_[OperationModeState::Message::REMOTE] = true;
+ mode_available_[OperationModeState::Message::LOCAL] = false;
+ mode_available_[OperationModeState::Message::REMOTE] = false;
}
template
@@ -135,23 +132,6 @@ void OperationModeNode::on_state(const OperationModeState::Message::ConstSharedP
void OperationModeNode::on_timer()
{
- bool autonomous_available = true;
- std::string unhealthy_components = "";
- for (const auto & state : module_states_) {
- if (!state.second) {
- unhealthy_components += unhealthy_components.empty() ? state.first : ", " + state.first;
- }
- autonomous_available &= state.second;
- }
- mode_available_[OperationModeState::Message::AUTONOMOUS] = autonomous_available;
-
- if (!unhealthy_components.empty()) {
- RCLCPP_INFO_THROTTLE(
- get_logger(), *get_clock(), 3000,
- "%s component state is unhealthy. Autonomous is not available.",
- unhealthy_components.c_str());
- }
-
update_state();
}
diff --git a/system/default_ad_api/src/operation_mode.hpp b/system/default_ad_api/src/operation_mode.hpp
index 1830b7041b566..7cd609b5eb852 100644
--- a/system/default_ad_api/src/operation_mode.hpp
+++ b/system/default_ad_api/src/operation_mode.hpp
@@ -25,7 +25,7 @@
#include
// TODO(Takagi, Isamu): define interface
-#include
+#include
// This file should be included after messages.
#include "utils/types.hpp"
@@ -47,7 +47,7 @@ class OperationModeNode : public rclcpp::Node
using ChangeToRemote = autoware_ad_api::operation_mode::ChangeToRemote;
using OperationModeRequest = system_interface::ChangeOperationMode::Service::Request;
using AutowareControlRequest = system_interface::ChangeAutowareControl::Service::Request;
- using ModeChangeAvailable = tier4_system_msgs::msg::ModeChangeAvailable;
+ using OperationModeAvailability = tier4_system_msgs::msg::OperationModeAvailability;
OperationModeState::Message curr_state_;
OperationModeState::Message prev_state_;
@@ -65,9 +65,7 @@ class OperationModeNode : public rclcpp::Node
Sub sub_state_;
Cli cli_mode_;
Cli cli_control_;
-
- std::unordered_map module_states_;
- std::vector::SharedPtr> sub_module_states_;
+ rclcpp::Subscription::SharedPtr sub_availability_;
void on_change_to_stop(
const ChangeToStop::Service::Request::SharedPtr req,
diff --git a/system/system_diagnostic_monitor/launch/system_diagnostic_monitor.launch.xml b/system/system_diagnostic_monitor/launch/system_diagnostic_monitor.launch.xml
index b00fcb8a26f68..8e2566a747abf 100644
--- a/system/system_diagnostic_monitor/launch/system_diagnostic_monitor.launch.xml
+++ b/system/system_diagnostic_monitor/launch/system_diagnostic_monitor.launch.xml
@@ -1,6 +1,8 @@
+
+