首先恭喜你看到这篇博客,我已经把弯路走遍了,你可以直接少走30年弯路
目录
一、安装依赖
二、安装编译gtsam
三、安装编译LeGo-LOAM
四、LeGo-LOAM复现
其他算法汇总栏目:
SLAM常用2D、3D算法复现以及在搭建的Gazebo环境仿真汇总-CSDN博客
1.安装依赖项
(我把过程中出现的报错整理放最后了,红色数字对应,请移步后面对应解决“报错问题”)
sudo apt-get install libboost-all-dev
sudo apt-get install cmake
sudo apt-get install libtbb-dev
sudo apt-get install libparmetis-dev
Boost >= 1.43
gcc >= 4.7.3
CMake >= 3.0
2.安装编译gtsam
git安装(gtsam出现debug报错0)(我进行make check出现报错1)
cd
git clone https://bitbucket.org/gtborg/gtsam.git
check和install很慢,根据情况加入多线程(-j12)或其他线程报错2
cd gtsam/
mkdir build &&cd build
cmake ..
make check
sudo make install
多线程方法
make check -j12
sudo make install -j12
3.安装编译LeGo-LOAM
参考:
源码链接(镜像加速下载):
LeGO-LOAM - GitCode
git clone源码放入建立好的工作空间下的src下即可。编译(报错3)“<opencv/cv.h>”
mkdir test_ws
#之前创建了工作空间的按自己的修改
cd ~/test_ws/src
#git 镜像加速
git clone https://gitcode.com/gh_mirrors/le/LeGO-LOAM.git
cd ..
catkin_make -j1
第一次编译代码时,需要在“catkin_make”后面加上“-j1”来生成一些消息类型。以后的编译不需要“-j1”。
单独编译ROS包
catkin_make -DCATKIN_WHITELIST_PACKAGES="lego_loam;cloud_msgs"
作者在github上提供了两份数据集,都可以拷下来测试,本文只测试了其中的第一份数据集,我没有放置在自己的百度云,这里我把别人提供的原址和百度云地址都贴在下面:
NSH indoor outdoor 数据集:
https://drive.google.com/file/d/1s05tBQOLNEDDurlg48KiUWxCp-YqYyGH/view.
数据集的百度云地址:LeGo-Loam_免费高速下载|百度网盘-分享无限制 (baidu.com) 密码: 6qj1
作者提供的2份数据集:
https://drive.google.com/drive/folders/1_t5fX5yIqY-y6sAifY8pVWX4O9LCK5R2.
数据集的百度云地址:百度网盘 请输入提取码. 密码: oqo8
https://drive.google.com/drive/folders/16p5UPUCZ1uK0U4XE-hJKjazTsRghEMJa.
cd ~/test_ws/src
#git 镜像加速
git clone https://gitcode.com/gh_mirrors/le/LeGO-LOAM.git
cd ..
catkin_make -j1
4.LeGo-SLAM数据集复现
4.1数据集下载
LeGO-LOAM:Ubuntu20.04下的编译与运行_lego loam ubuntu 20.04 yuanma-CSDN博客
直接参考上面链接博主(NSH indoor outdoor 数据集,云盘失效可以去评论区看或者官网)
4.2在legoloam_ws文件下source并代码运行
roslaunch lego_loam run.launch
4.3在LeGo-Loam文件夹下运行运行数据包
rosbag play *.bag --clock --topic /velodyne_points /imu/data
4.3在LeGo-Loam文件夹下运行运行数据包
4.4rviz设置(save config)
报错Failed to transform from frame [/camera] to frame [map]
找到~/legoloam_ws/src/LeGO-LOAM/LeGO-LOAM/src下的.cpp文件(ctrl+F查找)
将/registered_cloud
对应的发布者pubRegisteredCloud的 / 删除
例如:
cloudMsgTemp.header.frame_id = "/camera_init";
pubRegisteredCloud.publish(cloudMsgTemp);
改为
cloudMsgTemp.header.frame_id = "camera_init";
pubRegisteredCloud.publish(cloudMsgTemp);
运行结果:(还有部分点云未调好)
我rviz设置如下(可根据自己需要设置)
后续更新在自己搭建的仿真环境中建图........
报错问题汇总
(报错0)出现了(行数可能不一样):
CMake Warning (dev) at gtsam/CMakeLists.txt:105 (target_link_libraries):
Link library type specifier "debug" is followed by specifier "optimized"
instead of a library name. The first specifier will be ignored.
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Error at gtsam/CMakeLists.txt:105 (target_link_libraries):
The "debug" argument must be followed by a library.
-- Configuring incomplete, errors occurred!
See also "/home/hawkbot/gtsam/build/CMakeFiles/CMakeOutput.log".
See also "/home/hawkbot/gtsam/build/CMakeFiles/CMakeError.log".
解决:将debug注释掉(注意别注释错了)
1.找到(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}
#${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()
2.找到(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}
完成后重新之前的操作
(报错1)在check中出现报错没有影响后续的install,可直接进行后续(不知啥问题,别人博客中同样存在)
error: invalid initialization of reference of type ‘const std::vector<bool>&’ from expression of type ‘const std::vector<long unsigned int>’
124 | const std::vector<bool>& mask() const { return mask_; }
其中还写了一个install中出现的bug(我也是一样的问题,暂时没出现影响,我第一次安装也出现了,第二次复习流程,重新在新的虚拟机运行居然又没有了)
(报错2)我用的虚拟机,出现这个,内存不足的问题,减少线程数
c++: fatal error: 已杀死 signal terminated program cc1plus
compilation terminated.
(报错3)出现opencv报错
参考:
LeGO-LOAM:Ubuntu20.04下的编译与运行_lego loam ubuntu 20.04 yuanma-CSDN博客
/home/ply1/test_ws/src/LeGO-LOAM/LeGO-LOAM/include/utility.h:13:10: fatal error: opencv/cv.h: 没有那个文件或目录
13 | #include <opencv/cv.h>
| ^~~~~~~~~~~~~
报错原因:这是由于20.04自带的是OpenCV4。
~/test_ws/src/LeGO-LOAM/LeGO-LOAM/includ下的utility.h文件
#include<opencv/cv.h>
修改为
#include<opencv2/imgproc.hpp>
(报错4)继续编译又出现大段关于点云pcl库的问题
POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::CPPFSignature,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/pcl-1.10/pcl/point_types.h:574:1: error: ‘minusscalar’ is not a member of ‘pcl::traits’
报错原因:这是由于用的C++11,但是需要支持C++14,解决如下:
将test_ws/src/LeGO-LOAM/LeGO-LOAM下的CMakeLists.txt文件:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
改为如下
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
还有报错:‘Index’ is not a member of ‘Eigen’等其他请看这篇博客(我没遇到就没加上了)
LeGO-LOAM:Ubuntu20.04下的编译与运行_lego loam ubuntu 20.04 yuanma-CSDN博客