Artoke

리깅: IK 심화 — 야코비안으로 푸는 비선형 최적화

로봇 팔이든 캐릭터의 다리든, 관절을 여러 개 이은 사슬의 끝(손끝, 발끝)을 원하는 위치에 갖다 놓고 싶을 때가 있다. 문제는 우리가 직접 조절할 수 있는 값은 끝점의 좌표가 아니라 각 관절의 각도라는 데 있다. 각도를 넣으면 끝점이 어디로 가는지는 쉽게 계산되지만(순운동학), 그 반대 — 원하는 끝점을 만들려면 각도를 얼마로 줘야 하는가(역운동학, IK) — 는 대개 깔끔한 공식이 없다. 이 글은 그 역문제를 야코비안 행렬로 조금씩 풀어 나가는 방법을 수식 중심으로 따라간다.

먼저, 순운동학을 함수로 보기

관절 각도를 모아 놓은 벡터를 라 하자. 관절이 개면 이다. 이 각도들을 넣으면 끝점의 위치 가 정해진다. 평면이라면 처럼 2차원, 공간이라면 3차원이다. 이 대응을 하나의 벡터값 함수로 쓰면

가 된다. 여기서 는 각도 벡터를 받아 위치 벡터를 돌려주는 함수다. 예를 들어 길이가 인 두 마디로 된 평면 팔이라면, 각 마디의 삼각함수를 이어 붙여

처럼 적힌다. 각도를 정하면 좌표가 딱 나온다. 반대로 를 정해 놓고 를 구하려면 이 비선형 식을 각도에 대해 풀어야 하는데, 마디가 셋만 넘어가도 손으로 정리하기가 사실상 불가능해진다.

비선형을 못 풀면, 국소적으로 선형화한다

한 번에 정답을 구할 수 없다면, 현재 각도에서 아주 조금씩 움직여 목표에 다가가는 전략을 쓴다. 여기서 핵심은 "각도를 조금 바꾸면 끝점이 어느 방향으로 얼마나 움직이는가"이다. 이 관계가 바로 야코비안이 말해 주는 것이다.

함수 의 각 출력 성분을 각 입력 각도로 편미분한 값을 모두 모은 행렬을 야코비안 라 한다. 출력이 차원, 입력이 차원이면 행렬이고

로 쓴다. 열의 성분 는 "다른 각도는 그대로 두고 번 관절만 아주 살짝 돌렸을 때, 끝점의 번째 좌표가 변하는 비율"이라는 뜻이다. 각 열은 한 관절이 담당하는 끝점의 순간 이동 방향을 담고 있다.

리깅: IK 심화 — 야코비안으로 푸는 비선형 최적화 도식

야코비안이 있으면 작은 각도 변화 가 끝점을 얼마나 옮기는지를 선형으로 근사할 수 있다. 이것이 다변수 함수의 1차 테일러 전개다.

여기서 는 끝점의 변화량이다. 원래의 곡면 같은 비선형 관계가, 지금 서 있는 자리 근처에서는 행렬 곱이라는 선형 관계로 바뀐 것이 핵심이다. 곱하기만 하면 되니 이제 다룰 만하다.

방향을 뒤집기: 역을 취한다

우리가 알고 싶은 건 반대다. "끝점을 목표를 향해 만큼 움직이고 싶은데, 각도는 얼마나 바꿔야 하나?" 즉 위 식을 에 대해 풀어야 한다. 가 정사각이고 역행렬이 있으면 단순히

이다. 그런데 관절 수 과 목표 좌표 수 이 다르면 는 정사각이 아니라 역행렬이 없다. 관절이 목표보다 많은 경우(여유 자유도, )가 흔한데, 이때는 목표를 만족시키는 각도 조합이 무수히 많다. 이럴 때 쓰는 것이 무어–펜로즈 유사역행렬 이다. 관절이 목표보다 많으면

가 된다. 여기서 는 전치행렬이다. 이 유사역행렬은 목표를 정확히 맞추는 여러 해 중에서 각도 변화 가 가장 작은 해, 즉 "가장 덜 움직이는" 자연스러운 해를 골라 준다는 좋은 성질이 있다.

한 걸음씩 목표로: 반복 갱신

선형 근사는 어디까지나 근처에서만 맞다. 그러니 한 번에 목표까지 가지 말고, 조금 가고 다시 야코비안을 계산하고, 또 조금 가는 식으로 반복한다. 목표 위치를 이라 하면, 매 단계의 오차는

이다. 이 오차를 조금씩 줄이도록 각도를 갱신한다.

여기서 는 한 걸음의 크기를 정하는 스텝 계수로, 보통 범위에서 고른다. 가 너무 크면 근사가 깨져 목표를 지나쳐 출렁이고, 너무 작으면 수렴이 느리다. 이 갱신을 오차 크기 가 충분히 작아질 때까지 돌리면 끝점이 목표에 다가간다. 이것이 사실상 비선형 최소제곱 를 야코비안으로 푸는 경사 기반 반복이다.

야코비안 행렬식과 특이점

자료에서 말하듯, 야코비안이 정사각이면 그 행렬식 를 야코비안 행렬식이라 부른다. 이 값은 기하학적으로 작은 부피(넓이)가 함수에 의해 얼마나 늘거나 줄어드는지를 나타내는 배율이다. 각도 공간의 작은 조각이 위치 공간으로 옮겨질 때 배로 스케일된다.

야코비안 행렬식이 나타내는 넓이 왜곡을 보여주는 그림
출처: IK 심화 — 야코비안으로 푸는 비선형 최적화

문제는 이 배율이 이 되는 자세, 즉 인 곳이다. 이런 자리를 특이점이라 한다. 팔이 완전히 쭉 펴진 순간을 떠올려 보자. 그 방향으로는 관절을 아무리 돌려도 끝점이 더 나아가지 못한다. 즉 어떤 방향의 를 만들려면 무한히 큰 각도 변화가 필요해진다. 이때 의 역행렬이 폭발해서 갱신량이 발산하고, 팔이 미친 듯이 떨린다.

이걸 막으려고 흔히 쓰는 것이 감쇠 최소제곱(레벤버그–마쿼트)이다. 유사역행렬에 작은 감쇠항 를 더해

로 바꾼다. 는 단위행렬, 는 감쇠 계수다. 이 덕분에 특이점 근처에서도 괄호 안이 절대 특이해지지 않아 역이 안전하게 존재한다. 정확도를 조금 양보하는 대신, 발산 없이 부드럽게 목표로 수렴하게 만드는 실용적인 절충이다.

정리

역운동학의 벽은 라는 비선형 관계를 각도에 대해 직접 뒤집을 수 없다는 데 있었다. 야코비안은 이 벽을 "지금 자리 근처의 선형 관계 "로 낮춰 준다. 그 선형 관계를 유사역행렬로 뒤집어 한 걸음의 각도 변화를 구하고, 야코비안을 다시 계산해 또 한 걸음 — 이 반복이 비선형 최적화의 뼈대다. 그리고 팔이 펴져 에 가까워지는 특이점에서는 감쇠항을 더해 발산을 눌러 준다. 편미분을 모은 행렬 하나가, 풀 수 없어 보이던 문제를 곱셈과 반복으로 바꿔 놓는 셈이다.

함께 읽기 — 이 글이 쓰는 기초 수학

출처

광고

리깅 파이프라인 자동화 도구

반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.

리깅 도구 보기