Ask Your Question

Revision history [back]

Ah, sorry, didn't look at your config closely enough. You are fusing X and Y in your odom0 config, which is pose data, so the first measurement you get after you call set_pose will snap it right back. In other words, this is happening:

Time t0: filter gets measurement from odom0. X and Y position in the filter output will be very near the odom0 measurement. Time t1: you call set_pose with some specific pose. EKF pose jumps to that position. Time t2: filter gets measurement from odom0. X and Y position in the filter output will be very near the odom0 measurement.

This is why differential mode works: it converts the odom0 pose to a velocity, which won't interfere with your set_pose call. All set_pose is doing is sending your robot to the location you send it. If you then give it measurements that tell it that it is somewhere else, it's going to jump back.

Ah, sorry, didn't look at your config closely enough. You are fusing X and Y in your odom0 config, which is pose data, so the first measurement you get after you call set_pose will snap it right back. In other words, this is happening:

  • Time t0: filter gets measurement from odom0. X and Y position in the filter output will be very near the odom0 measurement. measurement.
  • Time t1: you call set_pose with some specific pose. EKF pose jumps to that position. position.
  • Time t2: filter gets measurement from odom0. X and Y position in the filter output will be very near the odom0 measurement.

This is why differential mode works: it converts the odom0 pose to a velocity, which won't interfere with your set_pose call. All set_pose is doing is sending your robot to the location you send it. If you then give it measurements that tell it that it is somewhere else, it's going to jump back.

Ah, sorry, didn't look at your config closely enough. You are fusing X and Y in your odom0 config, which is pose data, so the first measurement you get after you call set_pose will snap it right back. In other words, this is happening:

  • Time t0: filter gets measurement from odom0. odom0. X and Y position in the filter output will be very near the odom0 measurement.
  • Time t1: you call set_pose with some specific pose. EKF pose jumps to that position.
  • Time t2: filter gets measurement from odom0. X and Y position in the filter output will be very near the odom0 measurement.

This is why differential mode works: it converts the odom0 pose to a velocity, which won't interfere with your set_pose set_pose call. All set_pose set_pose is doing is sending your robot to the location you send it. If you then give it measurements that tell it that it is somewhere else, it's going to jump back.