【cartographer_slam源码阅读】4-6激光雷达数据的转换

HandleLaserScanMessage()函数

在这里插入图片描述

作用:

  1. 利用 ToPointCloudWithIntensities函数 将ros中的数据转换为carto中定义的数据类型;
  2. 传入 HandleLaserScan() 函数中进行处理;

Note:

  1. sensor_msgs::LaserScan数据格式:
  2. PointCloudWithIntensities数据格式:

HandleMultiEchoLaserScanMessage() 函数同上类似;

HandlePointCloud2Message()函数

在这里插入图片描述

作用:

  1. 利用ToPointCloudWithIntensities函数 将ros中的数据转换为carto中定义的数据类型;
  2. 传入 HandleRangefinder() 函数中进行处理;

上面三个函数都调用了ToPointCloudWithIntensities函数,该函数根据传参数据格式不同进行了重载;

ToPointCloudWithIntensities()函数

LaserScanToPointCloudWithIntensities()函数

模板函数,处理ros格式的sensor_msgs::LaserScan and sensor_msgs::MultiEchoLaserScan数据格式,得到PointCloudWithIntensities类型数据;

数据格式

LaserScan(单回波激光雷达):

header: 消息头,包含了该消息的帧id、时间戳和坐标系信息。
angle_min: 扫描起始角度,单位为弧度。(180度)
angle_max: 扫描终止角度,单位为弧度。(-180度)
angle_increment: 角度分辨率,即每个激光束之间的角度差,单位为弧度。(-0.18度)
time_increment: 时间分辨率,相邻两激光点的扫描时间增量,单位为秒。
scan_time: 一次扫描的持续时间,单位为秒。(0.06秒)
range_min: 能够测量到的最小距离值,单位为米。(0米)
range_max: 能够测量到的最大距离值,单位为米。(40米)
ranges: 扫描得到的距离值数组,按照顺序存放,单位为米。
intensities: 扫描得到的反射强度值数组,如果激光雷达不支持反射强度测量,则该字段为空。

MultiEchoLaserScan(多回波激光雷达):

程序逻辑

  1. 激光雷达异常数据判断
    在这里插入图片描述
    在这里插入图片描述

最终需要得到的数据格式:


在这里插入图片描述
在这里插入图片描述
激光点在指定坐标系的坐标position;
激光点时间戳time;
激光点强度intensities;

  1. point坐标获取

(1)以单回波雷达数据的处理为例,HasEcho判断测距数据是否为空;
(2)取ranges测距里面的第一个值,注意(ranges 里面的值是按 扫描起始角度->扫描终止角度 顺序存储的);
(3)判断数据在激光雷达有限测距范围内;
(4)根据测得的距离以及扫描起始角度,角度分辨率信息,循环计算每个扫描点在设置坐标系下的坐标,原理如图;
(5)这里还定义了第一次扫描点的时间为0,依次按照时间增量递增(与后面的时间戳定义有关);
(6)激光雷达长时间未扫描到障碍物没有办法建图;
在这里插入图片描述

在这里插入图片描述

  1. intensities强度数据获取

(1)强度可以理解为障碍物对激光束的反射率;
(2)判断雷达原始数据中有强度数据,检查扫描点个数必须与强度数据对齐,即一个扫描点必须对应一个强度信息,满足则push到carto定义的强度数据中,否则push数据0进去;

在这里插入图片描述

  1. time数据获取

(1)激光雷达每帧数据自带时间戳为开始扫描的时间;
(2)获取points数据时,最后一个点的points.time数据记录了扫描一帧的用时duration,时间戳为每帧扫描结束后的时间;
(3)相应的,每个扫描点记录的时间改为points.time-duration(其实就是保证这一帧数据的时间戳加上points.time是每个扫描点的扫描时间);
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资说明】 基于单线激光雷达SLAM建图与路径规划c++实现码+项目说明(SLAM建图、定位、路径规划).zip 单线激光雷达SLAM建图与路径规划 使用的硬件:autolabor pro1小车、小觅双目相机(S1030标准版本)、IntelNUC迷你主机、显示器、2D激光雷达 Delta-1A 使用的软件:ubuntu 16.04 LTS、ROS-kinetic、小觅驱动、autolabor pro1小车驱动、Delta-1A驱动、VINS-Fusion算法、ROS-navigation导航包、gmapping建图算法、cartographer_ros建图算法 ## tf介绍 tf变换:map(地图坐标系)-->odom(里程计坐标系)——>base_link(小车基座坐标系)——>传感器坐标系(lidar、camera) ---- map-->odom 由建图算法提供 ---- odom --> base_link 由小车驱动提供 ---- base_link --> 传感器坐标系 根据传感器在小车上安装的位置确定,使用static_transform_publisher静态坐标转换来设置 所需传感器数据类型: sensor_msgs/LaserScan 使用Delta-1A驱动发布的雷达扫描话题,话题名:/scan 所需里程计信息数据类型:nav_msgs/Odometry 使用autolabor pro1发布的里程计,话题名:/wheel_odom ## 建图 采用gmapping与 cartographer_ros建图算法分别进行建图 ### gmapping建图:(雷达+小车) 打开终端,执行如下指令: $ cd ~/catkin_ws_lidar_slam/ $ source devel/setup.bash $ roslaunch autolabor_box_launch create_map_gmapping.launch ####打开小车urdf模型、驱动、键盘控制节点、打开雷达驱动、打开gmapping节点、打开rviz可视化节点 ####此时使用键盘的上下左右键控制小车移动,开始建图 ####建图完成后,开启新的终端执行如下指令,保存地图: $ rosrun map_server map_saver -f map_name ####保存地图 map_name为保存地图的名称,运行结果,会生成2个文件,后缀名分别为 .pgm .yaml ### cartographer_ros建图:(雷达+小车) ##打开终端,执行如下指令: $ cd ~/catkin_ws_lidar_slam/ $ source devel/setup.bash $ roslaunch autolabor_box_launch create_map_cartographer.launch ####此时使用键盘的上下左右键控制小车移动,开始建图 ####建图完成后,开启新的终端执行如下指令,保存地图: $ rosrun map_server map_saver -f map_name ### cartographer_ros建图:(雷达+小车+IMU) $ cd ~/catkin_ws_lidar_slam/ $ roslaunch autolabor_box_launch create_map_cartographer_imu.launch ####此时使用键盘的上下左右键控制小车移动,开始建图 ####建图完成后,开启新的终端执行如下指令,保存地图: $ rosrun map_server map_saver -f map_name ## 定位与路径规划 分别使用gmapping建图算法与cartographer_ros建图算法建立的地图进行定位与路径规划 ### gmapping算法建立的地图进行定位与路径规划 打开终端,执行如下指令: $ cd ~/catkin_ws_lidar_slam/ $ source devel/setup.bash $ roslaunc 【备注】 1、该资内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值