sick_multiscan_rtabmap.launch.py
Go to the documentation of this file.
1 import os
2 import sys
3 from ament_index_python.packages import get_package_share_directory
4 from launch import LaunchDescription
5 from launch.substitutions import LaunchConfiguration, PythonExpression
6 from launch.conditions import IfCondition, UnlessCondition
7 from launch_ros.actions import Node
8 from launch.actions import DeclareLaunchArgument
9 
11 
12  ld = LaunchDescription()
13  sick_scan_pkg_prefix = get_package_share_directory('sick_scan_xd')
14  sick_launch_file_path = os.path.join(sick_scan_pkg_prefix, 'launch/sick_multiscan_rtabmap.launch')
15  sick_node_arguments=[sick_launch_file_path]
16 
17  # Append optional commandline arguments in name:=value syntax
18  for arg in sys.argv:
19  if len(arg.split(":=")) == 2:
20  sick_node_arguments.append(arg)
21  # Create sick_scan_xd node
22  sick_node = Node(
23  package='sick_scan_xd',
24  executable='sick_generic_caller',
25  output='screen',
26  arguments=sick_node_arguments
27  )
28 
29  # Common parameter
30  wait_for_transform = 0.01
31  point_cloud_topic = "/cloud_all_fields_fullframe" # Point cloud topic published by sick_scan_xd
32  point_cloud_frame_id = "cloud" # Point cloud frame id published by sick_scan_xd
33  imu_topic = "/multiScan/imu" # IMU topic published by sick_scan_xd
34  deskewing = True # Optional lidar deskewing
35 
36  if deskewing: # Create deskewing node
37  point_cloud_topic_desk = f"{point_cloud_topic}/deskewed"
38  deskewing_node = Node(
39  package='rtabmap_util', executable='lidar_deskewing', name="lidar_deskewing", output="screen",
40  parameters=[{
41  "wait_for_transform": wait_for_transform,
42  "fixed_frame_id": point_cloud_frame_id,
43  "slerp": False,
44  }],
45  remappings=[("input_cloud", point_cloud_topic)],
46  arguments=[],
47  namespace="deskewing")
48  else:
49  point_cloud_topic_desk = point_cloud_topic
50  deskewing_node = None
51 
52  # Create rtabmap_odom node
53  rtabmap_odom_node = Node(
54  package='rtabmap_odom', executable='icp_odometry', name="icp_odometry", output="screen",
55  parameters=[{
56  "frame_id": point_cloud_frame_id,
57  "odom_frame_id": "odom",
58  "guess_frame_id": point_cloud_frame_id,
59  "wait_imu_to_init": True,
60  "wait_for_transform_duration": str(wait_for_transform),
61  "Icp/PointToPlane": "True",
62  "Icp/Iterations": "10",
63  "Icp/VoxelSize": "0.2",
64  "Icp/DownsamplingStep": "1",
65  "Icp/Epsilon": "0.001",
66  "Icp/PointToPlaneK": "20",
67  "Icp/PointToPlaneRadius": "0",
68  "Icp/MaxTranslation": "2",
69  "Icp/MaxCorrespondenceDistance": "1",
70  "Icp/PM": "True",
71  "Icp/PMOutlierRatio": "0.1",
72  "Icp/CorrespondenceRatio": "0.01",
73  "Icp/ReciprocalCorrespondences": "False",
74  "Odom/ScanKeyFrameThr": "0.8",
75  "Odom/Strategy": "0",
76  "OdomF2M/ScanSubtractRadius": "0.2",
77  "OdomF2M/ScanMaxSize": "15000",
78  }],
79  remappings=[("scan_cloud", point_cloud_topic_desk), ("imu", imu_topic)],
80  arguments=[],
81  namespace="rtabmap")
82 
83 
84  # Create rtabmap_slam node, see https://github.com/introlab/rtabmap_ros/blob/ros2/rtabmap_launch/launch/rtabmap.launch.py for an example configuration
85  rtabmap_slam_node = Node(
86  package='rtabmap_slam', executable='rtabmap', name="rtabmap", output="screen",
87  parameters=[{
88  "frame_id": point_cloud_frame_id,
89  "subscribe_depth": False,
90  "subscribe_rgb": False,
91  "subscribe_rgbd": False,
92  "subscribe_scan": False,
93  "subscribe_scan_cloud": True,
94  "approx_sync": True,
95  "Rtabmap/DetectionRate": "1",
96  "RGBD/NeighborLinkRefining": "False",
97  "RGBD/ProximityBySpace": "True",
98  "RGBD/ProximityMaxGraphDepth": "0",
99  "RGBD/ProximityPathMaxNeighbors": "1",
100  "RGBD/AngularUpdate": "0.05",
101  "RGBD/LinearUpdate": "0.05",
102  "Mem/NotLinkedNodesKept": "False",
103  "Mem/STMSize": "30",
104  "Reg/Strategy": "1",
105  "Grid/CellSize": "0.1",
106  "Grid/RangeMax": "20",
107  "Grid/ClusterRadius": "1",
108  "Grid/GroundIsObstacle": "True",
109  "Optimizer/GravitySigma": "0.3",
110  "Icp/VoxelSize": "0.3",
111  "Icp/PointToPlaneK": "20",
112  "Icp/PointToPlaneRadius": "0",
113  "Icp/PointToPlane": "False",
114  "Icp/Iterations": "10",
115  "Icp/Epsilon": "0.001",
116  "Icp/MaxTranslation": "3",
117  "Icp/MaxCorrespondenceDistance": "1",
118  "Icp/PM": "True",
119  "Icp/PMOutlierRatio": "0.7",
120  "Icp/CorrespondenceRatio": "0.4",
121  }],
122  remappings=[("scan_cloud", point_cloud_topic_desk), ("imu", imu_topic)],
123  arguments=["-d"], # parameter "-d": delete_db_on_start
124  namespace="rtabmap")
125 
126  # Create rtabmap_viz node
127  rtabmap_viz_node = Node(
128  package='rtabmap_viz', executable='rtabmap_viz', name="rtabmap_viz", output="screen",
129  parameters=[{
130  "frame_id": point_cloud_frame_id,
131  "odom_frame_id": "odom",
132  "subscribe_odom_info": False,
133  "subscribe_scan_cloud": True,
134  "approx_sync": False,
135  }],
136  remappings=[("scan_cloud", point_cloud_topic_desk)],
137  arguments=[],
138  namespace="rtabmap")
139 
140  ld.add_action(sick_node)
141  if deskewing:
142  ld.add_action(deskewing_node)
143  ld.add_action(rtabmap_odom_node)
144  ld.add_action(rtabmap_slam_node)
145  ld.add_action(rtabmap_viz_node)
146  return ld
147 
sick_multiscan_rtabmap.generate_launch_description
def generate_launch_description()
Definition: sick_multiscan_rtabmap.launch.py:10


sick_scan_xd
Author(s): Michael Lehning , Jochen Sprickerhof , Martin Günther
autogenerated on Fri Oct 25 2024 02:47:10