XM10 Extension Module SDK v2.1.1¶
Release date: 2026-04-04 | Target HW: Rev1.1 / Rev2.0 | KIT H10 FW: v2.3.0+
Highlights¶
- New bootloader (
AGR_Bootloader) introduced for the first time — upload firmware over USB with PhAI Studio - Dual HW revision SDK shipped in a single release — Rev1.1 and Rev2.0 SDKs bundled together
- 44 examples — a complete learning path from beginner to advanced control (Impedance, CPG, ILC, MRAC, DOB, and more)
- Enhanced PhAI Studio integration — automatic Total Data Packet streaming + User Custom channels
- xm_api_freertos added — background task API
- Full debugging support — Live Expressions and breakpoints work correctly
Downloads¶
SDK (included in the repository)¶
| Item | Path | Description |
|---|---|---|
| SDK Rev1.1 | XM10_SDK/Rev1.1/Extension_Module/ |
Project for PCB Rev1.1 |
| SDK Rev2.0 | XM10_SDK/Rev2.0/Extension_Module/ |
Project for PCB Rev2.0 (adds ETH, PSRAM, RTC) |
Release attachments¶
| File | Description | Notes |
|---|---|---|
AGR_Bootloader.bin |
XM10 bootloader binary (v1.1.0) | Program to 0x08000000 |
SUIT_CM_APP_X_X_X.bin |
KIT H10 CM firmware | See H10 FW update guide |
SUIT_SAM10_APP_X_X_X.bin |
KIT H10 MD (SAM10) firmware | Same guide |
SUIT_ESP32_FW_X_X_X.bin |
KIT H10 ESP32 firmware | Same guide |
ContentsFiles.zip |
SD card contents files (FSM / MotionMap / RobotSetting) | Updated separately |
Tools¶
| Tool | Link |
|---|---|
| PhAI Studio (FW upload, sensor monitoring) | studio.onephai.com |
| STM32CubeProgrammer (first-time bootloader installation) | st.com |
Full changelog from v2.0.1¶
New features¶
New bootloader (new)¶
- Upload firmware over USB with PhAI Studio (USB FTP)
- Automatic backup and rollback — restores the previous version after 3 consecutive boot failures
- CRC-32 firmware integrity verification
- Single bootloader binary for both Rev1.1 and Rev2.0 (it tells the board revision apart automatically)
- Detailed guide: docs/bootloader/README.en.md
Dual HW revision SDK¶
XM10_SDK/Rev1.1/— for PCB Rev1.1 only (CAN-FD only)XM10_SDK/Rev2.0/— for PCB Rev2.0 only (CAN-FD + Ethernet + PSRAM + RTC)- Each SDK is a self-contained STM32CubeIDE project — ready to build immediately after import
xm_api_freertos — background task API (new)¶
XM_BgTask_Create()— runs heavy computation in a separate task without disturbing the 1 kHz control loop- This task runs at a lower priority than the control loop, so the loop is unaffected
- Do not call control APIs such as
XM_SetAssistTorquefrom a background task — share data viavolatilevariables instead
Automated build finishing¶
- When you build in STM32CubeIDE, the final build step runs automatically and produces the upload file (Python required)
- Final output:
XM10_X_X_X_X.bin(packaged binary for PhAI Studio upload)
Major example expansion (20 → 44 examples)¶
- Physical AI torque control series (Ex.20–33): Impedance, Gravity Compensation, CPG, Gait Phase Adaptive, Virtual Constraint, Stance Stiffness, ILC, MRAC, Admittance, Bilateral, FF/FB Hybrid, Friction DOB, GRF Gait Intent, Kinesthetic Teaching
- MSC logging series (Ex.10–10c): Basic → Custom Struct → Advanced (Rolling, Markers)
- Gait analysis logging (Ex.34): Automatic H10 gait data collection + Python decoder
- Ex.35 MultiLayer Transparent Control — multi-layer transparent control (new)
- Ex.36 OnDevice Kinesthetic Learning — on-device motion learning (new)
Enhanced PhAI Studio integration¶
- Total Data Packet (Module ID 0x20, 365 B): streamed automatically by the system at 1 kHz
- User Custom channels (Module ID 0xF0–0xFE):
XM_SetUsbCustomMeta()+XM_SendUsbDataWithId() - Auto-Stream: streaming starts automatically on USB connection (no separate start command needed)
Improvements¶
Total Data Packet¶
- Separate CAN-FD channel 1 and channel 2 communication-status diagnostics are now included
timestamp_msrenamed toxm_loop_count(the control-loop execution counter — you can tell when the loop gets blocked)
Build system¶
- Debugging works:
libXM_Lib.anow carries debug symbols, so Live Expressions and breakpoints work correctly (Rev1.1: 66 MB, Rev2.0: 88 MB) - No effect on the Flash binary size (debug symbols are in the
.elfonly) - Linker setting restored: fixed the runtime memory corruption that had been solved in v2.0.1 but came back in v2.1.0 (applied to both the CubeIDE project and
CMakeLists.txt) CMakeLists.txtcleanup: removed unused paths, fixed folder-name capitalization (Xsens→XSENS)- Start-up code updated for projects generated with newer CubeMX (6.13 and later)
Example tuning¶
- Ex.11 Passive Mode / Ex.12 Active Assist Mode: homing acceleration 4 → 2 deg/s², IVectorKpKd (6, 1) → (6, 6), PVectorReset added
KIT H10 FW changes (based on v2.3.0)¶
Key fixes in the H10 CM firmware:
- BLE app mode synchronization: when the mode is changed from the BLE app, the H10's CM follows immediately
- XM10 ↔ CM CAN-FD synchronization improved
- Gait analysis counter added: the gait-analysis post-processing count can now be read from outside
- Left IMU data fix: corrected an error where the left IMU data was mapped wrongly
For H10 FW update instructions, see: docs/kit-h10-firmware/README.en.md
Removed¶
- Root copy of
user_app.cremoved (managed exclusively underXM_Apps/User_Algorithm/)
Compatibility matrix¶
| Component | Minimum version | Recommended version | Notes |
|---|---|---|---|
| XM10 FW (this SDK) | v2.1.1 | v2.1.1 | Separate libXM_Lib.a for Rev1.1 / Rev2.0 |
| XM10 bootloader | v1.1.0 | v1.1.0 | Single binary (shared by Rev1.1 / Rev2.0) |
| KIT H10 CM | v2.3.0 | v2.3.0+ | Includes the BLE sync fix |
| KIT H10 ESP32 | v2.3.0 | v2.3.0+ | |
| KIT H10 SAM10/MD | v2.3.0 | v2.3.0+ | |
| ContentsFiles | 2025.02 | Latest | Update on SD card |
| STM32CubeIDE | v1.13.2 | v1.14.1+ | GCC 13.3 required |
| Python | 3.8+ | 3.12+ | Needed for the final build step |
| PhAI Studio | — | Latest | studio.onephai.com |
Quick start guide¶
1. Install the bootloader (one-time)¶
Details: docs/bootloader/README.en.md
- Use STM32CubeProgrammer to perform a Full Chip Erase.
- Program
AGR_Bootloader.binto address0x08000000.
2. Open the SDK project¶
- Download the ZIP for your board revision (
Rev1.1.zip/Rev2.0.zip) from Releases and extract it. - In STM32CubeIDE, go to Import → Existing Projects into Workspace.
- Select the extracted folder (the one containing the
.projectfile). - Build (Ctrl+B) — the final build step runs automatically.
3. Upload firmware¶
- During development: use STM32CubeIDE Debug (F11) via SWD, start address
0x08040000 - For distribution: PhAI Studio → FW Upload → select
XM10_X_X_X_X.bin
4. Update KIT H10 firmware¶
Details: docs/kit-h10-firmware/README.en.md
Copy the bundled H10 FW binaries to a USB drive, connect it to the H10, and follow the update procedure.
Known issues¶
- The Rev1.1 SDK uses 98.65% of one of its memory regions. Exercise caution when allocating large buffers.
- After a build, check that the version in
version.hmatches the release version (the version is taken from the git tag of the current folder). - Python must be on the system
PATHfor the final build step. If it is not recognized even after restarting STM32CubeIDE, check your system environment variables. libXM_Lib.ais 66–88 MB because of its debug symbols, but this has no effect on the final Flash binary size.
Note for v2.1.0 (Pre-Release) users¶
Two issues found in v2.1.0 were fixed in v2.1.1:
- Missing linker setting → memory could get corrupted while the firmware was running
- Build without debug symbols → Live Expressions and breakpoints did not work
Use v2.1.1. Do not use v2.1.0.
This release is for the XM10 Extension Module, Angel Robotics' Physical AI platform.