Mac 上的 pcl 一直有問題。
找不到 pcl_viewer 查看 pcd 文件。寫個程序用 pcl::visualization::CloudViewer 查看點雲,遇到 Runtime Exception。
今天下午下定決心搞定 pcl 。
pcl 以前是使用 homebrew 安裝的,homebrew 安裝的是 1.8.0 的版本,講道理應該沒有問題。
嘗試到 pcl 的官網上,按照 Mac 的安裝流程安裝 pcl 1.6.0,依賴項裝着裝着,發現 pcl 1.6.0 依賴的 OpenNI 不支持當前的系統(macOS Sierra 10.12.2)。現在距離 pcl 1.6.0 發布已經過去好多年了,QHull 的依賴版本還是 2009.1,確實對 pcl 1.6.0 沒有信心。
所以在 Github 上下載了 pcl 1.8.0 的源碼來自己安裝。
為了方便起見,依賴項都使用 homebrew 安裝了。
VTK
boost 版本是 1.6.3,VTK 版本是 7.1.0,在編譯 pcl 的時候會遇到 vtkObjectBase undefined 的錯誤,按照這個鏈接 https://github.com/PointCloudLibrary/pcl/issues/1192 ,把 vtk 7.1.0 卸載了,換上 vtk 6.3.0(同樣 vtk 是自己編譯安裝)。
在編譯的過程中需要注意,有一些 redefinition 的錯誤,這是由於編譯源碼和 homebrew 各安裝了一次。在 /opt/local/ 的頭文件和庫是編譯源碼安裝的,在 /usr/local/ 的頭文件和庫是 homebrew 安裝的。刪除 /opt/local/ 中的那一份就可以了。
編譯好 pcl 之后發現 pcl_vie[Tab][Tab]…還是沒有 pcl_viewer 這個可執行文件。上網搜,發現其實 pcl 在 Mac 下將 pcl_viewer 當做了 app 安裝。在 /usr/local/bin 中可以發現有三個 pcl_*.app,只需進入 app 目錄,找到相應的可執行文件,拷貝出來。(其實 homebrew 安裝 pcl 的選項中就有 --without-apps 的選項。)
CloudViewer NSException
運行代碼想要使用 CloudViewer 現實點雲,發現存在 Runtime Exception —— NSException,在 github 的 issues 中找到有人討論過這個問題,https://github.com/PointCloudLibrary/pcl/issues/253 。無法解決,只能使用 PCLVisualizer 代替。