카테고리 없음

Py Tree - blackboard

code911 2025. 3. 18. 20:16

Blackboards (블랙보드)

블랙보드는 행동들이 데이터를 읽고 쓸 수 있는 공간입니다.

블랙보드는 비헤이비어 트리 구현에 반드시 필요한 구성 요소는 아니지만, 트리 내 행동들 간에 데이터를 공유하는 매우 일반적인 메커니즘입니다. 예를 들어, 언리얼 엔진의 블랙보드 설계 노트를 참고할 수 있습니다.

구현 방식은 이를 사용하는 프레임워크의 요구사항에 따라 크게 달라집니다. 가장 간단한 구현은 전역 접근이 가능한 키-값 저장소 형태이며, 더 엄격한 구현은 접근 범위를 지정하거나 행동들 간에 데이터 포트를 연결하는 이차적 그래프를 트리 위에 형성합니다.

*'PyTrees의 선(禪)'*은 빠른 개발을 가능하게 하면서도 모든 마법이 디버깅 목적으로 노출될 만큼 풍부한 기능을 제공하는 것입니다. 블랙보드의 첫 번째 구현은 단순히 사용하기 쉬운 API를 가진 전역 키-값 저장소였지만, 행동들 간의 데이터 공유를 노출하지 않았기 때문에 트리를 검사하거나 시각화하는 데 사용된 도구는 이야기의 절반만 알려주었습니다.

현재 구현은 파일 시스템과 유사한 전략을 채택합니다. 각 클라이언트(이후 행동)는 블랙보드의 키에 대한 읽기/쓰기 접근을 위해 자신을 등록합니다. 이는 권한과 관련된 것이 아니라 블랙보드의 키 사용자를 추적하기 위한 것으로, 디버깅에 매우 유용합니다.

각 행동에 매개변수와 입출력 포트를 가진 이차적 데이터 그래프를 레이어링하는 대안적 접근 방식은 py_trees의 선(禪) 요구 사항에 비해 너무 무겁다고 판단되어 폐기되었습니다. 이는 부분적으로 배선 비용 때문이지만, 트리의 부분 그래프 실행(트리를 대부분의 계산 그래프 프레임워크와 다르게 만드는 기능)으로 인한 복잡성과 즉석에서 서브트리를 동적으로 삽입하고 제거하는 py_trees의 기능을 후퇴시키지 않기 위함입니다.

기존/계획된 기능 목록:

  • [+] 중앙 집중식 키-값 저장소
  • [+] 네임스페이스가 지정된 저장소에 대한 읽기/쓰기 접근이 가능한 클라이언트 연결
  • [+] 키-행동 연관성을 위한 행동과의 통합(디버깅)
  • [+] 클라이언트의 읽기/쓰기 작업을 기록하는 활동 스트림
  • [+] 쓰기를 위한 배타적 잠금
  • [+] 키 재매핑을 위한 프레임워크

블랙보드와의 주요 사용자 인터페이스: Client

블랙보드 클라이언트는 사용자 친화적인 이름을 받아들이거나 이름이 제공되지 않으면 자동으로 생성합니다. 어떤 이름이 선택되든, 클라이언트는 항상 구성 시 생성된 UUID로 고유하게 식별됩니다.

블랙보드 키 등록 및 사용법

블랙보드에 키에 대한 읽기/쓰기 접근을 등록합니다. 참고로, 등록은 초기화가 아닙니다.

네임스페이스 활용

키와 클라이언트는 '/' 문자로 설계된 네임스페이스를 사용할 수 있습니다. 대부분의 메서드는 상대적 또는 절대적 이름의 유연한 표현을 허용합니다.

 

행동과 블랙보드 연결하기

행동은 자동으로 블랙보드에 연결되지 않지만, 행동과 변수 간의 연관성을 추적할 수 있도록 수동으로 하나 이상의 클라이언트를 연결할 수 있습니다. 이는 검사 및 디버깅에 매우 유용합니다.

블랙보드 변수를 사용하는 커스텀 행동 생성:

블랙보드 시각화

행동 트리의 dot 그래프 렌더링(블랙보드 변수 포함):


블랙보드는 트리 내에서 행동들 간에 데이터를 효과적으로 공유하고, 이를 추적하여 디버깅에 활용할 수 있는 강력한 도구입니다.