源码来自ElasticFusion。
虽然网上很多教程,但是大部分是基于16.04的,而我装的系统是教新的18.04,所以中间编译其实遇到了很多的困难。
1、安装依赖项:
根据官方的介绍,我们可以利用如下指令进行安装依赖:
sudo apt-get install -y cmake-qt-gui git build-essential libusb-1.0-0-dev libudev-dev openjdk-7-jdk freeglut3-dev libglew-dev cuda-7-5 libsuitesparse-dev libeigen3-dev zlib1g-dev libjpeg-dev
然而需要注意的是openjdk-7-jdk以及从库里删除了,是无法直接安装的,而且cuda我是之前安装了9.0的版本,所以这里也略过,所以修正后的指令应该是:
sudo apt-get install -y cmake-qt-gui git build-essential libusb-1.0-0-dev libudev-dev openjdk-8-jdk freeglut3-dev libglew-dev libsuitesparse-dev libeigen3-dev zlib1g-dev libjpeg-dev
真实机下 ubuntu 18.04 安装GPU +CUDA+cuDNN 以及其版本选择
2、安装OpenNI2
打开终端,输入如下的指令,这里没有遇到太大的问题:
git clone https://github.com/occipital/OpenNI2
cd OpenNI2
make -j8
sudo make install
sudo ldconfig
3、安装Pangolin
打开终端,输入如下指令:
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
在这里遇到了两个小问题,首先是make编译的时候,发现报错的地方非常多,而且是在函数编译的地方出错了,后面google后无果。怀疑是编译的gcc和g++环境有问题,因为之前安装cuda的时候把gcc和g++降级了,后面发现这个虽然官方的github上说是需要C++11,可是在CmakeList里面却是C++14,所以这里重新升级了gcc和g++版本又尝试了下,编译成功。
4、安装ElasticFusion
ElasticFusion里主要有3个需要编译的文件夹,分别是Core,GPUTest,GUI。在这里按照顺序对三者进行编译。
Core的编译:
cd ElasticFusion
cd Core
cd src
mkdir build && cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
这里需要注意的是,作者可能调整过目录,所以需要先进入src
文件夹进行编译,然后再把编译好的build
文件夹复制到Core
目录下(因为GPUTest的编译是依赖于Core/build
的)。
GUITest的编译:
cd ElasticFusion
cd GPUTest
cd src
mkdir build && cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
这里需要Core/build
的编译结果,然而我们需要在Core/src
目录下生成build,所以可以复制到对应目录,否则编译报错。
GUI的编译:
cd ElasticFusion
cd GUI
cd src
mkdir build && cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
这一步直接按照步骤即可。
手头上暂时没有realsense,所以需要使用数据集来进行运行代码。由于ElasticFusion提供的数据集我一直无法打开,所以另辟蹊径看看能否使用其他的数据集。
ElasticFusion的数据集格式为klg,是一个由深度颜色信息转成的二进制文件(包含rgb-d数据)。经过google发现我们可以通过png_to klg来转换rgbd数据。
首先是下载rgb-d数据,这里使用TUM的数据集,然后数据集里面有关于深度和颜色的信息:
先在png_to_klg目录下运行生成associations.txt(基于python2):
./associate.py depth.txt rgb.txt > associations.txt
然后进入png_to_klg目录:
mkdir build $ cd build
cmake ..
make
./pngtoklg -w '数据集的目录' -o '生成klg的存储路径' -t
最后进入ElasticFusio/GUI/build/中,使用ElasticFusion进行运行数据集:
./ElasticFusion -l fr1_xyz.klg
设备:Intel realsense D435
由于Elasticfusion是基于1代的realsense的,我们的设备是2代realsense,所以代码并不完全适用,我们需要先修改代码。
根据github上的pull request:Upgrade librealsense 2 support and add Ubuntu 18.04 install script
我们修改五个文件即可,略过(也可以直接下载那个节点的代码)。
官方安装指南
我的整理和遇到的一些问题:
# ⾸先克隆代码:
git clone https://github.com/IntelRealSense/librealsense.git
# 更新ubuntu资源,获取最新稳定内核
sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
# 安装依赖
sudo apt-get install git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev
sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev
# 编译源码
cd librealsense
mkdir build && cd build
sudo cmake ..
sudo make && sudo make install
# 安装权限脚本
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger
# 查看内核版本
uname -r
# 编译脚本
### 根据github的issue,可能出现编译video使⽤的情况,可以⽤下⾯这⼏条来解决
sudo modprobe -r uvcvideo
sudo modprobe -r videobuf2_core
sudo modprobe -r videodev
./scripts/patch-realsense-ubuntu-lts.sh
cd ./script
./patch-arch.sh
chmod +x patch-arch.sh # 如果直接运⾏没有权限则先运⾏这个语句
### 在这⾥可能如果你的内核是4.15.0这样的版本的话可能会出现404 not found,通过查询sh脚本发现连接的下载
地址对于最后⼀位是0的情况没有列出,而是⽤4.15来表⽰,导致找不到这样的⽂件,所以可以通过修改sh脚本的⽅式
来编译。
将 SRC_VERSION_ID=linux-$SRC_VERSION_ID 改为 SRC_VERSION_ID=4.15
如果进入example里能运行成功demo则证明驱动安装成功。也可以用realsense-viewer检验。
对于frame not received的问题,可以这样解决:Intel参考文档
# 添加下载源
echo 'deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main' |
sudo tee /etc/apt/sources.list.d/realsense-public.list
sudo apt-get update
sudo apt-get install intel-realsense-dfu*
# 下载最新的bin
https://downloadcenter.intel.com/download/28377/Latest-Firmware-for-Intel-RealSenseD400-Product-Family?v=t
# 链接realsense D435
# 解压下载的bin⽂件
lsusb #查看连接的realsense D435在什么位置
intel-realsense-dfu -b 002 -d 002 -f -i ~/Intel/Signed_Image_UVC_5_10_13_0.bin
# -b the number of bus
# -d the number of device in the bus
# 再次进⼊librealsense⽬录
realsense-viewer # 可以使⽤