ubuntu14.04調試ElasticFusion之Kinect 的使用

  上一篇文章詳細介紹了在ElasticFusion上測試數據集的編譯過程,接下來我將介紹下如何使用Kinect 1深度相機實時構建場景三維模型。

環境:ubuntu14.04 + cuda7.5 + GTX 1070

相機:Kinect 1

1、安裝Kinect驅動

cd OpenNI2
git clone https://github.com/OpenKinect/libfreenect.git 
cd libfreenect
mkdir build
cd build
cmake .. -DBUILD_OPENNI2_DRIVER=ON
make -j8
cp -L lib/OpenNI2-FreenectDriver/libFreenectDriver.so ~/OpenNI2/Bin/x64-Release/OpenNI2/Drivers

2、獲取權限

cd OpenNI2
sudo cp libfreenect/platform/linux/udev/51-kinect.rules /etc/udev/rules.d
sudo reboot 重啓

連接Kinect ,使用 lsusb 確保有以下三個輸出:

xbot camera

xbot motor

xbot audio

3、安裝成功測試

cd ~/OpenNI2/Bin/x64-Release/
./NiViewer

如果安裝成功的話,會出現Kinect相機同時獲取rgb 圖像和depth圖像的界面。

接下來,就是在~/ElasticFusion/GUI/build 下運行./ElasticFusion,如果幸運的話就可以利用kinect實時構建場景地圖了。

點擊窗口左側的save可以保存.ply文件,就是重建得到的三維地圖;直接關閉窗口,可以得到.freiburg文件,就是估計的相機軌跡。

ply文件可以通過MeshLab軟件打開,下載地址http://meshlab.sourceforge.net/,這個軟件還可以對重建後的模型進行處理,去除雜點之類的。

freiburg文件保存的是每一幀對應的時間戳;位置(x,y,z);姿態四元數(qx,qy,qz,qw),利用draw.py繪製估計軌跡

#!/usr/bin/env python
# coding=utf-8

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d


f = open("./dyson_lab.klg.klg.freiburg")
x = []
y = []
z = []
for line in f:
    if line[0] == '#':
        continue
    data = line.split()
    x.append( float(data[1] ) )
    y.append( float(data[2] ) )
    z.append( float(data[3] ) )
ax = plt.subplot( 111, projection='3d')
ax.plot(x,y,z)
plt.show()

python draw.py

得到軌跡

但是kinect的驅動不是很穩定,開始我用kinect相機測試成功了,但是過了幾天再運行./ElasticFusion就出現了問題。

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

卸載重新安裝驅動,嘗試了很多方法都沒有成功,後來我在github中看到可以利用Logger2來解決這個問題,通過Kinect 相機直接獲取真實場景的klg文件(就是將rgb和depth直接轉換成了klg格式),利用測試數據集的方式得到真實場景的三維地圖。

下載編譯Logger2參考了博客

點擊record就可以開始捕獲場景信息,退出後在~/Kinect_Logs中看到保存的.klg文件;將該klg文件複製到~/ElasticFusion/GUI/build,運行./ElasticFusion -l  *.klg 就可以得到重建模型和估計軌跡了。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章