본문 바로가기

ROS

[ROS2] Navigation2 분석(1) - 소개

Navigation2 / Nav2

기존 ROS1에서 Move base라 불리던 package가 ROS2로 넘어 오면서 Nav2라는 이름으로 변경 되었다.

참고 링크

https://navigation.ros.org/

 

Nav2 — Navigation 2 1.0.0 documentation

Overview The Nav2 project is the spiritual successor of the ROS Navigation Stack. This project seeks to find a safe way to have a mobile robot move from point A to point B. It can also be applied in other applications that involve robot navigation, like fo

navigation.ros.org

포스팅 환경

  • ubuntu 20.04
  • ros2 foxy

https://coding-robot.tistory.com/44

 

[ROS2] Install (Ubuntu 20.04, foxy)

환경 Ubuntu 20.04 ros2 foxy 공식 홈페이지 https://docs.ros.org/en/foxy/Installation.html Installation — ROS 2 Documentation: Foxy documentation You're reading the documentation for an older, but st..

coding-robot.tistory.com

그리고 저처럼 Mac에 미쳐서 심지어 M1으로 하실 분은 이렇게 하세요

DockerFile

FROM osrf/ros:foxy-desktop

WORKDIR /root
RUN mkdir -p foxy_ws/src/

RUN apt update && \\
    apt install ros-foxy-navigation2 ros-foxy-nav2-bringup ros-foxy-turtlebot3* -y

VOLUME [ "/root/foxy_ws/src/" ]

SHELL [ "/bin/bash" , "-c"]
RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> .bashrc
WORKDIR /root/foxy_ws/src

실행

docker build -t navigation
docker run -it --name ros -v $(pwd):/root/foxy_ws/src navigation
cd ..
colcon build

 

Nav2 설치

기본적으로는 다음과 같이 설치 한다.

sudo apt install ros-<distro>-navigation2 \\
ros-<distro>-nav2-bringup \\
ros-<distro>-turtlebot3*

하지만 좀더 심도있게 공부하고, Navigation을 다뤄야 한다면 다음과 같이 다운 받는걸 추천한다.

cd ~/{YOUR_WORK_SPACE}/src
git clone <https://github.com/ros-planning/navigation2.git> --branch -devel
cd ~/nav2_ws
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro 
colcon build --symlink-install

Move Base에서 Nav2로 변화

기존 move base를 분석해 보면 상당히 코드가 비효율적이고, 에러가 많이 날 수 있게 짜여진 것을 확인 할 수 있다. 이를 새롭게 구성하고, 굉장히 깔끔하게 재구성 한 게 다음의 David Lu의 robot navigation이다.

https://github.com/locusrobotics/robot_navigation

 

GitHub - locusrobotics/robot_navigation: Spiritual successor to ros-planning/navigation.

Spiritual successor to ros-planning/navigation. Contribute to locusrobotics/robot_navigation development by creating an account on GitHub.

github.com

하지만 위 package는 ros1에서 만들어져 있고, 여기서 더 발전한게 nav2이다.

그에대한 정보는 아래에 있다. (글 중간에 We would like to thank David  Lu!! and Mike Ferguson for their tireless over the span of a decade to keep the Nav Stack alive and well 이라는 항목이 있다.)

https://navigation.ros.org/about/index.html?highlight=david

 

About and Contact — Navigation 2 1.0.0 documentation

About Navigation is a community effort to lower the barrier of entry of mobile robotics technology for all. This project is one of the flagship projects along with MoveIt that acts as an applications entry point and frameworks for ROS. Navigation in ROS 2

navigation.ros.org

Nav2 구성

Nav2에서는 기존의 Move Base와 비슷한 구성을 가져가지만 다른 점들도 많다.

구성에는 다음과 같다.

controller server

  • Nav2에서는 기본적으로 여러개의 controller를 띄워 놓고 그중에 골라서 사용할 수 있다.
  • 현재 어떤 controller를 사용해야 하고, 현재 로봇이 goal point에 도착했는지 확인해 주는 역할을 한다.
  • 각가의 controller는 controller server의 plugin으로써 작동한다.(각각 따로 node를 가지지 않는다.)

controller

  • 기존의 local planner와 같은 역할을 한다.
  • controller가 장애물을 판단해서 피해가게 할 수는 있지만 주 역할은 path를 로봇이 따라가게 만드는 것이다.
    • 장애물 회피를 하고 싶다면 차라리 planner에서 path를 업데이트 하자.
  • 사실 기존의 local planner와 global planner의 역할을 생각해 보면 local planner에서 굳이 새로 local path를 생성하는 것 보단 path생성 자체는 global planner가 가져가고 local planner는 로봇을 어떻게 ‘움직일’ 것인가에 더 비중을 둬서 이름을 바꾼듯 하다.

planner server

  • planner도 controller와 마찬가지로 여러개를 띄워 놓고 작동하게 된다.
  • 각각의 planner는 planner server의 plugin으로써 작동한다.(각각 따로 node를 가지지 않는다.)

planner

  • 기존의 global planner와 같은 역할을 한다.
  • 위에서 설명했듯이 path를 만들어 내는건 planner의 역할이고, plan을 따라가게 하는건 controller의 역할이다.

costmap

  • 크게 바뀐 사항이 없다.

recovery behavior

  • recovery server에 의해 관리 되며, 각각은 plugin으로 작동한다.

bt navigator

  • move base와 비교해서 가장 크게 달라진 점이다.
  • 기존 FSM으로 진행되던 방식에서 Behavior Tree를 사용하게 되면서 좀더 다채로운 Navigation을 만들수 있게 됐다.
  • behavior_tree_cpp_v3를 사용한다.

https://github.com/BehaviorTree/BehaviorTree.CPP

 

GitHub - BehaviorTree/BehaviorTree.CPP: Behavior Trees Library in C++. Batteries included.

Behavior Trees Library in C++. Batteries included. - GitHub - BehaviorTree/BehaviorTree.CPP: Behavior Trees Library in C++. Batteries included.

github.com

acml

  • Navigation 포스팅이니까 다루지 않는다.