# EKF-SLAM Computing the jacobians for landmark updates

I've been working through this informative guide on EKF-SLAM but I'm having difficulty understanding the jacobians required for the 'landmark update', on page 35.

What exactly is Jxr and Jz taking as input? Is it taking the the current rotation of the robot, plus the addition of the odometry update? IE, the rotation that is now stored in the 'X' state vector. Or are they taking the angle from the Inverse Sensor Model, and if so, what's the 'delta' angle from?

Thanks.

Specifically, the arguments to this jacobian are the state of the robot.

### The reason

It is the jacobian of the measurement function with respect to the landmark state.

If you knew the state of the robot and landmark, what function would you use to predict what the measurement would be? If you have a range sensor, it would be the distance between the landmark and robot positions. Take the jacobian of this function, with respect to each of the state variables (robot x, robot y, robot theta, landmark x, landmark y)

In their first example, we're measuring the difference in x and y.

So the predicted position of the landmark equals the position of the robot plus the $x$ and $y$ difference (rotated a little by the robot rotations).

So the jacobian is $$\begin{bmatrix} \frac{d h_1}{dx_r}, \frac{d h1}{dy_r}, \frac{d h1}{d\theta_r}\\ \frac{d h_2}{dx_r}, \frac{d h2}{dy_r}, \frac{d h2}{d\theta_r}\\ \end{bmatrix}$$

Here, $h1$ is the function which gives the $x$ coordinate of the landmark, and $h2$ is the function which gives the $y$ coordinate of the landmark.

• Thanks for the informative reply. If I understand correctly, whenever the robot moves, jacobians A, Jxr and Jz must be updated to reflect the 'delta' position? And jacobian H must be updated to reflect the difference between the robot and select landmark? This is how I am now initializing my jacobians: pastebin.com/HQDWHxrp And H jacobians: pastebin.com/zF7H7YCn
– jub
Mar 29 '15 at 22:48
• I haven't checked your code, but yes, it must be updated to reflect the new expected measurement, and the new "rate of measurement change as robot state changes". I will try to check your code when I am off work. Mar 29 '15 at 23:32
• That'd be super helpful, as I've already noticed a few notation errors in the guide. Thanks again.
– jub
Mar 29 '15 at 23:54
• I'm still having trouble understanding your explanation. I understand I need two jacobians, one with respect to robot state, and one landmark state. In order to associate landmarks, I transform their x & y (computed from the measured range & bearing) into world space. These transformed values are then passed into my EKF. How does the delta X and Y of the robot factor into any of this, like in their first example JXR? Thanks in advance.
– jub
Apr 4 '15 at 1:04
• Just to make the above clear, the polar conversion function is: pastebin.com/GgzfKdEg And the world transform function is: pastebin.com/UGNzri98 Is this what my jacobians need to be based off?
– jub
Apr 4 '15 at 1:10