ElasticFusion on Jetson Xavier
环境配置
安装依赖
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
nmd,wsm?中间发现包下不下来,我以为是代理出问题了,看了一下是连不上,结果调了半天还是连不上,然后ping了一下国内的网站也ping不通,才发现网口没网,我以为网口出了问题,最后捣鼓半天,去network里设置代理的时候才发现不知道飞行模式为什么开了,卧槽。
然而我弄好了飞行模式发现还是无法科学上网,这就很迷惑了,在我一番尝试之后,我发现是特么校园网搞的鬼,就算我直接连接网线,也得登录校园网的系统才能上其他的网站,最可气的是它可以裸连百度,在我连接bilibili的时候才自动跳转到登录界面,我佛了。
测试proxychains
proxychains4 curl www.google.com
会有输出的
依赖项
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
OpenNI 2
之前因为无法安装OpenNI 2我以为凉了,但是去issue里面看发现有人编译了arm 64的版本
编译步骤参考下面的教程,来源
由于上面那个老哥上传的Arm 64版本已经把OpenNI2 build要修改的文件更改完了,我们直接做libfreenect build之后的东西就可以了。
cd libfreenect mkdir build cd build cmake .. make sudo make install # Build the OpenNI2 driver cmake .. -DBUILD_OPENNI2_DRIVER=ON make # Copy libfreenect to the OpenNI2 driver directory Repository=../../Bin/Arm-Release/OpenNI2/Drivers cp -L lib/OpenNI2-FreenectDriver/libFreenectDriver* ${Repository} # You may have to set permissions to be able to use the Sensor sudo usermod -a -G video ubuntu # Switch back to OpenNI2 directory here # Now copy the libraries and include files to /usr sudo cp -r Include /usr/include/openni2 sudo cp -r Bin/Arm-Release/OpenNI2 /usr/lib/ sudo cp Bin/Arm-Release/libOpenNI2.* /usr/lib/ # Create a package config file # this will enable ubuntu to find the location of the drivers, libraries and include files. sudo gedit /usr/lib/pkgconfig/libopenni2.pc and fill it with this: prefix=/usr exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include/openni2 Name: OpenNI2 Description: A general purpose driver for all OpenNI cameras. Version: 2.2.0.0 Cflags: -I${includedir} Libs: -L${libdir} -lOpenNI2 -L${libdir}/OpenNI2/Drivers -lDummyDevice -lOniFile -lPS1080.so # To make sure it is correctly found, run pkg-config --modversion libopenni2 # which should give the same version as defined in the file above (2.2.0.0) # Linux has used the udev system to handle devices such as USB connected peripherals. cd Packaging/Linux sudo cp primesense-usb.rules /etc/udev/rules.d/557-primesense-usb.rules
- 在上面cmake一步就遇到了问题,因为之前编译的路径不同有缓存,两者不匹配了。解决办法把build文件夹删了重新建一个,或者
make clean
也可以。 - 一路下来没什么问题,不过NIViewer我运行不了,本来的项目了就没有,不管了,我就当可以用吧。(后来证明其实没问题)
安装Pangolin
Pangolin是一个面向OpenGL显示、交互的轻度开发库。
必要依赖
- 下载源码
git clone https://github.com/stevenlovegrove/Pangolin.git
安装OpenGl
sudo apt install libgl1-mesa-dev
Glew
sudo apt install libglew-dev
CMake
sudo apt install cmake
推荐依赖
- Python2 / Python3 (自带了)
Wayland
sudo apt install pkg-config sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
出了个问题,就是libxkbcommon-dev
安装的时候需要libxkbcommon0
的版本为0.5.0,但是已经安装了0.8.0。解决办法就是把libxkbcommon0
先卸载了...再安装libxkbcommon-dev
。(如果遇到了就卸载一下,没遇到更好)
Building
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
Build ElasticFusion
这个作者写了个脚本,但是我用不了,把前面装驱动还有Pangolin的都删了,开始build ElasticFusion。这个比还调整过文件目录,搞的自己写的脚本都用不了。
主要编译下面三个部分
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
的)。
这里编译又遇到了问题出现了 c++错误unrecognized command line option '-msse2' '-msse3'
在CMakeList.txt
里面把涉及到这两个命令的msse
参数删掉就顺利编译通过了,因为msse
是针对x86平台的,用来启动Streaming SIMD Extensions (SSE)
,简单来说就是嘤特尔搞的运算加速(一种运算实施在几个数据上)。Arm不支持,删了就行了。
GPUTest的编译:
编译Core成功后,再编译GPUTest就很容易了。
cd ElasticFusion
cd GPUTest
cd src
mkdir build
cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
我编译的时候发现make install
会报Nothing to make
的问题,不过没管它,直接sudo ldconfig
就可以了
GUI的编译:
cd ElasticFusion
cd GUI
cd src
mkdir build
cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
手动build又遇到问题了Unable to find SuiteSparse
还好有大哥提了个issue
把ElasticFusion/Core/src/FindSuiteSparse.cmake
里面的内容用附件中的文件内容替换
ElasticFusion的数据集测试
最后进入ElasticFusio/GUI/build/中,使用ElasticFusion进行运行数据集:
./ElasticFusion -l fr1_xyz.klg
跑通了,真是艰难啊...
Issues
invalid texture reference
使用官方的数据集进行测试的时候发现了invalid texture reference
的错误,作者说是core build
中CMake的参数问题。因为Xavier的架构不在此列,直接把Core/src/CMakeList.txt
里面这行删除,重新编译。
set(CUDA_ARCH_BIN "30 35 50 52 61" CACHE STRING "Specify 'real' GPU arch to build binaries for, BIN(PTX) format is supported. Example: 1.3 2.1(1.3) or 13 21(13)")
根本不是这个问题,在墨釉的博客中找到了答案,就是上面在每次make
后要执行sudo make install
与sudo ldconfig
来找到动态链接库,否则测试数据集的时候会出错。
重建之后的结果。
One comment
Facebook的大哥还是靠谱点,很多其他开源项目的作者只是考虑在某个特定环境/平台下实现就完事了,根本没考虑,也不在乎其他平台下实现可能遇到的问题