XML에서의 데코레이터 노드 정의 (Decorator Node Definition in XML)

XML에서의 데코레이터 노드 정의 (Decorator Node Definition in XML)

1. 개요

BehaviorTree.CPP에서 데코레이터 노드는 XML 행동 트리 정의 파일에서 자식 노드를 감싸는 부모 요소(element)로 표현된다. 데코레이터의 매개변수는 XML 속성(attribute)으로 지정되며, 정적 값 또는 블랙보드 키 참조를 통해 동적으로 설정할 수 있다.

2. XML 기본 구문

2.1 데코레이터 + 자식 구조

<DecoratorName parameter1="value1" parameter2="value2">
    <ChildNode parameter="value"/>
</DecoratorName>

데코레이터는 정확히 하나의 자식 요소를 포함한다.

2.2 내장 데코레이터 사용 예시

<root BTCPP_format="4">
    <BehaviorTree ID="MainTree">
        <Sequence>
            <Timeout msec="30000">
                <Action ID="NavigateToPose" goal="{target}"/>
            </Timeout>
            <RetryNode num_attempts="3">
                <Action ID="PickObject"/>
            </RetryNode>
            <Inverter>
                <Condition ID="IsObstacleDetected"/>
            </Inverter>
        </Sequence>
    </BehaviorTree>
</root>

3. 매개변수 지정 방법

3.1 정적 값

<Timeout msec="5000">
    <Action ID="Task"/>
</Timeout>

3.2 블랙보드 키 참조

<Timeout msec="{navigation_timeout}">
    <Action ID="NavigateToPose"/>
</Timeout>

{navigation_timeout}은 블랙보드의 키를 참조하며, 런타임에 해당 키의 값이 사용된다.

3.3 기본값이 있는 매개변수

<Repeat num_cycles="5">  <!-- num_cycles의 기본값은 -1 -->
    <Action ID="PatrolWaypoint"/>
</Repeat>

4. 중첩 데코레이터의 XML 표현

<Timeout msec="60000">
    <RetryNode num_attempts="5">
        <Delay delay_msec="1000">
            <Action ID="ConnectToServer"/>
        </Delay>
    </RetryNode>
</Timeout>

5. 스크립트 속성 기반 데코레이터

BehaviorTree.CPP 4.x에서는 별도의 데코레이터 요소 없이 노드의 속성으로 전제 조건을 지정할 수 있다.

<Action ID="Navigate"
        goal="{target}"
        _skipIf="goal_reached == true"
        _onSuccess="navigation_done = true"/>

6. 커스텀 데코레이터의 XML 사용

팩토리에 등록된 커스텀 데코레이터는 등록 시 지정한 이름으로 XML에서 사용한다.

factory.registerNodeType<CooldownDecorator>("Cooldown");
<Cooldown cooldown_sec="5.0">
    <Action ID="RecoveryAction"/>
</Cooldown>

7. XML 유효성 검증

7.1 단일 자식 제약

데코레이터 요소 내에 복수의 자식이 있으면 파싱 오류가 발생한다.

<!-- 오류: 복수 자식 -->
<Inverter>
    <Condition ID="A"/>
    <Condition ID="B"/>
</Inverter>

7.2 필수 매개변수

필수 매개변수가 누락되면 팩토리가 트리 생성 시 오류를 보고한다.

8. 참고 문헌

  • BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
  • Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.

버전날짜변경 사항
v0.12026-04-05초안 작성