《Modern Robotics》阅读笔记5——刚体的运动(五)

《Modern Robotics》阅读笔记5——刚体的运动(五)

前面铺垫了那么久,今天终于要讲到正题了。

1. 前文小结

这关于刚体运动的这五篇文章实际上就是在讲两件事:

  • 1.刚体旋转如何表示?
  • 2.刚体运动(包括刚体的旋转+平移)如何表示?

对于1

  • 刚体旋转我们介绍了两种表示法,一种是旋转矩阵,另一种是轴角表示法(指数表示法)
  • 旋转矩阵: R ∈ S O ( 3 ) : 3 × 3 R \in S O(3) : 3 \times 3 RSO(3):3×3 matrices
  • 轴角表示(指数表示): [ ω ^ ] θ ∈ s o ( 3 ) [\hat{\omega}] \theta \in s o(3) [ω^]θso(3),其中 ω ^ \hat{\omega} ω^代表旋转轴
  • 然后我们研究了,由旋转矩阵到轴角的映射,以及轴角到旋转矩阵的映射函数(李代数)
  • exp ⁡ : [ ω ^ ] θ ∈ s o ( 3 ) → R ∈ S O ( 3 ) \exp :[\hat{\omega}] \theta \in s o(3) \rightarrow R \in S O(3) exp:[ω^]θso(3)RSO(3),即 R = Rot ⁡ ( ω ^ , θ ) = e [ ω ^ ] θ R=\operatorname{Rot}(\hat{\omega}, \theta)=e^{[\hat{\omega}] \theta} R=Rot(ω^,θ)=e[ω^]θ
  • log ⁡ : R ∈ S O ( 3 ) → [ ω ^ ] θ ∈ s o ( 3 ) \log : R \in S O(3) \rightarrow[\hat{\omega}] \theta \in s o(3) log:RSO(3)[ω^]θso(3)

疑问:旋转矩阵是我们非常熟悉的一种旋转运动的表示方法,为什么我们还要研究轴角(指数)的这种表示方法呢?

答:因为旋转矩阵虽然通用,但是实际上并不直观,看到一个旋转矩阵,我们往往都想象不出这是一个什么样的旋转运动。而轴角表示方法则非常直观,指定一个旋转轴,指定一个角度,我们能直观的想象这个运动。并且对于机器人而言,很多关节都是转动关键,旋转轴就是关节的轴线,用轴角的表示方法是非常自然的。另外,我们引入了由轴角到旋转矩阵的映射函数,这就让我们使用轴角更加方便了。

对于2(这就是我们这篇文章将要介绍的内容了。)

  • 前文中,我们介绍了一种刚体运动的表示方法,就是变换矩阵。这篇中,我们将介绍另一种方法:旋量。
  • 变换矩阵: T ∈ S E ( 3 ) : 4 × 4 T \in S E(3) : 4 \times 4 TSE(3):4×4 matrices, T = [ R p 0 1 ] T=\left[ \begin{array}{ll}{R} & {p} \\ {0} & {1}\end{array}\right] T=[R0p1]
  • 旋量: [ S ] θ ∈ s e ( 3 ) [\mathcal{S}] \theta \in {se}(3) [S]θse(3),其中 S \mathcal{S} S代表旋量轴(screw axis)
  • 和旋转类似,由变换矩阵到旋量,旋量到变换矩阵的映射函数(李代数)
  • exp ⁡ : [ S ] θ ∈ se ⁡ ( 3 ) → T ∈ S E ( 3 ) \exp :[\mathcal{S}] \theta \in \operatorname{se}(3) \rightarrow T \in S E(3) exp:[S]θse(3)TSE(3),即 T = e [ S ] θ T=e^{[\mathcal{S}] \theta} T=e[S]θ
  • log ⁡ : T ∈ S E ( 3 ) → [ S ] θ ∈ se ⁡ ( 3 ) \log : T \in S E(3) \rightarrow[\mathcal{S}] \theta \in \operatorname{se}(3) log:TSE(3)[S]θse(3)

疑问:已经有了变换矩阵这种方法,为什么我们还要研究旋量的这种表示方法呢?

答:这个问题在下文中,我们会在介绍旋量理论的过程中逐渐解答。

现在让我们进入正题吧。

2. 旋量理论(Screw)

2.1 一个小例子

在这里插入图片描述
首先,让我们从上面这一个例子开始。
为了绘图的直观,我们在一个二维空间内介绍旋量理论的基本框架。三维空间是完全类似的。
假设有三个坐标系,其中{s}系为固定系。{b}系是体坐标系,{c}系是{b}系经过旋转后到达的新坐标系。我们给出{s}与{b},{s}系与{c}系的变换矩阵如下:
T s b = [ cos ⁡ 3 0 ∘ − sin ⁡ 3 0 ∘ 1 sin ⁡ 3 0 ∘ cos ⁡ 3 0 ∘ 2 0 0 1 ] T_{s b}=\left[ \begin{array}{ccc}{\cos 30^{\circ}} & {-\sin 30^{\circ}} & {1} \\ {\sin 30^{\circ}} & {\cos 30^{\circ}} & {2} \\ {0} & {0} & {1}\end{array}\right] Tsb=cos30sin300sin30cos300121
T s c = [ cos ⁡ 6 0 ∘ − sin ⁡ 6 0 ∘ 2 sin ⁡ 6 0 ∘ cos ⁡ 6 0 ∘ 1 0 0 1 ] T_{s c}=\left[ \begin{array}{ccc}{\cos 60^{\circ}} & {-\sin 60^{\circ}} & {2} \\ {\sin 60^{\circ}} & {\cos 60^{\circ}} & {1} \\ {0} & {0} & {1}\end{array}\right] Tsc=cos60sin600sin60cos600211
在基于变换矩阵的刚体表示方法中,{b}系到{c}系的旋转可以表示为:
T c b = T s c T s b − 1 = [ 0.866 − 0.5 2.134 0.5 0.866 − 1.2321 0 0 1 ] T_{\mathrm{cb}}=T_{\mathrm{sc}} T_{\mathrm{sb}}^{-1}= \left[ \begin{array}{ccc}0.866&-0.5&2.134\\ 0.5 &0.866&-1.2321\\0&0&1\end{array}\right] Tcb=TscTsb1=0.8660.500.50.86602.1341.23211

但细心观察我们可以发现,这个刚体运动,可以被看做一个单纯的旋转运动。即绕着 q = ( 3.37 , 3.37 ) q=(3.37,3.37) q=(3.37,3.37)这个点,顺时针旋转 θ \theta θ度。我们可以大胆的假设,那么是不是所有的刚体运动,都可以看做是一个旋转运动呢?答案是肯定的。二维空间,这是大家非常容易想象的。而即便在三维空间,任意刚体运动也都可以视作为绕某一轴的旋转运动。这就是旋量理论的由来。旋量理论就是告诉我们如何找到这个旋量轴,利用旋量轴来定义刚体运动。

有些同学可能会想到,如果是纯平移呢?这也能作为旋转运动吗?
实际上这可以视作为半径无穷大的旋转运动。当然在旋量理论中,对于纯平移这种特殊情况也是有分开考虑的。

2.2 旋量轴的定义

旋量轴 S \mathcal{S} S(screw axis)的定义与前文中提到过的twist的定义密不可分。
先来回顾一下twist的定义:
V = [ ω v ] ∈ R 6 , [ V ] = [ [ ω ] v 0 0 ] ∈ s e ( 3 ) \mathcal{V}=\left[ \begin{array}{c}{\omega} \\ {v}\end{array}\right] \in \mathbb{R}^{6} ,\left[\mathcal{V}\right]=\left[ \begin{array}{cc}{\left[\omega\right]} & {v} \\ {0} & {0}\end{array}\right] \in {se}(3) V=[ωv]R6[V]=[[ω]0v0]se(3)
旋量轴的定义分了两种情况进行考虑:

  • 一般的刚体运动: i f   ω ≠ 0 : S = V / ∥ ω ∥ = ( ω / ∥ ω ∥ , v / ∥ ω ∥ ) , θ ˙ = ∥ ω ∥ if \ \omega \neq 0 : \mathcal{S}=\mathcal{V} /\|\omega\|=(\omega /\|\omega\|, v /\|\omega\|),\dot{\theta}=\|\omega\| if ω̸=0:S=V/ω=(ω/ω,v/ω)θ˙=ω
  • 纯平移运动: i f   ω = 0 : S = V / ∥ v ∥ = ( 0 , v / ∥ v ∥ ) , θ ˙ = ∥ v ∥ if \ \omega=0 : \mathcal{S}=\mathcal{V} /\|v\|=(0, v /\|v\|),\dot{\theta}=\|v\| if ω=0:S=V/v=(0,v/v)θ˙=v

所以,旋量轴与twist的关系为:
S θ ˙ = V \mathcal{S} \dot{\theta}=\mathcal{V} Sθ˙=V

值得注意的是,这里不能想象成刚体围绕这个旋量轴进行旋转。毕竟旋量轴是一个六维的矢量,而刚体在三维空间中的旋转只能围绕一个三维矢量进行。
实际上,旋量轴定义了旋转轴的位置。 对于一般刚体运动而言,旋量轴的前三个量定义了旋转轴矢量的方向,而后三个量和前三个量则共同定义了旋转轴的位置。

为了解释这个问题,来个穿越,我们可以再回到先前的例子中去。
根据图中的{b}系和{c}系的位置,我们可以通过做图测量的方法,找到两个坐标系的旋转中心 q = ( 3.37 , 3.37 ) q=(3.37,3.37) q=(3.37,3.37)。我们假设{b}系到{c}系的旋转角速度为 ω 3 \omega_3 ω3,那么我们知道,在此旋转运动下,{s}系原点处对应的速度为 v = ( 3.37 ω 3 , − 3.37 ω 3 ) v=(3.37\omega_3,-3.37\omega_3) v=(3.37ω3,3.37ω3)(角速度乘距离)。

注意:这里的量都是表示在{s}系下的。

根据上一篇文章中,关于 V = ( ω , v ) \mathcal{V}=(\omega,v) V=(ω,v)的定义可知:
V = [ 0 , 0 , ω 3 , 3.37 ω 3 , − 3.37 ω 3 , 0 ] T \mathcal{V}=[0,0,\omega_3,3.37\omega_3,-3.37\omega_3,0]^T V=[0,0,ω3,3.37ω3,3.37ω3,0]T

所以,根据旋量轴的定义,旋量轴为:
S = [ 0 , 0 , 1 , 3.37 , − 3.37 , 0 ] T \mathcal{S}=[0,0,1,3.37,-3.37,0]^T S=[0,0,1,3.37,3.37,0]T

可知, S \mathcal{S} S的前三个量代表了旋转轴的方向,在本例中就是z轴指向的方向。 S \mathcal{S} S的后三个量与前三个量一起,确定了旋转轴的位置,就是 ( 3.37 , 3.37 ) (3.37,3.37) (3.37,3.37)

2.3 旋量与变换矩阵的相互转换

这一部分就不予以推导了,直接给出结论。但我们可以通过例子来验证,这种变换关系的有效性。

旋量——>变换矩阵:
exp ⁡ : [ S ] θ ∈ se ⁡ ( 3 ) → T ∈ S E ( 3 ) \exp :[\mathcal{S}] \theta \in \operatorname{se}(3) \rightarrow T \in S E(3) exp:[S]θse(3)TSE(3),即 T = e [ S ] θ T=e^{[\mathcal{S}] \theta} T=e[S]θ
变换矩阵——>旋量:
log ⁡ : T ∈ S E ( 3 ) → [ S ] θ ∈ se ⁡ ( 3 ) \log : T \in S E(3) \rightarrow[\mathcal{S}] \theta \in \operatorname{se}(3) log:TSE(3)[S]θse(3)

下面通过上文中的例子来验证所给关系的正确性。
首先,关于旋量轴,还需要补充下列表示方法:
S = [ ω v ] ∈ R 6 \mathcal{S}=\left[ \begin{array}{c}{\omega} \\ {v}\end{array}\right] \in \mathbb{R}^{6} S=[ωv]R6
[ S ] = [ [ ω ] v 0 0 ] ∈ s e ( 3 ) , [ ω ] = [ 0 − ω 3 ω 2 ω 3 0 − ω 1 − ω 2 ω 1 0 ] ∈ s o ( 3 ) [\mathcal{S}]=\left[ \begin{array}{cc}{[\omega]} & {v} \\ {0} & {0}\end{array}\right] \in {se}(3), \quad[\omega]=\left[ \begin{array}{ccc}{0} & {-\omega_{3}} & {\omega_{2}} \\ {\omega_{3}} & {0} & {-\omega_{1}} \\ {-\omega_{2}} & {\omega_{1}} & {0}\end{array}\right] \in {so}(3) [S]=[[ω]0v0]se(3),[ω]=0ω3ω2ω30ω1ω2ω10so(3)
所以,据此,上文中我们得到了 S = [ 0 , 0 , 1 , 3.37 , − 3.37 , 0 ] T \mathcal{S}=[0,0,1,3.37,-3.37,0]^T S=[0,0,1,3.37,3.37,0]T,实际上换成二维平面的旋量轴就是:
S = [ ω 3 v 1 v 2 ] = [ 1 3.37 − 3.37 ] \mathcal{S}=\left[ \begin{array}{c}{\omega_{3}} \\ {v_{1}} \\ {v_{2}}\end{array}\right]=\left[ \begin{array}{c}{1} \\ {3.37} \\ {-3.37}\end{array}\right] S=ω3v1v2=13.373.37
那么有:
[ S ] = [ 0 − 1 3.37 1 0 − 3.37 0 0 0 ] , θ = π / 6 rad ⁡ (  or  3 0 ∘ ) [\mathcal{S}]=\left[ \begin{array}{rrr}{0} & {-1} & {3.37} \\ {1} & {0} & {-3.37} \\ {0} & {0} & {0}\end{array}\right],\theta=\pi / 6 \operatorname{rad}\left(\text { or } 30^{\circ}\right) [S]=0101003.373.370θ=π/6rad( or 30)
所以我们计算可得(根据上文对 S \mathcal{S} S的分析,可知这是把{b}系变到{c}系的变换矩阵):
T c b = e [ S ] θ = [ 0.866 − 0.5 2.1365 0.5 0.866 − 1.2335 0 0 1 ] T_{\mathrm{cb}}=e^{[\mathcal{S}] \theta}=\left[ \begin{array}{ccc}0.866&-0.5&2.1365\\ 0.5 &0.866&-1.2335\\0&0&1\end{array}\right] Tcb=e[S]θ=0.8660.500.50.86602.13651.23351

上文中我们通过变换矩阵,计算得到的是:
T c b = T s c T s b − 1 = [ 0.866 − 0.5 2.134 0.5 0.866 − 1.2321 0 0 1 ] T_{\mathrm{cb}}=T_{\mathrm{sc}} T_{\mathrm{sb}}^{-1}= \left[ \begin{array}{ccc}0.866&-0.5&2.134\\ 0.5 &0.866&-1.2321\\0&0&1\end{array}\right] Tcb=TscTsb1=0.8660.500.50.86602.1341.23211

可以看出,经过上面两种不同的计算方式,得到的变换矩阵是一样的,也就证明了我们所提变换关系的有效性。

2.4 为什么要用旋量?

至此,旋量理论的基本内容就差不多结束了。

最后我们来探讨一下为什么要用旋量理论。

就我个人看法而言,对于机器人,大多都是旋转关节,而对于旋转关节,旋转轴是很容易确定的,这就给刚体运动的表达带来了很大的便利性。

3. Wrenches

在这篇文章的最后,我们介绍一个与作用力和力矩有关的概念——wrenches。
这个单词如何翻译成中文我还不太确定,只好姑且先这么用着。
这个概念将来学习到动力学部分时,是非常重要的!

第一个重要的问题:这个概念如何定义的呢?

考虑有一个线性作用力 f f f,作用在刚体的 r r r点上。定义一个坐标系{a},那么 r a r_a ra代表 r r r点在{a}系中的坐标,作用力 f f f在{a}系中被表示为 f a f_a fa。所以,这个力在{a}系中会产生一个作用力矩:
m a = r a × f a m_{a}=r_{a} \times f_{a} ma=ra×fa
我们模仿之前对于twists的定义,定义wrench(或者叫做spatial force)为(参考系{a}下的):
F a = [ m a f a ] ∈ R 6 \mathcal{F}_{a}=\left[ \begin{array}{c}{m_{a}} \\ {f_{a}}\end{array}\right] \in \mathbb{R}^{6} Fa=[mafa]R6

值得注意的是,当线性作用力部分为0时,这就是个纯力矩。

另一个重要的问题:不同坐标系下的wrench如何相互转换?
我们知道,能量是不随坐标系的不同而不同的,与坐标系定义无关。所以,下面等式成立:
V b T F b = V a T F a \mathcal{V}_{b}^{T} \mathcal{F}_{b}=\mathcal{V}_{a}^{T} \mathcal{F}_{a} VbTFb=VaTFa V b T F b = ( [ Ad ⁡ T a b ] V b ) T F a = V b T [ A d T a b ] T F a \begin{aligned} \mathcal{V}_{b}^{T} \mathcal{F}_{b} &=\left(\left[\operatorname{Ad}_{T_{a b}}\right] \mathcal{V}_{b}\right)^{T} \mathcal{F}_{a} \\ &=\mathcal{V}_{b}^{T}\left[\mathrm{Ad}_{T_{a b}}\right]^{T} \mathcal{F}_{a} \end{aligned} VbTFb=([AdTab]Vb)TFa=VbT[AdTab]TFa
F b = [ A d T a b ] T F a \mathcal{F}_{b}=\left[\mathrm{Ad}_{T_{a b}}\right]^{T} \mathcal{F}_{a} Fb=[AdTab]TFa
类似的:
F a = [ A d T b a ] T F b \mathcal{F}_{a}=\left[\mathrm{Ad}_{T_{\mathrm{ba}}}\right]^{T} \mathcal{F}_{b} Fa=[AdTba]TFb

值得注意的是,当刚体上作用了多个wrench时,只要把他们表示在同一坐标系下以后,简单相加即可!!!

本篇文章结束。

注:为了更好的阅读体验,避免文章过长,原本一章的内容被拆分成了多篇文章。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值