LeGO-LOAM:Ubuntu20.04下的编译与运行
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. 运行报错3. rviz问题参考链接:Loam:Ubunt
LeGO-LOAM在Ubuntu20.04下的编译与运行
参考链接:
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 -DCATKIN_WHITELIST_PACKAGES="lego_loam;cloud_msgs"
第一次编译代码时,需要在“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:
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++)
对于这个问题,我在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: 找不到 -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)
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);
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)