1294.8 Sequence 노드의 Success 반환 조건

1. Success 반환의 정의

Sequence 노드가 SUCCESS를 반환하는 유일한 조건은 모든 자식 노드가 SUCCESS를 반환한 경우이다. N개의 자식 C_1, C_2, \ldots, C_N을 가진 Sequence에서:

\text{Sequence} = \text{SUCCESS} \iff \forall\, i \in \{1, \ldots, N\},\ C_i = \text{SUCCESS}

이 조건은 논리곱(AND)의 정의와 직접적으로 대응한다. 하나라도 SUCCESS가 아닌 자식이 존재하면 Sequence는 SUCCESS를 반환하지 않는다(Colledanchise & Ogren, 2018).

단일 Tick에서의 Success

모든 자식이 동기 노드(조건 노드 또는 즉시 완료되는 액션 노드)인 경우, 단일 Tick에서 모든 자식이 SUCCESS를 반환하여 Sequence도 즉시 SUCCESS를 반환할 수 있다.

Tick:
  children[0]: IsBatteryAbove20   → SUCCESS
  children[1]: IsLocalized        → SUCCESS
  children[2]: IsPathClear        → SUCCESS
  Sequence → SUCCESS (단일 Tick에서 완료)

다수 Tick에 걸친 Success

비동기 액션 노드가 포함된 Sequence에서는 SUCCESS가 다수의 Tick에 걸쳐 달성된다. WithMemory 모드에서 각 자식이 순차적으로 SUCCESS를 반환하고, 마지막 자식이 SUCCESS를 반환하는 Tick에서 Sequence의 SUCCESS가 확정된다.

Tick 1:
  children[0]: CheckCondition   → SUCCESS
  children[1]: NavigateToGoal   → RUNNING
  Sequence → RUNNING

Tick 2:
  children[1]: NavigateToGoal   → RUNNING
  Sequence → RUNNING

Tick 3:
  children[1]: NavigateToGoal   → SUCCESS
  children[2]: PickObject       → RUNNING
  Sequence → RUNNING

Tick 4:
  children[2]: PickObject       → SUCCESS
  Sequence → SUCCESS  ← 모든 자식 완료

Success 후 상태 초기화

Sequence가 SUCCESS를 반환하면, 모든 자식 노드의 상태가 IDLE로 초기화된다. 이는 다음에 Sequence가 다시 Tick될 때 모든 자식이 처음부터 실행될 수 있도록 보장한다.

// BehaviorTree.CPP의 SequenceNode 구현 (개념적)
NodeStatus SequenceNode::tick() {
    for (size_t i = current_child_idx_; i < childrenCount(); i++) {
        auto status = children_nodes_[i]->executeTick();
        
        if (status != NodeStatus::SUCCESS) {
            return status;
        }
    }
    
    // 모든 자식이 SUCCESS — 인덱스 초기화
    current_child_idx_ = 0;
    haltChildren();  // 모든 자식을 IDLE로 복귀
    return NodeStatus::SUCCESS;
}

ReactiveSequence에서의 Success

ReactiveSequence에서는 매 Tick마다 첫 번째 자식부터 모든 자식을 재평가한다. 따라서 SUCCESS가 반환되려면 해당 Tick에서 모든 자식이 동시에 SUCCESS를 반환해야 한다. RUNNING 상태의 비동기 자식이 있는 한 ReactiveSequence는 RUNNING을 반환하며, 모든 자식이 SUCCESS인 Tick에서 비로소 SUCCESS를 반환한다.

Success 반환의 의미

Sequence의 SUCCESS는 “모든 순차 작업이 성공적으로 완료되었음“을 의미한다. 로봇 시스템에서 이는 다음과 같은 상황에 해당한다.

시나리오Success의 의미
조건 검사 Sequence모든 전제 조건이 충족됨
순차 임무 Sequence모든 임무 단계가 완료됨
초기화 Sequence모든 초기화 절차가 성공함
검증 Sequence모든 검증 항목이 통과함

Sequence의 SUCCESS는 부모 노드에 전달되어, 상위 트리의 의사 결정에 사용된다. 예를 들어, Fallback의 자식인 Sequence가 SUCCESS를 반환하면 Fallback도 SUCCESS를 반환하고 나머지 대안의 평가를 생략한다.


참고 문헌

  • Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D. (2022). BehaviorTree.CPP documentation and API reference. https://www.behaviortree.dev/