diff --git a/aip_x2_launch/config/dual_return_filter.param.yaml b/aip_x2_launch/config/dual_return_filter.param.yaml index 5b1f1adb..3c89faa2 100644 --- a/aip_x2_launch/config/dual_return_filter.param.yaml +++ b/aip_x2_launch/config/dual_return_filter.param.yaml @@ -2,9 +2,11 @@ ros__parameters: roi_mode: "Fixed_azimuth_ROI" # description="options: `No_ROI`, `Fixed_xyz_ROI` or `Fixed_azimuth_ROI`"/> weak_first_local_noise_threshold: 2 # description="for No_ROI roi_mode, recommended value is 10" /> - visibility_error_threshold: 0.5 - visibility_warn_threshold: 0.9 - max_distance: 5.0 + visibility_error_threshold: 0.95 + visibility_warn_threshold: 0.97 + min_azimuth_deg: 100.0 + max_azimuth_deg: 260.0 + max_distance: 10.0 x_max: 18.0 x_min: -12.0 y_max: 2.0 diff --git a/aip_x2_launch/config/dummy_diag_publisher/sensor_kit.param.yaml b/aip_x2_launch/config/dummy_diag_publisher/sensor_kit.param.yaml index 02ec3b1a..cff78a81 100644 --- a/aip_x2_launch/config/dummy_diag_publisher/sensor_kit.param.yaml +++ b/aip_x2_launch/config/dummy_diag_publisher/sensor_kit.param.yaml @@ -13,17 +13,84 @@ ros__parameters: required_diags: # gnss - gnss: default + ## /sensing/gnss/001-connection + "topic_state_monitor_gnss_pose: gnss_topic_status": default + + ## /sensing/gnss/002-quality + "septentrio_driver: Quality indicators": default + + # imu + ## /sensing/imu/001-monitor + "imu_monitor: yaw_rate_status": default + + ## /sensing/imu/002-connection + "topic_state_monitor_imu_data: imu_topic_status": default + + ## /sensing/imu/003-gyro_bias + "gyro_bias_estimator: gyro_bias_validator": default # lidar - pandar_connection: default - pandar_temperature: default - pandar_ptp: default - "left_upper: visibility_validation": default - blockage_validation: default - concat_status: default + ## /sensing/lidar/pndr/001-connection + "pandar_monitor: /sensing/lidar/front_lower: pandar_connection": default + "pandar_monitor: /sensing/lidar/front_upper: pandar_connection": default + "pandar_monitor: /sensing/lidar/left_lower: pandar_connection": default + "pandar_monitor: /sensing/lidar/left_upper: pandar_connection": default + "pandar_monitor: /sensing/lidar/right_lower: pandar_connection": default + "pandar_monitor: /sensing/lidar/right_upper: pandar_connection": default + "pandar_monitor: /sensing/lidar/rear_lower: pandar_connection": default + "pandar_monitor: /sensing/lidar/rear_upper: pandar_connection": default - sensing_topic_status: default + ## /sensing/lidar/pndr/002-temperature + "pandar_monitor: /sensing/lidar/front_lower: pandar_temperature": default + "pandar_monitor: /sensing/lidar/front_upper: pandar_temperature": default + "pandar_monitor: /sensing/lidar/left_lower: pandar_temperature": default + "pandar_monitor: /sensing/lidar/left_upper: pandar_temperature": default + "pandar_monitor: /sensing/lidar/right_lower: pandar_temperature": default + "pandar_monitor: /sensing/lidar/right_upper: pandar_temperature": default + "pandar_monitor: /sensing/lidar/rear_lower: pandar_temperature": default + "pandar_monitor: /sensing/lidar/rear_upper: pandar_temperature": default - # imu - gyro_bias_estimator: default + ## /sensing/lidar/pndr/003-ptp + "pandar_monitor: /sensing/lidar/front_lower: pandar_ptp": default + "pandar_monitor: /sensing/lidar/front_upper: pandar_ptp": default + "pandar_monitor: /sensing/lidar/left_lower: pandar_ptp": default + "pandar_monitor: /sensing/lidar/left_upper: pandar_ptp": default + "pandar_monitor: /sensing/lidar/right_lower: pandar_ptp": default + "pandar_monitor: /sensing/lidar/right_upper: pandar_ptp": default + "pandar_monitor: /sensing/lidar/rear_lower: pandar_ptp": default + "pandar_monitor: /sensing/lidar/rear_upper: pandar_ptp": default + + ## /sensing/camera/001-connection + "v4l2_camera_camera0: capture_status": default + "v4l2_camera_camera1: capture_status": default + "v4l2_camera_camera2: capture_status": default + "v4l2_camera_camera3: capture_status": default + "v4l2_camera_camera4: capture_status": default + "v4l2_camera_camera5: capture_status": default + "v4l2_camera_camera6: capture_status": default + "v4l2_camera_camera7: capture_status": default + + ## /sensing/radar/001-connection + "topic_state_monitor_radar_front_center: radar_front_center_topic_status": default + "topic_state_monitor_radar_front_left: radar_front_left_topic_status": default + "topic_state_monitor_radar_front_right: radar_front_right_topic_status": default + "topic_state_monitor_radar_rear_center: radar_rear_center_topic_status": default + "topic_state_monitor_radar_rear_left: radar_rear_left_topic_status": default + "topic_state_monitor_radar_rear_right: radar_rear_right_topic_status": default + + ## /others/002-blockage_validation + "blockage_return_diag: /sensing/lidar/front_lower: blockage_validation": default + "blockage_return_diag: /sensing/lidar/front_upper: blockage_validation": default + "blockage_return_diag: /sensing/lidar/left_lower: blockage_validation": default + "blockage_return_diag: /sensing/lidar/left_upper: blockage_validation": default + "blockage_return_diag: /sensing/lidar/right_lower: blockage_validation": default + "blockage_return_diag: /sensing/lidar/right_upper: blockage_validation": default + "blockage_return_diag: /sensing/lidar/rear_lower: blockage_validation": default + "blockage_return_diag: /sensing/lidar/rear_upper: blockage_validation": default + + ## /others/004-concat_status + "concatenate_data: concat_status": default + + ## /others/005-visibility_validation/front_lower + "dual_return_filter: /sensing/lidar/front_lower: visibility_validation": default + "dual_return_filter: /sensing/lidar/left_upper: visibility_validation": default diff --git a/aip_x2_launch/launch/imu.launch.xml b/aip_x2_launch/launch/imu.launch.xml index e3f1a056..a71854ea 100644 --- a/aip_x2_launch/launch/imu.launch.xml +++ b/aip_x2_launch/launch/imu.launch.xml @@ -36,6 +36,10 @@ + + + + diff --git a/aip_x2_launch/launch/lidar.launch.xml b/aip_x2_launch/launch/lidar.launch.xml index 9ccf52af..dfb9482a 100644 --- a/aip_x2_launch/launch/lidar.launch.xml +++ b/aip_x2_launch/launch/lidar.launch.xml @@ -21,9 +21,10 @@ + - + @@ -45,7 +46,8 @@ - + + @@ -70,6 +72,7 @@ + @@ -95,9 +98,10 @@ - + + - + @@ -120,6 +124,7 @@ + @@ -127,7 +132,7 @@ - + @@ -145,9 +150,10 @@ - + + - + @@ -170,6 +176,7 @@ + @@ -195,7 +202,8 @@ - + + diff --git a/aip_x2_launch/launch/pandar_node_container.launch.py b/aip_x2_launch/launch/pandar_node_container.launch.py index b950761e..e32719be 100644 --- a/aip_x2_launch/launch/pandar_node_container.launch.py +++ b/aip_x2_launch/launch/pandar_node_container.launch.py @@ -255,7 +255,7 @@ def create_parameter_dict(*args): ], parameters=[ { - "angle_range": LaunchConfiguration("angle_range"), + "angle_range": LaunchConfiguration("blockage_range"), "horizontal_ring_id": LaunchConfiguration("horizontal_ring_id"), "vertical_bins": LaunchConfiguration("vertical_bins"), "is_channel_order_top2down": LaunchConfiguration("is_channel_order_top2down"), @@ -348,6 +348,7 @@ def add_launch_arg(name: str, default_value=None): add_launch_arg("use_intra_process", "true") add_launch_arg("vertical_bins", "40") add_launch_arg("horizontal_ring_id", "12") + add_launch_arg("blockage_range", "[270.0, 90.0]") add_launch_arg("min_azimuth_deg", "135.0") add_launch_arg("max_azimuth_deg", "225.0") diff --git a/aip_x2_launch/launch/sensing.launch.xml b/aip_x2_launch/launch/sensing.launch.xml index 274f6334..2a527f54 100644 --- a/aip_x2_launch/launch/sensing.launch.xml +++ b/aip_x2_launch/launch/sensing.launch.xml @@ -35,6 +35,10 @@ + + + + diff --git a/aip_x2_launch/launch/topic_state_monitor.launch.py b/aip_x2_launch/launch/topic_state_monitor.launch.py new file mode 100644 index 00000000..0eafa9e0 --- /dev/null +++ b/aip_x2_launch/launch/topic_state_monitor.launch.py @@ -0,0 +1,195 @@ +# Copyright 2024 Tier IV, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from launch import LaunchDescription +from launch_ros.actions import ComposableNodeContainer +from launch_ros.descriptions import ComposableNode + + +def generate_launch_description(): + # GNSS topic monitor + gnss_topic_monitor = ComposableNode( + package="topic_state_monitor", + plugin="topic_state_monitor::TopicStateMonitorNode", + name="topic_state_monitor_gnss_pose", + parameters=[ + { + "topic": "/sensing/gnss/pose", + "topic_type": "geometry_msgs/msg/PoseStamped", + "best_effort": True, + "diag_name": "gnss_topic_status", + "warn_rate": 2.5, + "error_rate": 0.5, + "timeout": 5.0, + "window_size": 10, + } + ], + extra_arguments=[{"use_intra_process_comms": True}], + ) + + # IMU topic monitor + imu_topic_monitor = ComposableNode( + package="topic_state_monitor", + plugin="topic_state_monitor::TopicStateMonitorNode", + name="topic_state_monitor_imu_data", + parameters=[ + { + "topic": "/sensing/imu/imu_data", + "topic_type": "sensor_msgs/msg/Imu", + "best_effort": True, + "diag_name": "imu_topic_status", + "warn_rate": 5.0, + "error_rate": 1.0, + "timeout": 5.0, + "window_size": 10, + } + ], + extra_arguments=[{"use_intra_process_comms": True}], + ) + + # Radar topic monitors + radar_front_center_monitor = ComposableNode( + package="topic_state_monitor", + plugin="topic_state_monitor::TopicStateMonitorNode", + name="topic_state_monitor_radar_front_center", + parameters=[ + { + "topic": "/sensing/radar/front_center/objects_raw", + "topic_type": "radar_msgs/msg/RadarTracks", + "best_effort": True, + "diag_name": "radar_front_center_topic_status", + "warn_rate": 5.0, + "error_rate": 1.0, + "timeout": 5.0, + "window_size": 10, + } + ], + extra_arguments=[{"use_intra_process_comms": True}], + ) + + radar_front_left_monitor = ComposableNode( + package="topic_state_monitor", + plugin="topic_state_monitor::TopicStateMonitorNode", + name="topic_state_monitor_radar_front_left", + parameters=[ + { + "topic": "/sensing/radar/front_left/objects_raw", + "topic_type": "radar_msgs/msg/RadarTracks", + "best_effort": True, + "diag_name": "radar_front_left_topic_status", + "warn_rate": 5.0, + "error_rate": 1.0, + "timeout": 5.0, + "window_size": 10, + } + ], + extra_arguments=[{"use_intra_process_comms": True}], + ) + + radar_front_right_monitor = ComposableNode( + package="topic_state_monitor", + plugin="topic_state_monitor::TopicStateMonitorNode", + name="topic_state_monitor_radar_front_right", + parameters=[ + { + "topic": "/sensing/radar/front_right/objects_raw", + "topic_type": "radar_msgs/msg/RadarTracks", + "best_effort": True, + "diag_name": "radar_front_right_topic_status", + "warn_rate": 5.0, + "error_rate": 1.0, + "timeout": 5.0, + "window_size": 10, + } + ], + extra_arguments=[{"use_intra_process_comms": True}], + ) + + radar_rear_center_monitor = ComposableNode( + package="topic_state_monitor", + plugin="topic_state_monitor::TopicStateMonitorNode", + name="topic_state_monitor_radar_rear_center", + parameters=[ + { + "topic": "/sensing/radar/rear_center/objects_raw", + "topic_type": "radar_msgs/msg/RadarTracks", + "best_effort": True, + "diag_name": "radar_rear_center_topic_status", + "warn_rate": 5.0, + "error_rate": 1.0, + "timeout": 5.0, + "window_size": 10, + } + ], + extra_arguments=[{"use_intra_process_comms": True}], + ) + + radar_rear_left_monitor = ComposableNode( + package="topic_state_monitor", + plugin="topic_state_monitor::TopicStateMonitorNode", + name="topic_state_monitor_radar_rear_left", + parameters=[ + { + "topic": "/sensing/radar/rear_left/objects_raw", + "topic_type": "radar_msgs/msg/RadarTracks", + "best_effort": True, + "diag_name": "radar_rear_left_topic_status", + "warn_rate": 5.0, + "error_rate": 1.0, + "timeout": 5.0, + "window_size": 10, + } + ], + extra_arguments=[{"use_intra_process_comms": True}], + ) + + radar_rear_right_monitor = ComposableNode( + package="topic_state_monitor", + plugin="topic_state_monitor::TopicStateMonitorNode", + name="topic_state_monitor_radar_rear_right", + parameters=[ + { + "topic": "/sensing/radar/rear_right/objects_raw", + "topic_type": "radar_msgs/msg/RadarTracks", + "best_effort": True, + "diag_name": "radar_rear_right_topic_status", + "warn_rate": 5.0, + "error_rate": 1.0, + "timeout": 5.0, + "window_size": 10, + } + ], + extra_arguments=[{"use_intra_process_comms": True}], + ) + + # ComposableNodeContainer to run all ComposableNodes + container = ComposableNodeContainer( + name="topic_state_monitor_container", + namespace="topic_state_monitor", + package="rclcpp_components", + executable="component_container", + composable_node_descriptions=[ + gnss_topic_monitor, + imu_topic_monitor, + radar_front_center_monitor, + radar_front_left_monitor, + radar_front_right_monitor, + radar_rear_center_monitor, + radar_rear_left_monitor, + radar_rear_right_monitor, + ], + output="screen", + ) + + return LaunchDescription([container])