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不学无术小问题相关推荐

  1. BLAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )-SLAM不学无术小问题

    BLAM算法跑自己的数据包无法显示全局点云地图解决(适配速腾聚创RS-LiDAR-16 雷达 ) 提示:本文笔者使用环境Ubuntu18.04,ROS melodic版本   首先放一个效果链接(由b ...

  2. Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据 --SLAM不学无术小问题

    Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据 新款驱动支持RS16.RS32.RSBP.RS128.RS80.RSM1-B3.RSHELIOS等 ...

  3. ROS:bag数据包内容提取——雷达点云数据和imu数据

    通常在利用ros采集传感器数据时,我们会得到一个包含多个传感器数据的bag数据包,下面将会介绍从bag数据包提取雷达点云数据和imu数据的方法. 系统版本:Ubuntu20.04 ROS版本:Noet ...

  4. 谷歌cartographer使用速腾聚创3d激光雷达数据进行三维建图

    原链接: https://community.bwbot.org/topic/523 谷歌cartographer_ros请参考这篇安装教程:http://community.bwbot.org/to ...

  5. ROS功能包在线把速腾聚创点云格式转为velodyne点云格式

    国外算法很多slam算法是基于velodyne_lidar开发的,对国内雷达型号不友好,在这里记录一下使用rs_to_velodyne功能包实时在线将速腾聚创点云转化为velodyne点云的过程 环境 ...

  6. python 接入百度地图数据包下载_Python爬虫-利用百度地图API接口爬取数据并保存至MySQL数据库...

    首先,我这里有一份相关城市以及该城市的公园数量的txt文件: 分析-02.png 其次,利用百度地图API提供的接口爬取城市公园的相关信息. 所利用的API接口有两个: 1.http://api.ma ...

  7. 速腾聚创16线激光雷达录的数据包运行LeGO-LOAM

    1.run.launch文件修改如下: <launch><!--- Sim Time --><param name="/use_sim_time" v ...

  8. 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频采样数据 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 编码器编码 AAC 音频采样数据 二. 封装 RTMP 音频数据头 三. 封装 RTMP 音频数据类型 四. 拷贝 AAC 音频数据到 RTMPPa ...

  9. 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频解码信息 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 编码器编码 AAC 音频解码信息 二. 封装 RTMP 音频数据头 三. 封装 RTMP 音频数据类型 四. 拷贝 AAC 音频数据到 RTMPPa ...

最新文章

  1. 怎么可以查到AD里面长时间没有登录的帐号
  2. swift_009(Swift 类型别名/安全/推断)
  3. 阐述Spring security实现用户认证授权的原理----基于session实现认证的方式
  4. 并发集合和普通集合以及安全集合的区别
  5. ITK:将所有像素的总和缩放为常数
  6. MPMovieplayercontroller
  7. SDNU 1507.E.The Binding of Isaac
  8. [C++11]initializer_lisr模板类的使用
  9. jenkins 集成java搅拌_如何将Gauge与Jenkins集成
  10. java jsp session_JSP中Session的使用
  11. win8选择哪个python版本_Win8的几个版本该怎么选
  12. mysql创建的是拉丁_mysql 拉丁1 转换成 utf8
  13. 【重点】程序员面试金典——4.6寻找下一个结点
  14. hadoop hdfs文件给其他账号授权
  15. Android视频融合特效播放与渲染
  16. 60MongoDB学习笔记
  17. Rust中iter()和into_iter()的区别
  18. 继承nn.Module后的 init与forward函数【trian_val、vgg16、faster_rcnn、rpn】.py 学习 文件结构 大工程安排
  19. 2022 CCF中国开源大会—开放原子开源创新发展论坛即将开幕
  20. JAVA————简单的图形绘制界面(教程)

热门文章

  1. JQuery获取元素的方法总结
  2. 常见的http响应码及含义
  3. java redis 批量删除_在Spring中使用Redis Lua脚本批量删除缓存
  4. linux的内核和发行版本,查看Linux内核及发行版本信息
  5. 什么是前后端分离?应用场景是什么?
  6. Flush + Reload
  7. oracle px msg pool,ora-04031 ora-12583 ora-12801 ora-12853 求助
  8. 【C语言】-三子棋游戏(+五子棋详细版)
  9. IIS的安装与配置详细图解教程
  10. 求助帖 关于psd文件的