[ros-users] ICP & PCL with foreign data
Radu Bogdan Rusu
rusu at willowgarage.com
Sat Dec 11 00:48:46 UTC 2010
Jon, Paul,
Thanks for the bug report. Can you please submit a ticket with the patch? We would love to integrate it in the next release.
We've been rather quiet about the registration framework, because we're in the process of _completely_ revamping it,
with the hope to have a faster, more robust framework that works in real-time with the Kinect sensors. If you're
interested in participating in the discussions and/or helping out, please join pcl-users@ and let's continue there.
Cheers,
Radu.
--
http://pointclouds.org
On 12/10/2010 04:45 PM, Jon Binney wrote:
> I had a similar problem. It turned out in my case that the two point clouds were further apart than the max
> correspondence distance. This resulted in no correspondences being found, which resulted in a segfault when the ransac
> algorithm tried to choose samples to do the model alignment.
>
> I traced the segfault to the following line in computeModelCoefficients:
>
> indices_tgt[i] = (*indices_tgt_)[samples[i]];
>
> Adding a check to make sure that returns false when indices_tgt_ has less than samples[i]+1 elements fixed this for me,
> but there is probably a better place to put this check.
>
> -Jon B
>
>
> On Fri, Dec 10, 2010 at 3:57 PM, paulhebert <paulhebert at gmail.com <mailto:paulhebert at gmail.com>> wrote:
>
>
> 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.
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org <mailto:ros-users at code.ros.org>
> https://code.ros.org/mailman/listinfo/ros-users
>
>
>
>
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users
More information about the ros-users
mailing list