ubuntu20.04和ubuntu16.04调试orbslam2稠密建图过程

ubuntu20.04和ubuntu16.04调试orbslam2稠密建图过程

一、说明

因为涉及系统版本问题,导致pcl和vtk依赖库不同,所以使用两个ubuntu系统版本进行部署测试,分别是ubuntu20.04和ubuntu16.04。

二、orbslam2稠密建图版本选择

  1. 高翔老师提供的
git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git

ps:该版本编译成功后,程序一运行就段错误,遂放弃,下面不再说明。

  1. 另一位大佬(小白逆袭)给出的
https://github.com/xiaobainixi/ORB-SLAM2_RGBD_DENSE_MAP
博客:
https://blog.csdn.net/l741299292/article/details/81984649

ps:该版本经过不同系统的调试,均成功运行,但需要改动的地方不一致,下面会详细说明。

三、ubuntu20.04依赖软件版本选择

  1. 一开始选择版本如下,
opencv: 3.4.15
eigen3: 3.2.10
vtk: 7.1.1
pcl: 1.14
pangolin: 0.5 

能编译成功,但是运行程序显示pcl窗口只有三色坐标轴,无点云;根据github尝试修改/src/pointcloudmapping.cc代码,如图所示

在这里插入图片描述

修改后,运行程序会段错误崩溃。

  1. 遂更换依赖软件版本
opencv: 3.4.15
eigen3: 3.1.4
vtk: 7.1.1
pcl: 1.8.0
pangolin: 0.5 

ps:
1.本人ubuntu20.04安装pcl1.8会遇到更大的麻烦,下面将在安装vtk7.1.1和pcl1.8中说明。
2.另外,本人ubuntu16.04按照这个软件版本安装没有任何问题。

四、ubuntu20.04安装vtk7.1.1和pcl1.8

  1. 首先需要注意VTK和PCL的版本对应关系,如图所示
    在这里插入图片描述
  2. 注意到安装pcl时需要依赖
sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.9 libflann-dev # 有说ubuntu16对应1.8,ubuntu18对应1.9,我直接用了1.9
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install libopenni-dev
sudo apt-get install libopenni2-dev
  1. ubuntu20.04系统下在pcl-1.8文件中进行编译时,会存在一些错误,可根据下面的博主链接,进行解决。
https://blog.csdn.net/fffyyyhhh12/article/details/126889810
  1. 然而在上面的解决链接中有一条
error 5:error: no matching function for call to ‘boost::uuids::random_generator_pure::random_generator_pure(boost::random::mt19937*)’ 77 |     boost::uuids::random_generator OutofcoreOctreeDiskContainer<PointT>::uuid_gen_ (&rand_gen_);

博主给出的解决方法是注释octree_disk_container.hpp中的76、77行。我进行了该操作,结果因为屏蔽该代码遇到了进一步的错误:

pcl::outofcore::OutofcoreOctreeDiskContainer<pcl::PointXYZ>::uuid_gen_’未定义的引用
undefined reference to `pcl::outofcore::OutofcoreOctreeDiskContainer
pclboost::uuids::random_generator OutofcoreOctreeDiskContainer<PointT>::uuid_gen_ (&rand_gen_);

对于第4点的两个错误原因,是因为最关键的sudo apt-get install libboost-all-dev。运行该命令下载的libboost-all-dev在ubuntu16.04下查到的newest version是1.58版本;在ubuntu20.04下查到的newest version是1.71版本。根据链接https://github.com/PointCloudLibrary/pcl/pull/2338的说明:boost 1.67版本开始修改了由默认随机 UUID 生成器。新版本使用操作系统提供的随机性,并且在构造函数中不再采用 PRNG 作为参数。

boost版本的不同导致ubuntu20.04下编译错误的发生,而ubuntu16.04下编译正常,那么根据链接https://github.com/PointCloudLibrary/pcl/issues/2284的说明,进行以下操作:

 1. 无需屏蔽octree_disk_container.hpp中的76、77行
 2. 在pcl-1.8的CMakelists.txt中的40行下面添加 add_definitions("-DBOOST_UUID_RANDOM_GENERATOR_COMPAT")

如图所示
在这里插入图片描述
5. 随后就是正常的cmake ..make -j4的过程

五、ubuntu20.04运行orbslam2稠密建图程序问题

运行(博主:小白逆袭ORB-SLAM2_RGBD_DENSE_MAP-master)的程序,pcl窗口遇到只显示三色坐标系的情况。在上文有提到,这次通过修改/src/pointcloudmapping.cc文件可以显示点云图像。

六、ubuntu16.04编译+运行

根据上文的opencv、pcl、vtk、eigen3版本进行编译,无任何问题,不需要修改pcl中的任何文件,也不需要修改建图程序中的任何地方。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值