surberj / Vision

15 stars 8 forks source link

ROVIO performance #10

Closed surberj closed 8 years ago

surberj commented 8 years ago

Raw logged position and orientation of Rovio vs Vicon for cars table dataset:

bildschirmfoto 2015-10-20 um 13 30 52

rovio and vicon coordinate systems need to be aligned!

surberj commented 8 years ago

Doing ROVIO analyses (postprocessing) at the moment with python scripts (got rid off matlab because its not installed on my linux system and I always have to change between linux and mac). First results: see https://github.com/wingtra/vision_thesis/issues/14

surberj commented 8 years ago

Main issues with ROVIO: drift and no loop closure detection (as also @devbharat was mentionning)

One idea that comes to my mind to enhance ROVIO performance (without Tag reliance):

Use ROVIO as a "visual odometry" algorithm and an additional 'lightweight' algorithm (see below) to detect loop closures. In a multi sensor fusion module the loop closure detector could be used for a pose update (similar to GPS update).

1) Include ideas of FAB-MAP (http://ijr.sagepub.com/content/27/6/647.short). Use place recognition based on images to detect loop closures. 2) Safe the ROVIO output (camera pose and associated features, with uncertainty) every few meteres or seconds as "descriptors", perform a recognition (classifier, bag-of-words, inverse-file-index), if a match is found estimate pose and perform update in multi sensor fusion module.

surberj commented 8 years ago

ROVIO does not seem to be able to handle other camera calibrations than 'equidistant'. E.g. on euroc dataset they provide their camera calibration with a radial-tangential distortion model. Passing this calibration with 'distortion_model: radial-tangential' makes the estimator diverging, passing the calibration with 'distortion_model: equidistant' makes it performing worse than with lucas visensor-calibration (tracking diverges after one minute or so).

The same thing for the rcars dataset. They provide a calibration with a plumb-bob distortion model. Passing it with 'distortion_model: plumb-bob' makes it diverging immediately, passing it with 'distortion_model: equidistant' leeds to slightly worse (but nearly similar) tracking than lucas calibration.

Investigate in code - should be able to work with other models...

devbharat commented 8 years ago

As far as I remember plumbbob should work, like radtan. I've been using that. Plumbbob has 5 constants I think.

surberj commented 8 years ago
euroc, lucas calibration, 25 features:

plot

compared_pose_pairs 2771 pairs absolute_translational_error.rmse 0.280998 m absolute_translational_error.mean 0.258391 m absolute_translational_error.median 0.240620 m absolute_translational_error.std 0.110424 m absolute_translational_error.min 0.049174 m absolute_translational_error.max 0.511280 m

CPU load: 33 - 45 %

euroc, lucas calibration, 30 features:

plot

compared_pose_pairs 2746 pairs absolute_translational_error.rmse 0.180225 m absolute_translational_error.mean 0.162777 m absolute_translational_error.median 0.151309 m absolute_translational_error.std 0.077361 m absolute_translational_error.min 0.023452 m absolute_translational_error.max 0.353734 m

CPU load: 40 - 60 %

surberj commented 8 years ago
euroc, lucas calibration, 40 features

plot

compared_pose_pairs 2603 pairs absolute_translational_error.rmse 0.271722 m absolute_translational_error.mean 0.249696 m absolute_translational_error.median 0.232860 m absolute_translational_error.std 0.107167 m absolute_translational_error.min 0.017728 m absolute_translational_error.max 0.558950 m

CPU load: 60 - 95 %

euroc, lucas calibration, 50 features:

diverging CPU load: often 100 %

surberj commented 8 years ago
euroc, lucas calibration, 15 features

plot

compared_pose_pairs 2784 pairs absolute_translational_error.rmse 0.253315 m absolute_translational_error.mean 0.217451 m absolute_translational_error.median 0.173743 m absolute_translational_error.std 0.129937 m absolute_translational_error.min 0.015270 m absolute_translational_error.max 0.589620 m

CPU load: 26 - 33 %

euroc, lucas calibration, 5 features

plot

compared_pose_pairs 2657 pairs absolute_translational_error.rmse 0.381785 m absolute_translational_error.mean 0.349670 m absolute_translational_error.median 0.324183 m absolute_translational_error.std 0.153266 m absolute_translational_error.min 0.075848 m absolute_translational_error.max 0.822168 m

CPU load: 19 - 26 %

euroc, lucas calibration, 3 features

diverging CPU load: 50 %

devbharat commented 8 years ago

Their is a choice in the ROVIO code to enable/disable the "direct" method (chooses reprojection error instead of intensity error for innovation). It'd be interesting to see how this effects accuracy/computation time. Have you already done that or discussed it previously ?

surberj commented 8 years ago

ROVIO performance on the IJRR set, the EUROC set and my own sets is reported in https://github.com/surberj/Vision/tree/master/thesis/Report