RPLIDAR的坐标系问题
本教程由 臭皮匠机器人 原创。
转载请注明出处。
RPLIDAR自身的坐标系
RPLIDAR给出来的数据是角度和距离,也就是极坐标系。
转换成直角坐标系的话应该照转换公式计算,假设r是距离,theta是角度,则有:
x = rcos(theta), y = rsin(theta)
RPLIDAR的角度是如图分布的:
按照上述公式计算出来的直角坐标系应该是如下样子的:
RPLIDAR在ROS中不一样的坐标系
可是如果你运行RPLIDAR在ros下的官方ros包,跑出来的效果会发现它的直角坐标系变成了这样(注意看x和y方向):
这跟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轴改变了反向:
接着再加个pi(代码M_PI即pi),代码中是弧度,pi即180°,加了180度,相当于顺时针旋转了180°,则坐标轴变成了最终这个样子:
这个即是ROS中的样子啦。
本教程到此结束啦。臭皮匠机器人将出品更多针对RPLIDAR的教程给您,关注我们哦!
RPLIDAR系列教程:
RPLIDAR在ROS下快速上手教程
RPLIDAR十分钟极速入门教程
RPLIDAR最强参数详解