ICP/GICP to find rotation and traslation in a plane (3D data)

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

ICP/GICP to find rotation and traslation in a plane (3D data)

Miguel Algaba
Hi, I have been working on 3D registration with a hand-held Kinect for some months, but now I wonder if it's possible to force the ICP/GICP algorithms to optimize the rotation and translation for the case of 2D robot motion; i.e estimating the 2D translation and rotation using 3D point clouds. From this message of Radu Bogdan, it seems that the are functors that lock some degrees of freedom down to force the optimization run for the plane-case, but I have not been able to find a connection between those functors and the ICP/GICP algorithms:

http://www.pcl-users.org/ICP-on-pcl-PointXY-cloud-td3847730.html#a3847741

Thanks in advance and best regards,
Miguel Algaba.
Reply | Threaded
Open this post in threaded view
|

Re: ICP/GICP to find rotation and traslation in a plane (3D data)

Miguel Algaba
Hi, I have modified the icp application a bit to add the possibility to select the GICP algorithm to estimate the rigid transformation. I have also added the possibility to perform ICP2D and I noticed that the GICP algorithm ignores the warp function. Am I doing something wrong? The code is the following:

icp.cpp

Thanks in advance and best regards,
Miguel Algaba.
Reply | Threaded
Open this post in threaded view
|

Re: ICP/GICP to find rotation and traslation in a plane (3D data)

Miguel Algaba
Sorry I forgot to paste the output of the program:

In this first case, I selected the ICP algorithm to align the two point clouds using the warp function for the 2D case (3DoF):

./IterativeClosestPoint pointCloud_1.pcd pointCloud_2.pcd -m 0 -w 1
/home/miguel/Escritorio/IterativeClosestPoint/build/pointCloud_1.pcd width: 640 height: 480
/home/miguel/Escritorio/IterativeClosestPoint/build/pointCloud_2.pcd width: 640 height: 480
Using IterativeClosestPoint
Using rigid transformation (3DoF) as warp function
Time: 961ms
           1  0.000503525            0 -0.000840842
-0.000503525            1            0  0.000130074
           0            0            1            0
           0            0            0            1
saving result to /home/miguel/Escritorio/IterativeClosestPoint/build/pointCloud_2_1.pcd

In this second case, I selected the GICP algorithm to align the point clouds using the same warp function, but the result is a 6DoF rotation+traslation matrix:

./IterativeClosestPoint pointCloud_1.pcd pointCloud_2.pcd -m 2 -w 1
/home/miguel/Escritorio/IterativeClosestPoint/build/pointCloud_1.pcd width: 640 height: 480
/home/miguel/Escritorio/IterativeClosestPoint/build/pointCloud_2.pcd width: 640 height: 480
Using GeneralizedIterativeClosestPoint
Using rigid transformation (3DoF) as warp function
Time: 625ms
   0.999186  0.00807082   0.0395247   -0.154125
-0.00788534    0.999957 -0.00484646  0.00820248
 -0.0395622  0.00453085    0.999207   -0.198095
          0           0           0           1
saving result to /home/miguel/Escritorio/IterativeClosestPoint/build/pointCloud_2_1.pcd

Thanks in advance,
Miguel Algaba.
Reply | Threaded
Open this post in threaded view
|

Re: ICP/GICP to find rotation and traslation in a plane (3D data)

Radu B Rusu
Administrator
In reply to this post by Miguel Algaba
Nizar, did we ever add the warp functors to GICP? Was there a plan to do that?

Cheers,
Radu.

On 06/13/2012 04:11 AM, Miguel Algaba wrote:

> Hi, I have modified the icp application a bit to add the possibility to
> select the GICP algorithm to estimate the rigid transformation. I have also
> added the possibility to perform ICP2D and I noticed that the GICP algorithm
> ignores the warp function. Am I doing something wrong? The code is the
> following:
>
> http://www.pcl-users.org/file/n4019277/icp.cpp icp.cpp
>
> Thanks in advance and best regards,
> Miguel Algaba.
>
> --
> View this message in context: http://www.pcl-users.org/ICP-GICP-to-find-rotation-and-traslation-in-a-plane-3D-data-tp4019255p4019277.html
> Sent from the Point Cloud Library (PCL) Users mailing list archive at Nabble.com.
> _______________________________________________
> [hidden email] / http://pointclouds.org
> http://pointclouds.org/mailman/listinfo/pcl-users
_______________________________________________
[hidden email] / http://pointclouds.org
http://pointclouds.org/mailman/listinfo/pcl-users
Reply | Threaded
Open this post in threaded view
|

Re: ICP/GICP to find rotation and traslation in a plane (3D data)

Miguel Algaba
I think that another interesting feature could be the possibility to specify the warp function for the pcl::registration::CorrespondenceRejectorSampleConsensus< PointT >  and pcl::registration::TransformationEstimationSVD< PointSource, PointTarget > classes.

I have created an issue for that: http://dev.pointclouds.org/issues/726

Kind regards,
Miguel Algaba.
Reply | Threaded
Open this post in threaded view
|

Re: ICP/GICP to find rotation and traslation in a plane (3D data)

Chris Flesher
In reply to this post by Radu B Rusu
I was interested in implementing a warp function for GICP. Was wondering if there are any thoughts on would be the best approach for this? Currently GICP seems to be using a custom BFGS optimizer instead of the transformation_estimation classes.