激光slam:LeGO-LOAM---代码编译安装与gazebo测试

简介: LeGO-LOAM 的英文全称是 **lightweight and ground optimized lidar odometry and mapping**。轻量化具有地面优化的激光雷达里程计和建图![在这里插入图片描述](https://img-blog.csdnimg.cn/eea194f4d9a6426d9231e310ec18c37c.png)其框架如下,大体和LOAM是一致的![在这里插入图片描述](https://img-blog.csdnimg.cn/29f5f9ee21544be48aad35b99f6b4e27.png)LeGO-LOAM是基于LOAM的改进版本

LeGO-LOAM 简介

LeGO-LOAM 的英文全称是 lightweight and ground optimized lidar odometry and mapping。轻量化具有地面优化的激光雷达里程计和建图
在这里插入图片描述

其框架如下,大体和LOAM是一致的
在这里插入图片描述
LeGO-LOAM是基于LOAM的改进版本,其主要目的是为了实现小车在多变地形下的定位和建图,针对前端和后端都做了一系列的改进。

在原本的LOAM中比如应用场景是:AGV在草地中行驶,草地中的点会很有可能提取为角点,但是这种点是不稳定的,相比于楼房、树干等稳定的角点,希望要把地面上的角点去除掉。

LeGO-LOAM更轻量化,不影响精度的情况下减轻计算负荷,保障了嵌入式平台的实时性

相比LOAM改进部分

前端:

  • 1 对地面点进行分类和提取,避免一些边缘点的提取
  • 2 应用了一个简单的点云聚类算法,剔除了一些可能的outlier
  • 3 两步迭代求解前端里程计,不影响精度的情况下减轻计算负荷,保障了嵌入式平台的实时性

后端:

  • 1 使用slam中关键帧的概念对后端部分进行了重构
  • 2 引入回环检测和位姿图优化概念,使得地图的全局一致性更好

LeGO-LOAM 代码编译安装

github的地址是:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM

已被测试ROS版本有:

  • indigo
  • kinetic
  • melodic

它的依赖库有gtsam。所以需要先安装gtsam

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

cmake 可以改成如下指令

cmake -DGTSAM_BUILD_EITH_MARCH_NATIVE=OFF -DGTSAM_USE_SYSTEM_EIGEN=ON ..

目的是设置一些宏
DGTSAM_BUILD_EITH_MARCH_NATIVE 是开启css加速的宏,要关闭。避免其它库(比如PCL或者自己代码)没有开启的话,会造成运行时出现异常的情况
DGTSAM_USE_SYSTEM_EIGEN 这个是用系统装的eigen编译的宏,要开启。OFF的话会用gtsam自带的eigen,代码运行存在两个版本eigen会容易出问题

之后下载LeGO-LOAM的ROS功能包

git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git

然后放在ROS的工作空间

然后编译,注意第一次编译要用

catkin_make -j1

之后再编译就不用 -j1 了

这么做的原因就是LeGO-LOAM有一些自定义的msg。
-j1 则会通过单线程编译。把自定义的msg编译到。

如果直接用catkin_make 则会根据计算机有几个核,进行几线程的编译。

编译成功的话会生成 LeGO-LOAM的 可执行文件
在这里插入图片描述

LeGO-LOAM Gazebo测试

下面通过直接搭的gazebo测试场景 对 LeGO-LOAM进行一个初步测试

在运行之前需要根据 使用的激光雷达型号,在utility.h文件中对些变量进行设置
该文件的位置在 include文件夹下:
在这里插入图片描述

激光雷达的点云 Topic 名称

extern const string pointCloudTopic = "/velodyne_points";

激光雷达的参数包括

  • 线束
  • 水平点数
  • 水平角点分辨率
  • 垂直角度分辨率
  • 与水平方向的夹角
  • 扫描到地面的激光线数

在gazebo中搭建的仿真场景是用的 Velodyne-16的激光雷达,其配置如下:

// VLP-16
extern const int N_SCAN = 16;
extern const int Horizon_SCAN = 1800;
extern const float ang_res_x = 0.2;
extern const float ang_res_y = 2.0;
extern const float ang_bottom = 15.0+0.1;
extern const int groundScanInd = 7;

然后运行在launch文件夹下的run.launch文件
再启动仿真场景,进行初步的测试

其结果如下:
在这里插入图片描述
在这里插入图片描述
在rviz中绿色的是角点,粉色的是面点
特征提取没有异常情况
在这里插入图片描述
建图情况

相关文章
|
28天前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
29 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
30天前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
2月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
1月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
53 3
|
2月前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
69 6
基于Python访问Hive的pytest测试代码实现
|
2月前
|
Java C++
代码文件间重复性测试
本文介绍了如何使用代码相似性检测工具simian来找出代码文件中的重复行,并通过示例指令展示了如何将检测结果输出到指定的文本文件中。
|
2月前
|
敏捷开发 安全 测试技术
软件测试的艺术:从代码到用户体验的全方位解析
本文将深入探讨软件测试的重要性和实施策略,通过分析不同类型的测试方法和工具,展示如何有效地提升软件质量和用户满意度。我们将从单元测试、集成测试到性能测试等多个角度出发,详细解释每种测试方法的实施步骤和最佳实践。此外,文章还将讨论如何通过持续集成和自动化测试来优化测试流程,以及如何建立有效的测试团队来应对快速变化的市场需求。通过实际案例的分析,本文旨在为读者提供一套系统而实用的软件测试策略,帮助读者在软件开发过程中做出更明智的决策。
|
2月前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
69 6
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
18 0
|
2月前
|
机器学习/深度学习 敏捷开发 测试技术
软件测试的艺术:从代码到用户心灵的旅程
在阅读本文之前,让我们先共同思考一个问题:“为什么即使是最小的错误,也可能对用户体验和企业声誉造成巨大的影响?” 正如我们将要探讨的,软件测试不仅是技术活动的一种,更是确保产品质量、优化用户体验和维持品牌声誉的关键步骤。本文将引导您了解软件测试的基本概念,探索其背后的艺术性,以及如何高效地实施测试策略来达到最佳的质量保证结果。
27 0
下一篇
无影云桌面