Published on

고급컴퓨터그래픽스 | Rigid Body Dynamics

Physics Basics for Rigid Body Dynamics

아래는 간단하게 강체 운동관련 용어에 대해 정리해보았다.

  • Rigid body(강체): 외력이 가해져도 모양이나 크기가 변하지 않는 물체. 강체 운동은 질량 중심의 병진 운동과 질량 중심을 지나는 축에 대한 회전 운동의 합으로 표현할 수 있다.

  • Center of Mass(COM): 이산적인 질량 분포를 가정하면, 질량의 중심 c는 c=miximic=\frac{\sum m_i x_i}{\sum m_i}. 즉, 전체 질량에서 평균 위치를 뜻한다. 연속적인 질량 분포라면, 비슷하게 적분을 이용하여 특정 위치에서의 밀도로 계산되어 진다.

  • Torque: 돌림힘, 사실 말이 힘이지 힘과 팔의 길이를 곱한 물리량(τ=r×F\tau = r \times F)이다. 그래서 돌림힘은 축의 중심에서 외적값으로 표현된다.

  • Net force, Net torque (알짜힘, 알짜돌림힘): 모든 외력의 합 혹은 외력의 결과로 생기는 무게 중심에 대한 돌림힘에 작용한 결과라고 해석하면 된다. 쉽게 말해 줄다리기에서 알짜힘 방향으로 넘어가는 쪽이 이기는 쪽이라고 생각하면 쉽다.

  • Angular velocity: 각속도

  • Angular momentum

    • particle: L=r×p=r×mvL = r \times p = r \times mv
    • rigidbody: L=IωL = I \cdot \omega
    • r: 원점에서 입자까지의 위치 벡터, p: 입자의 선운동량
    • I: 관성 텐서, ω\omega: 각속도
  • 각운동량 보존 법칙: 어떤 계의 외부에서 돌림힘이 가해지지 않으면, 계의 각운동량은 변하지 않는다.

스칼라 관성 모멘트(Moment of Inertia)

물체가 회전하기 어려운 정도를 나타낸다. 회전운동에서 있어서 질량의 의미를 가져, 회전 질량이라고 불리기도 한다.

회전 질량은 물체의 각 부분의 질량 뿐만 아니라 각 부분의 회전축 간의 거리에 따라서도 달라진다. ➡ 회전축이 달라지면 관성모멘트도 달라진다.

어떤 주어진 축을 중심으로 회전하는 점질량에 대한 스칼라 관성 모멘트는 아래와 같다.

I=mr2I = mr^2

  • m as mass, r as distance

이산적인 질량은 위 공식의 누적값으로 계산되지만, 연속 질량의 경우 적분을 이용하여 질량 부분을 밀도로 계산되어진다. 각 케이스 별로 공식이 존재하나 이를 모두 외울 필요는 없고 적재적소 이해하고 적용하면 된다.

관성 텐서(Inertia Tensor)

스칼라 관성모멘트는 하나의 회전축에서 표현되는 값으로 3차원 회전 기술하기엔 어려움이 있다 따라서 3차원 회전에서의 질량의 역할을 하는 물리량을 관성 텐서이다.

주로 질량중심을 기준으로 계산된 것이 쓰이게 된다.

I=[IxxIxyIxzIxyIyyIyzIxzIyzIzz]\mathbf{I} = \begin{bmatrix} I_{xx} & -I_{xy} & -I_{xz} \\ -I_{xy} & I_{yy} & -I_{yz} \\ -I_{xz} & -I_{yz} & I_{zz} \end{bmatrix}

대각선 성분은 각축의 대한 회전질량을 의미(Moment of inertia)하고 그 외는 어떤 축에 대한 각운동량이 얼마나 영향을 미치는 정도(Product of inertia)를 의미한다.

관성 텐서의 특징으로 Linear momentum은 linear velocity와 평행하거나 비례하지만 angular momentum은 angular velocity와 평행하지 않을 수 있다.

관성텐서에는 principle axes라고 세 개의 축이 서로 수직을 이루는데, 질량의 중심에서 교차한다. 다른 축에 대한 관성텐서가 최소한의 값을 가지는데, 해당 축은 다른 두 축에서 orthogonal하다.

회전된 강체에서 관성텐서는 I(t)=R(t)IobjectR(t)TI(t) = R(t)I_{object}R(t)^T

  • IobjectI_{object}: untransformed object의 관성텐서
  • R(t)R(t): object's rotation

Parallel Axis Theorem

질량 중심을 관통하는 회전축에 대한 관성 모멘트를 알면, 그와 평행한 회전축에 대한 관성 모멘트를 쉽게 구할 수 있다.

I=Icm+md2I= I_{cm} + md^2

  • Icm:질량중심을관통하는회전축에대한관성모멘트,m:질량,d:두회전축사이길이I_{cm}: 질량 중심을 관통하는 회전축에 대한 관성 모멘트, m: 질량, d: 두 회전축 사이 길이

translated된 object에 대해 일반화를 하면 다음과 같다.

I=I0+m[(RR)E3R×R]I = I_0 + m[(R \cdot R)E_3 - R \times R]

  • I0I_0: inertia tensor of COM, R: displacement vector, E3E_3: 3x3 identity matrix

Rigid Body Dynamics

Articulated Body Dynamics

각 관절마다 DOF에 따라 state variable이 직접적으로 쓰인다.

Overview of Physically Based Character Animation

물리 기반 시뮬레이션을 거쳐서 보통 애니메이션을 모사하거나 계획을 하는데, 동작 계획에 있어서 최적화 접근법(trajectory optimization approach)는 최적의 돌림힘, 힘, 가속도, 경로를 제시한다.

  • Spacetime Constraint
  • Miminize actuator power
  • Subject to start/end positions, contact constraints, equation of motion

최근 연구는 시뮬레이션 기반 접근법을 이용하는데(Simulation based approach ➡ Physically based character control),

  • Controller design: 균형을 잃지 않고 원하는 동작이 나오는지
  • Adversarial attacks/unexpected events에 잘 대응하는지 가 주요 해결점이라고 볼 수 있다.

Controller

적재적소 timestep에 적절한 관절의 돌림힘을 넣어야하는데, 어떻게 할까?

일반 물체와 달리 캐릭터 rigid body는 관절 내의 힘으로 움직이기 때문에 외력에 버티기 위해서는 캐릭터 내 관절의 힘을 어떻게 부여하는지가 굉장히 중요한 문제이다.

시뮬레이션 loop 내에서는 controller의 결과가 simulator로 취합해서 들어가게 된다.

PD Control

Proportional-Derivative Control의 준말이다.

kpk_pkdk_d 값은 임의로 설정이 가능하다. 이를 pd gain이라고 일컫는다. 관절마다 다른 값이 들어갈 수 있으며 값이 작을 수록 안정적이다. 적절한 pd gain을 얻기 위해 stochastic optimization(CMAes)방법이 존재한다.

  • Stable PD Control enables robust simulation with high PD gains

PD control은 관절 돌림힘의 차를 현재와 원하는 위치와 속도를 각도 관점에서 풀어쓴 것이다.

  • 1 or 2 DOF rotational joints or any translational joints: τi=kp(qdiqi)+kd(qdi˙qi˙)\tau^i = k_p(q_d^i-q_i) + k_d(\dot{q_d^i} - \dot{q_i})
  • 3 DOF rotational joints: τ=kp(log(RTRd))+kd(qd˙q˙)\tau = k_p(\log(R^TR_d)) + k_d(\dot{q_d} - \dot{q})

Model Description File Format

다관절체 캐릭터 혹은 로봇이 어떻게 구성이 되어 있는가를 기술하는 파일. 일반적으로 joint, body(link), shape 등에 대한 정보를 담는다.

이는 사실 urdf 파일이라고 로보틱스에서 자주 시뮬레이션 때 사용되는데, 그 외에도 .sdf, .osim, .skel이 있다.

크게 link와 link를 잇는 joint, 그리고 visual과 collision을 담당하는 태그도 존재한다. ROS URDF에서 더 많은 내용을 확인해보는 것을 추천함.

Using Physics Engines - dartpy

시뮬레이션 엔진으로 여러가지가 존재하는데 강의에서는 dartpy에 대해 잠깐 언급하고 넘어간 분위기였다.

약간.. 전에 다뤘던 clean code에 적합한 프레임워크이기 때문에 소개한 것 같다. 개인적으로 isaac gym 이전에 pybullet을 잠깐 사용한적이 있었는데, 몇개월 사용소감은..너무 더럽(?)다는 것이다. 때문인지 작년부터 업데이트가 뜸하더라..

Wrapup & Conclusion

다음 포스트는 드디어 이 강의에서 마지막이다. 사실 이 포스트 이전에 particle dynamics에 대해 수업을 나갔었는데, 안타깝게도.. 내가 유체나 particle dynamics에 대해 잘 모른다..ㅠ 아는 거라곤 파티클끼리의 충돌... 예전에 학부 연구실에 있을 때도 뭔말인지 몰랐는데, 기억 나는 거는 euler method 중에 implicit한 method에 대해 귀가 박히도록 들었는데, 지금은 다 까먹었다...ㅋㅋㅋㅋ ㅠㅠㅠ 모자른 내탓이지 모..

Authors