1295.43 ReactiveFallback의 우선순위 기반 행동 선택

1. 우선순위 기반 행동 선택의 원리

ReactiveFallback의 우선순위 기반 행동 선택(priority-based behavior selection)은 자식 노드의 배치 순서가 곧 우선순위 순서이며, 매 Tick에서 가장 높은 우선순위의 비실패 자식이 현재 행동으로 선택되는 메커니즘이다. 인덱스 0의 자식이 최고 우선순위, 마지막 자식이 최저 우선순위를 가진다.

이 메커니즘을 형식적으로 정의하면, Tick t에서 선택되는 자식 인덱스 k(t)는 다음과 같다.

k(t) = \min\{i \mid \text{status}(C_i, t) \neq \text{FAILURE}\}

즉, FAILURE를 반환하지 않는 가장 작은 인덱스의 자식이 선택된다. 모든 자식이 FAILURE를 반환하면 ReactiveFallback 자체가 FAILURE를 반환한다.

고정 우선순위 체계

ReactiveFallback의 우선순위는 자식의 배치 순서에 의해 정적으로 결정되며, 런타임에 동적으로 변경되지 않는다. 이를 고정 우선순위(fixed priority) 체계라 한다. 고정 우선순위 체계는 설계 시점에서 우선순위 관계가 명확히 정의되므로, 시스템의 동작을 예측하고 검증하기 용이하다는 이점이 있다.

ReactiveFallback
├── [P0: 최고] EmergencyResponse
├── [P1]       ObstacleAvoidance
├── [P2]       BatteryManagement
├── [P3]       MissionExecution
└── [P4: 최저] Idle

이 구조에서 우선순위 관계는 P_0 > P_1 > P_2 > P_3 > P_4로 불변이다. 비상 대응이 항상 최고 우선순위를 가지며, 유휴 행동이 항상 최저 우선순위를 가진다.

조건-행동 쌍을 통한 행동 선택

각 우선순위 수준에서 조건 판정과 행동 실행을 분리하기 위해, Sequence 노드 내에 조건 노드와 행동 노드를 쌍으로 배치하는 구조가 표준적으로 사용된다.

ReactiveFallback
├── Sequence [P0: 비상]
│   ├── IsEmergency
│   └── ExecuteEmergencyStop
├── Sequence [P1: 장애물 회피]
│   ├── IsObstacleNear
│   └── AvoidObstacle
├── Sequence [P2: 배터리 관리]
│   ├── IsBatteryLow
│   └── ReturnToCharger
└── NavigateToGoal [P3: 기본 임무]

각 Tick에서의 행동 선택 과정은 다음과 같다.

  1. IsEmergency 평가: SUCCESSExecuteEmergencyStop 실행 (선택 종료)
  2. IsEmergency = FAILUREIsObstacleNear 평가
  3. IsObstacleNear = SUCCESSAvoidObstacle 실행 (선택 종료)
  4. IsObstacleNear = FAILUREIsBatteryLow 평가
  5. IsBatteryLow = SUCCESSReturnToCharger 실행 (선택 종료)
  6. IsBatteryLow = FAILURENavigateToGoal 실행 (기본 행동)

이 과정은 프로그래밍 언어의 if-else if-else 체인과 동일한 의미론을 가지되, 매 Tick마다 전체 조건 체인이 재평가된다는 점이 핵심이다.

우선순위 선점(Preemption)

ReactiveFallback의 우선순위 기반 선택에서 가장 중요한 특성은 선점(preemption)이다. 더 높은 우선순위의 조건이 성립하면, 현재 실행 중인 더 낮은 우선순위의 행동이 즉시 선점되어 Halt된다.

시나리오: NavigateToGoal 실행 중 장애물 감지

Tick t:   NavigateToGoal → RUNNING (목표로 주행 중)
Tick t+1: IsObstacleNear → SUCCESS → AvoidObstacle 시작
          NavigateToGoal.halt() ← 선점에 의한 중단

이 선점은 매 Tick의 재평가에 의해 자동으로 발생하며, 별도의 이벤트 전달이나 인터럽트 메커니즘이 필요하지 않다. 행동 트리의 Tick 구조 자체가 선점 메커니즘을 내포하고 있다.

우선순위 역전 방지

ReactiveFallback의 고정 우선순위 체계에서는 우선순위 역전(priority inversion) 현상이 구조적으로 발생하지 않는다. 운영체제의 프로세스 스케줄링에서는 낮은 우선순위 작업이 공유 자원을 점유하여 높은 우선순위 작업의 실행을 방해하는 우선순위 역전이 발생할 수 있으나, ReactiveFallback에서는 상위 자식이 비실패 상태를 반환하면 하위 자식이 Tick조차 되지 않으므로 이러한 역전이 원천적으로 불가능하다.

다만, 상위 자식의 조건 평가에 과도한 시간이 소요되면 전체 Tick 주기가 지연되어 간접적으로 시스템 반응성이 저하될 수 있다. 이를 방지하기 위해 조건 노드는 경량으로 설계하여야 한다.

다중 수준 우선순위의 설계 기준

로봇공학 응용에서 ReactiveFallback의 우선순위 수준을 설계할 때 다음 기준을 적용하라.

우선순위 수준범주예시
최고 (P0)비상 대응E-Stop, 충돌 감지, 하드웨어 장애
높음 (P1)안전 유지장애물 회피, 금지 구역 이탈
중간 (P2)자원 관리배터리 관리, 통신 복구
낮음 (P3)임무 수행목표 이동, 작업 실행
최저 (P4)유휴대기, 탐색, 순찰

이 계층 구조는 안전 → 자원 → 임무 → 유휴의 순서로 우선순위가 감소하며, 안전 관련 조건이 항상 임무 수행보다 우선한다는 원칙을 반영한다.

우선순위 기반 선택의 행동 트리적 장점

  1. 선언적 표현: 우선순위 관계가 자식의 배치 순서로 명시적이고 시각적으로 표현된다. XML 정의만으로 우선순위 체계를 파악할 수 있다.

  2. 모듈성: 새로운 우선순위 수준을 추가하려면 ReactiveFallback에 자식을 삽입하기만 하면 된다. 기존 자식을 수정할 필요가 없다.

  3. 검증 용이성: 각 우선순위 수준의 조건과 행동이 독립적으로 정의되므로, 단위 테스트 시 개별 수준의 동작을 격리하여 검증할 수 있다.

  4. 디버깅 용이성: 행동 트리 시각화 도구에서 현재 어떤 우선순위 수준이 활성 상태인지, 어떤 조건이 성립하여 현재 행동이 선택되었는지를 직관적으로 파악할 수 있다.

XML 정의 예시

<ReactiveFallback>
    <!-- P0: 비상 대응 -->
    <Sequence>
        <IsEmergency />
        <ExecuteEmergencyProtocol />
    </Sequence>
    
    <!-- P1: 장애물 회피 -->
    <Sequence>
        <IsObstacleNear distance="1.0" />
        <AvoidObstacle strategy="dynamic" />
    </Sequence>
    
    <!-- P2: 배터리 관리 -->
    <Sequence>
        <IsBatteryBelow level="20" />
        <ReturnToCharger station="{charging_station}" />
    </Sequence>
    
    <!-- P3: 기본 임무 -->
    <NavigateToGoal goal="{mission_goal}" />
</ReactiveFallback>

자식의 XML 배치 순서가 곧 우선순위이며, 상단에 배치된 자식이 더 높은 우선순위를 가진다.