이 글에서는 로봇에 3D SLAM(Simultaneous Localization and Mapping, 동시적 위치 추정 및 지도 작성) 기술을 적용하는 방법을 다룹니다. 3D SLAM은 로봇이 3차원 공간에서 주행할 수 있도록 지도와 위치를 추정하는 기술로, RealSense D415와 같은 3D 깊이 카메라를 이용하여 입체적인 장애물 회피 및 경로 계획을 가능하게 합니다. 3D SLAM은 복잡한 환경에서 안정적인 자율 주행을 구현하는 데 필수적인 기능입니다.
3D SLAM은 로봇이 3차원 공간에서 이동할 때 깊이 정보와 위치 정보를 동시에 수집하여 지도를 작성하고 현재 위치를 추정하는 기술입니다. 기존의 2D SLAM은 평면에서의 이동을 전제로 하므로, 높낮이가 있는 계단이나 복잡한 장애물이 있는 환경에서는 정확도가 떨어질 수 있습니다. 이에 반해 3D SLAM은 다음과 같은 장점이 있습니다.
3D SLAM을 구현하려면 깊이 카메라와 3D SLAM 소프트웨어가 필요합니다.
3D SLAM을 위해 RTAB-Map과 RealSense ROS2 드라이버를 설치하고, ROS2 환경에서 실행할 준비를 합니다.
RTAB-Map은 실시간 3D SLAM을 지원하는 ROS2 패키지로, RGB-D 카메라 데이터를 이용해 실시간으로 3D 지도를 작성할 수 있습니다.
sudo apt update
sudo apt install ros-foxy-rtabmap-ros
RealSense 카메라의 데이터를 ROS2에서 사용할 수 있도록 realsense2_camera 패키지를 설치합니다.
cd ~/ros2_ws/src
git clone https://github.com/IntelRealSense/realsense-ros.git -b ros2
cd ~/ros2_ws
colcon build --packages-select realsense2_camera
source install/setup.bash
이제 RTAB-Map과 RealSense ROS2 드라이버가 설치되었습니다. RTAB-Map에서 RealSense 카메라의 데이터를 사용하여 3D 지도를 생성할 수 있습니다.
RTAB-Map에서 3D SLAM을 수행하기 위한 설정 파일을 작성합니다. RTAB-Map은 많은 설정이 가능하므로, 기본 설정에서 시작해 이후에 조정할 수 있습니다.
my_robot_description 패키지의 config 폴더에 rtabmap_params.yaml 파일을 생성합니다.
mkdir -p ~/ros2_ws/src/my_robot_description/config
touch ~/ros2_ws/src/my_robot_description/config/rtabmap_params.yaml
rtabmap_params.yaml 파일을 다음과 같이 구성하여 RTAB-Map을 설정합니다.
rtabmap:
ros__parameters:
frame_id: "base_link"
subscribe_depth: true
subscribe_rgb: true
subscribe_scan: false
subscribe_stereo: false
use_action_for_goal: false
odom_frame_id: "odom"
map_frame_id: "map"
rgb_topic: "/camera/color/image_raw"
depth_topic: "/camera/depth/image_rect_raw"
queue_size: 10
approx_sync: true
vis/MinInliers: 15
vis/MaxDepth: 5.0
grid/RangeMax: 10.0
grid/3D: true
설정 설명:
RTAB-Map 노드를 실행하려면 launch 파일을 작성해야 합니다. my_robot_description 패키지의 launch 폴더에 rtabmap_launch.py 파일을 생성합니다.
mkdir -p ~/ros2_ws/src/my_robot_description/launch
touch ~/ros2_ws/src/my_robot_description/launch/rtabmap_launch.py
rtabmap_launch.py 파일에 다음 내용을 추가하여 RTAB-Map과 RealSense 카메라를 실행합니다.
# rtabmap_launch.py
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='realsense2_camera',
executable='realsense2_camera_node',
name='realsense_camera',
parameters=[{'depth_module.profile': '640x480x30', 'rgb_camera.profile': '640x480x30'}]
),
Node(
package='rtabmap_ros',
executable='rtabmap',
name='rtabmap',
output='screen',
parameters=['~/ros2_ws/src/my_robot_description/config/rtabmap_params.yaml']
)
])
이 파일은 RealSense 카메라 노드와 RTAB-Map 노드를 실행하여 실시간으로 3D 지도를 작성하고, 위치를 추정합니다.
이제 3D SLAM을 실행하여 RealSense 카메라의 깊이 데이터를 바탕으로 지도를 작성하고, RViz를 통해 결과를 시각화합니다.
다음 명령어를 통해 RTAB-Map을 실행합니다.
ros2 launch my_robot_description rtabmap_launch.py
이 명령어를 실행하면, RTAB-Map이 RealSense 카메라의 깊이 데이터를 사용하여 실시간으로 3D 지도를 생성하고 로봇의 위치를 추정합니다.
RViz를 사용하여 RTAB-Map에서 생성된 3D 지도를 실시간으로 시각화할 수 있습니다.
RViz 실행:
ros2 run rviz2 rviz2
Fixed Frame 설정: RViz의 Fixed Frame을 map으로 설정합니다.
PointCloud2 데이터 추가: RViz에서 Add 버튼을 클릭하여 PointCloud2를 추가하고, Topic을 /rtabmap/cloud로 설정합니다. 이를 통해 RTAB-Map이 생성한 3D 포인트 클라우드를 확인할 수 있습니다.
TF 시각화: TF를 추가하여 로봇의 위치와 프레임 간 관계를 시각화하고, 로봇이 지도 내에서 어떻게 이동하는지 확인할 수 있습니다.
이 설정을 통해 로봇이 이동하는 동안 생성되는 3D 지도를 실시간으로 확인할 수 있습니다.
Map 매개변수 조정 및 성능 최적화**
RTAB-Map은 다양한 매개변수를 제공하므로, 필요에 따라 최적화할 수 있습니다.
지도 해상도를 조정하여 메모리 사용량을 줄이고, 지도를 더 간략하게 생성할 수 있습니다.
grid/Resolution: 지도의 해상도를 조정하여 필요한 수준의 세부사항만 포함할 수 있습니다.
예시:
grid/Resolution: 0.1
실내 및 실외 환경에 따라 깊이 범위를 조정하여, 지나치게 먼 거리에 있는 장애물을 인식하지 않도록 설정할 수 있습니다.
vis/MaxDepth: 깊이 데이터의 최대 인식 범위를 조정하여 불필요한 정보를 필터링합니다.
예시:
vis/MaxDepth: 4.0
루프 클로징은 로봇이 이전에 지나갔던 위치를 인식하고, 지도를 갱신하는 기능입니다. 실내 환경에서는 루프 클로징을 활성화하여 지도의 정확성을 높일 수 있습니다.
rtabmap:
ros__parameters:
loop_closure_detection: true
실제 환경에서 RTAB-Map을 사용하여 3D SLAM을 테스트합니다. 로봇을 다양한 경로로 이동시키며, 복잡한 장애물이나 높이 차이가 있는 지형에서도 안정적으로 3D 지도를 생성하고 위치를 추정할 수 있는지 확인합니다.
3D SLAM을 통해 생성된 지도를 기반으로 로봇이 장애물을 안정적으로 감지하고 회피할 수 있는지 테스트합니다. 3D 데이터는 로봇이 장애물의 높이와 위치를 더 정확하게 파악할 수 있게 해주므로, 일반적인 2D 장애물 회피보다 안정적인 동작을 기대할 수 있습니다.
3D SLAM으로 생성된 지도를 기반으로 로봇이 목표 위치에 도달하고, 복귀할 수 있는지 확인합니다. 3차원 정보가 포함된 지도는 경로 계획 시 로봇의 이동에 유리하며, 필요 시 고도를 조정하여 복잡한 지형에서도 안정적인 경로를 설정할 수 있습니다.
3D SLAM 기술을 적용하여 로봇이 3차원 공간에서 자율적으로 위치를 추정하고 지도를 작성할 수 있게 되었습니다. RTAB-Map과 RealSense 카메라를 활용하여 3D 깊이 데이터를 기반으로 복잡한 환경에서도 안정적인 자율 주행이 가능해졌습니다. 이로써 로봇은 계단이나 높은 장애물이 있는 환경에서도 정확하게 이동할 수 있으며, 다양한 실제 환경에 대한 적응성이 크게 향상되었습니다. 추가적인 매개변수 조정과 테스트를 통해 3D SLAM의 성능을 최적화할 수 있으며, 이를 기반으로 다양한 응용 환경에서 더욱 정밀한 자율 주행이 가능해집니다.