로봇 모션이 망가지는 이유

유진·2026년 4월 25일

Robotics

목록 보기
8/11

로봇팔로 반원을 그릴 일이 있었다.

정면 기준으로 위에서 아래로 내려오는 호 동작이었는데, 대부분의 구간에서는 부드럽게 잘 돌았다.
문제는 호의 아래쪽 어느 구간이었다.

그 구간에서만 원이 안으로 살짝 파이거나 바깥으로 튀어나오는 게 보였다.
처음엔 어디 모터가 맛이 갔나? 파라미터가 크게 틀어졌나? 싶었다.
(업무를 하며 로봇이 이상하게 움직이면 일단 하드웨어부터 의심하게 됐다)

조금 들여다보니 그 구간에서 특정 관절이 아주 짧은 시간 안에 큰 각도를 돌아야 하는 상황이 생기고 있었다.
하모닉 드라이브가 달린 모터로는 그 속도를 시간 안에 못 따라잡는 것이었다.

그때 처음 알았다.

로봇이 명령대로 못 따라가는 데에는 이유가 있고, 이게 자코비안의 잘못이 아닌 경우도 있구나
내가 봤던 그 현상을 기준으로 한 번 정리해보고자 한다.


로봇이 원을 그리는 원리

로봇 끝단이 공간에서 원을 그리려면, 매 순간 "어느 방향으로 얼마나 빠르게 움직일지"가 정해져야 한다.
그런데 실제로 제어할 수 있는 건 관절 각도뿐이다.

"끝단을 이 방향으로 움직이려면 각 관절을 얼마나 빠르게 돌려야 하는지"를 계산해주는 녀석이 자코비안(Jacobian) 이다.

x˙=J(q)q˙\dot{x} = J(q)\,\dot{q}

x˙\dot{x}는 끝단 속도, q˙\dot{q}는 관절 속도, JJ는 자코비안 행렬이다.

우리가 원하는 건 관절 속도니까 식을 뒤집는다.

q˙=J1(q)x˙\dot{q} = J^{-1}(q)\,\dot{x}

자코비안은 매 순간 정확한 답을 내준다.
"이 끝단 속도를 내려면 J1은 이만큼, J2는 이만큼 돌리세요" 하고.

문제는 그 답이 모터가 낼 수 있는 속도 범위 안에 있느냐다.


왜 원이 찌그러지는가

내가 본 케이스에서 일어난 일을 단계별로 보면 이렇다.

J1J^{-1}도 멀쩡함, 발산 같은 거 없음
(멀쩡히 명령 수행했고, 수행하지 못하는 곳에 도달하면 자동으로 workspace error를 띄웠었음)
문제 상황에선 그 값이 모터 정격 속도보다 컸다는 것밖에 없었음
모터가 못 따라감 → 궤적이 명령에서 이탈

예를 들어 J4가 최대 300 deg/s 까지만 돌 수 있는데 원 그리기가 요구하는 속도가 500 deg/s 라면?

포화(saturation)가 일어난다. 서보가 "나는 여기까지밖에 못 돈다"고 선언하는 순간이다.
끝단은 제 속도를 못 내고, 그 구간에서만 궤적이 안으로 파이거나 바깥으로 튀어나온다.

여기서 자코비안은 죄가 없다. 역행렬도 죄가 없다.
자코비안은 정확한 답을 내줬고, 그 답이 단지 모터 능력 밖이었을 뿐이다.

이건 순수하게 모션 플래닝과 하드웨어의 미스매치다.
경로 자체가 그 시간 안에 그 모터로는 못 그리는 경로였다는 뜻이다.


이 현상의 이름

이런 추종 오차에는 정식 이름이 있었다.
Contour error (윤곽 오차) 라고 부른다고 한다.

이는 명령된 경로(contour)와 실제로 그려진 경로 사이의 수직 거리를 의미하는 용어라고 한다.
원의 경우는 더 좁게 circularity error (진원도 오차) 라고 부르기도 한다.

추종 오차는 보통 두 성분으로 나눈다.

  • Contouring error: 경로에 수직한 방향 오차. 형상이 얼마나 어긋났는가 (원이 찌그러진 정도)
  • Lag error: 경로에 평행한 방향 오차. 시간상 얼마나 뒤쳐졌는가

원이 안으로 파이거나 바깥으로 튀어나오는 건 정확히 contouring error에 해당한다.

원인 쪽으로 들어가면 또 다른 용어가 있다.
서보 정격 속도를 넘어서 명령이 포화되는 걸 velocity saturation, 명령에 비해 서보 응답이 늦어지는 걸 servo lag 또는 following error 라고 한다.
하모닉 드라이브 같은 감속기의 wind-up이나 토크 한계로 인한 응답 지연도 following error에 포함된다.

내가 본 건 정확히는 velocity saturation에서 비롯된 contour error였다.


그래서 어떻게 해결해야 하지

원인이 "경로가 모터 능력을 넘었다" 라면, 답도 거기에 맞춰져야 한다.

Path retiming (time scaling)

가장 직관적인 답.
경로 모양은 그대로 두고, 그 구간에서만 속도를 늦춘다.
관절이 따라올 시간을 주는 방식이다.
원은 제대로 그려지지만 작업 시간이 늘어난다는 trade-off가 있다.

Path replanning

애초에 그 구간에 안 걸리게 경로를 다시 짠다.
Tool 방향을 살짝 바꾸거나, 로봇 베이스 기준 상대 위치를 재배치한다.
사이클 타임은 유지되지만 경로 설계를 다시 해야 한다.

Feedforward 보상

좀 더 들어가면, 컨트롤러 단에서 모터 동특성을 미리 알고 명령을 앞서 보내는 방법도 있다.
하지만 현장에서 보통 1차 대처는 위 두 가지다.

내가 본 현상에는 path retiming이 가장 무난한 답이었을 것이다.

근데 업무 상 path retiming이 쉽지 않은 상황이라,
추후에 Feedforward로 경로 제어를 시도해야 할 것 같다.


마무리

로봇이 원을 완벽히 못 그리는 건 서보 고장이 아니라 경로와 모터의 미스매치 때문이라는 걸 정리할 수 있었다.

  • 자코비안과 그 역행렬은 멀쩡해도 contour error는 생긴다.
  • 원인은 "이 모터로는 이 시간 안에 그 회전을 못 한다" 였고, 답은 path retiming 쪽인데 그게 불가능한 상황이다.

아무튼 하드웨어 문제가 맞잖아?

수식 자체보다, "자코비안이 정답을 줘도 모터가 못 따라갈 수 있다" 라는 한 줄 감각이 기억에 오래 남을 것 같다.
그 위에 contour error, path retiming, 그리고 별개 주제로 특이점/DLS를 얹을 수 있게만 공부한다면,
관련 얘기가 나왔을 때 개념적으로 대화를 이어갈 수 있을 것이다.

난 솔직히 현상을 먼저 보고 개념을 이렇게 정리하는 게 기억에 오래 남는 것 같다.
수식 먼저 외우려 했다면 전혀 기억하지 못했을 것 같다.

사실 분명 이미 본 적이 있겠지 학부 시절 언젠가..
다시 공부했으니 된 것 아닐까

0개의 댓글