gazebo/SLAM

rtabmap으로 3d 지도 작성

정지홍 2025. 6. 27. 13:54

https://jihong.tistory.com/661

 

rtabmap ros 연습

sudo apt install ros-humble-rtabmap-rosros2 launch realsense2_camera rs_launch.pyros2 launch rtabmap_launch rtabmap.launch.py rtabmap_args:="--delete_db_on_start" rgb_topic:=/camera/camera/color/image_raw depth_topic:=/camera/camera/depth/image_rect_raw ca

jihong.tistory.com

 

 

위에 이어서 작성

 

1. RealSense카메라 노드를 실행한다.

  • ros2 launch : ros2의 launch파일을 실행하는 명령어
  • realsense2_camera : ROS2의 패키지 이름. 
  • rs_launch.py : realsense 카메라 노드를 실행하는 python launch파일 이름 
  • ===> 즉, RealSense 카메라를 Ros2 환경에서 구동할때 사용하는 기본 명령어이다.
ros2 launch realsense2_camera rs_launch.py \
    enable_gyro:=true \
    enable_accel:=true \
    unite_imu_method:=linear_interpolation

 

 

 

2. Ros2에서 RTAB-MAP을 실행.

  • ros2 launch rtabmap_launch rtabmap.launch.py : RTAB-MAP 패키지의 launch파일 실행

  • rtabmap_args:="--delete_db_on_start"  : 시작할때 기존의 RTAP-MAP db파일을 삭제하고 새로 시작한다. ( 해당 옵션이 없으면, 기존 맵 데이터가 남아서 결과가 꼬일수도 있다. )

  • rgb_topic:=/camera/camera/color/image_raw : RTAB-MAP에서 사용하는 RGB 이미지 토픽 설정

  • camera_info_topic:=/camera/camera/depth/image_rect_raw : RTAB-Map에서 사용할 depth 이미지 토픽 설정
  • camera_info_topic:=/camera/camera/color/camera_info : RGB 카메라 정보 토픽을 지정
  • approx_sync:=True : RGB와 Depth 이미지를 Approximate Time Synchronization방식으로 동기화.
    • Approximate Time Synchronization방식 : 조금 차이 나는 시간이라도, 충분히 비슷하면 자동으로 한쌍으로 묶어준다. 대부분의 실제 시스템에는 이것이 안정적이다.
    • Exact 방식: 정확히 같은 timestamp의 메시지만 한쌍으로 묶어준다.
    • ===> 실제 센서 구동시에 timestamp가 항상 100%일치하지 않기때문에 사용한다. 즉, True옵션을 사용하면, timestamp가 일정한 threshold이내에서만 차이가 난다면, 이를 무시하고 자동으로 RGB와 Depth를 자동으로 맞춰준다. 
      이렇게 한다면, 데이터 유실없이 안정적으로 SLAM이 돌아간다.
ros2 launch rtabmap_launch rtabmap.launch.py   rtabmap_args:="--delete_db_on_start"   rgb_topic:=/camera/camera/color/image_raw   depth_topic:=/camera/camera/depth/image_rect_raw   camera_info_topic:=/camera/camera/color/camera_info   approx_sync:=True

 

 

 

 

3. ROS 2에서 좌표계 사이의 고정변환( static transform )을 퍼블리시할때 사용하는 명령어.

  • ROS 2에서 제공하는 static transform 퍼블리셔 노드를 실행.
  • 좌표계 간의 변환 관계를 한번한 broadcast하고 계속 유지 시켜줌.
ros2 run tf2_ros static_transform_publisher \
  0 0 0  0 0 0 \
  base_link \
  camera_color_optical_frame
  
  
  
  ros2 run tf2_ros static_transform_publisher \
  	0 0 0 -1.5708 0 -1.5708 \
    base_link \
    camera_color_optical_frame

 

 

 

4. 카메라 움직이며 지도 작성 

 

 

 

5. file을 눌러서 3d맵으로 export한다.

rtabmap-databaseViewer ~/.ros/rtabmap.db

 

 

 

6.

  • 만약에 보이는 축을 변경하고 싶다면, filters에서 Normals, Curvatures and Orientation 선택한다. 그리고 Transform: Rotate 선택한다. 2번째 사진은 x축을 90도 회전한것이다.
meshlab cloud.ply

현재 위에서 pose를 잘못 지정해서, y가 땅을 가르키고 있다. 평면은 x,z이고...
x를 기준으로 90도 회전 시킨것.