基于LIO-SAM 算法的三维激光SLAM 建图

运行环境

  • Linux:Ubuntu18.04
  • ros:Melodic
  • Ceres Solver 2.0.0(Ubuntu18.04安装Ceres)
  • PCL 1.8.1(Ubuntu系统的PCL、Eigen卸载和安装)
  • gtsam-4.0.0-alpha2  或者 4.0.2

1 背景介绍
在自动驾驶的感知方案中,激光雷达是一个公认的精度高、探测距离远的传感器,适用于对周围环境的精确感知。激光雷达在工作时,采用激光扫描周围环境,返回点云数据。得到了周围环境的点云数据之后,需要对它进行处理。那么激光SLAM便是进行这个操作。激光SLAM是根据点云匹配来进行定位和建图。

现阶段,比较有名的三维激光SLAM算法有LOAM系和谷歌的cartographer。LOAM系包含了LOAM、LeGO-LOAM、LIO-SAM等一系列算法。先简要的介绍一下各个算法(主要是参考文章1)。

1.1 Cartographer
Cartographer是由谷歌于2016年开源的一个支持ROS的室内SLAM库,并在截至目前为止,仍然处于不断的更新维护之中。

特点:代码极为工程,多态、继承、层层封装的十分完善。提供了方便的接口,便于接入IMU、(单/多线)雷达、里程计、甚至为二维码辅助等视觉识别方式也预留了接口(Landmark)。

1.2 LOAM
LOAM为清华自动化本科毕业的Zhang Ji博士在CMU读博期间,于2014年在RSS期刊发表的关于三维激光传感器的SLAM算法。

特点:Cartographer主要解决室内问题,LOAM室内外都可以,但是没有回环检测,在具有旋转场景会有建图不准确的情况。LOAM的代码量相比Cartographer要小很多,文件结构相对简单。

1.3 LeGO-LOAM
LeGO-LOAM是TiXiao Shan发表在IROS2018的文章,文章叫:可变地形下的轻量级和地面优化的雷达里程计与建图。其是以LOAM为框架衍生出的新算法,主要在于两点提升:轻量级 和 地面

特点:LeGO-LOAM具有回环检测能力,缺点是依赖地面。

1.3 LIO-SAM
LIO-SAM是TixiaoShan在2020年IROS发表的Lego-LOAM续作。 它是Lego-LOAM的扩展版本,添加了IMU预积分因子和GPS因子。LOAM和LeGO-LOAM是纯依靠激光雷达点云SLAM,而LIO-SAM结合了Lidar、IMU和GPS。

1.4 LVI-SAM
LVI-SAM为Lego-LOAM和LIO-SAM作者Tixiao Shan的最新工作,发表在ICRA 2021上。其提出了一个基于图优化的多传感器融合框架,具有多个子系统: 视觉惯性子系统(VIS) 和 雷达惯性子系统 (LIS); 单目+雷达+imu融合

具有鲁棒性:任一子系统失效,不会导致整个系统挂掉。

LVI所采用的回环检测,与大多数视觉SLAM所采取的回环检测方法相同,为词袋模型。与LeGO-LOAM,LIO-LOAM等工作相比,这种方式可以在地图数据库中找到回环,而无需知道当前运动的历史轨迹。

一、安装依赖 

 1.安装ROS的依赖

sudo apt-get install -y ros-melodic-navigation
sudo apt-get install -y ros-melodic-robot-localization
sudo apt-get install -y ros-melodic-robot-state-publisher

2.安装因子图优化库gtsam(注意以下二选一即可,只是版本稍有不同)


wget -O ~/Downloads/gtsam.zip https://ghproxy.com/https://github.com/borglab/gtsam/archive/4.0.2.zip
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/
cd ~/Downloads/gtsam-4.0.2/
mkdir build && cd build
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j8

 作者给出的代码中,直接wget github地址来下载gtsam会很慢,这里我在gtsam的github地址前面加了代理网址https://ghproxy.com/,能够显著加速下载      当然,也可以不用 ghproxy.com 像下文一样。

 或者

wget wget -O ~/software/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
cd ~/software && unzip gtsam.zip -d ~/software/
cd ~/software/gtsam-4.0.0-alpha2/
mkdir build && cd build
cmake ..
sudo make install

 二、安装LIO-SAM和下载数据集

1.创建一个catkin_ws_liosam工作空间

makdir -p ~/catkin_ws_liosam/src

 2.下载源码并编译

cd ~/catkin_ws_liosam/src
git clone https://github.com/TixiaoShan/LIO-SAM.git
cd ..
catkin_make

 3.下载数据集

LIO-SAM的作者提供了几个数据集进行测试,这里下载其中的walk数据集。作者提供地址是https://drive.google.com/drive/folders/1gJHwfdHCRdjP7vuT556pv8atqrCJPbUq,其下载速度感人,我这里只有十几kb/s,而这个数据集有3.7G。可以到我这里分享的百度网盘链接下载:百度网盘 请输入提取码
提取码:gz7i
下载好数据集后,保存到自己指定的地址。这里,我保存到~/catkin_ws_liosam/src/data。

 三、运行LIO-SLAM

进入 catkin_ws_liosam 工作空间

roslaunch lio-sam run.launch

 问题一、运行报错:

RLException: [run.launch] is neither a launch file in package [LIO-SAM] nor is [LIO-SAM] a launch file name
The traceback for the exception was written to the log file

 按照网上现有对这个问题的解决方法:方法1,在工作空间下source。方法2:对其进行路径添加。

       这个问题的来源还有一种来源,你得确定你在终端运行的这个launch文件名是否写对,打开自己的launch文件检查,如<arg name="project" default="lio_sam"/>中的lio_sam(不要在终端中写成lio-sam),在按照网上跑历程时,网上的代码可能会有细节上的出错,细心点

 问题二:如果出现以下错误

这里我碰到一个问题,输入上述命令后出现报错。错误显示找不到文件libmetis.so。网上搜索后大致了解到,这个libmetis.so应该是LIO-SAM需要动态链接的一个文件。在ubuntu系统文件夹下搜索到libmetis.so存放在usr/local/lib文件夹下。猜想可能系统默认的动态链接地址为usr/lib文件夹,导致运行LIO-SAM时在usr/lib文件夹中找不到libmetis.so。

解决方法:采用如下命令将libmetis.so复制到usr/lib文件夹中:

sudo cp usr/local/lib/libmetis.so usr/lib/libmetis.so

 再次启动run.launch,程序不再报错

1.正确命令如下:

roslaunch lio_sam run.launch

 运行完上述命令后,rviz弹出

2.播放数据包

新开一个终端,直接输入如下命令

rosbag play ~/catkin_ws_liosam/src/data/casual_walk.bag

lio-sam三维SLAM建图

3.保存pcd建图结果

(1)需要修改params.yaml中的参数。params.yaml在~/catkin_ws/src/LIO-SAM/config文件夹下。修改该文件中SavePCD:true 和保存地址

 (2)为了避免保存还没完成,ros就已经关闭了节点,需要设置_TIMEOUT_SIGINT的值。按如下命令打开文件:

sudo gedit /opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/nodeprocess.py

在文件中找到_TIMEOUT_SIGINT,并设置为100秒。

这样,在命令窗口中按下Ctrl+C来结束run.launch的运行时,便会自动将pcd文件保存到指定地址。

(3)新开一个终端,进入到 ~/Downloads/LOAM$

pcl_viewer GlobalMap.pcd 

pcl_viewer CornerMap.pcd 

pcl_viewer SurfMap.pcd 

 pcl_viewer trajectory.pcd 

pcl_viewer transformations.pcd 

参考文献:

3维SLAM入门 LIO-SAM的安装与运行 ubuntu18.04+ros melodic_lio_sam编译提示找不到gtsam-CSDN博客

SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别_cartographer需要imu吗-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c语言之汉诺塔的实现

思路 汉诺塔问题就是有三个盘子&#xff0c;让我们把其中一个盘子上的东西全移到另一个盘子上&#xff0c;注意的是中途必须满足大东西必须在小东西下面。 这里&#xff0c;我们有A B C三个盘子&#xff0c;假如A上有一个珠子&#xff0c;那我们直接把这一个移到C上就可以&am…

Python和Tensorboard的下载和安装

Python和Tensorboard的下载和安装 Python的下载和安装Python下载Python安装测试Python Tensorboard的下载和安装Tensorboard 简介Tensorboard下载Tensorboard使用urllib3报错 Python的下载和安装 Python下载 Python官方下载链接&#xff1a;https://www.python.org/downloads…

2024年3月11日 算法刷题记录

2024年3月11日 习题 2.4 Repeater&#xff08;北京大学复试上机题&#xff09; 链接 题目大意 给你一个仅包含一种字符和空格的模板&#xff0c;模板显示如何创建无尽的图片&#xff0c;将字符用作基本元素并将它们放在正确的位置以形成更大的模板&#xff0c;然后不断进行…

Windows C++ 使用WinAPI实现RPC

demo下载地址&#xff1a;https://download.csdn.net/download/2403_83063732/88958730 1、创建IDL文件以及acf文件&#xff08;创建helloworld.idl helloworld.acf&#xff09; 其中IDL文件&#xff1a; import "oaidl.idl"; import "ocidl.idl"; [ …

AI日报:一个新的“科技超级周期”正在出现

文章目录 技术周期预测可连接设备 技术周期 未来学家艾米韦伯表示&#xff0c;人工智能和其他两种通用技术将迎来一个新的“技术超级周期”&#xff0c;预计将在经济中创造“实质性和持续性”的变化。 她在SXSW 2024上表示&#xff0c;过去的科技超级周期是由通用技术引发的&…

鸿蒙开发之快速入门

一:下载开发工具 鸿蒙的开发工具叫DevEco 下载点击 其他部分都一直next 就行,这个页面出现的install 建议都点击install 然后单独选择安装目录 可能存在的问题 就是之前安装nodejs&#xff08;比如自己开发web或者RN等情况&#xff09;版本低 等情况 所以建议你单独安装一次 …

【数学】【C++算法】780. 到达终点

作者推荐 视频算法专题 本文涉及知识点 数学 LeetCode780. 到达终点 给定四个整数 sx , sy &#xff0c;tx 和 ty&#xff0c;如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty)&#xff0c;则返回 true&#xff0c;否则返回 false。 从点 (x, y) 可以转换到 (x…

Go语言中的锁与管道的运用

目录 1.前言 2.锁解决方案 3.管道解决方案 4.总结 1.前言 在写H5小游戏的时候&#xff0c;由于需要对多个WebSocket连接进行增、删、查的管理和对已经建立连接的WebSocket通过服务端进行游戏数据交换的需求。于是定义了一个全局的map集合进行连接的管理&#xff0c;让所有…

Netty架构详解

文章目录 概述整体结构Netty的核心组件逻辑架构BootStrap & ServerBootStrapChannelPipelineFuture、回调和 ChannelHandler选择器、事件和 EventLoopChannelHandler的各种ChannelInitializer类图 Protocol Support 协议支持层Transport Service 传输服务层Core 核心层模块…

操作系统内功篇:硬件结构之CPU是如何运行的?

本文分5个小结&#xff0c;分别是图灵机工作方式&#xff0c;冯诺依曼结构&#xff0c;总线线路位宽和CPU位宽&#xff0c;程序执行的基本过程&#xff0c; a12的具体执行过程。 一 图灵机的工作方式 图灵机由纸带&#xff0c;读写头组成。读写头上有一些部件例:存储单元&#…

嵌入式驱动学习第三周——linux内核链表

前言 在 Linux 内核中使用最多的数据结构就是链表了&#xff0c;其中就包含了许多高级思想。 比如面向对象、类似C模板的实现、堆和栈的实现。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博…

智能指针的讲解

1.为什么要智能指针 首先我们分析一段代码&#xff1a; 1、如果p1这里new 抛异常会如何&#xff1f; 2、如果p2这里new 抛异常会如何&#xff1f; 3、如果div调用这里又会抛异常会如何&#xff1f; int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_ar…

CVE-2024-2074 SpringBoot迷你天猫商城Mini-Tmall sql注入漏洞分析

漏洞简介 Mini-Tmall是一个基于Spring Boot的迷你天猫商城。Mini-Tmall在20231017版本及之前存在一个严重的漏洞&#xff0c;攻击者可以利用该漏洞通过远程执行特定操作来注入恶意SQL语句&#xff0c;从而获取敏感信息或控制数据库。此漏洞影响文件?rtmall/admin/user/1/1的一…

下载API文档

在线看&#xff1a;Overview (Java SE 17 & JDK 17) 离线下载&#xff1a;Java Development Kit 17 Documentation

Python 单元测试

本篇为Python的单元测试的方法及示例 目录 概念 结果 示例 对函数进行测试 创建函数文件 创建测试文件 测试结果 对类进行测试 创建待测试类 创建测试文件 文档测试 创建函数 进行测试 总结 概念 用来对一个函数、一个类或者一个模块来进行正确性校验工作 结果 …

为什么选择线上展览馆,搭建线上展览馆要注意什么

引言&#xff1a; 线上展览馆是一种利用互联网技术&#xff0c;将实体展览馆的展示内容以数字化形式呈现出来的在线观展方式。它打破了时间和空间的限制&#xff0c;使得更多的人可以随时随地参观展览&#xff0c;领略文化的魅力。 一、线上展览馆的优势 1.成本效益高&#x…

【安卓】Android开发入门 你的第一个apk应用

本文介绍如何写一个入门的安卓apk应用, 以嵌套一个网页为例。 开发ide&#xff1a;Android studio 语言&#xff1a;Kotlin tips: 最好别下载新版本的 Android studio &#xff0c;因为新版的界面有所改动 遇到问题去网上搜 新手刚入门可能界面都找不到在哪里&#xff1b;其次…

05-延迟任务精准发布文章-黑马头条

延迟任务精准发布文章 1)文章定时发布 2)延迟任务概述 2.1)什么是延迟任务 定时任务&#xff1a;有固定周期的&#xff0c;有明确的触发时间延迟队列&#xff1a;没有固定的开始时间&#xff0c;它常常是由一个事件触发的&#xff0c;而在这个事件触发之后的一段时间内触发…

银河麒麟V10SP3操作系统-网络时间配置

1、动态网络配置 打开终端&#xff0c;以网口 eth0 为例&#xff1a; nmcli conn add connection.id eth0-dhcp type ether ifname eth0 ipv4.method auto其中“eth0-dhcp”为连接的名字&#xff0c;可以根据自己的需要命名方便记忆和操作 的名字&#xff1b;“ifname eth0”…

Realsense 相机SDK学习(一)——librealsense使用方法及bug解决(不使用Ros)

一.介绍 realsense相机是一个intel开发出来的一款深度相机&#xff0c;我之前使用他来跑过slam&#xff0c;也配置过他的驱动&#xff0c;在此附上realsense的相机驱动安装方法&#xff1a;Ubuntu20.04安装Intelrealsense相机驱动&#xff08;涉及Linux内核降级&#xff09; …