Some more notes about my implementation of the forward bundle adjustment algorithm (see my previous post).
Monocular systems. According to Mitchell, Warren, McKinnon and Upcroft, the original algorithm does not work with monocular systems, due to a limitation of the sub-algorithm used to solve for the translation. In my implementation, the solution involves all the parameters together and this limitation is not present. I have tried a monocular version of my algorithm just to make sure that it works correctly, but of course I don’t use it for my binocular rig, as it does not keep into account the rig rigidity constraint.
Gauge freedom. There are seven degrees of gauge freedom which must be eliminated to avoid the solution wandering around (and possibly making bad encounters). The object point cloud is free to move rigidly if the rototranslation changes in the reverse way to compensate this movement: this means six unwanted degrees of freedom. Also, the object point cloud can grow or shrink if the focal lengths, pixel pitches and distances between optical centres change to compensate.
The easiest way to get rid of these unwanted degrees of freedom is:
- fix all the three coordinates of two points in the cloud, that is, exclude them from the variables. This removes six degrees of freedom: three translational, two rotational and one of the scale;
- fix one coordinate of a third point. This removes the last rotational degree of freedom.
The scale can later be adjusted by setting a global scale factor.