___ ___ ___ ___ ___ ___
/\ \ /\ \ /\__\ /\__\ /\ \ /\ \
/::\ \ /::\ \ /:/ / /:/ / /::\ \ /::\ \
/::\:\__\ /::\:\__\ /:/__/ /:/__/ /::\:\__\ /::\:\__\
\:\::/ / \/\::/ / \:\ \ \:\ \ \:\:\/ / \;:::/ /
\::/ / /:/ / \:\__\ \:\__\ \:\/ / |:\/__/
\/__/ \/__/ \/__/ \/__/ \/__/ \|__|
Baller is a small interactive bundle adjustment playground. It can generate synthetic scenes, perturb the data and run a Ceres based optimisation while visualising every iteration. Two programs are provided:
simple_scene– generates a BAL format problem containing cameras, 3D points and their observations.render– loads a problem file, adds noise and solves it while displaying the ground truth (green) and the current estimate (red), the Jacobian matrix and the projected observations.
The solver supports three modes:
- slam – estimate cameras and points together.
- localization – estimate cameras while keeping points fixed.
- mapping – estimate points while keeping cameras fixed.
Generate a simple bundle-adjustment problem:
$ cd build
$ ./simple_scene --output simple.txt
$ ./render --input simple.txt --mode slam
Which should give:
Other modes are:
$ ./render --input simple.txt --mode localization
or:
$ ./render --input simple.txt --mode mapping
In all cases, the Jacobians are rendered on the left-hand side of the image, and the reprojected points (per-camera) in the lower-right. Green is the ground-truth, red is estimated.


