SLAM中坐标轴旋转及ros的接口解释

        读完几个loam算法,满篇的坐标轴旋转,还是手写的(作者,用eigen写不好嘛。。。),我滴天适应了好久…,今天就总结一下坐标轴旋转问题。

一、首先,我们看一下ros中关于欧拉角旋转的函数:setRPYsetEulersetEulerZYX1、3等价

ros中的欧拉角可以分为绕旋方式)和绕旋方式)的变换方式,函数没有给出Euler时,是按定轴转动,矩阵依次乘。若函数的名字中有Euler,则表示为绕动轴转动的方式,矩阵依次乘。

1.setRPY()

这个函数采用固定轴的旋转方式,先绕定轴x旋转(横滚),然后再绕定轴y (俯仰),最后绕定轴z(偏航)。从数学形式上说,这是绕定轴XYZ矩阵依次左乘.即:R=R(z)R(y)R(x)的顺序。由于是绕着定轴转动,所以很直观,便于人机交互。

2.setEuler()

这种方式是绕着动轴转动,先绕Y轴,在绕变换后的X轴,再绕变换后的Z轴旋转。从数学形式上说,这是绕定轴YXZ矩阵依次右乘.即:R= R(y)R(x)R(z)的顺序。

3.setEulerZYX()

与2相同,此种旋转变换也是绕动轴旋转,只不过次序为ZYX,矩阵也是右乘,即R = R(z)R(y)R(x)。我们发现,这里的R与1中的R的最终结果相同,所以1和3的定义最终是等价的。

总结“外定左,内动右” 。

二、再看,我们定义一个坐标系如下

SLAM中坐标轴旋转及ros的接口解释_第1张图片

        欧拉角对于旋转方向的定义:该轴的正向往逆向看去,逆时针方向即为正方向(右手定则)。绕某个轴的单次旋转矩阵:按照机器人前(x)-左(y)-上(z)的坐标系定义,并令横滚角为roll、俯仰角为pitch、航向角为yaw,假设旋转矩阵是按照z-y-x的顺序旋转得来,那么旋转矩阵可以表示为:

SLAM中坐标轴旋转及ros的接口解释_第2张图片,其中theta=roll.

SLAM中坐标轴旋转及ros的接口解释_第3张图片,其中theta=pitch.

 SLAM中坐标轴旋转及ros的接口解释_第4张图片,其中theta=yaw.

旋转矩阵的记法:

SLAM中坐标轴旋转及ros的接口解释_第5张图片

(还是不理解可以去b站,搜索一个中国台湾的老师讲解的课程,相当清晰!·)

三、ros的tf监听、发布及显示

SLAM中坐标轴旋转及ros的接口解释_第6张图片

        tf_tree树中的箭头表示父子坐标系,上面为父坐标系,下面为子坐标系,显示的是坐标系变换之间的关系;

        rviz界面显示的是坐标变换的关系;(左侧添加tf插件:层次也是与tf_tree一致)。

        ros的监听/发布接口解释:

==》:  a系到b系的坐标系变换;等价==》b在a下的坐标及姿态描述;

              a系到b系的坐标系变换;等价==》b系到a系的坐标变换,so

              a系到b系的坐标变换;等价==》a在b下的坐标及姿态描述。

------------------------------------------------------------可爱的分割线

        这篇写完(这篇草稿已经是去年10月份左右了,拖着拖着还是觉得写完吧),对激光slam的工作可能会放一段落了,研究生进程过一大半了要准备投简历找工作咯!不知道以后还有没有接触SLAM的机会。祝大家在SLAM道路上一帆风顺!

你可能感兴趣的:(0_1SLAM,c++,算法,自动驾驶)