06 디버그와 캘리브레이션
완성품 사용자는 이 페이지를 건너뛰어도 됩니다: 공장에서 모든 제품을 캘리브레이션하고 검증합니다. 서보/IMU 교체, 혼 재장착 후, 또는 펌웨어 업그레이드로 캘리브레이션이 흐트러졌다고 의심될 때만 이 단계를 다시 하세요.
이 페이지는 조립, 플래싱, 영점 조정 후의 로봇 전체 기능 점검과 캘리브레이션입니다; 로봇을 사용하기 전에 순서대로 진행하세요.
디버깅 중 전원: USB는 시리얼 데이터만 전달합니다.
c는 IMU만 필요하며(서보 전원은 꺼져 있어도 됨),t/z/e는 5 V 서보 레일이 켜져 있어야 합니다. ESP32에 두 소스로 전원이 들어가는 것이 싫다면 ESP32로 가는 5 V 갈래를 분리하고 USB로만 전원을 공급하며 5 V 전원은 서보에만 연결하세요 - 일반적인 구성입니다, 04 페이지 4.4절 참조.
6.1 시리얼 포트 열기와 텔레메트리 읽기
.venv를 활성화한 상태에서 SR-Support 폴더에서 시리얼 포트를 여세요(COM27은 본인 포트):
pio device monitor --rts 0 --dtr 0 -b 115200 -p COM27(시리얼 도구 / Windows용 UartAssist 다운로드는 03 페이지 3.3절에 있습니다.)
포트를 연 뒤 보드에 방금 전원이 들어왔거나 RST를 눌렀다면 부팅 로그가 먼저 보입니다; 부팅 로그가 없다면 RST를 한 번 누르세요. 그다음 250 ms마다 텔레메트리 한 줄이 출력됩니다:
IMU version 1.1.2
autorun on: get-up waits for a fall
up -0.01 +0.02 +1.00 | w 0.0 0.0 0.0 | q +0.00 +0.00 | qd 0.0 0.0 | run| 필드 | 의미 | 읽는 법 |
|---|---|---|
up | 몸체 좌표계에서의 세계 상향 벡터(x 전방, y 좌측, z 상향) | 똑바로 세우면 (0,0,1), 기울기≈0°; 눕힌 자세는 6.5절(예: (-1,0,0)=pitch_pos) |
w | 각속도(rad/s) | 정지 시 ≈0; 기립/구를 때 비영(非零); 폴 게이트는 ` |
q | 현재 관절 명령 각도(숄더, 엘보, rad; 피드백 없음) | q=0은 암 수직; 숄더 + → 큰 암이 −Y 방향, 엘보 + → 전완이 +X 방향 |
qd | 관절 명령 속도 | 거의 필요 없음 |
mode | 실행 모드 | run / hold / manual / auto |
읽기 예시(hw_watch 창):
up x+0.00 y+0.00 z+1.00 tilt 0.0 # upright
up x-1.00 y+0.00 z+0.00 # pitch_pos: top points +X
w +0.0 +0.0 +0.0 rad/s |w| 0.0 # still
q sh +0.00 el +0.00 mode hold # arm vertical, idletilt는 상향 벡터와 수직 방향 사이의 각도입니다(up_z 기준); 0°는 완전히 수직입니다.
스크롤되는 스트림을 읽기 어렵다면 고정 줄 라이브 창을 사용하세요(명령은 그대로 동작):
python tools/hw_watch.py --port COM27up/tilt, 각속도, 관절 각도, 모드, 마지막 이벤트를 제자리에서 다시 그립니다; cmd>에 입력하고 Enter를 눌러 명령을 보내며, 이벤트는 logs/hw_watch.log에도 추가됩니다. 모든 원시 줄이 중요한 전체 기립 실행에는 계속 pio device monitor나 tools/hw_monitor.py를 사용하세요(후자는 5초마다 요약을 로그에 기록).
시리얼 명령 보내는 법: 모니터를 열어 둔 채 명령을 입력하고 Enter를 누르세요 (한 글자 명령은 따옴표가 필요 없음). 이 페이지에서 사용하는 명령:
c # gyro + accel calibration (robot level and still)
t # servo self-test
k # read both servo center pulses
m 0.5 0 # manual shoulder direction test
i / j # flip IMU X / Y signs (only if a direction is reversed)전체 명령 표는 03 페이지 3.4절에 있습니다.
빠른 자체 점검 스크립트(포트를 비우기 위해 먼저 시리얼 모니터를 닫으세요):
python tools/hw_check.py --port COM27
python tools/hw_check.py --port COM27 --tilt 8첫 명령은 0.6초 분량의 텔레메트리를 읽습니다; --tilt 8 중에 로봇을 손으로 기울이면 up/자이로 범위와 기울기 범위를 출력하여 IMU가 고착되었거나 방향이 잘못되었는지 드러냅니다.
6.2 IMU 점검과 캘리브레이션
c는 두 가지를 합니다:
- 자이로 영점 바이어스: 정지 상태 샘플 200개(약 2초)를 평균하여 제로레이트 오프셋을 구합니다; 이는 현재 전원 사이클에 사용되며 부팅할 때마다 자동으로 다시 수행됩니다;
- 가속도계 영점: 같은 샘플에서 중력 벡터를 평균하며, 로봇이 수평으로 서 있을 것을 요구하고(중력이 전부 +Z에 작용), 타당성을 검사한 뒤 NVS에 저장합니다(부팅 시 다시 로드됨).
절차(서보 전원은 필요 없음):
먼저 04 페이지 4.5절의 기계적 방향 점검을 하세요 (숄더 축은 IMU −Y 방향, 엘보 축은 IMU +X 방향);
로봇을 수평한 테이블 위에 똑바로 세우고, 손을 떼고, 케이블이 당기지 않게 하세요;
시리얼 모니터 또는
hw_watch의cmd>에c를 입력하고 Enter를 누르세요:textc약 2초간 정지 상태를 유지하세요; 성공하면 다음이 출력됩니다:
textgyro bias (rad/s): ... accel bias (m/s^2): ... (saved) calibration done; holdaccel cal rejected: |a|=...는 로봇이 수평이 아니거나 정지 상태가 아니었다는 뜻입니다(중력 크기가 9.8에서 1.5 m/s² 넘게 벗어남); 바이어스는 변경되지 않습니다 - 다시 놓고c를 다시 보내세요.
확인:
- 좌우로, 앞뒤로 천천히 기울이세요:
up의 x/y 성분이 부드럽게 따라와야 합니다; 한 방향이 반대로 나오면i/j를 보내 IMU 축 부호를 뒤집고c를 다시 실행하세요; - 로봇을 눕히고 2초 기다리세요: 베이스 면이 납작하게 닿은 상태에서
up이 6.5절의 눕힌 자세 표와 일치해야 합니다(예:(0,-1,0)= roll_neg); - 눕힌 상태에서 5° 이상의 기울기가 지속되면 보통 가속도 영점이 어긋난 것입니다 - 이 절을 다시 하세요.
완성품은 공장에서 캘리브레이션되어 있습니다(NVS에 저장); IMU를 교체/재장착한 뒤나 눕힌 자세가 눈에 띄게 기울 때만 다시 하세요.
c는 IMU만 캘리브레이션합니다 - 서보 영점은 바꾸지 않습니다(그것은 05 페이지).캘리브레이션 전에 수동 명령을 사용했다면(텔레메트리가
manual로 끝남)c는 로봇을hold/manual상태로 남기며 폴 게이트가 기립을 시작하지 않습니다; 로봇을 세운 채로g를 보내 재개하거나 보드를 리셋하세요.
6.3 서보 점검과 방향 자체 테스트
| 점검 | 방법 | 예상 결과 |
|---|---|---|
| 센터 | k | centers: shoulder 1681 us, elbow 1456 us(2026-11에 구운 눈으로 확인한 중심 값; 05 페이지에 따라 재영점 조정) |
| 숄더 트림 | o / p(±10 µs) | q=0에서 암 수직 |
| 방향 | m 0.5 0 / m 0 0.5 | 숄더 + → 큰 암이 −Y 방향; 엘보 + → 전완이 +X 방향 |
| 부호 반전 | v(숄더) / b(엘보) | 방향이 반대일 때만 |
| 자체 테스트 | t | 두 관절의 작은 움직임 후 센터로 복귀 |
| 중립 | m 0 0 또는 r | 암 수직 |
관절 제한:
- 숄더 수동 명령
[-1.85, +1.82]rad; 엘보 기계적±1.55rad(실행기가 도달 가능); - 수동
m명령은 엘보를[-0.90, +0.70]rad로 클램프; - PWM 출력은 50 Hz에서 500–2500 µs.
시리얼 모니터/어시스턴트의 송신 상자에 하나씩 입력하세요(각각 Enter):
t
k
m 0.5 0
m 0 0.5
m 0 0확인: 숄더 q>0 → 큰 암이 −Y 방향; 엘보 q>0 → 전완이 +X 방향. 방향이 반대라면 v / b로 뒤집거나 혼을 다시 장착하세요.
6.4 중심 점검
공장에서 구워졌습니다(숄더 1681 µs / 엘보 1456 µs) - 완제품은 건너뛰어도 됩니다. DIY 제작에서는 05 페이지 영점 캘리브레이션으로 이미 수행했고 값이 config.h에 구워져 있습니다(값이 바뀌었다면 다시 플래싱); 여기서는 k를 실행해 센터가 구워진 값과 일치하는지만 확인하세요. 혼을 재인덱싱하거나 재조립한 뒤, 또는 암이 더 이상 눈으로 확인한 중심에 놓이지 않을 때만 05 페이지로 돌아가세요.
6.5 네 가지 눕힌 자세와 폴 게이트
| 자세 | 모니터 up | 물리적 의미 |
|---|---|---|
pitch_pos | (-1, 0, 0) | 몸체 상단이 +X 방향을 향함 |
pitch_neg | (+1, 0, 0) | 몸체 상단이 −X 방향을 향함 |
roll_pos | (0, +1, 0) | 몸체 상단이 −Y 방향을 향함 |
roll_neg | (0, -1, 0) | 몸체 상단이 +Y 방향을 향함 |
폴 게이트 조건(펌웨어):
up_z < 0.30 and |ω| < 0.9 rad/s for 25 consecutive ticks (0.5 s)이 조건을 만족해야 getup start pose=...가 출력되고 기립이 시작됩니다. 따라서 로봇을 놓고 약 0.5초간 정지 상태를 유지하세요; 놓은 직후 흔드는 것은 보통 손이 아직 닿아 있거나 몸체가 아직 구르고 있다는 뜻입니다.
확인: 로봇을 네 가지 자세 각각으로 눕히고, 놓고, 정지 상태를 유지하세요; 0.5초 이내에 시리얼 로그에 getup start pose=<matching pose>가 표시되어야 합니다.
6.6 완료 기준
- [ ]
c가accel bias ... (saved)를 출력함; - [ ]
t가 두 관절에서 올바른 방향을 보여줌; - [ ]
k가 구워진 센터와 일치함(또는 05 페이지에 따라 재영점 조정 후 구웠음); - [ ] 네 가지 눕힌 자세 모두
getup start를 트리거함.

