Chapter 1297. 조건 노드 설계와 구현 (Condition Node Design and Implementation)

Chapter 1297. 조건 노드 설계와 구현 (Condition Node Design and Implementation)

1. 개요

조건 노드(condition node)는 행동 트리에서 환경의 상태, 로봇의 내부 상태, 또는 블랙보드에 저장된 데이터를 평가하여 SUCCESS 또는 FAILURE를 반환하는 리프 노드이다. 조건 노드는 물리적 동작을 수행하지 않으며, 오직 현재 상태에 대한 판정(evaluation)만을 담당한다. 이 특성은 액션 노드와의 핵심적인 차이점이다.

행동 트리에서 조건 노드는 제어 흐름의 분기를 결정하는 핵심 요소이다. Fallback 제어 노드의 첫 번째 자식으로 배치되어 선행 조건(precondition)을 검사하거나, ReactiveSequence 내에서 매 tick마다 환경 변화를 감시하는 역할을 수행한다. Colledanchise와 Ögren(2018)은 조건 노드를 “행동 트리의 감각 기관(sensory organ)“으로 비유하며, 로봇의 인식 결과를 의사 결정 체계에 연결하는 인터페이스로 정의하였다.

2. 조건 노드의 특성

조건 노드는 다음과 같은 특성을 갖는다.

  • 즉시 반환: 조건 노드는 항상 SUCCESS 또는 FAILURE를 즉시 반환하며, RUNNING 상태를 반환하지 않는다. 이는 BehaviorTree.CPP에서 ConditionNode 기반 클래스가 SyncActionNode의 하위 타입으로 설계된 것에 반영되어 있다.
  • 무부작용: 조건 노드는 로봇의 상태를 변경하지 않는다. 환경을 관찰(observe)할 뿐 변경(modify)하지 않는다.
  • 결정론적 평가: 동일한 입력에 대해 동일한 결과를 반환해야 한다. 외부 상태에 의존하는 경우, 해당 시점의 최신 데이터를 기반으로 평가한다.

3. BehaviorTree.CPP에서의 조건 노드

BehaviorTree.CPP 프레임워크에서 조건 노드는 BT::ConditionNode 기반 클래스를 상속하여 구현한다.

class MyCondition : public BT::ConditionNode
{
public:
    MyCondition(const std::string& name,
                const BT::NodeConfiguration& config)
        : BT::ConditionNode(name, config)
    {
    }

    static BT::PortsList providedPorts()
    {
        return {
            BT::InputPort<double>("threshold",
                "판정 임계값")
        };
    }

    BT::NodeStatus tick() override
    {
        double threshold;
        getInput("threshold", threshold);
        // 조건 평가 로직
        return condition_met
            ? BT::NodeStatus::SUCCESS
            : BT::NodeStatus::FAILURE;
    }
};

ConditionNode는 내부적으로 SyncActionNode와 동일한 실행 모델을 따르지만, 의미적으로 “판정“과 “동작“을 구분하여 행동 트리의 가독성과 유지보수성을 향상시킨다.

4. 본 챕터의 구성

본 챕터에서는 조건 노드의 설계와 구현에 관한 다음 주제를 다룬다.

  • 조건 노드의 개념적 정의와 역할
  • 조건 노드와 액션 노드의 차이
  • BehaviorTree.CPP에서의 조건 노드 구현 방법
  • ROS2 토픽, 서비스, 블랙보드 기반 조건 노드
  • 배터리 상태, GPS 품질, 센서 유효성 등 로봇 시스템의 주요 조건 검사
  • 비교 연산, 논리 연산 기반 범용 조건 노드
  • 조건 노드의 테스트 전략과 모범 사례

각 절에서는 ROS2 환경에서의 실제 구현 예시와 함께, 행동 트리 내에서의 활용 패턴을 XML 예시를 통해 제시한다.

5. 참고 문헌

  • Colledanchise, M. and Ögren, P., “Behavior Trees in Robotics and AI: An Introduction,” CRC Press, 2018.
  • Faconti, D. and Contributors, “BehaviorTree.CPP: A C++ library to build Behavior Trees,” GitHub Repository, https://github.com/BehaviorTree/BehaviorTree.CPP.
  • Macenski, S. et al., “The Marathon 2: A Navigation System,” arXiv preprint arXiv:2003.00368, 2020.
  • Iovino, M. et al., “A Survey of Behavior Trees in Robotics and AI,” Robotics and Autonomous Systems, vol. 154, 2022.

버전: 2026-04-04