Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
For an installation instruction, please look at "INSTALL.txt".

If RobotVision is already install, you can run the demo application
"rss2010_demo" in order to recreate the figures of the paper 

>H. Strasdat, J.M.M. Montiel, A.J. Davision: "Scale Drift-Aware
 Large Scale Monocular SLAM", Proc. of Robotics: Science and
 Systems (RSS), 2010.<

"./rss2010_demo 2" creates Figure 2. Here, the Keble College trajectory before
loop closure is first read from a test file (black curve), then 6 DoF
optimisation (green curve) and 7 DoF optimisation is performed (red curve).

"./rss2010_demo 3" creates Figure 3. Attention, this will take one to two
hours! However, the whole process is visualised.

"./rss2010_demo 4" creates Figure 4. This is a simulation of an aircraft 
flying over a sphere. It performs monocular visual odometry using a 
downward looking camera. In the end, several loop closure constraints 
are identified and 7 DoF optimisation is performed.

Version 1.0 of RobotVision offers Bundle Adjustment (BA) (bundle_adjuster.h) 
pose-graph optimisation (graph_optimizer.h) and 2D/3D visualisation among 
other things. 

In order to get to know the BundleAdjuster and 3D visualisation, please have a look at
the BA toy example: "ba_demo.cpp".

Try out the following:
 - "./ba_demo 0.5 0.0  0" - BA problem with no spurious matches
 - "./ba_demo 0.5 0.05 0" - BA problem with 5% of spurious matches
                            (this should fail!)
 - "./ba_demo 0.5 0.05 1" - BA problem with 5% of spurious matches, but
                            using a robust kernel (this should work!)

The core code of BundleAdjuster is in the method "calcFull". This method is 
rather complex because of the exploitation of its underlying sparseness.
For a more compact implementation of Levenberg-Marquardt, please refer to
"calcStructOnly" and "calcMotionOnly".

BundleAduster and GraphOptimiser are highly generic. They can be used for
various different kind of problems. For instance BundleAdjuster generalises
over different prediction functions using different kinds of transformations, 
different landmark types and different observation dimensions.
An example prediction SE3XYZ which depends of 3D rigid transformation SE3,
3D Euclidean points and 2D observation is provided in "transformations.h".
This could be seen as the default prediction for monocular bundle adjustment.
Writing a different prediction class (as a  sub-class of AbstractPrediction)
-- such as for stereo-camera SLAM or 2D range-bearing SLAM - should be 


robotvision repos from




No releases published


No packages published