簡述
本文主要是提供DSO如何在windows下編譯運行的方法。
(總是一些人建議用Linux,在我看如果是學習的前提下,編譯這些源代碼,linux很nice;如果是做一些基於windows下的應用,代碼的遷移可躲不開。)
源代碼地址:https://github.com/JakobEngel/dso
Win下修改代碼地址:https://github.com/jhincapie/DSOonWin
一、源碼不能在Windows下直接運行原因
我直接下載Github源碼,試圖在windows下運行DSO,遇到了以下問題。
-
Unix一些頭文件,在windows下沒有對應頭文件。
一些頭文件中包含了dso使用的基本功能,如時間、usleep等等,這些頭文件包括unistd.h、dirent.h。
-
代碼中基本函數,如swap,會導致編譯錯誤,如下圖。這些錯誤很讓人發懵,居然是C++的庫文件vector報錯。
二、解決方案(需要使用Nuget)
我嘗試了自己修改,比如重寫timeval和swap,沒有改完。但是在休息的時候看了下github,有人已經改過了,萬分驚喜。下載了嘗試編譯,除了一些小問題,可以直接運行。
源碼Github地址:https://github.com/jhincapie/DSOonWin
如何運行DSO
-
在自己的Visual Studio中擴展安裝Nuget,這是一個包管理器,我也只用過幾次,大致功能就是可以直接拉取一些常見的庫,如Eigen,OpenCV,SuiteParse的編譯好版本,並且配置好在工程中。
但是需要注意:配置有時候可能會失效,則需要我們手動解決這個問題。
-
下載上述地址的代碼,使用VS2015及以上版本打開(若提示需要升級解決方案,確認即可)。按照上述主頁的方法,用Nuget更新所需庫,並且修改一處,見下圖。
-
可能出現問題:png,jpeg,zlib幾個庫的依賴項未配置。
出現以下錯誤:
解決方法:手動配置缺失lib的目錄,以jpeg舉例,依照下圖可以很容易找到:
運行時,可能還會出現找不到dll,在上述類似目錄中找到dll複製到exe目錄下即可。
運行結果如下,跑的是tum sequence 14
三、總結與數據集
- Nuget是個好東西,免去了很多麻煩。需要常見的slam用的庫都能找到,可以用點精力多學習一下。
- Github資源很多,做一下白嫖黨也不是不可以,但是記得給個Star。
- 自己在百度網盤保存了一些單目數據集,可供下載:
鏈接:https://pan.baidu.com/s/1f556-SR1opC2A0JGI8uH3A
提取碼:0e7z