Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initialization's accuracy varies greatly #165

Closed
hngenc opened this issue Mar 7, 2018 · 3 comments
Closed

Initialization's accuracy varies greatly #165

hngenc opened this issue Mar 7, 2018 · 3 comments

Comments

@hngenc
Copy link

hngenc commented Mar 7, 2018

I created my own dataset using the AirSim drone simulator. You can find the rosbag file here, and the yaml file here.

VINS-Mono's performance varies drastically depending on where in the rosbag file we start playing from:

  • If we start the rosbag file from the beginning, VINS-Mono incurs a catastrophic drift causing an extremely inaccurate pose estimation.
  • If we start one second into the rosbag file, VINS-Mono pose estimation stays very accurate over the entire run.
  • If start 6 seconds into the rosbag file, VINS-Mono fails to initialize its position correctly, resulting in a very inaccurate trajectory, as with the first bullet point.
  • But if we start 5 seconds into the rosbag file, VINS-Mono does great!

I'm really struggling to figure out why it is that VINS-Mono's performance seems to depend so heavily on the exact second that it starts running. I suspect that AirSim's simulated sensors may be a little inaccurate, but that doesn't explain why VINS-Mono has no problem if it starts 1 second into my rosbag, but does so much worse if it starts 0 seconds into my rosbag file.

To help visualize, this is how it looks when VINS-Mono is initialized poorly (the drone was standing still while VINS-Mono's estimated trajectory shot off into the distance):

vins-mono

Also, thanks for the great work you guys have done! We're planning to use VINS-Mono in a paper and project as a default SLAM algorithm.

@hngenc hngenc changed the title Initialization is highly random Initialization varies greatly Mar 7, 2018
@hngenc hngenc changed the title Initialization varies greatly Initialization's accuracy varies greatly Mar 7, 2018
@qintonguav
Copy link
Member

It's mainly because of your movement pattern. It's a typically degraded case for the monocular camera.
I see your simulated video, the aircraft do the exactly rotation-only movement without any translation in some certain period.
As for a monocular camera, it's well known that you can't triangulate depth without translation.
So that's why the initialization works badly in the rotation-only movement.
It's a common issue in the most monocular algorithm.
I suggest you add some translation motion in the beginning.

@Beniko95J
Copy link

@hngenc Hi, I am also trying to run VINS-Mono on airsim, and may I ask how did you get the extrinsic parameters between camera and IMU, and did you just use the timestamp from airsim directly other than modifying them? (Here is a discussion about the soft time stamp and simulation time stamp in airsim)

Thanks!

@hngenc
Copy link
Author

hngenc commented Dec 13, 2020

@Beniko95J This was quite a while ago, and my memory is pretty hazy now. IIRC, you can open up the model directly in Unreal Engine in order to see how far apart the camera are placed from each other, and what their rotation is. We just used the AirSim time stamps; I don't remember a distinction between two different time stamps when we were working on this, but maybe I just forgot.

And I see that I left this issue open for far too long, so a very late thank you for your answer, @qintonguav :)

@hngenc hngenc closed this as completed Dec 13, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants