롤롤하
[Isaac Sim + ROS2] Depth Camera를 이용한 RGB-D SLAM RTAB-Map 구현 본문
안녕하세요. 이번 글에서는 Depth Camera를 이용한 RGB-D SLAM 중 하나인 RTAB-Map을 isaac sim에서 적용하는 내용을 다루어 보겠습니다.
rtabmap의 경우 2D LaserScan, Depth Camera, Stereo Camera등을 이용하여 단일 센서 SLAM 또는 multi-sensor SLAM이 가능합니다.




위의 4가지 방법 외에도 많은 방법들이 있습니다.추가적인 내용은 밑의 링크에서 확인가능합니다.
이번 글에서는 Depth Camera를 기반으로한 RGB-D SLAM과 RGB-D SLAM 구현을 위한 Depth Camera 추가 방법을 공유하고자 합니다.
Isaac Sim
1. Map 추가


Map의 경우 isaac sim assets 중 Office와 Hospital을 사용하였습니다.
맵을 추가한 이후에 저는 천장 구조물들을 다 비활성화 시켰습니다.
2. Robot Model 추가


기존에 사용하던 AWS 로봇의 바퀴 크기가 너무 작아, Carter_V1 모델로 교체했습니다.
Carter_V1의 경우 xForm의 이름들이 기존과는 달라 ROS에서 흔히 사용하는 link 이름들로 교체하였습니다.
RTAB-Map에서는 3D LiDAR를 직접 활용하지 않으므로, 기존 3D LiDAR를 2D LiDAR로 교체하여 사용했습니다.
기존과 동일한 방식으로 odom, cmd_vel, scan, clock Omnigraph를 추가했습니다.
- Depth Camera 추가 (중요)
Depth Camera Sensor와 Camera Omnigraph를 추가하는 방법은 크게 어렵지 않습니다.
카메라를 추가한 후 camera_link (xform)를 만들어 포함시켜줍니다.


Depth Camera 사용 시, TF 프레임 설정이 매우 중요합니다. 기존 카메라처럼 단순히 image_view만 고려하면, 생성된 맵이 공중에 떠버리는 문제가 발생할 수 있습니다.


- Camera TF

camera_frame(camera_link)과 chassis_frame(base_link)의 joint(cam_joint)를 추가해줍니다.
camera_frame_id를 기준으로 camera_frame은 y축이 밑으로, z축이 바라보는 물체를 향하게 맞추어주어야 합니다.
camer_link xform을 클릭한 후 w를 눌러 local frame으로 변경해줍니다. (아래의 사진과 같이 global frame 기준이라면 중앙에 하늘색 구가, local frame이라면 구가 주황색 입니다.)
xForm을 위의 사진과 맞게 맞춰준 후 camera_link xFrom의 Camera_Pseudo_Depth를 조절하여 알맞은 View를 만들어줍니다.


확인
rqt에서 이미지가 정상적으로 나온다면 Isaac Sim Setting은 끝입니다.

ROS2
Install RTAB-Map
sudo apt update sudo apt install ros-humble-rtabmap ros-humble-rtabmap-slam ros-humble-rtabmap-ros
launch RTAB-Map
1. Only Depth Camera
# Only Depth Camera 사용
ros2 launch rtabmap_launch rtabmap.launch.py \ use_sim_time:=true \ rgb_topic:=/rgb \ depth_topic:=/depth \ camera_info_topic:=/camera_info \ scan_topic:=/scan \ qos:=2 \ publish_tf_odom:=false \ frame_id:=base_link \ args:="-d --RGBD/NeighborLinkRefining true --Reg/Strategy 1 --delete_db_on_start --wait_for_transform 2.0" \ approx_sync:=true \ rviz:=true
2. Depth Camera + 2D LiDAR
# Depth Camera + 2D LiDAR 사용
ros2 launch rtabmap_launch rtabmap.launch.py \ use_sim_time:=true \ rgb_topic:=/rgb \ depth_topic:=/depth \ camera_info_topic:=/camera_info \ scan_topic:=/scan \ qos:=2 \ publish_tf_odom:=false \ frame_id:=base_link \ args:="-d --RGBD/NeighborLinkRefining true --Reg/Strategy 1 --delete_db_on_start --wait_for_transform 2.0" \ approx_sync:=true \ rviz:=true \ subscribe_scan:=True
--RGBD/NeighborLinkRefining true → 근접 키프레임 정합 최적화
--Reg/Strategy 1 → ICP 기반 정합 사용 (LiDAR 사용 시 적합)
--delete_db_on_start → 실행 시 기존 데이터베이스 삭제 (새로운 맵 시작)
--wait_for_transform 2.0 → TF 변환 대기 시간 (TF 오류 방지)


RTAP-MAP viz, Rviz
정상적으로 실행이 되신다면 RTAP-MAP viz와 Rviz에서 Depth Camera를 기반으로한 3D Map을 확인하실 수 있습니다.
RTAB-Map을 사용하다 보면 정합이 되지 않는 경우가 발생할 수 있지만, Loop Closure 기능을 통해 빠르게 맵이 정리되는 것을 확인할 수 있습니다.


저는 Nav를 연동하여 Waypoint 기반 이동을 진행하였습니다.
다만, Nav를 사용할 경우 RTAB-Map이 기본적으로 네임스페이스(/rtabmap/)를 사용하기 때문에 일부 추가적인 수정이 필요합니다.
해당 과정은 추후 Navigation을 다룰 때 다시 자세히 공유하도록 하겠습니다.
'Isaac Sim' 카테고리의 다른 글
[Isaac Sim + ROS2] LIO-SAM (LiDAR Inertial Odometry SLAM) 구현 (1) | 2025.02.23 |
---|---|
[Isaac Sim + ROS2] Wheel Slip과 2D Odometry (0) | 2025.02.19 |
[Isaac Sim + ROS2] 2D LiDAR Cartographer SLAM (0) | 2025.02.12 |
[Isaac Sim + ROS2] ROS2 카메라 프레임 드랍 개선 (WSL2) (4) | 2025.02.12 |