배포 라이선스 안내
Spot 1.1.0 SDK 소프트웨어는 새로운 소프트웨어 라이선스 정책이 적용되어 배포됩니다. 관련 세부 사항은 SDK 디렉터리 최상단의 LICENSE 파일에서 확인하실 수 있습니다.
1. 신규 기능 (New Features)
- ImageService 개선 (Depth Map 지원): Spot의 내장 스테레오 카메라에서 추출된 깊이 맵(Depth map)을 추가 이미지 소스로 제공합니다. ImageType 속성을 통해 깊이 맵과 일반 흑백(Grayscale) 이미지를 구분하여 호출할 수 있습니다.
- PayloadService 추가: 로봇에 장착 및 인식된 모든 페이로드(Payload)의 목록을 반환하는 신규 서비스가 도입되었습니다.
- SpotCheckService 추가: 액추에이터(Actuator) 및 카메라 캘리브레이션(Calibration)을 원격 및 프로그래밍 방식으로 실행할 수 있는 신규 서비스가 도입되었습니다.
- E-Stop 소프트 타임아웃 (Soft Timeouts): 기존에는 E-Stop 엔드포인트의 통신(Check-in)이 끊어질 경우 로봇 모터의 전원이 즉각 차단되어 낙하 등의 위험이 있었습니다. 이번 업데이트를 통해 전원 차단 전 Spot이 안전하게 '앉기(Sit)' 동작을 수행하도록 유예 시간을 구성할 수 있습니다. timeout 파라미터로 앉기 동작의 시작 시점을, cut_power_timeout 파라미터로 실제 전원 차단 시점을 제어합니다.
- 지형 정보 파라미터 (TerrainParams) 추가: MobilityParams에 지형 정보를 제공하는 TerrainParams가 추가되었습니다. 지면의 마찰 계수(Coefficient of friction)를 직접 설정하거나, 바닥 면이 격자형 금속(Grated metal)인지 여부를 시스템에 전달하여 보행 안정성을 높일 수 있습니다.
- 대용량 로그 파일 지원: 대용량 바이너리 데이터를 처리하기 위한 신규 Log Annotations 타입인 'Blob'이 추가되었습니다.
2. 샘플 코드 개편 및 추가 (Sample Code)
Python 예제 디렉터리의 구조가 python/examples 하위의 개별 디렉터리 형태로 재편되었습니다. 또한, 각 예제별로 의존성 패키지 설치를 위한 requirements.txt 파일이 포함되었습니다.
- estop: 로봇의 E-Stop 엔드포인트를 생성하는 데스크톱 GUI 유틸리티로, E-Stop 시스템의 구축 및 연동 방법을 학습할 수 있습니다.
- follow_fiducial: 내장 카메라로 AprilTag 마커를 인식하고 추적하는 예제입니다. 카메라의 내부/외부 파라미터(Intrinsics/Extrinsics)를 활용한 픽셀-월드 좌표계 변환 및 Trajectory Command 제어법을 제공합니다.
- get-image: Spot에서 이미지를 수신하여 디스크에 저장하는 ImageService의 기본 사용 예제입니다.
- get-payload: PayloadService를 통해 로봇의 전체 페이로드 목록을 조회하는 예제입니다.
- get_robot_state: 로봇의 현재 상태 데이터를 수신 및 확인하는 기본 예제입니다.
- hello_spot: (기존 유지) Spot SDK의 기본적인 사용법을 다루는 입문용 튜토리얼입니다.
- logging: Spot의 로그 파일에 사용자 지정 주석(Custom annotations)을 추가하는 예제입니다.
- spot_check: 현장에서 캘리브레이션을 수행하는 SpotCheck 서비스의 연동 예제입니다.
- spot_light: 전면 카메라에 플래시 라이트(Flashlight)가 감지될 경우, Spot이 제자리에서 회전하여 빛을 마주보도록 하는 비전 연동 데모입니다.
- spot_tensorflow_detector: Spot SDK와 TensorFlow 연동하여 이미지 기반 객체 분류(Object classification)를 수행하는 머신러닝 통합 예제입니다.
- time_sync: 로봇과 클라이언트 간의 시간 동기화를 위한 TimeSync 서비스 사용 예제입니다.
- wasd: (기존 유지) 키보드로 로봇을 수동 제어하며 다양한 명령어를 테스트할 수 있는 인터랙티브 프로그램입니다.
- xbox_controller: Xbox 컨트롤러를 활용하여 이동 명령(Mobility commands)의 고급 옵션을 제어하는 예제입니다.
3. 버그 수정 및 개선 사항 (Bug Fixes and Improvements)
- 보안 및 인증 강화: 무차별 대입 공격(Brute-force attack)을 방지하기 위해 잘못된 로그인 시도가 초과될 경우 일정 시간 동안 인증이 잠금 처리됩니다. 이 상태는 GetAuthTokenResponse에서 STATUS_TEMPORARILY_LOCKED_OUT 코드로 반환됩니다.
- 통신 최적화: 사용자 토큰에 타원 곡선 암호화(ECDSA)를 적용하여 RPC 요청 크기를 수백 바이트 단위로 경량화했습니다.
- 호환성 개선: Python 3 환경에서 gRPC 예외(Exceptions)가 정상적으로 처리되도록 수정되었습니다.
- CLI 툴(Command-line tool) 기능 개선: 로봇의 유니코드(Unicode) 닉네임을 정상적으로 인식 및 처리합니다. 로봇 모델 정보(URDF 및 Object files) 조회 기능을 지원합니다. 한 번의 명령으로 다수의 이미지를 동시에 가져올 수 있도록 개선되었습니다.
- 버전 및 경로 인식 수정: 소프트웨어 버전에 대한 "Strict Version" 검증 및 표기를 지원합니다. 앱 토큰(App Token) 경로에 포함된 틸드(~) 기호가 환경에 맞춰 정상적으로 확장되도록 수정되었습니다.
- 이동 제어(Mobility Command) 버그 픽스: MobilityParams.vel_limit 속성 지정 시 최소(min) 또는 최대(max) 속도 중 하나만 입력할 경우 로봇이 멈추던 버그를 수정했습니다. BodyControlParams.base_offset_rt_footprint.reference_time의 값이 과거 시점으로 입력된 경우, 모호한 STATUS_INVALID_REQUEST 오류 대신 정확하게 STATUS_EXPIRED 상태 코드를 반환하도록 수정되었습니다. SE2VelocityCommands에서 slew_rate_limit가 지정되지 않았을 때 로봇이 제자리걸음만 하던 현상을 수정했습니다.
4. 지원 중단 및 주요 호환성 변경 (Deprecations and Breaking Changes)
⚠️ 개발자 주의 사항: 기존 애플리케이션을 1.1.0 버전으로 마이그레이션할 때 다음 사항을 반드시 확인하시기 바랍니다.
- Python 2.7 지원 종료: Python 2의 공식 수명 종료(End-of-Life)에 따라, 이번 SDK부터 Python 3.6 이상의 환경만 지원합니다. (Windows 10, MacOS, Ubuntu LTS 운영체제는 정상 지원됩니다.)
- HINT_PACE 지원 중단: 물리적인 보행 안정성 문제로 인해 HINT_PACE LocomotionHint 상수 지원이 완전히 제거되었습니다. 시스템으로 HINT_PACE 옵션을 전송할 경우, 내부적으로 HINT_JOG 모드로 강제 치환되어 동작합니다.
- 보행 힌트 상수명 변경 (Deprecated): 기존 HINT_AUTO_TROT 및 HINT_AUTO_AMBLE 상수의 사용이 중단(Deprecated)되었습니다. 향후 개발 시에는 각각 HINT_SPEED_SELECT_TROT, HINT_SPEED_SELECT_AMBLE 명칭으로 변경하여 적용해야 합니다.
- Protocol Buffer 구조 변경: 클라이언트 앱에서 프로토콜 버퍼(Protocol Buffer)를 참조할 때, 서비스(Services)와 메시지(Messages)가 물리적으로 분리된 디렉터리로 재배치되었습니다. 기존 코드에서 프로토콜 버퍼를 직접 임포트(Import)하여 사용 중인 경우 1.1.0 버전에 맞춘 경로 수정이 필요합니다.