1292.73 onStart 콜백의 역할
1. onStart 콜백의 정의
onStart 콜백은 행동 트리의 상태 보존 액션 노드(StatefulActionNode)가 Idle 상태에서 처음 tick을 수신할 때 호출되는 생명주기 콜백이다. 이 콜백은 행동의 초기화(initialization) 단계에 해당하며, 행동 수행에 필요한 준비 작업을 수행하고 행동의 첫 번째 반환 상태를 결정한다 (Faconti, BehaviorTree.CPP Documentation, 2024).
2. 호출 시점
onStart가 호출되는 시점은 다음의 조건이 동시에 충족될 때이다.
| 조건 | 설명 |
|---|---|
| 현재 상태가 Idle | 노드가 비활성 상태에 있다 |
| tick 수신 | 상위 노드로부터 tick이 전달된다 |
노드가 Running 상태에서 tick을 수신하면 onStart가 아닌 onRunning이 호출된다. onStart는 노드가 Idle에서 활성화되는 최초의 tick에서만 호출되며, 이후의 tick에서는 호출되지 않는다.
3. 수행하는 작업
onStart 콜백에서 수행하여야 하는 주요 작업은 다음과 같다.
3.1 내부 상태 초기화
노드의 멤버 변수를 초기 값으로 설정한다. 반복 카운터, 진행 단계 인덱스, 타이머, 중간 결과 등의 내부 상태가 이 시점에서 초기화된다.
3.2 블랙보드 입력 읽기
행동에 필요한 입력 데이터를 블랙보드로부터 읽는다. 목표 좌표, 동작 파라미터, 임계값 등의 입력이 이 시점에서 획득된다. 입력 데이터를 onStart에서 읽고 내부 변수에 저장하면, 행동 수행 중 블랙보드 값이 변경되더라도 행동이 일관된 입력으로 수행됨을 보장할 수 있다.
3.3 외부 자원 할당
행동 수행에 필요한 외부 자원을 할당한다. ROS2 액션 클라이언트의 초기화, 서비스 클라이언트의 생성, 파일 핸들의 개설 등이 이 시점에서 수행된다.
3.4 행동 시작
행동의 실질적인 시작을 수행한다. ROS2 액션 목표 송신, 모터 구동 명령 발행, 계산 프로세스 시작 등의 행동 개시가 이 시점에서 이루어진다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).
4. 반환 상태
onStart는 Success, Failure, Running 중 하나를 반환한다.
| 반환 상태 | 의미 | 후속 동작 |
|---|---|---|
| Success | 행동이 즉각적으로 완료 | 노드 Idle로 복귀 |
| Failure | 초기화 실패 또는 행동 즉시 실패 | 노드 Idle로 복귀 |
| Running | 행동이 시작되었으나 완료되지 않음 | 다음 tick에서 onRunning 호출 |
대부분의 비동기 행동에서 onStart는 행동을 시작하고 Running을 반환한다. 행동이 즉각적으로 완료 가능한 경우에는 Success 또는 Failure를 반환할 수 있다 (Faconti, 2024).
5. 구현 예시
class NavigateToGoal : StatefulActionNode {
goal_pose // 목표 위치
action_client // ROS2 액션 클라이언트
onStart():
goal_pose = blackboard.get("target_pose") // 입력 읽기
if goal_pose is invalid:
return Failure // 초기화 실패
action_client.send_goal(goal_pose) // 행동 시작
return Running // 비동기 실행 개시
}
이 예시에서 onStart는 블랙보드에서 목표 위치를 읽고, 유효성을 검사한 후, 액션 서버에 목표를 송신하고 Running을 반환한다.
6. onStart에서의 오류 처리
onStart에서 초기화가 실패하는 경우(잘못된 입력, 자원 할당 실패 등), Failure를 반환하여 상위 노드에 실패를 전달하여야 한다. 이 경우 노드는 Running 상태에 진입하지 않으므로, onHalted가 호출될 가능성이 없다. 따라서 onStart에서 할당한 자원은 Failure 반환 전에 정리하여야 한다.
7. 로봇 공학에서의 의의
onStart 콜백은 로봇의 물리적 행동이 시작되는 시점을 명확히 정의한다. 모터 구동 개시, 센서 수집 시작, 통신 세션 개설 등의 물리적 초기화가 이 시점에서 수행됨으로써, 행동의 시작과 준비가 명확히 분리되고, 자원의 할당 시점이 예측 가능해진다 (Faconti, 2024).
참고 문헌
- 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/