LIO-SAM环境配置与踩坑问题解决

**

LIO-SAM学习总结

**
工程源码:https://github.com/TixiaoShan/LIO-SAM

环境配置以及安装、运行

  1. 首先安装ros kinetic,可以按照wiki官网教程安装。
  2. 安装好ros后,还需要安装一些依赖功能包
sudo apt-get install -y ros-kinetic-navigation
sudo apt-get install -y ros-kinetic-robot-localization
sudo apt-get install -y ros-kinetic-robot-state-publisher 
  1. 安装gtsam 4.0.2

```cpp
gtsam官网:https://github.com/borglab/gtsam
git clone https://github.com/borglab/gtsam.git
mkdir build && cd build
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j4

4. 创建好工作空间catkin_ws,将lio-sam源码下载到catkin_ws/src目录下编译

```cpp
cd ~/catkin_ws/src
git clone https://github.com/TixiaoShan/LIO-SAM.git
cd ../
catkin_make -j1
  1. 运行官方数据集进行测试
    如果运行casual_walk_2.bag不需要修改任何参数,使用默认文件即可;如果要运行其它两个数据集,则需要做如下修改:
imuTopic: "imu_raw"  改为 imuTopic: "imu_correct"
extrinsicRot 和 extrinsicRPY 设为单位矩阵

其中extrinsicRot表示imu->lidar的坐标变换, 用于旋转imu坐标系下的加速度和角速度到lidar坐标系下, extrinsicRPY则用于旋转imu坐标系下的欧拉角到lidar坐标下, 由于lio-sam作者使用的imu的欧拉角旋转方向与lidar坐标系不一致, 因此使用了两个旋转不同, 但是大部分的设备两个旋转应该是设置为相同的。

同时GitHub主页还提供了验证GPS的数据集(park.bag),如果要使用GPS数据,则需要进行如下修改:

gpsTopic: "odometry/gpsz"  改为 gpsTopic: "odometry/gps"  
useImuHeadingInitialization: false 改为 useImuHeadingInitialization: true   # 如果使用gps数据这里一定要设置为true,不然可能会跑飞

相应的配置参数文件与相对应的数据集放在了一起
链接:https://pan.baidu.com/s/1MqQD22d4sA3iUszlWg3C8Q 提取码:2eyj

编译配置阶段的问题

opencv版本问题
由于20.04自带的是OpenCV4,所以要对LeGO-LOAM代码做一点改动:
找到utility.h中的:#include<opencv/cv.h>,修改为#include <opencv2/imgproc.hpp>。即可成功编译。
pcl问题
1.C++14环境
修改下载下来的源码中CMakeList.txt:

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

2.报错:‘Index’ is not a member of ‘Eigen’

/usr/include/pcl-1.10/pcl/filters/voxel_grid.h:340:21: error: ‘Index’ is not a member of ‘Eigen’ 340 | for (Eigen::Index ni = 0; ni < relative_coordinates.cols (); ni++)

该问题,可以参考 Build error on ubuntu 20.04. #215 ,即:将voxel_grid.h中报错的Eigen::Index x修改成int。

GTSAM4.0.2编译报错
-- Found TBB: /usr/include (found suitable version "2020.1", minimum required is "4.4") found components: tbb tbbmalloc 
-- Could NOT find MKL (missing: MKL_INCLUDE_DIR MKL_LIBRARIES) 
-- Found OpenMP_C: -fopenmp (found version "4.5") 
-- Found OpenMP_CXX: -fopenmp (found version "4.5") 
-- Found OpenMP: TRUE (found version "4.5")  
-- Found Eigen version: 3.3.7
CMake Error at wrap/CMakeLists.txt:32 (target_link_libraries):
  The "debug" argument must be followed by a library.
 
 
-- Configuring incomplete, errors occurred!
See also "/opt/ykcnnc/libs/libs/gtsam-4.0.2/build/CMakeFiles/CMakeOutput.log".
See also "/opt/ykcnnc/libs/libs/gtsam-4.0.2/build/CMakeFiles/CMakeError.log".
  1. 找到gtsam/wrap/CMakeLists.txt文件,注释掉debug部分
set(WRAP_BOOST_LIBRARIES
  optimized
    ${Boost_FILESYSTEM_LIBRARY_RELEASE}
    ${Boost_SYSTEM_LIBRARY_RELEASE}
    ${Boost_THREAD_LIBRARY_RELEASE}
    #  debug
    #${Boost_FILESYSTEM_LIBRARY_DEBUG}
    #${Boost_SYSTEM_LIBRARY_DEBUG}
    #${Boost_THREAD_LIBRARY_DEBUG}
)
2. 找到gtsam/CMakeLists.txt文件,注释掉debug部分
if (GTSAM_DISABLE_NEW_TIMERS)
    message("WARNING:  GTSAM timing instrumentation manually disabled")
    list_append_cache(GTSAM_COMPILE_DEFINITIONS_PUBLIC DGTSAM_DISABLE_NEW_TIMERS)
else()
    if(Boost_TIMER_LIBRARY)
      list(APPEND GTSAM_BOOST_LIBRARIES
        optimized ${Boost_TIMER_LIBRARY_RELEASE}
        optimized ${Boost_CHRONO_LIBRARY_RELEASE}
        #debug ${Boost_TIMER_LIBRARY_DEBUG}
        #debug ${Boost_CHRONO_LIBRARY_DEBUG}
        )
    else()
      list(APPEND GTSAM_BOOST_LIBRARIES rt) # When using the header-only boost timer library, need -lrt
      message("WARNING:  GTSAM timing instrumentation will use the older, less accurate, Boost timer library because boost older than 1.48 was found.")
    endif()
endif()

/usr/bin/ld问题
错误如下(示例):

/usr/bin/ld: 找不到 -lBoost::serialization
/usr/bin/ld: 找不到 -lBoost::thread
/usr/bin/ld: 找不到 -lBoost::timer
/usr/bin/ld: 找不到 -lBoost::chrono

在CMakeLists中加入:

find_package(Boost REQUIRED COMPONENTS timer thread serialization chrono)

运行报错
错误如下(实例):

/home/miking/catkin_ws/devel/lib/lego_loam/mapOptmization: error while loading shared libraries: libmetis.so: cannot open shared object file: No such file or directory

该问题,可以参考 roslaunch error #160 ,原因是未安装 libmetis 库。通过安装libparmetis-dev修复它重新运行即可:

sudo apt-get install libparmetis-dev

错误如下:

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/miking/catkin_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/miking/catkin_ws/src
ROS path [2]=/opt/ros/noetic/share

解决方法:

sudo apt-get install ros-noetic-fake-localization
sudo apt-get install ros-noetic-robot-localization
  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值