LeGO-LOAM在Ubuntu20.04下的编译与运行
- 一、源码及数据集下载
- 二、安装gtsam
- 三、建立ROS工作空间
- 四、LeGO-LOAM的编译
- 五、LeGO-LOAM的运行
- 六、可能会遇到的问题
-
- 1. OpenCV 版本问题
- 2.pcl问题
-
- (1) C++14环境
- (2) 报错:‘Index’ is not a member of ‘Eigen’
- 3. `/usr/bin/ld`问题
- 4. 运行报错
- 3. rviz问题
参考链接:
Loam:Ubuntu20.04下的编译与运行.
Floam:Ubuntu20.04下的编译与运行.
一、源码及数据集下载
源码链接: https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.
将下载好的源码放入建立好的ros工作空间下即可。
关于数据集,在作者的github上也提供了两份不同的数据集,但是我使用的是测试loam的数据集和作者提供的第一份数据集,这里我把原址和百度云地址都贴在下面:
NSH indoor outdoor 数据集:
https://drive.google.com/file/d/1s05tBQOLNEDDurlg48KiUWxCp-YqYyGH/view.
数据集的百度云地址:https://pan.baidu.com/s/1TnLl_8OF5tvv8i-yzrHc7g. 密码: 0qno
作者提供的2份数据集:
https://drive.google.com/drive/folders/1_t5fX5yIqY-y6sAifY8pVWX4O9LCK5R2.
数据集的百度云地址:https://pan.baidu.com/s/1SkrqfN82il1m6jhkLZT-WA. 密码: oqo8
https://drive.google.com/drive/folders/16p5UPUCZ1uK0U4XE-hJKjazTsRghEMJa.
二、安装gtsam
wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/
cd ~/Downloads/gtsam-4.0.0-alpha2/
mkdir build && cd build
cmake ..
sudo make install
三、建立ROS工作空间
Ubuntu20.04对应的ROS版本为Noetic,可以按照官网手册安装。建议安装时采用Desktop-Full Install。
安装ROS Noetic: lhttp://wiki.ros.org/noetic/Installation/Ubuntu.
安装好以后即可创建工作空间:
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
$ cd ~/catkin_ws/
$ catkin_make
$ echo "source ~/catkin_ws/devel/setup.sh" >> ~/.bashrc
然后将git下来的文件中src下的LeGO-LOAM复制到工作空间src下即可catkin_make。
四、LeGO-LOAM的编译
cd ~/catkin_ws/src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd ..
catkin_make -j1
单独编译ROS包:
第一次编译代码时,需要在“catkin_make”后面加上“-j1”来生成一些消息类型。以后的编译不需要“-j1”。
五、LeGO-LOAM的运行
运行:
roslaunch lego_loam run.launch
播放数据集:
虽然/imu/data 是可选的,但如果提供它可以大大提高估计精度。
rosbag play *.bag --clock --topic /velodyne_points /imu/data
播放完全的rviz效果:
六、可能会遇到的问题
1. OpenCV 版本问题
如果你在安装Ubuntu的时候是选择联网更新安装的话,那么应该Eigen3、pcl-1.10和OpenCV都是有的,但是由于20.04自带的是OpenCV4,所以要对Loam代码做一点改动:
找到
utility.h
中的:
#include<opencv/cv.h>
,修改为
#include <opencv2/imgproc.hpp>
。即可成功编译。
2.pcl问题
(1) C++14环境
主要是让LeGO-LOAM支持C++14,所以只需要修改下载下来的源码中CMakeList.txt:
(2) 报错:‘Index’ is not a member of ‘Eigen’
对于这个问题,我在LeGO-LOAM的issues中找到了答案:
https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/issues/215.
方法是将
voxel_grid.h
中报错的
Eigen::Index
x修改成
int
。
3. /usr/bin/ld
问题
/usr/bin/ld
报错如下:
/usr/bin/ld: 找不到 -lBoost::serialization
/usr/bin/ld: 找不到 -lBoost::thread
/usr/bin/ld: 找不到 -lBoost::timer
/usr/bin/ld: 找不到 -lBoost::chrono
在CMakeLists中加入:
4. 运行报错
/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
解决办法:
/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
对于这个问题,我同样也在LeGO-LOAM的issues中找到了答案:
https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/issues/160.
原因是未安装 libmetis 库。通过安装libparmetis-dev修复它重新运行即可:
sudo apt-get install libparmetis-dev
3. rviz问题
在loam中这两个问题也遇到过。
类似于
Failed to transform from frame [/camera] to frame [map]的报错问题,
其实就是把代码中与rviz相关的frame_id的反斜杠给去掉重新编译即可。以订阅的地图点云为例,其相关的Topic为
/registered_cloud
,所以在代码中找到
/registered_cloud
对应的发布者
pubRegisteredCloud
,将其对应的
frame_id
中的
\
去掉即可。
而对应rviz显示大圈圈的问题,只要将每种点云的style修改成
Flat Squares
即可。
cloudMsgTemp.header.frame_id = "camera_init";
pubRegisteredCloud.publish(cloudMsgTemp);