joint 속도가 한도의 40배였다
로봇팔이 물건을 집어 옮기는 시뮬레이션을 검증하고 있었습니다. KPI는 "PASS"였습니다. 그런데 영상을 보면 팔이 미친 듯이 날뛰며 물건을 집었다 놓쳤다 했습니다. 숫자는 통과인데 눈으로 보면 명백한 실패 — 어디가 잘못된 걸까요?
peak KPI의 맹점
원인은 측정 지표에 있었습니다. 당시 "물건을 들어 올렸는가"를 최대 높이(peak)로 쟀습니다 — 들림 = 최고 높이 − 시작 높이. 문제는, 팔이 이동 중에 물건을 떨어뜨려도 그 최고점은 기록에 남는다는 것입니다.
도식 렌더링 중…
peak는 "한순간이라도 들었으면" 통과시킵니다. 이동 중에 19번을 떨어뜨려도, 한 번 든 최고점만 있으면 PASS인 셈입니다.
궤적 KPI가 드러낸 진실
그래서 궤적(trajectory) KPI를 심었습니다 — 매 순간(10Hz) 물건의 위치, 잡고 있던 시간, 관절 속도, 손목 회전을 기록. 그러자 진실이 드러났습니다.
가장 심한 셀(다중 큐브 경유점 이동)의 측정값:
- 관절 최대 속도 12,078 deg/s — ISO 권장 한도(약 300)의 40배
- 손목 회전 누적 697°
- 이동 중 물건 낙하 19회
셀별 최대 관절 속도(로그 스케일). peak KPI는 전부 통과시켰지만, 실제로는 PICKPLACE가 한도(300, 초록선)의 40배인 12,078 dps로 날뛰었다. 진짜 PASS 셀(시안)은 한도 부근에 있다.
차트가 한눈에 보여줍니다 — "PASS"로 기록됐던 셀들 중 일부가 한도를 로그 스케일로 넘어 솟아 있습니다.
⚠️ peak는 거동을 숨긴다 — 최댓값 하나만 보는 지표는 "어떻게 거기 도달했는가"를 못 봅니다. 똑같이 "들어 올림 = 성공"이어도, 매끄럽게 든 것과 19번 떨어뜨리며 든 것은 완전히 다른 거동입니다. 궤적을 봐야 그 차이가 보입니다.
진짜 PASS는 어떻게 생겼나
전체 셀 중 진짜로 통과한 3개의 공통점은 분명했습니다.
- 단일 큐브 짧은 동작 — 경유점이 적어 관절 속도가 한도 근처(약 299 dps).
- 강화학습 정책 — 학습된 부드러운 동작이라 잡고 있던 시간이 가장 길었음(8.57초).
반대로 실패한 셀은 모두 다중 큐브 경유점 이동에서 경로 계획기가 공격적으로 자세를 전환하며 관절이 폭주했습니다.
💡 "숫자 PASS"를 믿지 말고 거동을 봐라 — 이 사건의 교훈은, KPI가 통과여도 어떻게 통과했는지를 궤적으로 확인해야 한다는 것입니다. 사용자가 "영상이 이상하다"고 한 직관이 정확했고, peak 숫자가 그 직관을 가리고 있었습니다.
한 줄 정리
📌 "최대 높이"만 보는 peak KPI는 이동 중 19번 떨어뜨려도 PASS를 줬다. 궤적 KPI(매 순간 위치·잡은 시간·관절속도)를 심자, PASS였던 셀이 관절 속도 한도의 40배(12,078 dps) 로 날뛰고 있었다. 숫자가 아니라 거동을 봐야 한다.
