조건 반전 패턴 (Inverter+IsObstacleDetected)
1. 개요
조건 반전 패턴은 Inverter 데코레이터와 조건 노드를 결합하여, 조건의 의미를 논리적으로 반전시키는 가장 기본적인 데코레이터 적용 패턴이다. “장애물이 감지되었는가?“를 “장애물이 감지되지 않았는가?“로 변환하는 것이 대표적 사례이다.
2. 기본 구조
<Inverter>
<Condition ID="IsObstacleDetected"
topic_name="/scan"
detection_range="0.5"/>
</Inverter>
IsObstacleDetected가 SUCCESS(장애물 있음)이면 Inverter가 FAILURE를, FAILURE(장애물 없음)이면 Inverter가 SUCCESS를 반환한다.
3. 활용 예시
3.1 장애물 없을 때만 전진
<Sequence>
<Inverter>
<Condition ID="IsObstacleDetected" detection_range="0.5"/>
</Inverter>
<Action ID="DriveForward"/>
</Sequence>
3.2 비상 정지 비활성 시에만 운용
<ReactiveSequence>
<Inverter>
<Condition ID="IsEmergencyStopActive"/>
</Inverter>
<Action ID="ContinueOperation"/>
</ReactiveSequence>
3.3 배터리 부족이 아닐 때만 임무 수행
<Sequence>
<Inverter>
<Condition ID="IsBatteryLow" threshold="0.15"/>
</Inverter>
<SubTree ID="Mission"/>
</Sequence>
4. 전용 반대 조건 노드와의 비교
| 방식 | 구현 | 가독성 |
|---|---|---|
Inverter(IsObstacleDetected) | 기존 노드 재사용 | 보통 |
IsPathClear (전용) | 별도 구현 필요 | 높음 |
빈번히 사용되는 반전 조건은 전용 노드를 구현하는 것이 가독성 측면에서 우수하다.
5. 참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-05 | 초안 작성 |