当年做毕设踩的一些坑,留这里记录一下。
安装依赖
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
中间发现包下不下来,我以为是代理出问题了,看了一下是连不上,结果调了半天还是连不上,然后ping了一下国内的网站也ping不通,才发现网口没网,我以为网口出了问题,最后捣鼓半天,去network里设置代理的时候才发现不知道飞行模式为什么开了。
测试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我以为凉了,但是去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是一个面向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
。(如果遇到了就卸载一下,没遇到更好)
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
这个作者写了个脚本,但是我用不了,把前面装驱动还有Pangolin的都删了,开始build ElasticFusion。这个比还调整过文件目录,搞的自己写的脚本都用不了。
主要编译下面三个部分
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不支持,删了就行了。
编译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
就可以了
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
里面的内容用附件中的文件内容替换
最后进入ElasticFusio/GUI/build/中,使用ElasticFusion进行运行数据集:
./ElasticFusion -l fr1_xyz.klg
跑通了,真是艰难啊...
使用官方的数据集进行测试的时候发现了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
来找到动态链接库,否则测试数据集的时候会出错。
重建之后的结果。