1291.78 BehaviorTree.CPP 라이브러리의 등장
BehaviorTree.CPP는 Davide Faconti가 개발한 오픈 소스 C++ 행동 트리 라이브러리로서, 행동 트리(Behavior Tree, BT)의 로봇공학 실용화에 결정적 기여를 한 소프트웨어 프레임워크이다. 이 라이브러리는 학술적으로 정립된 행동 트리의 개념을 산업 수준의 구현으로 구체화하였으며, ROS2 생태계에서 사실상의 표준(De Facto Standard) 행동 트리 라이브러리로 채택되었다.
1. 개발 배경과 동기
BehaviorTree.CPP의 개발 이전에는 행동 트리를 로봇 시스템에 적용하려는 연구자와 엔지니어가 각자 독자적인 구현을 작성해야 하는 상황이었다. 통일된 표준 라이브러리의 부재로 인해 코드의 재사용성이 저하되고, 행동 트리 노드의 공유와 호환성이 보장되지 않았다. 또한 XML 기반의 선언적 트리 정의, 시각적 편집 도구, 실행 이력 기록 등 실용적 기능의 부재가 행동 트리의 산업적 채택을 저해하는 요인으로 작용하였다.
Faconti는 이러한 문제를 해결하기 위해 범용적이고 확장 가능한 행동 트리 프레임워크를 설계하였으며, 2018년경에 오픈 소스로 공개하였다.
2. 핵심 아키텍처 특성
BehaviorTree.CPP의 핵심 아키텍처 특성은 다음과 같다.
XML 기반 선언적 트리 정의: 행동 트리의 구조를 XML 파일로 정의하고, 실행 시 동적으로 로드하여 트리 인스턴스를 생성한다. 이 선언적 접근은 트리 구조의 수정을 소스 코드 재컴파일 없이 가능하게 하며, 비프로그래머도 트리를 편집할 수 있는 접근성을 제공한다.
포트(Port) 기반 데이터 인터페이스: 각 노드는 입력 포트(Input Port)와 출력 포트(Output Port)를 통해 블랙보드(Blackboard)와 데이터를 교환한다. 포트 선언에 의해 노드가 필요로 하는 데이터와 생성하는 데이터가 명시적으로 정의되며, 컴파일 시점에 타입 안전성(Type Safety)이 부분적으로 보장된다.
블랙보드를 통한 데이터 공유: 키-값 쌍 기반의 블랙보드를 통해 노드 간 데이터 공유가 이루어진다. 서브트리 단위로 블랙보드의 범위(Scope)를 제한할 수 있어, 전역 변수의 무분별한 공유로 인한 결합도 증가를 방지한다.
StatefulActionNode: 장기 실행 행동(Long-Running Action)을 위한 onStart(), onRunning(), onHalted() 생명주기 콜백을 제공하여, 비동기 행동의 체계적 관리를 지원한다.
서브트리(Subtree)와 트리 전환: 서브트리를 통한 모듈적 트리 구성과, 실행 중 동적으로 트리를 전환하는 기능을 제공한다.
3. Groot 시각화 도구
BehaviorTree.CPP와 함께 제공되는 Groot은 행동 트리의 시각적 편집과 실행 모니터링을 위한 도구이다. Groot은 다음의 기능을 제공한다.
첫째, 시각적 트리 편집이다. 드래그 앤 드롭(Drag and Drop) 방식으로 행동 트리를 시각적으로 구성하고 XML 파일로 내보낼 수 있다.
둘째, 실시간 실행 모니터링이다. 행동 트리의 실행 중 각 노드의 반환 상태를 실시간으로 시각화하여 디버깅을 지원한다.
셋째, 실행 이력 재생이다. 기록된 실행 이력을 시간 순서대로 재생하여, 과거의 실행 경로를 사후적으로 분석할 수 있다.
4. ROS2 생태계에서의 채택
BehaviorTree.CPP는 ROS2 생태계에서 광범위하게 채택되었다. Nav2(Navigation 2)는 BehaviorTree.CPP를 기반으로 전체 내비게이션 임무의 흐름을 제어하며, 이를 통해 사용자가 XML 파일의 수정만으로 내비게이션 행동을 커스터마이즈할 수 있는 유연성을 제공한다.
ROS2와의 통합을 위해 behaviortree_ros2 패키지가 제공되며, 이 패키지는 ROS2 액션(Action), 서비스(Service), 토픽(Topic)과 상호 작용하는 표준 노드 유형을 제공하여 ROS2 기반 로봇 시스템과의 연동을 간소화한다.
5. 버전 변천
BehaviorTree.CPP는 지속적인 개선을 거치며 진화하였다. 버전 3에서는 기본적인 트리 실행과 블랙보드 기능이 제공되었으며, 버전 4에서는 포트 기반 인터페이스의 강화, 서브트리 간 블랙보드 범위 제어, 스크립팅 언어 지원 등의 기능이 추가되었다.
참고 문헌
- Faconti, D., & Aurys, M. (2022). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/
- Colledanchise, M., & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- 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).