22๊ฐ 3D Rotations
์ง๋ ์๊ฐ์ ์ด์ด์ ์ด๋ฒ ์๊ฐ์๋ ์ฐจ์์ ํ์ฅํ์ฌ 3์ฐจ์ ์ ์ฒด ๊ณต๊ฐ์์์ ์์ง์์ ๋ค๋ฃจ๊ณ ์ ํ๋ฉฐ, 3์ฐจ์ ๊ณต๊ฐ์์ ๊ฐ๋, ํ์ ์ ํํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ด ์๋ค.
- x-y์ถ์ ๊ฐ๋ 2์ฐจ์ ํ๋ฉด์์ ํ์ ํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค.
- ์ด์ , ์ฐจ์์ ํ์ฅํ์ฌ 3์ฐจ์์ ์ดํด๋ณด๋ฉด, xyz์ถ ๊ฐ๊ฐ์ ๋ํ ํ์ ๊ฐ $\phi, \theta, \psi$ ์ด ํ์ํ๋ฉฐ, ์ด์ ๋ฐ๋ผ ํ์ ํ๋ ฌ๋ 3๊ฐ๊ฐ ํ์ํจ์ ์ ์ ์์ต๋๋ค.
๐ก y์ถ์ ๋ํ ํ์ ํ๋ ฌ์์ ์์์ ๋ถํธ์ ์ฃผ์ํฉ๋๋ค.
- ์ง๊ธ๊ณผ ๊ฐ์ด 3์ฐจ์์์์ ๊ฐ๋๋ฅผ 3๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ํํํ๋ ๋ฐฉ์์ โ์ค์ผ๋ฌ ๊ฐ๋ ์ฒด๊ณโ๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ถ์ ์์์ ๋ฐ๋ผ ์ด๋ฅผ ํํํ๋ ์ฌ๋ฌ ์กฐํฉ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด์ค์์ z-y-x ํน์ โ3-2-1โ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์กฐํฉ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ( ์ด๋ค ์กฐํฉ์ ์ฌ์ฉํด๋ ๊ฒฐ๊ณผ๋ง ๊ฐ์ผ๋ฉด ๋ฌด๊ดํฉ๋๋ค.)
- 3์ฐจ์ ํ์ ํ๋ ฌ์ ํน์ง๋ค์ ์ดํด๋ณด๊ณ ์ ํฉ๋๋ค. ์ฒซ์งธ๋ก, ํ์ ํ๋ ฌ์ ํน์ฑ์ ์๊ธฐ ์์ ์ transpose์ ๊ณฑํด์ง๋ฉด identity matrix๊ฐ ๋ฉ๋๋ค.
- ๋๋ถ์ด, 2D space์์๋ $R(\theta_1)R(\theta_2) = R(\theta_1+\theta_2)$ ์ฆ, commutativity๊ฐ ๋ง์กฑํ์ง๋ง, 3D space์์๋ ์ด๋ฌํ ์ฑ์ง์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ด 1) x์ถ 90๋ ํ์ 2) y์ถ 90๋ ํ์ ์ ๊ฒฐ๊ณผ๋ 1) y์ถ 90๋ ํ์ 2) x์ถ 90๋ ํ์ ๊ฒฐ๊ณผ์ ์ ํ ๋ค๋ฅธ ๊ฒ์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ฌํ ํน์ง ๋๋ฌธ์ ์ด๋ฒ ์ฑํฐ์์ ํ์ ์ ๋ํด์ ์์ธํ ์ดํด๋ณด๊ณ ์ ํฉ๋๋ค.
- ์์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ z-y-x ์์คํ ์์๋ frame ์ฌ์ด ๋ณํ์ ์๋์ ๊ฐ์ด ์ ๋ฆฌํ์ฌ ์ฌ์ฉํฉ๋๋ค. body frame์์์ ์ขํ c3๋ฅผ world frame ์ขํ c0 ๊ธฐ์ค์ผ๋ก ์ฎ๊ธฐ๊ธฐ ์ํ ํ์ ํ๋ ฌ R์ ์๋์ ๊ฐ์ด ๊ตฌํ ์ ์๋ ๊ฒ์ด์ง์.
- ์ค์ ํ์ ํ๋ ฌ๋ค์ ๊ณฑ์
์ ๋ชจ๋ ๊ณ์ฐํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. (์ธ์ธ ํ์๋ ์ ํ ์์ผ๋ฉฐ, ์ฐ๋ฆฌ๋
sympy๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฑฑ์ ํ์ง ์์ผ์ ๋ ๋ฉ๋๋ค.)
equation from : wikipedia
์ฝ๋ ๊ตฌํ
์ฒซ๋ฒ์งธ ์ดํด๋ณผ ์ฝ๋๋ rotation_of_a_box_321_euler.py ์
๋๋ค. ์คํ๋ถํฐ ํด๋ณผ๊น์?python3 rotation_of_a_box_321_euler.py
๊ทธ๋ฆผ์์ ๋นจ๊ฐ์, ์ด๋ก์, ํ๋์ ๋ง๋๋ ๊ฐ๊ฐ x, y, z ์ถ์ ์๋ฏธํฉ๋๋ค. ๊ด์ต์ ์ผ๋ก, ๋ก๋ด ์์คํ ์ ๋๋ถ๋ถ x์ถ์ ์ ๋ฉด์ผ๋ก ๋ก๋๋ค. (๋น์ ์์คํ ์ z์ถ์ ์ ๋ฉด์ผ๋ก ๋์ง์.)
- main ํจ์๋ฅผ ์ดํด๋ณด๋ฉด, 3๊ฐ์ ๊ฐ๋ $\phi, \theta, \psi$๋ฅผ ์ค์ ํ ๋ค
animate๋ผ๋ ํจ์์ ๋์ ํ์ฌ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋๋ก ํ๊ณ ์์ต๋๋ค. (phi, theta, psi๋ ๊ฐ๊ฐ x,y,z์ถ ๊ธฐ์ค์ ํ์ ๊ฐ์ด ๋ฉ๋๋ค.)
animateํจ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ต๋๋ค.
- ๊ผญ์ง์ ์ ํตํด cube ์ ์ํ๊ธฐ
- ์ ์๋ cube์ 3์ฐจ์ ํ์ ์ ์ ์ฉํ์ฌ ์๋ก์ด ๊ผญ์ง์ ๋ค์ ๊ณ์ฐํ๊ธฐ
- cube์ xyz ์ถ, ๊ธ์๋ฅผ ์๊ฐํํ๊ธฐ
- z-y-x ํ์ ์กฐํฉ์ ์ฌ์ฉํ๋ ํ์ ํ๋ ฌ์ ์ธ ๊ฐ์ matrix๋ฅผ ๊ตฌํด ํ๋ ฌ๊ณฑ์ ๊ณ์ฐํ์ฌ ๊ตฌํํฉ๋๋ค.
- ๋๋ฒ์งธ ์ดํด๋ณผ ์ฝ๋๋
main_commutativity.py๋ก, 3์ฐจ์ ํ์ ์ ๋ํด commutativity๊ฐ ์ฑ๋ฆฝํ์ง ์์์ ํ์ธํ๋ ์์์ ๋๋ค.
python3 main_commutativity.py
๊ทธ๋ฆผ์์ ๋ณด๋ ๋ฐ์ ๊ฐ์ด
- phi 90๋ ํ์ ํ theta 90๋ ํ์ ์ ๊ฒฐ๊ณผ์
- theta 90๋ ํ์ ํ phi 90๋ ํ์ ์ ๊ฒฐ๊ณผ๋ ์ ํ ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ต๋๋ค.
๐ก ๋๋ฒ์งธ ์์ ์ฝ๋๋ ์ฒซ๋ฒ์งธ ์์์ ์์ฉ์ด๋ฏ๋ก ์ฝ๋ ๊ตฌํ์ ๋ํ ์ค๋ช ์ ์๋ตํ๊ฒ ์ต๋๋ค.
Linear and Angular velocity in 3D space
๋๋ถ๋ถ์ ๋ก๋ด๋ค์ joint angle ์ ์ด๊ฐ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ joint์ ๊ฐ์๋๋ฅผ 3์ฐจ์์ ์ ์๋๋ก ๋ณํ, ํน์ ๊ทธ ๋ฐ๋ ์์ ์ด ํ์ํฉ๋๋ค. ํ์ง๋ง 3์ฐจ์์์์ ๊ฐ์๋๋ ๋ค์ ์ง๊ด์ ์ด์ง ๋ชปํ ํํ๋ฅผ ๊ฐ๋๋ฐ์. ์ฐจ๊ทผ์ฐจ๊ทผ ์ ๋๋ฅผ ํตํด ์ด๋ฅผ ๋์ถํด๋ณด๊ฒ ์ต๋๋ค.
- 2์ฐจ์์์๋ถํฐ ์์ํด๋ณด๋ฉด, ์ ์๋๋ ๊ฐ์๋์ ์ถ์ ๋ฐฉํฅ๋ฒกํฐ r์ product form์ ๊ฐ์ต๋๋ค. (ํน์ Jacobian๊ณผ velocity state vector $\dot{q}$ ์ ๊ณฑ)
- ์ด ์์์ ๊ทธ๋๋ก 3์ฐจ์์ผ๋ก ํ์ฅํด๋ณด๋ฉด, vector์ vector์ ๊ณฑ์ด ๋๊ธฐ ๋๋ฌธ์ cross product ๊ณ์ฐ์ ์ํํด์ผ ํ๋ ๋ณต์กํ ์ํฉ์ด ๋ฐ์ํฉ๋๋ค.
- ๋ฒกํฐ์ cross product๋ฅผ ์ข ๋ ๋น ๋ฅด๊ฒ ๊ณ์ฐํ ์๋ ์์๊น์? cross product ์ ์ข์ธก์ ๊ณฑํด์ง๋ vector๋ฅผ Skew Symmetric Matrix๋ก ๋ณํํ๋ฉด, Martix x Vector ํํ๋ก ์ ํํ๋ ๊ณ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค. Skew Symmetric Matrix์ ์ ์์ ํน์ง์ ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
์ด๋ฒ์๋ 3์ฐจ์์์์ ๊ฐ์๋๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ด ์๋ค. (๋จ์ํ ํ๋์ ์ถ์ ๋ํด ํ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์์ ๋กญ๊ฒ ํ์ ํ๋ ๋ฌผ์ฒด๋ฅผ ์์ํด๋ณด์ธ์!)
- 3์ฐจ์์์์ ๊ฐ์๋๋ ๋จ์ํ ๊ฐ ์ถ์ ๊ฐ์๋๋ฅผ ๊ตฌํ๊ณ ๋ํ ๊ฒ์ด ์๋๋๋ค. ์ด๋ ๊ฒ ํํํด๋ฒ๋ฆฌ๋ฉด ๋ง์ ์ ์์๊ฐ ๋ฐ๋์ด๋ ๊ฐ์ ๊ฐ์๋๋ฅผ ๊ฐ์ ธ์ผ ํ๋๋ฐ, ์์ ํ์ตํ ๋ด์ฉ์ ์ ๊ธฐ์ตํด๋ณด๋ฉด 3์ฐจ์ ๊ฐ๋๋ commutative ํ์ง ์์์์ง์.
$$ \vec{w} \neq \dot{\phi} \hat{i} + \dot{\theta} \hat{j} + \dot{\psi} \hat{k} $$
๋ฐ๋ผ์, ์ด๋ฒ ์ฑํฐ์์๋ 3์ฐจ์ ๊ฐ์๋๋ฅผ ๊ตฌํ๊ธฐ ์ํ ์ฆ๋ช ๊ณผ์ 2๊ฐ์ง๋ฅผ ํจ๊ป ์ดํด๋ณด๊ณ ์ ํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ๊ฐ์ง๋ง, ๊ณผ์ ์์ ์ฐจ์ด๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค.
Method 1
์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ Rotation Matrix์ ์ฑ์ง๊ณผ Skew symmetric matrix์ ํน์ฑ์ ์ด์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
- Rotation Matrix R์ ํน์ฑ์ ๋ํ๋ด๋ ์๋ ์์ ๋ฏธ๋ถํด๋ด ์๋ค. (ํ๋ ฌ์ ๋ฏธ๋ถํ๋ค๋ ๊ฐ๋ ์ด ์ด์ํ ์๋ ์๋๋ฐ์. ์ด๋ฒ ์๊ฐ์๋ ๋ณต์กํ๊ฒ ์๊ฐํ์์ง ๋ง๊ณ ๋จ์ํ ํธ๋ฏธ๋ถ์ ๊ณ์ฐํ๋ค๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.)
$$ RR^T = I \\ \dot{R} R^T + R \dot{R}^T = 0 $$
- ์์ ์์์ ๋๋ฒ์งธ ํญ์ ๊ฐ์ ๋ก transpose๋ฅผ ๋ ๋ฒ ์ ์ฉํ๊ณ ์์ ์ ๋ฆฌํ๋ฉด, $\dot{R}R^T$๋ skew symmetric matrix์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
$$ \dot{R}R^T + ((R \dot{R}^T)^T)^T = 0 \\ \dot{R}R^T + (\dot{R} {R}^T)^T = 0 \\ S(a) + S(a)^T = 0 \quad \because S(a) = \dot{R}R^T $$
- skew symmetric matrix์ด๊ธฐ ๋๋ฌธ์ ์๋ณ์ ์ค๋ฅธ์ชฝ์ rotation martix $R$์ ๊ณฑํ๋ฉด ์๋์ ๊ฐ์ ํํ๋ ๋ง๋ค ์ ์์ง์. ( Rotation Matrix์ ๋ฏธ๋ถ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ๊ฒ์ ๋๋ค!)
$$\dot{R}R^T = S(a) \\ \dot{R} R^T R = S(a) R \\ \dot{R} = S(a) R $$
- ์ด๋ฒ์๋ body frame์์์ ๋ฐฉํฅ ๋ฒกํฐ $r_b$๋ฅผ world frame์ผ๋ก ๋ณํํ๋ ์๋ ์์ ์๋ณ ๋ฏธ๋ถํด๋ณด๊ฒ ์ต๋๋ค.
- ์์ ๊ตฌํ๋ Rotation Matrix์ ๋ฏธ๋ถ์ด ๋ฑ์ฅํ๋ค์! ๊ธฐ์ ๋ง์์ผ๋ก ์์ ๊ณ์ฐํ ๊ฐ์ ๋์ ํ ๋ค, ์์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค. ์ ๋ฆฌ ํ ๋ฐ๋ณต๋๋ ๋ฐฉํฅ ๋ฒกํฐ์ ๋ณํ์์ ์ ๋ฆฌํ๋ฉด, ๊ฐ์๋์ skew symmetric matrix, $S(w)$๊ฐ ์ ๋๋ฉ๋๋ค.
- ์ ๋ํ $S(w)$์ ์ค์ง์ ์ธ ๊ฐ์ ๊ณ์ฐํจ์ผ๋ก ๊ฐ์๋ ๋ฒกํฐ $w$๋ฅผ ๊ณ์ฐํด๋ณด๊ฒ ์ต๋๋ค. z-y-x ๊ฐ๋ ์ฒด๊ณ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ rotation matrix๋ฅผ ์ธ๊ฐ์ ํญ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ ๋ฆฌํฉ๋๋ค.
Method 2
์ด๋ฒ์๋ ๋ณด๋ค ์ง๊ด์ ์ธ ์ ๊ทผ์ผ๋ก ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด๋ณด๊ฒ ์ต๋๋ค.
- ํ์ฌ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉ์ค์ธ z-y-x ๊ฐ๋ ์ฒด๊ณ๋ฅผ ๋ค์ ํ ๋ฒ ์๊ฐํด๋ณด๋ฉด, z์ถ์ ๊ฐ์๋๋ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๊ณ , theta์ ์ค์ฌ์ด ๋๋ ์ถ์ ์ด๊ธฐ $\hat{j}$ ์ถ์ z์ถ์ผ๋ก ๋ณํํ ์ํ์์์ ๊ฐ์๋์์, ๊ทธ๋ฆฌ๊ณ phi์ ์ค์ฌ์ด ๋๋ ์ถ์ ์ด๊ธฐ $\hat{i}$ ์ถ์ z์ถ์ผ๋ก ๋ณํ, y์ถ์ผ๋ก ๋ค์ ๋ณํํ ์ํ์์์ ๊ฐ์๋์์ ํ์ธํ ์ ์์ต๋๋ค. (์ด ๊ฒฐ๊ณผ๋ ์์ ๋ณต์กํ ์ ๋ ๊ฒฐ๊ณผ์ ๋์ผํฉ๋๋ค.)
- ๋ฐ๋๋ก world frame์์์ euler angle๊ณผ velocity๋ฅผ ํตํด body frame์์์ ๊ฐ์๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ํ ์ ์์ต๋๋ค.
- ์ต์ข ์ ์ผ๋ก ์์ ๋ฒกํฐ ํํ์์ ๊ณ์ฐํ๊ณ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ์ด matrix * velocity ํ์์ผ๋ก ํํ๋๋ฉฐ, ๊ฒฐ๊ตญ ํ์ฌ ์ขํ๊ณ์์ ๊ฐ ์ถ์ ๋ํ euler angle๊ณผ euler angular velocity๊ฐ ์ฃผ์ด์ง ์, world frame์์์ ๊ฐ์๋, body frame์์์ ๊ฐ์๋๋ก ๋ณํ์ด ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒ์ด์ง์.
- ๋ฐ๋๋ก, ๋ณํ ํ๋ ฌ์ inverse๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ frame์์ ๊ฐ์๋๊ฐ ์ฃผ์ด์ก์ ๋ euler angle์ ๊ตฌํ ์ ์์ต๋๋ค.
๐ก ํ์ง๋ง! ๊ทธ inverse ๊ณ์ฐ ์ determinant๊ฐ 0์ด ๋๋ singularity๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ $cos(\theta) = 0$์ผ๋ ๋ฐ์ํ๋ฉฐ, ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด quarternion์ด๋ผ๋ ๊ฐ๋ ์ฒด๊ณ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฝ๋ ๊ตฌํ
์ดํ ๋ค์ํ ์์๋ฅผ ๊ตฌํํ๊ธฐ ์ํด angular velocity๋ฅผ sympy๋ก ๊ณ์ฐํ๋ ์ฝ๋๋ฅผ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค. world frame๊ณผ body frame์์์ ๊ฐ์๋๋ฅผ ์์๋ก ์ค๋นํ์์ต๋๋ค.
- ์ฐ์ฐ์ ์ํด ํ์ํ ํํธ์ธ unit vector์ rotation matrix์ ๋๋ค.
- ์์์ ๋ง์ถ์ด world frame angular veolocity์ body frame angular velocity๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ๊ฒฐ๊ณผ ์ถ๋ ฅ ์ determinant๋ ์ถ๊ฐํ์๋๋ฐ์, ๋ ํ๋ ฌ ๋ชจ๋ determinant๋ก cos(theta)๋ฅผ ๊ฐ์ง์ ์ ์ ์์ต๋๋ค. ๋๋ฌธ์ theta๊ฐ +pi/2, -pi/2๊ฐ ๋์ด๋ฒ๋ฆฌ๋ฉด sigularity๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด์ง์.
- ๊ฐ์๋๊ฐ ์ฃผ์ด์ง ํ ์ํฉ์์ joint์ ๋ฐฉํฅ ๋ฒกํฐ๋ฅผ ์๋ฉด cross product๋ฅผ ํตํด ์ ์๋๊น์ง ๊ตฌํ ์ ์์ ๊ฒ์ ๋๋ค.



















