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 ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  1. ๊ผญ์ง“์ ์„ ํ†ตํ•ด cube ์ •์˜ํ•˜๊ธฐ
  2. ์ •์˜๋œ cube์— 3์ฐจ์› ํšŒ์ „์„ ์ ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ผญ์ง“์ ๋“ค์„ ๊ณ„์‚ฐํ•˜๊ธฐ
  3. cube์™€ xyz ์ถ•, ๊ธ€์ž๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ธฐ


  • z-y-x ํšŒ์ „ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ํšŒ์ „ ํ–‰๋ ฌ์€ ์„ธ ๊ฐœ์˜ matrix๋ฅผ ๊ตฌํ•ด ํ–‰๋ ฌ๊ณฑ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.


  • ๋‘๋ฒˆ์งธ ์‚ดํŽด๋ณผ ์ฝ”๋“œ๋Š” main_commutativity.py๋กœ, 3์ฐจ์› ํšŒ์ „์— ๋Œ€ํ•ด commutativity๊ฐ€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์Œ์„ ํ™•์ธํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
python3 main_commutativity.py

๊ทธ๋ฆผ์—์„œ ๋ณด๋Š” ๋ฐ”์™€ ๊ฐ™์ด
  1. phi 90๋„ ํšŒ์ „ ํ›„ theta 90๋„ ํšŒ์ „์˜ ๊ฒฐ๊ณผ์™€
  2. 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๋ฅผ ํ†ตํ•ด ์„ ์†๋„๊นŒ์ง€ ๊ตฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Complete and Continue