本文章记录了两种配置环境(笔记本电脑、板载计算单元)上是如何成功安装LeGO-LOAM。
1、小米笔记本(Intel i7)+Ubuntu 20.04+ROS Neotic
1.1、准备工作
A. 安装boost和cmake
sudo apt-get install libboost-all-dev
sudo apt-get install cmake
【注】确认Boost版本 >= 1.43,CMake版本 >= 3.0
B. 安装TBB库
sudo apt-get install libtbb-dev
C. 安装MKL
sudo apt-get install intel-mkl-full
【注】不建议指定intel-mkl某个确定版本(比如官网intel-mkl-2018.2-046),可能会出现“E: 无法定位软件包”的错误。
D. 安装gstam
GTSAM 是一个在机器人领域和计算机视觉领域用于平滑(smoothing)和建图(mapping)的C++库,采用因子图(factor graphs)和贝叶斯网络(Bayes networks)的方式最大化后验概率。
cd ~
git clone https://bitbucket.org/gtborg/gtsam.git
cd ~/gtsam
mkdir build
cd build
cmake ..
make check #可选的,运行单元测试,实际可不执行这个命令
sudo make install
【注】编译过程中可能提示的错误如下:
Q1:cmake .. 编译中出现的错误:
CMake Error at wrap/CMakeLists.txt:29 (target_link_libraries): The "debug" argument must be followed by a library. |
解决方法:找到gtsam/wrap/CMakeLists 文件 把以下内容注释或者删除(第8-11行):
debug ${Boost_FILESYSTEM_LIBRARY_DEBUG} ${Boost_SYSTEM_LIBRARY_DEBUG} ${Boost_THREAD_LIBRARY_DEBUG} |
Q2:cmake .. 编译中出现的错误
CMake Error at gtsam/CMakeLists.txt:105 (target_link_libraries): The "debug" argument must be followed by a library. |
解决方法:注释或删掉gtsam/CMakeLists文件中的2处代码(第174-180行、第192-194行)
debug ${Boost_SERIALIZATION_LIBRARY_DEBUG} ${Boost_SYSTEM_LIBRARY_DEBUG} ${Boost_FILESYSTEM_LIBRARY_DEBUG} ${Boost_THREAD_LIBRARY_DEBUG} ${Boost_DATE_TIME_LIBRARY_DEBUG} ${Boost_REGEX_LIBRARY_DEBUG} |
debug ${Boost_TIMER_LIBRARY_DEBUG} ${Boost_CHRONO_LIBRARY_DEBUG} |
1.2、安装&运行LeGO-LOAM
A. 下载源码
cd ~/catkin_ws/src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
B. 修改配置
(1)OpenCV版本
由于ubuntu 20.04自带的是OpenCV4,所以要对LeGO-LOAM源码中的utility.h进行改动:将#include<opencv/cv.h>修改为#include <opencv2/imgproc.hpp>即可。
(2)C++环境
主要是让LeGO-LOAM支持C++14,所以需要对LeGO-LOAM源码中CMakeList.txt进行改动:
将set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")修改为set(CMAKE_CXX_FLAGS "-std=c++14")
(3)Rivz问题
类似于“Failed to transform from frame [/camera] to frame [map]”的报错问题,解决办法就是把代码中与rviz相关的所有frame_id的“/”去掉重新编译即可。以订阅的地图点云为例,其相关的Topic为/registered_cloud,所以在代码中找到/registered_cloud对应的发布者pubRegisteredCloud,将其对应的frame_id中的“/”去掉即可。
(4)其他问题
网上还给出了其他一些常见问题,但我编译时候并没出现,可以参考以下Blog:
Ubuntu20.04下的编译与运行LeGO-LOAM【问题解决】_学无止境的小龟的博客-CSDN博客
C. 编译
cd ~/catkin_ws
catkin_make -j1
【注】第一次编译代码时,需要在“catkin_make”后面加上“-j1”来生成一些消息类型,以后的编译可以不需要“-j1”。
D. 下载示例数据
示例数据下载链接如下:
https://github.com/RobustFieldAutonomyLab/jackal_dataset_20170608
E. 运行
打开一个终端运行LeGO-LOAM程序:
source devel/setup.bash
roslaunch lego_loam run.launch
【注】运行可能会有如下报错:
~/catkin_ws/devel/lib/lego_loam/mapOptmization: error while loading shared libraries: libmetis.so: cannot open shared object file: No such file or directory |
原因是未安装 libmetis 库。通过安装libparmetis-dev修复它重新运行即可:
sudo apt-get install libparmetis-dev
打开另一个终端运行播放示例数据:
cd ~/data/lidar #示例数据所在文件夹
rosbag play xxx.bag --clock --topic /velodyne_points /imu/data
【注】虽然/imu/data 是可选的,但如果提供它可以大大提高估计精度。
2、NV Jetson Nano+Ubuntu 18.04+ROS Melodic
2.1、准备工作
A. 安装boost和cmake
同上
【注】确认Boost版本 >= 1.43,CMake版本 >= 2.6,Gcc版本 >= 4.7.3
B. 安装gstam
同上
【注】Jetson Nano上编译较慢,要耐心等待
2.2、下载并编译LeGO-LOAM
同上
【注】编译过程中可能提示的错误如下:
Q1:找不到opencv对应include目录:
CMake Error at /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake:113 (message): Project 'cv_bridge' specifies '/usr/include/opencv' as an include dir, which is not found. It does neither exist as an absolute directory nor in '/opt/ros/melodic//usr/include/opencv'. Check the issue tracker 'https://github.com/ros-perception/vision_opencv/issues' and consider creating a ticket if the problem has not been reported yet. Call Stack (most recent call first): /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:76 (find_package) open_quadtree_mapping/CMakeLists.txt:24 (find_package) |
解决方法:
这是由于ubuntu18.04上面安装的是opencv4,位置命名成了/usr/include/opencv4,所以需要进入以下文件中编辑,将所有的“inlude/opencv”修改成“inlude/opencv4”:
sudo vim /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake
另外,还需要对LeGO-LOAM源码中的utility.h进行改动:将#include<opencv/cv.h>修改为#include <opencv2/imgproc.hpp>即可。
运行测试同上类似。