← Docs hub

Booster T2와 SKIX 연동 설계

결론

namuh의 Android 실행 구조를 T2의 Ubuntu 환경으로 옮길 필요는 없다. 두 제품은 각자의 운영체제와 제조사 실행기를 유지하고, 기능 명세·작업 요청·상태·정책 요구·완료 근거만 공통 계약으로 맞추는 구성이 적합하다.

공통으로 맞출 것        Capability · Task · Workflow · State · Evidence · Reason
Android에 남길 것       AAR · Manager · Binder/AIDL · DeviceAgent · Android 제품 기능
T2에 남길 것            Booster Service · Booster SDK · ROS 2/DDS · 모터·센서 안전 제어

Booster SDK는 SKIX를 대체하는 상위 프레임워크가 아니라 T2 기능을 실행하는 공급자다. SKIX는 어떤 기능을 언제 누구에게 맡길지 관리하고, T2는 로봇 내부 동작과 즉시 안전 판단을 소유한다.

SKIX 공용 API를 ROS 2 Topic·Service·Action 자체로 정의하지 않는다. SKIX에는 제조사와 통신 방식에 독립적인 Robot Provider 계약을 두고, ROS 2와 Booster SDK는 그 계약을 구현하는 Adapter로 사용한다. 이 경계가 있어야 Booster가 아닌 로봇을 연결해도 상위 앱·제품 정책·TaskManager 계약을 유지할 수 있다.

상태 표기

1. T2에서 공개된 실행 구조

T2는 31자유도 휴머노이드 플랫폼이며, Education 모델은 ARM 기반 연산 장치, Pro 모델은 NVIDIA Jetson Thor T5000을 사용한다. 카메라·마이크 배열·스피커·IMU가 기본 사양에 포함되고 손 또는 그리퍼는 선택 구성이다.

공개 개발 구조는 세 층으로 읽는 것이 정확하다.

층 공개 인터페이스 주 용도 SKIX에서의 위치
고수준 로봇 기능 Booster Robotics SDK의 RPC Client, BoosterOS Python SDK 보행, 자세, 동작, 음향, 카메라·Vision 등 의미 단위 기능 T2 Domain Adapter가 우선 사용
연속 상태·저수준 제어 ROS 2/DDS Topic IMU, 관절, odometry, robot state와 고주기 제어 State Adapter 또는 제한된 전문가 기능
로봇 내 앱 실행 Booster Agent와 .agent 패키지 로봇 안에서 프로세스·UI·설정·리소스 운영 선택적 배포·운영 Host

T2 공개 소프트웨어 구조

Booster 공식 구조에서는 ROS 2 응용 프로그램은 ROS 2 DDS를 사용하고, 비 ROS 응용 프로그램은 Booster Robotics SDK를 사용한다. 두 경로 모두 로봇의 같은 서비스 계층으로 연결된다. 따라서 모든 기능을 ROS 2 Topic으로 다시 포장하기보다, 의미 단위 기능은 고수준 SDK를 우선하고 고주기 관측만 DDS로 받는 것이 안정적이다.

1.1 운영체제와 ROS 2의 관계

T2를 ROS 기반 운영체제라고 부르면 계층이 섞인다. 공개 문서로 확인되는 구조는 다음과 같다.

계층 T2에서의 역할
Ubuntu/Linux 프로세스, 파일, 네트워크, 장치와 기본 운영 환경
Booster Service 로봇 기능과 상태를 제공하는 제조사 서비스 계층
ROS 2/DDS Topic 중심 상태 스트림과 저수준 인터페이스를 연결하는 미들웨어
Booster C++/Python SDK Booster Service의 고수준 기능을 호출하는 개발 API
응용 프로그램 제조사 SDK나 ROS 2를 선택해 사용하는 로봇 앱

즉 운영체제는 Ubuntu/Linux이고, ROS 2는 그 위에서 동작하는 로봇 통신·실행 미들웨어 중 하나다. Booster SDK RPC와 ROS 2/DDS는 같은 제조사 서비스에 접근하는 병렬 경로이며, 어느 한쪽이 다른 쪽 전체를 대체하지 않는다.

1.2 공개 개발 문서가 제공하는 연결 지점

Booster 공개 개발 자료는 하나의 SDK가 아니라 목적이 다른 네 가지 연결 지점을 제공한다.

연결 지점 제공 범위 SKIX 적용 위치
Booster Robotics C++ SDK 고수준 RPC, DDS Topic, Controller Wrapper, IDL과 오류 코드 T2 Gateway의 기본 실행 Adapter
BoosterOS Python SDK 상태 조회·구독, 동작 제어, 비동기 TaskHandle, Audio, 선택적 Vision·Speech 빠른 검증, 비동기 작업 연결, 선택 기능 Adapter
Booster Agent Framework 로봇 내 UI, 설정, 상태, 저장소, Agent 생명주기 T2 내부 관리·진단 앱이 필요할 때 선택 적용
공개 ROS 2·학습·배포 자원 ROS 2 메시지, 시뮬레이션, 학습 정책과 배포 도구 연구·시뮬레이션·고주기 상태 연동에 제한 적용

제품 실행의 기본 경로는 고수준 C++ RPC 또는 Python Task API다. DDS Topic은 연속 상태와 전문가 제어에 사용하고, Agent Framework는 장시간 실행을 직접 붙잡는 계층이 아니라 로봇 내부 앱의 UI·설정·상태 표시 계층으로 사용한다.

공개 범위에서 확인된 기능

기능군 확인된 공개 범위 도입 판단
이동·자세·동작 모드 전환, 속도 명령, 사전 정의 동작, 궤적 실행 API 고수준 SDK부터 연결
상태 관측 IMU, 관절, odometry, battery, robot state 구독 공통 StateSnapshot으로 정규화
카메라·Vision 이미지 취득과 Vision/Camera Client 원본 영상과 의미 관측의 권한을 분리
음향 AudioManager와 음향 관련 Python API 재생·중지·완료 결과를 Evidence로 변환
비동기 작업 Python TaskHandle의 상태, 대기, 취소, 완료 callback SKIX Child Task와 연결 가능
ROS 2 연동 상태·제어 message/service/action 저장소 공개 고주기·연구 기능에 제한 적용

공개 자료만으로 확정하면 안 되는 항목

따라서 모델명만 보고 Capability를 고정 등록하지 않는다. 부팅 시 모델·firmware·설치 모듈·실제 API 응답을 확인해 해당 기기에서 검증된 기능만 활성화해야 한다.

2. 연동 방식 비교

방식 구조 장점 한계 판단
Android 구조 전체 이식 DeviceAgent와 Android 실행 구조를 T2 Ubuntu로 포팅 겉보기 API가 같아짐 Binder/AAR·Android 생명주기 의존을 다시 구현하고 제조사 안전 경계를 침범 제외
T2 SDK 직접 사용 각 앱과 상위 서비스가 Booster SDK/ROS 2를 직접 호출 초기 시연이 빠름 앱마다 정책·상태·취소·오류 해석이 달라지고 공급사 API가 제품 전체로 누출 단기 실험만 허용
공통 계약 + OS별 Adapter SKIX 공통 계약 아래 Android와 T2 실행기를 분리 기존 Android 보존, T2 안전 경계 보존, 시험·교체·확장 용이 계약과 Adapter를 추가로 구현해야 함 권장

권장안의 핵심은 코드를 하나로 만드는 것이 아니라 같은 의미와 결과를 공유하는 것이다. Android의 AAR/Binder와 T2의 SDK/ROS 2는 다른 구현이어도 같은 TaskState와 Evidence를 반환할 수 있다.

2.1 범용 ROS 인터페이스를 SKIX에 직접 노출할 것인가

선택 장점 구조적 문제 판단
SKIX API를 ROS 2로 통일 ROS 개발 도구와 기존 패키지를 빠르게 활용 Android 앱까지 Topic·QoS·Action 이름과 ROS 배포에 의존 연구 도구와 로봇 내부 연동에 한정
공급사 SDK를 앱에 직접 노출 초기 PoC가 빠름 Booster 함수명·오류·수명주기가 제품 전체로 확산 실험용
SKIX Robot Provider + ROS/SDK Adapter 상위 계약을 유지하면서 공급사별 최적 API 선택 Adapter와 계약 시험이 필요 제품 기준안

ROS 2의 Topic, Service, Action 구분은 Provider 내부에서 그대로 활용할 가치가 있다. 다만 SKIX Client가 호출하는 것은 mobility.move_to, motion.perform_action, state.observe 같은 제품 의미여야 한다. 실제 Provider는 기능별로 ROS 2 Action, ROS 2 Service, DDS Topic 또는 Booster SDK RPC 중 적합한 경로를 선택한다.

3. 권장 전체 구조

namuhX AOSP와 Booster T2를 연결하는 SKIX 목표 전체 구조

이 그림은 namuhX의 응용 계층·AOSP 표준 API·SKIX 제품 Runtime과 A1·Booster 실행면을 하나의 목표 구조로 연결한다. A1과 Booster는 각자의 기기 정책과 실시간 안전 책임을 유지하고, SKIX에는 제품 의미의 기능·작업·상태·완료 근거만 노출한다.

A1 리팩터링에서 Booster 호환을 여는 실행 구조

이 구조에서 A1 리팩터링은 Booster용 직접 의존성을 추가하는 작업이 아니다. 공통 Runtime과 작업 생명주기를 유지하고, Android의 DeviceAgent와 T2의 Booster Service를 각각 독립 Provider로 연결하는 확장이다. 그림의 녹색 상태는 현재 소스에 반영된 공통 Runtime 기준선이고, 주황색 상태의 Provider SPI·공통 schema·구체 Adapter·적합성 시험은 후속 구현 범위다.

Android와 T2를 연결하는 공통 제어 계약

공급사와 운영체제를 분리하는 Robot Provider 구조

Android AOSP 제품 제어면과 Booster T2 실행면의 경계

3.1 공통 계약 계층

계약 포함할 정보 포함하지 않을 정보
CapabilityDescriptor 기능 ID, 입력·출력 schema version, 필요 자원, 선행 조건, 취소·완료 방식 Binder class, ROS Topic 문자열, 공급사 내부 함수명
TaskRequest task ID, capability ID, 인자, deadline, 호출자, 안전 문맥 관절 번호와 제어 주기 같은 저수준 구현
WorkflowRequest 단계, 의존 관계, 실패 정책, 보상 단계 로봇 내부 실시간 제어 loop
StateSnapshot 위치·자세·모드·배터리·연결·활성 작업, 출처, 관측 시각 출처와 시각이 없는 추정값
EvidenceRecord 접수·진행·도착·완료·실패를 증명한 사건과 correlation key TTS 응답만으로 만든 임의 완료
Reason 차단·거부·실패·timeout 사유와 재시도 가능 여부 공급사 오류 문자열의 무가공 노출

공통 계약은 Protobuf/IDL 또는 동등한 schema 원본에서 Java/Kotlin·C++·Python 타입을 생성하는 방식이 적합하다. AAR은 Android Client 배포 수단으로 유지하되, 교차 플랫폼 계약 자체를 Android Bundle에 묶지 않는다.

3.2 OS별 실행 경계

Android namuh

SKIX Manager AAR → Binder/AIDL → SKIX Runtime/DeviceAgent → Android Domain Executor

Booster T2

SKIX T2 Gateway → Booster SDK RPC / ROS 2 Adapter → Booster Service → Robot Hardware

T2 Gateway는 공급사 API를 공통 Capability로 번역한다. mobility.velocity는 Booster의 속도 명령으로 직접 대응할 수 있지만, mobility.move_to는 이름이 붙은 목적지·자기 위치·경로 계획·도착 판정이 필요하므로 공개 속도 API 하나만으로 구현됐다고 보면 안 된다. 별도의 위치 추정·Navigation Provider가 있을 때만 Capability를 활성화한다. SDK의 진행 상태·odometry·TaskHandle 결과는 공통 TaskEvent로 올린다.

3.3 통신 선택

경계 권장 통신 이유
Android 앱 ↔ Android Runtime Binder/AIDL 호출자 UID·죽음 감지·제품 권한과 기존 구조 활용
T2 Gateway ↔ T2 Runtime Booster SDK RPC, ROS 2/DDS 제조사가 제공하는 로봇 내부 상태·제어 경로 유지
namuh/상위 Runtime ↔ T2 Gateway gRPC/Protobuf 기반 로컬 네트워크 계약 typed schema, 양방향 진행 event, timeout·version 관리
Cloud ↔ 제품 Runtime 기존 MQTT 또는 HTTPS 비동기 명령·상태 동기화에 사용하되 저수준 제어는 금지

ROS 2 Topic을 외부 앱에 직접 공개하지 않는다. Topic 이름·QoS·joint layout 변경은 T2 Adapter 안에서 흡수하고, 외부에는 안정된 Capability와 Task 상태만 제공한다.

3.4 Robot Provider 계약

Provider는 ROS 2를 감추기 위한 단순 Wrapper가 아니다. 현재 로봇이 실제로 할 수 있는 기능을 발견하고, SKIX Task를 공급사 실행 요청으로 변환하며, 상태와 완료 근거를 공통 의미로 되돌리는 실행 경계다.

discoverCapabilities()      모델·firmware·설치 모듈 기준 실제 지원 기능 조회
getStateSnapshot()          위치·자세·모드·배터리·안전 상태의 최신본 반환
submitTask(TaskRequest)     공통 Task를 공급사 SDK·ROS 2 요청으로 변환
observeTask(taskId)         진행·보류·완료·실패와 근거를 연속 전달
cancelTask(taskId, reason)  공급자 작업 취소 후 안전한 종료 상태 확인
reconcile(taskId)           연결 복구 뒤 공급자 상태와 SKIX 상태 재조정

다른 제조사를 추가할 때 상위 TaskManager를 수정하는 대신 새 Provider가 이 계약을 구현한다. 모든 로봇이 같은 기능을 가진다고 가정하지 않고, 부팅·연결 시점에 확인된 Capability만 Registry에 등록한다.

3.5 Android/AOSP를 제품 제어면으로 유지하는 이유

Android는 T2의 보행 제어기를 대신하기 위한 선택이 아니다. 사용자·앱·Cloud와 로봇 실행부 사이에서 제품 수명주기와 서비스 경험을 안정적으로 운영하는 제어면으로 가치가 있다.

Android/AOSP 기반 SKIX에서 활용할 가치
앱 프로세스·UID Sandbox·권한 시스템 앱, 파트너 앱, 일반 앱의 기기 제어 범위를 분리
Binder/AIDL과 Service 생명주기 프로세스가 달라도 typed API, 호출자 식별, 연결 죽음 감지 제공
Activity·Service·Broadcast·Notification 화면이 없어도 실행되는 서비스와 사용자에게 보이는 진행 UX를 분리
Camera·Audio·Media·Bluetooth·Network Framework 사용자 접점 기능을 검증된 Android API와 권한 체계로 운영
전원·백그라운드 실행 정책 화면, 음성, 네트워크와 장기 작업의 자원 사용을 제품 정책으로 조정
APK 서명·SELinux·Verified Boot 앱과 시스템 이미지의 신뢰 경계를 제품 배포 체계에 연결
OTA와 A/B 복구 현장 업데이트 실패 시 이전 부팅 가능한 형상으로 복구하는 운영 기반 제공
Jetpack 기반 UI·상태 관리 런처, PUI, 설정, 관제 UI를 같은 생명주기와 개발 규칙으로 유지

따라서 권장 구조는 Android 또는 ROS 2의 선택이 아니다. Android/SKIX는 제품 앱·정책·Task·관측을 관리하고, T2의 Ubuntu/Booster Runtime은 로봇 실행과 실시간 안전을 담당한다. 로봇이 바뀌면 Provider를 교체하고, 사용자 경험과 제품 운영 계층은 유지한다.

4. 작업 위임과 완료 판단

여러 기기를 묶는 Workflow와 로봇 내부의 물리 실행은 소유 범위가 다르다. 상위 TaskManager가 전체 순서를 관리하고, T2 Gateway와 제조사 Runtime이 한 단계의 실제 실행을 관리한다.

상위 Workflow와 T2 로컬 작업의 상태 환류

예시: T2가 거실로 이동해 사람을 향해 안내하고, namuh가 공기질을 확인한 뒤 결과를 화면에 표시

  1. 상위 Workflow가 T2 이동, namuh 상태 조회, 안내와 화면 표시의 의존 관계를 만든다.
  2. T2 이동 단계는 childTaskId와 함께 T2 Gateway에 위임한다.
  3. Gateway는 현재 모드와 SDK 지원 여부를 확인하고 제조사 고수준 API를 호출한다.
  4. accepted, running, feedback, succeeded/failed/cancelled를 같은 correlation key로 반환한다.
  5. 상위 Workflow는 movement.arrived 근거를 받은 뒤에만 다음 단계를 연다.
  6. 연결이 끊기면 성공으로 추정하지 않고 UNKNOWN/RECOVERY_REQUIRED로 보류한 뒤 재조회한다.

ROS 2 Action이 장시간 동작에 Goal·Feedback·Result·Cancel을 제공하고, Booster Python SDK의 TaskHandle이 상태·대기·취소·완료 callback을 제공한다는 점은 이 경계와 잘 맞는다. 다만 두 상태 체계를 그대로 외부에 노출하지 않고 SKIX 상태로 정규화해야 한다.

권장 상태 대응

공급자 상태 공통 Task 상태 필요한 근거
요청 수신 전 SUBMITTED 상위 request ID 생성
SDK/Action 수락 ADMITTED 또는 RUNNING vendor handle·goal ID 확보
진행 callback RUNNING progress와 최신 관측 시각
성공 결과 SUCCEEDED capability별 terminal evidence
명시 취소 CANCELLED 취소 수락과 안전 정지 확인
오류 결과 FAILED 정규화된 reason과 원본 vendor code
연결 단절 UNKNOWN 또는 RECOVERY_REQUIRED 재연결 후 handle·robot state 재조정 필요

4.1 SKIX Task의 적정 크기

SKIX TaskManager는 관절이나 모터의 순간 제어를 관리하지 않는다. 외부 호출자가 의미를 이해할 수 있고, 독립적으로 취소할 수 있으며, 시작부터 종료까지 상태와 완료 근거를 추적할 수 있는 행동 단위를 관리한다.

계층 예시 관리 주체 일반적인 시간 범위
목표 사용자를 맞이한다, 주변을 확인한다 제품 시나리오 또는 선택적 Planner 수십 초~수 시간
Workflow A로 이동 → 안내 → 복귀 SKIX TaskManager 수십 초~수십 분
Task MoveTo(A), PerformAction, CaptureObservation SKIX TaskManager와 실행 Provider 수 초~수 분
로봇 Action 경로 추종, 보행 시작·정지, 자세 전환 T2 Gateway와 Booster Runtime 수백 ms~수 초
제어 Loop 균형 보정, 관절 위치·토크, 충돌 회피 T2 내부 제어기 수 ms

MoveTo(A)처럼 한 문장으로 표현되는 단일 행동도 SKIX Task가 될 수 있다. 중요한 기준은 크기가 아니라 생명주기·취소·자원·완료 근거를 외부에서 관리할 가치가 있는가다. 반대로 보행 중 발목 각도를 조정하거나 매 제어 주기마다 균형을 보정하는 일은 T2 내부 구현이며 SKIX Task로 만들지 않는다.

SKIX와 T2의 작업 크기 및 이벤트 책임 분배

4.2 센서·단발 이벤트가 발생했을 때

센서 이벤트의 처리 위치는 이벤트 종류가 아니라 영향 범위로 결정한다. 동일한 목표와 완료 조건 안에서 실행 방법만 조정할 수 있으면 T2가 즉시 처리한다. Task 상태나 Workflow 순서가 바뀌면 SKIX가 결정하고, 사용자 목표 자체를 다시 해석해야 하면 상위 Planner 또는 제품 시나리오로 올린다.

이벤트와 영향 최초 처리 SKIX에 전달할 정보 상위 결정 필요 여부
보행 중 작은 미끄러짐을 균형 제어로 복구 T2 실시간 제어기 필요하면 진단 통계만 전달 없음
이동 경로의 일시 장애물을 우회해 같은 A에 도착 T2 이동 실행기 진행률·경로 변경·최신 위치 없음. 같은 Task 범위
사람이 갑자기 진입해 안전 정지 T2가 즉시 정지 PAUSED/WAITING, 감지 시각, 안전 사유 SKIX가 재개·timeout·취소 결정
낙상 또는 E-stop T2 안전 계층 FAILED/PAUSED, 자세, 원본 오류, 복구 가능 여부 SKIX가 후속 Task를 막고 복구 흐름 결정
카메라 관찰에서 대상 미발견 T2가 관찰 Task 종료 NOT_FOUND 근거와 관측 범위 SKIX가 재시도·다른 위치·종료 결정
저전력 경고지만 즉시 위험하지 않음 T2 상태 감지 배터리 값·threshold·freshness SKIX Policy가 현재 Task 지속 또는 복귀 결정
임계 저전력·열·구동 안전 한계 T2가 로컬 안전 동작 우선 실제 중단 상태와 안전 사유 SKIX는 결과를 수용하고 Workflow 정리
사용자가 목적지를 변경 입력 채널이 SKIX에 전달 현재 Task와 새 요청의 관계 Planner 또는 제품 로직이 목표·Workflow 갱신

T2가 로컬에서 바꿀 수 있는 범위는 Task 계약의 실행 허용 범위 안이다. 예를 들어 A로 이동에서 장애물을 피해 경로를 바꾸는 것은 가능하지만, 장애물이 있다는 이유로 목적지를 B로 바꾸거나 다른 행동을 추가하면 안 된다. 계약 밖의 변경이 필요하면 NEEDS_DECISION과 근거를 올리고 현재 작업을 안전 상태로 보류한다.

4.3 상태 환류 계약

T2가 이벤트를 흡수했더라도 상위에서 알아야 하는 상태는 정규화해 전달한다.

TaskEvent
  task_id / attempt_id / provider_task_id
  state: RUNNING | PAUSED | WAITING | SUCCEEDED | FAILED | CANCELLED | UNKNOWN
  progress
  reason_code / retryable
  observation: source / timestamp / freshness
  evidence: position / mode / safety_state / terminal_result

연속 센서 원본을 모두 SKIX로 올리는 것이 아니라, 상태 판단에 필요한 요약과 근거를 보낸다. 고주기 원본은 T2 내부에서 처리하고, SKIX StateMirror에는 현재 실행을 판단할 수 있는 최신본만 유지한다. 장애 분석이 필요할 때는 correlation key로 T2 원본 로그를 조회한다.

4.4 이 구조의 장점과 비용

구분 효과 함께 관리할 비용
안전과 지연 균형·충돌·E-stop을 T2 내부에서 즉시 처리 로컬 판단과 상위 상태의 동기화 필요
제품 API 안정성 앱은 Booster 함수나 ROS Topic 대신 SKIX Capability를 사용 Adapter와 schema version을 지속 관리
플랫폼 확장 Android namuh와 Ubuntu T2가 같은 Task·Evidence 의미를 공유 OS·firmware·모델 조합별 계약 시험 증가
실행 일관성 Workflow 순서·취소·timeout·완료를 SKIX에서 한 방식으로 관찰 상위 Task와 공급자 Task의 이중 상태 대응 필요
공급사 독립성 공급사 API 변경을 T2 Adapter 안에서 흡수 신규 기능마다 Capability와 Evidence 정의 필요
장애 복구 연결 단절 시 성공을 추정하지 않고 재조정 가능 task ID·attempt ID·vendor handle 보존 필요
관측성 요청부터 물리 결과까지 같은 correlation으로 추적 로그·시간 동기화·보존 정책이 필요

가장 큰 위험은 SKIX와 T2가 같은 결정을 동시에 소유하는 것이다. 이를 방지하려면 다음 원칙을 고정한다.

5. 안전·모드·자원 정책

T2는 DAMP, PREP, WALK 등 상태 전이 제약을 가지며, DAMP에서 WALK로 바로 이동할 수 없는 것처럼 제조사 모드 규칙이 있다. SKIX가 이를 우회하면 안 된다.

SKIX 사전 판단       호출자 권한 · 제품 정책 · 작업 충돌 · 사용자 동의
T2 Gateway 판단      capability 지원 · firmware · 현재 모드 · 연결 freshness
T2 최종 판단         로봇 자세 · 균형 · 충돌 회피 · E-stop · 저수준 안전 한계

최종 실행 가능 여부는 세 판단을 모두 통과해야 한다. 상위에서 승인됐다는 이유로 T2의 거부를 성공으로 바꾸지 않으며, T2의 로컬 E-stop과 damping mode는 항상 우선한다.

공유 자원은 최소한 다음 단위로 충돌을 관리한다.

자원군 충돌 예시 원칙
locomotion 보행과 다른 전신 동작 동시 실행 한 실행 주체만 소유
whole_body_action 춤·기상 동작과 이동 동작 명세의 양립 가능성 확인
left_arm / right_arm 양팔 동작과 hand/gripper 제어 장착 형상별 Capability로 구분
head / vision 시선 제어와 카메라 관찰 원본 영상 권한과 자세 자원을 함께 검사
audio 안내 음성, 미디어, 긴급 경고 긴급 경고 우선순위 보장
control_mode WALK·custom joint control 전환 저수준 제어는 격리된 전문가 기능만 허용

Cloud나 Android에서 joint command를 Wi-Fi로 연속 전송하는 구조는 채택하지 않는다. 제어 주기와 안전 제한이 필요한 loop는 T2 내부에서 닫고, 외부는 목표·제약·취소만 전달한다.

6. Booster 공개 API와 SKIX 연결 범위

Booster Developer Guide의 공개 범위는 넓지만, API가 존재한다는 사실과 T2 납품 형상에서 실행 가능하다는 사실은 구분해야 한다. SKIX는 공개 API를 그대로 복제하지 않고, 제품에서 재사용할 의미 단위만 Capability로 등록한다.

6.1 C++ 고수준 RPC

기능군 공개 Client·API 확인 가능한 기능 SKIX 연결 판단
연결·공통 오류 ChannelFactory, Init, WaitForService, RPC status code 로봇 선택, 서비스 준비, timeout·conflict·state-transition 오류 Gateway 공통 연결·Reason 변환에 사용
로봇 정보 GetRobotInfo, GetMode, GetStatus 모델·serial·firmware·현재 mode·body control·active action Capability 활성화와 StateSnapshot의 필수 입력
장착 정보 GetSensors, GetHands, GetRobotModel, GetCameras IMU·손·URDF/RBDL·카메라 목록 모델명이 아니라 실제 장착 형상으로 기능 등록
모드·기상 ChangeMode, GetUp, GetUpWithMode damping·prepare·walking·custom 전환과 기상 제조사 상태 전이 순서를 그대로 준수
속도·보행 Move, MoveCommand, SwitchGait, ResetOdometry X/Y 선속도, yaw 속도, gait 전환, odometry 초기화 로컬 이동 실행에 사용. 장소 기반 이동과는 구분
머리 자세 RotateHead, RotateHeadWithTime, RotateHeadWithDirection pitch·yaw와 도달 시간·방향 제어 head.pose.set 후보. Vision과 자원 충돌 관리
사전 동작 WaveHand, Handshake, WholeBodyDance, Shoot, VisualKick 손인사·악수·전신 동작·킥 설치 motion과 현재 mode를 확인한 목록만 등록
상체·궤적 UpperBodyCustomControl, LoadCustomTrainedTraj, ActivateCustomTrainedTraj, UnloadCustomTrainedTraj 상체 사용자 제어와 ONNX 기반 학습 동작 전문가 기능으로 격리. T2 지원 범위를 실기기 검증
손·그리퍼 MoveHandEndEffectorV2, MoveDualHandEndEffector, ControlGripper, ControlDexterousHand 말단 위치, 양손, 그리퍼, 손가락 제어 공개 지원표가 K1/T1 중심이므로 T2 기본 Capability에서 제외
AI·LUI StartAiChat, StopAiChat, Speak, StartFaceTracking, StartAsr, StopAsr, StartTts, SendTtsText, StopTts 대화·발화·얼굴 추적·ASR·TTS 세션 하드웨어·네트워크·개인정보 조건을 확인한 선택 기능
Vision StartVisionService, GetDetectionObject, StopVisionService 객체 검출 세션과 class·confidence·bounding box 관찰 Task와 Evidence로 연결
손-눈 보정 StartCalibration, GetStatus, GetResult, ApplyResult, StopCalibration 보정 시작·상태·결과·적용 일반 제품 API가 아닌 서명된 정비 기능
Camera CameraClient.GetCameras, X5 ChangeMode, GetStatus 카메라 목록과 normal·high-resolution mode 실제 X5 장착 형상과 firmware 확인 후 등록
Lighting SetLEDLightColor, SetLEDLightColors, StopLEDLightControl 단일·다중 RGB 설정과 제어 해제 상태 표현 정책을 거친 light.scene.set 후보

Move와 MoveCommand는 장소 이름이나 지도 좌표로 이동하는 API가 아니라 속도 명령이다. 반면 C++ MoveController는 odometry를 이용해 MoveToTarget, MoveToRelative, TurnAround, Stop을 제공한다. 이것도 지도·경로 계획·장애물 회피가 포함된 Navigation은 아니므로, mobility.move_to는 별도 Navigation Provider와 도착 근거가 있을 때만 활성화한다.

6.2 Audio API

객체 주요 API 용도와 완료 판단
AudioManager Init, Shutdown, CreatePlayer, CreateRecorder, CreateCaptureStream, CreateLocalizer Audio runtime과 하위 세션의 생명주기 관리
시스템·장치 Set/GetSystemVolume, Set/GetSystemMute, GetDevices 전역 음량·mute와 입출력 장치 조회
Bluetooth Start/StopBluetoothScan, GetBluetoothDevices, Connect/DisconnectBluetoothDevice 검색·연결·해제 상태를 callback 또는 조회로 확인
AudioPlayer Init, Start, Pause, Stop, Reset, Destroy, PushPcmStream 파일·PCM 재생. state·progress·completion·error callback을 Evidence로 사용
AudioRecorder Init, Start, Pause, Stop, Destroy, GetInfo 녹음 파일이 마감된 뒤 완료 처리
AudioCaptureStream Init, Start, Pause, Stop, Destroy, SetFrameCallback raw·NAEC frame 수신. 장기 구독 자원으로 관리
AudioLocalizer GetDoaAngle 마이크 배열 기반 음원 방향. 관측 시각과 장치 지원 여부 포함

Player·Recorder·CaptureStream은 서로 다른 세션이다. SKIX에서도 audio.play, audio.record, audio.capture, audio.direction.read로 분리해야 취소·권한·동시 사용 정책과 완료 근거가 명확해진다.

6.3 DDS와 ROS 형식 상태 Topic

범위 공개 Topic SKIX 사용 원칙
저수준 상태·제어 rt/low_state, rt/joint_ctrl 관절·모터 상태 관찰이 기본. 직접 제어는 Custom mode의 전문가 기능으로 격리
안전·상태 rt/fall_down, rt/robot_states, rt/prone_body_control_status 낙상·mode·action 변화를 로컬에서 판정해 의미 이벤트로 올림
이동 상태 rt/odometer_state, rt/odom, rt/tf 위치·transform의 출처와 시각을 포함해 StateMirror 갱신
센서 rt/imu/data, rt/joint_states 고주기 원본은 T2 내부 소비, 상위에는 최신 요약과 이상 사건 전달
손·입력 rt/booster_hand_data, rt/booster_hand_touch_data, rt/button_event, rt/remote_controller_state 장착·입력 이벤트를 Capability 지원과 사용자 개입 근거로 사용
동작 상태 rt/trained_traj_status, rt/robot_replay_traj_id, rt/robocup_behavior_status, rt/kick_ball 모델별 지원 여부를 확인하고 Task 진행·종료 근거로 변환
AI·LUI rt/ai_subtitle, rt/lui_asr_chunk 대화·ASR 결과 스트림. 사용자 데이터 정책을 적용

ROS 2 기준으로 Topic은 연속 상태, Service는 짧은 조회·설정, Action은 feedback·cancel·result가 필요한 장기 실행에 적합하다. SKIX Client에는 ROS 이름과 QoS를 노출하지 않고 Provider 내부 구현 선택으로 유지한다.

6.4 BoosterOS Python SDK

범위 공개 기능 SKIX에서의 용도
연결 BoosterRobot(...) 물리·가상 로봇 연결. 로봇당 인스턴스 하나를 재사용해 다중 publisher 충돌 방지
정보·목록 로봇 정보, mode·gait·frame·joint·action 목록 capability discovery와 입력 범위 구성
상태 snapshot image·camera info·IMU·odometry·joint·battery·fall-down·transform 조회 출처·시각·freshness가 있는 StateSnapshot
상태 구독 image·IMU·odometry·battery·fall-down callback 원본 스트림은 로컬에서 소비하고 의미 있는 변화만 StateEvent로 전달
동작 제어 mode·gait·velocity·upper body·joint·head·odometry reset 안전 등급과 현재 mode를 확인한 Provider 내부 실행
비동기 작업 action·get-up·trajectory·play_sound TaskHandle의 상태·취소·완료를 SKIX Child Task로 연결
Audio Manager system volume, recording, stream playback 제품 Audio Capability의 빠른 검증 경로
Vision Detection 모델 목록·적재·객체 검출·결과 표시 선택 의존성과 추론 장치 확인 후 관찰 Capability로 등록
Speech 음성 인식·대화·voice 목록 물리 로봇과 Audio 서비스 확인 후 선택 등록
Hand Guiding 궤적 기록·재생 T2 미지원이 명시돼 있으므로 등록 금지
Soccer Kick Manager 자동 킥 시작·명령 갱신·중지 T2 미지원이 명시돼 있으므로 등록 금지

TaskHandle은 wait, cancel, done, running, 상태 변경 callback과 완료 callback을 제공한다. 공급사 상태를 그대로 노출하지 않고 provider_task_id, attempt_id, TaskEvent, terminal evidence로 정규화한다. DataNotReadyError는 값이 0이라는 뜻이 아니라 현재 채널에서 상태가 준비되지 않았다는 뜻이므로, 과거 값을 현재 상태로 대체하지 않는다.

6.5 Booster Agent와 공개 개발 자원

영역 공개 기능 연동 판단
Agent 기본 클래스 runtime 설정, 활성화·종료 callback, manager 접근 로봇 내부 앱의 생명주기 연결에 사용 가능
UI Component component 등록·갱신, page 전환, toast T2 자체 화면·관리 UI가 필요할 때 선택 적용
Parameter·Storage 설정 읽기·쓰기·검증·변경 callback, Agent 저장소 제품 설정 schema와 충돌하지 않는 로컬 설정에 사용
Robot State Agent에서 집계 로봇 상태 조회 SKIX StateSnapshot 보조 입력. 원본 출처 유지
Joystick·Shortcut 버튼 조합과 shortcut metadata 현장 조작과 사용자 개입 사건으로 연결 가능
booster_gym·booster_train·booster_deploy·booster_assets 학습·시뮬레이션·정책 배포·모델 자원 제품 runtime API가 아니라 연구·검증·동작 자산 공급 경로

Agent callback은 기본적으로 직렬 실행되므로 긴 작업을 callback 안에서 기다리면 안 된다. callback은 요청 접수와 상태 갱신만 수행하고, 장기 작업은 별도 worker나 SKIX/T2 Task 경로로 넘겨야 한다.

6.6 초기 Capability 등록안

공통 Capability T2 실행 후보 입력 완료 근거 초기 등급
robot.info.read GetRobotInfo·GetRobotModel 요청 필드 model·firmware가 있는 snapshot 읽기 전용
robot.state.observe Python subscription 또는 DDS Topic 상태 종류·주기 상한 source timestamp가 있는 최신본 읽기 전용
mobility.velocity Move 또는 MoveCommand 선속도·각속도·지속 시간 정지와 최종 odometry 제한 실행
mobility.move_to 별도 Navigation Provider 목적지·허용 구역·timeout 도착 pose·허용 오차 Provider 확인 전 비활성
head.pose.set RotateHead* pitch·yaw·duration 최종 head pose 안전한 단일 작업
motion.perform_action action RPC 또는 Python task action ID·제약 terminal result·최종 mode 목록 기반 등록
perception.observe_object Vision Service 또는 제품 Vision 관찰 대상·시간 제한 class·confidence·frame provenance 선택 모듈
audio.play AudioPlayer asset/stream·volume completion/cancel/error callback 안전한 단일 작업
audio.capture Recorder 또는 CaptureStream 형식·기간·저장 정책 종료 상태·frame/file evidence 동의·개인정보 필요
audio.direction.read AudioLocalizer.GetDoaAngle freshness 각도·관측 시각 읽기 전용
light.scene.set LightControlClient RGB 또는 장면 ID 적용 상태 또는 공급자 응답 제품 표현 정책 필요

Capability에는 provider, model, firmwareRange, resources, preconditions, cancelContract, evidenceContract를 둔다. 런타임에서 확인되지 않은 기능은 Planner와 앱의 선택 후보에 노출하지 않는다. 관절 직접 제어, 무제한 속도 스트림, calibration은 기본 Client API가 아니라 서명된 진단·전문가 권한으로 분리한다.

초기 연결 순서는 상태 조회 → Audio·LED·머리 자세 → 목록 기반 사전 동작 → 제한 이동 → Vision → 별도 Navigation이 적합하다. 손·관절·학습 궤적은 실제 T2 형상과 안전 시험이 끝난 뒤 별도 등급으로 연다.

7. 도입 단계와 통과 기준

1단계 · 구매 형상 확인

통과 기준: 실제 납품 형상과 문서의 기능표가 일치하고, 미지원 기능이 명시돼 있다.

2단계 · 읽기 전용 Adapter

통과 기준: 실기기와 simulator에서 상태 schema가 같고 stale 값이 차단된다.

3단계 · 안전한 단일 작업

통과 기준: 요청 ID 하나로 시작부터 terminal evidence까지 추적할 수 있다.

4단계 · 이동과 Workflow

통과 기준: 단계 성공을 추정하지 않고 실제 근거 뒤에만 다음 단계가 열린다.

5단계 · 제품 시나리오

통과 기준: 공급자 구현이 달라도 상위 Workflow와 관측 화면이 같은 상태 체계를 사용한다.

8. 공급사 확인 목록

확인 항목 필요한 답변
납품 형상 Education/Pro, 연산 모듈, hand/gripper, sensor 구성
firmware 호환 SDK별 최소·권장 firmware와 장기 지원 기간
T2 기능표 RPC, Python, ROS 2, Agent, simulator별 지원·미지원 목록
로봇 모델 31자유도 joint map, URDF, TF tree, 좌표계와 단위
작업 제어 비동기 handle, progress, cancel, timeout, terminal reason 보장
안전 책임 mode transition, E-stop, fall recovery, velocity/joint limit의 최종 owner
배포 Agent/package 서명, 권한, 자동 시작, OTA와 rollback
연결 복구 SDK handle 유효 범위, 재연결 후 상태·작업 재조회 방법
관측성 request/goal ID가 포함된 로그, topic/RPC trace, 시간 동기화
보안 원격 접속, 인증서, 포트, ROS 2 DDS 보안과 카메라 데이터 정책

9. 현재 판단과 남은 검증

항목 현재 판단
Android 기반 유지 앱 격리, Binder 서비스, UI·미디어·네트워크, 서명·권한, OTA를 포함한 제품 운영 제어면으로 유지한다.
T2 Ubuntu 기반 유지 Booster Service·SDK·ROS 2와 실시간 안전 제어가 동작하는 로봇 실행면으로 유지한다.
교차 플랫폼 SKIX 공통 schema와 Adapter 구조로 가능하다. AAR 하나를 두 OS에 공통 적용하는 방식은 아니다.
범용 ROS 연동 ROS 2 자체를 SKIX 공용 API로 삼지 않고 Robot Provider의 선택적 구현 경로로 둔다.
TaskManager 연동 상위 Workflow와 T2 Child Task의 계층형 위임이 적합하다. 실제 T2 연결 구현은 남아 있다.
저수준 제어 T2 내부에 격리한다. 초기 제품 연동 범위에서 제외한다.
실기기 검증 아직 수행하지 않았다. 구매 형상·firmware·SDK 권한 확정 후 검증해야 한다.

Connections

Sources

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date