FAQΒΆ

Q: Why optimizing my factor graph returns non-success status NonlinearOptimizationStatus.RANK_DEFICIENCY ?

A: The reason receiving a NonlinearOptimizationStatus.RANK_DEFICIENCY is that \(J\) is not full column rank, a.k.a. \(J^T J\) is not full rank, thus normal equation \(J^T J \Delta x^{*} = J^T b\) has no valid solution.

The reason \(J\) is not full column rank is that the factor graph is not well constrained, generally due to missing factors. A common example shown in following figure is a pose graph problem with only odometry factors.

2D pose graph example

This factor graph is not well constrained, since given a valid solution \(\{x_1, x_2, x_3\}\), we can apply any rigid transformation \(T\), and \(\{Tx_1, Tx_2, Tx_3\}\) is still a valid solution. To make a graph well constrained, we need to apply a prior on any of the pose (e.g. \(x_1\)).

2D pose graph example