[Nav2] Nav2 구성 요소

Hyuna·2025년 2월 11일

Nav2

목록 보기
1/2
post-thumbnail

📕 참고: move_base, nav2 docs, nav2 github




Navigation Stack은 로봇의 자율주행을 수행하기 위해 여러 ROS 패키지들을 조합하여 만든 네비게이션 시스템을 의미한다.
자율 주행을 위해 필요한 다음의 기능을 제공한다.

  • Localization
  • Mapping
  • Path Planning
  • Obstacle Avoidance

로봇이 주어진 환경에서 목표지점까지 장애물을 피해 최적의 경로를 찾아 이동하는 과정을 의미한다.



ROS - move_base

move_base는 ROS에서 자율 주행을 담당하는 핵심 패키지이다. move_base는 하나의 큰 블록처럼 네비게이션 수행에 필요한 기능들이 하나의 노드에서 실행된다.



R0S2 - Nav2

Nav2는 ROS2에서 자율주행을 담당하는 프레임워크이다. Nav2 내에 자율 주행에 필요한 여러 패키지가 독립적인 노드 형태로 분리되어 실행된다.



ROS2


Action Server

네비게이션과 같이 긴 작업을 수행하는 로봇 동작을 제어하는 핵심 개념이다. 기본적인 ROS의 Service는 짧은 시간 내에 요청과 응답이 이루어지지만, Action Server는 장시간 실행되는 작업을 처리할 수 있도록 설계되었다.

장시간 작업 상황에서 액션 서버는 클라이언트로부터 다른 프로세스나 스레드에서 장기간 실행되는 작업 요청을 수락하고,실행이 완료되면 최종 결과를 반환하여 해당 상태를 종료한다.
또한. 작업이 완료될때까지 안정성을 위해 액션 서버는 클라이언트에게 feedback을 제공한다.


avigateToPose.action 는 특정 위치로 로봇을 이동시키는 작업을 수행하는 액션이다. 해당 액션에는 네비게이션 목표(goal)를 설정하고 결과(result)를 반환하고 진행상황(feedback)이 제공된다.



Lifecycle Node

Lifecycle Node는 ROS2에서 노드의 상태를 관리하기 위해 사용되는 개념이다.
일반적인 ROS2 노드는 단순히 실행되거나 종료되는 구조이지만, Lifecycle Node는 여러 단계의 상태(State)를 가지며 제어 가능하다.



Nav2에서는 amcl, map_server, planner_server 등이 nav2_lifecycle_manager를 통해 관리된다.
각 노드는 필요할 때만 Active상채로 전환되어 실행되며, 이를 통해 네비게이션 노드들을 효율적으로 관리할 수 있다.



Behavior Tree

Tree 구조로 여러 노드들이 나무가지처럼 연결된 계층적 자료 구조이다. Nav2는 네비게이션의 흐름을 BT로 제어한다.



트리의 왼쪽 아래부터 오른쪽순으로 탐색하며 의존성이 없는 노드들이 우선적으로 실행되는 구조이다. 이를 통해 네비게이션 도중 장애물 회피, 복구 동작 등 다양한 동작을 조합하여 수행할 수 있다.




Nav2는 여러 개의 서버(Node)로 분리된 모듈형 구조로 동작한다. 각 서버는 네비게이션 핵심 기능을 실행한다.



Planner Server

  • 전역 경로(Global Path)생성
  • 목표 지점까지 갈 수 있는 최적의 경로 찾기
planner_server:
  ros__parameters:
    expected_planner_frequency: 1.0
    planner_plugins: ["GridBased"]
    GridBased:
      plugin: "nav2_navfn_planner/NavfnPlanner"


Controller Server

  • 전역 경로를 따라 이동할 수 있도록 로컬 경로(Local Path) 제어
  • 실시간으로 장애물 회피, 로봇 속도 조절 등 담당
controller_server:
  ros__parameters:
    controller_plugins: ["FollowPath"]
    FollowPath:
      plugin: "dwb_core::DWBLocalPlanner"



Smoother Server

  • 경로의 곡률을 부드럽게 조절하여 이동시 더 자연스럽게 만듦
  • 경로가 각진 경우, 부드러운 곡선으로 조정
smoother_server:
  ros__parameters:
    smoother_plugins: ["SimpleSmoother"]
    SimpleSmoother:
      plugin: "nav2_smoother::SimpleSmoother"



Behavior Server

  • 네비게이션 실패 시 복구 동작 실행
  • 장애물로 인해 막혔을 때 회전하거나 후진하여 문제 해결
behavior_server:
  ros__parameters:
    behavior_plugins: ["spin", "back_up", "wait"]
    spin:
      plugin: "nav2_behaviors/Spin"
    back_up:
      plugin: "nav2_behaviors/BackUp"



Environmental Representation


Nav2에서 환경을 표현하는 주요 개념은 Costmap을 활용한다.


Costmap

로봇이 이동할 수 있는 공간과 장애물의 위치를 나타내는 2D 그리드 맵이다. 각 셀은 특정 비용(cost)를 가지며, 로봇은 비용이 낮은 곳을 따라 최적의 경로를 설정한다.



Global Costmap (전역 비용 맵)

rviz - Global Planner로 확인 가능

  • 로봇의 전체적인 경로 계획을 위해 사용
  • 주로 정적인 장애물(벽, 건물 등) 반영
  • /map 기반으로 업데이트 빈도가 낮음


Local Costmap (지역 비용 맵)

rviz - Controller로 확인 가능

  • 로봇의 실시간 장애물 회피 및 단기 경로 계획을 위해 사용
  • 로봇 주변 장애물을 실시간으로 감지하여 업데이트
  • 센서 데이터 기반으로 업데이트 빈도가 높음


Costmap Layer


costmap은 여러 개의 layer를 조합하여 생성되며, 각각의 layer는 특정한 역할을 담당한다.



◼ Global Costmap 생성 과정

  • static layer - /map에서 벽과 장애물 추가
  • obstacle layer - 실시간으로 장애물 데이터 추가
  • inflation layer - 장애물 근처 안전거리 적용

◼ Local Costmap 생성 과정

  • voxel layer - 3D 장애물 데이터 반영
  • inflation layer - 장애물 근처 안전거리 적용

위와 같은 과정을 거쳐 layer들이 결합되면 로봇이 이동할 수 있는 비용지도(Costmap)가 완성된다.



static layer

  • /map데이터를 기반으로 이미 알려진 장애물의 위치를 costmap에 반영
  • 로봇이 SLAM 없이 기존 맵을 활용하여 네비게이션 수행 가능


obstacle layer

  • 센서를 통해 실시간으로 장애물 감지
  • 새로운 장애물이 감지되면 costmap에서 해당 위치 비용 증가


lnflation layer

  • 장애물 주변 일정거리만큼 안정 영역을 설정하여 로봇의 충돌 방지
  • 장애물 주변 비용을 증가시켜 로봇이 가까이 가지 않도록 유도


voxel layer

  • 포인트 클라우드 데이터를 기반으로 3D 장애물 감지
  • 장애물의 높이 정보까지 고려하여 costmap 구성



이미지에서 하늘색은 Global Costmap, 자두색은 실제 장애물의 위치이다. 장애물 주변에는 진한 하늘색의 inflation layer가 설정되어 있어, Local Costmap에서 장애물 근처로 갈수록 cost가 증가하여 보라색-빨간색으로 표현된다. 이 구역을 로봇이 가까이 가면 로봇이 속도를 줄이거나, 로봇 radius가 큰 경우 빠져나가지 못할 수 있다. 높은 cost가 설정된 지역은 로봇이 이동에 어려움을 겪을 수 있으므로 파라미터 튜닝을 통해 이를 조절해주어야 한다.



costmap filter


기존 costmap에서 특정 영역을 필터링하여 추가적인 제한을 적용할 수 있다.


출입 금지 구역 (Keepout Zones)

  • 특정 지역을 로봇이 진입할 수 없는 금지 구역으로 설정
  • 해당 영역의 cost를 매우 높게 설정하여 경로 생성 시 로봇이 우회


속도 제한 구역 (Speed Restriction Zones)

  • 특정 지역에서 로봇 속도 제한

0개의 댓글