Self-Driving干货铺4:坐标转换
自动驾驶专栏,如果你对已介绍的内容还不了解的话,可以先阅读以下文章快速温习一下~
1、何为坐标转换?
如下图所示,无人车上有很多传感器,每个传感器都部署在车上不同的位置,但传感器采集的数据都是基于自身坐标系的数据。
而车辆的控制中心却并不一定在传感器上,因此需要将传感器所采集的信息转换到基于汽车控制中心坐标系上的信息。
举个例子,例如某个小车有其自身坐标系,在它的几何中心上,以robot_base表示,该小车上有个图像传感器,该传感器的坐标系为camera_center其安装点坐标系为mounting_point,在小车移动过程中,传感器采集的信息都是基于camera_center的,而实际控制是基于robot_base的,因此需要将camera_center的坐标系信息转换到robot_base上。
上面所述的就涉及坐标变换:指采用一定的数学方法将一种坐标系的坐标变换为另一种坐标系的坐标的过程。在三轴坐标系中,一般定义绕Z轴、Y轴、X轴的旋转角度,如果用Tait-Bryan angle表示,分别为Yaw、Pitch、Roll。即
· 绕 Z轴 旋转,称之为 航向角,使用Yaw表示
· 绕 X轴 旋转,称之为 横滚角,使用Roll表示
· 绕 Y轴 旋转,称之为 俯仰角,使用Pitch表示
2、坐标转换原理
有了上面这些基本概念我们再以一个例子来说明下坐标转换原理:比如某小车上有一激光雷达传感器,其坐标系为hokuyo link,而小车运动中心的坐标系为base link,当激光雷达传感器探测到空间中某点p后,其会通过下式将该点在hokuyo link坐标系的描述信息变换到base link坐标系下的描述。
ROS中处理坐标变换除了采用欧拉角和RPY固定角外,主要采用四元数方式,因为它是一种紧凑、易于迭代且不会出现奇异值的表示方法。一个物体的三维位姿可由含有9个分量的3*3矩阵表示(即旋转矩阵),但占空间,也可由只有三个参数的欧拉角来表示但会出现奇异值,而四元数用含有一个实部和三个虚部的形式表示,不仅省空间还可无奇异的表示各种姿态,其形式如下:
基于上述理论,ROS有现成的tf库(坐标转换库—Transform Library),它会通过单层多叉树的树状结构实现了系统中任意一点在所有坐标系中的转换。该树结构特点为单亲,一个子坐标系只有父坐标系。如下是个示例:
Autoware的无人车系统也是参考ROS现有的东西来实现的坐标系转换,如下:
自动驾驶领域经常有矩阵、概率相关的数学知识,线性代数和概率统计是最主要的,还得好好看呐
参考文献:
1、CSDN、Mathworks、Tire IV等资料
点个“在看”再走!