• 实测 ubuntu 20.04 编译LIO-SAM问题与解决办法


    LIO-SAM 在 ubuntu16.04 和 ubuntu18.04 编译都不麻烦。

    但是最近配置的工控机是 ubuntu20.04 的 安装的ROS版本的是noetic,在编译LIO-SAM中遇到了很多问题,在此记录并发布出来。

    eigen3的问题

    在usr/local/include 中找不到 eigen3 ,因为它在 usr/include中,将其复制下
    在这里插入图片描述

    opencv 的问题

    In file included from /home/jone/jone_ws/src/LIO-SAM/src/featureExtraction.cpp:1:
    /home/jone/jone_ws/src/LIO-SAM/include/utility.h:18:10: fatal error: opencv/cv.h: 没有那个文件或目录
       18 | #include <opencv/cv.h>
          |          ^~~~~~~~~~~~~
    In file included from /home/jone/jone_ws/src/LIO-SAM/src/mapOptmization.cpp:1:
    /home/jone/jone_ws/src/LIO-SAM/include/utility.h:18:10: fatal error: opencv/cv.h: 没有那个文件或目录
       18 | #include <opencv/cv.h>
          |          ^~~~~~~~~~~~~
    In file included from /home/jone/jone_ws/src/LIO-SAM/src/imuPreintegration.cpp:1:
    /home/jone/jone_ws/src/LIO-SAM/include/utility.h:18:10: fatal error: opencv/cv.h: 没有那个文件或目录
       18 | #include <opencv/cv.h>
          |          ^~~~~~~~~~~~~
    In file included from /home/jone/jone_ws/src/LIO-SAM/src/imageProjection.cpp:1:
    /home/jone/jone_ws/src/LIO-SAM/include/utility.h:18:10: fatal error: opencv/cv.h: 没有那个文件或目录
       18 | #include <opencv/cv.h>
          |          ^~~~~~~~~~~~~
    compilation terminated.
    compilation terminated.
    compilation terminated.
    compilation terminated.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    由于 20.04 自带的是OpenCV4,所以要对 LIO-SAM 代码做一点改动

    在 utility.h 中的

    #include
    
    • 1

    改为

    #include
    
    • 1

    在这里插入图片描述

    pcl的问题

    pcl的问题主要是需要 C++14的编译
    在这里插入图片描述这里修改 lio-sam 的编译配置就行 ,打开 liosam的CMakeLists.txt:

    将第5行的

    set(CMAKE_CXX_FLAGS "-std=c++11")
    
    • 1

    改为

    set(CMAKE_CXX_FLAGS "-std=c++14")
    
    • 1

    在这里插入图片描述

    运行时的问题

    process[lio_sam_mapOptmization-5]: started with pid [10295]
    /home/jone/jone_ws/devel/lib/lio_sam/lio_sam_mapOptmization: error while loading shared libraries: libmetis.so: cannot open shared object file: No such file or directory
    [lio_sam_imuPreintegration-2] process has died [pid 10294, exit code 127, cmd /home/jone/jone_ws/devel/lib/lio_sam/lio_sam_imuPreintegration __name:=lio_sam_imuPreintegration __log:=/home/jone/.ros/log/26ccf03a-2997-11ed-8e43-49590f7f8a53/lio_sam_imuPreintegration-2.log].
    log file: /home/jone/.ros/log/26ccf03a-2997-11ed-8e43-49590f7f8a53/lio_sam_imuPreintegration-2*.log
    [lio_sam_mapOptmization-5] process has died [pid 10295, exit code 127, cmd /home/jone/jone_ws/devel/lib/lio_sam/lio_sam_mapOptmization __name:=lio_sam_mapOptmization __log:=/home/jone/.ros/log/26ccf03a-2997-11ed-8e43-49590f7f8a53/lio_sam_mapOptmization-5.log].
    log file: /home/jone/.ros/log/26ccf03a-2997-11ed-8e43-49590f7f8a53/lio_sam_mapOptmization-5*.log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    报错找不到 libmetis.so 这个文件

    这个和 gtsam 编译时候的 方法有关

    实际问题是库文件libmetis.so 的位置。它是一个运行时库,但是当应用程序查找它时,它的位置不在预期的目录中。在通过运行命令sudo make install -j8安装库gtsam 时,文件libmetis.so安装在/usr/local/lib/的默认位置,但是当我们启动 ros 工作区时,运行时库查看位置/opt/ros/noetic/lib/

    cd /usr/local/lib/
    sudo cp libmetis.so /opt/ros/noetic/lib/
    
    • 1
    • 2

    可以解决这个问题

    再次运行

    ERROR: cannot launch node of type [robot_localization/ekf_localization_node]: robot_localization
    ROS path [0]=/opt/ros/noetic/share/ros
    ROS path [1]=/home/jone/jone_ws/src
    ROS path [2]=/opt/ros/noetic/share
    ERROR: cannot launch node of type [robot_localization/navsat_transform_node]: robot_localization
    ROS path [0]=/opt/ros/noetic/share/ros
    ROS path [1]=/home/jone/jone_ws/src
    ROS path [2]=/opt/ros/noetic/share
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这个错位是少了 robot_localization 这个功能包

    sudo apt-get install ros-noetic-fake-localization
    sudo apt-get install ros-noetic-robot-localization
    
    • 1
    • 2

    在这里插入图片描述
    终于成功运行

    将imu与雷达的外参进行配置

      #extrinsicRot: [-1, 0, 0,
      #                0, 1, 0,
      #                0, 0, -1]
      #extrinsicRPY: [0, -1, 0,
      #               1, 0, 0,
      #               0, 0, 1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
      extrinsicRot: [0.999014, -0.0354845, 0.0266871,
                     0.035815, 0.999286, -0.0120079,
                     -0.026242, 0.0129519, 0.999572]
      extrinsicRPY: [0.999014, -0.0354845, 0.0266871,
                     0.035815, 0.999286, -0.0120079,
                     -0.026242, 0.0129519, 0.999572]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
      pointCloudTopic: "/velodyne_points"               # Point cloud data
      imuTopic: "/imu"                         # IMU data
    
    • 1
    • 2

    result

    在这里插入图片描述

  • 相关阅读:
    zookeeper集群搭建
    青大数据结构【2013】
    网络安全保险行业面临的挑战与变革
    javascript常用方法总结及正则表达式
    数云融合丨知识图谱在烟草零售数字化转型中的应用
    19. Remove Nth Node From End of List
    [React] react-hooks如何使用
    VR虚拟展厅的亮点是什么?有哪些应用?
    从无到有的基于QT软件的DIY桌面番茄钟(上)
    4、敏感词过滤(前缀树)
  • 原文地址:https://blog.csdn.net/qq_32761549/article/details/126640468