구간별 토크 예측 모델
명령 기반 토크 모델링으로 오탐 0%, 가속 구간 정확도 99%를 달성한 충돌 감지 시스템

상단 그래프는 실제 토크(빨강)와 예측 토크(파랑)를 보여줍니다. 가속→정속→감속 전 구간에서 예측이 실제 토크를 정밀하게 추종하고 있습니다. 하단 그래프는 잔차(초록)와 ±Threshold(보라)를 보여줍니다. 정상 동작 시 잔차가 threshold 내에 머물고, threshold를 약 1 Nm (1000 mNm) 수준으로 설정하여 미세한 충돌도 민감하게 감지할 수 있습니다.
배경
두 제품 모두 환경에 따라 부하가 달라지는 조건에서 작동합니다:
- Ceily (로봇 침대): 침구 종류에 따라 부하가 달라짐 (여름 이불 vs 겨울 이불)
- Wally (벽면 리프트): 설치 각도에 따라 열고 닫을 때 토크 패턴이 달라짐 (예: 경사진 건물)
토크는 모터 드라이버에서 직접 읽어옵니다.
목표: 환경이 바뀌어도 정상 토크를 안정적으로 예측하고, 잔차(residual)로 비정상 토크(충돌/장애물)를 구분하는 것.
어려운 점: 환경이 바뀌면 기존 토크 모델이 맞지 않게 됩니다. 수동 튜닝 없이 스스로 적응해야 합니다.
핵심 문제
잔차 기반 감지가 제대로 작동하려면, 예측 모델이 정상 상태에서 “토크가 얼마여야 하는지” 정확히 추정해야 합니다.
세 가지 요인이 이를 어렵게 만들었습니다:
-
측정값을 직접 쓰면 예측이 왜곡됨
측정된 가속도나 저크를 직접 쓰면 외란(접촉/장애물)이 입력에 섞입니다. 모델이 비정상 토크까지 정상으로 학습하면 잔차가 줄어들고, 감지력이 떨어집니다.
-
명령값과 실제 움직임이 다름 (특히 S-curve 가속에서)
명령이 단순해도 (가속도는 선형, 저크는 상수) 실제로는 부드럽게 적용됩니다:
- 가속도 명령(1차)은 3차 곡선처럼 적용
- 저크 명령(0차)은 2차 곡선처럼 적용
이 형태를 반영하지 않으면 구간마다 오차가 생기고 오탐으로 이어집니다.
-
토크 특성이 구간마다 다름: 가속, 정속, 감속 구간은 각각 지배적인 요인이 다릅니다. 하나의 모델로 모든 구간을 커버하면 전환점에서 오탐이 발생합니다.
핵심 아이디어
잔차가 의미를 가지려면, 정상 토크를 측정값이 아니라 실제 적용 형태를 반영한 명령 정보로 예측해야 합니다:
- 예측 토크 = 명령 기반 정상 토크
- 측정 토크 = 정상 + 비정상
- 잔차 = 비정상 성분 (분리 대상)
이를 위해 S-curve 동작 중 가속도/저크가 실제로 어떻게 적용되는지 나타내는 정규화된 패턴 특징(0~1 범위)을 설계했습니다.
접근 방식
1) 가속 구간 특징 설계: 명령→적용 매핑
가속 구간 토크를 분해해서 명령이 실제로 어떻게 나타나는지 파악했습니다:
- 측정 토크에서 S-curve 속도 성분 제거
- 선형 가속도 성분 제거
- 남은 신호 = S-curve 곡률 (저크 제한 동작에 해당하는 2차 곡선 두 개)
적용 형태 매핑:
- 가속도 명령 (1차) → 3차 곡선 형태
- 저크 명령 (0차) → 2차 곡선 형태
정규화된 패턴 특징 a_pattern, j_pattern ∈ [0,1]을 만들고, 회귀 모델이 자동으로 계수를 학습하게 했습니다.
결과: 가속 추정 정확도 ~99%, 정상 토크 예측이 안정화되었습니다.
2) 구간별 토크 모델 (TorqueContext)
입력 벡터가 SpeedController 상태에 따라 바뀝니다:
| 구간 | 입력 | 이유 |
|---|---|---|
| 가속 | [v_cmd, a_pattern, j_pattern, 0] | 적용 형태를 반영한 명령 정보 |
| 정속 | [v_cmd, Δt, 0, 0] | 마찰이 시간에 따라 안정됨; Δt로 감쇠 반영 |
| 감속 | [τ_preDecel, Δt, 0, 0] | 마찰이 지배적; 감속 직전 토크를 기준점으로 사용 |
3) 이상치에 강건한 온라인 학습
가중 최소제곱법으로 “충돌을 정상으로 학습”하는 것을 방지했습니다:
|잔차| > 민감도면 가중치0.1, 아니면1.0- 큰 잔차는 모델에 거의 영향을 주지 않고, 정상 데이터로 빠르게 적응
4) 안정성 판정
- 초기 학습 중에는 잔차 기반 감지를 끔 (파라미터가 아직 수렴 중)
- θ 변화율이 10회 이상 동안 0.5% 미만이면 학습 완료로 판정
- 학습 중 보호: 직전 가속 토크를
estimated_max_torque로 사용해서 수렴 전에도 최대값 비교로 안전 확보
트레이드오프
- 모니터링 지연: 안정성 판정에 10회 이상이 필요합니다. 학습 중에는 최대 토크 비교로 보완합니다.
- 이상치 영향: 가중치가 0.1(0이 아님)이라서 반복 충돌이 모델을 천천히 밀 수 있습니다.
- 구간 전환 민감도:
τ_preDecel캡처가 정확한 구간 판정에 의존하므로, 전환점의 떨림이 감속 기준을 불안정하게 만들 수 있습니다.
결과
- 오탐: 현장 테스트에서 0건
- 가속 구간 추정: ~99% 정확도
- 민감도: ~1N까지 충격 감지 (제어된 충격 테스트 기준)
- 감지 지연: ~150 ms (3사이클 × 50 ms)
- 안전 응답: 비상 정지 ≤500 ms
- 사용자 피드백: 빨간 LED 5초간 점멸
핵심 교훈
실제 적용 형태를 반영한 명령 정보로 정상 토크를 예측해야 잔차가 충돌 감지에 유효합니다.
구현 핵심:
- 가속 구간 성분 분해 + 정규화된 패턴 특징 (0~1)
- 구간별 입력 설계 (가속/정속/감속)
- 이상치 강건 온라인 학습 (가중치 1.0/0.1)
- 안정성 판정 (θ 변화 <0.5%가 10회 이상 지속 시 활성화)