ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

It changes very slowly and it is obviously wrong. For example, velocity.linear.x is a positive number but position x is decreasing.

Two things:

  1. I think you may want to review REP-105. The velocity is reported in the base_link frame, which is rigidly attached to the robot. Imagine a robot that is facing the origin, and driving towards it. In that case, linear velocity in X will be positive, but the X position, which is reported in a world frame like odom, will decrease.
  2. You are not providing any kind of orientation data whatsoever. This means the filter has no idea which way the robot is facing. Furthermore, it means that your yaw variance is going to explode. Just looking at your output message from the EKF, I can see that the yaw variance is already 6.92.

In any case, it seems that you were expecting the EKF to figure out your robot's heading based on differentiated position, and it won't do that. You should have at least a yaw velocity measurement for your setup.

It changes very slowly and it is obviously wrong. For example, velocity.linear.x is a positive number but position x is decreasing.

Two things:

  1. I think you may want to review REP-105. The velocity is reported in the base_link frame, which is rigidly attached to the robot. Imagine a robot that is facing the odom frame origin, and driving towards it. In that case, linear velocity in X will be positive, but the X position, which is reported in a world frame like odom, will decrease.
  2. You are not providing any kind of orientation data whatsoever. This means the filter has no idea which way the robot is facing. Furthermore, it means that your yaw variance is going to explode. Just looking at your output message from the EKF, I can see that the yaw variance is already 6.92.

In any case, it seems that you were expecting the EKF to figure out your robot's heading based on differentiated position, and it won't do that. You should have at least a yaw velocity measurement for your setup.

It changes very slowly and it is obviously wrong. For example, velocity.linear.x is a positive number but position x is decreasing.

Two things:

  1. I think you may want to review REP-105. The velocity is reported in the base_link frame, which is rigidly attached to the robot. Imagine a robot that is facing the odom frame origin, and driving towards it. In that case, linear velocity in X will be positive, but the X position, which is reported in a world frame like odom, will decrease.
  2. You are not providing any kind of orientation data whatsoever. This means the filter has no idea which way the robot is facing. Furthermore, it means that your yaw variance is going to explode. Just looking at your output message from the EKF, I can see that the yaw variance is already 6.92.

In any case, it seems that you were expecting the EKF to figure out your robot's heading based on differentiated position, and it won't do that. You should have at least a yaw velocity measurement for your setup.

It changes very slowly and it is obviously wrong. For example, velocity.linear.x is a positive number but position x is decreasing.

Two things:

  1. I think you may want to review REP-105. The velocity is reported in the base_link frame, which is rigidly attached to the robot. Imagine a robot that is at position (10, 10) and is facing the odom frame origin, and driving towards it. In that case, linear velocity in X will be positive, but the X position, which is reported in a world frame like odom, will decrease.
  2. You are not providing any kind of orientation data whatsoever. This means the filter has no idea which way the robot is facing. Furthermore, it means that your yaw variance is going to explode. Just looking at your output message from the EKF, I can see that the yaw variance is already 6.92.

In any case, it seems that you were expecting the EKF to figure out your robot's heading based on differentiated position, and it won't do that. You should have at least a yaw velocity measurement for your setup.

It changes very slowly and it is obviously wrong. For example, velocity.linear.x is a positive number but position x is decreasing.

Two things:

  1. I think you may want to review REP-105. The velocity is reported in the base_link frame, which is rigidly attached to the robot. Imagine a robot that is at position (10, 10) and is facing the odom frame origin, and driving towards it. In that case, linear velocity in X will be positive, but the X position, which is reported in a world frame like odom, will decrease.
  2. You are not providing any kind of orientation data whatsoever. This means the filter has no idea which way the robot is facing. Furthermore, it means that your yaw variance is going to explode. Just looking at your output message from the EKF, I can see that the yaw variance is already 6.92.

In any case, it seems that you were expecting the EKF to figure out your robot's heading based on differentiated position, and it won't do that. You should have at least a yaw velocity measurement for your setup.

EDIT in response to comment

I'm not sure what resetting the filter buys you. I don't think it's going to solve your problem. One option would be to duplicate your odom0 configuration as odom1, but turn on differential mode for odom1. That will produce a velocity from the pose data, but you're effectively feeding the filter the same information twice.