刚体定点转动&欧拉动力学方程的推导
1. 刚体定点转动的角动量
首先,我们定义静止惯性坐标系S,对象刚体绕S系原点作定点转动;然后定义一个固连于刚体之上的动坐标系B,其原点与S系原点重合。
记刚体相对于S系的角速度为 ω \bm{\omega} ω,并将刚体看作由无数个微小质点 m i m_i mi组成,质点 m i m_i mi相对原点的位置矢量为 r i \mathbf{r}_i ri,则该刚体相对原点的角动量为:
L = ∑ i L i = ∑ i r i × m i r ˙ i = ∑ i r i × m i ( ω × r i ) \begin{align} \mathbf{L} = \sum_i \mathbf{L}_i = \sum_i \mathbf{r}_i \times m_i \dot{\mathbf{r}}_i = \sum_i \mathbf{r}_i \times m_i (\bm{\omega} \times \mathbf{r}_i) \end{align} L=i∑Li=i∑ri×mir˙i=i∑ri×mi(ω×ri)
将(1)式中的矢量用在S系下的坐标表示:
L S = ∑ i r i S × m i ( ω S × r i S ) = − ∑ i r i S × m i ( r i S × ω S ) = − ∑ i m i [ r i S ] × 2 ω S = J S ω S \begin{align} \begin{aligned} \mathbf{L}^S &= \sum_i \mathbf{r}_i^S \times m_i(\bm{\omega}^S \times \mathbf{r}_i^S) \\ &= -\sum_i \mathbf{r}_i^S \times m_i(\mathbf{r}_i^S \times \bm{\omega}^S) \\ &= -\sum_i m_i [\mathbf{r}_i^S]_\times^2 \bm{\omega}^S \\ &= \mathbf{J}_S \bm{\omega}^S \end{aligned} \end{align} LS=i∑riS×mi(ωS×riS)=−i∑riS×mi(riS×ωS)=−i∑mi[riS]×2ωS=JSωS
其中
J S = − ∑ i m i [ r i S ] × 2 = ∑ i m i ( r i S ⊤ r i S I 3 − r i S r i S ⊤ ) \begin{align} \mathbf{J}_S = -\sum_i m_i [\mathbf{r}_i^S]_\times^2 = \sum_i m_i \left( \mathbf{r}_i^{S \top} \mathbf{r}_i^S \mathbf{I}_3 - \mathbf{r}_i^S \mathbf{r}_i^{S \top} \right) \end{align} JS=−i∑mi[riS]×2=i∑mi(riS⊤riSI3−riSriS⊤)
为刚体B相对于S系的惯性矩阵,也称为惯量张量。可见随着刚体的转动, J S \mathbf{J}_S JS是一个变化的量。
类似的,我们也可以求刚体对固连坐标系S的惯性矩阵:
J B = − ∑ i m i [ r i B ] × 2 = ∑ i m i ( r i B ⊤ r i B I 3 − r i B r i B ⊤ ) \begin{align} \mathbf{J}_B = -\sum_i m_i [\mathbf{r}_i^B]_\times^2 = \sum_i m_i \left( \mathbf{r}_i^{B \top} \mathbf{r}_i^B \mathbf{I}_3 - \mathbf{r}_i^B \mathbf{r}_i^{B \top} \right) \end{align} JB=−i∑mi[riB]×2=i∑mi(riB⊤riBI3−riBriB⊤)
根据刚体的定义, r i B \mathbf{r}_i^B riB并不会随刚体运动而变化,则 J B \mathbf{J}_B JB是一个常量,因此我们常常对 J B \mathbf{J}_B JB更感兴趣,因为它更能反映刚体惯性的固有属性。
将B系在S系中的姿态用旋转矩阵表示为 R B S \mathbf{R}_B^S RBS,则我们可以推导出 J B \mathbf{J}_B JB和 J S \mathbf{J}_S JS之间的关系:
J S = − ∑ i m i [ r i S ] × 2 = − ∑ i m i [ R B S r i B ] × 2 = − ∑ i m i ( R B S [ r i S ] × R B S ⊤ ) 2 = − R B S ∑ i m i [ r i S ] × 2 R B S ⊤ = R B S J B R B S ⊤ \begin{align} \begin{aligned} \mathbf{J}_S &= -\sum_i m_i [\mathbf{r}_i^S]_\times^2 = -\sum_i m_i [\mathbf{R}_B^S \mathbf{r}_i^B]_\times^2 \\ &= -\sum_i m_i (\mathbf{R}_B^S [\mathbf{r}_i^S]_\times \mathbf{R}_B^{S\ \top})^2 \\ &= -\mathbf{R}_B^S \sum_i m_i [\mathbf{r}_i^S]_\times^2 \mathbf{R}_B^{S\ \top} \\ &= \mathbf{R}_B^S \mathbf{J}_B \mathbf{R}_B^{S\ \top} \end{aligned} \end{align} JS=−i∑mi[riS]×2=−i∑mi[RBSriB]×2=−i∑mi(RBS[riS]×RBS ⊤)2=−RBSi∑mi[riS]×2RBS ⊤=RBSJBRBS ⊤
2. 刚体定点转动的角动量定理
记作用在每个微小质点 m i m_i mi上的力为 F i \mathbf{F}_i Fi,则根据牛顿第二定律,作用在刚体上的合力矩为:
τ = ∑ i r i × F i = ∑ i r i × m i r ¨ i = ∑ i r ˙ i × m i r ˙ i ⏟ 0 + r i × m i r ¨ i = d d t ∑ i r i × m i r ˙ i = L ˙ \begin{align} \begin{aligned} \bm{\tau} &= \sum_i \mathbf{r}_i \times \mathbf{F}_i \\ &= \sum_i \mathbf{r}_i \times m_i \ddot{\mathbf{r}}_i \\ &= \sum_i \orange{\underbrace{\dot{\mathbf{r}}_i \times m_i \dot{\mathbf{r}}_i}_\mathbf{0}} + \mathbf{r}_i \times m_i \ddot{\mathbf{r}}_i \\ &= \frac{d}{dt} \sum_i \mathbf{r}_i \times m_i \dot{\mathbf{r}}_i \\ &= \dot{\mathbf{L}} \end{aligned} \end{align} τ=i∑ri×Fi=i∑ri×mir¨i=i∑0 r˙i×mir˙i+ri×mir¨i=dtdi∑ri×mir˙i=L˙
这就是刚体定点转动角动量定理的表达式,即刚体所受的合力矩等于角动量的变化率。
每个质元 m i m_i mi所受的力可以分解为外力和内力:
F i = F e x t , i + F i n t , i \begin{align} \mathbf{F}_i = \mathbf{F}_{ext, i} + \mathbf{F}_{int, i} \end{align} Fi=Fext,i+Fint,i
内力 F i n t , i \mathbf{F}_{int, i} Fint,i又可以分解为其余质元对 m i m_i mi的作用力之和:
F i n t , i = ∑ j ≠ i F i n t , i , j \begin{align} \mathbf{F}_{int, i} = \sum_{j \neq i} \mathbf{F}_{int, i, j} \end{align} Fint,i=j=i∑Fint,i,j
显然 F i n t , i , j \mathbf{F}_{int, i, j} Fint,i,j和 F i n t , j , i \mathbf{F}_{int, j, i} Fint,j,i为一对相互作用力。根据牛顿第三定律一对相互作用力是等大、共线、反向的,则有:
F i n t , i , j + F i n t , j , i = 0 r i × F i n t , i , j + r j × F i n t , j , i = 0 \begin{align} &\mathbf{F}_{int, i, j} + \mathbf{F}_{int, j, i} = \mathbf{0} \\ &\mathbf{r}_i \times \mathbf{F}_{int, i, j} + \mathbf{r}_j \times \mathbf{F}_{int, j, i} = \mathbf{0} \end{align} Fint,i,j+Fint,j,i=0ri×Fint,i,j+rj×Fint,j,i=0
即每对内力的力矩也是相互抵消的,而每个内力总是成对出现,所以
∑ i r i × F i n t , i = 0 \begin{align} \sum_i \mathbf{r}_i \times \mathbf{F}_{int, i} = \mathbf{0} \end{align} i∑ri×Fint,i=0
于是
τ = ∑ i r i × ( F e x t , i + F i n t , i ) = ∑ i r i × F e x t , i = τ e x t = L ˙ \begin{align} \bm{\tau} = \sum_i \mathbf{r}_i \times (\mathbf{F}_{ext, i} + \mathbf{F}_{int, i}) = \sum_i \mathbf{r}_i \times \mathbf{F}_{ext, i} = \bm{\tau}_{ext} = \dot{\mathbf{L}} \end{align} τ=i∑ri×(Fext,i+Fint,i)=i∑ri×Fext,i=τext=L˙
即刚体所受总力矩等于外力的力矩,内力的力矩为0,刚体所受外力力矩等于刚体角动量的变化率。
3. 欧拉动力学方程的推导
我们记作用在刚体之上的外部力矩为 τ \bm{\tau} τ,则根据定点转动刚体的角动量定理,作用在刚体上的外部力矩等于刚体角动量的变化率,即:
τ S = L ˙ S = d d t ( J S ω S ) = J ˙ S ω S + J S ω ˙ S \begin{align} \bm{\tau}^S = \dot{\mathbf{L}}^S = \frac{d}{dt}\left( \mathbf{J}_S \bm{\omega}^S \right) = \dot{\mathbf{J}}_S\bm{\omega}^S + \mathbf{J}_S\dot{\bm{\omega}}^S \end{align} τS=L˙S=dtd(JSωS)=J˙SωS+JSω˙S
根据之前的推导,刚体相对于静系S系的惯性矩阵 J S \mathbf{J}_S JS是随时间变化的量,因此其对时间的倒数并不恒为0,下面给出两种方法对其时间导数进行推导。
- 方法1:根据(5)式有
J ˙ S = d d t ( R B S J B R B S ⊤ ) = R ˙ B S J B R B S ⊤ + R B S J ˙ B R B S ⊤ ⏟ 0 + R B S J B R ˙ B S ⊤ = [ ω S ] × R B S J B R B S ⊤ + R B S J B R B S ⊤ [ ω S ] × ⊤ = [ ω S ] × R B S J B R B S ⊤ − R B S J B R B S ⊤ [ ω S ] × = [ ω S ] × J S − J S [ ω S ] × \begin{align} \begin{aligned} \dot{\mathbf{J}}_S &= \frac{d}{dt} \left( \mathbf{R}_B^S \mathbf{J}_B \mathbf{R}_B^{S\ \top} \right) \\ &= \dot{\mathbf{R}}_B^S \mathbf{J}_B \mathbf{R}_B^{S\ \top} + \underbrace{\mathbf{R}_B^S \dot{\mathbf{J}}_B \mathbf{R}_B^{S\ \top}}_\mathbf{0} + \mathbf{R}_B^S \mathbf{J}_B \dot{\mathbf{R}}_B^{S\ \top} \\ &= [\bm{\omega}^S]_\times \mathbf{R}_B^S \mathbf{J}_B \mathbf{R}_B^{S\ \top} + \mathbf{R}_B^S \mathbf{J}_B \mathbf{R}_B^{S\ \top} [\bm{\omega}^S]_\times^\top \\ &= [\bm{\omega}^S]_\times \mathbf{R}_B^S \mathbf{J}_B \mathbf{R}_B^{S\ \top} - \mathbf{R}_B^S \mathbf{J}_B \mathbf{R}_B^{S\ \top} [\bm{\omega}^S]_\times \\ &= [\bm{\omega}^S]_\times \mathbf{J}_S - \mathbf{J}_S [\bm{\omega}^S]_\times \end{aligned} \end{align} J˙S=dtd(RBSJBRBS ⊤)=R˙BSJBRBS ⊤+0 RBSJ˙BRBS ⊤+RBSJBR˙BS ⊤=[ωS]×RBSJBRBS ⊤+RBSJBRBS ⊤[ωS]×⊤=[ωS]×RBSJBRBS ⊤−RBSJBRBS ⊤[ωS]×=[ωS]×JS−JS[ωS]×
- 方法2:根据(3)式和(4)式硬推:
J ˙ S = d d t ∑ i m i ( r i S ⊤ r i S I 3 − r i S r i S ⊤ ) = ∑ i m i ( ( ω S × r i S ) ⊤ r i S I 3 ⏟ 0 + r i S ⊤ ( ω S × r i S ) I 3 ⏟ 0 − ( ω S × r i S ) r i S ⊤ − r i S ( ω S × r i S ) ⊤ ) = ∑ i m i ( − [ ω S ] × r i S r i S ⊤ + r i S r i S ⊤ [ ω S ] × ) = ∑ i m i ( ( r i S ⊤ r i S [ ω S ] × − [ ω S ] × r i S r i S ⊤ ) − ( r i S ⊤ r i S [ ω S ] × − r i S r i S ⊤ [ ω S ] × ) ) = ∑ i m i ( [ ω S ] × ( r i S ⊤ r i S I 3 − r i S r i S ⊤ ) − ( r i S ⊤ r i S I 3 − r i S r i S ⊤ ) [ ω S ] × ) = [ ω S ] × ∑ i m i ( r i S ⊤ r i S I 3 − r i S r i S ⊤ ) − ∑ i m i ( r i S ⊤ r i S I 3 − r i S r i S ⊤ ) [ ω S ] × = [ ω S ] × J S − J S [ ω S ] × \begin{align} \begin{aligned} \dot{\mathbf{J}}_S &= \frac{d}{dt} \sum_i m_i \left( \mathbf{r}_i^{S \top} \mathbf{r}_i^S \mathbf{I}_3 - \mathbf{r}_i^S \mathbf{r}_i^{S \top} \right) \\ &= \sum_i m_i \left( \underbrace{(\bm{\omega}^S \times \mathbf{r}_i^S)^\top \mathbf{r}_i^S \mathbf{I}_3}_\mathbf{0} + \underbrace{\mathbf{r}_i^{S\ \top} (\bm{\omega}^S \times \mathbf{r}_i^S) \mathbf{I}_3}_\mathbf{0} - (\bm{\omega}^S \times \mathbf{r}_i^S) \mathbf{r}_i^{S\ \top} - \mathbf{r}_i^S (\bm{\omega}^S \times \mathbf{r}_i^S)^\top \right) \\ &= \sum_i m_i \left( -[\bm{\omega^S}]_\times \mathbf{r}_i^S \mathbf{r}_i^{S\ \top} + \mathbf{r}_i^S \mathbf{r}_i^{S\ \top} [\bm{\omega^S}]_\times \right) \\ &= \sum_i m_i \left( \left( \red{\mathbf{r}_i^{S\ \top}\mathbf{r}_i^S[\bm{\omega}^S]_\times} - [\bm{\omega}^S]_\times \mathbf{r}_i^S \mathbf{r}_i^{S\ \top} \right) - \left( \red{\mathbf{r}_i^{S\ \top}\mathbf{r}_i^S[\bm{\omega}^S]_\times} - \mathbf{r}_i^S \mathbf{r}_i^{S\ \top} [\bm{\omega}^S]_\times \right) \right) \\ &= \sum_i m_i \left( [\bm{\omega}^S]_\times \left( \mathbf{r}_i^{S\ \top}\mathbf{r}_i^S \mathbf{I}_3 - \mathbf{r}_i^S \mathbf{r}_i^{S\ \top} \right) - \left( \mathbf{r}_i^{S\ \top}\mathbf{r}_i^S \mathbf{I}_3 - \mathbf{r}_i^S \mathbf{r}_i^{S\ \top} \right) [\bm{\omega}^S]_\times \right) \\ &= [\bm{\omega}^S]_\times \sum_i m_i \left( \mathbf{r}_i^{S\ \top}\mathbf{r}_i^S \mathbf{I}_3 - \mathbf{r}_i^S \mathbf{r}_i^{S\ \top} \right) - \sum_i m_i \left( \mathbf{r}_i^{S\ \top}\mathbf{r}_i^S \mathbf{I}_3 - \mathbf{r}_i^S \mathbf{r}_i^{S\ \top} \right) [\bm{\omega}^S]_\times \\ &= [\bm{\omega}^S]_\times \mathbf{J}_S - \mathbf{J}_S [\bm{\omega}^S]_\times \end{aligned} \end{align} J˙S=dtdi∑mi(riS⊤riSI3−riSriS⊤)=i∑mi 0 (ωS×riS)⊤riSI3+0 riS ⊤(ωS×riS)I3−(ωS×riS)riS ⊤−riS(ωS×riS)⊤ =i∑mi(−[ωS]×riSriS ⊤+riSriS ⊤[ωS]×)=i∑mi((riS ⊤riS[ωS]×−[ωS]×riSriS ⊤)−(riS ⊤riS[ωS]×−riSriS ⊤[ωS]×))=i∑mi([ωS]×(riS ⊤riSI3−riSriS ⊤)−(riS ⊤riSI3−riSriS ⊤)[ωS]×)=[ωS]×i∑mi(riS ⊤riSI3−riSriS ⊤)−i∑mi(riS ⊤riSI3−riSriS ⊤)[ωS]×=[ωS]×JS−JS[ωS]×
将(14)式代入(13)中就得到了刚体的Euler动力学方程:
τ S = ω S × J S ω S − J S ω S × ω S ⏟ 0 + J S ω ˙ S = ω S × J S ω S + J S ω ˙ S \begin{align} \begin{aligned} \bm{\tau}^S &= \bm{\omega}^S \times \mathbf{J}_S \bm{\omega}^S - \underbrace{\mathbf{J}_S \bm{\omega}^S \times \bm{\omega}^S}_\mathbf{0} + \mathbf{J}_S \dot{\bm{\omega}}^S \\ &= \bm{\omega}^S \times \mathbf{J}_S \bm{\omega}^S + \mathbf{J}_S \dot{\bm{\omega}}^S \end{aligned} \end{align} τS=ωS×JSωS−0 JSωS×ωS+JSω˙S=ωS×JSωS+JSω˙S
在无人机等机器人应用中,我们一般是从CAD模型中获取机器人相对于自身固连坐标系B的惯性矩阵,以及常用的IMU传感器测量的机器人角速度也是在B系中表示的,我们将Euler动力学方程(9)式两边同时乘以 R S B \mathbf{R}_S^B RSB得到
τ B = R S B τ S = R S B ( ω S × J S ω S ) + R S B J S ω ˙ S = R S B ω S × R S B J S ω S + R S B J S ω ˙ S = ω B × R S B J S R S B ⊤ R S B ω S + R S B J S R S B ⊤ R S B ω ˙ S = ω B × J B ω B + J B ω ˙ B \begin{align} \begin{aligned} \bm{\tau}^B = \mathbf{R}_S^B \bm{\tau}^S &= \mathbf{R}_S^B (\bm{\omega}^S \times \mathbf{J}_S \bm{\omega}^S) + \mathbf{R}_S^B \mathbf{J}_S \dot{\bm{\omega}}^S \\ &= \mathbf{R}_S^B \bm{\omega}^S \times \mathbf{R}_S^B \mathbf{J}_S \bm{\omega}^S + \mathbf{R}_S^B \mathbf{J}_S \dot{\bm{\omega}}^S \\ &= \bm{\omega}^B \times \mathbf{R}_S^B \mathbf{J}_S \mathbf{R}_S^{B\ \top} \mathbf{R}_S^B \bm{\omega}^S + \mathbf{R}_S^B \mathbf{J}_S \mathbf{R}_S^{B\ \top} \mathbf{R}_S^B \dot{\bm{\omega}}^S \\ &= \bm{\omega}^B \times \mathbf{J}_B \bm{\omega}^B + \mathbf{J}_B \dot{\bm{\omega}}^B \end{aligned} \end{align} τB=RSBτS=RSB(ωS×JSωS)+RSBJSω˙S=RSBωS×RSBJSωS+RSBJSω˙S=ωB×RSBJSRSB ⊤RSBωS+RSBJSRSB ⊤RSBω˙S=ωB×JBωB+JBω˙B
可见Euler动力学方程在B系和S系中的形式是相同的。
💡 注意, ω ˙ B \dot{\bm{\omega}}^B ω˙B是B系相对S系的角速度变化率在B系中的坐标,即 ω ˙ B = ( d d t ω ) B = R S B ω ˙ S \dot{\bm{\omega}}^B = \left( \frac{d}{dt}\bm{\omega} \right)^B = \mathbf{R}_S^B \dot{\bm{\omega}}^S ω˙B=(dtdω)B=RSBω˙S;而不是角速度在B系中的坐标的变化率,即 ω ˙ B ≠ d d t ( ω B ) \dot{\bm{\omega}}^B \neq \frac{d}{dt} (\bm{\omega}^B) ω˙B=dtd(ωB)
4. 质心系中的欧拉动力学方程
之前的讨论都是基于刚体绕定点转动这个假设,S系为惯性系。
然而在一般情况下我们的机器人会在空间中作复杂的运动,如果我们将之前的S系换作以原点固连在刚体上随刚体进行平动的质心系C,则刚体的运动可以分解为质心的平动和绕质心的定点转动。
我们对此时刚体绕质心的定点转动进行分析。刚体固连坐标系B的原点依然与质心系C的原点(即质心)重合,而与之前不同的是平动参考系S不再是惯性系,在此参考系中刚体会受到等效惯性力的作用,此时的欧拉动力学方程写为:
τ C + τ 惯 C = ω C × J C ω C + J C ω ˙ C \begin{align} \bm{\tau}^C + \bm{\tau}_惯^C = \bm{\omega}^C \times \mathbf{J}_C \bm{\omega}^C + \mathbf{J}_C \dot{\bm{\omega}}^C \end{align} τC+τ惯C=ωC×JCωC+JCω˙C
其中 τ 惯 \bm{\tau}_惯 τ惯是等效惯性力对质心的力矩。设该时刻刚体质心的线加速度为 a \mathbf{a} a,那么:
τ 惯 = ∑ i r i × m i a = ( ∑ i m i r i ) × a = ( ∑ i m i ) r C × a \begin{align} \begin{aligned} \bm{\tau}_惯 &= \sum_i \mathbf{r}_i \times m_i \mathbf{a} = \left( \sum_i m_i \mathbf{r}_i \right) \times \mathbf{a} \\ &= \left(\sum_i m_i\right) \mathbf{r}_C \times \mathbf{a} \end{aligned} \end{align} τ惯=i∑ri×mia=(i∑miri)×a=(i∑mi)rC×a
其中 r C \mathbf{r}_C rC是C系下的质心位置矢量,咱们的C就是质心系,原点就是质心,那当然有 r C = 0 \mathbf{r}_C = \mathbf{0} rC=0,所以
τ 惯 = 0 \begin{align} \bm{\tau}_惯 = \mathbf{0} \end{align} τ惯=0
即平动质心参考系中惯性力力矩为0。
💡 因为(19)式中没有任何刚体约束,所以这个结论实际上对非刚体也成立。
因此在质心参考系中的刚体欧拉动力学方程与惯性系中相同:
τ C = ω C × J C ω C + J C ω ˙ C \begin{align} \bm{\tau}^C = \bm{\omega}^C \times \mathbf{J}_C \bm{\omega}^C + \mathbf{J}_C \dot{\bm{\omega}}^C \end{align} τC=ωC×JCωC+JCω˙C