Behavior Tree Node
2022. 6. 26. 19:52ㆍ공부/ROS2
아래 내용은 BehaviorTree.CPP 튜토리얼을 바탕으로 작성되었다.
Behavior Tree Node 에는 크게 Control node, Decorator, Leaf 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 반환
- Inverter node
Leaf node
- condition node
- FAILURE 또는 SUCCESS만 반환 (RUNNING 반환 X)
- 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 |