카카오톡 문의 N 공식 블로그 공식 유튜브

SPOT Updates

패치 노트 및 제품 최신 업데이트

Major · 2022. 08.

Spot SDK 3.2.0 릴리즈 노트


배포 안내

이번 3.2.0 업데이트는 오토워크(Autowalk) 기능의 API 서비스 개방, 로봇 팔(Arm)의 임피던스 제어(Beta), 자율 주행 중 특정 구역에서의 동작을 제어하는 Area Callbacks 등 상위 레벨의 자율화 및 세밀한 하드웨어 제어 기능을 대거 포함하고 있습니다. 페이로드 연동과 미션 제어 시스템을 운영하는 실무 담당자는 아래의 세부 변경 사항을 반드시 확인하시기 바랍니다.

1. 신규 기능 (New Features)

오토워크 서비스 (Autowalk Service)
  • API 클라이언트가 편집하기 쉬운 포맷을 사용하여 Spot의 상위 레벨 자율 주행 동작을 지정할 수 있는 서비스가 추가되었습니다.
  • Autowalk 포맷은 액션(Actions)과 해당 액션이 수행될 위치(Locations)의 리스트 형태로 구성됩니다.
  • 사용자는 "A 위치로 이동하여 A 액션을 수행하고, B 위치로 이동하여 B 액션을 수행하라"와 같이 프로그래밍할 수 있습니다.
  • 해당 서비스는 Autowalk 시퀀스를 행동 트리(Behavior tree)로 컴파일하여 로봇에 업로드하며, 이후 Mission 서비스를 통해 재생됩니다. (기존에는 태블릿에서만 지원되던 기능이 모든 클라이언트 애플리케이션용 API 서비스로 개방되었습니다.)
Arm 임피던스 제어 (Arm Impedance Control - Beta)
  • 엔드이펙터(End effector)에 가상의 스프링(Virtual springs)과 힘을 지정할 수 있는 기능이 추가되었습니다.
  • 가상 스프링에 이끌려 손(또는 손에 부착된 도구)이 따라가야 할 궤적을 지정할 수 있으며, 엔드이펙터가 가할 수 있는 추가적인 피드포워드 렌치(Feed-forward wrench: 힘 + 토크)를 더할 수 있습니다.
  • 펙-인-홀(Peg into a hole, 구멍에 핀 삽입)이나 표면을 따라 미끄러지는(Sliding along a surface) 작업 등에 매우 유용합니다.

⚠️ 베타 버전 주의 사항: 해당 기능은 베타 릴리즈로 제공되며, 잘못된 파라미터 지정 시 로봇이나 주변 환경에 손상을 입힐 수 있으므로 각별한 주의가 필요합니다. 현재 임피던스 명령으로 달성 가능한 최대 강성(Stiffness)은 ArmCartesianCommand보다 낮으므로, 높은 위치 정밀도가 요구되는 경우 ArmCartesianCommand나 ArmSurfaceContact를 사용해야 합니다.

Graph Nav – 구역 콜백 (Area Callbacks)
  • 자율 주행 중 맵의 특정 구역(Area)에 진입할 때 호출되는 콜백을 등록할 수 있는 기능이 추가되었습니다.
  • 해당 구역이 건너기 안전해질 때까지 로봇을 대기(예: 횡단보도 대기)시키거나, 로봇의 제어권을 가져와 특정 액션(예: 문 열기)을 수행하게 하거나, 해당 구역 내에서 백그라운드 작업(예: 경고등 점멸, 사운드 재생)을 실행할 수 있습니다.
  • Graph Nav 네비게이션 시스템과 연동되어 주행 중 안전성 확보 및 새로운 액션 수행 능력을 확장합니다.
팬 전원 제어 (Fan Power Control)
  • 일정 시간 동안 로봇의 냉각 팬 작동을 특정 퍼센트 레벨(0: 꺼짐 ~ 100: 최대 출력)로 제어하도록 요청하는 팬 명령(Fan Commands)이 추가되었습니다.
  • 오디오 녹음 등 팬 소음을 일시적으로 제거해야 하는 유스케이스에 적합합니다.
  • 참고: 팬 명령이 승인되더라도, 로봇 내부 온도가 너무 높아 시스템이 제어권을 강제로 회수하거나 다른 팬 명령이 덮어쓰는 경우 지정된 시간 동안 유지되지 않을 수 있습니다.
지면 장애물 감지 (Ground Clutter)
  • 해당 기능 활성화 시, 로봇이 미션 재생 중 높이 30cm 미만의 낮은 물체를 장애물로 간주하고 회피합니다.
  • 로봇은 미션을 레코딩(Recording)할 당시 밟았던 표면만 안전한 발판으로 인지하고 오르내립니다.
  • 로봇이 환경 내의 작은 물체(실제 존재하는 물체 또는 센서 노이즈)를 감지하여 예기치 않은 우회 경로를 선택할 수 있습니다. (단, 연장선과 같이 매우 작은 물체는 계속해서 무시될 가능성이 높습니다.)
공식 문서 추가 (Documentation)
  • CORE I/O: 기존 Spot CORE 페이로드를 대체하는 신규 CORE I/O의 기능 설명 문서가 추가되었습니다.
  • Spot Extensions: 애플리케이션을 패키징하여 CORE I/O에서 Spot Extensions 형태로 실행하기 위한 개선된 기능 및 가이드 문서가 추가되었습니다.

2. 버그 수정 및 개선 사항 (Bug Fixes and Improvements)

안무 및 모션 API (Choreography API)
  • 지원 중단 및 추가: 기존 known_sequences 필드가 지원 중단(Deprecated)되었으며, 로봇이 인식하고 있는 안무 시퀀스 목록을 제공하는 SequenceInfo가 추가되었습니다.
  • 신규 RPC 추가:
    • DeleteSequence: 저장된 시퀀스 파일을 삭제하여 재부팅 시 해당 시퀀스가 초기화되도록 합니다.
    • SaveSequence: 안무 시퀀스를 로봇 메모리에 파일로 기록하여 재부팅 후에도 유지되도록 합니다.
    • ModifyChoreographyInfo: 안무 시퀀스의 메타데이터를 편집하고 연관된 파일들을 업데이트합니다.
    • ClearAllSequenceFiles: 영구 저장되지 않은 모든 안무 관련 파일을 삭제하여 초기화 상태(Clean slate)로 되돌립니다.
도킹 및 기하학 (Docking & Geometry)
  • DockingCommandFeedbackRequest에 특정 명령 ID의 파라미터를 업데이트할 수 있는 UpdateDockingParams 필드가 추가되었습니다.
  • 도킹 피드백(DockingCommandFeedbackResponse)에 로봇이 도킹을 제대로 진행하지 못하고 있음을 알리는 STATUS_ERROR_STUCK 에러 상태 코드가 추가되었습니다.
  • geometry.proto에 Matrixf, MatrixInt64, MatrixInt32, Vector 타입이 추가되었습니다.
자율 주행 및 맵 관리 (GraphNav)
  • SetLocalizationRequest에 시각적 특징(Visual features) 또는 ICP를 사용하여 마커(Fiducial) 결과를 미세 조정(Refining)할 수 있는 refinement 필드가 추가되었습니다.
  • SetLocalizationResponse에 시각적 특징 기반 정렬에 실패하거나 포즈 솔루션이 불안정함을 알리는 STATUS_VISUAL_ALIGNMENT_FAILED 상태 코드가 추가되었습니다.
  • TravelParams에 path_following_mode, blocked_path_wait_time, ground_clutter_mode 필드가 추가되었습니다.
  • 현재 로드된 맵의 유효성을 검사하는 ValidateGraph RPC가 추가되었습니다.
미션 제어 (Missions)
  • Question 메시지에 질문의 심각도를 나타내는 severity 필드가 추가되었습니다.
  • 미션 정의(nodes.proto)에 특정 pivot_value를 기반으로 특정 자식(Child) 노드를 실행하는 Switch 노드가 추가되었습니다.
  • Repeat 노드에 자식 노드의 성공/실패 여부에 관계없이 반복 실행할지를 제어하는 respect_child_failure 플래그가 추가되었습니다.
  • BosdynRecordEvent 메시지에 대기 시간을 제어하는 succeed_early 필드와 런타임 파라미터를 지원하는 additional_parameters 필드가 추가되었습니다.
  • RemoteGrpc 메시지에 프롬프트가 트리거하는 알람의 종류를 결정하는 severity 필드가 추가되었습니다.
데이터 수집 및 서비스 연동
  • 데이터 수집(DAQ) 요청 시, 기존 image_source 및 image_format 필드를 지원 중단하고 전체 파라미터를 포함하는 ImageRequest를 적용했습니다.
  • Network Compute Bridge: NetworkComputeRequest의 필드를 기존 image_source와 더 포괄적인 ImageRequest 중 하나를 선택하도록 업데이트하였으며, 모델이 생성한 이미지를 출력하기 위해 NetworkComputeResponse에 output_images 필드를 추가했습니다.
  • Spotcheck: Arm 관절 엔드스톱(Endstops) 및 교차 오류 검사가 진행 중임을 나타내는 상태 코드(STATE_ARM_JOINT_CHECK) 및 충돌/타임아웃 에러 코드(ERROR_ARM_CHECK_COLLISION, ERROR_ARM_CHECK_TIMEOUT 등)가 대거 추가되었습니다.

3. SDK 주요 업데이트 (SDK)

  • 신규 Autowalk 기능을 지원하기 위한 AutowalkClient가 추가되었습니다.
  • 시스템 로그 텍스트를 Data-buffer 서비스로 발행하는 LoggingHandler 클래스가 data_buffer.py에 추가되었습니다.
  • Python PowerClient에 팬 전원 제어 및 피드백 메서드가 추가되었으며, 로봇 온도가 너무 높아 팬 제어 명령을 수락할 수 없을 때 발생하는 FanControlTemperatureError가 추가되었습니다.
  • robot_command.py에 로봇이 추정하는 페이로드 질량을 가져오는 payload_estimation_command 메서드가 추가되었습니다.
  • server_util.py의 ResponseContext에 예외 발생 시 호출되는 exc_callback 함수 인수가 추가되었습니다.

4. 지원 중단 및 호환성 변경 (Deprecations)

⚠️ 개발자 주의 사항: 다음 기능들은 지원 중단(Deprecated) 처리되어 향후 제거될 예정이므로 대체 API로 코드를 업데이트하시기 바랍니다.

  • 안무 API의 known_sequences가 지원 중단되고 신규 SequenceInfo로 대체됩니다.
  • DAQ 요청 시 image_source 및 image_format 필드가 지원 중단되고 ImageRequest로 대체됩니다.
  • MobilityParams의 stair_hint 부울(Boolean) 필드가 지원 중단되고 stairs_mode 필드로 대체됩니다.
  • LogAnnotationHandler가 지원 중단되고 bosdyn.client.data_buffer.LoggingHandler로 대체됩니다.
  • PowerClient의 safe_power_off 메서드가 지원 중단되고, 의미가 더 명확한 safe_power_off_motors 함수로 대체됩니다.
  • 기존 Spot CORE 문서는 지원 중단되며 'Pre-3.2 Spot CORE Documentation' 아카이브로 이동되었습니다.

5. 알려진 문제 (Known Issues)

  • 네트워크 전송 실패 시 운영 체제 및 gRPC 버전에 따라 명확한 예외(예: UnknownDnsNameError) 대신 포괄적인 RpcError 또는 UnableToConnectToRobotError가 발생할 수 있습니다.
  • 커스텀 데이터 수집 플러그인이나 이미지 서비스가 실행 및 등록된 상태에서 DataAcquisitionCapability 또는 ImageSource 설정을 동적으로 변경하지 마십시오. 변경이 필요한 경우 디렉터리에서 등록을 해제하고 캐시 갱신을 기다린 후 재등록해야 합니다.
  • 헬퍼 클래스를 사용하지 않고 자체 작성한 데이터 수집 플러그인의 GetStatus() RPC 처리가 지연될 경우, 시스템 전체 데이터 수집 서비스에 타임아웃을 유발할 수 있습니다.
  • 신규 서비스를 등록한 직후 robot.ensure_client()를 호출하면 등록되지 않은 서비스명 에러(UnregisteredServiceNameError)가 발생할 수 있습니다.
    • 임시 해결 방법: ensure_client() 호출 전 robot.sync_with_directory()를 먼저 호출하십시오.
  • SE2VelocityLimits 메시지 사용 시, 제한하지 않을 필드를 비워두지 말고 반드시 1e6과 같은 큰 값으로 완전히 채워야 합니다.
  • Mission 클라이언트(Body Lease 소유)와 Localnav 클라이언트(Mobility Lease 소유)가 동시에 동기식 명령을 보낼 경우 피드백 응답이 꼬이는 현상이 있습니다.

6. 샘플 코드 업데이트 (Sample Code)

현장 구축을 돕기 위해 다음과 같은 다수의 예제 코드가 추가 및 갱신되었습니다.

신규 추가 (New)
  • Area Callback: 횡단보도 구역(Crosswalk)에서 동작하는 Area Callback 액션 구현 예제.
  • Arm Impedance Control: 임피던스 명령을 로봇으로 전송하는 제어 예제.
  • CORE I/O GPIO: CORE I/O의 GPIO 핀을 제어하여 외부 LED를 점멸시키는 하드웨어 연동 예제.
  • Edit Autowalk: API를 통해 Autowalk를 편집하고 재실행하는 예제.
  • Fan Commands: 팬 제어 명령을 호출하고 피드백을 수신하는 콜백 작성용 템플릿 예제.
주요 업데이트 (Updated)
  • Docking: 도킹 해제(undock) 함수가 추가되었습니다.
  • GraphNav Command-Line / Fiducial Follow: Lease(제어 권한) 사용 방식이 안정적으로 개선되었습니다.
  • Network Compute Bridge / Post Docking Callback / Spot Detect and Follow: 예제 코드를 Spot Extension으로 패키징 및 생성하기 위한 구성(Configuration) 파일이 추가되었습니다.
  • SpotCAM: WebRTC 클라이언트의 CLI 자격 증명 의존성 버그 수정, IR 미터(ir meter) 예제 추가, PTZ 포커스 제어 및 노출(Exposure) 설정 호출 기능이 업데이트되었습니다.