Tutorials — 48 개 예제로 배우기¶
XM10 기능을 단계적으로 익힐 수 있도록 48 개 예제를 준비했습니다. 각 폴더에 소스 코드와 README 가 함께 있고, README 는 모두 같은 형식 (목표 → 사전 지식 → 핵심 코드 → 실험 → 다음 단계 + 흔한 실수) 으로 정돈되어 있습니다. 기초 예제 (Ex.09 이하)는 30 분 안에 끝나도록 설계했습니다. 다만 제어·고급 예제 (Ex.11 이상)는 난이도에 따라 45 분에서 수 주가 걸릴 수 있습니다.
예제 전체 카탈로그는 examples/README.md 에 있고, 막히면 각 README 맨 아래의 "흔한 실수" 섹션을 먼저 보세요. Claude Code 사용자라면 "Ex.XX 가 안 돼" 라고만 말해도 example-helper 가 해당 예제의 흔한 실수 + 트러블슈팅 문서를 인용해 답해줍니다.
추천 순서¶
자기 수준에 맞는 경로 하나를 골라 따라가면 됩니다.
| 경로 | 대상 | 순서 | 예상 시간 |
|---|---|---|---|
| 입문 | 임베디드 처음 — 일단 동작 확인까지 가보기 | Ex.00 → 01 → 04 → 07 → 09 → 11 | 3 시간 정도 |
| 중급 | 임베디드 기초 있음 — 통신·실시간 제어 | Ex.02 → 05b → 08 → 09 → 12 → 14 → 18 | 1 주 정도 (자율 학습 기준 하루 1~2 시간) |
| 고급 | 제어 알고리즘 + AI 직접 설계 | Ex.03 → 09 → 15 → 16 → 17 → 19 → 20+ | 한 학기 정도 (Ex.20+ 부터 한 예제당 1~2 주) |
| Physical AI 응용 | 재활·학습 제어 등 | Ex.21 → 31 → 32 → 33 → 36 | 자기주도 학습 (난이도 별로 ⭐⭐⭐) |
예상 시간은 일반 사용자 기준입니다. "고급" 의 한 학기는 개별 예제마다 1~2 주씩 들여 깊이 학습한다고 가정한 것입니다. 짧게 훑기만 하면 며칠로도 가능하지만, 변형 실험과 논문 출처까지 따라가면 그만큼 시간이 필요합니다.
한 학기 (16 주) 수업 진도표 예시¶
대학 수업으로 운영할 경우 한 학기를 분할한 참고 진도표입니다. 사용자 수준과 보드 수령 시점에 따라 자유롭게 조정하세요.
| 주차 | 주제 | 예제 | 과제 / 산출물 |
|---|---|---|---|
| 1 | 환경 구축 + 첫 빌드 | Ex.00 | 보드 LED 점등 시연 영상 |
| 2 | 버튼 + LED + 상태 머신 | Ex.01 → 02 → 03 | 자기만의 LED 모드 4 가지 추가 |
| 3 | 외부 GPIO + ADC | Ex.04 → 05 → 05a | 외부 스위치로 LED 4 개 제어 |
| 4 | 다채널 ADC + 안전 스위치 | Ex.05b → 05c → 06 | FSR 8 채널 동시 측정 시연 |
| 5 | USB 시리얼 통신 | Ex.07 → 08 | PC 터미널로 센서값 실시간 모니터링 |
| 6 | 바이너리 스트리밍 + xm10 도구 | Ex.09 | 4 채널 그래프 캡처 + 분석 보고서 |
| 7 | USB-CDC 데이터 수집 + 저장 | Ex.09 + xm10 도구 | 10 분 데이터 스트리밍 → .xmlog 저장 → CSV 로 뽑아 분석 |
| 8 | 중간고사 / 프로젝트 1 | (자유) | "내 보드, 내 데이터" 미니 프로젝트 발표 |
| 9 | KIT H10 외골격 기본 모드 | Ex.11 → 12 → 13 | 3 가지 모드 비교 영상 |
| 10 | PD 실시간 제어 | Ex.14 | 자기 PD 게인 튜닝 + 응답 비교 |
| 11 | 디버깅 + 메모리 패턴 | Ex.18 → 19 | Health Dashboard 결과 분석 |
| 12 | 보행 의도 인식 + Tiny AI | Ex.16 → 17 | 7-phase FSM 시연 + 의도 신호 그래프 |
| 13 | 임피던스 + 투명 모드 | Ex.20 → 21 | 가상 스프링 강성 변화 비교 |
| 14 | 보행 위상 적응 토크 | Ex.23 → 25 | 보행 위상 추정 정확도 측정 |
| 15 | 학습 / 적응 제어 | Ex.26 또는 27 | ILC 수렴 곡선 또는 MRAC 적응 궤적 |
| 16 | 기말 프로젝트 | (자유 응용) | 팀 프로젝트 발표 + GitHub 공유 |
수업 운영 팁: - 첫 2 주는 사용자가 환경 구축에서 가장 많이 막힙니다. TA / 강사가 직접 점검 가능한 시간 배정을 권장합니다. - 8 주차 미니 프로젝트는 사용자의 동기 유지에 효과적입니다. "Ex.05~09 까지 익힌 걸로 무엇이든" 같은 열린 주제로 운영하세요. - 16 주차 기말은 팀 단위 (3~4 명) 권장합니다. Physical AI 응용 트랙 (Ex.21, 31, 32, 33) 을 마지막에 깊이 다루는 팀이 보통 나옵니다.
진도표에 빠진 예제 (Ex.05d, 10, 15, 22, 24, 28~36, 38~44) 는 자기주도 학습 또는 다음 학기 후속 과목용으로 남겨두는 것이 분량 면에서 자연스럽습니다.
Part 0 — 동작 확인¶
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 00 | 보드 동작 확인 | ⭐ | 상태 머신 + LED + USB 시리얼 — 외부 하드웨어 없이 |
Part 1 — XM10 기본 I/O 제어¶
기초 입출력부터 상태 기반 프로그래밍 (FSM) 까지, 임베디드 제어의 핵심.
Button & LED (Ex.01 ~ 03)¶
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 01 | 버튼 + LED 기초 | ⭐ | 버튼 상태를 매번 확인해서 LED 제어 |
| 02 | 이벤트 + 특수 효과 | ⭐⭐ | 클릭 이벤트 감지, 한 번만 깜빡이는 LED |
| 03 | 상태 머신 (FSM) | ⭐⭐ | 길게 누르기로 모드 전환, 상태별 동작 분리 |
External I/O — GPIO & ADC (Ex.04 ~ 06)¶
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 04 | 외부 디지털 제어 | ⭐⭐ | 확장 포트 외부 스위치/LED |
| 05 | 아날로그 센서 입문 | ⭐⭐ | 고정 ADC 핀 전압 측정 |
| 05a | DIO→ADC 동적 전환 | ⭐⭐ | DIO 핀을 ADC 모드로 FSR 읽기 |
| 05b | FSR 8채널 일괄 | ⭐⭐ | 8 채널 + Resolution 설정 |
| 05c | 혼합 ADC 12채널 | ⭐⭐⭐ | 고정 4 + DIO→ADC 8 |
| 05d | DIO/ADC 하이브리드 | ⭐⭐⭐ | 디지털 + 아날로그 동시 |
| 06 | 안전 상태 머신 | ⭐⭐ | 리미트 스위치 기반 FSM |
ADC 시리즈 권장 순서: Ex.05 → 05a → 05b → 05c → 05d (점진 난이도)
Part 2 — USB 통신¶
PC 와 실시간으로 메시지를 주고받고 데이터를 스트리밍합니다. 디버깅과 데이터 수집의 핵심. Rev 2.0 에서는 구조체에 이름 · 단위를 붙여 보내거나 USB 메모리에 저장할 수도 있습니다.
주의: USB 시리얼 (CDC) 포트는 한 번에 한 프로그램만 점유 가능. Ex.07~09 · Ex.44 는 시리얼 터미널, PhAI Studio,
xm10도구 중 하나만 열어둔 상태에서 실행하세요. 동시에 켜면 충돌합니다.
USB 시리얼 통신 — Ex.07 ~ 09¶
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 07 | USB 시리얼 기초 | ⭐⭐ | PC 터미널로 텍스트 메시지 |
| 08 | 센서 데이터 모니터링 | ⭐⭐ | 실시간 데이터 sprintf 출력 |
| 09 | 고속 바이너리 스트리밍 | ⭐⭐⭐ | PhAI V2.2 프로토콜, 1 kHz 전송 (사용자 채널은 xm10 도구로 확인) |
수집한 스트림을 PC 에 저장·분석하려면 PhAI Studio 녹화 또는 레포 내
xm10도구를 사용하세요 —python pc-data-tool/xm10.py recv로 그래프를 보면서 원본이.xmlog로 저장되고,export로 CSV 를 뽑습니다 (안내). PhAI Studio 는 아직 개발 중이라,XM_SendUsbDataWithId로 보내는 직접 정의한 데이터 구조체(커스텀 구조체)는 우선xm10도구로 보고 저장하세요. (Rev 2.0 은 USB 메모리에 직접 저장할 수도 있습니다 — USB 메모리에 저장하기. Rev 1.1 은 온보드 파일 저장이 v2.5.0 에서 제거되어 지원하지 않습니다.)
구조체 로깅 — Ex.44¶
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 44 | 구조체를 이름 · 단위 · 타입과 함께 PC 로 보내기 🛑 Rev 2.0 전용 | ⭐⭐⭐ | 구조체를 한 번 등록하면 필드 이름 · 단위 · 타입이 값과 함께 PC 로 갑니다 — 정수 · bool · 배열 · 배율, 구조체마다 다른 주기 (xm10 도구로 확인) |
USB 메모리 저장 — Ex.10 · 34¶
USB-C 포트는 하나입니다. USB 메모리를 꽂아 두는 동안에는 PhAI Studio ·
xm10도구 · USB 로 하는 펌웨어 업로드를 쓸 수 없습니다. 저장이 끝나면 USB 메모리를 뽑고 PC 를 연결하세요. (보드 확인 전)
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 10 | USB 메모리에 값 저장하기 🛑 Rev 2.0 전용 | ⭐⭐⭐ | 버튼으로 저장 시작 · 정지, 구조체 하나를 100 Hz 로 저장, 마커 넣기, 통계로 빠진 표본 확인 |
| 34 | H10 보행 데이터를 USB 메모리에 1 kHz 로 저장 🛑 Rev 2.0 전용 | ⭐⭐⭐ | H10 보행 데이터(96 B)를 1 ms 마다 저장 — 신체 정보, 빠진 표본 확인 |
Part 3 — KIT H10 외골격 기본 모드¶
실제 외골격 로봇 (KIT H10) 의 세 가지 기본 동작 모드.
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 11 | Passive (수동 모드) | ⭐⭐⭐ | 사전 정의 움직임 명령으로 자동 왕복 |
| 12 | Active Assist (능동 보조) | ⭐⭐⭐ | 사용자 의도 감지 후 보조 토크 |
| 13 | Resistive (저항 모드) | ⭐⭐ | H10 내장 모드 — 물속 걷기 같은 저항감 |
Part 4 — 제어 알고리즘 기초¶
직접 작성하는 첫 제어 알고리즘들.
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 14 | PD 실시간 토크 제어 | ⭐⭐⭐ | PD 수식, 이산 미분, 토크 포화 |
| 15 | 역진자 모델 보행 보조 | ⭐⭐⭐ | 중력 보상 MgL·sin(θ) + Lyapunov 안정성 |
| 16 | Tiny AI 센서 퓨전 | ⭐⭐⭐ | 보드 안에서 3-layer 신경망 추론 |
| 17 | 보행 의도 인식 (FSM) | ⭐⭐⭐ | 보행 7 단계 상태 머신 + 단계별 토크 |
| 18 | 시스템 디버깅 모니터 | ⭐⭐ | 루프 실행 시간 측정, 상태 대시보드 |
| 19 | 메모리 인식 설계 | ⭐⭐⭐ | 링 버퍼, 풀 할당자, malloc 없이 구현 |
Part 5 — 제어 알고리즘 심화¶
상호작용 역학, 투명 모드, 보행 위상 기반 제어 — 외골격 제어의 정통 기법들.
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 20 | Hogan 임피던스 제어 | ⭐⭐⭐ | 가상 스프링-댐퍼 상호작용 (Hogan 1985) |
| 21 | 중력 보상 (투명 모드) | ⭐⭐⭐ | Mgl·sin(θ) + 마찰 보상 + 점진 활성화 |
| 22 | CPG 적응 진동자 | ⭐⭐⭐ | 보행 리듬 자동 동기화 (Ronsse 2011) |
| 23 | 보행 위상 적응 토크 | ⭐⭐⭐ | 4 구간 정현파 토크 (Quinlivan 2017) |
| 24 | 가상 구속 (HZD) | ⭐⭐⭐ | 5 차 Bézier 궤도 (Westervelt 2003) |
| 25 | 입각기 가변 강성 | ⭐⭐⭐ | 입각/유각 부드러운 전환 (Collins 2015) |
Part 6 — 학습 + 적응 제어¶
매 보행 주기마다 스스로 학습하거나, 사용자 변화에 자동으로 적응하는 제어.
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 26 | 반복 학습 제어 (ILC) | ⭐⭐⭐ | 주기마다 토크 프로파일 학습 (Emken 2007) |
| 27 | 모델 참조 적응 제어 | ⭐⭐⭐ | MIT Rule 로 게인 온라인 적응 (Slotine 1991) |
| 28 | 어드미턴스 제어 | ⭐⭐⭐ | 힘 입력 → 위치 출력 (임피던스의 짝, Keemink 2018) |
| 29 | 좌·우 협응 제어 | ⭐⭐⭐ | 역위상 대칭 + 약측 강화 (재활용) |
| 30 | FF + FB 혼합 제어 | ⭐⭐⭐ | 모델 기반 사전 보상 + PD 피드백 |
Part 7 — Physical AI 응용¶
투명성 → 의도 감지 → 학습 → 자율 재생으로 이어지는 Physical AI 의 핵심 단계들.
| 예제 | 제목 | 난이도 | 학습 내용 |
|---|---|---|---|
| 31 | 외란 관측기 (DOB) | ⭐⭐⭐ | 남은 외란까지 추정해서 진정한 투명 모드 |
| 32 | 발 접지로 의도 감지 | ⭐⭐⭐ | Heel Strike 이벤트로 보행 위상 추정 |
| 33 | 직접 가르치기 + 재생 | ⭐⭐⭐ | 사람이 손으로 시연 → 보드가 그대로 재생 |
| 35 | 다층 투명 제어 | ⭐⭐⭐ | 투명/벽/좌우 커플링 세 모드 실시간 전환 |
| 36 | 보드 안에서 직접 학습 🛑 Rev 2.0 전용 | ⭐⭐⭐ | 작은 신경망을 보드 위에서 학습 → LQR 재생 — Internal Flash UserNV API 가 Rev 2.0 만 지원 |
| 38 | 주기적 백그라운드 태스크 | ⭐⭐ | 저주기 보조 작업 분리, 제어 루프 지터 최소화 |
| 39 | 태스크 생명주기 관리 | ⭐⭐⭐ | 태스크 생성·일시정지·종료, RTOS 태스크 상태 머신 패턴 |
| 40 | EMG 비례 보조 토크 🛑 Rev 2.0 전용 | ⭐⭐⭐⭐ | 외부 ADC 4채널 EMG → envelope → 비례 토크, BTN 캘리브 + xm10 도구로 0xF0 스트리밍 (EMG 경진대회 토대) |
| 41 | IMU Hub 자세 대시보드 🛑 Rev 2.0 전용 | ⭐⭐⭐ | 최대 6개 IMU 쿼터니언→오일러(r/p/y) 변환, 연결 자동감지 + xm10 도구로 0xF0 18채널(50Hz) 스트리밍 (CAN-FD 센서 허브) |
| 42 | EMG Hub 바이오피드백 🛑 Rev 2.0 전용 | ⭐⭐⭐ | 허브 처리 근활성도(envelope/MVC%) 수신, BTN 캘리브 + LED 및 xm10 도구(0xF0 4채널, 50Hz)로 실시간 피드백 (CAN-FD 센서 허브, 모터 미구동) |
| 43 | 보드끼리 시리얼로 대화하기 🛑 Rev 2.0 전용 | ⭐⭐ | External UART(PD5/PD6)로 XM10 2대를 직결해 통신 — 콜백은 복사만, 프레임 경계는 바이트 상태기계로 |
IMU Hub·EMG Hub 는 내부에서 개발 중인 모듈입니다. 사용하려면 https://huphailab.com/contact 로 문의해 주세요.
예제 시험해보기¶
examples/에서 원하는 예제의.c파일을 엽니다.- 내용을 통째로
XM_Apps/Control_Task/control_task.c에 복사. - STM32CubeIDE 에서 빌드 → XM10 에 업로드.
- 해당 예제의 README 를 따라가며 동작을 확인합니다.
빌드/플래시가 처음이라면: 첫 빌드 & 실행 · AI 자동 안내가 편하다면: Claude Code 와 함께 시작