lego-LOAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )---SLAM不学无术小问题
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: zfilter_limit_negative: True</rosparam><rosparam>filter_field_name: xfilter_limit_negative: True</rosparam><rosparam>filter_field_name: yfilter_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
lego-LOAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )---SLAM不学无术小问题相关推荐
- BLAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )-SLAM不学无术小问题
BLAM算法跑自己的数据包无法显示全局点云地图解决(适配速腾聚创RS-LiDAR-16 雷达 ) 提示:本文笔者使用环境Ubuntu18.04,ROS melodic版本 首先放一个效果链接(由b ...
- Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据 --SLAM不学无术小问题
Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据 新款驱动支持RS16.RS32.RSBP.RS128.RS80.RSM1-B3.RSHELIOS等 ...
- ROS:bag数据包内容提取——雷达点云数据和imu数据
通常在利用ros采集传感器数据时,我们会得到一个包含多个传感器数据的bag数据包,下面将会介绍从bag数据包提取雷达点云数据和imu数据的方法. 系统版本:Ubuntu20.04 ROS版本:Noet ...
- 谷歌cartographer使用速腾聚创3d激光雷达数据进行三维建图
原链接: https://community.bwbot.org/topic/523 谷歌cartographer_ros请参考这篇安装教程:http://community.bwbot.org/to ...
- ROS功能包在线把速腾聚创点云格式转为velodyne点云格式
国外算法很多slam算法是基于velodyne_lidar开发的,对国内雷达型号不友好,在这里记录一下使用rs_to_velodyne功能包实时在线将速腾聚创点云转化为velodyne点云的过程 环境 ...
- python 接入百度地图数据包下载_Python爬虫-利用百度地图API接口爬取数据并保存至MySQL数据库...
首先,我这里有一份相关城市以及该城市的公园数量的txt文件: 分析-02.png 其次,利用百度地图API提供的接口爬取城市公园的相关信息. 所利用的API接口有两个: 1.http://api.ma ...
- 速腾聚创16线激光雷达录的数据包运行LeGO-LOAM
1.run.launch文件修改如下: <launch><!--- Sim Time --><param name="/use_sim_time" v ...
- 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频采样数据 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )
文章目录 安卓直播推流专栏博客总结 一. FAAC 编码器编码 AAC 音频采样数据 二. 封装 RTMP 音频数据头 三. 封装 RTMP 音频数据类型 四. 拷贝 AAC 音频数据到 RTMPPa ...
- 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频解码信息 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )
文章目录 安卓直播推流专栏博客总结 一. FAAC 编码器编码 AAC 音频解码信息 二. 封装 RTMP 音频数据头 三. 封装 RTMP 音频数据类型 四. 拷贝 AAC 音频数据到 RTMPPa ...
最新文章
- 怎么可以查到AD里面长时间没有登录的帐号
- swift_009(Swift 类型别名/安全/推断)
- 阐述Spring security实现用户认证授权的原理----基于session实现认证的方式
- 并发集合和普通集合以及安全集合的区别
- ITK:将所有像素的总和缩放为常数
- MPMovieplayercontroller
- SDNU 1507.E.The Binding of Isaac
- [C++11]initializer_lisr模板类的使用
- jenkins 集成java搅拌_如何将Gauge与Jenkins集成
- java jsp session_JSP中Session的使用
- win8选择哪个python版本_Win8的几个版本该怎么选
- mysql创建的是拉丁_mysql 拉丁1 转换成 utf8
- 【重点】程序员面试金典——4.6寻找下一个结点
- hadoop hdfs文件给其他账号授权
- Android视频融合特效播放与渲染
- 60MongoDB学习笔记
- Rust中iter()和into_iter()的区别
- 继承nn.Module后的 init与forward函数【trian_val、vgg16、faster_rcnn、rpn】.py 学习 文件结构 大工程安排
- 2022 CCF中国开源大会—开放原子开源创新发展论坛即将开幕
- JAVA————简单的图形绘制界面(教程)