px4_sim

맵 작성 1트 ( 간소화 )

정지홍 2025. 10. 16. 14:38

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:=값
    • 서로 다른 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