Registration to map environment

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

Registration to map environment

josuerocha
Hello everyone,

I would like to build a car that could map the environment around itself using Kinect and PCL. I have been running some tests over the registration module and there is a question that came up to me.

Is it possible to achieve enough precision to concatenate many point clouds and compose a big point cloud that corresponds to the scenarion around the car using the Registration module?

Any ideas would be appreciated.

Please answer, thanks in advance.
Reply | Threaded
Open this post in threaded view
|

Re: Registration to map environment

icedoggy
You will probably get some drift sooner or later when concatenating or accumulating point clouds. That's what I have observed in my applications using the ICP algorithm. However, it depends on your scale I guess how quickly you will see that drift or rather how quickly it becomes a problem. In my case I was traversing distances between 40 and 80m in outdoor scenes which may be more problematic than indoor scenes.

One problem inherent of PCL is that they only use float types not doubles in all their algorithms. There you loose a lot of precision very quickly as some of my former colleagues showed in some experiments (not with PCL but with self implemented ICP using both data types. It was quite shocking!).

As much as love using PCL and value all algorithms that are comprised in PCL, that fact that they do not support double really annoys me some times. :(

Reply | Threaded
Open this post in threaded view
|

Re: Registration to map environment

josuerocha
In reply to this post by josuerocha
Thank you for your reply,

could you please give me some hints on how to set up this solution, or even some sample code?
This is the main loop that calculates the main_cloud (global cloud comprising all the scenes captured):

Registering<PXYZRGBA>::registerICP(filtered_cloud,main_cloud,filtered_cloud);
*main_cloud = *main_cloud + *filtered_cloud;

This is the function called for the execution of the ICP algorithm:

template <class T>
void Registering<T>::registerICP(class PointCloud<T>::Ptr source_cloud,class PointCloud<T>::Ptr target_cloud,class PointCloud<T>::Ptr final_cloud){

    IterativeClosestPoint<T,T> registration;
        registration.setInputSource(source_cloud);
        registration.setInputTarget(target_cloud);

        registration.align(*final_cloud);
        if (!registration.hasConverged()){
        cout<<"*WARNING* ICP Registration has not converged"<<endl;
        }
}

However, when I display the main_cloud the concatenation is pretty wrong and does not correspond to the actual scene even if the frames grabbed are the same...

Please answer.
Reply | Threaded
Open this post in threaded view
|

Re: Registration to map environment

Chris Flesher
ICP can only align point clouds if they are pretty close to begin with. Do you have some odometry on your car you could initialize ICP with? The align function has a guess parameter.

There are software packages written for the Kinect that do what you are wanting, see ElasticFusion and Kintinuous.

On Thu, Jul 6, 2017 at 10:14 AM, josuerocha <[hidden email]> wrote:
Thank you for your reply,

could you please give me some hints on how to set up this solution, or even
some sample code?
This is the main loop that calculates the main_cloud (global cloud
comprising all the scenes captured):

Registering<PXYZRGBA>::registerICP(filtered_cloud,main_cloud,filtered_cloud);
*main_cloud = *main_cloud + *filtered_cloud;

This is the function called for the execution of the ICP algorithm:

template <class T>
void Registering<T>::registerICP(class PointCloud<T>::Ptr source_cloud,class
PointCloud<T>::Ptr target_cloud,class PointCloud<T>::Ptr final_cloud){

    IterativeClosestPoint<T,T> registration;
        registration.setInputSource(source_cloud);
        registration.setInputTarget(target_cloud);

        registration.align(*final_cloud);
        if (!registration.hasConverged()){
        cout<<"*WARNING* ICP Registration has not converged"<<endl;
        }
}

However, when I display the main_cloud the concatenation is pretty wrong and
does not correspond to the actual scene even if the frames grabbed are the
same...

Please answer.



--
View this message in context: http://www.pcl-users.org/Registration-to-map-environment-tp4044717p4044723.html
Sent from the Point Cloud Library (PCL) Users mailing list 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: Registration to map environment

josuerocha
Thank you for your answer.

I would like to use it inside my own application, is it possible with ElasticFusion and Kintinuous? Because as I was seeing ElasticFusion and Kintinuous have their own GUI and all. Is it possible only to use it inputing clouds and receiving the output of a main cloud?
Reply | Threaded
Open this post in threaded view
|

Re: Registration to map environment

Chris Flesher
Not sure, I haven't used them.

On Thu, Jul 6, 2017 at 11:52 AM, josuerocha <[hidden email]> wrote:
Thank you for your answer.

I would like to use it inside my own application, is it possible with
ElasticFusion and Kintinuous? Because as I was seeing ElasticFusion and
Kintinuous have their own GUI and all. Is it possible only to use it
inputing clouds and receiving the output of a main cloud?



--
View this message in context: http://www.pcl-users.org/Registration-to-map-environment-tp4044717p4044725.html
Sent from the Point Cloud Library (PCL) Users mailing list 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: Registration to map environment

josuerocha
In reply to this post by josuerocha
Is there anybody who succeded using PCLs resources to map a large environment (80+ m)?