《Modern Robotics》阅读笔记1——刚体的运动(一)
《Modern Robotics》阅读笔记1——刚体的运动(一)
一般而言,空间中的刚体运动有六个自由度,但我们描述刚体的运动常见做法是用的变换矩阵,即用了16个元素加上10个约束,而不是就用6个量来表达。用16个元素加上约束的表示方法,叫做implicit representation(隐式表达),这种表达方法好处是没有奇异值。而相对的explicit representation(显式表达)只需要用6个量(比如欧拉角+三维位置矢量),但是有时会遇到奇异值的情况。而造成这种现象的本质原因来自于,代表刚体运动的六维空间并不是欧式空间,而是非欧空间。比如球面是二维面,因此两个量就能表达球面上的一点(经纬度法),但由于球面不是欧式平面,所以经纬度法会有奇点(球面的南北极坐标有无穷多种)。而如果用XYZ三维坐标来表达呢?就完全不会出现这种问题了。
这篇文章主要内容不是关于如何用变换矩阵表示刚体运动,而是用exponential coordinates(指数坐标)来表示。这种方式是比较新颖的,让我们先从二维平面运动开始。
刚体的二维平面运动
如何表达上图中{s}系和{b}系的关系是首先要解决的问题?
- {b}系的原点在{s}系下的表示:
- {b}系的坐标轴在{s}系下的表示:
其中, 代表单位向量。
把上面的等式组织成矩阵的形式,,
这样就表达了{b}系与{s}系的关系,被叫做旋转矩阵和平移矢量。
可以被用作为三个目的:
- (a)一个刚体的坐标系在{s}系下的表示
- (b)用于改变某个向量或者坐标系的参考坐标系(向量需要表示在参考坐标系下)
- (c)移动某个向量或者坐标系
除了用旋转+平移的方法来表达刚体运动,还有一种方法!
刚体的运动完全可以表达为绕一个固定轴的旋转。如下图:
上图中灰色的椭圆从{}系变到{}系,即可以看做经过了平移和旋转(图(a)),也可以看做是绕s点旋转了90度(图(b))。
这种运动可以叫做screw motion。表示为:
其中,是旋转轴的位置,是角度。
另一种表达screw motion的方法是,将运动视作为由一个角速度和线速度运动一段给定的距离形成的。
在上面这个例子中,角速度假设为单位量, 。那么我们根据这个运动的结果,很自然能够算出,坐标系原点的线速度是。所以,我们可以把两个速度放到一起,表示为:
这也被叫做screw axis。(两个速度组成的向量,为什么叫axis呢?因为,线速度比上角速度就可以得到轴的位置,这个向量里已经隐含了轴的位置了。)
绕着这个screw axis,只需要旋转就可以了。所以,我们最终可以把这个运动表示为:
注意,这里的表示方法和上面不一样了。我们称这种表示方法为,刚体运动的exponential coordinates(指数坐标)。
还有一种表达screw motion的方法,将运动视作为由一个角速度和线速度运动单位时间形成的。
进一步的,我们又定义twist的概念!
twist的定义如下:
其中,,也就是说以运动单位时间就可以表达运动了。
twist的概念很重要,之后将会一直用到,这和传统的旋转矩阵的表达方法不一样了。