diff --git a/aip_x2_gen2_launch/launch/hesai_OT128.launch.xml b/aip_x2_gen2_launch/launch/hesai_OT128.launch.xml
index e8881a1f..da6614be 100644
--- a/aip_x2_gen2_launch/launch/hesai_OT128.launch.xml
+++ b/aip_x2_gen2_launch/launch/hesai_OT128.launch.xml
@@ -31,6 +31,11 @@
+
+
+
+
+
@@ -64,6 +69,9 @@
+
+
+
diff --git a/aip_x2_gen2_launch/launch/hesai_QT128.launch.xml b/aip_x2_gen2_launch/launch/hesai_QT128.launch.xml
index 59df827e..2f5a8adc 100644
--- a/aip_x2_gen2_launch/launch/hesai_QT128.launch.xml
+++ b/aip_x2_gen2_launch/launch/hesai_QT128.launch.xml
@@ -32,6 +32,11 @@
+
+
+
+
+
@@ -64,5 +69,9 @@
+
+
+
+
diff --git a/aip_x2_gen2_launch/launch/lidar.launch.xml b/aip_x2_gen2_launch/launch/lidar.launch.xml
index 2763a2cc..fe1213a9 100644
--- a/aip_x2_gen2_launch/launch/lidar.launch.xml
+++ b/aip_x2_gen2_launch/launch/lidar.launch.xml
@@ -13,6 +13,14 @@
+
+
+
+
+
+
+
@@ -44,6 +52,9 @@
+
+
+
@@ -80,6 +91,9 @@
+
+
+
@@ -189,6 +203,9 @@
+
+
+
@@ -225,6 +242,9 @@
+
+
+
diff --git a/aip_x2_gen2_launch/launch/nebula_node_container.launch.py b/aip_x2_gen2_launch/launch/nebula_node_container.launch.py
index 98336e33..f4447198 100644
--- a/aip_x2_gen2_launch/launch/nebula_node_container.launch.py
+++ b/aip_x2_gen2_launch/launch/nebula_node_container.launch.py
@@ -161,7 +161,13 @@ def str2vector(string):
plugin="pointcloud_preprocessor::CropBoxFilterComponent",
name="crop_box_filter_self",
remappings=[
- ("input", "pointcloud_raw_ex"),
+ ("input",
+ (
+ "ring_filtered/pointcloud"
+ if LaunchConfiguration("enable_ring_filter").perform(context) == "true"
+ else "pointcloud_raw_ex"
+ ),
+ ),
("output", "self_cropped/pointcloud_ex"),
],
parameters=[cropbox_parameters],
@@ -280,6 +286,23 @@ def str2vector(string):
extra_arguments=[{"use_intra_process_comms": LaunchConfiguration("use_intra_process")}],
)
+ ring_filter_component = ComposableNode(
+ package="pointcloud_preprocessor",
+ plugin="pointcloud_preprocessor::RingFilterComponent",
+ name="ring_filter",
+ remappings=[
+ ("input", "pointcloud_raw_ex"),
+ ("output", "ring_filtered/pointcloud"),
+ ],
+ parameters=[
+ {
+ "ring_interval": LaunchConfiguration("ring_interval"),
+ "remove_interval_ring": LaunchConfiguration("remove_interval_ring"),
+ }
+ ],
+ extra_arguments=[{"use_intra_process_comms": LaunchConfiguration("use_intra_process")}],
+ )
+
container = ComposableNodeContainer(
name="nebula_node_container",
namespace="pointcloud_preprocessor",
@@ -313,11 +336,18 @@ def str2vector(string):
condition=launch.conditions.IfCondition(LaunchConfiguration("enable_blockage_diag")),
)
+ ring_filter_loader = LoadComposableNodes(
+ composable_node_descriptions=[ring_filter_component],
+ target_container=container,
+ condition=launch.conditions.IfCondition(LaunchConfiguration("enable_ring_filter")),
+ )
+
return [
container,
# ring_outlier_filter_loader,
dual_return_filter_loader,
blockage_diag_loader,
+ ring_filter_loader,
]
@@ -382,6 +412,11 @@ def add_launch_arg(name: str, default_value=None, description=None):
add_launch_arg("max_azimuth_deg", "225.0")
add_launch_arg("enable_blockage_diag", "true")
+ # ring filter params
+ add_launch_arg("enable_ring_filter", "true")
+ add_launch_arg("ring_interval", "2")
+ add_launch_arg("remove_interval_ring", "true")
+
# TODO: remove
add_launch_arg("scan_phase", "0.0")