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

2023-11-15

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线激光雷达VLP-16

激光线数: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 月份宣布完成实验室测试,开始路测。它的参数如下:
RS-LiDAR-16
官网描述

二、修改步骤

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是笔者的工作空间,打开以后
utility文件
做如下修改, 将 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 大师兄!SLAM 为什么需要李群与李代数?

    from https mp weixin qq com s sVjy9kr 8qc9W9VN78JoDQ 作者 electech6 来源 计算机视觉life 编辑 Tony 很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候 都有点
  • 《视觉SLAM十四讲》学习笔记-第四讲部分习题的证明思路

    1 验证SO 3 SE 3 和Sim 3 关于乘法成群 证明 先看SO 3 定义为 SO 3 R R3 3 RR I det R 1 S O 3 R
  • slam数学基础——最小二乘

    一 前言 1 最小二乘是一类特殊形式的最优化求解问题 相比于其他优化问题 求解方式比较简洁 2 最小二乘被广泛应用于各种实际问题的建模 在求解实际工程问题中有着广泛的应用 例如 slam 中随处可见最小二乘的声影 二 线性最小二乘法 1 预
  • No rule to make target

    No rule to make target 引言 解决方法 引言 报错 No rule to make target Thirdparty g2o lib libg2o so needed by lib libygz SLAM so 停止
  • LIO-SAM:在高斯牛顿法求解过程中用SO3代替欧拉角

    LIO SAM发表于IROS2020 是一个效果非常好的惯性 激光紧耦合里程计 我打算给我们的机器人搞一个激光里程计 于是打算把LIO SAM改一改搞过来 修改过程中发现一个问题 在里程计求解 mapOptimization的LMOptim
  • 激光SLAM直接线性方法里程计运动模型及标定

    原创作者 W Tortoise 原创作者文章 https blog csdn net learning tortosie article details 107763626 1 里程计运动模型 1 1 两轮差分底盘的运动模型 1 2 三轮全
  • LeGO-LOAM论文翻译(内容精简)

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码
  • [SLAM四元数基础系列一] 四元数定义 Hamilton vs JPL

    四元数定义 Hamilton vs JPL 简介 四种区分方式 Hamilton vs JPL 引用 不管是卡尔曼滤波或者BA优化形式的SLAM或者VIO系统中 都需要用到单位四元数 Quaternion 来表示旋转 主要是单位四元数表示旋
  • LeGO-LOAM 系列(1): LeGO-LOAM 安装以及概述

    一 github GitHub RobustFieldAutonomyLab LeGO LOAM 二 安装依赖 1 ROS Ubuntu 64 bit 16 04 ROS Kinetic 比较常规 就不赘述了 2 gtsam Georgia
  • IMU预积分的一些理解

    IMU预积分 算是比较简单的一个算法 无奈网上找到的资料都讲的晦涩难懂 看明白了也觉得不过如此 讲一下我的理解 整体流程 1 推导IMU离散运动方程 2 根据离散运动方程 进行预积分 并将预积分的误差项拆分出来 因为我们在定义误差的时候 有
  • PnP 问题

    欢迎访问我的博客首页 PnP 问题 1 DLT 2 P3P 3 G2O 求解 PnP 3 1 单目 3 2 双目 4 自定义顶点与边优化内参 4 1 二元边 4 2 三元边 4 3 总结 5 参考 PnP Perspective n Poi
  • 高斯牛顿法求非线性最小二乘的步骤和c++代码实现

    slam图优化的本质是一个非线性优化问题 Gauss Newton求解步骤 1 线性化误差函数 2 构建线性系统 3 求解线性系统 4 更新解 并不断迭代直至收敛 一个简单的代码实现 一维参数xy 高维变为对应的矩阵即可 include
  • Eigen::aligned_allocator

    如果STL容器中的元素是Eigen库数据结构 例如这里定义一个vector容器 元素是Matrix4d 如下所示 vector
  • lego-LOAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )---SLAM不学无术小问题

    LeGo LOAM跑自己的数据包无法显示全局地图问题 注意 本文笔者使用环境 Ubuntu18 04 ROS melodic 版本 背景 3D SLAM新手 在看到了各种狂拽炫酷的3D点云图的之后决定亲自上手一试 首先当然的是最为经典的LO
  • docker dbus-x11

    本来想用terminator启动nvidia docker 显示出图形界面的 结果发现启动的时候出问题了 terminator 1 dbind WARNING 07 31 53 725 Couldn t connect to accessi
  • 用Eigen库练习代数运算方式以便后续对刚体旋转和移动做基础

    include
  • 无人车

    1 无人车四大核心技术 自动驾驶实际包含三个问题 一是我在哪 二是我要去哪 三是如何去 第一个问题是环境感知和精确定位 无人车需要的是厘米级定位 厘米级定位是无人驾驶的难点之一 不光是车辆本身的语义级定位 还有一个绝对坐标定位 第二个问题是
  • 【Pytorch论文相关代码】使用SOLD2预训练好的模型检测与匹配线段(自己的数据集)

    文章目录 前言 使用流程 检测与匹配结果 前言 论文链接 SOLD2 Self supervised Occlusion aware Line Description and Detection 论文源码 https github com
  • Ubuntu18.04安装pcl(过程/坑记录式教程)

    Ubuntu18 04安装pcl 1 下载pcl 2 安装依赖项 3 编译 4 安装 5 网上教程说要安装QT5和VTK 但按照本文的 本文记录了安装时出现的问题 出错的安装命令也记录了 建议浏览一遍再参考 不要错用了错误的指令 1 下载p
  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘

随机推荐