20.04复现LeGo-LOAM

首先恭喜你看到这篇博客,我已经把弯路走遍了,你可以直接少走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,可直接进行后续(不知啥问题,别人博客中同样存在)

参考:ubuntu18.04安装gtsam过程及报错error: invalid initialization of reference of type ‘const std::vector<bool>&’-CSDN博客

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博客

### 回答1: 要在Ubuntu 20.04上安装lego-loam,您可以按照以下步骤进行操作: 1. 首先,您需要安装ROS(机器人操作系统)。您可以按照ROS官方网站上的指南进行安装。 2. 接下来,您需要下载lego-loam的源代码。您可以在GitHub上找到lego-loam的源代码。 3. 将lego-loam代码放在ROS工作空间的src目录下。 4. 打开终端并进入ROS工作空间。 5. 运行catkin_make命令来编译lego-loam。 6. 运行source命令来激活ROS环境。 7. 运行roslaunch命令来启动lego-loam。 以上就是在Ubuntu 20.04上安装lego-loam的步骤。希望对您有所帮助。 ### 回答2: Lego-LOAM是一种激光SLAM算法,因其较高的定位精度和较快的运算速度而受到研究人员和爱好者的喜爱。在使用Lego-LOAM前,需要先在计算机上安装ROS(机器人操作系统)。 安装ROS 在安装Lego-LOAM前,需要先在Ubuntu20.04上安装ROS。 1. 新建ROS工作空间 在终端中输入以下命令: ``` $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/ $ catkin_make ``` 2. 下载ROS 在终端中输入以下命令: ``` $ sudo apt-get update $ sudo apt-get install ros-foxy-desktop-full ``` 3. 配置ROS环境变量 在终端中输入以下命令: ``` $ echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc $ source ~/.bashrc ``` 安装Lego-LOAM 1. 下载Lego-LOAM源码 将Lego-LOAM的源码下载到ROS工作空间(~/catkin_ws/src)中: ``` $ cd ~/catkin_ws/src $ git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git ``` 2. 编译源码 在终端中输入以下命令: ``` $ cd ~/catkin_ws $ catkin_make -j1 ``` 3. 运行Lego-LOAM 在新的终端中输入以下命令: ``` $ cd ~/catkin_ws $ source ./devel/setup.bash $ roslaunch lego_loam run.launch ``` 现在,Lego-LOAM就已经成功安装和运行了。在运行过程中,你可以通过rviz(ROS可视化工具)来查看激光点云数据和轨迹。 ### 回答3: 在安装Ubuntu20.04系统之后,您可以使用以下步骤来安装LEGO-LOAM,这是一个自动驾驶的三维点云建图以及定位的算法包。 第一步:安装依赖库 要安装Legoloam,需要安装以下依赖库: sudo apt-get install ros-<distro>-pcl-ros ros-<distro>-velodyne ros-<distro>-grid-map ros-<distro>-grid-map-ros libyaml-cpp-dev libopencv-dev libeigen3-dev libboost-all-dev libsuitesparse-dev libpcl-dev 请将“<distro>”替换为ROS版本,例如: 在ROS Melodic下使用命令sudo apt-get install ros-melodic-pcl-ros, 在ROS Kinetic下使用sudo apt-get install ros-kinetic-pcl-ros, 第二步:克隆lego-loam代码 使用以下命令来下载Lego-loam的源代码: cd ~/catkin_ws/src git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git 第三步:编译和安装代码 使用以下命令来编译代码: cd ~/catkin_ws/ catkin_make -j1 请注意,使用-j1可以确保编译成功。 最后,使用以下命令可以将其添加到您的环境变量: echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc 现在,您已经成功安装并编译了Lego-loam,可以使用roslaunch命令运行LEGO-LOAM节点: roslaunch lego_loam run.launch 总之,在您安装Lego-loam之前,强烈建议您拥有ROS相关知识和ROS系统的基本理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值