Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

롤롤하

[Isaac Sim + ROS2] Depth Camera를 이용한 RGB-D SLAM RTAB-Map 구현 본문

Isaac Sim

[Isaac Sim + ROS2] Depth Camera를 이용한 RGB-D SLAM RTAB-Map 구현

롤롤하 2025. 3. 3. 01:00
 
 

안녕하세요. 이번 글에서는 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

정상적으로 실행이 되신다면 RTAP-MAP viz와 Rviz에서 Depth Camera를 기반으로한 3D Map을 확인하실 수 있습니다.

RTAB-Map을 사용하다 보면 정합이 되지 않는 경우가 발생할 수 있지만, Loop Closure 기능을 통해 빠르게 맵이 정리되는 것을 확인할 수 있습니다.

 

저는 Nav를 연동하여 Waypoint 기반 이동을 진행하였습니다.

다만, Nav를 사용할 경우 RTAB-Map이 기본적으로 네임스페이스(/rtabmap/)를 사용하기 때문에 일부 추가적인 수정이 필요합니다.

해당 과정은 추후 Navigation을 다룰 때 다시 자세히 공유하도록 하겠습니다.