1292.65 ForceFailure 데코레이터의 동작

1. ForceFailure 데코레이터의 정의

ForceFailure 데코레이터는 자식 노드의 반환 상태가 Success 또는 Failure인 경우 이를 항상 Failure로 변환하여 반환하는 데코레이터 노드이다. 자식이 Running을 반환하면 Running을 그대로 전파한다. ForceFailure는 ForceSuccess의 쌍대(dual) 데코레이터로, 자식 노드의 성공을 의도적으로 실패로 변환하여 상위 제어 흐름의 동작을 제어하는 데 사용된다 (Faconti, BehaviorTree.CPP Documentation, 2024).

2. 알고리즘

function ForceFailure.tick():
    child_status = child.tick()

    if child_status == Running:
        return Running
    else:
        return Failure

3. 상태 변환 규칙

자식 반환 상태ForceFailure 반환 상태
SuccessFailure
FailureFailure
RunningRunning

ForceFailure는 자식의 완료 상태를 모두 Failure로 변환한다. ForceSuccess와 마찬가지로 Running 상태는 변환하지 않고 전파한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

4. 실행 흐름 예제

4.1 Fallback에서의 행동 후 계속 탐색

Fallback
 ├─ ForceFailure
 │   └─ Action [A1: 상태 기록]
 ├─ Sequence
 │   ├─ Condition [C1: GPS 가용]
 │   └─ Action [A2: GPS 항법]
 └─ Action [A3: 관성 항법]
TickA1 반환ForceFailure 반환Fallback 동작
t_1SuccessFailure다음 자식(C1)으로 진행

A1이 성공하더라도 ForceFailure에 의해 Failure로 변환되므로, Fallback은 A1의 결과를 수락하지 않고 다음 자식을 평가한다. 이 패턴은 Fallback의 대안 탐색을 중단시키지 않으면서 부수적인 행동을 실행하는 데 활용된다.

4.2 비동기 자식의 처리

TickA1 반환ForceFailure 반환
t_1RunningRunning
t_2SuccessFailure

자식이 Running을 유지하는 동안 ForceFailure도 Running을 전파하며, 자식이 최종적으로 완료되면 Failure로 변환한다.

5. ForceSuccess와의 대칭성

ForceSuccess와 ForceFailure는 대칭적 관계에 있다.

데코레이터Success 변환Failure 변환Running 변환
ForceSuccessSuccessSuccessRunning
ForceFailureFailureFailureRunning

두 데코레이터 모두 Running은 변환하지 않으며, 완료 상태만을 고정된 값으로 변환한다. ForceSuccess는 자식의 실패를 무시하고, ForceFailure는 자식의 성공을 무시한다 (Faconti, 2024).

6. Halt 전파

ForceFailure가 halt 요청을 수신하면, Running 상태의 자식에게 halt를 전파한다.

function ForceFailure.halt():
    if child.status == Running:
        child.halt()
    set_status(Idle)

7. 로봇 공학에서의 활용

7.1 Fallback에서의 부수 행동 삽입

Fallback 노드에서 대안 탐색을 중단시키지 않으면서 부수적인 행동(로그 기록, 카운터 증가, 알림 발송)을 수행하는 데 ForceFailure가 활용된다. 부수 행동이 성공하더라도 Fallback은 다음 대안을 계속 평가한다.

7.2 조건 검사 후 의도적 실패

특정 조건을 검사한 후, 그 결과에 관계없이 상위 노드에 Failure를 전달하여 대안 경로를 유도하는 패턴에서 ForceFailure가 사용된다 (Colledanchise & Ögren, 2018).


참고 문헌

  • Colledanchise, M. & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D. (2024). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/