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

半閒居士發表於2015-08-30

  “一起做”系列完結後,我收到不少同學給我的反饋。他們提了一些在程式編譯/執行過程中的問題。我把它們彙總起來,組成了這個“補充篇”。你也可以看成是一個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照常使用:

 

相關文章