4.4 Newton-Euler Formulation
4.4.1 Basic Concepts
다시 우리에게 친숙한(?) Newton-Euler Formulation으로 돌아가자.
Motion(velocity, acceleration, inertal forces)는 base에서부터 end effector로, Force는 end effector에서 base 순서로 계산한다.
End effector에 force $\textbf{f}$와 moment $\textbf{n}$이 주어져 있고, joint torque가 주어져 있다고 하자.
Joint를 전부 분해한다. 그러면 각 link에 대해 internal force와 moment들이 표현된다. Action과 reaction들이 서로 상쇄된다는 점을 생각하자.
4.4.2 Rigid Body Dynamics
Rigid body dynamics로 돌아가보자.
Translational motion,
\[m \dot{\textbf{v}_C} = m \textbf{a} = \textbf{F}\]Rotation motion,
\[\textbf{I}_C \dot{\boldsymbol{\omega}} + \boldsymbol{\omega} \times \textbf{I}_C \boldsymbol{\omega} = \textbf{N}\]여기서, $C$는 center of mass
Angular Acceleration
3.2.9 참조.
\[\boldsymbol{\omega}_i = \boldsymbol{\omega}_{i-1} + \dot{\theta}_i \hat{\textbf{z}}_{i-1} \\ \dot{\boldsymbol{\omega}}_i = \dot{\boldsymbol{\omega}}_{i-1} + \dot{\theta}_i (\boldsymbol{\omega}_{i-1} \times \hat{\textbf{z}}_{i-1}) + \ddot{\theta}_i \hat{\textbf{z}}_{i-1}\]Velocity에 대한 recursive equation으로부터 얻을 수 있다.
Linear Acceleration
3.2.9 참조. 조금 더 복잡하다.
Inceremental velocity를 다음과 같이 정의하자. Prismatic joint라면 $0$이 아닐 것이다.
\[\textbf{V}_i = \dot{d}_i \hat{\textbf{z}}_{i-1}\]그러면,
\[\textbf{v}_i = \textbf{v}_{i-1} + \boldsymbol{\omega}_i \times {}^{i-1}\textbf{P}_i + \textbf{V}_i\]Derivative를 취하면
\[\begin{align*} \dot{\textbf{v}}_i &= \dot{\textbf{v}}_{i-1} + \dot{\boldsymbol{\omega}}_i \times {}^{i-1}\textbf{P}_i + \boldsymbol{\omega}_i \times {}^{i-1}\dot{\textbf{P}}_i + \dot{\textbf{V}}_i \\ &= \dot{\textbf{v}}_{i-1} + \dot{\boldsymbol{\omega}}_i \times {}^{i-1}\textbf{P}_i + \boldsymbol{\omega}_i \times (\boldsymbol{\omega}_i \times {}^{i-1}\textbf{P}_i) + 2 \dot{d}_i \boldsymbol{\omega}_i \times \hat{\textbf{z}}_{i-1} + \ddot{d}_i \hat{\textbf{z}}_{i-1} \end{align*}\]위 그림에서, \({}^{i-1}\textbf{P}_i = a_i \hat{\textbf{x}}_{i-1} + d_i \hat{\textbf{z}}_{i-1}\). DH parameter를 기억하자.
Center of mass에 대해 나타내면,
\[\textbf{v}_{C_i} = \textbf{v}_{i-1} + \boldsymbol{\omega}_i \times \textbf{p}_{C_i} \\ \dot{\textbf{v}}_{C_i} = \dot{\textbf{v}}_{i-1} + \dot{\boldsymbol{\omega}}_i \times \textbf{p}_{C_i} + \boldsymbol{\omega}_i \times (\boldsymbol{\omega}_i \times \textbf{p}_{C_i})\]이렇게 linear/angular acceleration에 대한 recursive equation 완성. $0$에서 시작해서 $n$으로 가는 outward iteration 형태이다.
4.4.3 Dynamic Forces on Link
Link $i$에 작용하는 internal force와 moment는
\[\textbf{F}_i = m_i \dot{\textbf{v}}_{C_i} \\ \textbf{N}_i = \textbf{I}_{C_i} \dot{\boldsymbol{\omega}}_i + \boldsymbol{\omega}_i \times \textbf{I}_{C_i} \boldsymbol{\omega}_i\]여기에 force/moment balance.
\[\textbf{F}_i = \sum \textrm{forces} \\ \textbf{N}_i = \sum \textrm{moments}\]이제 계산해 보자.
\[\textbf{F}_i = \textbf{f}_i - \textbf{f}_{i+1} \\ \textbf{N}_i = \textbf{n}_i - \textbf{n}_{i+1} + (-\textbf{p}_{C_i}) \times \textbf{f}_i + ({}^{i-1}\textbf{P}_i - \textbf{p}_{C_i}) \times (-\textbf{f}_{i+1})\]그런데 여기서 문제가 하나 있다. Mass는 어디로 갔지? Gravity는?
지금 상황에서는 필요없다. 일단 gravity-free space에서 움직인다고 가정하고, gravity term은 나중에 추가하기로 하자.
Recursive equation으로 만들자. 즉 link $i$에 대한 식으로 정리하면,
\[\textbf{f}_i = \textbf{F}_i = \textbf{f}_{i+1} \\ \textbf{n}_i = \textbf{N}_i + \textbf{n}_{i+1} + \textbf{p}_{C_i} \times \textbf{F}_i + {}^{i-1}\textbf{P}_i \times \textbf{f}_{i+1}\]따라서 이 식은 velocity와는 반대로 $n$에서 $0$으로 가는 inward iteration 형태이다. End effector에 주어진 힘과 모멘트로부터 joint를 거슬러 올라가는 방식이기 때문.
이를 토대로 joint torque를 계산하면
\[\tau_i = \begin{cases} \textbf{n}_i^T \hat{\textbf{z}}_{i-1} & \textrm{ Revolute}\\ \textbf{f}_i^T \hat{\textbf{z}}_{i-1} & \textrm{ Prismatic}\\ \end{cases}\]4.4.4 Gravity
Gravity를 고려하면 어떻게 될까? Ground에서 중력 가속도를 ${}^{0}\dot{\textbf{v}}_0 = \textbf{g}$로 두자.
그런데, 우리는 가속도에 대한 방정식을 recursive equation으로 계산했으므로, 공통되는 중력 가속도는 모조리 상쇄되고 만다.
따라서 중력을 고려한 운동 방정식 역시 똑같다!