SLAM坐标系

首先,推送一个c++源码分析神器 understand

下载地址:https://scitools.com/download/chinese/

破解地址:https://blog.csdn.net/wyy_sunshine/article/details/40616051

版本:Understand-3.1.670 64位 

证书CODE(32/64 都可用)

    09E58CD1FB79

slam里面一般四个坐标系。

小车坐标系,地图坐标系,odom坐标系(这个是移动的,和小车之间的距离就是里程计走的距离),传感器sensor坐标系,一般是激光,和小车有个固定的距离。

一.四个坐标系展示

map_frame:世界坐标系中的固定frame。也就是说,这是一个全局的固定frame,它理论上不会随着机器人的移动或者测量的误差而产生漂移,一般设置系统的初始状态作为坐标原点。

odom_frame:里程计frame。它是移动机器人在移动过程中利用里程计(如车轮编码器,视觉里程计等)对机器人进行位姿估计的坐标系,一般设置机器人初始位置作为坐标原点,总所周知,里程计在长时间的使用中会出现一下累计误差。

baselink_link_frame:机器人frame。它是机器人坐标系,是一个移动的坐标系。

laser_frame:激光frame。它是激光雷达的坐标系,固定在机器人上,与baselink_link_frame往往只存在一个平移变换量。
 

SLAM坐标系_第1张图片

这个是odom固定。 

一般设置机器人初始位置作为坐标原点,总所周知,里程计在长时间的使用中会出现一下累计误差

SLAM坐标系_第2张图片

这个是base-link固定,就是车体

SLAM坐标系_第3张图片

SLAM坐标系_第4张图片

map坐标系

SLAM坐标系_第5张图片

map----odom----base_link -----base-_laser_link

base_link与base_laser_link的关系:静态

激光雷达坐标系到基础坐标系之间的转换由运动平台确定,通常是静态的。在Plantbot中,激光雷达架设在在第三层中心, 而基础坐标系中心为第一层中心 ,两坐标系的转换只需沿z轴平移两板的间距。静态坐标系转换可以使用static_transform_publisher命令来定周期发布,也可以采用更通用的方法,即利用建立的URDF(Unified Robot Description)模型,调用joint_state_publisher和robot_state_publisher来完成,后一种方法在机械臂中尤为常见。

SLAM坐标系_第6张图片

tf为transform的意思,相当于是坐标变换的矩阵,坐标变换树方便调用。

[/tf]是ROS系统的tf坐标变换库订阅和发布的主题, tf库坐标变换进行了封装,很多时候我们不太关心主题[/tf]中的消息内容,而是通过tf库中的接口来直接获取坐标变换关系。slam_gmapping发布的这个tf主要是描述地图到里程计的坐标变换。

此外,[/slam_gmapping]还订阅了四个主题。[/tf]来自于机器人里程计的坐标变换,[/scan]则是激光雷达的扫描信息。[/tf_static]是tf2中添加的新特性,目的是提供一个不变的在任何时刻都成立的变换矩阵。 [/clock]则是来自Gazebo的主题,与仿真时间有关。

 

ps: IMU即为 惯性测量单元,一般包含了三个单轴的加速度计和三个单轴的陀螺仪,简单理解通过加速度二次积分就可以得到位移信息、通过角速度积分就可以得到三个角度。从imu得到的数据为一个相对角度(主要使用yawrollpitch 后面不会使用到),使用该角度来替代由编码器计算得到的角度。 这个方法较为简单,出现打滑时候因yaw不会受到影响,即使你抬起机器人转动一定的角度,得到的里程也能正确反映出来。

轮速里程计:轮子上的编码器,测量绝对移动,也可以测出车速。

 

二.激光雷达坐标系

首先,要明确一下,无论是哪种传感器:相机、激光雷达、毫米波雷达,都有自己的坐标系,也就是所有的传感器产生的数据都是基于传感器自身的坐标系的,然而,一辆自动驾驶汽车,车上会安装许多传感器,为了方便算法研究、测试,都需要将各自传感器获得的数据转换到车体坐标系下,也就是base坐标系,那么这个过程就叫做传感器的外参标定。SLAM坐标系_第7张图片

更近一层,传感器的外参标定其实可以标记成一个4×4的矩阵,也可以说成由一个旋转矩阵3×3和一个平移矩阵3×1组成,即传感器坐标系通过一些刚体变换(分别沿x,y,z方向做一些平移、旋转)就可以转换到车体坐标系。那么我们的任务则是求出这两个矩阵即可,或者得到这6个量(X,Y,Z,Roll, Pitch,Yaw )就行,有了这6个值,我们就可以计算出平移矩阵和旋转矩阵,也就可以将传感器的数据转换到车体坐标系下了。

注:(X,Y,Z,Roll, Pitch,Yaw )含义:前3个值代表分别沿x,y,z方向平移的距离;后3个值代表分别沿x,y,z方向旋转的角度。

SLAM坐标系_第8张图片

 根据机械结构情况,可能需要对范围角度内的角度进行裁剪,比如采用的是思岚的激光雷达A1,由于base的机构设计,需要对雷达进行角度裁剪。【https://blog.csdn.net/qq_29230261/article/details/83107116】

一般的存储数据对应是:

lidar.angles=[lidar.angle_min: lidar.angle_increment: lidar.angle_max]

lidar.ranges=[];

一般假如是-180到180度范围的量程,angle_min=-pi;angle_max=pi;

 

你可能感兴趣的:(SLAM)