[build error]Converting pcl::PCLPointCloud2 to sensor_msg::PointCloud2
While extracting point cloud from stl model data to publish it using ROS topic, I need to convert pcl::PCLPointCloud2
to sensor_msg::PointCloud2
.
So I did like below::
#include <pcl/io/vtk_lib_io.h>
#include <pcl/PolygonMesh.h>
#include <pcl/PCLPointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>
#include "sensor_msgs/PointCloud2.h"
int main(int argc, char* argv[])
{
const std::string meshFileName = "test.stl";
pcl::PolygonMesh testMesh;
pcl::io::loadPolygonFile(meshFileName, testMesh);
pcl::PCLPointCloud2 pc2;
sensor_msgs::PointCloud2 p_msg;
pcl_conversions::fromPCL(pc2, p_msg);
}
But I got error below. How can I fix it? Or is there another way to convert PCLPointCloud2 to ROSMsg?
Scanning dependencies of target stl2pcd
[ 50%] Built target pcdread
[100%] Building CXX object trypkg/CMakeFiles/stl2pcd.dir/src/stl2pcd.cpp.o
Linking CXX executable /home/wkentaro/semi/devel/lib/trypkg/stl2pcd
CMakeFiles/stl2pcd.dir/src/stl2pcd.cpp.o: In function `pclconversions::fromPCL(unsigned long const&, ros::Time&)':
stl2pcd.cpp:(.text.ZN15pclconversions7fromPCLERKmRN3ros4TimeE[ZN15pclconversions7fromPCLERKmRN3ros4TimeE]+0x7e): undefined reference to `ros::TimeBase
Asked by wkentaro on 2015-03-04 13:51:35 UTC
Answers
I use pcl_ros
instead of pcl_conversions
. It defines a very handy fromROSMsg function:
#include <pcl_ros/transforms.h>
sensor_msgs::PointCloud2 rosCloud;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr pclCloud (new pcl::PointCloud<pcl::PointXYZRGB>); // creates a shared pointer
pcl::fromROSMsg(rosCloud, *pclCloud);
It also converts back:
pcl::toROSMsg(*pclCloud, rosCloud);
Asked by Adam Allevato on 2015-05-01 10:51:29 UTC
Comments
Thanks a lot!
Asked by wkentaro on 2015-05-02 03:17:20 UTC
No problem. Please mark the answer as correct if you think it's good.
Asked by Adam Allevato on 2015-05-02 09:34:35 UTC
Comments