+1) 3D SLAM 기술 적용

이승석·2024년 11월 5일

Delivery Robot

목록 보기
10/11

3D SLAM 기술 적용

이 글에서는 로봇에 3D SLAM(Simultaneous Localization and Mapping, 동시적 위치 추정 및 지도 작성) 기술을 적용하는 방법을 다룹니다. 3D SLAM은 로봇이 3차원 공간에서 주행할 수 있도록 지도와 위치를 추정하는 기술로, RealSense D415와 같은 3D 깊이 카메라를 이용하여 입체적인 장애물 회피 및 경로 계획을 가능하게 합니다. 3D SLAM은 복잡한 환경에서 안정적인 자율 주행을 구현하는 데 필수적인 기능입니다.


1. 3D SLAM의 개념과 필요성

3D SLAM은 로봇이 3차원 공간에서 이동할 때 깊이 정보위치 정보를 동시에 수집하여 지도를 작성하고 현재 위치를 추정하는 기술입니다. 기존의 2D SLAM은 평면에서의 이동을 전제로 하므로, 높낮이가 있는 계단이나 복잡한 장애물이 있는 환경에서는 정확도가 떨어질 수 있습니다. 이에 반해 3D SLAM은 다음과 같은 장점이 있습니다.

  • 복잡한 3D 환경에서도 정확한 위치 추정: 로봇이 높은 장애물이나 다양한 높이의 지형을 인식할 수 있습니다.
  • 깊이 정보를 활용한 장애물 회피: 입체적인 장애물을 더 정확하게 감지하여, 보다 안정적인 자율 주행을 가능하게 합니다.
  • 고도에 따른 경로 계획: 고도가 필요한 환경에서도 경로를 최적화할 수 있습니다.

2. 3D SLAM을 위한 하드웨어 및 소프트웨어 요구 사항

3D SLAM을 구현하려면 깊이 카메라3D SLAM 소프트웨어가 필요합니다.

2.1 필요한 하드웨어

  • 깊이 카메라: Intel RealSense D415와 같은 깊이 카메라는 로봇이 3D 깊이 데이터를 수집하여 입체적인 장애물을 인식할 수 있게 합니다. RealSense D415는 ROS2와 통합이 용이하고, 다양한 조명 조건에서도 안정적인 깊이 인식을 제공합니다.
  • 고성능 컴퓨터: 3D SLAM은 많은 연산을 필요로 하기 때문에, NVIDIA Jetson 시리즈와 같은 고성능 컴퓨팅 장치가 필요합니다.

2.2 필요한 소프트웨어

  • ROS2: 로봇의 센서와 모터를 제어하고, SLAM 알고리즘을 실행하는 데 필요한 기본 소프트웨어입니다.
  • Cartographer 또는 RTAB-Map: 3D SLAM을 구현하기 위한 주요 소프트웨어 패키지입니다. 이들은 ROS2와 통합되어 3D 지도 작성과 위치 추정을 지원합니다.

3. 3D SLAM 소프트웨어 설치 및 설정

3D SLAM을 위해 RTAB-MapRealSense ROS2 드라이버를 설치하고, ROS2 환경에서 실행할 준비를 합니다.

3.1 RTAB-Map 설치

RTAB-Map은 실시간 3D SLAM을 지원하는 ROS2 패키지로, RGB-D 카메라 데이터를 이용해 실시간으로 3D 지도를 작성할 수 있습니다.

sudo apt update
sudo apt install ros-foxy-rtabmap-ros

3.2 RealSense ROS2 드라이버 설치

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 지도를 생성할 수 있습니다.


4. RTAB-Map 설정 파일 작성

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

설정 설명:

  • subscribe_depthsubscribe_rgb: RealSense의 RGB 및 깊이 이미지를 구독하여 3D 지도를 생성합니다.
  • odom_frame_idmap_frame_id: RTAB-Map에서 사용할 좌표 프레임을 지정합니다.
  • vis/MaxDepthgrid/RangeMax: 깊이 및 장애물 인식 범위를 설정하여, 로봇 주변 최대 10m까지 장애물을 인식합니다.
  • grid/3D: 3D 모드 활성화로, 깊이 데이터를 기반으로 3D 지도를 생성하도록 설정합니다.

5. RTAB-Map 노드 실행을 위한 Launch 파일 작성

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 지도를 작성하고, 위치를 추정합니다.


6. RTAB-Map 노드 실행 및 3D SLAM 결과 시각화

이제 3D SLAM을 실행하여 RealSense 카메라의 깊이 데이터를 바탕으로 지도를 작성하고, RViz를 통해 결과를 시각화합니다.

6.1 RTAB-Map 노드 실행

다음 명령어를 통해 RTAB-Map을 실행합니다.

ros2 launch my_robot_description rtabmap_launch.py

이 명령어를 실행하면, RTAB-Map이 RealSense 카메라의 깊이 데이터를 사용하여 실시간으로 3D 지도를 생성하고 로봇의 위치를 추정합니다.

6.2 RViz에서 3D SLAM 시각화

RViz를 사용하여 RTAB-Map에서 생성된 3D 지도를 실시간으로 시각화할 수 있습니다.

  1. RViz 실행:

    ros2 run rviz2 rviz2
  2. Fixed Frame 설정: RViz의 Fixed Framemap으로 설정합니다.

  3. PointCloud2 데이터 추가: RViz에서 Add 버튼을 클릭하여 PointCloud2를 추가하고, Topic/rtabmap/cloud로 설정합니다. 이를 통해 RTAB-Map이 생성한 3D 포인트 클라우드를 확인할 수 있습니다.

  4. TF 시각화: TF를 추가하여 로봇의 위치와 프레임 간 관계를 시각화하고, 로봇이 지도 내에서 어떻게 이동하는지 확인할 수 있습니다.

이 설정을 통해 로봇이 이동하는 동안 생성되는 3D 지도를 실시간으로 확인할 수 있습니다.


**7. RTAB-

Map 매개변수 조정 및 성능 최적화**

RTAB-Map은 다양한 매개변수를 제공하므로, 필요에 따라 최적화할 수 있습니다.

7.1 지도 해상도 조정

지도 해상도를 조정하여 메모리 사용량을 줄이고, 지도를 더 간략하게 생성할 수 있습니다.

  • grid/Resolution: 지도의 해상도를 조정하여 필요한 수준의 세부사항만 포함할 수 있습니다.

  • 예시:

    grid/Resolution: 0.1

7.2 깊이 데이터 필터링

실내 및 실외 환경에 따라 깊이 범위를 조정하여, 지나치게 먼 거리에 있는 장애물을 인식하지 않도록 설정할 수 있습니다.

  • vis/MaxDepth: 깊이 데이터의 최대 인식 범위를 조정하여 불필요한 정보를 필터링합니다.

  • 예시:

    vis/MaxDepth: 4.0

7.3 루프 클로징 설정

루프 클로징은 로봇이 이전에 지나갔던 위치를 인식하고, 지도를 갱신하는 기능입니다. 실내 환경에서는 루프 클로징을 활성화하여 지도의 정확성을 높일 수 있습니다.

rtabmap:
  ros__parameters:
    loop_closure_detection: true

8. 실제 환경에서의 3D SLAM 테스트

실제 환경에서 RTAB-Map을 사용하여 3D SLAM을 테스트합니다. 로봇을 다양한 경로로 이동시키며, 복잡한 장애물이나 높이 차이가 있는 지형에서도 안정적으로 3D 지도를 생성하고 위치를 추정할 수 있는지 확인합니다.

8.1 장애물 회피 기능 테스트

3D SLAM을 통해 생성된 지도를 기반으로 로봇이 장애물을 안정적으로 감지하고 회피할 수 있는지 테스트합니다. 3D 데이터는 로봇이 장애물의 높이와 위치를 더 정확하게 파악할 수 있게 해주므로, 일반적인 2D 장애물 회피보다 안정적인 동작을 기대할 수 있습니다.

8.2 경로 계획 및 복귀 테스트

3D SLAM으로 생성된 지도를 기반으로 로봇이 목표 위치에 도달하고, 복귀할 수 있는지 확인합니다. 3차원 정보가 포함된 지도는 경로 계획 시 로봇의 이동에 유리하며, 필요 시 고도를 조정하여 복잡한 지형에서도 안정적인 경로를 설정할 수 있습니다.


결론

3D SLAM 기술을 적용하여 로봇이 3차원 공간에서 자율적으로 위치를 추정하고 지도를 작성할 수 있게 되었습니다. RTAB-Map과 RealSense 카메라를 활용하여 3D 깊이 데이터를 기반으로 복잡한 환경에서도 안정적인 자율 주행이 가능해졌습니다. 이로써 로봇은 계단이나 높은 장애물이 있는 환경에서도 정확하게 이동할 수 있으며, 다양한 실제 환경에 대한 적응성이 크게 향상되었습니다. 추가적인 매개변수 조정과 테스트를 통해 3D SLAM의 성능을 최적화할 수 있으며, 이를 기반으로 다양한 응용 환경에서 더욱 정밀한 자율 주행이 가능해집니다.

profile
student studying Embedded-development

0개의 댓글