最近開始做研究生畢設,有一部分因為沒有什麼好的思路,就把以前用過的PCL點雲搬出來,重新用源碼裝了一遍PCL,一開始裝的過程中沒什麼大問題,在後面用的時候碰到了很多小問題,特此記錄。 1.PCL版本問題 如果你用ROS的話,安裝的時候會自帶PCL的1.7版本,不過本著用源碼安裝的習慣,我們還是從gi ...
最近開始做研究生畢設,有一部分因為沒有什麼好的思路,就把以前用過的PCL點雲搬出來,重新用源碼裝了一遍PCL,一開始裝的過程中沒什麼大問題,在後面用的時候碰到了很多小問題,特此記錄。
1.PCL版本問題
如果你用ROS的話,安裝的時候會自帶PCL的1.7版本,不過本著用源碼安裝的習慣,我們還是從github上下載源碼來自行安裝。目前最新版是1.9,我自己安裝1.9沒碰到什麼版本衝突問題,也就是在後面跑代碼的時候會提示可能與已安裝的1.7版本有衝突,不過是warning我也就懶得管了,不知道可否刪掉ROS中自帶的那個PCL。但在跟同學的交流過程中,發現她以前源碼安裝1.8版本的時候跟自帶的1.7衝突,至於到什麼地步也沒問,這麼看來確實有版本的問題,但是網上那麼多源碼安裝的教程,應該問題不嚴重。
2.CMakelists里指定PCL的版本
因為電腦里PCL有兩個版本,我們想用的是1.9,因此需要指定版本。一般按照下麵的寫就足夠了。
find_package(PCL 1.9 REQUIRED)
INCLUDE_DIRECTORIES(${PCL_INCLUDE_DIRS})
LINK_DIRECTORIES(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
不需要專門set安裝的路徑,最後一行的add_definitions一定要加上,不然會報錯。最後記得在target_link_libraries裡加上${PCL_LIBRARIES}。
3.關於VTK的版本問題
如果用到了PCL中visualization的模塊,需要配置一下VTK,其實電腦里(ROS?)自帶了6.2版本的VTK,但是在安裝PCL的時候提示版本有問題,我就用源碼裝了一遍VTK的最新的8.2版本,然後可以安裝成功,我也就沒管了。後來我想把算出來的點雲可視化出來,用了PCL的visualization::CloudViewer函數,然後就報VTK的錯,找不到VTK的庫,沒有對應函數之類的問題。在網上找了好久才發現,是VTK版本太新,7.1以後的版本有幾個函數名變了。
GetTupleValue -> GetTypedTuple
SetTupleValue -> SetTypedTuple
InsertTupleValue -> InsertTypedTuple
InsertNextTupleValue -> InsertNextTypedTuple
最簡單的辦法就是重新下一個舊版本的VTK自己編譯,於是我在gitlab上找到了對應的代碼,我建議下.zip格式的包,我一開始下的tar.gz解壓後總是安裝失敗。然後刪掉之前最新版安裝遺留下來的文件,慎用rm *。重新安裝之後就沒有顯示的問題了。
4.CMakelists.txt里需要添加的組件
一開始我只在find_package裡加了PCL 1.9 REQUIRED,後來發現程式經常crash,我用的是QT,搞不太明白,後來看了一下Compile Output,給我警告io features可能被disabled,於是我就改了一下find_package
find_package(PCL 1.9 REQUIRED COMPONENTS common io)
還有
target_link_libraries(generate_point_cloud ${PCL_LIBRARIES} ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES})
這下程式就沒有crash了。
先記這麼多,以後如果有別的小問題會繼續更新。