InfiniTAM艱辛的配置過程

因爲科研需要,自己配置SLAM室內三維重建的一些相關東西,之前配置了PCL 的KinectFusion配置過程因爲安裝的版本不對摺騰了好久,在成功運行之後,發現PCL實在是太龐大了,一開始編譯是144個項目,因爲對它不瞭解,不敢隨意往下刪減項目,再加上類的繼承一層有一層,想在上面做修改實在是費勁,所以重新尋找出路。

聽了博士師姐的建議來配置infiniTAM,配置過程照理說該是很簡單的,依賴庫並不多,但是過程也是十分費勁。必要的依賴庫只有freeglut,我還裝了cuda8.0和openni。下面具體介紹一下過程。

配置環境及軟件:

Win7 64位

cuda 8.0 (我是配置在我的筆記本上GT940M)

openni 2-2.2.0.33-64位-win

Freeglut 2.8.0

VS 2012

cmake 2.8.10(32bit)【cmake的版本不影響配置成功與否】

Kinect v1

編譯freeglut應該不難,打開運行就可以,具體出現了一點問題都列在下面了。可以參考這個博客http://www.cnblogs.com/gnim/p/3536399.html

安裝cuda 沒什麼難的,就是軟件似的傻瓜安裝,安裝了系統默認位置。(自己查閱的資料,應該只有N卡,才能用cuda)

編譯完之後,我又用程序測試一下,確保freeglut是正確配置了。接下來安裝openni2,它相當於一個Kinect 開發的工具包吧,驅動需要用kinect for sdk,開始時用了1.8的版本,測試niviewer運行出錯,換了1.7,不出錯了,但是間歇性顯示錯誤(只顯示深度圖,彩色圖噪聲嚴重且大小不對),具體問題是在哪裏,我現在也不知道。

我現在只是測試了讀入圖片,kinect並沒有鏈接測試,需要開學後繼續弄。

用cmake編譯InfiniTAM的過程:

InfinITAM下載的是v2,不知道爲啥,我編譯v1總是出錯,但是師姐用Linux編譯都可以順利運行。。。。/(ㄒoㄒ)/~~可能是我水平比較低,但是找不出原因。

cmake編譯: source code加載InfiniTAM中cmakelist.txt所在文件夾位置;build the binaries 是你自己設定的存放位置,文件名不建議用中文。

點擊configure,接下來報錯,是因爲未找到glut位置,手動添加freeglut.h和lib的路徑,不用添加你配置的系統中的路徑,直接添加編譯出來的路徑就可以啦。

freeglut_include_direction  F:\Infinitam_dependecies\freeglut-2.8.0\include

freeglut_library_direction  F:\Infinitam_dependecies\freeglut-2.8.0\lib\x86\freeglut.lib   //   這裏都是我自己的電腦上的路徑

接下來,因爲沒想用openni2,所以也沒加路徑,cuda全都是默認尋找到的路徑。此時,該找的路徑都找到了,多點幾次configure,再點擊generate。

生成後,點擊InfiniTAM.sln打開後,默認的是all_build是啓動項,沒關係,直接生成解決方案,我這裏是成功7個,跳過1個,不過跳過的好像是zero_check,沒什麼影響。

接下來,就是按照下面的路徑改一下加載的文件路徑就可以啦,點擊運行biubiu就出現下面的截圖啦。

這裏的dll是我用臺式機的2010編譯的,因爲freeglut2.8.0中visualstudio下沒有2012,保險起見,用2010編譯的。
[如果配置Openni2大家還需要拷貝\OpenNI2\Redist目錄下的所有文件到VS的工作目錄(如果不通過VS啓動,則拷貝到程序執行目錄)纔可以正確運行,其中包含了OpenNI2啓動所需的動態鏈接庫等內容.
從網上看到,用openni2貌似不能用sensorkinect驅動了,需要用kinect for sdk來驅動,好吧,我剛卸載了,再裝上。看能不能行。安裝sdk1.8版本驅動好像有問題,又換了1.7版本,這時候niviewer.exe可以正常運行了,但是我什麼都沒有動過,一天只出現了一次正確的結果(help,I don't know what's wrong)
運行工程說出錯,把openni2.dll又放到了system32和syswow64中。]//我配置Openni2沒有成功,因爲我找的SDK的驅動跑測試實例Niviewer總是出錯。

修改Infinitam這個項目下的infinitam.cpp中主函數中的文件輸入位置,同時把啓動項設置成Infinitam這個項目。
在main函數裏const char *arg1 = "F:\\InfiniTAMv2\\InfiniTAM\\Files\\Teddy\\calib.txt";
const char *arg2 = "F:\\InfiniTAMv2\\InfiniTAM\\Files\\Teddy\\Frames\\0000.ppm";//這樣子是加載單張照片,寫成%04i.ppm就可以讀入同文件夾下給的連續圖像數據了
const char *arg3 = "F:\\InfiniTAMv2\\InfiniTAM\\Files\\Teddy\\Frames\\0000.pgm";//這裏也是%04i,

把具體的每一張圖片序號0000.ppm改成%04i.ppm和%04i.pgm就可以讀入序號連續的圖像(從0000開始)。

這是我電腦上的路徑,其中arg2是RGB圖的路徑,arg3是深度圖的路徑。(剛開始這裏出錯了,因爲我添加路徑時忘記加兩根斜槓)在後面調用函數進行傳參時會傳給imagesource。
根據這個界面的提示,n表示下一幀(一幀一幀的輸入),b表示一次輸入該文件夾下所以的圖像,以視頻流輸入(建議在添加文件路徑時,用%04i,表示的文件的名字格式,若是輸入0000.ppm這樣的文件,則只能讀入當前指定的這幀圖像)。


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我繼續配置了好久的openni2,但是並不順利也沒有出現預期結果。所以放棄了,不打算用Kinect v1來獲取數據了,直接使用現成的數據庫先做吧,以後如果需要(我測試了用Openni1來驅動可以順利運行niviewer.exe),我就在代碼裏用openni1來驅動,把代碼再加進去吧。

我用的數據是NYU的數據,但是下載下來的pgm需要再經過處理,使用NYU裏提供的toolbox裏的matlab代碼,並做了一些修改。

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