[ros-users] ICP & PCL with foreign data
paulhebert
paulhebert at gmail.com
Fri Dec 10 23:57:24 UTC 2010
Hi All,
I can't for the life of me, figure what is going wrong. Perhaps, I do not
know the structure of PointCloud very well yet but I keep getting a segfault
at the last line in "reg.align". I would like to fill in the point cloud
with a buffer of floats/doubles and then run ICP on the two cloud points. Is
this the right way to do it? It seems to work if I use PCD files but not
when I manually input data like below. Hope someone can help.
// Fill in the model cloud data
model.width = modelN;
model.height = 1;
model.is_dense = false;
model.points.resize (model.width * model.height);
for (size_t i = 0; i < model.points.size (); i++)
{
model.points[i].x = (float)modelPointsT[3*i + 0];
model.points[i].y = (float)modelPointsT[3*i + 1];
model.points[i].z = (float)modelPointsT[3*i + 2];
}
// Fill in the model cloud data
data.width = dataN;
data.height = 1;
data.is_dense = false;
data.points.resize (data.width * data.height);
for (size_t i = 0; i < data.points.size (); i++)
{
data.points[i].x = (float)dataPointsT[3*i + 0] + 5;
data.points[i].y = (float)dataPointsT[3*i + 1];
data.points[i].z = (float)dataPointsT[3*i + 2];
}
pcl::PointCloud<pcl::PointXYZ> output;
pcl::IterativeClosestPointNonLinear<pcl::PointXYZ, pcl::PointXYZ> reg;
reg.setMaxCorrespondenceDistance (0.1);
reg.setTransformationEpsilon (1e-6);
reg.setMaximumIterations (50);
reg.setInputCloud(boost::make_shared<const
pcl::PointCloud<pcl::PointXYZ> > (data));
reg.setInputTarget(boost::make_shared<const
pcl::PointCloud<pcl::PointXYZ> > (model));
Eigen3::Matrix4f transform;
//reg.computeTransformation(output);
//reg.estimateRigidTransformationLM(data,model,transform);
printf("Done\n");
reg.align(output);
--
View this message in context: http://ros-users.122217.n3.nabble.com/ICP-PCL-with-foreign-data-tp2066643p2066643.html
Sent from the ROS-Users mailing list archive at Nabble.com.
More information about the ros-users
mailing list