1296.1 액션 노드의 개념과 역할

1. 행동 트리에서의 액션 노드 위치

행동 트리(Behavior Tree)는 내부 노드(internal node)와 리프 노드(leaf node)로 구성된다. 내부 노드는 제어 노드(Sequence, Fallback, Parallel 등)와 데코레이터 노드로, 트리의 실행 흐름을 결정한다. 리프 노드는 액션 노드(Action Node)와 조건 노드(Condition Node)로, 트리의 실질적 기능을 수행한다. 이 중 액션 노드는 로봇이 환경에 대해 수행하는 구체적 행동을 캡슐화하는 노드이다.

Colledanchise와 Ögren(2018)의 형식적 정의에 따르면, 행동 트리의 리프 노드는 조건(Condition)과 액션(Action)으로 분류되며, 조건은 환경의 상태를 확인하는 읽기 전용 연산이고, 액션은 환경의 상태를 변경하는 쓰기 연산이다. 이 구분은 행동 트리의 모듈성과 재사용성의 근간을 이룬다.

2. 액션 노드의 정의

액션 노드는 다음과 같이 정의한다.

액션 노드는 행동 트리의 리프 노드로서, 로봇 시스템의 구체적 행동(모터 구동, 센서 데이터 수집, 통신 메시지 전송, 내부 상태 갱신 등)을 캡슐화하고, 해당 행동의 수행 결과를 SUCCESS, FAILURE, 또는 RUNNING의 상태로 반환하는 실행 단위이다.

액션 노드의 핵심 특성은 다음과 같다.

  1. 실행성(Executability): 액션 노드는 호출 시 실제 행동을 수행한다. 조건 노드가 환경을 관찰만 하는 것과 달리, 액션 노드는 환경이나 시스템의 상태를 능동적으로 변경할 수 있다.

  2. 캡슐화(Encapsulation): 행동의 구현 세부 사항은 액션 노드 내부에 은닉되며, 트리의 다른 노드는 액션 노드의 인터페이스(포트와 반환 상태)만을 통해 상호 작용한다.

  3. 상태 반환(Status Return): 액션 노드는 Tick을 받으면 SUCCESS(행동 완료), FAILURE(행동 실패), 또는 RUNNING(행동 진행 중)을 반환한다. 이 반환 상태는 부모 제어 노드의 실행 흐름 결정에 직접 사용된다.

3. 액션 노드의 역할

3.1 로봇 시스템과의 인터페이스

액션 노드는 행동 트리의 의사 결정 계층과 로봇 하드웨어/소프트웨어 시스템 사이의 인터페이스이다. 행동 트리의 제어 노드가 “무엇을 할 것인가“를 결정하면, 액션 노드가 “어떻게 할 것인가“를 실행한다.

[제어 노드 계층]     ←→     [액션 노드]     ←→     [로봇 시스템]
  의사 결정                   실행 인터페이스          하드웨어/소프트웨어

ROS2 기반 시스템에서 액션 노드는 ROS2 액션 클라이언트, 서비스 클라이언트, 토픽 퍼블리셔/서브스크라이버 등을 통해 로봇 시스템의 각 모듈과 통신한다.

3.2 행동의 원자적 단위

액션 노드는 행동 트리에서 분해 불가능한 최소 행동 단위이다. 복합적인 행동(예: “물체를 집어 목표 위치에 놓기”)은 다수의 액션 노드(접근, 파지, 이동, 배치)를 제어 노드로 조합하여 구성한다. 각 액션 노드가 단일 행동만을 수행하도록 설계하면, 행동의 조합과 재구성이 용이해진다.

3.3 비동기 실행의 관리

로봇의 행동은 대부분 시간이 소요되는 비동기 작업이다. 모터를 목표 위치로 이동시키거나, 경로를 추종하거나, 이미지를 처리하는 데에는 수십 밀리초에서 수 분의 시간이 소요된다. 액션 노드는 이러한 비동기 작업의 시작, 진행 상태 확인, 완료 판정, 취소 처리를 관리한다. RUNNING 상태의 반환은 “행동이 아직 진행 중이며 후속 Tick에서 다시 확인하여야 한다“는 것을 의미한다.

3.4 오류 격리

액션 노드는 행동 수행 중 발생하는 오류를 FAILURE 상태로 변환하여 상위 트리에 전파한다. 제어 노드는 FAILURE를 받으면 Fallback에 의한 대안 행동 실행, 복구 절차 실행 등의 결함 대응 전략을 적용한다. 이로써 개별 행동의 실패가 전체 시스템의 실패로 확산되지 않도록 격리한다.

4. 조건 노드와의 구분

액션 노드와 조건 노드의 핵심적 차이를 정리한다.

특성액션 노드조건 노드
환경 영향환경의 상태를 변경할 수 있음환경을 관찰만 함 (읽기 전용)
RUNNING 반환허용됨 (비동기 작업)허용되지 않음 (즉시 완료)
실행 시간단일 Tick ~ 수 분단일 Tick 내 완료
부작용존재함 (모터 구동 등)없음 (순수 판별)
전형적 예시NavigateToGoal, GripObjectIsBatteryLow, IsLocalized

이 구분은 행동 트리의 설계에서 각 리프 노드의 적절한 유형을 선택하는 기준이 된다.

5. 학술적 배경

행동 트리의 액션 노드 개념은 게임 인공지능에서 유래하였다. Isla(2005)가 Halo 2의 AI 시스템에서 행동 트리를 처음 사용한 이후, Champandard(2007), Millington과 Funge(2009) 등이 이론적 체계를 발전시켰다. 로봇공학에의 적용은 Marzinotto 등(2014)의 “Towards a Unified Behavior Trees Framework for Robot Control”, Colledanchise와 Ögren(2018)의 “Behavior Trees in Robotics and AI: An Introduction” 등에서 체계적으로 다루어졌다. BehaviorTree.CPP 라이브러리(Faconti, 2018~)는 이러한 학술적 성과를 C++ 구현으로 구체화한 것이다.