Behavior Tree Node

2022. 6. 26. 19:52공부/ROS2

아래 내용은 BehaviorTree.CPP 튜토리얼을 바탕으로 작성되었다.

Behavior Tree Node 에는 크게 Control node, Decorator, Leaf node가 있다.

node 종류

 


Control node

1. Sequence

  • 동작
    • 자식노드가 SUCCESS 반환하면 다음 자식노드 실행
    • 자식노드가 FAILURE 반환하면 Sequence도 FAILURE 반환
    • 모든 자식노드가 SUCCESS 반환하면 Sequence도 SUCCESS 반환
  • 종류
    • Restart: 첫번째 자식노드부터 재시작됨
    • Tick again: SUCCESS를 반환한 자식노드는 건너뛰고, 계속 진행하던 자식노드를 계속 실행

2. Fallback(Selector or Priority)

  • 동작
    • 자식노드가 FAILURE 반환하면 다음 자식노드 실행
    • 자식노드가 SUCCESS 반환하면 Fallback도 SUCCESS 반환
    • 모든 자식노드가 FAILURE 반환하면 Fallback도 FAILURE 반환
    • tick 시작 전 모든 노드는 RUNNING 상태 (처음 시작부터 자식노드가 SUCCESS 혹은 FAILURE면 Fallback 노드가 동작할 수 없음)
  • 종류

 


Decorator

  • 동작
    • 하나의 자식노드만 가질 수 있음
  • 종류
    • Inverter node
      • 자식노드가 RUNNING이면 RUNNING 반환
      • 자식노드의 상태 반전 (자식노드가 SUCCESS이면, FAILURE 반환)
    • force success node
      • 자식노드가 RUNNING이면 RUNNING 반환
      • 그게 아니면, 항상 SUCCESS 반환
    • force failure node
      • 자식노드가 RUNNING이면 RUNNING 반환
      • 그게 아니면, 항상 FAILURE 반환
    • repeat node
      • 자식노드가 RUNNING이면 RUNNING 반환
      • 자식노드를 N번 tick 수행 (자식노드가 SUCCESS 반환할 때만 수행)
      • 반복수행 중 자식노드에서 FAILURE 반환되면 FAILURE 반환
    • retry node
      • 자식노드가 RUNNING이면 RUNNING 반환
      • 자식노드를 N번 tick 수행 (자식노드가 FAILURE 반환할 때만 수행)
      • 반복수행 중 자식노드에서 SUCCESS 반환되면 SUCCESS 반환

 


Leaf node

  1. condition node
    • FAILURE 또는 SUCCESS만 반환 (RUNNING 반환 X)
  2. action node
    • 실제 동작 구현부
    • 종류
      • synchronous node: SUCCESS 또는 FAILURE 반환될때까지 블락킹
      • asynchronous node: 실행중인 상태에서 RUNNING 반환

'공부 > ROS2' 카테고리의 다른 글

커스텀 msg 등록  (0) 2022.06.28
Executor  (0) 2022.06.27
Behavior Tree setup&tutorial (Groot 포함)  (0) 2022.06.25
BehaviorTree.CPP 라이브러리 튜토리얼  (0) 2022.06.25