空间数学与刚体运动

旋转矩阵

旋转矩阵是一格九个数字的整齐方阵——三行三列——它刻画的是一个姿态,也就是一个物体究竟是怎么转着的。读它最清爽的办法是一列一列地看:它的三列各自告诉你,转动之后某根坐标轴现在指向哪里。把这三个答案并排摆好,这个小方阵就装下了整个旋转,既不必摆弄角度,也不用操心绕圈打转的问题。把这个方阵交给机器人,它就精确知道夹爪、相机或者整个机身朝着哪个方向。

同一个方阵也是一台给箭头重新瞄准的机器。让一个位置向量乘上一个旋转矩阵,出来的就是这同一个向量在旋转之后的样子——或者同样有用地,是同一个物理点的数字从一个坐标系翻译到另一个坐标系后的结果。这正是空间机器人里日常的主力动作:相机报告说杯子在左上方,乘上正确的旋转矩阵之后,就变成了机械臂真正能朝着去的一个方向。把两次旋转的矩阵相乘,就能连着施加两次转动,像一步步照路线走那样干净利落地把转动串接起来。

不是随便九个数字都行。真正的旋转矩阵是正交规范的——它的三列各自恰好是一个单位长,且两两完全垂直——除此之外它还必须是右手的(行列式为 +1,从而排除镜像翻转)。这两组条件合起来,正是它在转动东西时既不会拉伸、压扁、扭歪、也不会镜像翻转它们的原因。长度和角度都原封不动地保留下来;一个正方体仍是正方体,只是转了个向。这一族乖巧的矩阵,数学家称之为 SO(3),即特殊正交群,这不过是“所有规规矩矩的三维旋转”的一个正式名称。它最大的优点是可靠;它略微的代价是,用九个数字去钉住一件其实只需要三个数字的事,这也是当内存或平滑性要紧时人们常常更偏爱四元数的原因之一。

机器人的相机在它的左上方发现一个目标,但机械臂是按底座坐标系思考的。把目标方向乘上“相机到底座”的旋转矩阵,就把“镜头的左上方”重新表述成机械臂可以挥臂朝向的一个具体方位——同一个点,换成机械臂听得懂的语言重新说一遍。

一次乘法,就把一个方向从相机坐标系改写到底座坐标系。

由于它的各列都是单位长且互相垂直,旋转矩阵的逆——也就是反向转动——恰好就是它沿对角线翻折后的样子(即它的转置),这让“撤销一次旋转”既省力又精确。

又称
direction cosine matrixDCM方向余弦矩阵旋轉矩陣