编译LeGo-LOAM,并且采用速腾聚创激光雷达与之相连

news2024/11/16 11:40:58

目录

  • 一、LeGo-LOAM部署
  • 二、速腾聚创激光雷达调试
  • 三、将速腾聚创激光雷达连到LeGo-LOAM
  • 四、解决LeGo-LOAM不保存pcd地图的问题


一、LeGo-LOAM部署

参考链接:实车部署采用速腾聚创RS16激光雷达的LeGo-LOAM
LeGO-LOAM初探:原理,安装和测试
1.gtsam安装(install的过程比较慢,需要耐心等待)

git clone https://bitbucket.org/gtborg/gtsam.git
cd ~/gtsam
mkdir build
cd build
cmake ..
sudo make install

2.下载并编译LeGO-LOAM

mkdir -p slam_ws/src
cd slam_ws/src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd ..
catkin_make

3.数据集试运行
数据集的百度云地址:https://pan.baidu.com/s/1SkrqfN82il1m6jhkLZT-WA 密码: oqo8
打开LeGO-LOAM/LeGO-LOAM/launch/run.launch文件,确保/use_sim_timevaluetrue(在线建图为false,离线建图为true
运行lego-loam(黑屏别慌)

source devel/setup.bash
roslaunch lego_loam run.launch

遇到下面的报错
在这里插入图片描述
解决办法
参考链接:运行lego_loam报错[mapOptmization-7] process has died pid 11653, exit code 127, cmd /home/p/legoloam/dev
在roslaunch之前动态链接库

source devel/setup.bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
roslaunch lego_loam run.launch

运行刚刚下载的数据集

source devel/setup.bash
rosbag play xxx.bag --clock --topic /velodyne_points /imu/data

在这里插入图片描述


二、速腾聚创激光雷达调试

参考链接:速腾聚创 RoboSense RS-Helios 32线激光雷达使用 LeGO-LOAM 算法建图
因为RS-lidar默认IP是192.168.1.200,RS-lidar默认可接受数据的IP是192.168.1.102,所以我们将本地ip地址改为192.168.1.102,子网掩码设置为255.255.255.0
将雷达插上电源,网线与电脑连接后,手动修改ip
在这里插入图片描述
然后重启网络连接(网络开关按钮关一下,然后再打开)
在这里插入图片描述
下面打开wireshark,发现数据已经通了

sudo wireshark

在这里插入图片描述
下面配置ROS开发环境,ros驱动下载链接:https://github.com/RoboSense-LiDAR/rslidar_sdk/releases
在这里插入图片描述
手动下载rslidar_sdk.tar.gz文件
新建一个工作空间,将下载好的ros驱动解压到该路径下

mkdir -p RoboSense-LiDAR_ws/src

安装参考github上面的教程
1.安装环境依赖
安装Yaml(version: >= v0.5.2)

sudo apt-get update
sudo apt-get install -y libyaml-cpp-dev

安装libpcap(version: >= v1.7.4)

sudo apt-get install -y  libpcap-dev

2.编译和运行
下面以ros形式编译
(1)在文件CMakeLists.txt的顶部,将变量COMPILE_METHOD设置为CATKIN。
在这里插入图片描述
(2)将rslidar_sdk工程目录下的package_ros1.xml文件重命名为package.xml
(3)创建一个新的工作区文件夹,并在其中创建一个src文件夹。然后将rslidar_sdk项目放入src文件夹中。(前面已经做过了
(4)回到工作区的根目录,运行以下命令进行编译和运行。(如果使用zsh,请将第二个命令替换为source-devel/setup.zsh)。

#编译
cd ~/RoboSense-LiDAR_ws
catkin_make
#运行
source devel/setup.bash
roslaunch rslidar_sdk start.launch

运行后会自动打开一个rviz,rviz中没有雷达点云
在这里插入图片描述
后来查看RoboSense-LiDAR_ws/src/rslidar_sdk/doc/howto/how_to_offline_decode_pcap_cn.md里面找到要设置雷达型号
在这里插入图片描述
查看雷达的发货清单,发现雷达的型号是RS-Helios,打开RoboSense-LiDAR_ws/src/rslidar_sdk/config/config.yaml文件,将lidar_type改成RSHELIOS
在这里插入图片描述
重新编译一下工作空间,运行节点,发现有激光点云信息了
在这里插入图片描述


三、将速腾聚创激光雷达连到LeGo-LOAM

参考链接:速腾聚创 RoboSense RS-Helios 32线激光雷达使用 LeGO-LOAM 算法建图
1.下载一个转换包,放在RoboSense-LiDAR_ws/src(与激光雷达的ros驱动路径一致)路径下

cd ~/RoboSense-LiDAR_ws/src
git clone https://github.com/HViktorTsoi/rs_to_velodyne.git

添加launch文件
新建/rs_to_velodyne/launch文件夹,新建rs_to_velodyne.launch文件,内容如下。(LeGO-LOAM需要的点云格式为XYZIR,args="XYZIRT XYZIR"为转换格式的参数。)

<launch>
  <node pkg="rs_to_velodyne" name="rs_to_velodyne" type="rs_to_velodyne"  args="XYZIRT XYZIR"   output="screen">
  </node>
</launch>

打开RoboSense-LiDAR_ws/src/rslidar_sdk/CMakeLists.txt,确保POINT_TYPEXYZIRT
在这里插入图片描述

编译、安装、运行

cd ~/RoboSense-LiDAR_ws
catkin_make
source devel/setup.bash
#运行rs_to_velodyne
roslaunch rs_to_velodyne rs_to_velodyne.launch
#运行ros驱动
roslaunch rslidar_sdk start.launch

订阅topic:/rslidar_points,发布topic:/velodyne_points
接着打开LeGO-LOAM/LeGO-LOAM/launch/run.launch文件
在这里插入图片描述
/use_sim_timevalue改成false(在线建图为false,离线建图为true
然后运行lego_loam

source devel/setup.bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
roslaunch lego_loam run.launch

rviz中成功出现点云

在这里插入图片描述

四、解决LeGo-LOAM不保存pcd地图的问题

首先LeGO-LOAM/路径下新建PCD_Files文件夹,用来保存pcd点云地图
接着在LeGO-LOAM/LeGO-LOAM/include/utility.h文件中第57行将文件保存路径改成/home/smart_car/slam_ws/src/LeGO-LOAM/PCD_Files/
在这里插入图片描述
同样的,在LeGO-LOAM/LeGO-LOAM/src/mapOptmization.cpp中,将visualizeGlobalMapThread()函数里面有三个文件路径改成自己的
在这里插入图片描述
运行LeGO-LOAM程序,然后播放ros包,发现目标路径下并没有点云文件保存下来
解决办法(参考链接:LeGO-LOAM初探:原理,安装和测试):
经过调试,发现程序进入到publishGlobalMap()函数后没有出来,检查publishGlobalMap()函数,发现下面代码:

if (pubLaserCloudSurround.getNumSubscribers() == 0)
    return;

表明我们需要订阅pubLaserCloudSurround,否则会退出函数,不执行后面的代码,导致globalMapKeyFramesDS为空。
因此,在运行LeGO-LOAM程序后,手动在rviz中勾选Map Cloud(这个问题是代码更新导致的,具体为https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/blob/master/LeGO-LOAM/launch/test.rviz中Map Cloud由默认的勾选变成不勾选。)
在这里插入图片描述
然后播放ros包,播放完毕后然后按ctrl+c退出LeGO-LOAM程序,最终可以在自定义目录下生成四个pcd文件。
在这里插入图片描述
使用这个命令安装一下点云工具

sudo apt install pcl-tools

使用下面的命令查看点云图

pcl_viewer finalCloud.pcd

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言基础--整型int,长整型long,浮点型double float

本文讲解常见的C语言变量,并举出一些实例 从微软的C语言文档把所有的C语言可定义(就是能用的)截图展示: 还有好几页,不放了,看着都头疼 但是,往往用的最多的,也就是下面的(本篇只讲整数和浮点数) int 整数 整数的定义不用说了吧QAQ int a = 10; //定义一个…

深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira

本周XR大新闻&#xff0c;上周Quest 3发布之后&#xff0c;本周苹果MR头显Vision Pro正式发布&#xff0c;也是本周AR/VR新闻的重头戏。 ​AR方面&#xff0c;苹果发布VST头显Vision Pro&#xff08;虽然本质是台VR&#xff0c;但以AR场景为核心&#xff09;以及visionOS&…

Qt动态调用(外部调用)SDK库(dll动态库)

Qt动态调用SDK库&#xff08;dll动态库&#xff09; ​​​​​​​ 之前的文章&#xff0c;介绍了Qt调用sdk库的方式&#xff0c;大家可以点击查看&#xff08;Q调用SDK库(dll动态库)&#xff09;之前的文章&#xff0c;里面介绍的调用方式就是静态的调用方式。如下图所示&am…

NLP:BIG-bench基准任务的简介、安装、使用方法之详细攻略

NLP&#xff1a;BIG-bench基准任务的简介、安装、使用方法之详细攻略 目录 BIG-bench基准任务的简介 1、BIG-bench基准任务的概述 2、BBL BIG-bench基准任务的安装 BIG-bench基准任务的使用方法 1、使用SeqIO加载BIG-bench json任务的快速启动 BIG-bench基准任务的简介 …

Jmeter常用参数化技巧总结!

说起接口测试&#xff0c;相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

libVLC 调节图像(亮度、对比度、色调、饱和度、伽玛)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 对于一个视频来说,色彩和画面效果的呈现非常重要。假如你的画面偏暗或偏亮,缺乏层次感,色彩不够丰富或不自然,则需要根据场景和氛围进行调整。 所涉及的重要参数有: 亮度: 是视频画面的明暗程度。调整…

静态通讯录

文章目录 前言&#x1f31f;一、明确通讯录信息/步骤&#x1f30f;1.1.通讯录信息&#x1f30f;1.2.通讯录多文件写法的好处&#x1f30f;1.3.通讯录多文件写法 &#x1f31f;二、通讯录的实现&#x1f30f;2.1.通讯录的菜单部分&#x1f30f;2.2.通讯录的框架部分&#x1f30f…

centos卸载mysql5.7安装mysql8.0

一、参考 CentOS7安装MySQL8的超级详细教程(无坑!)_Mysql_脚本之家 云服务器Centos7.9卸载 MySQL5.7.x 或 MySQL8.x 教程_centos 卸载mysql_大白有点菜的博客-CSDN博客 二、centos卸载mysql5.7 1、查看MySQL的依赖安装组件 rpm -qa|grep -i mysql 2、 依次移除&#xff08…

Canvas实现缩放+涂鸦改进

几个月以前&#xff0c;有人问了我一个canvass怎么实现缩放和涂鸦的问题&#xff0c;我基于当时的想法写了一篇博客&#xff0c;但是后来发现当时做的不完善&#xff0c;所以实现上其实还是有一些其他问题的。但是因为前段时间太忙了&#xff0c;也就一直没有机会去改进它。现在…

超详细:实现 Swift 与 汇编(Asm)代码混编并在真机或模拟器上运行

功能需求 虽然现在  开发的绝对主角是 Swift 语言&#xff0c;不过我们也希望有时 Swift 能够调用小段汇编代码以完成特殊功能。 在本篇博文中&#xff0c;您将学到如下内容&#xff1a; Swift 与 汇编语言混编的基本原理&#xff1b;如何在模拟器中使用 Swift x64 汇编指…

小黑带领阿黄中老黑一起跑步完成了小怪兽,晚上一起吃烤肠西瓜,买了帐篷准备一起露营的leetcode之旅:438. 找到字符串中所有字母异位词

小黑代码 class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:# 串p长度n_p len(p)# 串s长度n_s len(s)# 计数字典flags collections.Counter(p)# 统计字典map_ dict((k, 0) for k in p)# 匹配到的字符个数count 0# 头尾指针left right 0# 目标数…

Python给一个exe执行文件注册持续性的快捷键(热键)的代码实例

本篇文章主要讲解通过python给一个exe文件绑定一个快捷键、并取消快捷键(热键)的实操方法。 日期:2023年6月11日 作者:任聪聪 实现按下快捷键即可启动软件的效果说明 启动软件注册热键呼出其他软件或本体的效果说明: 演示材料说明:在download文件目录下存放一个可执行的…

数据结构与算法之美 | 栈

栈结构&#xff1a;后进者先出&#xff0c;先进者后出 栈是一种“操作受限”的线性表 当某个数据集合只涉及在一端插入和删除数据&#xff0c;并且满足后进先出、先进后出的特性&#xff0c;这时我们就应该首选“栈”这种数据结构 栈的实现 使用数组实现&#xff1a;顺序栈…

【数据结构】二叉树(一)

目录 一、树的概念及结构 1、树的概念 2、树的相关概念 3、树的表示 二、二叉树概念及结构 1、二叉树的概念 2、特殊二叉树 3、二叉树的性质 4、二叉树的存储结构 4.1 顺序存储结构 4.2 链式存储结构 三、二叉树顺序结构及实现 1、二叉树的顺序结构 2、堆的概念及结构 3、堆…

OMG--RTPS(Real Time Publish Subscribe Protocol)

OMG--RTPS&#xff08;Real Time Publish Subscribe Protocol&#xff09; 1 概述2 内容缩写DDS 有线协议的要求RTPS 有线协议The RTPS Platform Independent Model (PIM)The Structure ModuleThe Messages ModuleThe Behavior ModuleThe Discovery Module The RTPS Platform S…

Xuperchain多节点网络搭建+加节点+测试

环境准备 创建网络部署环境 # 在xuperchain目录执行 make testnet 种子节点 # 查看node1节点连接地址netURL cd node1 ./bin/xchain-cli netURL preview # 得到如下结果,实际使用时,需要将ip配置节点的真实ip,port配置成 /ip4/{{ip}}/tcp/{{port}}/p2p/Qmf2HeHe4sspGkfR…

深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

上课补充的知识

题目 char类型的默认值是\u0000 数组的创建方式 数组的遍历 遍历:从头到尾,依次访问数组每一个位置,获取每一个位置的元素.形式如下: 我们通过数组的下标操作数组,所以for循环变量操作的也是数组下标 开始:开始下标0 结束:结束下标length-1 如何变化: 语法&#xff1a; for…

大学结束啦!!!

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…