当前位置: 首页 > news >正文

重头开始学ROS(8)---LVI-SLAM复现与实机部署Ubuntu20.04

LVI-SLAM复现与实机部署

源码编译

由于LVI-SLAM原仓库建设于Ubuntu18.04上,因此在Ubuntu20.04的ROS Noetic版本上编译可能会存在一些问题,以下为编译过程,包含一些问题与解决方案:

源码的选择

由于LVI-SLAM的官方源码存在着传感器参数混乱、自身部署复杂等问题,因此官方在其github仓库下也提供了三个其他版本的源码,这里我们选择Easyused版本

编译过程

mkdir -p ~/catkin_ws/src 
cd ~/catkin_ws/src
git clone https://github.com/Cc19245/LVI-SAM-Easyused
cd LVI-SAM-Easyused
git checkout new
cd ..
catkin_make

这里比作者的readme中多了第四行,这是因为不进入LVI-SAM文件无法进行切换new分支

问题1

Could not find a package configuration file provided by "GTSAM" with any of
the following names:GTSAMConfig.cmake
gtsam-config.cmake

这种情况一般是没有安装GTSAM,当然为了保险,我们先检查一下系统中是否含有GTSAM包,使用locate GTSAM,如果没有安装,则运行后没有任何输出。
如果爆出:locate not found,说明没有安装mlocate,运行sudo apt-get install mlocate进行安装即可。

GTSAM推荐在github上下载源码进行编译,这里注意ubuntu20.04使用GTSAM 4.0.3及以上的版本,否则会报“The “debug” argument must be followed by a library.”之类的错误。目前网上的解决方法都是说注释掉报错的部分,但这种操作本身风险就很大,在之后的cmake和install时又会出现其他错误。而我查阅了GTSAM中的issue,发现这个错误在2020年6月(18 Jun)的更新中已经得到了解决。

下载GTSAM4.0.3版本后,以下为编译安装过程:

#!bash
cd gtsam-4.X.X #替换成自己的目录
mkdir build
cd build
cmake ..
make check
sudo make install

安装GTSAM需要注意的点:
make check为检查过程,时间花费较长,若运行过后,出现报错:

Failure: "expected -4.1072555088854512e-14 but was: -2.0463630789890885e-12"
There were 1 failures
...
The following tests FAILED:
108 - testShonanAveraging (Failed)

无需在意,这一部的误差仅有1e-12数量级的误差,我们可以通过修改make的容忍值来避免该报错,但实际上这一步只是检查,因此无需在意,GTSAM的开发者也在github的issue中对该问题进行了回复。

问题2

: In instantiation of ‘void pcl::DefaultFeatureRepresentation<PointDefault>::NdCopyPointFunctor::operator()() [with Key = pcl::fields::alpha_m; PointDefault = pcl::PPFSignature]’:

这是因为ubuntu20.04自带的PCL 1.0需要c++ 14以上进行编译,因此我们需要在LVI-SAM-Easyused功能包中的cmakelist中添加这样一行代码:

set(CMAKE_CXX_STANDARD 14)

问题3

fatal error: opencv/cv.h: 没有那个文件或目录

这是因为ubuntu20.04自带的是opencv4,所以需要对文件进行一定改动
将所有文件中的#include<opencv/cv.h>改为#include<opencv2/imgproc.hpp>

问题4

error while loading shared libraries: libmetis-gtsam.so: cannot open shared object file: No such file or directory

这是因为libmetis-gtsam.so在local/lib中,我们只需将其复制一份到/opt/ros/noetic/lib/中即可
输入命令:

sudo cp /usr/local/lib/libmetis-gtsam.so /opt/ros/noetic/lib/

问题5

运行编译过程中还会出现各种各样由于opencv版本不同带来的问题,只需修改报错的对应部分即可。

bag包的录制

为了更加方便的进行程序的调试,在进行实机部署之前,我们可以先进行数据的录制,待程序调试完毕之后,再进行实际部署。
ROS为数据的录制提供了工具rosbag,录制数据包是通过订阅话题,并将订阅到的数据保存下来,rosbag本质也是节点。

对指定话题的录制:
rosbag record <话题1> <话题2> <话题N>

录制完毕后,会保存数据到本地。

对bag包的信息查看:
rosbag info <包名>

可以查看bag包中发布的话题以及其数据格式
LVI-SLAM需要的话题以及数据格式如下:
在这里插入图片描述

值得注意的是,LVI-SLAM的点云数据需要ring和time,imu数据为9轴imu数据,图像数据官方为压缩的数据,但它在readme也提到了取消压缩的方法。

运行bag包发布数据
rosbag play <包名>

在这里插入图片描述

To Do List

实机测试前需要完成的工作:

  1. 确认传感器数据格式与话题并录制bag包(包含激光雷达、9轴imu、单目相机)
    • 其中激光雷达数据要包含ringtime,数据为/points_raw,数据类型为sensor_msgs/PointCloud2
    • 相机数据话题为/camera/image_raw,数据类型为sensor_msgs/Image
    • imu话题为/imu_raw、数据类型为sensor_msgs/Imu
  2. 单目相机标定获取相机内参与畸变参数
    • 需要具有标定板或标定纸拍摄一组照片,使用matlabROSCamera Calibration工具
  3. 测量并获取imu到相机、相机到激光雷达、imu到激光雷达的旋转矩阵与平移矩阵
    • 平移矩阵可以测量
    • 旋转矩阵需要获取元件的官方资料,尤其是imu和激光雷达的三轴定义方向与安装方向
  4. 在电脑上进行调试,调试确认无问题后进行下一步的部署
http://www.lqws.cn/news/588331.html

相关文章:

  • Flutter视频压缩插件video_compressffmpeg_kit_flutter_new
  • C#索引和范围:简化集合访问的现代特性详解
  • 【Springai】 2指定模型的三种方式(Ollama)
  • 【算法】动态规划:1137. 第 N 个泰波那契数
  • (12)python+playwright自动化测试-iframe-中
  • torchvision中的数据使用
  • vue常见问题:
  • RNN中张量参数的含义与应用
  • stm32达到什么程度叫精通?
  • 如何用废弃电脑变成服务器搭建web网站(公网访问零成本)
  • 【知识图谱构建系列7】:结果评价(1)
  • JavaScript异步编程的五种方式
  • git 冲突解决
  • Android Fragment的生命周期(经典版)
  • 详解 Blazor 组件传值
  • Spring Boot + ONNX Runtime模型部署
  • 【机器学习】感知机学习算法(Perceptron)
  • 安卓面试之红黑树、工厂模式图解
  • 《汇编语言:基于X86处理器》第5章 复习题和练习,编程练习
  • 提升学习能力(一)
  • Python实例题:基于 Flask 的博客系统
  • 打卡day58
  • 【软考高项论文】论信息系统项目的范围管理
  • [Vue2组件]三角形角标
  • java初学习(-2025.6.30小总结)
  • 从入门到精通:npm、npx、nvm 包管理工具详解及常用命令
  • 【期末分布式】分布式的期末考试资料大题整理
  • 安装bcolz包报错Cython.Compiler.Errors.CompileError: bcolz/carray_ext.pyx的解决方法
  • 服务器被入侵的常见迹象有哪些?
  • AI--提升效率、驱动创新的核心引擎