ubuntu20.04上配置ElasticFusion

1、安装cmake3.22版本以上的版本

(因为在进行编译时,要求cmake版本需3.22以上)

1.1、查看当前版本

cmake ---version

1.2、卸载cmake

sudo apt remove cmake

1.3、下载官方源码https://cmake.org/download/

解压后进入目录

1.4、编译

configure是一个shell脚本,它可以自动设定源程序以符合各种不同平台上Unix系统的特性,并且根据系统参数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。

sudo ./configure
make -j8

1.5、安装

sudo make install

1.6、查看版本

cmake --version

关于出现的错误:

CMake Error: Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly. 

解决方法:

重新开启一个终端,

那么为什么会出现这样的问题呢?其实要从哈希表说起,当我们刚刚打开一个终端时,此时哈希表只有一条记录。每当我们再执行命令时,哈希表会记录下这条命令的路径,就相当于缓存一样。
第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当我们第二次使用该命令时,shell解释器首先会查看哈希表,没有该命令才会去PATH路径下寻找。
所以哈希表可以大大提高命令的调用速率,但是CMake Error: Could not find CMAKE_ROOT错误的原因也出在这里,如果我们之前在这个终端执行过cmake命令,那么哈希表就会自动记录下之前版本cmake的路径,我们可以通过输入hash -l查看
参考博客:https://blog.csdn.net/weixin_45467056/article/details/107995400

 

2、配置环境

sudo apt install -y cmake-qt-gui git build-essential libusb-1.0-0-dev libudev-dev openjdk-11-jdk freeglut3-dev libglew-dev libsuitesparse-dev zlib1g-dev libjpeg-dev

3、编译安装

git clone git@github.com:mp3guy/ElasticFusion.git
cd ElasticFusion/
git submodule update --init  //这一步比较久
cd third-party/OpenNI2/
make -j8
cd ../Pangolin/
mkdir build
cd build
cmake .. -DEIGEN_INCLUDE_DIR=$HOME/ElasticFusion/third-party/Eigen/ -DBUILD_PANGOLIN_PYTHON=false
make -j8
cd ../../..
mkdir build
cd build/
cmake ..
make -j8

4、关于问题:

4.1、在最后一步cmake ..,如果cmake版本低于3.22,会报错,并提示要升级cmake版本

4.2、在make -j8中若出现源码报错,主要是由于C++版本不支持编译,只需要将C++11版本换到C++14即可

sed -i 's/++11/++14/g' CMakeLists.txt

其中 sed -i 就是直接对文本文件进行操作的,直接修改CMakeLists.txt文件内容

5、测试

下载数据集http://www.doc.ic.ac.uk/~sleutene/datasets/elasticfusion/dyson_lab.klg

cd /ElasticFusion/buils

./ElasticFusion -l  ../../dyson_lab.klg

出现

即为成功

7、配置KinectV2

KinectV2需要libfreenect2来驱动

7.1安装libfreenect2驱动

(1)、安装依赖

sudo apt-get install build-essential cmake pkg-config libturbojpeg libjpeg-turbo8-dev mesa-common-dev freeglut3-dev libxrandr-dev libxi-dev 
sudo apt-get install libglfw3-dev
sudo apt-get install libopenni2-dev
sudo apt-get install libusb-dev
sudo apt-get install libturbojpeg0-dev

(2)、安装

git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2
mkdir build 
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DBUILD_OPENNI2_DRIVER=ON  //需要事先安装好openni2
make
sudo make install

关于编译问题:

使用make编译时会出现But the build failed with error: Cannot open include file: 'helper_math.h': No such file or directory的问题,导致编译不成功

解决方法:

主要是找不到helper_math.h文件导致,但是在/usr/local/cuda/samples/common/inc目录下压根就没有这个文件,需要进行下载

使用git clone https://github.com/NVIDIA/cuda-samples.git将相关文件下载,并使用命令

vim ~/.bashrc
#添加语句
export CPATH=$CPATH:/home/xxx/workspace/cuda-samples/Common
#保存退出
source ~/.bashrc

这样就能让libfreenect2找到这个文件了

参考博客:https://github.com/OpenKinect/libfreenect2/issues/777

获取设备udev权限

sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/

(3)、测试

cd build
./bin/Protonect

出现画面

ElasticFusion驱动是用openni2,而kinect2是用libfreenect2驱动,使用cmake .. -DBUILD_OPENNI2_DRIVER=ON时,如果系统里面事先没装好openni2,是编译不出来的,所以先装好libopenni2-dev,这样就可以编译出来带openni2的libfreenect2的驱动,即能在build的lib中找到libfreenect2-openni2.so
编译结果:

 

之后将libfreenect2/build/lib 下的libfreenect2-openni2.so ,libfreenect2-openni2.so.0

拷贝至/ElasticFusion/third-party/OpenNI2/Bin/x64-Release/OpenNI2/Drivers/
如图:

再在/ElasticFusion/third-party/OpenNI2/Bin/x64-Release目录下执行./NiViewer可以显示则成功

参考博客:https://www.cnblogs.com/tanshengjiang/p/13967940.html

8、修改分辨率,使用Kinect2编译运行

直接使用./ElasticFusion会出现分辨率不同的问题,解决方法为删除/ElasticFusion目录下的build文件后,修改/ElasticFusion目录下的MainController.cpp中第37行的Resolution::getInstance(640, 480)改为Resolution::getInstance(512, 424),之后再新建编译build目录即可

最后在/ElasticFusion/build目录下运行./ElasticFusion就可以开始工作了,之后点击save后,会出现ply格式的点云文件


参考博客:https://blog.csdn.net/qq_34622997/article/details/85262344

posted @ 2022-09-04 21:47  楸壳  阅读(448)  评论(1编辑  收藏  举报