콘텐츠로 이동

XM10 Extension Module SDK v2.8.1

릴리즈 날짜: 2026-10-07 | 대상 보드: Rev 1.1 · Rev 2.0 | 바뀐 이름: PC 도구 폴더 pc-data-tool


한눈에 보기

  • PC 도구가 여러 구조체를 한 번에 다룹니다. 실시간 화면이 Module ID 마다 탭으로 나뉘고, CSV 도 모듈마다 따로 저장됩니다.
  • CAN-FD 로 받는 데이터의 결함을 고쳤습니다. 수신 버퍼가 가득 찼을 때 내용이 빈 메시지가 끼어들 수 있었습니다(Rev 1.1 · Rev 2.0).
  • PC 도구 폴더 이름이 pc-data-tool 로 바뀌었습니다. 기능과 사용법은 그대로입니다.
  • EMG Hub 캘리브를 XM API 로 보냅니다 — XM_SendEmgHubCalCommand() (Rev 2.0).
  • 예제 수 — Rev 2.0 45 개 / Rev 1.1 40 개.
  • 함께 올리는 부트로더가 v1.1.0 으로 바뀌었습니다. 부팅이 빨라지고, 리셋이 계속 반복되면 멈추고 펌웨어 업로드를 기다립니다(Rev 2.0). 아직 보드로 확인하지 않았습니다.

PC 데이터 도구 — 모듈별 탭

xm10.py recv 의 실시간 화면은 지금까지 처음 들어온 사용자 Module ID 하나만 그렸습니다. 이번부터 Module ID 마다 탭이 하나씩 생깁니다.

  • 탭 제목은 채널 이름(채널이 하나일 때)이나 Module ID 로 붙습니다.
  • 보고 있지 않은 탭도 저장은 계속됩니다. CSV 는 Module ID 마다 하나씩 생깁니다 — cdc_phai_<시각>_user_0xF0.csv, cdc_phai_<시각>_user_0xF1.csv.
  • Show 0x20 tab 을 켜면 Total Data 197 채널을 표로 봅니다(초당 5 번 갱신).
  • 데이터가 몰려 들어와도 화면이 멈추지 않게 했고, 연결을 끊거나 창을 닫을 때 남은 데이터까지 저장합니다.

.xmlog — 다시 연결해도 섞이지 않습니다

  • 다시 연결할 때마다 새 구간으로 기록합니다. 같은 초에 다시 시작해도 파일을 덮어쓰지 않습니다.
  • CSV 로 뽑을 때는 각 행을 그 행을 받을 때 유효했던 구조체 정의로 풉니다. 정의가 바뀐 모듈은 CSV 가 ..._user_0xF0_schema2.csv 처럼 나뉩니다.
  • 창에서 Disconnect 뒤 Connect 만 다시 눌러 받은 .xmlog 에는 채널 이름이 없습니다(화면에는 그대로 남습니다). 지금 펌웨어는 USB 가 새로 잡힐 때 한 번만 이름을 보내기 때문입니다.

폴더 이름이 바뀌었습니다 — pc-data-tool

SDK 안 PC 도구 폴더가 PythonDecoder/ 에서 pc-data-tool/ 로 바뀌었습니다. 안의 파일과 사용법은 그대로이고 경로만 바뀝니다.

cd Extension_Module\pc-data-tool
python xm10.py demo

v2.8.0 ZIP 을 쓰고 계시면 그 폴더 이름은 계속 PythonDecoder 입니다 — 같은 도구입니다.


고친 것

CAN-FD 로 받는 데이터 (Rev 1.1 · Rev 2.0)

CAN-FD 수신 버퍼가 가득 찼을 때 다음에 읽을 위치를 잘못 계산해, 내용이 빈 메시지가 끼어들 수 있었습니다. H10 이나 센서 허브처럼 CAN-FD 로 받는 데이터가 대상입니다. 이번에 읽는 방식을 고쳤습니다.

Ex.41 IMU Hub Dashboard — 채널 이름이 나옵니다 (Rev 2.0)

채널 이름 목록이 512 B 를 넘어서 보내지지 않았고, PC 에는 ch0, ch1… 로만 보였습니다. 단위를 이름 안에 넣어 487 B 로 줄였습니다.

Ex.33 Kinesthetic Teaching

실제 동작과 다른 출력 문구 한 줄을 지웠습니다.


새 API — EMG Hub 캘리브 (Rev 2.0)

if (XM_GetButtonEvent(XM_BTN_1) == XM_BTN_CLICK) XM_SendEmgHubCalCommand(XM_EMG_HUB_CAL_OFFSET);  // 근육을 이완한 상태
if (XM_GetButtonEvent(XM_BTN_2) == XM_BTN_CLICK) XM_SendEmgHubCalCommand(XM_EMG_HUB_CAL_MVC);     // 최대로 수축한 상태
bool calib_valid = (XM.status.emg_hub.status_flags & XM_EMG_HUB_STATUS_CALIB_VALID) != 0U;
  • 허브가 연결되지 않았거나 보내지 못하면 false 를 돌려줍니다.
  • 버튼을 눌렀을 때처럼 가끔 한 번씩만 부르세요. 매 루프마다 부르지 마세요.
  • Ex.42 EMG Hub Biofeedback 이 이 함수를 쓰도록 바뀌었습니다.
  • EMG Hub 는 내부에서 개발 중인 모듈입니다. 사용하려면 https://huphailab.com/contact 로 문의해 주세요.

예제 개수

Rev 2.0 45 개 / Rev 1.1 40 개.

  • Ex.37(FES Hub) 삭제 — FES Hub 는 현재 XM10 연결을 지원하지 않습니다.
  • Rev 1.1 SDK 에서 Ex.36 제외 — Rev 2.0 에만 있는 저장 기능(XM_UserNV_*)을 써서 Rev 1.1 에서는 빌드되지 않던 예제입니다. Rev 2.0 SDK 에는 그대로 있습니다.

부트로더 v1.1.0

이번 릴리즈에 올리는 부트로더(AGR_Bootloader.bin)는 v1.1.0 입니다. Rev 1.1 · Rev 2.0 보드에 같은 파일을 씁니다. 아직 보드로 확인하지 않았습니다.

  • 부팅이 빨라집니다. 부팅할 때 LED 가 차례로 켜진 뒤 1~2 초 동안 모두 꺼져 있던 구간이 없어집니다.
  • 리셋이 계속 반복되면 멈추고 기다립니다 (Rev 2.0). 펌웨어가 시작된 뒤 5 초를 넘기지 못하고 다시 시작되는 일이 10 번 연속 생기면, 부트로더가 펌웨어를 실행하지 않고 보드 LED 3 개를 함께 깜빡이며 펌웨어 업로드를 기다립니다. PhAI Studio 로 펌웨어를 다시 올리면 풀립니다.
  • 부팅 진단 기록 — 보드가 리셋을 반복할 때 원인을 찾을 수 있도록, 리셋 원인과 부팅 단계를 보드에 남깁니다. Rev 2.0 펌웨어는 펌웨어 쪽 단계도 함께 남깁니다.

이미 부트로더가 설치된 보드는 바꾸지 않아도 됩니다. v2.8.1 펌웨어는 이전 부트로더로도 동작하고, 이때는 위의 '멈추고 기다림'이 없습니다. 부트로더만 바꿀 때는 STM32CubeProgrammer 에서 Full chip erase 를 하지 말고 AGR_Bootloader.bin 을 0x08000000 에 올리세요. 펌웨어는 그대로 남습니다 — 부트로더 안내 3 절.


아직 확인하지 못한 것 — 꼭 읽어 주세요

  • 보드로 아직 확인하지 못한 것: Ex.41 채널 이름 표시(xm10 도구), Ex.42 캘리브(EMG Hub), 부트로더 v1.1.0(리셋 반복 시 멈춤 포함), 부팅 진단 기록, Rev 1.1 의 CAN-FD 수신 변경. 빌드와 PC 쪽 시험으로 확인했습니다. 써 보시다가 이상한 점이 있으면 알려 주세요.
  • 지금 펌웨어는 구조체 정의(0xEE)를 보내지 않습니다. 그래서 PC 는 사용자 채널을 float32 로 가정해 보여 줍니다(v2.8.0 과 같습니다). 위의 '구조체 정의로 풀기' 는 만들어 둔 데이터로만 확인했습니다.

호환성

항목 내용
기존 펌웨어 코드 재빌드만 하면 됩니다. 삭제되거나 이름이 바뀐 공개 API 없음
PC 데이터 도구 폴더 이름만 pc-data-tool 로 바뀜. 필요한 Python 패키지는 그대로 (pyserial pyqt5 pyqtgraph numpy)
Rev 1.1 CAN-FD 수신 수정 · Ex.36 제외(예제 40 개)
Rev 2.0 CAN-FD 수신 수정 · EMG Hub 캘리브 API · Ex.41 채널 이름 · 부팅 진단 기록 · 리셋 반복 시 멈춤(부트로더 v1.1.0 과 함께 쓸 때)
부트로더 v1.1.0 으로 바뀜. 이미 설치된 부트로더는 바꾸지 않아도 됩니다

다운로드

파일 대상
Rev2.0.zip Rev 2.0 보드용 SDK (예제 45 개, pc-data-tool/ 포함)
Rev1.1.zip Rev 1.1 보드용 SDK (예제 40 개, pc-data-tool/ 포함)
AGR_Bootloader.bin XM10 부트로더 v1.1.0 — Rev 1.1 · Rev 2.0 공통 (아직 보드로 확인하지 않음)
SUIT_H10_Binary_20260820.zip KIT H10 펌웨어 — v2.6.0 과 동일본
SUIT_ContentsFiles_20260820.zip H10 컨텐츠 파일 — v2.6.0 과 동일본

H10 관련 2 개 파일은 v2.6.0 것을 그대로 다시 올린 것입니다.

압축을 풀 때 짧은 경로(예: C:\xm10\)에 푸세요. 경로가 깊으면 윈도우의 경로 길이 제한 때문에 빌드가 실패할 수 있는데, 이건 코드 문제가 아니라 경로 길이 문제입니다.


관련 문서