测试数据集+Kinect V2实时数据 已跑通,前后分别在4台电脑跑过,问题梳理比较多。
Tips:编译过程中仔细阅读readme文件, 看看是不是有什么地方没注意到,能解决大部分问题。

【源码】
ElasticFusion:https://github.com/mp3guy/ElasticFusion
Pangolin:https://github.com/stevenlovegrove/Pangolin
libfreenect2:https://github.com/OpenKinect/libfreenect2
OpenNI2:https://github.com/occipital/OpenNI2
OpenCV:https://opencv.org/releases/
png_to_klg:https://github.com/HTLife/png_to_klg

【参考】
Elasticfusion三维重建配置说明
Ubuntu14.04调试ElasticFusion之TUM数据集的测试

ubuntu 20.04/16.04配置Elasticfusion及问题解决

  • 一、安装依赖项
    • 1.1 Ubuntu 系统
    • 1.2 NVIDIA 驱动及 cuda
    • 1.3 更新大法
    • 1.4 安装依赖包
    • 1.5 安装 Pangolin
    • 1.6 安装 Openjdk
    • 1.7 安装 OpenNi2
  • 二、Elasticfusion 主体
    • 2.1 编译Core
    • 2.2 编译GPUTest
    • 2.3 编译GUI
    • 2.4 执行及效果
  • 三、遇到的 Error
    • 3.1 error:unsupported GNU version! gcc versions later than 8 are not supported!
    • 3.2 error:Your GPU "NVIDIA GeForce GTX 1060 6GB" isn't in the ICP Step performance database, please add it
    • 3.3 Pangolin error:Building Tests requested, but Catch2 library not found.
    • 3.4 error:OpenGL有两个,需要指定
    • 3.5 error:undefined reference to 'pthread_detach'/'pthread_create'
    • 3.6 error:‘decay_t’ is not a member of ‘std’;
  • 四、实采数据测试
    • 4.1 实时数据【Kinect V2】
      • 4.1.1 准备工作——配置openni2和libfreenect2
      • 4.1.2 使用Elasticfusion运行实时数据
    • 4.2 TUM离线数据
      • 4.2.1 安装依赖项及数据包
      • 4.2.2 TUM数据下载及预处理
      • 4.2.3 数据格式转换(png_to_klg)
      • 4.2.4 使用Elasticfusion运行TUM数据结果
      • 4.2.5 误差测评

在Ubuntu16.04和20.04都配了一遍,问题总结梳理。
友情提示,一定注意

  • 必须是NVIDIA显卡。因为cuda是要基于NVIDIA的,AMD显卡配置环境到最后,是没办法运行的。
  • 需要10 Series及以上,否则Elasticfusion跑不起来。

一、安装依赖项

1.1 Ubuntu 系统

首先是Ubuntu系统,这个不必多说。
我是从16.04最近才升级到了20.04,真香。

1.2 NVIDIA 驱动及 cuda

先确认下自己是够安装了NVIDIA驱动及其版本。

我之前是装过NVIDIA驱动的,可能因为

《ubuntu20.04下找不到NVIDIA相关命令》

1.3 更新大法

sudo apt-get update
sudo apt-get upgrade

1.4 安装依赖包

sudo apt-get install cmake cmake-qt-gui git build-essential libusb-1.0-0-dev libudev-dev
sudo apt-get install freeglut3-dev libglew-dev libsuitesparse-dev libeigen3-dev
sudo apt-get install zlib1g-dev libjpeg-dev doxygen graphviz

1.5 安装 Pangolin

源码:https://github.com/stevenlovegrove/Pangolin

git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build && cd build
cmake ..
make -j4
sudo make install
sudo ldconfig
#测试
ctestcd ../.. #文件夹回退两层

如果出现error,建议使用旧版本https://github.com/zzx2GH/Pangolin
我在另外一台电脑上使用https://github.com/stevenlovegrove/Pangolin版本代码,无论如何都会报错,搜索发现很多小伙伴都出现过这个问题,换个旧版本就欧了~

1.6 安装 Openjdk

Elasticfusion 源码的readme给的依赖项版本较低了,我选择了较高版本的openjdk8,会有不匹配的问题,后来又改成了openjdk7,亲测openjdk7与其他依赖项适配性较好。

sudo apt install openjdk-8-jdk-headless
java -version

1.7 安装 OpenNi2

直接下载源码编译需要设置变量,
有个很简单的安装方法《Ubuntu16.04安装OpenNI2(最简单)》

#安装依赖项
sudo apt-get install -y g++ python libusb-1.0-0-dev freeglut3-dev doxygen graphviz
sudo apt-get install libudev-dev
#安装openni2
sudo apt-cache search openni2
sudo apt-get install libopenni2-dev
#测试是否安装成功及版本
pkg-config --modversion libopenni2

二、Elasticfusion 主体

2.1 编译Core

cd Core
mkdir build && cd build
cmake ../src
make -j4
cd ../..  #文件夹回退两层

2.2 编译GPUTest

cd GPUTest
mkdir build && cd build
cmake ../src
make -j4
cd ../..  #文件夹回退两层

2.3 编译GUI

cd GUI
mkdir build && cd build
cmake ../src
make -j4
cd ../..  #文件夹回退两层

2.4 执行及效果

演示离线数据集下载

进入到 GUI/build 下,执行

 ./ElasticFusion -l dyson_lab.klg

效果如下图所示,可在左侧导航栏中切换需要的表现形式。

三、遇到的 Error

3.1 error:unsupported GNU version! gcc versions later than 8 are not supported!

问题:gcc版本太高,需要安装主版本为8以下的。
迁移:g++同理,只需要将下面步骤中的gcc改为g++即可。

#1.安装依赖项
sudo apt-get install build-essential#2.安装gcc-8
sudo apt-get install gcc-8
#(因为不想安装太低的版本,就可着边缘装了8,如果想安装更低版本的,甚至是主版本为4或者5的,只需要把数字改一下即可)#3.查看当前gcc版本
gcc -v
# 还是gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04),所以得切换一下【下面有截图】。#4.查看已安装的gcc版本
ls /usr/bin/gcc*
# gcc -8已经安装成功【截图可知】#5.手动设置两个版本的优先级并选择
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 40
sudo update-alternatives --config gcc
# 直接enter了,也可以选数字。已改为默认gcc-8版本【截图可知】再次使用gcc -v查看当前gcc版本,发现已经变成了gcc version 8.4.0 (Ubuntu 8.4.0-3ubuntu2)


此时继续make -j4 编译,成功。

3.2 error:Your GPU “NVIDIA GeForce GTX 1060 6GB” isn’t in the ICP Step performance database, please add it

Your GPU “NVIDIA GeForce GTX 1060 6GB” isn’t in the ICP Step performance database, please add it
Your GPU “NVIDIA GeForce GTX 1060 6GB” isn’t in the RGB Step performance database, please add it
Your GPU “NVIDIA GeForce GTX 1060 6GB” isn’t in the RGB Res performance database, please add it
Your GPU “NVIDIA GeForce GTX 1060 6GB” isn’t in the SO3 Step performance database, please add it

问题:以上几个处理数据过程中、没用到本机显卡。
表现:不影响s程序主体运行,但是有这些提示就让人非常不舒服,必须找到问题。
解决:在GUI/build下找运行./GUITest ,得到你电脑的信息,复制到在 /Core/src/Utils/GPUConfig.h 下配置。

3.3 Pangolin error:Building Tests requested, but Catch2 library not found.

在工程目录CMakeList.txt下找到 find_package(Catch2 2 QUIET)改成find_package(Catch2 REQUIRED) ,
注意这里是 Catch2Config.cmake.in 不是 Catch2Config.cmake ,所以设置路径cmake .. -DMAKE_PREFIX_PATH=/home/dell/Downloads/Catch2-2.13.7/CMake/Catch2Config.cmake.in后依然报错,源码编译重装 Catch2

#Catch2
cd Catch2-2.13.7
mkdir build && cd build
cmake ..
make
sudo make install

3.4 error:OpenGL有两个,需要指定

在 CMakeLists.txt 添加

if (POLICY CMP0072)set(OpenGL_GL_PREFERENCE LEGACY)
endif()

3.5 error:undefined reference to ‘pthread_detach’/‘pthread_create’

头文件添加 #include "pthread.h"

3.6 error:‘decay_t’ is not a member of ‘std’;

CMakeLists.txt 添加 set(CMAKE_CXX_STANDARD 14)

四、实采数据测试

4.1 实时数据【Kinect V2】

4.1.1 准备工作——配置openni2和libfreenect2

libfreenect2之前已经安装过,并且采集过数据。
ElasticFusion编译完成后跑测试数据集没问题,但是发现后面在GUI/build下运行./ElasticFusion,提示报错如下,就回头找原因。

Creating live capture... failed!
DeviceOpen using default:no devices found!

捋了一下可能出问题最多的地方,pangolin、libfreenect2、openni2,依次测试:pangolin没问题,libfreenect2执行./bin/Protonect测试也正常显示窗口,而openni2在测试执行NiViewer报错,提示如下,其实跟运行ElasticFusion报错一样

openDevice failed:DeviceOpen using default:no devices found!press any key to continue...

首先查看一下openni2是否安装(这次用的别人的电脑,之前跑过多个slam框架,安装依赖项的时候都很顺利,我想再确认一下)。
查看一下版本号正常,说明已经安装,但是因为这里需要与libfreenect2做一些设置,我找不到源码编译的文件夹,就下载源码重新编译。
源码地址:https://github.com/occipital/OpenNI2

#安装依赖项sudo apt-get install git g++ python libusb-1.0-0-dev libudev-dev openjdk-8-jdk freeglut3-dev graphviz doxygen
#下载源码
git clone https://github.com/occipital/OpenNI2
cd OpenNI2
make
sudo make install
#测试

注意,ElasticFusion基于openni2,kinect2用libfreenect2驱动,编译需要配置openni2和libfreenect2二者。

重新编译libfreenect2

cd libfreenect2
mkdir build && cd build
cmake .. -DBUILD_OPENNI2_DRIVER=ON
make
sudo make install
sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/

测试./bin/Protonect,正常显示图像窗口。
将libfreenect2/build/lib 下的libfreenect2-openni2.solibfreenect2-openni2.so.0 , 拷贝到 OpenNi2/Bin/x64-Release/OpenNi2/Drivers下,在OpenNi2下执行./Bin/x64-Release/NiViewer成功显示窗口。

如果依然报错找不到设备,则在 libfreenect2/build 路径下,执行以下命令,也会出现图像窗口。

sudo apt-get install openni2-utils
sudo make install openni2
NiViewer

重新编译openni2和libfreenect2后,当然也要重新编译ElasticFusion,上面第二部分的流程再走一遍。But…此时又出现了新的问题,报错如下

OpenNI2Interface::OpenNI2Interface(int, int, int): Assertion `findMode(width, height, fps) && "Sorry, mode not supported!"‘ failed.

我定位到OpenNI2Interface.cpp文件并没有发现什么,搜了一下,感谢大佬,解决方法是把MainController.cpp第37行的Resolution::getInstance(640, 480)改为Resolution::getInstance(512, 424)。

4.1.2 使用Elasticfusion运行实时数据

在 ElasticFusion/GUI/build 下运行./ElasticFusion即可,运行完得到 .ply 文件和 .freiburg 文件,自动保存在 ElasticFusion/GUI/build/CMakeFiles 下。

我是手持扫的,额。。。就是说,效果非常差,想跑一个完整的室内场景(两间打通的屋子),扫了一上午,重复了无数次,遇到拐角、竖梁、半隔断等,乱的一塌糊涂,横七倒八都是夸小了,根本匹配不起来,我已经尽量等距离慢速扫描墙面了。。。不知道这个框架实测要怎么用,是要用固定支架/机器人/小车么?还是怎么扫?如果有大佬知道,麻烦一定踢我一下 啊!!

4.2 TUM离线数据

4.2.1 安装依赖项及数据包

需要CMake、Boost、zlib、libjpeg、OpenCV,及numpy(Python包)

sudo apt-get install g++ cmake cmake-gui libboost-all-dev build-essential

OpenCV:https://opencv.org/releases/,选择需要的版本下载编译安装。或者直接命令行安装都行。
numpy:sudo pip install numpy

4.2.2 TUM数据下载及预处理

TUM数据集下载
TUM数据集相机参数

我下载了“freiburg2_desk”和“freiburg2_pioneer_slam2”两个场景数据。每个数据都有说明,大家可以根据自己需要下载。

数据转换 png_to_klg:https://github.com/HTLife/png_to_klg,将png_to_klg文件夹下的 associate.py 复制到数据集的文件夹下,然后将depth数据和对应的RGB数据配对生成 associations.txt 文件,代码如下

./associate.py depth.txt rgb.txt  > associations.txt
  • 提示,这里默认是Python2,Python3的话需要一些小的修改。为了省事,我切换到Python2运行的,注意numpy的安装路径,确保能用。

4.2.3 数据格式转换(png_to_klg)

cd png_to_klg
mkdir build && cd build
cmake ..
make
./pngtoklg -w '/数据集存储路径/' -o '/生成的.klg文件存储路径' -t #生成.klg文件

4.2.4 使用Elasticfusion运行TUM数据结果

cd Elasticfusion/GUI/build
./ElasticFusion -l (path to 生成的.klg文件)

4.2.5 误差测评

【未完待续】

TUM数据集工具: https://vision.in.tum.de/data/datasets/rgbd-dataset/tools
测评工具下载 [evo早先版,基于rosbuild]
测评工具下载

ubuntu 20.04配置Elasticfusion及问题解决(Kinect V2实测数据、TUM数据)相关推荐

  1. 阿里云服务器[Ubuntu 20.04]配置MySQL并实现远程连接

    阿里云服务器[Ubuntu 20.04]配置MySQL并实现远程连接 一次小小的尝试 操作系统与使用软件 连接云服务器 云服务器下载MySQL 更新MySQL用户权限 修改阿里云安全组 修改系统中配置 ...

  2. Ubuntu 20.04配置FTP服务方法(非匿名登录)

    一共找了三篇比较好的搭建步骤文章,仅供参考. 转载一: https://blog.csdn.net/J_StrawHat/article/details/110384202?utm_medium=di ...

  3. Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM+Gazebo仿真运行ORB-SLAM2+各种相关库的安装

    文章目录 一.换源 1.1 通过软件更新 1.2 通过修改源文件 二.安装三方库 2.1 安装必要的依赖项 2.2 安装Pangolin 2.3 安装OpenCV3 2.4 安装Eigen3 三.安装 ...

  4. Ubuntu 20.04 配置静态 IP 地址

    查看系统版本 Ubuntu 20.04 Ubuntu 从 17.10 开始,已放弃在 /etc/network/interfaces 里固定 IP 的配置,interfaces 文件不复存在,即使配置 ...

  5. ubuntu 20.04 配置ITS环境遇到的坑

    1.ubuntu默认有python3,但是我们测试需要python2的环境 https://segmentfault.com/a/1190000022572643 sudo apt install p ...

  6. Linux 之四 Ubuntu 20.04 WiFi 无法使用、设置无法显示、远程桌面、SSH、Git、PPA、FFmpeg 等各问题记录

    安装   今天,在我的老 Acer 笔记本(11 年的老本)上安装了 Ubuntu 20.04 LTS 版本,以作为学习使用.安装到没啥难度,基本和 Windows 差不多 ,基本都是下一步就行.注意 ...

  7. VMware Ubuntu 22.04 配置静态IP

    一.首先要配置网卡上面的网络信息,如果直接配置Ubuntu,可能会出现连不上网的情况. 1.在设置中找到 更改适配器选项 2. 找到VMnet8 ,右击属性 3. 找到IPv4,点击属性. 5.配置 ...

  8. Ubuntu 18.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM2+SLAM相关库的安装

    文章目录 一.换源 二.安装三方库 2.1 安装必要的依赖项 2.2 安装Pangolin 2.3 安装OpenCV3 2.4 安装Eigen3 三.安装ORB-SLAM2 四.安装ORB-SLAM3 ...

  9. Ubuntu 20.04 安装Azure Kinect SDK和ROS driver以及遇到k4a的报错

    这是我2022年2月22日的解决方案 首先说我是怎么安装Azure Kinect SDK的 git clone https://github.com/microsoft/Azure-Kinect-Se ...

最新文章

  1. oracle11g ora 12545,sqlplus本地登录报错ORA-12545
  2. C++和Rust_【Rust水群夜话】盘点Rust 官方团队2019年进展
  3. [转]vb socket通信(TCP/UDP)一对一、多对一
  4. 加班其实不是真正的理由(Coders Life)
  5. 编写有效用例电子版_剖析用例设计方法的使用
  6. 哈啰单车涨价:起步价1元/15分钟 仅限北京地区
  7. python 输入一个列表s和一个由二元组成的列表p_re --- 正则表达式操作 — Python 3.9.1 文档...
  8. C#在foreach中重用变量是否有原因?
  9. android 静态注册wifi广播,Android静态注册广播receiver检测WIFI连接状况变化
  10. ANSYS命令流——圆柱体网格划分
  11. win10 SystemParametersInfo 设置屏保 不好使_Win10:Classic Shell是一款非常不错的系统UI定制工具...
  12. OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  13. 前端html标签拨打电话
  14. vue在浏览器端报错:Module not found: Error: Can't resolve 'common/js/util' in 'E:\vue-exercise\sell\src'
  15. 一个flash+水印遮挡住产品图的效果
  16. Argo CD系列视频图文版之手把手教你搭建Argo CD 实验环境
  17. 榆熙教育电商学院:拼多多为何做“百亿补贴”?都带来了什么?
  18. 竞价排名还会受到“魏则西“的挑战吗?
  19. RPLIDAR A2 rviz显示雷达数据教程
  20. 十代服务器芯片组,【十代处理器主板芯片组个人整理汇总一览】包含总结和分析...

热门文章

  1. 航空公司客户价值分析python实战
  2. Oracle EBS OAF开发入门(3)-OAF如何部署,译编和发布
  3. リストビューでチェックを付けたレコードを全てフローに渡す方法
  4. 如何使用js读取本地文件并将内容展示到页面
  5. 香河机器人产业园属于哪个区_廊坊香河机器人产业园首家企业投产
  6. ShareSDK 第三方平台分享参数说明
  7. 闲评好声音那英及杨坤组决赛
  8. AI技术用于测试领域预研阶段
  9. 传中移动5省将销售iPhone 4 非苹果直供
  10. 宏晶微电子招聘会记录