在做apriltags项目的过程中,发现ros中常常以四元数来表示一个位姿(包含位置和姿态)的姿态,但有时候我们会遇到想要的姿态与预定的姿态出现偏差,想通过旋转来实现姿态的变换,这时直接在四元数进行变换时,常常会遇到看不懂四元数表示的实际姿态,更不要谈去在四元数上进行操作,我们一般会想到把四元数转化成欧拉角或者旋转矩阵进行旋转操作,其实这是可行的,而且依附于ros中TF树的强大,常常我们只需要调用相关的语句就可以实现三者的变换。
但其实我们可以直接在四元数上进行旋转变换,下面我就分析一下我的思路。
首先要学习下面几个四元数的理论:
一,下面是如何把具体的四元数与旋转轴和旋转角度对应起来。
1.指出旋转轴和旋转角度,如何转化为四元素。参考网址
假定旋转轴是:RAxis = Y轴,换算成三维空间单位向量就是RAxis = [0 1 0],旋转180度(顺时针为负,逆时针为正)注意:这里的旋转是在在前一次旋转前坐标上进行旋转变换
那么转化成四元数就是(第一个180是旋转角度)
q.w=cos((180/2)pi/180) = 0
q.x=RAix.xsin((180/2)pi/180) = 00.5=0
q.y=RAix.ysin((180/2)pi/180) = 00.5=1
q.z=RAix.zsin((180/2)pi/180) = 10.5=0
例子验证:我们知道,绕y轴旋转180的欧拉角是rpy=(0,180,0)借助在线软件,我们输入后发现四元数便是wxyz=(0,0,1,0)。如下:
2.指出四元数,怎么知道旋转轴和旋转角度呢。
假定q=[0,0,1,0] (其实这个是上面的反例子而已)
q.w&