diff --git a/src/external_signage/src/external_signage/external_signage_core.py b/src/external_signage/src/external_signage/external_signage_core.py index 5fa8552..b5633d6 100644 --- a/src/external_signage/src/external_signage/external_signage_core.py +++ b/src/external_signage/src/external_signage/external_signage_core.py @@ -10,7 +10,7 @@ from std_msgs.msg import Bool from ament_index_python.packages import get_package_share_directory import external_signage.packet_tools as packet_tools -from autoware_adapi_v1_msgs.msg import MrmState +from autoware_adapi_v1_msgs.msg import MrmState, OperationModeState from std_msgs.msg import String from level4_mode_manager_msgs.msg import Level4DrivingStatus @@ -137,9 +137,10 @@ def __init__(self, node): self.node.get_logger().error(str(e)) self.autoware_status = { - "driving": True, + "driving": False, "mrm": False, } + self.is_autoware_launch = False # ros interface api_qos = rclpy.qos.QoSProfile( @@ -148,10 +149,17 @@ def __init__(self, node): reliability=rclpy.qos.QoSReliabilityPolicy.RELIABLE, durability=rclpy.qos.QoSDurabilityPolicy.TRANSIENT_LOCAL, ) + airport_mode_qos = rclpy.qos.QoSProfile( + history=rclpy.qos.QoSHistoryPolicy.KEEP_LAST, + depth=10, + reliability=rclpy.qos.QoSReliabilityPolicy.RELIABLE, + durability=rclpy.qos.QoSDurabilityPolicy.VOLATILE, + ) - node.create_service(SetBool, "/signage/trigger_external", self.trigger_external_signage) node.create_service(SetBool, "/signage/mode_change", self.change_mode) - self._sub_airport_mode = node.create_subscription(Bool, "/signage/airport_mode", self.change_airport_mode, api_qos) + self._sub_airport_mode = node.create_subscription( + Bool, "/signage/airport_mode", self.change_airport_mode, airport_mode_qos + ) self.mode_status_pub_ = node.create_publisher(Bool, "/signage/mode_status", api_qos) self.setting_pub_ = node.create_publisher(String, "/signage/external/settings", api_qos) self._sub_mrm = node.create_subscription( @@ -160,6 +168,12 @@ def __init__(self, node): self.sub_mrm_callback, api_qos, ) + self._sub_operation_mode = node.create_subscription( + OperationModeState, + "/api/operation_mode/state", + self.sub_operation_mode_callback, + api_qos, + ) self._sub_is_driving_level = node.create_subscription( Level4DrivingStatus, @@ -225,29 +239,27 @@ def send_data(self, display_key, data_key): sender = DataSender(self.bus, self.parser, self.protocol, self.node.get_logger()) sender.send(data, ack_query_ack, ack_data_chunk) - # Lv4のときは自動運転中かどうかで表示を変更する。Lv2のときは変更しない - def trigger_external_signage(self, request, response): + # operation modeを受け取り、Lv4のときは自動運転中かどうかで表示を変更する。Lv2のときは変更しない + def sub_operation_mode_callback(self, msg): try: - self.autoware_status["driving"] = request.data + self.is_autoware_launch = True + self.autoware_status["driving"] = msg.mode == OperationModeState.AUTONOMOUS if self._settings["in_experiment"]: - return response + return elif self._settings["airport"]: if self.autoware_status["mrm"]: self.display_signage("mrm") + elif self.autoware_status["driving"]: + self.display_signage("auto") else: - if request.data: - self.display_signage("auto") - else: - self.display_signage("null") + self.display_signage("null") else: - if request.data: + if self.autoware_status["driving"]: self.display_signage("auto") else: self.display_signage("null") - response.success = True except Exception as e: - self.node.get_logger().error(str(e)) - return response + self.node.get_logger().error("Unable to get the operation mode, ERROR: " + str(e)) # MRMが発生していて空港モードの場合は「緊急停止中」表示にする def sub_mrm_callback(self, msg): diff --git a/src/signage/launch/signage.launch.xml b/src/signage/launch/signage.launch.xml index fafc03f..a708160 100755 --- a/src/signage/launch/signage.launch.xml +++ b/src/signage/launch/signage.launch.xml @@ -3,12 +3,12 @@ + - - + diff --git a/src/signage/src/signage/ros_service_interface.py b/src/signage/src/signage/ros_service_interface.py index f390fe2..32c8700 100644 --- a/src/signage/src/signage/ros_service_interface.py +++ b/src/signage/src/signage/ros_service_interface.py @@ -16,7 +16,6 @@ import rclpy import time import threading -from std_srvs.srv import SetBool from autoware_adapi_v1_msgs.srv import AcceptStart from std_srvs.srv import Trigger @@ -35,7 +34,6 @@ def __init__(self, node, parameter_interface): self._cli_accept_start = self.__create_client( AcceptStart, "/api/motion/accept_start" ) - self._cli_trigger_external = self.__create_client(SetBool, "/signage/trigger_external") # service call function def accept_start(self): @@ -45,15 +43,6 @@ def accept_start(self): request = AcceptStart.Request() self.__service_call(self._cli_accept_start, request, True) - # service call function - def trigger_external_signage(self, on): - if self._parameter.debug_mode: - return - - request = SetBool.Request() - request.data = on - self.__service_call(self._cli_trigger_external, request, True) - # common denominator def __create_client(self, service_type, service_name): client = self._node.create_client(service_type, service_name) diff --git a/src/signage/src/signage/route_handler.py b/src/signage/src/signage/route_handler.py index d7dd41b..393fc65 100644 --- a/src/signage/src/signage/route_handler.py +++ b/src/signage/src/signage/route_handler.py @@ -54,7 +54,6 @@ def __init__( self._in_slowing_state = False self._announced_depart = False self._announced_arrive = False - self._trigger_external_signage = False self._processing_thread = False self.process_station_list_from_fms() @@ -298,20 +297,12 @@ def route_checker_callback(self): self._is_stopping = False self._announced_depart = False - if ( - not self._trigger_external_signage - and self._autoware.information.autoware_control - ): - self._service_interface.trigger_external_signage(True) - self._trigger_external_signage = True if ( not self._announce_engage and self._parameter.signage_stand_alone and self._autoware.information.autoware_control ): self._announce_interface.send_announce("engage") - self._service_interface.trigger_external_signage(True) - self._trigger_external_signage = True self._announce_engage = True elif self._autoware.information.route_state in [RouteState.ARRIVED, RouteState.UNSET]: # Check whether the vehicle arrive to goal @@ -321,13 +312,6 @@ def route_checker_callback(self): self._announce_engage = False self._announced_arrive = False - if ( - self._autoware.information.operation_mode != OperationModeState.AUTONOMOUS - or self._autoware.information.autoware_control != True - ) and self._trigger_external_signage: - self._service_interface.trigger_external_signage(False) - self._trigger_external_signage = False - if self._prev_route_state != RouteState.SET: if self._autoware.information.route_state == RouteState.SET: self.process_station_list_from_fms(force_update=True)