1292.90 노드 상태의 메모리 관리
1. 노드 상태 메모리의 정의
노드 상태의 메모리 관리란, 행동 트리의 각 노드가 유지하는 반환 상태(node status)와 내부 실행 상태의 저장, 갱신, 초기화를 체계적으로 수행하는 것이다. 노드 상태는 tick 간에 보존되어야 하며, 행동의 완료 또는 halt 시 적절히 초기화되어야 한다 (Faconti, BehaviorTree.CPP Documentation, 2024).
2. 반환 상태의 저장
각 노드는 자신의 현재 반환 상태를 멤버 변수로 저장한다. 이 상태는 Idle, Running, Success, Failure 중 하나이며, 다음의 시점에서 갱신된다.
| 갱신 시점 | 이전 상태 | 새 상태 | 갱신 주체 |
|---|---|---|---|
| 최초 tick 수신 | Idle | Running/Success/Failure | tick 함수 |
| 후속 tick 수신 | Running | Running/Success/Failure | tick 함수 |
| 행동 완료 | Success/Failure | Idle | 행동 트리 엔진 |
| halt 수신 | Running | Idle | halt 함수 |
3. 상태 전이의 일관성
노드 상태의 전이는 정해진 규칙을 따르며, 허용되지 않는 전이는 발생하지 않는다.
| 현재 상태 | 허용 전이 | 금지 전이 |
|---|---|---|
| Idle | Running, Success, Failure | (없음) |
| Running | Running, Success, Failure, Idle(halt) | (없음) |
| Success | Idle | Running, Failure |
| Failure | Idle | Running, Success |
Success 또는 Failure에서 직접 Running으로 전이하는 것은 허용되지 않는다. 노드는 반드시 Idle 상태를 거쳐 다시 활성화된다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).
4. 내부 상태의 관리
상태 보존 액션 노드의 내부 상태(멤버 변수)는 다음의 생명주기로 관리된다.
- 초기화: onStart에서 초기 값 설정
- 갱신: onRunning에서 진행 상태 반영
- 정리: 행동 완료 시 또는 onHalted에서 정리
내부 상태의 관리가 올바르게 수행되지 않으면, 이전 실행의 잔여 상태가 다음 실행에 영향을 미치는 상태 오염(state contamination)이 발생할 수 있다.
5. 상태 초기화의 시점
노드의 반환 상태는 다음의 시점에서 Idle로 초기화된다.
- 행동 완료 시: Success 또는 Failure 반환 후 자동 초기화
- halt 수신 시: halt 처리 후 Idle로 복귀
- 트리 재시작 시: 트리 전체가 초기화될 때
6. 메모리 효율성
노드 상태의 저장에 소요되는 메모리는 노드당 수 바이트에 불과하다. 반환 상태는 열거형(enum)으로 표현되며, 내부 상태의 크기는 노드의 구현에 의존한다. 수천 개의 노드를 가진 행동 트리에서도 상태 관리에 소요되는 메모리는 미미하다 (Faconti, 2024).
7. 로봇 공학에서의 의의
노드 상태의 일관된 메모리 관리는 행동 트리의 반복적 실행에서 예측 가능한 동작을 보장한다. 상태 초기화가 올바르게 수행되면, 동일한 트리가 반복 실행될 때마다 동일한 초기 조건에서 시작함이 보장된다 (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/