1292.102 이벤트 주도 실행 의미론

1. 이벤트 주도 실행 의미론의 정의

이벤트 주도 실행 의미론(event-driven execution semantics)이란, 행동 트리의 tick이 고정된 주기에 따라 수행되는 것이 아니라, 특정 이벤트의 발생에 의해 촉발되어 수행되는 실행 모델이다. 이벤트 주도 실행에서 행동 트리는 관련 이벤트가 발생할 때에만 tick되며, 이벤트가 없는 기간에는 트리의 평가가 수행되지 않는다 (Faconti, BehaviorTree.CPP Documentation, 2024).

2. 주기적 실행과 이벤트 주도 실행의 비교

전통적인 행동 트리의 실행은 고정된 주기(예: 10Hz, 100Hz)로 tick을 반복하는 주기적 실행(periodic execution) 모델을 따른다. 이벤트 주도 실행은 이와 대비되는 패러다임이다.

비교 항목주기적 실행이벤트 주도 실행
Tick 촉발 조건고정 주기의 타이머이벤트 발생
Tick 빈도일정 (설정된 주파수)가변 (이벤트 빈도에 비례)
유휴 시 CPU 사용트리 전체를 반복 평가평가 없음 (유휴 대기)
응답 지연최대 1 tick 주기이벤트 처리 지연만큼
구현 복잡도낮음높음 (이벤트 관리 필요)

3. 이벤트 주도 실행의 동작 원리

이벤트 주도 실행에서 행동 트리는 이벤트 루프(event loop)와 결합되어 동작한다. 이벤트 루프는 이벤트 큐에서 이벤트를 수신하고, 해당 이벤트와 관련된 트리의 부분 또는 전체를 tick한다.

function event_driven_execution(tree):
    while not shutdown:
        event = wait_for_event()    // 블로킹 대기

        // 이벤트에 의해 tick 촉발
        if event.requires_full_tick:
            tree.root.tick()
        else:
            // 관련 서브트리만 tick (선택적 최적화)
            affected_subtree = find_affected_subtree(event)
            affected_subtree.tick()

4. 이벤트의 유형

행동 트리의 이벤트 주도 실행에서 tick을 촉발하는 이벤트는 다음과 같이 분류된다.

이벤트 유형설명예시
상태 변경 이벤트블랙보드 값의 변경목표 좌표 갱신, 장애물 감지
완료 이벤트비동기 작업의 완료네비게이션 완료, 파지 완료
외부 입력 이벤트센서 데이터 수신, 사용자 명령LiDAR 데이터 갱신, 정지 명령
타이머 이벤트지정된 시간의 경과타임아웃, 주기적 점검
오류 이벤트시스템 오류 발생통신 실패, 하드웨어 오류

5. 블랙보드 이벤트와 반응형 실행

BehaviorTree.CPP 4.x에서는 블랙보드 항목의 변경을 감지하는 이벤트 메커니즘을 제공한다. 노드는 블랙보드의 특정 키에 대한 변경 리스너를 등록할 수 있으며, 해당 키의 값이 변경되면 이벤트가 발생하여 관련 서브트리의 재평가를 촉발한다 (Faconti, 2024).

function setup_blackboard_event(tree, key):
    tree.blackboard.on_change(key, callback):
        // 블랙보드 값 변경 시 트리 tick 촉발
        tree.root.tick()

6. 이벤트 주도 실행과 조건부 tick

이벤트 주도 실행의 핵심 최적화는 조건부 tick(conditional tick)이다. 이벤트에 의해 영향을 받는 노드만을 선택적으로 tick함으로써, 불필요한 노드 평가를 완전히 제거할 수 있다.

Fallback
 ├─ Sequence
 │    ├─ Condition [battery_ok]     ← battery 이벤트에 반응
 │    └─ Action [Navigate]
 └─ Action [ReturnToBase]

battery 값이 변경되는 이벤트가 발생하면 battery_ok 조건 노드를 포함하는 서브트리만 재평가하면 되며, battery와 무관한 서브트리의 평가는 생략된다.

7. 이벤트 주도 실행의 구현 고려 사항

7.1 이벤트 우선순위

다수의 이벤트가 동시에 발생하는 경우, 이벤트의 우선순위에 따라 처리 순서를 결정해야 한다. 안전 관련 이벤트는 최우선으로 처리되어야 한다.

7.2 이벤트 병합

동일한 블랙보드 키에 대한 다수의 변경 이벤트가 짧은 시간 내에 발생하는 경우, 이벤트를 병합(coalescing)하여 불필요한 다중 tick을 방지할 수 있다.

7.3 이벤트 누락 방지

이벤트가 처리되기 전에 새로운 이벤트가 발생하는 경우, 이벤트 큐의 관리를 통해 이벤트 누락을 방지해야 한다.

고려 사항해결 방안
이벤트 폭주이벤트 병합, 디바운싱(debouncing)
처리 순서 보장우선순위 큐 사용
이벤트 누락큐 기반 이벤트 버퍼링
결정론 보장이벤트 처리 순서의 결정론적 정의

8. 이벤트 주도 실행의 장점

장점설명
계산 효율변경이 없는 기간에 CPU 자원을 소비하지 않음
응답성이벤트 발생 즉시 반응 가능
확장성트리의 크기가 증가해도 이벤트당 비용 일정
전력 효율유휴 시 대기 상태로 전력 소비 감소

9. 로봇 공학에서의 의의

이벤트 주도 실행 의미론은 자원이 제한된 로봇 시스템에서 행동 트리의 실행 효율을 극대화하는 수단이다. 주기적 실행에서는 환경 변화가 없더라도 매 tick에서 전체 트리를 평가해야 하나, 이벤트 주도 실행에서는 실제로 변경이 발생한 경우에만 필요한 부분을 평가한다. 이는 배터리 구동 로봇, 다수의 행동 트리를 동시에 실행하는 다중 로봇 시스템 등에서 특히 유용하다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).


참고 문헌

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