[Introduction]강체 동역학 알고리즘
오늘날 컴퓨터를 활용한 강체 동역학(Rigid-body dynamics) 계산은 우리 주변 곳곳에서 쓰이고 있습니다. 컴퓨터 게임, 애니메이션, 가상현실(VR) 소프트웨어부터 시뮬레이터와 엔지니어링 설계 도구, 로봇 모션 제어 시스템에 이르기까지 그 활용 분야는 적용되어 활용되고 있습니다. . Roy Featherstone의 저서 «Rigid Body Dynamics Algorithms»의 1장에서는 이 방대한 분야를 다루기 위해 컴퓨터상에서 가장 효율적으로 계산을 수행하는 알고리즘과, 이를 뒷받침하는 강력한 수학적 도구인 **‘6차원 공간 벡터(Spatial Vectors)’**의 개념을 소개하고 있습니다
순동역학 vs 역동역학
강체 시스틈의 동역학은 시스템에 작용함는 '힘'과 그로 인해 발생하는 '가속도의 관계를 정의하는 **운동 방정식(Equation of motion)으로 설명할 수 있습니다. 컴퓨터가 수행하는 주요 동역학 계산은 목적에 따라 크게 두 가지로 나눌 수 있습니다.
순동역학 (Forward dynamics): 특정 강체 시스템에 어떤 힘이 주어졌을 때, 그 결과로 나타나는 가속도(움직임)를 계산하는 과정입니다 . 주로 물리 엔진이나 시뮬레이션에서 물체의 움직임을 예측할 때 사용됩니다.
역동역학 (Inverse dynamics): 반대로 주어진 가속도(원하는 움직임)를 만들어내기 위해 시스템에 얼마만큼의 힘을 가해야 하는지를 계산합니다 . 로봇 모션 제어 시스템, 궤적 계획, 기계 설계 등에 핵심적으로 활용됩니다
여기에 더해 가속도와 힘 변수 일부가 혼합되어 주어지는 '하이브리드 동역학(Hybrid dynamics)'도 존재합니다.
강체 시스템의 운동방정식은 아래와 같이 표준 형태로 표현될 수 있습니다.
\(\tau\): 관절에 가해지는 일반화 힘 벡터입니다. 회전 관절이면 토크(N·m), 직선 관절이면 힘(N)이 성분에 대응합니다.
\(q\): 관절 좌표(일반화 좌표) 벡터입니다. 각 성분은 rad 또는 m 등 관절 타입에 맞는 SI 단위를 씁니다.
\(\dot{q}\): 관절 속도 벡터입니다. \(q\)를 시간에 대해 미분한 값이며, 단위는 rad/s 또는 m/s입니다.
\(\ddot{q}\): 관절 가속도 벡터입니다. 단위는 rad/s² 또는 m/s² 입니다.
\(H(q)\): 관절공간 관성 행렬(joint-space inertia matrix)입니다. 자세 \(q\)에 의존하는 \(n\times n\) 대칭 행렬이며, “질량·관성 모멘트가 관절 좌표로 투영된 것”으로 이해하면 됩니다.
\(C(q,\dot{q})\): \(\ddot{q}\)에 비례하지 않는 bias 힘 벡터입니다. 코리올리·원심력, 중력, 그리고 \(\tau\)에 넣지 않은 기타 힘을 흡수합니다. \(q\)와 \(\dot{q}\) 모두에 의존합니다.
각각의 계산 절차 방식을 함수 형태로 표현하면 다음과 같이 표현할 수 있습니다.
기호 의미는 앞 절과 같고, 추가로 다음을 둡니다.
\(FD(\cdot)\): 순동역학 계산 절차(알고리즘)를 나타내는 함수입니다. 입력은 시스템 모델과 현재 상태 \((q,\dot{q})\)와 작용하는 힘 \(\tau\)이고, 출력은 관절 가속도 \(\ddot{q}\)입니다.
\(ID(\cdot)\): 역동역학 계산 절차입니다. 입력은 모델·상태·원하는 \({q}\), \(\dot{q}\), \(\ddot{q}\)이고, 출력은 필요한 힘 및 토크 \(\tau\)입니다.
이 방정식들을 식(1.1)과 비교해 보면, FD와 ID가 각각 아래와 같이 계산되어야 하는 것을 알 수 있습니다.
\(H(q)^{-1}\): 관절공간 관성 행렬의 역행렬입니다.
이 방정식들의 핵심은 각 계산의 입력과 출력을 명확하게 보여준다는 점에 있습니다. 특히, 두 경우 모두 시스템 모델 이 입력으로 사용된다는 것을 보여줍니다. 따라서 FD와 ID를 구현하는 알고리즘은 특정 부류의 강체 시스템에 대해 작동하며, 시스템 모델에 포함된 데이터를 사용하여 해당 모델로 기술된 특정 강체 시스템의 동역학을 계산할 수 있습니다. 우리는 이와 같이 작동하는 알고리즘을 **'모델 기반 알고리즘(model-based algorithm)'**이라고 부를 것입니다.
Spatial Vector
전통적인 동역학에서는 3차원 공간의 6자유도를 표현하기 위해 3D 벡터를 주로 사용했습니다. 하지만 이 방식을 사용하면 다음과 같이 강체의 움직임을 표현하기 위해 선형 운동(Linear)과 회전 운동(Angular)에 대한 두 개의 개별적인 벡터 방정식을 세워야만 했습니다. 이로 인해 동역학은 복잡한 '대수학의 바다'에 빠져 수식이 비효율적으로 길어지는 문제가 있었습니다.
\(f\): 질점에 가까운 의미의 합력(3D, N). 질량중심 가속도에 대응합니다.
\(m\): 강체 질량(kg, 스칼라).
\(a_{C}\): 질량중심 \(C\)의 선가속도(m/s², 3D 벡터).
\(n_{C}\): 질량중심 기준 모멘트(N·m, 3D 벡터).
\(I\): 질량중심 기준 회전 관성 텐서(\(3\times 3\), kg·m²).
\(\omega\): 각속도(rad/s, 3D 벡터).
\(\dot{\omega}\): 각가속도(rad/s², 3D 벡터).
이 문제의 해결책으로 선형적 측면과 각적 측면을 하나로 통합한 6차원 공간 벡터(6D Spatial Vectors) 표기법 을 도입합니다. 즉, 선형 및 각가속도를 합쳐 하나의 '공간 가속도 벡터'로 만들고, 힘과 모멘트를 합쳐 하나의 '공간 힘 벡터'로 표현하는 것입니다
\(f\): spatial force(6D). 3D 힘과 모멘트를 한 벡터로 합친 양입니다.
\(v\): spatial velocity(6D). 각속도와 선속도 정보를 통합한 운동 속도입니다.
\(a\): spatial acceleration(6D). spatial 의미의 가속도입니다.
\(I\): spatial inertia(보통 \(6\times 6\)). 질량·질량중심·회전 관성을 한 텐서에 담습니다.
\(\times^{*}\): spatial 벡터에 대한 힘 쪽 교차곱(spatial cross-product operator의 dual). \(v\times^{*}(\cdot)\) 형태로 bias 힘 \(v\times^{*}Iv\)를 만듭니다. . 또한 두 강체를 붙여 하나의 강체로 만들 때 spatial 관성 합성은 아래와 같이 표현과 같이 단순해 질 수 있으며 이러한 단순화는 실제 컴퓨터 계산에서 상당한 계산 시간을 줄일 수 있습니다.
\(I_{1}\), \(I_{2}\): 합치기 전 각 강체의 spatial inertia
\(I_{\mathrm{new}}\): 합쳐진 강체의 spatial inertia
참고: Roy Featherstone, Rigid Body Dynamics Algorithms, Springer, 2008, Chapter 1. Springer: https://link.springer.com/book/10.1007/978-1-4899-7560-7