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])