LeGo-LOAM跑自己的数据包无法显示全局地图问题
注意:本文笔者使用环境:Ubuntu18.04 ROS melodic 版本
背景
3D SLAM新手,在看到了各种狂拽炫酷的3D点云图的之后决定亲自上手一试,首先当然的是最为经典的LOAM算法了,使用的是这位大佬的教程 :链接: LOAM进行点云地图创建.大佬的教程基本没有什么致命的错误,一般是可以直接成功的。使用了官方的数据包也没出现什么问题,还算比较顺利。不深究算法原理也算是成功了。
那么接下来当然就是进阶了,正好实验室购置了一台雷达,自己采了数据。接下来选择的算法是LeGo-LOAM,性能优于LOAM,准备实践,使用了 这位大佬的教程:链接: LeGO-LOAM运行数据集.同样优秀的教程。(只是初学小白注意,最好自己手动创建工作空间,每条指令都copy可能会和之前的工作空间冲突)跑了官网数据集同样顺利出图,3D点云图,并且显示了全局点云地图。
但是!但是!!!但是当我满怀激情的换上自己的数据集之后,发现rviz只能显示当前扫描帧,无法显示全局点云地图,无论怎么调试都无法显示,如下图所示
为了解决以上问题,笔者进行了各种花里胡哨的尝试,无一奏效。始终以为自己的激光雷达有什么问题,或者是少录了什么Topic,然后无奈之下查看了激光雷达的参数,终于找到了错误之处。说来无语,原因是激光雷达类型不同不支持,比较常见的进口Velodyne 16雷达,国产的速腾聚创的RS-LiDAR-16雷达,CX镭神16/32激光雷达,禾赛科技16/32/64线激光雷达等等,笔者所用的是RS-LiDAR-16将在下文展开,其他品牌仅供参考。
一、激光雷达类型
无论是LOAM还是LeGo-LOAM算法,原作者在写算法的时候或者说是在测试的的时候,使用的激光雷达都更倾向于:Velodyne 16线激光雷达VLP-16------16线激光雷达VLP-16是美国进口的一种小型的3D激光雷达,售价大概在32000左右,它的一些参数如下:
激光线数:16线;
测量范围:高达100m;
测量精度:±3cm;
支持两次回波;
垂直测量角度范围:30°(﹢15°到﹣15°);
垂直方向角度分辨率:2°;
水平方向测量角度范围:360°;
水平方向角度分辨率:0.1°到0.4°;
测量频率:5到20Hz;
可以通过网络浏览器监测和改变电机的转速;
激光安全等级:1级(人眼安全);
激光波长:905nm;
传感器功率:8W(典型值);
工作电压:9-32V;
重量:830g;
外形尺寸:103mmX72mm;
振动测试:500m/sec² 振幅,持续时间11msec ;
振动:5 Hz to 2000 Hz, 3G rms;
防护等级:IP67;
工作温度:﹣10℃到﹢60℃;
储存温度:-40℃到﹢105℃;
输出: 每秒高达30万个测量点输出;
100M快速以太网连接;
数据包包含:距离值、物体反射率、旋转角度、同步时间(μs分辨率);
支持外接GPS;
而笔者所使用的是RS-LiDAR-16 - 速腾聚创 - 自动驾驶激光雷达它是国内激光雷达厂商速腾聚创的一款雷达,主要面向自动驾驶汽车环境感知、机器人环境感知、无人机测绘等领域。速腾聚创成立于2014年8月,研发中心位于深圳。2016 年 10 月份宣布完成实验室测试,开始路测。它的参数如下:
二、修改步骤
1.修改launch文件
因为原作的代码是使用的Velodyne 的雷达,所以对国内的雷达的兼容并没有那么好,所以需要简单的修改一下launch文件,这里参考了大佬的链接:链接: 在用robosense的rslidar(16线)运行lego-loam遇到的问题总结.大佬的文章很详尽了。原因是Lego-loam可以处理VLP-16中的Nan点,但是对其它品牌的雷达数据格式中的Nan点处理的不是很好,就是说在GitHub原作者的源码下面给出了解决办法,即在原来的run.launch文件中添加滤波的过程,滤除那些空点即可。
注意! 注意!! 注意!!!
下文给出了修改好的launch文件,但是使用时大家根据自己的数据包格式不同还要做相应的改动。首先第一处:
// 注意这一行重映射
<remap from="~input" to="/points_raw" />
这里的 /points_raw话题是你的数据包发布的 /PointCloud2格式的数据,也就是你录制好的需要的3D点云数据,你可以使用指令查看自己的bag的信息。
rosbag info bagfile.bag
这是笔者自己的bag的Topic信息:
查看你的bag包录制topic是什么名称然后做相应的修改。
这里是笔者自己用的run.launch,仅作参考
<launch>
<!--- Sim Time -->
<param name="/use_sim_time" value="true" />
<node pkg="nodelet" type="nodelet" name="pcl_manager" args="manager" output="screen" />
<!-- Run a passthrough filter to clean NaNs -->
<node pkg="nodelet" type="nodelet" name="passthrough" args="load pcl/PassThrough pcl_manager" output="screen">
<remap from="~input" to="/points_raw" />
<remap from="/passthrough/output" to="/velodyne_points" />
<rosparam>
filter_field_name: z
filter_limit_negative: True
</rosparam>
<rosparam>
filter_field_name: x
filter_limit_negative: True
</rosparam>
<rosparam>
filter_field_name: y
filter_limit_negative: True
</rosparam>
</node>
<!--- Run Rviz-->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find lego_loam)/launch/test.rviz" />
<!--- TF -->
<node pkg="tf" type="static_transform_publisher" name="camera_init_to_map" args="0 0 0 1.570795 0 1.570795 /map /camera_init 10" />
<node pkg="tf" type="static_transform_publisher" name="base_link_to_camera" args="0 0 0 -1.570795 -1.570795 0 /camera /base_link 10" />
<!--- LeGO-LOAM -->
<node pkg="lego_loam" type="imageProjection" name="imageProjection" output="screen"/>
<node pkg="lego_loam" type="featureAssociation" name="featureAssociation" output="screen"/>
<node pkg="lego_loam" type="mapOptmization" name="mapOptmization" output="screen"/>
<node pkg="lego_loam" type="transformFusion" name="transformFusion" output="screen"/>
</launch>
2.修改useCloudRing参数
在你launch后可能会出现这样的错误 Failed to find match for field ‘ring’ 因为Velodyne的雷达单独有一个ring通道,而robosense的雷达好像并没有,在代码中可以将这一功能关闭,在include文件夹的utility.h文件中,以下是文件目录,lego_loam是笔者的工作空间,打开以后
做如下修改, 将 true改为false
参考大佬文章:链接: 在用robosense的rslidar(16线)运行lego-loam遇到的问题总结.
终于到最后了,修改完以上步骤以后,最好是重新编译整个工作空间以免出错。
catkin_make
编译通过后启动run.launch,在播放你的数据包即可,记得一定要加 --clock
roslaunch lego_loam run.launch
//记得一定要加 --clock
rosbag play bagfile.bag --clock
运行launch:
以下是笔者自己的数据包的建图效果。
总算是完成预期目标,16线激光雷达效果还不错。
总结
关于ROS
关于3DSLAM算法
关于 LeGo-LOAM
不学无术的一天,新手难免遇到各种问题,难免出错,还是缺乏实战经验。还有关于数据包的问题,笔者征得同意以后有时间会上传到百度网盘供大家免费试用。以上内容经供参考,也欢迎大家交流指正。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42141088/article/details/115747989