一塊兒作RGB-D SLAM(8) (關於調試與補充內容)

  「一塊兒作」系列完結後,我收到很多同窗給個人反饋。他們提了一些在程序編譯/運行過程當中的問題。我把它們彙總起來,組成了這個「補充篇」。你也能夠當作是一個Q&A。linux

  1. Q: OpenCV的版本?
    A: 我用的是2.4.9。可使用2.4系列,不會有太大差異。而3.0系列則在接口上有一些明顯的改動,可能須要修改源碼。
  2. Q: 第二講的點雲如何查看?
    A: 使用pcl_viewer。當點雲顯示時,先用r鍵復位視角,再用鼠標調整。
  3. Q: 如何調試代碼?
    A: 能夠在源程序裏用cout, cerr輸出,善用linux的管道與IO流便可調試。如需斷點,可用gdb, ddd等工具(雖然我不怎麼用)。

  此外,6,7兩講使用g2o,編譯過程可能對新手來講有些困難。如下是來自吳思穎同窗的反饋——感謝他力圖使他的寫做風格與我類似:c++

  你們好,我是小蘿蔔,在跟隨高幫主《一塊兒作RGBD-SLAM》的道路上,步步坎坷,終於把幫主博客裏的內容跑了個差很少,林林總總,各類問題,在諸位同窗的幫助下,雖然還不知其因此然,也算是解決了,下面把這些過程記錄下來,但願同窗們可以在《一塊兒作》的道路上,少走彎路~git

  在《一塊兒作》的過程當中,主要遇到如下三個問題,我把各個問題的病症以及我認爲的可能的緣由以及最終的解決方法都記錄下來,你們慢慢看(須要說明的是,我是linux新手,不少的基本操做都不熟悉,所以你們可能會看到一些很奇葩的解決方法,見笑啦,進步嘛,老是不那麼一路順風,折騰,就是折騰!)~github

  (一)《一塊兒作》系列的(6)、(7)兩篇源程序在編譯時通不過,錯誤以下圖ubuntu

  該問題的具體緣由不明,你們揣測是庫衝突,出如今使用從幫主博客《一塊兒作6》裏給出的g2o的地址下載的g2o源代碼進行編譯安裝時,解決的方法是,使用幫主在qq討論羣裏給出的g2o的壓縮包進行編譯安裝。這個版本的g2o源代碼,估計幫主會放在本身的github裏,與《一塊兒作》系列的源代碼打包在一塊兒供各位小蘿蔔們下載學習。(我已經更新了個人git)。緩存

  (二)問題(一)的衍生問題,出現問題(一)並按照上述問題解決方案進行解決後出現運行g2o_viewer時的core dumped(或者cannot open library: libg2o_solver_eigen.so)問題,猜想緣由是以前編譯安裝的g2o的相關共享庫沒有清除乾淨,解決方法爲:(1)刪除/usr/local/include/g2o,指令爲sudo rm -rf /usr/local/include/g2o;(2)刪除/usr/local/lib下有關libg2o_*.so的庫文件,先進入目錄cd /usr/local/lib,而後挨個(可多個同時)刪除sudo rm -rf libg2o_*.so libg2o_*.so libg2o_*.so(我一個一個刪的我會說……)網絡

  (三)這個是和編譯安裝新源代碼相關的問題,仍是和g2o有關,具體是個人系統是12.04的,昨天手滑點了更新,結果致使pcl_viewer 使用不了了,並且看提示好像不少pcl相關的庫都出現了問題,因而,我重裝了系統,而後再把相關的軟件都安裝後,g2o_viewer運行不了了,問題是error while loading shared libraries: libg2o_viewer.so: cannot open shared object file: No such file or directory, 經幫主指點,發現問題的緣由是在默認狀況下,編譯器只會使用/lib和/usr/lib這兩個目錄下的庫文件,經過源碼包進行安裝時,若是不指定--prefix會將庫安裝在/usr/local目錄下,而又沒有在文件/etc/ld.so.conf中添加 /usr/local/lib這個目錄。這樣雖然安裝了源碼包,可是使用時仍然找不到相關的.so庫,就會報錯。也就是說系統不知道安裝了源碼包。網絡上的解決方法是在/etc/ld.so.conf裏添加絕對路徑/usr/local/lib,做爲一個新手,我實在不知道怎麼樣添加進去,用gedit編輯以後,不能保存,用echo /usr/local/lib >> /etc/ld.so.conf沒反應,因而我就採用了奇葩方法:用gedit打開/etc/ld.so.conf,而後添加/usr/local/lib ,再把這個文件保存到home,而後sudo cp -i  ld.so.conf /etc/ld.so.conf,以後,執行ldconfig(這一步是必須的,目的是利用ldconfig執行文件將 /etc/ld.so.conf的數據讀入高速緩存中),再次運行g2o_viewer result_after.g2o(跑通《一塊兒作7》,在data文件夾下生成的),成功!app

  致謝:感謝博主&幫主&羣主:半閒居士&高翔,感謝哈工程的羣友邢會明(問題2的解決方案是由邢同窗提供的,咱們倆遇到的問題都同樣,估計小夥伴們也會在《一塊兒作》的時候遇到);函數

  網絡資源:linux共享庫,以及/etc/ld.so.conf文件的應用 (http://blog.csdn.net/oathevil/article/details/13564213)工具

/etc/ld.so.conf 文件介紹http://blog.csdn.net/yjkwf/article/details/7545002

/etc/ld.so.confldconfig PKG_CONFIG_PATH 

http://blog.csdn.net/allwtg/article/details/5145306

  最後,若是讀者朋友在運行此係列代碼時遇到困難,請聯繫我。若是您的問題很典型,我會更新到這一篇中。

  祝你們科研順利!

 

2015.9.22 更新

  如下是來自中科院張慧娟同窗的反饋:

 

「一塊兒作系列」問題總結

 

                                                      小蘿蔔2號 2015/9/22

 

  你們好,我是小蘿蔔2號,喜歡看霹靂五號、黑客帝國、人工智能、機器管家、機械公敵、機械姬、終結者……最近,迷上了羣主的「一塊兒作」系列,跌跌撞撞,終於把博客裏的內容跑了下來,固然長跑中遇到很多問題,多方尋求,獲得解答。在此,小蘿蔔2號把過程記錄下來,但願對各位小蘿蔔N號有所幫助。因爲小蘿蔔2號所懂很少,如有不對的地方,請你們指正,補充,小蘿蔔2號會不斷改進哦。(「一塊兒作8」中已經給出了6和7講編譯程序時遇到的三個問題,我也遇到了,參考8,這裏再也不贅述。)

 

  這裏以問答形式描述了整個過程,總結了9點。(嘗試嘛,總會磕磕絆絆)

 

Q:用的系統是什麼版本?

 

小蘿蔔2號:我使用的系統是Ubuntu14.04 for ros(indigo),與羣主的Ubuntu12.04不一樣,是易科機器人社區發佈的鏡像,網上可下載到。提供一個網址:http://blog.exbot.net/archives/1206 小蘿蔔2號同時是ros使用者,因此用U盤刻錄,而後安裝,若有不懂,可到網上搜索具體安裝過程。這個鏡像對於使用ros 的初學者很是方便,裏面裝好了集成環境,沒必要浪費不少時間去配置軟件,想用ros又想節省時間的小蘿蔔N號們能夠考慮下。

 

Q:Ubuntu14.04和Ubuntu 12.04的區別是什麼?

 

小蘿蔔2號:這裏咱們要講下依賴問題。在跑羣主程序過程當中,咱們用到三個庫opencv、PCL和g2o,而安裝它們通常都須要系統依賴庫,所以須要首先安裝各類依賴項。系統版本不一樣,依賴庫不一樣,而咱們用到的庫是基於某個依賴庫開發的,其餘版本(如高版本)的依賴庫可能不識別,致使沒法編譯成功。所以,建議安裝時參考庫的說明文檔,有安裝要求和步驟,儘可能按照說明安裝。

 

Q:OpenCV的版本?

 

小蘿蔔2號:我用的是opencv2.4.10,默認安裝方式。羣主說2.4系列差異不大,而3.0系列則在接口上有一些明顯改動,可能須要修改源碼。我的以爲,2.4.9和2.4.10沒差異,無影響。

 

Q:PCL 安裝問題?

 

小蘿蔔2號:我開始用的是Ubuntu12.04,在用命令行安裝PCL時,提示找不到依賴項,缺缺缺……因而採用源碼安裝(參考古月居的博客http://blog.csdn.net/hcx25909/article/details/8651840),裝了依賴庫,緣由未知,仍是編譯通不過,缺依賴項,缺缺缺……源碼安裝行不通,果斷改裝系統,Ubuntu14.04 for ros(indigo),簡單又粗暴吧,以後再用三句命令行安裝PCL,徹底沒問題。建議:若是非要用源碼安裝,每一個人電腦配置不一樣,遇到的問題不一樣,若實在解決不了,就忍痛割愛,系統重來。

 

Q:g2o安裝問題?

 

小蘿蔔2號:對於g2o,最好是用羣主github中提供的,通常Ubuntu12.04編譯沒有問題。我嘗試了三種方法,一一解析。(1)不過個人Ubuntu14.04中libQGLViewer有問題,libqglviewer-qt4-dev安裝不了,嘗試下載debin安裝,依然會提示缺乏依賴項。(2)因此乾脆捨棄g2o的可視化模塊g2o_viewer,安裝cmake-curses-gui這個包,經過gui來選擇想編譯的g2o模塊, 找到build apps,enter鍵修改狀態爲off,make,繼續sudo make install,安裝相應的lib、頭文件、執行文件。缺乏顯示模塊,只是沒法用g2o顯示圖像,不過該有的數據仍是都有的。(3)另外,若官網上下載最新g2o,參考安裝說明文檔,在Ubuntu14.04中編譯也能神奇經過,可是在跑「一塊兒作6和7」時,提示錯誤:core dumped。重啓系統,始終不行,緣由未知,考慮是庫衝突。因此不推薦。

 

嘗試安裝libqglviewer-qt4-dev_2.3.4.4_amd64.deb的過程當中的錯誤,你們能夠清楚看到n重依賴以及相互衝突:

 

 

 

Q:用PCL的cloudviewer把點雲顯示出來,爲何會是上下顛倒?

 

小蘿蔔2號:關於圖像上下翻轉問題,是由於opencv定義的座標系和pcl_viewer顯示座標系不一樣,opencv是x右y下,而pcl顯示是x右y上。解決方法:找到羣主程序image2PointCloud函數中,把計算點空間座標的公式的p.y值添加負號,這樣y方向就能夠正常顯示了,so easy。(或許還有別的方法)

 

(圖片上下翻轉)

 

Q:文件路徑問題

 

小蘿蔔2號:上面的錯誤是跑3時的一個提示,是說沒有讀到數據,沒有點雲。讀取的parameters.txt以及存儲的點雲數據,最好給出具體的路徑。如:/home/document/RGBD_tutorial/part3/code/data/,這樣程序才能讀取到數據或者保存到正確的文件夾裏。

 

Q:在編譯6和7時遇到c++11不兼容的問題?

 

小蘿蔔2號:

 

 

 

在確保程序編譯經過,而在運行時遇到c++0x_warning.h:32:2 error,我曾嘗試在CMakeLists.txt中添加一段代碼,然並沒卵用,或許有人能夠的(可嘗試)。參考:http://blog.csdn.net/zyh821351004/article/details/46521319

 

添加的代碼:

 

 

 

多半是由於用的不是羣主github上提供的g2o版本,因而g2o重裝,程序順利運行,聽着機子跑程序時嘩嘩的聲音,是否是心裏無比高興。

 

Q: 在cmake時會出現相似的WARNING?

 

 

小蘿蔔2號:注意這個是warning,不是error,不影響編譯。緣由多是cmake裏的find_package命令把/usr/lib給找出來了,引起了warning。(羣主告訴偶滴,直接忽略)

 

 

 

很是感謝羣主及各位提供幫助的小夥伴,但願對遇到類似問題的小蘿蔔N號們有幫助。

 

-- 個人反饋:

ubuntu 1404下是能夠用g2o_viewer的,只要你手動把依賴項配好。一共有三個依賴項,配好以後g2o_viewer照常使用:

相關文章
相關標籤/搜索