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


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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    cmake 可以改成如下指令

    cmake -DGTSAM_BUILD_EITH_MARCH_NATIVE=OFF -DGTSAM_USE_SYSTEM_EIGEN=ON ..
    
    • 1

    目的是设置一些宏
    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
    
    • 1

    然后放在ROS的工作空间

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

    catkin_make -j1
    
    • 1

    之后再编译就不用 -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";
    
    • 1

    激光雷达的参数包括

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

    在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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

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

  • 相关阅读:
    【JavaSE】类和对象 【this引用和构造方法】(二)
    Visual Studio中的四款代码格式化工具
    Java使用Socket简单实现FTP
    C/C++程序的内存开辟
    Bert基础(四)--解码器(上)
    总结sql用法及基础语法 第一章 三范式
    ARM 版银河麒麟桌面系统下 Qt 开发环境搭建指南
    快鲸智慧社区系统:高效解决传统物业服务问题
    配置网络接口的“IP“命令
    大数据培训课程GroupingComparator分组案例实操
  • 原文地址:https://blog.csdn.net/qq_32761549/article/details/125988200