RPLIDAR的坐标系问题

​本教程由 臭皮匠机器人 原创。
转载请注明出处。


RPLIDAR自身的坐标系

RPLIDAR给出来的数据是角度和距离,也就是极坐标系。

转换成直角坐标系的话应该照转换公式计算,假设r是距离,theta是角度,则有:

x = rcos(theta), y = rsin(theta)

RPLIDAR的角度是如图分布的:
RPLIDAR的坐标系问题
按照上述公式计算出来的直角坐标系应该是如下样子的:
RPLIDAR的坐标系问题

RPLIDAR在ROS中不一样的坐标系

可是如果你运行RPLIDAR在ros下的官方ros包,跑出来的效果会发现它的直角坐标系变成了这样(注意看x和y方向):
RPLIDAR的坐标系问题
这跟RPLIDAR自身的直角坐标系显然不一样,这是怎么回事呢?

原来ROS的坐标系是规定好的,所有的雷达只要采用了其标准的LaserScan定义的数据格式,就应该要做成那样的坐标系。

为了满足ROS的坐标系要求,就必须做变换。仔细查看RPLIDAR的ROS驱动包就会找到如下代码:

scan_msg.angle_min =  M_PI - angle_min;

angle_min是起始角度,对RPLIDAR来说正常应该是0。

上面代码,先对起始角度取反,-90°即270°,-270°即90°,-180°还是相当于180°,则取反的效果是x轴改变了反向:
RPLIDAR的坐标系问题
接着再加个pi(代码M_PI即pi),代码中是弧度,pi即180°,加了180度,相当于顺时针旋转了180°,则坐标轴变成了最终这个样子:
RPLIDAR的坐标系问题
这个即是ROS中的样子啦。

本教程到此结束啦。臭皮匠机器人将出品更多针对RPLIDAR的教程给您,关注我们哦!


RPLIDAR系列教程:
RPLIDAR在ROS下快速上手教程
RPLIDAR十分钟极速入门教程
RPLIDAR最强参数详解