Precondition의 활용 사례 (Use Cases of the Precondition Decorator)
1. 개요
Precondition 데코레이터의 스크립트 속성은 경량 조건 검사를 인라인으로 표현하여, 별도의 조건 노드를 생성하지 않고도 간단한 전제 조건을 행동 트리에 적용할 수 있다. 본 절에서는 로봇 공학에서의 구체적인 활용 사례를 다룬다.
2. 사례 1: 불필요한 경로 재계산 방지
<Sequence>
<Action ID="ComputePathToPose"
_skipIf="path_valid == true"
goal="{target_goal}"
path="{current_path}"/>
<Action ID="FollowPath"
path="{current_path}"/>
</Sequence>
경로가 이미 유효하면 경로 계산을 skip하여 계산 비용을 절약한다.
3. 사례 2: 배터리 부족 시 임무 차단
<Action ID="StartLongMission"
_failureIf="battery_level < 0.3"/>
배터리가 30% 미만이면 장기 임무를 시작하지 않는다.
4. 사례 3: 목표 도달 시 내비게이션 종료
<Action ID="NavigateToGoal"
_successIf="goal_reached == true"/>
목표에 이미 도달한 경우 내비게이션을 실행하지 않고 SUCCESS를 반환한다.
5. 사례 4: 조건 유지 중 경로 추종
<Action ID="FollowPath"
_while="is_path_valid == true && is_localized == true"/>
경로가 유효하고 위치 추정이 유효한 동안에만 경로를 추종한다.
6. 사례 5: 비상 상태 감지 시 행동 차단
<Action ID="ContinueOperation"
_failureIf="emergency_stop == true"/>
7. 사례 6: 후처리 스크립트를 통한 상태 업데이트
<Action ID="NavigateToGoal"
goal="{target}"
_onSuccess="mission_phase = 'completed'"
_onFailure="error_count = error_count + 1"/>
내비게이션 성공 시 임무 단계를 갱신하고, 실패 시 오류 카운터를 증가시킨다.
8. 사례 7: 동적 행동 활성화/비활성화
<Action ID="ObstacleAvoidance"
_skipIf="obstacle_avoidance_enabled == false"/>
파라미터에 의해 장애물 회피 기능을 동적으로 활성화/비활성화한다.
9. 사례 8: 다중 조건 결합
<Action ID="AutonomousFlight"
_failureIf="battery_level < 0.15 || wind_speed > 10.0 || gps_fix == false"/>
배터리 부족, 과도한 풍속, GPS 신호 부재 중 하나라도 해당되면 자율 비행을 차단한다.
10. Precondition과 조건 노드의 사용 구분
| 상황 | 적합한 방식 |
|---|---|
| 단순 블랙보드 값 비교 | Precondition 스크립트 속성 |
| 센서 데이터 분석 | 전용 조건 노드 |
| 서비스 호출 기반 조건 | 전용 조건 노드 |
| 복잡한 수학적 계산 | 전용 조건 노드 |
| 히스테리시스 적용 | 전용 조건 노드 |
| 빈번히 재사용되는 조건 | 전용 조건 노드 (등록 후 재사용) |
| 일회성 간단 조건 | Precondition 스크립트 속성 |
11. 참고 문헌
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-05 | 초안 작성 |