11import os
2- from platform import node
3- from time import strftime
42
53os .environ ["RCUTILS_COLORIZED_OUTPUT" ] = "1"
64
75from launch import LaunchDescription
8- from launch .actions import IncludeLaunchDescription , ExecuteProcess
9- from launch .launch_description_sources import AnyLaunchDescriptionSource
10- from launch .substitutions import PathJoinSubstitution , Command , FindExecutable
6+ from launch .actions import IncludeLaunchDescription
7+ from launch .launch_description_sources import PythonLaunchDescriptionSource
8+ from launch .substitutions import PathJoinSubstitution
9+
10+ from ament_index_python .packages import get_package_share_directory
1111
1212from launch_ros .actions import Node
1313from launch_ros .substitutions import FindPackageShare
1414
15- def generate_launch_description ():
16-
17- controller_config = PathJoinSubstitution (
18- [FindPackageShare ("uirover_description" ), "config" , "diff_drive.yaml" ]
19- )
2015
16+ def generate_launch_description ():
2117 ublox_config = PathJoinSubstitution (
2218 [FindPackageShare ("uirover_gnss" ), "config" , "zed_f9p.yaml" ]
2319 )
@@ -44,27 +40,29 @@ def generate_launch_description():
4440
4541 try :
4642 i = 0
47- for camera in os .listdir (' /dev/Arducam' ):
48- if not camera .startswith (' CAM' ):
43+ for camera in os .listdir (" /dev/Arducam" ):
44+ if not camera .startswith (" CAM" ):
4945 continue
5046 index = int (camera [3 :])
5147 nodes .append (
5248 Node (
53- package = "uirover_video " ,
49+ package = "uirover_perception " ,
5450 executable = "stream" ,
5551 name = f"arducam_{ i } " ,
5652 output = "both" ,
57- parameters = [{
58- 'port' : 5000 + index ,
59- 'device' : f"/dev/Arducam/{ camera } " ,
60- 'host' : '192.168.55.100' ,
61- # 'width': 1280,
62- # 'height': 720,
63- 'framerate' : 20.0
64- }]
53+ parameters = [
54+ {
55+ "port" : 5000 + index ,
56+ "device" : f"/dev/Arducam/{ camera } " ,
57+ "host" : "192.168.55.100" ,
58+ # 'width': 1280,
59+ # 'height': 720,
60+ "framerate" : 20.0 ,
61+ }
62+ ],
6563 )
6664 )
67- i += 1
65+ i += 1
6866 except FileNotFoundError :
6967 pass
7068
@@ -77,43 +75,131 @@ def generate_launch_description():
7775 )
7876 )
7977
78+ # ============================
79+ # Visual SLAM
80+ # ============================
81+
8082 nodes .append (
8183 IncludeLaunchDescription (
82- AnyLaunchDescriptionSource (
83- PathJoinSubstitution (
84- [FindPackageShare ("realsense2_camera" ), "launch/rs_launch.py" ]
85- )
84+ PythonLaunchDescriptionSource (
85+ [
86+ os .path .join (
87+ get_package_share_directory ("realsense2_camera" ), "launch"
88+ ),
89+ "/rs_launch.py" ,
90+ ]
8691 ),
8792 launch_arguments = {
88- "camera_namespace" : "uirover" ,
89- "camera_name" : "D435i_realsense_camera" ,
90- "depth_module.depth_profile" : "640x480x30" ,
91- "pointcloud.enable" : "true" ,
92- "unite_imu_method" : "2" ,
93- "tf_publish_rate" : "5.0" ,
93+ "camera_name" : "realsense" ,
94+ "camera_namespace" : "rover" ,
9495 "enable_gyro" : "true" ,
9596 "enable_accel" : "true" ,
97+ "unite_imu_method" : "2" ,
9698 "enable_infra1" : "true" ,
99+ "enable_infra2" : "true" ,
100+ "enable_sync" : "true" ,
101+ "initial_reset" : "true" ,
97102 }.items (),
98- )
103+ ),
99104 )
100105
101106 nodes .append (
102107 Node (
103- package = "ublox_gps" ,
104- executable = "ublox_gps_node" ,
105- name = "ublox_gps_node" ,
106- parameters = [ublox_config ]
107- )
108+ package = "imu_filter_madgwick" ,
109+ executable = "imu_filter_madgwick_node" ,
110+ namespace = "rover" ,
111+ output = "screen" ,
112+ parameters = [{"use_mag" : False , "world_frame" : "enu" , "publish_tf" : False }],
113+ remappings = [
114+ ("imu/data_raw" , "realsense/imu" ),
115+ ("imu/data" , "realsense/imu/data" ),
116+ ],
117+ ),
108118 )
109119
110120 nodes .append (
111121 Node (
112- package = 'uirover_simple_hardware' ,
113- executable = 'hardware_node'
122+ package = "rtabmap_odom" ,
123+ executable = "rgbd_odometry" ,
124+ namespace = "rover/slam" ,
125+ output = "screen" ,
126+ parameters = [
127+ {
128+ "frame_id" : "realsense_link" ,
129+ "subscribe_depth" : True ,
130+ "subscribe_odom_info" : True ,
131+ "approx_sync" : False ,
132+ "wait_imu_to_init" : True ,
133+ }
134+ ],
135+ remappings = [
136+ ("imu" , "/rover/realsense/imu/data" ),
137+ ("rgb/image" , "/rover/realsense/infra1/image_rect_raw" ),
138+ ("rgb/camera_info" , "/rover/realsense/infra1/camera_info" ),
139+ ("depth/image" , "/rover/realsense/depth/image_rect_raw" ),
140+ ],
141+ ),
142+ )
143+
144+ nodes .append (
145+ Node (
146+ package = "rtabmap_slam" ,
147+ executable = "rtabmap" ,
148+ namespace = "rover/slam" ,
149+ output = "screen" ,
150+ parameters = [
151+ {
152+ "frame_id" : "realsense_link" ,
153+ "subscribe_depth" : True ,
154+ "subscribe_odom_info" : True ,
155+ "approx_sync" : False ,
156+ "wait_imu_to_init" : True ,
157+ }
158+ ],
159+ remappings = [
160+ ("imu" , "/rover/realsense/imu/data" ),
161+ ("rgb/image" , "/rover/realsense/infra1/image_rect_raw" ),
162+ ("rgb/camera_info" , "/rover/realsense/infra1/camera_info" ),
163+ ("depth/image" , "/rover/realsense/depth/image_rect_raw" ),
164+ ],
165+ arguments = ["-d" ],
166+ ),
167+ )
168+
169+ nodes .append (
170+ Node (
171+ package = "rtabmap_viz" ,
172+ executable = "rtabmap_viz" ,
173+ namespace = "rover/slam" ,
174+ output = "screen" ,
175+ parameters = [
176+ {
177+ "frame_id" : "realsense_link" ,
178+ "subscribe_depth" : True ,
179+ "subscribe_odom_info" : True ,
180+ "approx_sync" : False ,
181+ "wait_imu_to_init" : True ,
182+ }
183+ ],
184+ remappings = [
185+ ("rgb/image" , "/rover/realsense/infra1/image_rect_raw" ),
186+ ("rgb/camera_info" , "/rover/realsense/infra1/camera_info" ),
187+ ("depth/image" , "/rover/realsense/depth/image_rect_raw" ),
188+ ],
189+ ),
190+ )
191+
192+ nodes .append (
193+ Node (
194+ package = "ublox_gps" ,
195+ executable = "ublox_gps_node" ,
196+ name = "ublox_gps_node" ,
197+ parameters = [ublox_config ],
114198 )
115199 )
116200
201+ nodes .append (Node (package = "uirover_simple_hardware" , executable = "hardware_node" ))
202+
117203 nodes .append (
118204 Node (
119205 package = "rmw_zenoh_cpp" ,
@@ -122,11 +208,11 @@ def generate_launch_description():
122208 )
123209 )
124210
125- nodes .append (
126- ExecuteProcess (
127- cmd = f"ros2 bag record -o bag/{ strftime ('%Y-%m-%d-%H-%M-%S' )} -a -d 9000" .split (" " ),
128- output = "log" ,
129- )
130- )
211+ # nodes.append(
212+ # ExecuteProcess(
213+ # cmd=f"ros2 bag record -o bag/{strftime('%Y-%m-%d-%H-%M-%S')} -a -d 9000".split(" "),
214+ # output="log",
215+ # )
216+ # )
131217
132218 return LaunchDescription (nodes )
0 commit comments