1291.79 Nav2에서의 행동 트리 채택 배경
Nav2(Navigation 2)는 ROS2의 공식 내비게이션 프레임워크로서, 자율 이동 로봇의 경로 계획, 경로 추종, 장애물 회피, 복구 행동 등을 포괄하는 내비게이션 스택이다. Nav2가 행동 트리를 핵심 제어 구조로 채택한 배경에는 기존 ROS1 내비게이션 스택의 구조적 한계와 행동 트리의 설계적 이점에 대한 공학적 판단이 있다.
1. ROS1 move_base의 구조적 한계
ROS1의 내비게이션 스택인 move_base는 내부적으로 유한 상태 머신 기반의 흐름 제어를 사용하였다. move_base의 기본 동작 흐름은 경로 계획(Planning) → 경로 추종(Controlling) → 복구(Recovery)의 순환 구조로 고정되어 있었으며, 이 흐름을 사용자가 수정하거나 확장하기 위해서는 소스 코드 수준의 변경이 필요하였다.
이 경직된 구조로 인해 다음의 문제가 발생하였다. 첫째, 복구 행동의 순서와 종류를 변경하려면 move_base의 내부 상태 머신을 수정해야 하였다. 둘째, 내비게이션 도중 우선순위가 높은 행동(예: 긴급 정지, 동적 경로 재계획)을 삽입하는 것이 구조적으로 어려웠다. 셋째, 복합적인 내비게이션 임무(다중 목표점 순차 방문, 조건부 경로 전환 등)를 표현하기 위해서는 move_base 외부에 별도의 상위 제어 논리를 구현해야 하였다.
2. 행동 트리 채택의 공학적 근거
Nav2의 설계진은 행동 트리가 내비게이션 흐름 제어의 유연성과 사용자 정의 가능성(Customizability)을 현저히 개선할 수 있다고 판단하였다. 행동 트리 채택의 핵심 근거는 다음과 같다.
첫째, XML 기반의 사용자 정의 가능성이다. 행동 트리의 구조를 XML 파일로 정의함으로써, 사용자가 소스 코드를 수정하지 않고 XML 파일의 편집만으로 내비게이션 흐름을 변경할 수 있다. 복구 행동의 순서 변경, 조건부 행동의 추가, 서브트리의 교체 등이 XML 수준에서 수행 가능하다.
둘째, 반응적 행동 전환의 자연스러운 표현이다. 내비게이션 중 배터리 부족, 긴급 정지 명령, 동적 장애물 감지 등의 환경 변화에 대한 반응적 행동 전환을 리액티브 노드를 통해 간결하게 표현할 수 있다.
셋째, 모듈적 확장성이다. 새로운 내비게이션 행동(예: 새로운 복구 전략, 사용자 정의 플래너)을 독립적인 액션 노드로 구현하고 기존 트리에 삽입하는 것이 기존 구조에 영향을 주지 않으면서 가능하다.
넷째, 디버깅과 모니터링의 개선이다. Groot 시각화 도구를 통해 내비게이션 흐름의 실시간 모니터링과 실행 이력 분석이 가능하여, move_base에서 어렵던 내비게이션 흐름의 디버깅이 용이해진다.
3. Nav2의 행동 트리 구조
Nav2는 BehaviorTree.CPP 라이브러리를 기반으로 행동 트리를 구현하며, 기본적으로 제공되는 행동 트리 XML 파일은 다음의 구조를 갖는다.
최상위에 리액티브 폴백(ReactiveFallback) 노드가 배치되어, 목표 도달 여부를 지속적으로 검사한다. 주요 분기에서는 경로 계획(ComputePathToPose), 경로 추종(FollowPath), 복구 행동(Recovery)이 시퀀스와 폴백 노드의 조합으로 구성된다. 복구 행동은 폴백 노드 내에서 여러 대안적 복구 전략(제자리 회전, 전역 경로 재계획, 대기 등)이 순차적으로 시도된다.
Nav2는 NavigateToPose, NavigateThroughPoses, FollowWaypoints 등 다양한 내비게이션 모드에 대해 각각 상이한 행동 트리 XML 파일을 제공하며, 사용자는 bt_navigator 노드의 파라미터를 통해 사용할 행동 트리 파일을 지정하거나 자신만의 트리를 제공할 수 있다.
4. 산업적 영향
Nav2에서의 행동 트리 채택은 로봇공학 커뮤니티에서 행동 트리의 실용적 가치를 입증한 사례로서, ROS2 기반 로봇 시스템의 행동 제어에 대한 사실상의 설계 패턴을 확립하였다. Nav2의 성공은 BehaviorTree.CPP의 채택 확산과 행동 트리에 대한 산업적 관심 증가에 직접적으로 기여하였다.
참고 문헌
- Macenski, S., Martín, F., White, R., & Clavero, J. G. (2020). “The Marathon 2: A Navigation System.” Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS).
- Macenski, S., Foote, T., Gerkey, B., Lalancette, C., & Woodall, W. (2022). “Robot Operating System 2: Design, Architecture, and Uses in the Wild.” Science Robotics, 7(66), eabm6074.
- Faconti, D., & Aurys, M. (2022). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/