[ROS2] Behavior Tree(BT-tree)

TaerinLog·2025년 11월 24일

Behavior Tree

  • 로봇의 행동을 트리 구조로 표현하는 의사 결정 시스템
  • BT가 로봇의 행동을 전체적으로 제어하는 두뇌 역할

ROS와 상호 작용하는 데 권장되는 방법은 rclcpp_action을 사용
ㄴ 해당 API는 비동기식이므로 사용자는 별도의 스레드를 생성할 필요가 없음


1. Behavior Tree의 기본 구성 요소

  • Behavior Tree를 구성하는 가장 기본적인 3가지 노드

1-1) Action Node

  • 실제 행동을 수행하는 노드
    (ex: 로봇 이동, 팔 동작, 시스템 명령)

1-2) Condition Node

  • 상태/조건을 검사하는 노드
    (ex: 공이 가까운가?, 배터리 충분한가?)

1-3) Control Node

  • 트리의 실행 흐름을 제어하는 노드
    ➡ 여러 자식을 가지며, 어떤 자식을 언제 실행할지 결정

2. Control Node의 종류

2-1) Sequence (순차적 실행, AND)

  • 앞 노드가 SUCCESS여야 다음 실행
  • 하나라도 FAILURE면 즉시 종료
  • xml 형식
 <root BTCPP_format="4" >
     <BehaviorTree ID="MainTree">
        <Sequence name="root_sequence">
            <CheckBattery   name="check_battery"/>
            <OpenGripper    name="open_gripper"/>
            <ApproachObject name="approach_object"/>
            <CloseGripper   name="close_gripper"/>
        </Sequence>
     </BehaviorTree>
 </root>

2-2) Fallback / Selector (OR)

  • 왼쪽부터 실행
  • 하나라도 SUCCESS면 멈춤
  • 모두 실패하면 FAILURE

2-3) Parallel

  • 여러 자식을 동시에 실행
  • 특정 SUCCESS/FAILURE 수 기준으로 종료

3. Decorator Node

  • 자식 노드를 딱 하나만 감싸는 특수 노드
    ㄴ 자식의 실행 규칙을 변형하는 역할

대표 데코레이터

ㄴ Inverter: 성공/실패 반전
ㄴ Repeat / Retry: 반복 or 재시도
ㄴ Delay / Timeout: 시간 제어
ㄴ RunOnce: 한 번만 실행

데코레이터 참조 문서 : https://www.behaviortree.dev/docs/nodes-library/DecoratorNode


4. BT 실행 방식 (Tick 방식)

  • tick 신호를 수신한 모든 TreeNode는 콜백을 실행
  • 이 콜백은 다음 중 하나를 반환해야 함
    ㄴ SUCCESS
    ㄴ FAILURE
    ㄴ RUNNING

Behavior Tree의 장점 (ROS가 채택한 이유)

  • 순서 + 조건 처리가 정말 깔끔함
  • 중첩/재사용 용이
  • ROS2 Navigation2가 BT 기반 (Nav2의 핵심)
  • Groot GUI로 직관적으로 작성 가능

참조: https://www.behaviortree.dev/docs/learn-the-basics/BT_basics

profile
taerin

0개의 댓글