ForceSuccess의 활용 사례 (Use Cases of the ForceSuccess Decorator)
1. 개요
ForceSuccess 데코레이터는 자식 행동의 실패가 전체 행동 흐름에 영향을 미치지 않아야 하는 상황에서 활용된다. 본 절에서는 로봇 공학에서의 구체적인 ForceSuccess 활용 사례를 다룬다.
2. 사례 1: 선택적 센서 초기화
복수의 센서 중 보조 센서의 초기화 실패가 전체 시스템 시작을 차단하지 않도록 한다.
<Sequence name="SystemStartup">
<Action ID="InitializeMainLidar"/>
<Action ID="InitializeIMU"/>
<ForceSuccess>
<Action ID="InitializeAuxCamera"/>
</ForceSuccess>
<ForceSuccess>
<Action ID="InitializeUltrasonicSensors"/>
</ForceSuccess>
<Action ID="StartNavigation"/>
</Sequence>
주 센서(라이다, IMU)는 필수이므로 실패 시 전체 시퀀스가 중단되지만, 보조 카메라와 초음파 센서는 선택적이므로 실패해도 내비게이션을 시작한다.
3. 사례 2: 로깅 및 알림 행동
임무 결과의 로깅이나 원격 알림 전송은 실패하더라도 핵심 행동에 영향을 주지 않아야 한다.
<Sequence name="MissionWithLogging">
<Action ID="PerformMainTask"/>
<ForceSuccess>
<Action ID="UploadMissionLog"/>
</ForceSuccess>
<ForceSuccess>
<Action ID="SendCompletionNotification"/>
</ForceSuccess>
<Action ID="ReturnToBase"/>
</Sequence>
4. 사례 3: 최적 경로 시도 후 기본 경로 사용
최적화된 경로 계산을 시도하되, 실패하면 기본 경로를 사용한다.
<Sequence>
<ForceSuccess>
<Action ID="ComputeOptimalPath"
output_path="{optimal_path}"/>
</ForceSuccess>
<Fallback>
<Sequence>
<Condition ID="IsPathValid"
path="{optimal_path}"/>
<Action ID="FollowPath"
path="{optimal_path}"/>
</Sequence>
<Action ID="FollowDefaultPath"/>
</Fallback>
</Sequence>
최적 경로 계산이 실패해도 시퀀스가 계속되며, 이후 경로 유효성 확인에서 대체 경로로 전환한다.
5. 사례 4: 정리(Cleanup) 행동
행동 완료 후 정리 작업의 실패가 전체 결과에 영향을 미치지 않도록 한다.
<Sequence>
<Action ID="PerformWelding"/>
<ForceSuccess>
<Action ID="CleanWeldingNozzle"/>
</ForceSuccess>
<Action ID="MoveToNextPosition"/>
</Sequence>
용접 노즐 청소가 실패하더라도 다음 위치로 이동한다.
6. 사례 5: 다단계 복구에서의 선택적 단계
복구 절차의 일부 단계가 실패해도 나머지 단계를 계속 실행한다.
<Sequence name="Recovery">
<ForceSuccess>
<Action ID="ClearLocalCostmap"/>
</ForceSuccess>
<ForceSuccess>
<Action ID="ClearGlobalCostmap"/>
</ForceSuccess>
<Action ID="RecomputePath"/>
</Sequence>
코스트맵 초기화가 실패하더라도 경로 재계산을 시도한다.
7. 사례 6: 드론의 착륙 후 선택적 데이터 전송
<Sequence name="LandingSequence">
<Action ID="Land"/>
<Action ID="DisarmMotors"/>
<ForceSuccess>
<Action ID="TransferFlightData"/>
</ForceSuccess>
<ForceSuccess>
<Action ID="SendLandingConfirmation"/>
</ForceSuccess>
</Sequence>
착륙과 모터 해제는 필수이나, 비행 데이터 전송과 착륙 확인 알림은 선택적이다.
8. 사례 7: Parallel 노드 내 선택적 행동
<Parallel success_count="1" failure_count="1">
<Action ID="MainTask"/>
<ForceSuccess>
<Action ID="MonitoringTask"/>
</ForceSuccess>
</Parallel>
MonitoringTask가 실패해도 Parallel 노드의 failure_count에 기여하지 않는다.
9. 적용 기준 요약
| 적용 적합 | 적용 부적합 |
|---|---|
| 보조 센서 초기화 | 주 센서 초기화 |
| 로깅/알림 | 안전 장치 활성화 |
| 선택적 최적화 | 필수 계산 |
| 정리 작업 | 핵심 처리 단계 |
| 데이터 전송 | 비상 정지 명령 |
10. 설계 시 주의 사항
자식의 실패가 후속 행동의 정확성에 영향을 미치는 경우에는 ForceSuccess를 적용하지 않아야 한다. 예를 들어, 데이터 수집 행동이 실패하였는데 이를 ForceSuccess로 무시하면, 후속 행동이 부정확한 데이터를 기반으로 동작하게 된다.
11. 참고 문헌
- 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-04 | 초안 작성 |