一起做RGB-D SLAM(8) (關於調試與補充內容)


  “一起做”系列完結后,我收到不少同學給我的反饋。他們提了一些在程序編譯/運行過程中的問題。我把它們匯總起來,組成了這個“補充篇”。你也可以看成是一個Q&A。

  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,編譯過程可能對新手來說有些困難。以下是來自吳思穎同學的反饋——感謝他力圖使他的寫作風格與我相似:

  大家好,我是小蘿卜,在跟隨高幫主《一起做RGBD-SLAM》的道路上,步步坎坷,終於把幫主博客里的內容跑了個差不多,林林總總,各種問題,在諸位同學的幫助下,雖然還不知其所以然,也算是解決了,下面把這些過程記錄下來,希望同學們能夠在《一起做》的道路上,少走彎路~

  在《一起做》的過程中,主要遇到以下三個問題,我把各個問題的病症以及我認為的可能的原因以及最終的解決方法都記錄下來,大家慢慢看(需要說明的是,我是linux新手,很多的基本操作都不熟悉,因此大家可能會看到一些很奇葩的解決方法,見笑啦,進步嘛,總是不那么一帆風順,折騰,就是折騰!)~

  (一)《一起做》系列的(6)、(7)兩篇源程序在編譯時通不過,錯誤如下圖

  該問題的具體原因不明,大家揣測是庫沖突,出現在使用從幫主博客《一起做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文件夾下生成的),成功!

  致謝:感謝博主&幫主&群主:半閑居士&高翔,感謝哈工程的群友邢會明(問題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照常使用:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM