1292.71 KeepRunningUntilFailure 데코레이터의 동작

1. KeepRunningUntilFailure 데코레이터의 정의

KeepRunningUntilFailure 데코레이터는 자식 노드가 Failure를 반환할 때까지 자식의 실행을 계속 유지하는 데코레이터 노드이다. 자식이 Success를 반환하면 이를 Running으로 변환하여 자식을 다시 실행하고, Failure를 반환하면 Failure를 그대로 전파한다. Running은 변환 없이 전파한다. 이 데코레이터는 자식이 실패할 때까지 자식을 반복적으로 실행하는 무한 반복의 의미론을 구현한다 (Faconti, BehaviorTree.CPP Documentation, 2024).

2. 알고리즘

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

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

이 알고리즘에서 자식이 Success를 반환하면 Running으로 변환되어 상위 노드에 전파된다. 다음 tick에서 자식이 다시 tick을 수신하면, 자식은 Idle 상태에서 새로 시작한다(이전 실행이 Success로 완료되어 Idle로 복귀하였으므로). 자식이 Running을 반환하면 그대로 Running이 전파되어, 자식의 실행이 계속된다.

3. 상태 변환 규칙

자식 반환 상태KeepRunningUntilFailure 반환 상태
SuccessRunning (자식 재실행)
FailureFailure
RunningRunning

Success와 Running 모두 Running으로 반환되므로, 이 데코레이터는 자식이 Failure를 반환하기 전까지는 항상 Running을 유지한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

4. 실행 흐름 예제

KeepRunningUntilFailure [KRUF1]
 └─ Action [A1: 순찰 경유점 방문]

4.1 자식이 반복 성공하다 실패하는 경우

TickA1 반환KRUF1 반환비고
t_1RunningRunningA1 실행 중
t_2SuccessRunning경유점 1 도달, 재실행
t_3RunningRunningA1 재실행 중
t_4SuccessRunning경유점 2 도달, 재실행
t_5RunningRunningA1 재실행 중
t_6FailureFailure경유점 도달 실패, 종료

A1이 Success를 반환할 때마다 KRUF1은 Running을 반환하여 자식의 재실행을 유도한다. A1이 Failure를 반환하면 KRUF1도 Failure를 반환하여 반복이 종료된다.

5. Repeat 데코레이터와의 비교

속성KeepRunningUntilFailureRepeat
반복 횟수무한 (Failure까지)지정된 횟수
Success 시 동작Running 변환 (재실행)카운터 증가
Failure 시 동작Failure 반환 (종료)Failure 반환 (종료)
정상 종료 조건자식의 Failure지정 횟수 도달

KeepRunningUntilFailure는 반복 횟수를 사전에 지정하지 않고, 자식의 실패를 종료 조건으로 사용하는 무한 반복 패턴을 구현한다. Repeat의 무한 반복 모드(N = -1)와 유사하나, KeepRunningUntilFailure는 자식의 Success를 명시적으로 Running으로 변환하여 반복의 의도를 더 직관적으로 표현한다 (Faconti, 2024).

6. Halt 전파

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

7. 로봇 공학에서의 활용

7.1 지속적 순찰

로봇이 경유점을 순차적으로 방문하는 행동을 KeepRunningUntilFailure로 감싸면, 각 경유점 방문이 성공할 때마다 다음 방문이 자동으로 시작된다. 특정 경유점 방문에 실패하면(경로 차단, 접근 불가 등) 순찰이 종료된다.

7.2 이벤트 대기 루프

특정 이벤트(실패 조건)가 발생할 때까지 행동을 계속 반복 수행하는 패턴에서 활용된다. 자식이 이벤트의 발생 여부를 검사하고, 이벤트가 발생하지 않으면 Success를, 발생하면 Failure를 반환하는 구조로 구현된다 (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/