# Error term formulation in Graph SLAM (conceptual doubt)

I am reading A Tutorial on Graph-Based SLAM.Grisetti, Kummerle, Stachniss & Burgard

On page 5, the error function is introduced as follows $$e_{ij}(x_i, x_j) = z_{ij} - \hat{z}_{ij}(xi, xj)$$
here $$z_{ij}$$ is the mean of virtual measurement and $$\hat{z}_{ij}(x_i, x_j)$$ is the prediction of the virtual measurement. The following image supplements the description

The Algorithm 1 (on page 6), requires $$e_{ij}$$ as input. My doubt is regarding the calculation of $$e_{ij}$$. I need both $$z_{ij}$$ and $$\hat{z}_{ij}$$ to calculate $$e_{ij}$$

The evaluation of $$\hat{z}_{ij}$$ is dependent on the robot poses $$x_i$$ and $$x_j$$.
In turn, these robot poses $$x_i, x_j$$ (as well as $$z_{ij}$$) are calculated using $$z_{raw}$$ (incrementally with Odometry?) and to calculate $$\hat{z}_{ij}$$ we are again going to (indirectly) use $$z_{raw}$$. And that does not make sense because then $$e_{ij}=0$$?

Surely, I'm missing something about how $$z_{ij}$$ and $$\hat{z}_{ij}$$ differ!
Kindly help me resolve the above doubt! Any concrete example of $$z_{ij}$$ and $$\hat{z}_{ij}$$ are appreciated.

• When adding links to a question, it's best to avoid using this, here or similar as the link text. Links tend to rot and if this happens, this doesn't help anyone find the page. Often missing pages haven't been removed, they have just been moved to another location, so if you give the page title as the link text then a search for that text will often find the new location. – Mark Booth Jul 26 '19 at 10:38
• @MarkBooth That is great. Thank you for the edit. – vvy Jul 26 '19 at 18:52

Good question. That is quite confusing in the beginning.

Let's say you have an observation of a relative pose zij between two positions(or nodes) from your wheel odometry.

Then, you accumulate the relative poses to create the trajectory of your robot. From the accumulated trajectory you can extract zij_hat.

Given obesrvation and prediction, the error function is

eij = zij - zij_hat

which are zero initially except the loop closure terms. For example, if you have 4 nodes with a loop closure at 4 and 1, your errors looks like this.

e12 = 0

e23 = 0

e34 = 0

e41 = big error!

During the optimization, your initially accumulated trajectory moves, therefore, e12..e34 are not zero anymore.

Optimization moves the nodes to reduce the error at e41 which result in distributing the error to other nodes.

The paper you are reading is not a good tutorial(in my opinion) by the way.

• Now that makes sense! Thanks a lot. Please do suggest other good tutorial/ paper on this topic, that would be very helpful. – vvy Jul 26 '19 at 8:01
• Try to run the toy graph slam examples of prof. wolfram burgard's lecture.(you can find it in one of his mobile robotics lecture) If you have finished the paper already, the code will be easy to read and understand graph salm. – C.O Park Jul 26 '19 at 8:22
• For me Gabe Sibley's phd thesis was easy to read. – C.O Park Jul 26 '19 at 8:23
• One last thing: if you happen to know of a good resource on loop closure implementation/theory please do let me know. – vvy Jul 26 '19 at 8:25
• Loop closure and loop closure detection are different. Loop closure itself is easy. Adding the loop closure constraints to the graph optimization is all. (eg. e41 is a loop closure constraints) The real problem is detecting a loop closure. It is all about recognizing a place you have visited previously. You might start with a survey paper: Visual Place Recognition: A Survey. Also, I have papers on this topic: 1. Robust Photogeometric Localization over Time for Map-Centric Loop Closure, 2. Local Descriptor for Robust Place Recognition using LiDAR Intensity. – C.O Park Jul 29 '19 at 0:44