1292.83 비동기 액션의 Halt 처리

1. 비동기 액션에서 Halt의 특수성

비동기 액션 노드(asynchronous action node)의 halt 처리는 동기 액션 노드에 비해 복잡하다. 비동기 액션 노드는 행동의 실행을 외부 시스템이나 별도 스레드에 위임하므로, halt 시 노드 내부의 상태 정리뿐 아니라 외부에서 진행 중인 행동의 취소와 완료 대기가 필요하다 (Faconti, BehaviorTree.CPP Documentation, 2024).

2. 외부 프로세스 위임 패턴의 Halt

ROS2 액션 서버에 목표를 위임한 비동기 액션 노드의 halt 처리는 다음의 단계를 거친다.

2.1 단계: 취소 요청 송신

외부 액션 서버에 목표 취소(cancel goal) 요청을 송신한다.

2.2 단계: 취소 확인

액션 서버가 취소를 수락하고 행동을 실제로 중단하였는지 확인한다. 네트워크 지연이나 서버 처리 시간에 의해 취소 확인에 시간이 소요될 수 있다.

2.3 단계: 내부 상태 정리

목표 핸들, 통신 자원, 내부 변수 등을 정리한다.

class ROS2ActionNode : StatefulActionNode {
    goal_handle

    onHalted():
        if goal_handle is active:
            cancel_result = action_client.cancel_goal(goal_handle)
            // 취소 확인은 동기적 또는 비동기적으로 처리
        goal_handle = null
}

3. 별도 스레드 실행 패턴의 Halt

BehaviorTree.CPP의 ThreadedAction 패턴에서 행동은 별도의 스레드에서 실행된다. halt 시에는 스레드의 중단과 종료를 처리하여야 한다.

3.1 스레드 중단 메커니즘

별도 스레드에서 실행 중인 행동을 중단하기 위해, 중단 플래그(halt flag)를 사용하는 패턴이 일반적이다.

class ThreadedActionNode {
    halt_requested = false  // 중단 플래그

    // 별도 스레드에서 실행
    thread_function():
        while not halt_requested:
            perform_work_step()
        // 중단 처리

    halt():
        halt_requested = true
        wait_for_thread_completion()  // 스레드 종료 대기
        reset_state()
}

스레드 내의 행동 로직은 주기적으로 halt_requested 플래그를 확인하고, 플래그가 설정되면 현재 작업을 안전하게 종료한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

4. Halt 처리의 시간 제약

halt는 동기적으로 처리되므로, onHalted의 실행 시간이 행동 트리의 tick 주기에 영향을 미친다. onHalted에서 외부 시스템의 취소 완료를 동기적으로 대기하면, 대기 시간만큼 tick 주기가 지연된다.

처리 방식장점단점
동기적 취소 대기취소 완료 보장tick 주기 지연
취소 요청만 송신 (응답 미대기)즉시 반환취소 완료 미보장
시간 제한부 대기제한된 지연시간 초과 시 취소 미완료

실무에서는 취소 요청을 송신하고 응답을 대기하지 않는 방식이 일반적이다. 외부 시스템의 취소 완료는 해당 시스템이 자체적으로 처리하도록 위임한다 (Faconti, 2024).

5. 안전한 Halt를 위한 설계 원칙

원칙설명
취소 가능성 보장외부에 위임된 행동은 반드시 취소 가능하도록 설계
스레드 안전성halt와 행동 실행이 다른 스레드에서 동시에 접근하는 데이터에 대한 동기화
유한 시간 완료onHalted는 유한 시간 내에 반환되어야 함
멱등성halt가 여러 번 호출되어도 안전하게 동작

6. 로봇 공학에서의 의의

비동기 액션의 halt 처리는 로봇의 물리적 행동 중단과 직결된다. 이동 중인 로봇의 정지, 매니퓰레이션 작업의 중단, 센서 스캔의 취소 등이 halt에 의해 수행되며, 이 처리가 올바르게 구현되지 않으면 로봇이 의도하지 않은 행동을 계속 수행하는 위험이 발생한다 (Colledanchise & Ögren, 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/