1292.63 Inverter 데코레이터의 동작

1. Inverter 데코레이터의 정의

Inverter 데코레이터는 자식 노드의 반환 상태를 논리적으로 반전(inversion)시키는 데코레이터 노드이다. 자식이 Success를 반환하면 Failure로, Failure를 반환하면 Success로 변환한다. Running 상태는 변환하지 않고 그대로 전파한다. Inverter는 논리 부정(logical NOT) 연산에 대응하며, 행동 트리에서 부정 조건을 표현하는 기본적인 수단이다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

2. 알고리즘

Inverter 데코레이터의 동작을 의사 코드로 표현하면 다음과 같다.

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

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

3. 상태 변환 규칙

자식 반환 상태Inverter 반환 상태
SuccessFailure
FailureSuccess
RunningRunning

Running 상태가 변환되지 않는 것은 Inverter가 자식의 완료 결과에 대해서만 논리 반전을 적용하고, 자식의 실행 진행 상태는 그대로 전파하기 때문이다. 자식이 Running을 반환하는 동안 Inverter 역시 Running을 상위 노드에 전파하여, 자식의 실행이 계속 진행됨을 나타낸다 (Faconti, BehaviorTree.CPP Documentation, 2024).

4. 논리 부정으로서의 의미론

Inverter는 행동 트리에서 논리 NOT 연산을 수행한다. Sequence 노드가 논리 AND에, Fallback 노드가 논리 OR에 대응하는 것과 마찬가지로, Inverter는 논리 NOT에 대응한다. 이 세 가지 논리 연산의 조합을 통해 임의의 논리 표현식을 행동 트리로 구성할 수 있다.

// 논리 표현식: NOT(C1) AND C2
Sequence
 ├─ Inverter
 │   └─ Condition [C1]
 └─ Condition [C2]

5. 실행 흐름 예제

5.1 조건 노드에 대한 반전

Inverter [INV1]
 └─ Condition [C1: 장애물 감지됨]
TickC1 반환INV1 반환의미
t_1Success (장애물 있음)Failure장애물 없음 조건 불충족
t_2Failure (장애물 없음)Success장애물 없음 조건 충족

Inverter를 통해 “장애물 감지됨” 조건을 “장애물 없음” 조건으로 변환할 수 있다.

5.2 액션 노드에 대한 반전

Inverter [INV2]
 └─ Action [A1: 이동]
TickA1 반환INV2 반환비고
t_1RunningRunning이동 진행 중, 반전 없음
t_2RunningRunning이동 진행 중, 반전 없음
t_3SuccessFailure이동 성공 → 반전되어 Failure

액션 노드에 Inverter를 적용하면, 행동의 성공을 실패로, 실패를 성공으로 해석한다. 이 패턴은 Fallback 노드의 자식으로 사용될 때, 특정 행동이 성공하지 않는 동안 다음 대안을 시도하는 로직을 구현하는 데 활용된다.

6. Halt 전파

Inverter가 halt 요청을 수신하면, 자식이 Running 상태인 경우 자식에게 halt를 전파한다.

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

7. 로봇 공학에서의 활용

7.1 부정 조건의 표현

기존 조건 노드를 재사용하여 부정 조건을 표현한다. “배터리 충분” 조건 노드에 Inverter를 적용하면 “배터리 부족” 조건이 된다. 별도의 부정 조건 노드를 구현할 필요 없이 기존 노드를 재활용할 수 있으므로, 행동 트리의 모듈성과 재사용성이 향상된다.

7.2 Fallback에서의 조건 반전

Fallback 노드의 자식 중 특정 조건의 부정을 평가하여야 하는 경우에 Inverter가 활용된다. 이를 통해 “~가 아닌 경우에만” 해당 대안을 시도하는 로직을 간결하게 표현한다 (Faconti, 2024).


참고 문헌

  • 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/