ros2 run rtabmap_viz rtabmap_viz
ros2 run rqt_image_view rqt_image_view
ssh -i ~/.ssh/id_ed25519 -Y quad@192.167.1.31
scp -r quad@192.167.1.31:~/.ros/rtabmap.db ~/
rtabmap-databaseViewer rtabmap.db
1.
ros2 launch mavros px4.launch fcu_url:=serial:///dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0:921600 fcu_protocol:=v2.0
2.
ros2 launch realsense2_camera rs_launch.py align_depth:=true enable_gyro:=true enable_accel:=true unite_imu_method:=2 enable_sync:=true publish_tf:=false
ros2 launch realsense2_camera rs_launch.py align_depth:=true enable_gyro:=true enable_accel:=true unite_imu_method:=linear_interpolation enable_sync:=true publish_tf:=false
3.
ros2 run tf2_ros static_transform_publisher 0.10 -0.02 0.05 0 0.13 0 1 base_link camera_link
4.
ros2 run tf2_ros static_transform_publisher 0 0 0 -0.5 0.5 -0.5 0.5 camera_link camera_color_optical_frame
5.
ros2 run rtabmap_odom rgbd_odometry --ros-args --params-file ~/rtabmap_odom_params.yaml -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r depth/camera_info:=/camera/camera/depth/camera_info -r imu:=/camera/camera/imu
rgbd_odometry:
ros__parameters:
frame_id: base_link
odom_frame_id: odom
publish_tf: true
wait_for_transform: 0.8
approx_sync: true
approx_sync_max_interval: 0.05
queue_size: 40
qos: 2
qos_camera_info: 2
subscribe_imu: true
"Kp/MaxFeatures": "2000"
# "Vis/MinInliers": "20"
"RGBD/AngularUpdate" : "0.04"
# [추가] 오도메트리 최적화 시 중력 가중치 사용
"Odom/Strategy": "0" # Frame-to-Map (기본값)
"Optimizer/GravitySigma": "0.1" # 중력 방향 오차를 0.1만큼만 허용 (강하게 잡음)
ros2 run rtabmap_odom rgbd_odometry --ros-args -p frame_id:=base_link -p odom_frame_id:=odom -p publish_tf:=true -p wait_for_transform:=0.8 -p approx_sync:=true -p approx_sync_max_interval:=0.02 -p qos:=2 -p qos_camera_info:=2 -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r depth/camera_info:=/camera/camera/depth/camera_info -r imu:=/camera/camera/imu
6.
ros2 run rtabmap_slam rtabmap --delete_db_on_start --Optimizer/GravitySigma 0.1 --ros-args -p frame_id:=base_link -p odom_frame_id:=odom -p map_frame_id:=map -p publish_tf:=true -p subscribe_depth:=true -p subscribe_rgb:=true -p subscribe_imu:=true -p approx_sync:=true -p qos_image:=2 -p qos_camera_info:=2 -p wait_for_transform:=0.6 -p queue_size:=50 -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r odom:=/odom -r imu:=/camera/camera/imu -r depth/camera_info:=/camera/camera/depth/camera_info
ros2 run rtabmap_slam rtabmap --delete_db_on_start --Optimizer/GravitySigma 0.1 --ros-args -p frame_id:=base_link -p odom_frame_id:=odom -p map_frame_id:=map -p publish_tf:=true -p subscribe_depth:=true -p subscribe_rgb:=true -p subscribe_imu:=true -p approx_sync:=true -p qos_image:=2 -p qos_camera_info:=2 -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r odom:=/odom -r imu:=/camera/camera/imu -r depth/camera_info:=/camera/camera/depth/camera_info
ros2 run rtabmap_slam rtabmap --ros-args -p frame_id:=base_link -p odom_frame_id:=odom -p map_frame_id:=map -p publish_tf:=true -p tf_delay:=0.12 -p tf_tolerance:=0.5 -p wait_for_transform:=0.8 -p subscribe_depth:=true -p subscribe_rgb:=true -p approx_sync:=true -p approx_sync_max_interval:=0.12 -p qos_image:=2 -p qos_camera_info:=2 -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r odom:=/odom -r imu:=/camera/camera/imu -r depth/camera_info:=/camera/camera/depth/camera_info -p subscribe_imu:=true
ros2 run rtabmap_slam rtabmap --ros-args -p frame_id:=base_link -p odom_frame_id:=odom -p map_frame_id:=map -p publish_tf:=true -p tf_delay:=0.12 -p tf_tolerance:=0.5 -p wait_for_transform:=0.8 -p subscribe_depth:=true -p subscribe_rgb:=true -p approx_sync:=true -p approx_sync_max_interval:=0.12 -p qos_image:=2 -p qos_camera_info:=2 -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r odom:=/rtabmap/odom -r imu:=/camera/camera/imu -r depth/camera_info:=/camera/camera/depth/camera_info -p subscribe_imu:=true
rgbd odometry에 관한 파라미터들...
rgbd_odometry:
ros__parameters:
frame_id: base_link
odom_frame_id: odom
publish_tf: true
wait_for_transform: 0.8
approx_sync: true
approx_sync_max_interval: 0.04
queue_size: 30
qos: 2
qos_camera_info: 2
subscribe_imu: true
"Kp/MaxFeatures": "2000"
"Vis/MinInliers": "20"
동기화 및 버퍼 관련
- \approx_sync:=true
- RGB / Depth / CameraInfo를 Approximate Time 정책으로 동기화.... ==> 이는 time stamp가 정확히 같지 않아도, 허용범위 내에서 가장 가까운 프레임끼리 묶는다.
- 언제 키나?
- multi sensor에서 time stamp가 미세하게 어긋나는 상황에서.
- 주의점
- 허용 범위와 큐 크기가 함께 튜닝되어야, 드랍/미동기 문제가 줄어든다.
- 허용 범위 approx_sync_max_interval
큐 크기 qeueu_size
- 허용 범위 approx_sync_max_interval
- 허용 범위와 큐 크기가 함께 튜닝되어야, 드랍/미동기 문제가 줄어든다.
- approx_sync_max_interval:=값
- 서로 다른 topic을 몇 초 이내의 시간 차이면, 같은 프레임으로 간주할지 정하는 허용 윈도.(초 단위)
- 권장범위 ( 30Hz에서 ) : 0.03 ~ 0.06이다. 30hz는 프레임 간격이 약 0.033s라서 0.02는 빡빡하다. 0.05는 안전한편.
- 키운다면? ===> drop은 줄어들지만, 시간차 큰 짝이 묶일 가능성이 증가...( 모션 추정이 튀거나 블러 )
- 줄인다면? ===> 정확한 페어링이 되지만 드랍↑/콜백 미수신↑.
- queue_size:=값
- 동기화 큐 크기... 늦게 도착한 메시지를 잠시 보관해서 짝 맞추는 여유를 준다.
- 권장 범위 : 20~50.
- 키운다면? ===> 드랍↓, 하지만 지연(latency)↑/메모리↑.
- 줄인다면? ===> 지연↓, 대신 미수신 경고/콜백 정지 위험↑.
IMU 사용
- subscribe_imu:=true
- imu를 실제로 구독해서 VIO에 사용
- 단, IMU 토픽 frame_id에 대한 TF가 트리에 있어야 함.
'px4_sim' 카테고리의 다른 글
| 맵 작성 2트 (0) | 2025.12.05 |
|---|---|
| jetson orin nano yolo (0) | 2025.11.14 |
| 움직이기 2트 (0) | 2025.10.13 |
| [rtabmap] error 3개 (0) | 2025.10.02 |
| px4 드론 topic들 정리 (0) | 2025.10.02 |