Nav2

[Nav2] Nav2 설치

고집호랑이 2023. 6. 6. 06:49

Nav2는 ROS1에서 Move base라 불리던 package가 ROS2로 넘어오면서 바뀐 package의 이름입니다. 

 

Installation

저는 ubuntu 20.04버전ros2 foxy에 Nav2를 설치하였고, Nav2는 아래와 같은 과정으로 손쉽게 설치하여 사용할 수 있습니다. 

 

<distro>에는 현재 본인이 사용하고 있는 ros2 버전을 입력하시면 됩니다.

$ source /opt/ros/<distro>/setup.bash
$ sudo apt install \
  ros-$ROS_DISTRO-navigation2 \
  ros-$ROS_DISTRO-nav2-bringup \
  ros-$ROS_DISTRO-turtlebot3*

 

설치가 끝났다면 ros2 run이나 ros2 launch와 같은 명령어로 실행 가능한 노드들을 실행시킬 수 있습니다.

여기서 잠깐!!!!

하지만 위의 과정으로 설치를 한다면, 패키지 파일들이 모두 /opt/ros/foxy 경로에 저장되기 때문에 파일을 수정하거나 기능을 추가할 때 불편할 수 있습니다.

 

파일을 수정하고 plugin들을 직접 만드는 등 Nav2에 대해 심도있게 공부할 것이라면 아래 과정으로 Nav2를 설치해주면 됩니다.(권장!!)

 

$ source /opt/ros/<distro>/setup.bash
$ mkdir -p ~/nav2_ws/src && cd ~/nav2_ws
$ git clone https://github.com/ros-planning/navigation2.git --branch $ROS_DISTRO ./src/navigation2
$ rosdep install -y \
  --from-paths ./src \
  --ignore-src
$ colcon build \
  --symlink-install

 

Execution

Nav2 패키지가 잘 설치되었는지 확인해보기 위해서 패키지 내에 존재하는 turtlebot 예제를 실행시켜 볼 것입니다.

 

먼저 다음 명령어를 통해 환경 변수를 설정해줘야 합니다. <ros2-distro>에는 설치할 때와 같이 본인이 사용하고 있는 ros2 버전을 입력하면 됩니다. 

$ source /opt/ros/<ros2-distro>/setup.bash
$ export TURTLEBOT3_MODEL=waffle
$ export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/<ros2-distro>/share/turtlebot3_gazebo/models

 

원래라면 새로운 terminal 창에서 터틀봇 예제를 실행시킬 때마다 위의 과정으로 환경변수를 설정해줘야 하지만, $ gedit ~/.bashrc를 통해 bashrc 파일을 열고 위 명령어를 적어놓으면 새로운 terminal 창을 열 때마다 명령어를 자동으로 실행시켜주기 때문에 환경 변수 설정 과정을 생략할 수 있습니다.   

 

특히 source /opt/ros/<ros2-distro>/setup.bashROS2 명령어들을 터미널에서 실행시키기 위해서 새로운 terminal 창을 열때마다 실행시켜줘야 하는 명령어이기 때문에 $ gedit ~/.bashrc를 통해 bashrc 파일에 적어놓는 것을 추천드립니다. 

 

bashrc 파일에 적절한 명령어를 사용해주면 아래와 같이 다른 버전의 ROS도 함께 사용할 수 있습니다. 저의 경우 ROS1의 Noetic 버전과 ROS2의 foxy버전을 함께 사용하고 있습니다. 

 

서로 다른 ROS 버전 사용법

 

bashrc 파일에서의 명령어와 서로 다른 버전의 ROS를 함께 사용하는 방법은 다음에 기회가 된다면 설명하도록 하겠습니다. 

 

자 이제 환경변수 설정이 끝났다면 실행시켜볼 차례입니다.

 

nav2_ws directory를 직접 만들고 git clone으로 nav2를 설치하신 분이라면 실행 파일이나 라이브러리 경로를 사용자 path와 library path에 추가하기 위해서 $ . install/setup.bash 를 먼저 실행시킨 후 터틀봇 예제를 실행시켜야 합니다.

$ cd nav2_ws
$ . install/setup.bash
$ ros2 launch nav2_bringup tb3_simulation_launch.py headless:=False

 

실행 결과 아래 그림과 같이 ROS1에서 봤었던 익숙한 gazebo와 rviz의 화면이 보일 것입니다. 

 

nav2 터틀봇 예제 실행 결과 (gazebo&amp;#44; rviz)

 

터블봇 예제에서의 기능은 ROS1과 바뀐 것이 없습니다.

터틀봇 예제 기능

 

1. 노란색 동그라미인 2D Pose Estimate를 누르고 gazebo에서의 로봇의 초기 위치(방향 포함)를 rviz 맵 상에서 설정해주면, Nav2가 활성화되면서 아래와 같이 costmap, laserscan 등의 정보가 rviz 상에 표시됩니다. 

 

1. 2D Pose Estimate

 

2. 파란색 동그라미인 Navigation Goal을 누른 후, 목표 지점을 설정해주면 로봇이 장애물을 피해 목표 지점까지의 경로를 생성하고 따라가 목표 지점에 도달합니다.

 

2. Navigation Goal

 

Error & Fix

처음 Nav2를 설치하고 터틀봇 예제를 실행시켰을 때 Gazebo가 실행되지 않고 무한로딩되는 경우가 생겼는데, 자세히는 모르겠지만 이는 Gazebo와 관련된 환경설정이 제대로 안돼서 발생한 에러인 듯합니다.

 

이 오류는 $ gedit ~/.bashrc로 bashrc 파일을 연 후 아래 command line을 추가해주고 나니 더 이상 발생하지 않았습니다.

 

stat /usr/share/gazebo/setup.sh &> /dev/null
if [ $? -eq 0 ]; then
    source /usr/share/gazebo/setup.sh
fi

 

Nav2는 기본적으로 ROS1에서의 Move base와 구성이 비슷하지만 발전시키면서 생겨난 다른 점들도 있습니다. 

 

대표적으로는 bt_navigator를 예로 들 수 있겠습니다. bt_navigator는 move base와 비교되는 가장 두드러지는 특징으로 이를 통해 보다 다채로운 동작을 로봇에게 실행시킬 수 있게 됐습니다.

 

다음 포스팅부터 planner, controller, behavior tree 등 Nav2의 구성에 대해서 하나하나씩 자세히 살펴보고 사용해보도록 하겠습니다.

 

Reference

https://answers.ros.org/question/401595/gazebo-loading-error-turtlebot3/

 

https://navigation.ros.org/getting_started/index.html

'Nav2' 카테고리의 다른 글

[Nav2] Nav2 주요 개념 정리  (0) 2023.08.25