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

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

一般而言,空间中的刚体运动有六个自由度,但我们描述刚体的运动常见做法是用 4 × 4 4\times4 4×4的变换矩阵,即用了16个元素加上10个约束,而不是就用6个量来表达。用16个元素加上约束的表示方法,叫做implicit representation(隐式表达),这种表达方法好处是没有奇异值。而相对的explicit representation(显式表达)只需要用6个量(比如欧拉角+三维位置矢量),但是有时会遇到奇异值的情况。而造成这种现象的本质原因来自于,代表刚体运动的六维空间并不是欧式空间,而是非欧空间。比如球面是二维面,因此两个量就能表达球面上的一点(经纬度法),但由于球面不是欧式平面,所以经纬度法会有奇点(球面的南北极坐标有无穷多种)。而如果用XYZ三维坐标来表达呢?就完全不会出现这种问题了。

这篇文章主要内容不是关于如何用变换矩阵表示刚体运动,而是用exponential coordinates(指数坐标)来表示。这种方式是比较新颖的,让我们先从二维平面运动开始。

刚体的二维平面运动

图1
如何表达上图中{s}系和{b}系的关系是首先要解决的问题?

  • {b}系的原点在{s}系下的表示:
    p = p x x ^ s + p y y ^ s p=p_x \hat{x}_s+p_y\hat{y}_s p=pxx^s+pyy^s
  • {b}系的坐标轴在{s}系下的表示:
    x ^ b = cos ⁡ θ x ^ s + sin ⁡ θ y ^ s \hat{x}_b=\cos{\theta} \hat{x}_s+\sin{\theta} \hat{y}_s x^b=cosθx^s+sinθy^s
    y ^ b = − sin ⁡ θ x ^ s + cos ⁡ θ y ^ s \hat{y}_b=-\sin{\theta} \hat{x}_s+\cos{\theta} \hat{y}_s y^b=sinθx^s+cosθy^s
    其中, ^ \hat{} ^ 代表单位向量。
    把上面的等式组织成矩阵的形式, { P , p } \{P,p\} {P,p}
    p = [ p x p y ] p=\left[\begin{matrix} p_x \\ p_y \end{matrix}\right] p=[pxpy]
    P = [ x ^ b y ^ b ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] P=[\begin{matrix} \hat{x}_b & \hat{y}_b\end{matrix}]=\left[ \begin{matrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{matrix} \right ] P=[x^by^b]=[cosθsinθsinθcosθ]
    这样就表达了{b}系与{s}系的关系, { P , p } \{P,p\} {P,p}被叫做旋转矩阵和平移矢量。

{ P , p } \{P,p\} {P,p}可以被用作为三个目的:

  • (a)一个刚体的坐标系在{s}系下的表示
  • (b)用于改变某个向量或者坐标系的参考坐标系(向量需要表示在参考坐标系下)
  • (c)移动某个向量或者坐标系

除了用旋转+平移的方法来表达刚体运动,还有一种方法!
刚体的运动完全可以表达为绕一个固定轴的旋转。如下图:

在这里插入图片描述
上图中灰色的椭圆从{ c c c}系变到{ c ′ c^{'} c}系,即可以看做经过了平移和旋转(图(a)),也可以看做是绕s点旋转了90度(图(b))。
这种运动可以叫做screw motion。表示为:
( β , s x , s y ) = ( π / 2 , 0 , 2 ) (\beta,s_x,s_y)=(\pi/2,0,2) (β,sx,sy)=(π/2,0,2)
其中, ( s x , s y ) (s_x,s_y) (sx,sy)是旋转轴的位置, β \beta β是角度。

另一种表达screw motion的方法是,将运动视作为由一个角速度和线速度运动一段给定的距离形成的。
在上面这个例子中,角速度假设为单位量, ω = 1   r a d / s \omega=1 \ rad/s ω=1 rad/s 。那么我们根据这个运动的结果,很自然能够算出,坐标系原点的线速度是 v = ( v x , v y ) = ( 2 , 0 ) v=(v_x,v_y)=(2,0) v=(vx,vy)=(2,0)。所以,我们可以把两个速度放到一起,表示为:
S = ( ω , v x , v y ) = ( 1 , 2 , 0 ) \mathcal{S}=(\omega,v_x,v_y)=(1,2,0) S=(ω,vx,vy)=(1,2,0)
这也被叫做screw axis。(两个速度组成的向量,为什么叫axis呢?因为,线速度比上角速度就可以得到轴的位置,这个向量里已经隐含了轴的位置了。)
绕着这个screw axis,只需要旋转 θ = π / 2 \theta=\pi/2 θ=π/2就可以了。所以,我们最终可以把这个运动表示为:
S θ = ( π / 2 , π , 0 ) \mathcal{S}\theta=(\pi/2,\pi,0) Sθ=(π/2,π,0)
注意,这里的表示方法和上面不一样了。我们称这种表示方法为,刚体运动的exponential coordinates(指数坐标)。

还有一种表达screw motion的方法,将运动视作为由一个角速度和线速度运动单位时间形成的。
进一步的,我们又定义twist的概念!
twist的定义如下:
V = S θ ˙ \mathcal{V}=\mathcal{S}\dot{\theta} V=Sθ˙
其中, θ ˙ = θ \dot{\theta}=\theta θ˙=θ,也就是说以 V \mathcal{V} V运动单位时间就可以表达运动了。
twist的概念很重要,之后将会一直用到,这和传统的旋转矩阵的表达方法不一样了。

本篇文章结束。
注:为了更好的阅读体验,避免文章过长,原本一章的内容被拆分成了多篇文章。
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值