1295.57 ReactiveSequence와 일반 Sequence의 차이 심화

1. 메모리 메커니즘의 차이

일반 Sequence와 ReactiveSequence의 가장 근본적인 차이는 메모리(memory)의 유무이다.

일반 Sequence는 메모리를 가진다. 이전 Tick에서 자식 C_iSUCCESS를 반환하면, 해당 자식의 인덱스 i를 기억하고 다음 Tick에서는 C_{i+1}부터 평가를 시작한다. 이 메모리는 RUNNING을 반환하는 자식이 존재하는 동안 유지되며, Sequence가 SUCCESS 또는 FAILURE를 반환하면 초기화된다.

ReactiveSequence는 메모리를 가지지 않는다. 매 Tick에서 항상 인덱스 0의 자식부터 평가를 시작한다. 이전 Tick에서 어떤 자식이 어떤 상태를 반환하였는지와 무관하게, 항상 첫 번째 자식부터 순차적으로 평가한다.

이 차이를 형식적으로 표현하면 다음과 같다.

일반 Sequence:
\text{start\_index}(t) = \begin{cases} i+1 & \text{if } C_i(t-1) = \text{SUCCESS} \text{ and } C_{i+1}(t-1) = \text{RUNNING} \\ 0 & \text{otherwise} \end{cases}

ReactiveSequence:
\text{start\_index}(t) = 0 \quad \forall t

2. 동작 차이의 구체적 분석

동일한 트리 구조를 두 노드로 각각 구성하여 동작 차이를 비교한다.

[Sequence 또는 ReactiveSequence]
├── IsPathClear    (조건)
└── MoveForward    (행동)

2.1 시나리오 1: 정상 실행

Tick사건SequenceReactiveSequence
1경로 안전IsPathClear → S, MoveForward → RIsPathClear → S, MoveForward → R
2경로 안전MoveForward → R (IsPathClear 건너뜀)IsPathClear → S, MoveForward → R
3경로 안전MoveForward → SIsPathClear → S, MoveForward → S

정상 실행에서 최종 결과는 동일하다. 차이는 Tick 2에서 일반 Sequence가 IsPathClear를 건너뛰는 반면, ReactiveSequence는 재평가한다는 점이다.

2.2 시나리오 2: 행동 중 조건 변화

Tick사건SequenceReactiveSequence
1경로 안전IsPathClear → S, MoveForward → RIsPathClear → S, MoveForward → R
2장애물 출현MoveForward → R (위험!)IsPathClear → F → MoveForward.halt() → F
3장애물 지속MoveForward → R (위험 지속!)IsPathClear → F → F

일반 Sequence: Tick 2에서 장애물이 출현하였으나 IsPathClear가 재평가되지 않으므로, MoveForward가 장애물을 향하여 계속 이동한다. 로봇 안전이 위협받는다.

ReactiveSequence: Tick 2에서 IsPathClear가 재평가되어 FAILURE를 반환하고, MoveForward에 Halt가 전파되어 즉시 정지한다. 안전이 보장된다.

2.3 시나리오 3: 조건의 일시적 위반과 복원

Tick사건SequenceReactiveSequence
1경로 안전IsPathClear → S, MoveForward → RIsPathClear → S, MoveForward → R
2장애물 출현MoveForward → RIsPathClear → F → halt → F
3장애물 제거MoveForward → RIsPathClear → S, MoveForward → R (재시작)

일반 Sequence: 조건 위반을 감지하지 못하므로, Tick 3에서도 이전 진행 상태에서 계속 이동한다.

ReactiveSequence: Tick 2에서 행동이 Halt되고, Tick 3에서 조건이 복원되면 행동이 처음부터 재시작된다. 이전의 진행 상태는 Halt에 의해 소실되었으므로, MoveForward는 새로 시작된다.

3. 성능 특성의 차이

3.1 조건 평가 횟수

N개의 조건 노드와 1개의 행동 노드로 구성된 트리에서, 행동이 K Tick 동안 RUNNING을 반환하는 경우를 가정한다.

일반 Sequence의 조건 평가 횟수: 각 조건이 1회씩 평가된다 (최초 통과 시).
\text{총 조건 평가} = N

ReactiveSequence의 조건 평가 횟수: 매 Tick에서 모든 조건이 재평가된다.
\text{총 조건 평가} = N \times K

K가 클수록 ReactiveSequence의 조건 평가 오버헤드가 증가한다. 조건 노드가 경량이면 이 오버헤드는 무시할 수 있으나, 조건 평가에 비용이 높은 연산(예: 복잡한 충돌 검사)이 포함되면 성능에 영향을 미칠 수 있다.

3.2 Halt 발생 빈도

일반 Sequence에서는 부모 노드로부터의 Halt만 수신한다. ReactiveSequence에서는 조건 위반 시에도 Halt가 발생하므로, Halt 빈도가 더 높다. 조건이 불안정한(빈번히 변동하는) 환경에서는 ReactiveSequence의 Halt 빈도가 현저히 높아질 수 있다.

4. 행동 진행 상태에 대한 영향

일반 Sequence에서 행동 노드의 진행 상태는 보존된다. 행동이 Tick t에서 50% 진행 중이면, Tick t+1에서는 50%에서 이어서 진행한다.

ReactiveSequence에서는 조건 위반 시 Halt에 의해 진행 상태가 초기화된다. 조건이 복원되면 행동은 0%에서 다시 시작한다. 이는 두 가지 결과를 초래한다.

  1. 안전성 확보: 조건이 위반된 상태에서 수행된 진행은 무효화되므로, 안전하지 않은 상태에서의 작업 결과가 축적되지 않는다.

  2. 작업 효율 저하: 조건이 빈번히 위반되고 복원되면, 행동이 반복적으로 처음부터 재시작되어 작업 완료까지의 시간이 증가한다.

이 상충(trade-off)은 설계 시 명시적으로 고려하여야 한다.

5. 적용 기준

상황권장 노드
전제 조건이 행동 중 변할 수 있음ReactiveSequence
전제 조건이 행동 개시 후 변하지 않음Sequence
안전 조건의 지속적 보장 필요ReactiveSequence
행동 진행 상태의 보존이 중요Sequence
동적 환경에서의 로봇 행동ReactiveSequence
정적 환경에서의 순차 작업Sequence
조건 평가 비용이 매우 높음Sequence (또는 조건 경량화 후 ReactiveSequence)

6. 하이브리드 구성

두 노드의 장점을 결합하기 위해, ReactiveSequence 내부에 일반 Sequence를 중첩하는 하이브리드 구성이 가능하다.

ReactiveSequence
├── IsSafe                    (매 Tick 재평가)
├── IsBatteryAboveThreshold   (매 Tick 재평가)
└── Sequence                  (메모리 있는 순차 실행)
    ├── PrepareAction         (1회 실행 후 건너뜀)
    ├── ExecuteAction         (장기 실행)
    └── FinalizeAction        (1회 실행)

이 구조에서 안전 조건(IsSafe)과 배터리 조건(IsBatteryAboveThreshold)은 매 Tick에서 재평가되어 지속적 유효성이 보장된다. 그 내부의 Sequence는 메모리를 가지므로, PrepareAction이 성공한 후에는 건너뛰어지고 ExecuteAction부터 계속 진행된다.

이 하이브리드 구성은 안전 조건의 지속적 감시와 작업 진행 상태의 보존을 동시에 달성한다. 안전 조건이 위반되면 전체 Sequence에 Halt가 전파되어 모든 행동이 중단되고, 조건이 복원되면 Sequence가 처음부터 다시 시작된다.