本文仅供学习使用
本文参考:
B站:CLEAR_LAB
笔者带更新-运动学
课程主讲教师:
Prof. Wei Zhang
Kinematics is a branch of classical mechanics that describes the motion of points, bodies(objects), and systems of bodies(groups of objects) without considering the mass of each or the forces that caused the motion
Consider a 2R robot:
Three links and two joints θ 1 , θ 2 \theta _1,\theta _2 θ1,θ2
Link/body frame attached to link i i i at joint i i i (one of possible choices)
Fixed/world frame { s } \left\{ s \right\} {s} frame, end-effector frame { b } \left\{ b \right\} {b}
Goal : compute [ T B S ( θ 1 , θ 2 ) ] \left[ T_{\mathrm{B}}^{S}\left( \theta _1,\theta _2 \right) \right] [TBS(θ1,θ2)] : function of θ 1 , θ 2 \theta _1,\theta _2 θ1,θ2
Initial pose: [ M ] = [ T B S ( 0 , 0 ) ] \left[ M \right] =\left[ T_{\mathrm{B}}^{S}\left( 0,0 \right) \right] [M]=[TBS(0,0)]
[ M ] = [ T B S ( 0 , 0 ) ] = [ 1 0 0 L 1 + L 2 0 1 0 0 0 0 1 L 0 0 0 0 1 ] \left[ M \right] =\left[ T_{\mathrm{B}}^{S}\left( 0,0 \right) \right] =\left[ \begin{matrix} 1& 0& 0& L_1+L_2\\ 0& 1& 0& 0\\ 0& 0& 1& L_0\\ 0& 0& 0& 1\\ \end{matrix} \right] [M]=[TBS(0,0)]= 100001000010L1+L20L01
Fixed joint 1 at θ 1 = 0 \theta _1=0 θ1=0, rotate about joint 2 by θ 2 \theta _2 θ2 , we have T B S ( 0 , θ 2 ) T_{\mathrm{B}}^{S}\left( 0,\theta _2 \right) TBS(0,θ2)
Rigid body motion for Link2/ { b } \left\{ b \right\} {b} , represented by screw motion
In coordinate-free way : [ M ] θ 1 = 0 , θ 2 = 0 ⟶ [ T ] = e [ S 2 0 ] θ 2 [ T ] [ M ] = e [ S 2 0 ] θ 2 [ M ] \underset{\theta _1=0,\theta _2=0}{\left[ M \right]}\overset{\left[ T \right] =e^{\left[ \mathcal{S} _{2}^{0} \right] \theta _2}}{\longrightarrow}\left[ T \right] \left[ M \right] =e^{\left[ \mathcal{S} _{2}^{0} \right] \theta _2}\left[ M \right] θ1=0,θ2=0[M]⟶[T]=e[S20]θ2[T][M]=e[S20]θ2[M]
In { s } \left\{ s \right\} {s} \ { o } \left\{ o \right\} {o} frame [ T B S ( 0 , θ 2 ) ] = e [ S 2 0 ] θ 2 [ T B S ( 0 , 0 ) ] \left[ T_{\mathrm{B}}^{S}\left( 0,\theta _2 \right) \right] =e^{\left[ \mathcal{S} _{2}^{0} \right] \theta _2}\left[ T_{\mathrm{B}}^{S}\left( 0,0 \right) \right] [TBS(0,θ2)]=e[S20]θ2[TBS(0,0)]
S 2 0 \mathcal{S} _{2}^{0} S20 is a function of θ 1 \theta _1 θ1 , more precisely S 2 0 ( θ 1 ) \mathcal{S} _{2}^{0}\left( \theta _1 \right) S20(θ1)
Now θ 1 = 0 \theta _1=0 θ1=0, define S ˉ 2 0 = S 2 0 ( 0 ) , S ˉ 2 0 = [ ω ⃗ 2 0 v ⃗ 2 0 ] , ω ⃗ 2 0 = [ 0 0 1 ] \bar{\mathcal{S}}_{2}^{0}=\mathcal{S} _{2}^{0}\left( 0 \right) ,\bar{\mathcal{S}}_{2}^{0}=\left[ \begin{array}{c} \vec{\omega}_{2}^{0}\\ \vec{v}_{2}^{0}\\ \end{array} \right] ,\vec{\omega}_{2}^{0}=\left[ \begin{array}{c} 0\\ 0\\ 1\\ \end{array} \right] Sˉ20=S20(0),Sˉ20=[ω20v20],ω20= 001
h = 0 , v ⃗ 2 0 = − ω ⃗ 2 0 × R ⃗ 2 0 = [ 0 0 − 1 ] × [ L 1 0 0 ] = [ 0 − L 1 0 ] h=0,\vec{v}_{2}^{0}=-\vec{\omega}_{2}^{0}\times \vec{R}_{2}^{0}=\left[ \begin{array}{c} 0\\ 0\\ -1\\ \end{array} \right] \times \left[ \begin{array}{c} L_1\\ 0\\ 0\\ \end{array} \right] =\left[ \begin{array}{c} 0\\ -L_1\\ 0\\ \end{array} \right] h=0,v20=−ω20×R20= 00−1 × L100 = 0−L10
⇒ S ˉ 2 0 = [ 0 0 1 0 − L 1 0 ] ⇒ [ T B S ( 0 , θ 2 ) ] = e [ S ˉ 2 0 ] θ 2 [ M ] \Rightarrow \bar{\mathcal{S}}_{2}^{0}=\left[ \begin{array}{l} 0\\ 0\\ 1\\ 0\\ -L_1\\ 0\\ \end{array} \right] \Rightarrow \left[ T_{\mathrm{B}}^{S}\left( 0,\theta _2 \right) \right] =e^{\left[ \bar{\mathcal{S}}_{2}^{0} \right] \theta _2}\left[ M \right] ⇒Sˉ20= 0010−L10 ⇒[TBS(0,θ2)]=e[Sˉ20]θ2[M]
Fix joint 2 at θ 2 \theta _2 θ2 , and rotate joint 1 by θ 1 \theta _1 θ1 [ T B S ( θ 1 , θ 2 ) ] \left[ T_{\mathrm{B}}^{S}\left( \theta _1,\theta _2 \right) \right] [TBS(θ1,θ2)]
rigidi body motion [ T B S ( θ 1 , θ 2 ) ] = e [ S ˉ 1 0 ] θ 1 [ T B S ( 0 , θ 2 ) ] \left[ T_{\mathrm{B}}^{S}\left( \theta _1,\theta _2 \right) \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}\left[ T_{\mathrm{B}}^{S}\left( 0,\theta _2 \right) \right] [TBS(θ1,θ2)]=e[Sˉ10]θ1[TBS(0,θ2)]
S ˉ 1 0 \bar{\mathcal{S}}_{1}^{0} Sˉ10 indepent of θ 1 , θ 2 \theta _1,\theta _2 θ1,θ2 , S ˉ 1 0 = [ ω ⃗ 1 0 v ⃗ 1 0 ] = [ 0 0 1 0 0 0 ] \bar{\mathcal{S}}_{1}^{0}=\left[ \begin{array}{c} \vec{\omega}_{1}^{0}\\ \vec{v}_{1}^{0}\\ \end{array} \right] =\left[ \begin{array}{l} 0\\ 0\\ 1\\ 0\\ 0\\ 0\\ \end{array} \right] Sˉ10=[ω10v10]= 001000
⇒ [ T B S ( θ 1 , θ 2 ) ] = e [ S ˉ 1 0 ] θ 1 e [ S ˉ 2 0 ] θ 2 [ M ] \Rightarrow \left[ T_{\mathrm{B}}^{S}\left( \theta _1,\theta _2 \right) \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}e^{\left[ \bar{\mathcal{S}}_{2}^{0} \right] \theta _2}\left[ M \right] ⇒[TBS(θ1,θ2)]=e[Sˉ10]θ1e[Sˉ20]θ2[M]—— product of exp
Suppose that the robot has n n n joints and n n n links. Each joint has one degree of freedom represented bt joint variable θ i , i = 1 , ⋯ , n \theta _{\mathrm{i}},i=1,\cdots ,n θi,i=1,⋯,n ( θ i \theta _{\mathrm{i}} θi : the joint angle - Revolute Joint or joint placement - Primatic Joint )
Specify a fixed frame { s } \left\{ s \right\} {s} : also referred to as frame { 0 } \left\{ 0 \right\} {0}
Attach frame { i } \left\{ i \right\} {i} to link i i i at joint i i i, for i = 1 , ⋯ , n i=1,\cdots ,n i=1,⋯,n
Attach frame { b } \left\{ b \right\} {b} at the end-effector : sometimes referred to as frame { n + 1 } \left\{ n+1 \right\} {n+1}
S i i \mathcal{S} _{\mathrm{i}}^{i} Sii : screw axis of joint i i i expressed in frame { i } \left\{ i \right\} {i} (local coordinate of S i \mathcal{S} _{\mathrm{i}} Si)
S i 0 \mathcal{S} _{\mathrm{i}}^{0} Si0 : screw axis of joint i i i expressed in the fixed frame { 0 } \left\{ 0 \right\} {0} (i.e. frame { s } \left\{ s \right\} {s})
For simplicity, we write configuration as [ T S B ] \left[ T_{\mathrm{SB}} \right] [TSB] , which is the same as [ T B S ] \left[ T_{\mathrm{B}}^{S} \right] [TBS]. Similarly [ T i j ] = [ T j i ] \left[ T_{\mathrm{ij}} \right] =\left[ T_{\mathrm{j}}^{i} \right] [Tij]=[Tji]
Note : S i i \mathcal{S} _{\mathrm{i}}^{i} Sii does not change when the robot moves (i.e. when θ \theta θ changes), but S i 0 \mathcal{S} _{\mathrm{i}}^{0} Si0 depends on θ 1 , ⋯ , θ i \theta _1,\cdots ,\theta _{\mathrm{i}} θ1,⋯,θi. Sometimes, we write out the dependenct explicitly i.e. S i 0 ( θ 1 , ⋯ , θ i ) \mathcal{S} _{\mathrm{i}}^{0}\left( \theta _1,\cdots ,\theta _{\mathrm{i}} \right) Si0(θ1,⋯,θi)
Define home position : θ 1 = 0 , ⋯ , θ i = 0 \theta _1=0,\cdots ,\theta _{\mathrm{i}}=0 θ1=0,⋯,θi=0. This is the configuration when all the joint angles are zero. One can also choose other fixed angles as the home position.
Define S ˉ i 0 = S i 0 ( 0 , ⋯ , 0 ) \bar{\mathcal{S}}_{\mathrm{i}}^{0}=\mathcal{S} _{\mathrm{i}}^{0}\left( 0,\cdots ,0 \right) Sˉi0=Si0(0,⋯,0) : the screw axis of joint i i i expressed in frame { 0 } \left\{ 0 \right\} {0} , when the robot is at the home position
PoE was obtained by applying screw motions along screw axes S ˉ n − 1 0 , S ˉ n 0 , ⋯ \bar{\mathcal{S}}_{\mathrm{n}-1}^{0},\bar{\mathcal{S}}_{\mathrm{n}}^{0},\cdots Sˉn−10,Sˉn0,⋯ What happens if the order is changed?
For simplicity, assume that n = 2 n=2 n=2, and let us apply screw motion along S ˉ 1 0 \bar{\mathcal{S}}_{1}^{0} Sˉ10 first
[ T S B ( θ 1 , 0 ) ] = e [ S ˉ 1 0 ] θ 1 [ M ] \left[ T_{\mathrm{SB}}\left( \theta _1,0 \right) \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}\left[ M \right] [TSB(θ1,0)]=e[Sˉ10]θ1[M]
Now screw axis for joint 2 has been changed. The new axis S 2 0 = S 2 0 ( θ 1 , 0 ) ≠ S ˉ 2 0 \mathcal{S} _{2}^{0}=\mathcal{S} _{2}^{0}\left( \theta _1,0 \right) \ne \bar{\mathcal{S}}_{2}^{0} S20=S20(θ1,0)=Sˉ20
[ T S B ( θ 1 , θ 2 ) ] = e [ S 2 0 ] θ 2 [ T S B ( θ 1 , 0 ) ] \left[ T_{\mathrm{SB}}\left( \theta _1,\theta _2 \right) \right] =e^{\left[ \mathcal{S} _{2}^{0} \right] \theta _2}\left[ T_{\mathrm{SB}}\left( \theta _1,0 \right) \right] [TSB(θ1,θ2)]=e[S20]θ2[TSB(θ1,0)]
S ˉ 2 0 ⟶ [ T ] = e [ S ˉ 1 0 ] θ 1 S 2 0 ( θ 1 ) 6 × 1 = [ A d T ] 6 × 6 S ˉ 2 0 6 × 1 , [ T ] = e [ S ˉ 1 0 ] θ 1 \bar{\mathcal{S}}_{2}^{0}\overset{\left[ T \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}}{\longrightarrow}\mathcal{S} _{2}^{0}\left( \theta _1 \right) _{6\times 1}=\left[ Ad_T \right] _{6\times 6}{\bar{\mathcal{S}}_{2}^{0}}_{6\times 1},\left[ T \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1} Sˉ20⟶[T]=e[Sˉ10]θ1S20(θ1)6×1=[AdT]6×6Sˉ206×1,[T]=e[Sˉ10]θ1
[ T S B ( θ 1 , θ 2 ) ] = e [ S 2 0 ] θ 2 [ T S B ( θ 1 , 0 ) ] \left[ T_{\mathrm{SB}}\left( \theta _1,\theta _2 \right) \right] =e^{\left[ \mathcal{S} _{2}^{0} \right] \theta _2}\left[ T_{\mathrm{SB}}\left( \theta _1,0 \right) \right] [TSB(θ1,θ2)]=e[S20]θ2[TSB(θ1,0)]
e [ S 2 0 ] θ 2 = e [ [ A d T ] S ˉ 2 0 ] θ 2 = e T [ S ˉ 2 0 ] T − 1 θ 2 = [ T ] e [ S ˉ 2 0 ] θ 2 [ T ] − 1 ⇒ [ T ] = e [ S ˉ 1 0 ] θ 1 [ T S B ( θ 1 , θ 2 ) ] = [ T ] e [ S ˉ 2 0 ] θ 2 [ T ] − 1 e [ S ˉ 1 0 ] θ 1 [ M ] = e [ S ˉ 1 0 ] θ 1 e [ S ˉ 2 0 ] θ 2 [ M ] e^{\left[ \mathcal{S} _{2}^{0} \right] \theta _2}=e^{\left[ \left[ Ad_T \right] \bar{\mathcal{S}}_{2}^{0} \right] \theta _2}=e^{T\left[ \bar{\mathcal{S}}_{2}^{0} \right] T^{-1}\theta _2}=\left[ T \right] e^{\left[ \bar{\mathcal{S}}_{2}^{0} \right] \theta _2}\left[ T \right] ^{-1}\overset{\left[ T \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}}{\Rightarrow}\left[ T_{\mathrm{SB}}\left( \theta _1,\theta _2 \right) \right] =\left[ T \right] e^{\left[ \bar{\mathcal{S}}_{2}^{0} \right] \theta _2}\left[ T \right] ^{-1}e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}\left[ M \right] =e^{\left[ \bar{\mathcal{S}}_{1}^{0} \right] \theta _1}e^{\left[ \bar{\mathcal{S}}_{2}^{0} \right] \theta _2}\left[ M \right] e[S20]θ2=e[[AdT]Sˉ20]θ2=eT[Sˉ20]T−1θ2=[T]e[Sˉ20]θ2[T]−1⇒[T]=e[Sˉ10]θ1[TSB(θ1,θ2)]=[T]e[Sˉ20]θ2[T]−1e[Sˉ10]θ1[M]=e[Sˉ10]θ1e[Sˉ20]θ2[M]
代码-待补充