【毕业设计-1】LIO-SAM算法部署到ubuntu系统的步骤及问题记录

参考的其他博主的文章:

LIO-SAM运行自己数据包遇到的问题解决--SLAM不学无数术小问题_速度过快,liosam建图会飘-CSDN博客https://blog.csdn.net/weixin_42141088/article/details/118000544?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522f082c6d247f68b93d00fd2f5798ba711%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=f082c6d247f68b93d00fd2f5798ba711&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-118000544-null-null.142^v101^pc_search_result_base6&utm_term=LIO-SAM%E8%BF%90%E8%A1%8C%E8%87%AA%E5%B7%B1%E6%95%B0%E6%8D%AE%E5%8C%85%E9%81%87%E5%88%B0%E7%9A%84%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3--SLAM%E4%B8%8D%E5%AD%A6%E6%97%A0%E6%95%B0%E6%9C%AF%E5%B0%8F%E9%97%AE%E9%A2%98%2024000&spm=1018.2226.3001.4187

亲自部署LIO-SAM、LVI-SAM的全过程经历01——跑通_lvi-sam运行m2dgr数据集-CSDN博客https://blog.csdn.net/m0_56323217/article/details/130060531?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522dbcdc9a8b6ed72a322cd54cdf79373d4%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=dbcdc9a8b6ed72a322cd54cdf79373d4&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-4-130060531-null-null.142^v101^pc_search_result_base6&utm_term=LIO-SAM%E9%83%A8%E7%BD%B2&spm=1018.2226.3001.4187

记录自己部署LIO-SAM时的问题及解决_liosam部署-CSDN博客https://blog.csdn.net/A_flyup/article/details/136525009

我的环境:vmware安装ubuntu18.04、ROS melodic(鱼香肉丝安装)

gtsam源码及库文件下载:

https://github.com/borglab/gtsam/archive/4.0.2.zip

不知道为什么我在ubuntu中打不开这个文档,但是在windows下可以下载,于是我用共享文件夹传输到了ubuntu系统中,共享文件夹参考:VMware虚拟机-Ubuntu设置共享文件夹(超详细)_vmware ubuntu共享文件夹-CSDN博客

lio-sam源码下载:

TixiaoShan/LIO-SAM: LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

lio-sam算法部署测试详细步骤

1、安装编译gtsam库

mkdir ~/Downloads
cd ~/Downloads/gtsam-4.0.2/
mkdir build && cd build
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j4

在这段命令中,cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF .. 这一行的作用是在编译 GTSAM(Georgia Tech Smoothing and Mapping library)库时,通过 CMake 配置一个特定的编译选项。

让我们分解这个命令:

  • cmake:是跨平台的自动化构建系统,用于管理编译过程。

  • -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF:这是一个编译选项,用于设置 CMake 变量 GTSAM_BUILD_WITH_MARCH_NATIVE 的值。-D 选项指定了一个变量的定义,格式为 -D<variable>=<value>

    • GTSAM_BUILD_WITH_MARCH_NATIVE:这是一个 CMake 变量,用于控制编译器优化选项。

    • OFF:表示关闭该选项,即不使用编译器的 -march=native 优化选项。

  • ..:这是相对路径,指向上一级目录,即 GTSAM 源代码的根目录。

2、下载lio-sam源码

3、编译lio-sam

安装编译LIO-SAM成功:

4、运行lio-sam:

创建工作工作空间、src文件夹,放好源码

mkdir -p ~/catkin_lio_ws/src
cd ~/catkin_lio_ws/src
把下载的源码解压后放在src文件夹中
cd ..
catkin_make

运行:

source devel/setup.bash
roslaunch lio_sam run.launch

5、下载数据集播放并测试:(使用rosbag play指令)

LIO-SAM Public Dataset - Google 云端硬盘

出现条纹状激光雷达数据:

可以看到上面的界面没有建图,而且坐标系乱飞,一般这种情况就需要配置/src/config/param.yaml文件中的imu2lidar外参

6、配置/src/config/param.yaml文件中的imu2lidar外参

        我最后用的是源代码作者公开的自己用的测试数据集:KIITI数据集

并且给出了外参矩阵:

最终配置好外参之后,可以看到建图效果还是不错的:

看到比较清晰的建图就说明算法部署成功了。

问题记录:

1、编译安装gtsam库显示失败:

报错显示:

c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.
examples/CMakeFiles/ISAM2_SmartFactorStereo_IMU.dir/build.make:62: recipe for target 'examples/CMakeFiles/ISAM2_SmartFactorStereo_IMU.dir/ISAM2_SmartFactorStereo_IMU.cpp.o' failed
make[2]: *** [examples/CMakeFiles/ISAM2_SmartFactorStereo_IMU.dir/ISAM2_SmartFactorStereo_IMU.cpp.o] Error 4
CMakeFiles/Makefile2:21896: recipe for target 'examples/CMakeFiles/ISAM2_SmartFactorStereo_IMU.dir/all' failed
make[1]: *** [examples/CMakeFiles/ISAM2_SmartFactorStereo_IMU.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 82%] Linking CXX executable RangeISAMExample_plaza2
[ 82%] Built target RangeISAMExample_plaza2
[ 82%] Linking CXX executable Pose2SLAMExample_lago
[ 82%] Built target Pose2SLAMExample_lago
[ 82%] Linking CXX executable SFMExampleExpressions
[ 82%] Built target SFMExampleExpressions
[ 82%] Linking CXX executable ISAM2Example_SmartFactor
[ 82%] Built target ISAM2Example_SmartFactor
[ 82%] Linking CXX executable SFMExampleExpressions_bal
[ 82%] Built target SFMExampleExpressions_bal
[ 82%] Linking CXX executable SFMExample_SmartFactor
[ 82%] Built target SFMExample_SmartFactor
[ 82%] Linking CXX executable SFMExample_SmartFactorPCG
[ 82%] Built target SFMExample_SmartFactorPCG
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2

错误原因:编译过程中出现了 “internal compiler error: Killed (program cc1plus)”,这通常是由于系统资源不足(尤其是内存不足)导致编译器进程被系统杀死。

解决方法:减少编译安装的时候的线程数,将参数-j8修改为-j4或者使用默认参数(单线程编译)

cd ~/Downloads/gtsam-4.0.2/build
make clean
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j4   # 或者直接 make install

验证gtsam是否成功安装:编写测试文档测试(写一个test-gtsam.cpp)并且编译

#include <gtsam/geometry/Pose2.h>
#include <iostream>

int main() {
    // 创建一个 Pose2 对象
    gtsam::Pose2 pose(1.0, 2.0, 0.5);

    // 检查是否成功创建对象
    if (pose.x() == 1.0 && pose.y() == 2.0 && pose.theta() == 0.5) {
        std::cout << "GTSAM is successfully installed and working!" << std::endl;
    } else {
        std::cout << "Something went wrong with GTSAM installation." << std::endl;
    }

    return 0;
}

2、lio_sam_imuPreintegration-2以及-5报错;

[lio_sam_imuPreintegration-2] process has died [pid 1671, exit code 127, cmd /home/shuai/subject/catkin_lio_ws/devel/lib/lio_sam/lio_sam_imuPreintegration __name:=lio_sam_imuPreintegration __log:=/home/shuai/.ros/log/635269ee-46bc-11ed-a61b-1c697af31044/lio_sam_imuPreintegration-2.log].
[lio_sam_mapOptmization-5] process has died [pid 1672, exit code 127, cmd /home/shuai/subject/catkin_lio_ws/devel/lib/lio_sam/lio_sam_mapOptmization __name:=lio_sam_mapOptmization __log:=/home/shuai/.ros/log/635269ee-46bc-11ed-a61b-1c697af31044/lio_sam_mapOptmization-5.log].

解决方案:重新移动库文件位置即可:

cd /usr/local/lib/
sudo cp libmetis.so /opt/ros/melodic/lib/  # 注意这里melodic要根据你自己的ros版本调整

3、robot_localization库文件未安装:

问题原因:未安装robot_localization

解决方案:

sudo apt update
sudo apt install ros-melodic-robot-localization # 注意这里melodic要根据你自己的ros版本调整

4、lio-sam播放测试数据集的时候rviz界面中没有画面显示:(我使用的是rotation数据集)

错误分析原因:坐标系设置错误,以及话题是否对应检查

4.1坐标系设置:

左边点击option更换fix_frame,reference_frame的坐标系(我是从map换到了imu_lilnk),然后左边错误清除了:(下图的baselink会报错,不建议使用,经过测试只有imu_link可以不报错)

4.2话题对应:

(1)先使用rosbag工具查看.bag文件中包含的话题名称。可以通过以下命令实现:

rosbag info your_file.bag

your_file.bag替换为你的数据包文件名。该命令会输出该.bag文件的详细信息,包括其中包含的话题名称及其消息数量。

(2)点开config文件夹下的yaml文件检查topic话题与rosbag info中的话题是否对应,我下载的源代码就跟数据集不对应,如图左边播放的测试数据集是imu_correct,右边配置文件中订阅的是imu_raw。解决方案就是把配置文件中的imu_raw修改为imu_correct(与播放的测试数据集发布话题名称相对应)

PS.修改配置文件之前最好有个备份

4.3rviz中订阅点云话题:

完成4.1、4.2两步之后有图像,但是还是没有点云,需要手动定于点云话题,点击左下角的add按钮。

订阅之后,先播放测试数据集,接着订阅原始点云话题,当画面中出现条纹状的激光雷达点云时,证明能收到消息。

5、tony@tony-virtual-machine:~/catkin_lio_ws$ source ./devel/setup.bash tony@tony-virtual-machine:~/catkin_lio_ws$ 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

问题:无法找到安装包

解决方案:重新编译,进入到src下的launch文件夹去启动

cd ~/catkin_lio_ws
catkin_make
source devel/setup.bash

6、建图的时候点云地图乱晃乱闪乱飞

原因分析:重新看了一遍别人的部署教程,发现lio-sam的外参没有配置,需要配置传感器的外参。

配置外参的重要性:在 LIO-SAM 和 LVI-SAM 算法中,外参是指不同传感器(如 IMU 和 LiDAR)之间的坐标系变换关系。这些参数对于算法的正确运行至关重要,因为它们决定了传感器数据如何在同一个坐标系下进行融合。

解决方法:

6.1:网上寻找比较大型的开源数据集,并且详细阅读其readme文件,查看是否有给出传感器外参,寻找合适的数据集下载。我寻找的是m2dgr数据集:

M2DGR/README.md at main · SJTU-ViSYS/M2DGRhttps://github.com/SJTU-ViSYS/M2DGR/blob/main/README.md找到了作者已经标定好的文件calibration.txt: 

M2DGR/calibration_results.txt at main · SJTU-ViSYS/M2DGRhttps://github.com/SJTU-ViSYS/M2DGR/blob/main/calibration_results.txt

根据calibration文件修改lio-sam代码config文件夹下的yaml文件:

需要修改话题名称、imu参数、lidar2imu外参

    // Acc误差模型高斯白噪声
      imuAccNoise<---------->acc_n = 3.7686306102624571e-02
      // Gyro误差模型高斯白噪声
      imuGyrNoise<----------> gyr_n =2.3417543020438883e-03
      // Acc误差模型随机游走噪声
      imuAccBiasN<---------->acc_w =1.1416642385952368e-03
      // Gyro误差模型随机游走噪声
      imuGyrBiasN<----------> gyr_w =1.4428407712885209e-05

extrinsics: T_lb(lidar -> imu)
extrinsicsTrans: [0.27255, -0.00053, 0.17954]
extrinsicsRot: [
    1.0, 0.0, 0.0,
    0.0, 1.0, 0.0,
    0.0, 0.0, 1.0
]

三个矩阵的具体含义:

extrinsicTrans 表示 LIDAR 坐标系的原点在 IMU 坐标系下的坐标值。它是一个 3×1 的向量,用于描述两个传感器之间的空间位置偏移

extrinsicRot 是一个 3×3 的旋转矩阵,用于将 IMU 坐标系下的测量值(如加速度和角速度)转换到 LIDAR 坐标系。它定义了 IMU 和 LIDAR 之间的旋转关系

extrinsicRPY 也是一个 3×3 的旋转矩阵,用于将 IMU 的姿态信息(如欧拉角或四元数)转换到 LIDAR 坐标系。它通常用于处理 IMU 的九轴数据(包括磁力计),尤其是当 IMU 的姿态定义与 LIDAR 不一致时。

报错1:yaml语法错误

解决方法:yaml文件缩进敏感,需要严格检查语法

报错2:

lio_sam_imuPreintegration-2] restaring process
process[lio_sam_imuPreintegration-2]: started with pid [36402]
[lio_sam_mapOptmization-5] restarting process
process[lio_sam_mapOptmization-5]: started with pid [36403]
[lio_sam_imageProjection-3] process has died [pid 36388, exit code -11, cmd /home/tony/catkin_lio_ws/devel/lib/lio_sam/lio_sam_imageProjection __name:=lio_sam_imageProjection __log:=/home/tony/.ros/log/ed990f94-f435-11ef-b319-000c293dfd36/lio_sam_imageProjection-3.log].
log file: /home/tony/.ros/log/ed990f94-f435-11ef-b319-000c293dfd36/lio_sam_imageProjection-3*.log
[lio_sam_featureExtraction-4] process has died [pid 36389, exit code -11, cmd /home/tony/catkin_lio_ws/devel/lib/lio_sam/lio_sam_featureExtraction __name:=lio_sam_featureExtraction __log:=/home/tony/.ros/log/ed990f94-f435-11ef-b319-000c293dfd36/lio_sam_featureExtraction-4.log].
log file: /home/tony/.ros/log/ed990f94-f435-11ef-b319-000c293dfd36/lio_sam_featureExtraction-4*.log

可能原因分析:

(1)内存不足,明天把代码部署到服务器测试一下

服务器端可以播放

报错6(建图乱飞)的解决以及总结:

        建图乱飞很大可能就是yaml文件中的imu2lidar外参矩阵没有配置好,或者数据集没有与其采集数据的时候用的imu的外参相对应上。建议在寻找测试用的数据集的时候最好找公开了数据集使用的imu外参的数据集。

        我最后就是用的lio-sam源代码作者公开的测试数据集,因为这个数据集公开了imu2lidar的外参矩阵,直接写入配置文件即可(配置文件的位置在上面:安装步骤-6里面有写)。

        

7、ros报错 Resource not found: lio_sam 

Resource not found: lio_sam 
ROS path [0]=/opt/ros/noetic/share/ros 
ROS path [1]=/opt/ros/noetic/share 
The traceback for the exception was written to the log file

解决方法:在同一个mobaxterm窗口下source devel下的setup.bash文件(不能开两个mobaxterm seccsion来操作)并在这个窗口启动roslaunch

### 关于 `lio_sam_mapOptmization-5` 进程崩溃的原因分析 #### 可能原因一:GTSAM 库编译问题 如果 GTSAM 库在编译过程中存在问题,则可能导致依赖该库的功能模块无法正常运行。具体表现为进程异常退出并返回错误码。此情况可以通过重新配置和编译 GTSAM 来解决,确保其支持当前系统的架构特性[^4]。 #### 可能原因二:动态链接库路径不匹配 动态链接库的位置可能未被 ROS 工作空间正确识别。例如,默认情况下,某些必要的共享对象文件(如 `libmetis.so`)位于 `/usr/local/lib/` 路径下,而 ROS 启动时会优先查找 `/opt/ros/<ros_version>/lib/` 下的库文件。这种路径冲突可能会导致程序加载失败或崩溃。解决方案是将缺失的库文件复制到正确的目录中,或者通过环境变量调整动态链接器的行为][^[^45]。 ```bash cd /usr/local/lib/ sudo cp libmetis.so /opt/ros/melodic/lib/ ``` #### 可能原因三:内存访问越界或其他低级错误 错误代码 `-11` 通常表示段错误(Segmentation Fault),这可能是由于非法内存操作引起的,比如数组越界、指针解引用为空等。此类问题需要借助调试工具进一步定位,例如使用 `gdb` 或者查看核心转储文件来获取更详细的崩溃上下文信息[^3]。 #### 推荐排查方法 为了精确找到问题根源,可以采取以下措施: 1. **启用调试模式**:修改 CMake 配置选项以生成带有调试符号的目标文件。 2. **利用 gdb 调试**:附加至目标进程或将 core 文件载入 gdb 中逐步跟踪执行流程。 ```bash gdb --args /path/to/executable arg1 arg2 ... run backtrace full ``` 3. **检查日志记录**:仔细阅读 ROS 输出的日志消息以及任何关联组件产生的辅助诊断数据。 --- ### 提供一段示例代码用于验证修复效果 假设已经按照上述指导完成修正动作之后,可尝试重启相关服务节点确认是否恢复正常运作状态: ```bash roslaunch lio_sam mapping.launch ``` 同时观察终端反馈是否有新的警告提示出现;如果没有再次发生类似的终止事件则说明初步解决问题所在。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值