배포 안내
이번 3.3.0 업데이트는 역기구학(Inverse Kinematics) 기반의 정밀한 로봇 포즈 제어, 사용자가 지정할 수 있는 금지 구역(No-Go Regions) 설정 기능, 그리고 런타임에 서비스 파라미터를 유연하게 변경할 수 있는 서비스 커스터마이징(Service Customization) 기능을 도입하여 현장에서의 제어 및 연동 편의성을 대폭 향상시켰습니다.
1. 향후 제거 예정 기능 (Upcoming Removals)
⚠️ 개발자 주의 사항: 다음 프로토콜 버퍼(Protobuf) 필드 및 서비스는 다가오는 4.0 릴리즈에서 완전히 삭제될 예정입니다. 기존 시스템 연동 코드에서 더 이상 해당 항목이 사용되지 않도록 확인해 주시기 바랍니다.
- LogAnnotationService
- Auth 애플리케이션 토큰 (Auth application token)
- 비동기화 이동 명령(Non-synchronized mobility commands) 및 최상위 피드백 메시지 (Robot commands 관련)
- Graph Nav 맵 에지 주석(Map edge annotations): vel_limit, ground_mu_hint, grated_floor
- SpotCheck 피드백: foot_height_results, leg_pair_results
2. 신규 기능 (New Features)
신규 서비스 - 역기구학 (Inverse Kinematics)
- 로봇 팔(Arm)의 타겟 도달 가능성이나 본체(Body) 마운트 센서의 지향점(Pointing)을 쿼리하고 제어할 수 있는 서비스가 도입되었습니다.
- 손목 마운트(Wrist-mounted) 도구 또는 바디 마운트(Body-mounted) 도구를 위한 포즈나 시선(Gaze) 타겟을 지정할 수 있으며, 이 과정에서 기체의 본체, 팔, 스탠스(Stance) 설정을 다양하게 구성할 수 있습니다.
- 해당 서비스는 요청 조건을 만족하는 전체 로봇의 구성(본체, 발, 도구를 포함한 프레임 스냅샷)을 반환하거나, 계산 가능한 솔루션이 없을 경우 이를 알립니다.
- 참고: 해당 서비스는 기체에 로봇 팔(Arm)이 장착된 경우에만 활성화됩니다.
신규 서비스 - 로그 상태 (LogStatus)
- LogStatus 서비스를 활용하여 실험(Experiment) 또는 소급(Retro) 로그 수집을 시작하고 종료할 수 있습니다. 수집된 로그는 로봇 시스템의 고장 진단 및 보스턴 다이내믹스 고객 지원(Support) 분석용으로 활용됩니다.
서비스 커스터마이징 (Service Customization)
- 로봇의 기능을 확장하는 커스텀 서비스를 개발할 때, 해당 서비스가 어떤 형태의 파라미터를 입력받을지 유연하게 지정할 수 있는 필드와 메시지가 추가되었습니다.
- 구성된 파라미터는 현장 관리자가 태블릿 UI 또는 Scout 웹 플랫폼을 통해 손쉽게 조작할 수 있습니다.
- 지원되는 서비스 목록: 이미지 서비스(Image services), 데이터 수집 플러그인, Network Compute Bridge 워커(Workers), 원격 미션 콜백, Area Callbacks.
Arm 제어 및 매니퓰레이션 (Arm and Manipulation)
- 제한적 조작(Constrained Manipulation) 제어: 기존에는 작업 공간 내 물체(예: 크랭크)를 조작할 때 속도(Velocity control) 지정만 가능했습니다. 이제는 위치 제어(Position control) 모드가 도입되어, 이동할 각도나 거리 등 명확한 타겟 위치(Target positions)를 지정하고 가속도 제한(Acceleration limits)을 적용할 수 있습니다.
- 내부 추정기 리셋 옵션: 이전 요청과 작업 구성이 동일할 때, 내부 추정기(Estimator)가 강제로 리셋되는 동작을 비활성화할 수 있습니다.
- 도어 개방 기능 고도화: 문을 열 때 발생할 수 있는 오류 상태(STATUS_STALLED, STATUS_NOT_DETECTED)가 추가되었으며, 피드백을 통해 문 개방 진행 상황을 모니터링할 수 있습니다.
- 그리퍼 카메라 제어: 화이트 밸런스, 감마(Gamma), 선명도(Sharpness)를 미세 조정할 수 있는 옵션이 추가되었습니다.
네비게이션 및 자율 주행 (Navigation)
- 출입 금지 구역 (No-Go Regions): 사용자가 직접 직사각형 형태의 장애물(Body 및 Foot obstacle maps)을 지정하여 로봇의 출입을 통제할 수 있습니다. 해당 구역은 World Object Service를 통해 추가되며, 구역의 유효 기간(object_lifetime)을 설정할 수 있습니다.
- Area Callbacks 경로 차단 통지: Area Callbacks에서 PathBlocked 에러를 발생시켜 Graph Nav 시스템이 해당 경로를 우회(Re-route)하도록 유도할 수 있습니다.
- 토폴로지 처리 최적화 (Topology Processing): 루프 클로저(Loop closure)가 이전보다 훨씬 정교하게 자동 생성됩니다. 불필요한 루프 클로저 생성이 억제되어 맵 품질이 향상되었으나, 도크 주변 웨이포인트의 경우 로봇의 원활한 복귀를 돕기 위해 비교적 여유롭게(Forgiving) 생성됩니다.
- 로봇 끼임(Stuck) 진단: 로봇이 이동 중 갇힐 경우, 갇힘의 원인(Stuck reason)이 상세하게 피드백으로 반환됩니다.
안무 및 모션 제어 (Choreography)
- 댄스 런타임 중에 로봇과 상호작용하는 인터랙티브 모션을 지원하는 ChoreographyCommand RPC가 추가되었습니다.
- 로봇이 댄스를 얼마나 진행했는지, 현재 동작 상태 등을 실시간으로 피드백하는 ChoreographyStatus RPC가 추가되었습니다.
- 커스텀 보행(Custom gait)을 위한 세밀한 파라미터(custom_gait_params, leg_joint_params) 설정과 애니메이션 타이밍 및 모션 연동 편의성이 대폭 강화되었습니다.
페이로드 및 시스템 연동 (Payloads)
- 페이로드의 연결(Liveness) 상태를 로봇이 주기적으로 Ping(ICMP)을 보내 모니터링하는 기능이 추가되었습니다. Ping 타임아웃, IPv4 주소, 링크 속도 등 설정이 지원됩니다.
- IPv4 주소 설정을 통해 페이로드가 기체의 전면(Front) 또는 후면(Rear) 포트 중 어느 쪽에 장착되었는지 자동으로 식별하는 기능이 도입되었습니다.
3. 버그 수정 및 개선 사항 (Bug Fixes and Improvements)
- 미션 블랙보드(Mission blackboard)의 실시간 상태가 NodeState 메시지를 통해 보고됩니다.
- GraphNavClient.set_localization_full_response, RecordingClient.start_recording_full 등 API 응답 전체(Full response)를 반환하는 메서드가 다수 추가되었습니다.
- 로봇 시스템 관리를 위한 get_cached_hardware_hardware_configuration (하드웨어 캐시 확인) 및 백그라운드 스레드를 즉시 종료하는 shutdown() 메서드가 도입되었습니다.
- UploadGraph 실행 시, 치명적인 오류가 아닌 복구 가능한 맵 문제(Recoverable graph problems)는 로드를 취소시키지 않고 ValidationStatus에 단순 "Warning"으로 기록되도록 개선되었습니다.
- 미션 파일의 용량이 방대할 때 발생하던 RPC 전송 용량 제한 문제를 해결하기 위해, 청크(Chunks) 단위로 스트리밍 송수신을 지원하는 신규 RPC(LoadMissionAsChunks2 등)가 추가되었습니다.
4. 주요 호환성 변경 (Breaking Changes)
- E-Stop(비상 정지) 상태 통신 에러 변경: E-Stop 엔드포인트와의 연결이 끊긴 상태에서 로봇 전원을 켤 경우, 기존 STATUS_ESTOPPED 코드 대신 STATUS_KEEP_ALIVE_MOTOR_OFF가 반환됩니다. Python 코드에서는 EstoppedError 대신 KeepaliveMotorsOffError 예외(Exception)가 발생합니다.
- 구조가 잘못된(Malformed) Graph Nav 맵은 업로드 과정에서 즉각 거부되도록 검증 로직이 강화되었습니다.
5. 지원 중단 (Deprecations)
⚠️ 주의: 다음 기능들은 3.3.0 버전에서 정상 동작하지만 향후 릴리즈에서 제거될 예정입니다.
- NetworkComputeBridge 구조 개편: 기존 워커 서비스의 NetworkCompute RPC가 지원 중단(Deprecated)되며 신규 WorkerCompute RPC로 교체됩니다. 메시지 필드의 인풋 파라미터(input_data → input_data_bridge) 및 이미지 관련 속성명 변경이 수반됩니다.
- Graph Nav의 직선형 계단 표현 모델(StraightStaircase)이 새로운 모델(StaircaseWithLandings)로 대체되었습니다.
- BaseClient 내부의 강제 직렬화 기반 로그 기록용 메서드(request_trim_for_log, response_trim_for_log)가 지원 중단되었습니다. 정규 % 기반 포매팅 로직을 활용해야 합니다.
6. 알려진 문제 (Known Issues)
- 서비스 등록 직후 에러: 로봇 시스템에 신규 커스텀 서비스(Data acquisition plugin 등)를 등록한 직후, robot.ensure_client()를 호출하면 등록되지 않은 서비스명(UnregisteredServiceNameError) 에러가 발생할 수 있습니다.
- 해결 방법: 클라이언트 생성 전 반드시 robot.sync_with_directory()를 호출하여 디렉터리를 동기화하십시오.
- SE2VelocityLimits의 속도 제한 파라미터 구성 시, 속도 제한을 해제하고 싶은 특정 방향 축 필드를 누락시키지 말고 반드시 1e6과 같은 매우 큰 값을 입력해 명시적으로 채워주십시오.
- Mission 클라이언트와 Localnav 클라이언트가 각각 Body Lease와 Mobility Lease를 나눠 가지고 동시에 로봇 명령(Robot commands)을 요청하는 특수 상황에서, 피드백 응답 쿼리가 꼬이는 문제가 확인되었습니다.
7. 샘플 코드 업데이트 (Sample Code)
신규 (New)
- Arm Grasp Carry Overrides: 로봇 팔의 파지(Grasp) 및 운반(Carry) 모드 재정의 설정.
- Arm Impedance Control: 임피던스 제어 명령(Impedance commands) 활용.
- Inverse Kinematics: 신규 서비스인 역기구학 인터페이스 조작.
- Network Request Callback: 네트워크 엔드포인트를 쿼리하고 응답 문자열을 검사하는 콜백 구현.
- Scout - Hello Scout: Scout 웹 API 기반의 클라이언트 프로그래밍 기초 예제.
- User Nogo Region: World Object 서비스를 활용해 바디/발 장애물 형태의 유저 정의 통제 구역 설정하기.
업데이트 (Updated)
- 기존 예제(Arm_constrained_manipulation, Hello_spot, Spot CAM, Replay Mission 등)들이 3.3.0 API 스펙 변경에 맞추어 개선 및 확장되었습니다.
- Spot Detect and Follow 예제가 Spot 익스텐션(Extension) 환경에서의 구동 가이드 및 인증 절차를 포함하도록 업데이트되었습니다.