1292.55 동기 액션 노드의 실행 모델

1. 동기 액션 노드의 정의

동기 액션 노드(synchronous action node)는 tick 함수의 호출과 반환 사이에 행동의 전체 실행이 완결되는 액션 노드이다. 이 노드는 tick을 수신하면 행동을 즉각적으로 수행하고, 행동이 완료될 때까지 tick 함수 내에서 실행을 차단(block)한 후, Success 또는 Failure를 반환한다. 동기 액션 노드는 Running 상태를 반환하지 않으며, 한 번의 tick 내에서 행동의 시작과 완료가 모두 이루어진다 (Faconti, BehaviorTree.CPP Documentation, 2024).

2. 실행 모델의 의미론

동기 액션 노드의 실행 모델은 일반 함수 호출(function call)의 의미론과 동일하다. 상위 노드가 동기 액션 노드에 tick을 전달하면, 해당 tick 함수가 반환될 때까지 상위 노드의 실행이 대기한다. tick 함수가 반환되면 그 반환 상태가 즉시 상위 노드에 전파된다.

function SyncActionNode.tick():
    result = perform_action()    // 행동 수행 (차단)
    if result == success:
        return Success
    else:
        return Failure

이 모델에서 tick 함수의 실행 시간은 행동의 실행 시간과 동일하다. 행동이 1밀리초에 완료되면 tick 함수도 1밀리초 후에 반환되며, 행동이 10초를 소요하면 tick 함수도 10초간 차단된다.

3. 단일 Tick 내 완결성

동기 액션 노드의 핵심 특성은 단일 tick 내 완결성(single-tick completeness)이다. 이 특성은 다음을 의미한다.

특성설명
Running 미반환동기 액션 노드는 Running 상태를 반환하지 않는다
상태 비보존tick 간 내부 상태를 유지할 필요가 없다
단일 콜백onStart만 호출되며 onRunning은 호출되지 않는다
Halt 불필요Running 상태에 진입하지 않으므로 halt 처리가 필요하지 않다

동기 액션 노드는 매 tick마다 독립적으로 실행되며, 이전 tick의 실행 결과가 이후 tick의 실행에 영향을 미치지 않는다. 이 무상태적(stateless) 특성은 동기 액션 노드의 구현을 단순화한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

4. Tick 차단의 영향

동기 액션 노드가 tick 함수 내에서 실행을 차단하는 동안, 행동 트리의 다른 노드는 tick을 수신할 수 없다. 행동 트리의 tick 전파는 단일 스레드에서 순차적으로 수행되므로, 하나의 동기 액션 노드가 장시간 차단되면 전체 행동 트리의 tick 주기가 지연된다.

4.1 반응성 저하

tick 주기가 T이고 동기 액션 노드의 실행 시간이 \Delta t인 경우, 해당 tick의 실제 소요 시간은 T + \Delta t 이상이 된다. \Delta tT에 비해 충분히 작으면 영향이 미미하지만, \Delta t \gg T인 경우 행동 트리의 반응성이 심각하게 저하된다.

예를 들어, tick 주기가 10밀리초인 행동 트리에서 동기 액션 노드가 500밀리초간 차단되면, 해당 tick 동안 행동 트리의 다른 모든 노드(안전 조건 검사, 장애물 감지 등)가 갱신되지 않는다. 이는 로봇의 안전성과 실시간 반응 능력에 직접적인 위험을 초래한다 (Faconti, 2024).

4.2 적정 실행 시간

동기 액션 노드의 실행 시간이 tick 주기의 일정 비율 이내에 완료되어야 행동 트리의 정상적인 동작이 보장된다. 일반적으로 동기 액션 노드의 실행 시간은 tick 주기보다 충분히 짧아야 하며, tick 주기를 초과하는 행동은 비동기 액션 노드로 구현하여야 한다.

5. 동기 액션 노드의 적합한 용도

동기 액션 노드는 다음과 같은 즉각적으로 완료되는 경량 연산에 적합하다.

용도예시예상 실행 시간
변수 설정블랙보드 변수 갱신마이크로초 단위
메시지 발행ROS2 토픽 메시지 단일 발행마이크로초 단위
수학 연산좌표 변환, 거리 계산마이크로초 단위
상태 전환내부 플래그 설정마이크로초 단위
로그 기록이벤트 로깅밀리초 이하

이러한 연산은 tick 주기에 비해 실행 시간이 무시할 수 있을 정도로 짧으므로, 동기 실행 모델의 차단 특성이 행동 트리의 반응성에 영향을 미치지 않는다.

6. BehaviorTree.CPP에서의 구현

BehaviorTree.CPP 라이브러리에서 동기 액션 노드는 SyncActionNode 클래스를 상속하여 구현된다. 이 클래스는 tick() 메서드를 순수 가상 함수로 제공하며, 사용자는 이 메서드를 재정의하여 행동의 구체적인 로직을 구현한다. SyncActionNode는 Running 상태의 반환을 허용하지 않으며, Running이 반환되면 예외를 발생시킨다 (Faconti, 2024).

class MySyncAction : public SyncActionNode {
    NodeStatus tick() override {
        // 행동 수행
        if (action_succeeded)
            return NodeStatus::SUCCESS;
        else
            return NodeStatus::FAILURE;
    }
};

이 구현 제약은 개발자가 의도하지 않게 동기 액션 노드에서 Running을 반환하는 오류를 방지한다.

7. 동기 액션 노드와 조건 노드의 비교

동기 액션 노드와 조건 노드는 모두 Running을 반환하지 않는다는 공통점을 가진다. 그러나 두 노드의 의미론적 역할은 근본적으로 다르다.

속성동기 액션 노드조건 노드
부작용(side effect)있음없음
환경 변경환경을 변경한다환경을 관찰만 한다
실행 목적행동 수행상태 검사
Running 반환불가불가

조건 노드는 환경의 상태를 변경하지 않는 순수 함수(pure function)로서 동작하지만, 동기 액션 노드는 환경에 대한 부작용을 수반한다 (Colledanchise & Ögren, 2018).

8. 로봇 공학에서의 활용

8.1 즉각적 명령 송신

로봇의 하드웨어에 즉각적인 명령을 송신하는 경우에 동기 액션 노드가 활용된다. 예를 들어, LED 점등, 경고음 발생, 비상 정지 신호 송신 등의 행동은 명령 송신 자체가 즉각적으로 완료되므로 동기 실행 모델이 적합하다.

8.2 블랙보드 갱신

행동 트리의 블랙보드(blackboard)에 저장된 공유 변수를 갱신하는 행동은 동기 액션 노드로 구현된다. 목표 위치 설정, 동작 모드 변경, 카운터 증가 등의 블랙보드 조작은 메모리 접근만을 수반하므로 즉각적으로 완료된다.


참고 문헌

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