lego_loam的github连接https://github.com/RobustFieldAutonomyLab/LeGO-LOAM
报错参考连接https://blog.csdn.net/weixin_44156680/article/details/118070387
一.编译报错问题
1.1问题1
- 解决办法,安装缺少的pcl_ros
sudo apt-get install ros-noetic-pcl-ros
1.2问题2
- 解决办法,修改程序代码
找到utility.h中的:#include<opencv/cv.h>,
修改为#include <opencv2/imgproc.hpp>
1.3问题三,C++版本问题
- 解决办法,按照图片所示的路径,找到该行代码,将11改成14.
1.4 问题四,
解决办法,在cmakelisit.txt中加入该行代码
find_package(Boost REQUIRED COMPONENTS timer thread serialization chrono)
1.5 问题五,
显示为定义PCL中的函数。undefined reference to `pcl::PCLBasepcl::PointXYZI::setInputCloud(boost::shared_ptr<pcl::PointCloudpcl::PointXYZI const> const&)’
- 解决办法
查看mapOptmization.cpp的原代码,发现爱并没有使用pcl点云库,没有包含任何和pcl有关的头文件,应该为该猜测该可能是自定义的消息。先编译cloud_msgs功能包,成功解决该问题。编译指令如下:将官网提供的catkin_make -j1 换成下面的指令
catkin_make --only-pkg-with-deps cloud_msgs
catkin_make
- 经过测试上述方法不行,经过不断尝试,可采用如下方法解决该问题,注释下图所示的代码
出现该问题的原因:应该在安装A_LOAM时编码安装的pcl1.12版本的pcl和ros自己安装的pcl1.10有冲突,导致和pcl有关的环境变量以及路径出问题。
ros自己安装的pcl库路径
/usr/include/pcl-1.10
源码安装的pcl路径
/usr/local/include/pcl-1.12
1.6 问题六,运行出错
- 解决办法,在~/.bashrc文件中加入如下代码
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
二.编译成功后运行问题
- 问题1,报错如下代码,同样的问题还有"/camera_init"
Invalid argument “/camera” passed to canTransform argument source_frame in tf2 frame_ids cannot star
- 解决办法
把源码(src下的四个文件和run.launch。主要是这个五个文件,好像src中有一个文件不需要修改)中的“/camera“和"/camera_init",全部改为“camera“和"camera_init"。
三.修改lego_loam的代码,使适配MulRan数据
参考连接https://blog.csdn.net/weixin_53141548/article/details/120796664
修改utility.h中的源码,修改如下:
3.1修改一
根据自己的雷达数据选择相应的代码,我使用的雷达是ouster 64线程雷达。因此注释原来代码中的vlp 16线。换为ouster 64线程。
- 选择对应的雷达配置代码:注释下面的代码,图中为完成注释后的代码
放开下列代码,图中为取消注释的图片
3.2修改二
-
将160代码注释,修改为161行代码。
-
将168行的uint16_t改为uint8_t
3.3修改三
将63行代码改为false
4 使用mulran数据运行lego_loam
mulran数据和lego_loam各一个工作空间,因此需要运行两个程序。mulran数据工作空间为mulran_to_ros_ws
,注意该功能包已经编译成功,可以运行;如何下载和编译该功能包,请参考博客。
4.1播放数据
#在该工作空间下
source ./devel/setup.bash
roslaunch file_player file_player.launch
然后会跳出一个可视化界面,如下图所示。加载load存放mulran数据的文件夹,然后点play。
4.2 运行lego_loam
source ./devel/setup.bash
roslaunch lego_loam run.launch