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

本文是《Modern Robotics》阅读笔记,介绍刚体运动表示。前文介绍旋转矩阵、轴角表示刚体旋转,变换矩阵表示刚体运动,本文重点讲旋量理论,包括旋量轴定义、与变换矩阵转换,还探讨使用旋量的原因,最后介绍与作用力和力矩有关的Wrenches概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

1. 前文小结

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

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

对于1

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

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

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

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

  • 前文中,我们介绍了一种刚体运动的表示方法,就是变换矩阵。这篇中,我们将介绍另一种方法:旋量。
  • 变换矩阵:T∈SE(3):4×4T \in S E(3) : 4 \times 4TSE(3):4×4 matrices,T=[Rp01]T=\left[ \begin{array}{ll}{R} & {p} \\ {0} & {1}\end{array}\right]T=[R0p1]
  • 旋量:[S]θ∈se(3)[\mathcal{S}] \theta \in {se}(3)[S]θse(3),其中S\mathcal{S}S代表旋量轴(screw axis)
  • 和旋转类似,由变换矩阵到旋量,旋量到变换矩阵的映射函数(李代数)
  • exp⁡:[S]θ∈se⁡(3)→T∈SE(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∈SE(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}系的变换矩阵如下:
Tsb=[cos⁡30∘−sin⁡30∘1sin⁡30∘cos⁡30∘2001] 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
Tsc=[cos⁡60∘−sin⁡60∘2sin⁡60∘cos⁡60∘1001] 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}系的旋转可以表示为:
Tcb=TscTsb−1=[0.866−0.52.1340.50.866−1.2321001]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]∈R6,[V]=[[ω]v00]∈se(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)
旋量轴的定义分了两种情况进行考虑:

  • 一般的刚体运动:if ω≠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/ω)θ˙=ω
  • 纯平移运动:if ω=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]^TV=[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]^TS=[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∈SE(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∈SE(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]∈R6 \mathcal{S}=\left[ \begin{array}{c}{\omega} \\ {v}\end{array}\right] \in \mathbb{R}^{6} S=[ωv]R6
[S]=[[ω]v00]∈se(3),[ω]=[0−ω3ω2ω30−ω1−ω2ω10]∈so(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]^TS=[0,0,1,3.37,3.37,0]T,实际上换成二维平面的旋量轴就是:
S=[ω3v1v2]=[13.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−13.3710−3.37000],θ=π/6rad⁡( or 30∘) [\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}系的变换矩阵):
Tcb=e[S]θ=[0.866−0.52.13650.50.866−1.2335001]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

上文中我们通过变换矩阵,计算得到的是:
Tcb=TscTsb−1=[0.866−0.52.1340.50.866−1.2321001]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。
这个单词如何翻译成中文我还不太确定,只好姑且先这么用着。
这个概念将来学习到动力学部分时,是非常重要的!

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

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

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

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

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

本篇文章结束。

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值