Ransac Frame-to-Frame Stability

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

Ransac Frame-to-Frame Stability

Reyn
Hi,
Awesome project.

I have a question.

Using kinect fusion's iterative closest point (ICP) function I've tried to map an environment using just the previous and current point clouds to find the transforms. This fails due to drift, even when the kinect is stationary the ICP algorithm is reporting movement. The full kinect fusion is stable because they build a voxel representation of the world.

How does RTAB-MAP keep a stationary sensor from thinking its moving ? Is it just that ransac cloud alignment is that much more stable ? Is there a minimum movement amount or something similar, wouldn't that cause other issues ?

Thanks!
Reply | Threaded
Open this post in threaded view
|

Re: Ransac Frame-to-Frame Stability

matlabbe
Administrator
This post was updated on .
Hi,

RTAB-Map's default odometry is not really Frame-to-Frame, it is more Frame-to-Map (Odom/Strategy=0). It maintains a local map with the recent extracted features from the past images. The size of the local map is defined by the "OdomBow/LocalHistorySize" parameter (default 1000 last features). So if the camera is not moving, new features are always compared to the same in the local map. It may be like buffering a small static window of the environment to compare to.

If you set Odometry strategy to Frame-to-Frame (Odom/Strategy=1), there is a parameter to change the keyframe only if the tracked features drop under a ratio of the previous frame, so if activated and not moving, the keyframe would not change, avoiding the drift.

Cheers,
Mathieu
Reply | Threaded
Open this post in threaded view
|

Re: Ransac Frame-to-Frame Stability

srinath2468
Hey Matlabbe!,

I have changed the odometry to F2F, disabled guess from motion, bundle adjustment and set the keyframethreshold and visualkeyframethreshold to 0, but still the RTABMap odometry tracking seems to be super robust.

When i try to implement the same, I seem to encounter a lot of drift. I am implementing it on the GPU and have verified my keypoint generation and matching. They seem to be fine.

Is there any other factor or parameter that I need to take care of?

Thanks!
Reply | Threaded
Open this post in threaded view
|

Re: Ransac Frame-to-Frame Stability

matlabbe
Administrator
Hi,

F2F without keyframes would simply compute motion between consecutive frames with opencv's solvePnPRansac(). Compare which kind of features are used and how they are matched. You may try to replace one algorithm at a time.

cheers,
Mathieu