상세 컨텐츠

본문 제목

ROS Navigation Stack 튜토리얼: 맵핑부터 경로 추적까지 완벽 가이드

카테고리 없음

by baknoah 2025. 3. 14. 03:40

본문

ROS Navigation Stack 튜토리얼: 맵핑부터 경로 추적까지

ROS(Robot Operating System)는 로봇 소프트웨어 개발을 위한 강력한 프레임워크입니다. 특히 ROS Navigation Stack은 로봇이 복잡한 환경에서 자율적으로 이동하고, 상황에 맞게 경로를 계획하는 데 필수적인 도구입니다. 이 튜토리얼에서는 맵핑부터 경로 추적에 이르기까지, ROS Navigation Stack의 기본 개념과 사용 방법을 초보자도 쉽게 이해할 수 있도록 설명합니다.

1. ROS Navigation Stack 개요

ROS Navigation Stack은 로봇이 안전하게 환경 내에서 탐색하고 이동하기 위한 기능을 제공하는 일련의 패키지입니다. 이 스택은 여러 모듈로 구성되어 있으며, 각 모듈은 특정 작업을 수행합니다. 주요 구성 요소는 다음과 같습니다.

  • 맵핑과 위치 추정 (SLAM)
  • 경로 계획
  • 로봇의 운동 제어
  • 장애물 회피

2. 요구 사항

이 튜토리얼을 진행하기 위해서는 다음과 같은 요구 사항이 있습니다.

  • Linux 기반 운영 체제 (예: Ubuntu)
  • ROS Melodic 또는 Noetic 설치
  • 이해를 돕기 위한 기본적인 프로그래밍 지식 (Python 또는 C++)

3. ROS 설치 및 환경 설정

3-1. ROS 설치

ROS를 설치하려면, 위의 요구 사항을 충족해야 합니다. Ubuntu의 각 릴리스에 맞는 ROS 버전을 설치할 수 있습니다. 설치는 터미널에서 아래의 명령어를 입력하여 수행합니다.

sudo apt update
sudo apt install ros-noetic-desktop-full

3-2. ROS 환경 설정

ROS 설치 후, 환경 변수를 설정해야 합니다. 다음 명령어를 사용하여 bashrc 파일에 환경 변수를 추가합니다.

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

4. ROS Navigation Stack 설치

다음으로, Navigation Stack을 설치합니다. 아래 명령어를 사용하여 필요한 패키지를 설치합니다.

sudo apt install ros-noetic-navigation

5. 맵 생성

5-1. 라이다(Lidar) 데이터 활용

로봇이 환경을 탐색하고 맵을 생성하기 위해선 라이다 센서 데이터를 사용할 수 있습니다. ROS에서 라이다 데이터를 수집하기 위해 gmapping 패키지를 사용할 수 있습니다. 이 패키지는 SLAM 알고리즘을 기반으로 하여 실시간으로 맵을 생성합니다.

5-2. gmapping 패키지 실행

gmapping 패키지를 실행하기 위해서는 먼저 로봇의 위치를 초기화해야 합니다. 다음과 같은 명령어로 gmapping을 시작할 수 있습니다.

rosrun gmapping slamgmapping scan:=basescan

이 명령어를 입력한 후, 로봇이 이동하면 실시간으로 맵이 생성됩니다. 생성된 맵은 map_server를 사용하여 저장할 수 있습니다.

rosrun mapserver mapsaver -f ~/my_map

6. 경로 계획

맵이 생성되면, 로봇은 경로 계획을 통해 목표 위치로 이동할 수 있습니다. ROS Navigation Stack에서는 move_base 노드를 통해 경로 계획을 수행합니다.

6-1. move_base 실행

move_base를 사용하려면, 다음과 같은 명령어로 실행합니다.

roslaunch movebase movebase.launch

6-2. 목표 위치 설정

rostopic을 사용하여 목표 위치를 설정할 수 있습니다. 다음 명령어로 목표 좌표를 설정합니다.

rostopic pub /movebasesimple/goal geometry_msgs/PoseStamped "header:
  seq: 0
  stamp: now
  frame_id: 'map'
pose:
  position:
    x: 1.0
    y: 1.0
    z: 0.0
  orientation:
    x: 0.0
    y: 0.0
    z: 0.0
    w: 1.0"

7. 장애물 회피

로봇이 경로를 따라 이동할 때 장애물을 인식하고 회피하는 기능은 Navigation Stack의 중요한 부분입니다. 이를 위해 ROS는 여러 센서 데이터를 바탕으로 장애물의 위치를 파악합니다.

7-1. 장애물 인식 센서 설정

장애물 인식을 위해 라이다 외에도 초음파 센서 등을 사용할 수 있습니다. 이 센서들을 ROS 노드로 연결하여 실시간으로 장애물을 감지합니다.

7-2. 장애물 회피 알고리즘

move_base의 기본 설정에서는 장애물 회피를 위한 여러 알고리즘을 제공합니다. 로봇이 이동하는 중에 장애물을 감지하면 자동으로 경로를 수정하여 회피하게 됩니다.

8. 경로 추적

로봇이 목표 위치에 도달하기 위해서는 경로 추적 기능이 필요합니다. 경로 추적은 move_base 노드에서 자동으로 처리됩니다.

8-1. PID 제어기 사용

경로 추적을 위한 제어 알고리즘으로는 대표적으로 PID 제어기가 사용됩니다. PID 제어기는 고정밀한 위치 추정과 경로 추적을 가능하게 합니다.

rosrun myrobot pidcontroller

9. 모니터링 및 디버깅

로봇의 동작을 모니터링하고 디버깅하기 위해 ROS에서는 다양한 도구를 제공합니다. rqtgraphrqtplot는 ROS 시스템의 상태를 실시간으로 시각화할 수 있는 도구입니다.

9-1. rqt_graph 사용

노드와 토픽 간의 관계를 시각적으로 확인할 수 있습니다. 이를 통해 시스템의 상태를 점검할 수 있습니다.

rosrun rqtgraph rqtgraph

9-2. rqt_plot 사용

경로 추적을 위해 수집한 데이터를 시각적으로 분석할 수 있습니다.

rosrun rqtplot rqtplot

10. 결론

이번 튜토리얼에서는 ROS Navigation Stack을 이용한 로봇의 맵핑 및 경로 추적 과정을 알아보았습니다. 초보자도 쉽게 이해할 수 있도록 단계별로 설명하였으며, 각 기능 및 명령어 사용 방법을 제시하였습니다. ROS는 매우 강력한 도구이므로, 여러분이 실험하고 발전시켜 나가기를 희망합니다. 추가적인 학습 자료와 사례를 참고하여 여러분의 로봇 프로젝트에 활용해 보시기 바랍니다.