1294.66 안전 위반 시 즉각 반응 패턴

1. 즉각 반응 패턴의 정의

안전 위반 시 즉각 반응 패턴(Immediate Response to Safety Violation Pattern)은 ReactiveSequence의 매 Tick 재평가 특성을 활용하여, 안전 조건이 위반되는 즉시 진행 중인 모든 작업을 Halt하고 사전에 정의된 비상 대응 행동을 자동으로 실행하는 설계 패턴이다. 이 패턴은 안전 위반의 감지와 대응을 단일 Tick 내에서 처리하여, 위반 감지에서 대응까지의 지연 시간을 최소화한다(Colledanchise & Ogren, 2018).

2. 기본 구조

2.1 감지-중단-대응 3단계 구조

<Fallback>
    <!-- 정상 운영: 안전 조건 감시 하에 임무 수행 -->
    <ReactiveSequence>
        <Condition ID="IsSafe"/>
        <SubTree ID="NormalMission"/>
    </ReactiveSequence>
    <!-- 즉각 대응: 안전 위반 시 실행 -->
    <Action ID="EmergencyResponse"/>
</Fallback>

이 구조의 동작 원리는 다음과 같다:

  1. 감지: ReactiveSequence가 매 Tick마다 IsSafe를 재평가한다.
  2. 중단: IsSafe가 FAILURE를 반환하면 NormalMission이 즉시 Halt된다.
  3. 대응: ReactiveSequence 전체가 FAILURE를 반환하고, 외부 Fallback이 EmergencyResponse를 실행한다.

3. 동작 흐름의 상세 분석

3.1 정상 운영에서 안전 위반까지

Tick 1: IsSafe→S, NormalMission→R  → Fallback: RUNNING (정상 운영)
Tick 2: IsSafe→S, NormalMission→R  → Fallback: RUNNING (정상 운영)
Tick 3: IsSafe→F                   → ReactiveSequence: FAILURE
        NormalMission→Halt          (즉시 중단)
        EmergencyResponse→R         → Fallback: RUNNING (비상 대응)
Tick 4: IsSafe→F                   → ReactiveSequence: FAILURE
        EmergencyResponse→R         → Fallback: RUNNING (대응 진행)
Tick 5: IsSafe→F                   → ReactiveSequence: FAILURE
        EmergencyResponse→S         → Fallback: SUCCESS (대응 완료)

Tick 3에서 안전 위반이 감지되면, 동일 Tick 내에서 NormalMission의 Halt와 EmergencyResponse의 시작이 모두 이루어진다.

3.2 안전 복구 시 정상 운영 복귀

ReactiveFallback을 사용하면, 비상 대응 중에도 안전 상태가 복구되었는지 매 Tick 감시할 수 있다.

<ReactiveFallback>
    <ReactiveSequence>
        <Condition ID="IsSafe"/>
        <SubTree ID="NormalMission"/>
    </ReactiveSequence>
    <Action ID="EmergencyResponse"/>
</ReactiveFallback>
Tick 3: IsSafe→F → EmergencyResponse→R    (비상 대응 시작)
Tick 4: IsSafe→F → EmergencyResponse→R    (대응 진행)
Tick 5: IsSafe→S → NormalMission→R        (EmergencyResponse Halt, 정상 복귀)
        EmergencyResponse→Halt

ReactiveFallback은 매 Tick마다 첫 번째 자식부터 재평가하므로, 안전 상태가 복구되면 비상 대응을 중단하고 정상 운영으로 즉시 전환한다.

4. 다중 안전 위반 유형별 대응

4.1 위반 유형에 따른 분기 대응

<Fallback>
    <!-- 정상 운영 -->
    <ReactiveSequence>
        <Condition ID="IsNotEmergency"/>
        <Condition ID="IsBatteryOK"/>
        <Condition ID="IsTemperatureNormal"/>
        <SubTree ID="NormalMission"/>
    </ReactiveSequence>
    <!-- 위반 유형별 대응 -->
    <Fallback>
        <Sequence>
            <Condition ID="IsEmergency"/>
            <Action ID="EmergencyStop"/>
        </Sequence>
        <Sequence>
            <Condition ID="IsBatteryLow"/>
            <Action ID="ReturnToCharge"/>
        </Sequence>
        <Sequence>
            <Condition ID="IsOverheated"/>
            <Action ID="CooldownAndWait"/>
        </Sequence>
        <Action ID="GeneralSafeStop"/>
    </Fallback>
</Fallback>

이 구조는 안전 위반의 원인에 따라 적절한 대응 행동을 선택한다. 비상 상황이면 즉시 정지하고, 배터리 부족이면 충전소로 복귀하며, 과열이면 냉각 후 대기한다. 어떤 유형에도 해당하지 않으면 일반 안전 정지를 수행한다.

4.2 심각도 기반 단계적 대응

<Fallback>
    <ReactiveSequence>
        <Condition ID="IsFullySafe"/>
        <SubTree ID="NormalMission"/>
    </ReactiveSequence>
    <!-- 경미한 위반: 기능 축소 운영 -->
    <ReactiveSequence>
        <Condition ID="IsNotCritical"/>
        <SubTree ID="DegradedMission"/>
    </ReactiveSequence>
    <!-- 심각한 위반: 비상 대응 -->
    <Action ID="EmergencyStop"/>
</Fallback>
정상 상태:     IsFullySafe→S → NormalMission 수행
경미한 위반:   IsFullySafe→F, IsNotCritical→S → DegradedMission 수행
심각한 위반:   IsFullySafe→F, IsNotCritical→F → EmergencyStop 실행

이 구조는 점진적 퇴화(Graceful Degradation) 전략을 구현한다. 안전 위반의 심각도에 따라 완전한 정상 운영, 기능 축소 운영, 비상 정지의 3단계로 대응한다.

5. Halt 메커니즘과 즉각 반응

5.1 Halt의 역할

안전 위반이 감지되면 ReactiveSequence는 RUNNING 상태의 자식 노드에 halt() 메서드를 호출한다. 이 과정에서 다음이 보장되어야 한다:

  1. 상태 정리: 진행 중인 모터 명령 취소, 통신 중단 등
  2. 안전 상태 전이: 액추에이터를 안전한 위치 또는 상태로 전환
  3. 자원 해제: 점유한 자원을 적절히 반환
  4. 즉시 완료: halt() 메서드는 블로킹 없이 즉시 반환해야 한다

5.2 halt() 구현의 중요성

class SafeAction : public BT::StatefulActionNode {
public:
    void onHalted() override {
        // 모터 즉시 정지
        motor_controller_.emergencyStop();
        // 안전 상태로 전이
        setOutput("status", "halted_safely");
    }
};

onHalted() 메서드가 적절히 구현되지 않으면, 안전 위반이 감지되더라도 물리적 행동이 즉시 중단되지 않을 수 있다. 따라서 안전 우선 패턴에서 사용되는 모든 액션 노드는 반드시 안전한 halt() 동작을 구현해야 한다(Faconti, 2022).

6. 로봇 공학에서의 적용 사례

6.1 사례 1: 협동 로봇의 인체 감지 대응

<Fallback>
    <ReactiveSequence>
        <Condition ID="IsHumanDistanceSafe"/>
        <Condition ID="IsForceWithinLimit"/>
        <Action ID="CollaborativeTask"/>
    </ReactiveSequence>
    <Fallback>
        <Sequence>
            <Condition ID="IsHumanTooClose"/>
            <Action ID="ReduceSpeedAndContinue"/>
        </Sequence>
        <Sequence>
            <Condition ID="IsContactDetected"/>
            <Action ID="ImmediateStop"/>
        </Sequence>
        <Action ID="SafeRetract"/>
    </Fallback>
</Fallback>

사람이 가까이 접근하면 속도를 줄이고, 접촉이 감지되면 즉시 정지하며, 그 외의 안전 위반 시에는 안전 위치로 후퇴한다.

6.2 사례 2: 자율 주행 로봇의 장애물 긴급 대응

<Fallback>
    <ReactiveSequence>
        <Condition ID="IsPathClear"/>
        <Condition ID="IsSensorHealthy"/>
        <Action ID="FollowPath"/>
    </ReactiveSequence>
    <Fallback>
        <Sequence>
            <Condition ID="IsObstacleDetected"/>
            <Action ID="EmergencyBrakeAndReplan"/>
        </Sequence>
        <Sequence>
            <Condition ID="IsSensorFailed"/>
            <Action ID="StopAndRequestHelp"/>
        </Sequence>
        <Action ID="SafeStop"/>
    </Fallback>
</Fallback>

6.3 사례 3: 수술 로봇의 이상 감지 대응

<Fallback>
    <ReactiveSequence>
        <Condition ID="IsVitalSignStable"/>
        <Condition ID="IsInstrumentCalibrated"/>
        <Condition ID="IsForceWithinSurgicalLimit"/>
        <Action ID="PerformSurgicalProcedure"/>
    </ReactiveSequence>
    <Fallback>
        <Sequence>
            <Condition ID="IsForceExcessive"/>
            <Action ID="RetractInstrument"/>
        </Sequence>
        <Sequence>
            <Condition ID="IsCalibrationLost"/>
            <Action ID="PauseAndRecalibrate"/>
        </Sequence>
        <Action ID="EmergencyWithdraw"/>
    </Fallback>
</Fallback>

수술 중 과도한 힘이 감지되면 기구를 후퇴시키고, 교정이 상실되면 일시 정지 후 재교정하며, 그 외의 이상에서는 비상 철수한다.

7. 즉각 반응 패턴의 설계 원칙

  1. 단일 Tick 내 대응: 안전 위반의 감지와 대응 행동의 시작이 동일 Tick 내에서 이루어져야 한다. 감지와 대응 사이에 지연 Tick이 존재하면 안전 보장이 훼손된다.

  2. halt()의 완전한 구현: 안전 감시 하에 수행되는 모든 액션 노드는 halt() 메서드에서 물리적 행동을 즉시 안전하게 중단해야 한다.

  3. 대응 행동의 완결성: 비상 대응 행동은 외부 조건에 의존하지 않고 독립적으로 완료될 수 있어야 한다.

  4. 최후 수단의 포함: 대응 행동의 Fallback 체인 마지막에 항상 성공하는 안전 행동(비상 정지 등)을 배치하여, 모든 대응이 실패하는 상황을 방지한다.

  5. 점진적 퇴화의 고려: 가능한 경우, 즉시 정지보다는 심각도에 따른 단계적 대응을 설계하여 시스템의 가용성을 최대화한다(Colledanchise & Ogren, 2018).


참고 문헌

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