1. 程式人生 > 其它 >LiO-SAM編譯過程中PCL版本的適用問題

LiO-SAM編譯過程中PCL版本的適用問題

技術標籤:LiDar SLAMlinux自動駕駛

LiO-SAM編譯過程中PCL版本的適用問題@TOC

問題

我最開始的PCL版本是目前最新的pcl-1.11,這個版本編譯LIO-SAM時,使用pcl_conversions.h的函式(用來轉換ros pointCloud2 )會出現帶有boost::shared_ptr的函式未定義的問題,如下:
undefined reference to pcl::PCLBasepcl::PointXYZI::setIndices(boost::shared_ptr<std::vector<int, std::allocator > const> const&)


檢視github上pcl-1.11的release notes發現以下內容:
Starting with PCL 1.11, PCL uses std::shared_ptr and std::weak_ptr instead of the boost smart pointers. The change leverages type aliases included with the 1.10.0 release. PCL 1.11 also introduces pcl::index_t which should be used for the size of point types instead of int, std::size_t, etc. EOL for deprecated features is also explicitly mentioned in the deprecation compile time warnings

pcl_conversions是1.7版本的函式,在pcl-1.11中已經不支援,有位老哥介紹了他的解決方案,但是我試過了,首先他說的“從perception_cpl.git直接拉下2.1.0和1.71兩個版本”就沒法實現,因為那裡沒有2.1.0和1.7.1的版本branch。

解決方案

解除安裝 pcl-1.11

這裡介紹一個簡單的解除安裝cmake原始碼安裝的包的解除安裝方法:首先找到install_manifest.txt檔案的資料夾(一般就在原始碼資料夾裡),開啟命令列,輸入:

cat install_manifest.txt | sudo xargs rm

安裝pcl-1.7

我選擇的是ROS模組的pcl-1.7(聽說pcl-1.8也可以,讀者不妨一試,手動狗頭),安裝也很簡單, 可以參考

這個部落格