(1) 關于pcl::PCLPointCloud2::Ptr和pcl::PointCloud<pcl::PointXYZ>兩中資料結構的差別
差別:
那麼要實作它們之間的資料轉換,
舉個例子
程式中紅色部分就是一句實作兩者之間的資料轉化的我們可以看出
那麼依照這種的命名風格我們可以檢視到更多的關于的資料格式之間的轉換的類的成員
(1)
void pcl::fromPCLPointCloud(const pcl:PCLPointCloud2 & msg
pcl::PointCloud<PointT> & cloud
const MsgFieldMap & filed_map
)
函數使用field_map實作将一個pcl::pointcloud2二進制資料blob到PCL::PointCloud<pointT>對象
使用 PCLPointCloud2 (PCLPointCloud2, PointCloud<T>)生成自己的 MsgFieldMap
(2)
void pcl::fromPCLPointCloud2(const pcl::PCLPointCloud & msg
pcl::PointCloud<pointT> &cloud
)
把pcl::PCLPointCloud資料格式的點雲轉化為pcl::PointCloud<pointT>格式
(3)
void pcl::fromROSMsg(const pcl:PCLPointCloud2 & msg
pcl::PointCloud<PointT> & cloud
const MsgFieldMap & filed_map
)
(4)
pcl::PointCloud<PointT> & cloud
在使用fromROSMsg是一種在ROS 下的一種資料轉化的作用,我們舉個例子實作訂閱使用kinect釋出 /camera/depth/points 從程式中我們可以看到如何使用該函數實作資料的轉換。并且我在程式中添加了如果使用PCL的庫實作在ROS下調用并且可視化,
那麼對于這一段小程式實作了從釋出的節點中轉化為可以使用PCL的可視化函數實作可視化,并不一定要用RVIZ來實作,是以我們分析以下其中的步驟,在訂閱話題的回調函數中,
void cloud_cb (const sensor_msgs::PointCloud2ConstPtr& input) //這裡面設定了一個資料類型為sensor_msgs::PointCloud2ConstPtr& input形參
{
sensor_msgs::PointCloud2 output; //ROS中點雲的資料格式(或者說是釋出話題點雲的資料類型)
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGB>); //對資料轉換後存儲的類型
output = *input;
pcl::fromROSMsg(output,*cloud); //最重要的一步驟實作從ROS到PCL中的資料的轉化,同時也可以直接使用PCL庫實作可視化
viewer.showCloud(cloud); //PCL庫的可視化
pub.publish (output); //那麼原來的output的類型仍然是sensor_msgs::PointCloud2,可以通過RVIZ來可視化
}
那麼也可以使用
這一段代碼來實作儲存的作用。那麼見到那看一下可視化的結果

使用pcl_viewer 可視化儲存的PCD檔案
可能寫的比較亂,但是有用到關于PCL中點雲資料類型的轉換以及可視化等功能可以參考,同時歡迎有興趣者掃描下方二維碼或者QQ群
與我交流并且投稿,大家一起學習,共同進步與分享