Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

asked 2018-02-25 00:06:44 -0600

Cerin gravatar image

Default covariance when using robot_pose_ekf?

I'm trying to setup robot_pose_ekf for fusion IMU and wheel odometry, but it's giving me a ton of errors like:

[ERROR] [1519539033.564366334]: filter time older than odom message buffer
[ERROR] [1519539033.600801081]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.003523360]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.330590307]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.363531683]: filter time older than odom message buffer
[ERROR] [1519539036.397191390]: filter time older than odom message buffer
[ERROR] [1519539036.431200313]: filter time older than odom message buffer

Why is this?

For the covariance error, I assume I need to enter a covariance, but what should I use as a default value?

What does the other error, "filter time older than odom message buffer", mean?

Default covariance when using robot_pose_ekf?

I'm trying to setup robot_pose_ekf for fusion IMU and wheel odometry, but it's giving me a ton of errors like:

[ERROR] [1519539033.564366334]: filter time older than odom message buffer
[ERROR] [1519539033.600801081]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.003523360]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.330590307]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.363531683]: filter time older than odom message buffer
[ERROR] [1519539036.397191390]: filter time older than odom message buffer
[ERROR] [1519539036.431200313]: filter time older than odom message buffer

Why is this?

For the covariance error, I assume I need to enter a covariance, but what should I use as a default value?

I tried changing my IMU publishing to:

imu_data = read_imu()
imu_msg = Imu()
imu_msg.header = Header()
imu_msg.header.stamp = rospy.Time.now()
imu_msg.header.frame_id = BASE_LINK
imu_msg.orientation.x = quaternion[0]
imu_msg.orientation.y = quaternion[1]
imu_msg.orientation.z = quaternion[2]
imu_msg.orientation.w = quaternion[3]
imu_msg.orientation_covariance = [[1, 0.001, 0.001], [0.001, 1, 0.001], [0.001, 0.001, 1]]
imu_msg.angular_velocity.x = imu_data['gx']
imu_msg.angular_velocity.y = imu_data['gy']
imu_msg.angular_velocity.z = imu_data['gz']
imu_msg.angular_velocity_covariance = [[1, 0.001, 0.001], [0.001, 1, 0.001], [0.001, 0.001, 1]]
imu_msg.linear_acceleration.x = imu_data['ax']
imu_msg.linear_acceleration.y = imu_data['ay']
imu_msg.linear_acceleration.z = imu_data['az']
imu_msg.linear_acceleration_covariance = [[1, 0.001, 0.001], [0.001, 1, 0.001], [0.001, 0.001, 1]]
imu_pub.publish(imu_msg)

but it still gives me the "Covariance specified for measurement on topic wheelodom is zero" error.

What does the other error, "filter time older than odom message buffer", mean?

Default covariance when using robot_pose_ekf?

I'm trying to setup robot_pose_ekf for fusion IMU and wheel odometry, but it's giving me a ton of errors like:

[ERROR] [1519539033.564366334]: filter time older than odom message buffer
[ERROR] [1519539033.600801081]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.003523360]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.330590307]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.363531683]: filter time older than odom message buffer
[ERROR] [1519539036.397191390]: filter time older than odom message buffer
[ERROR] [1519539036.431200313]: filter time older than odom message buffer

Why is this?

For the covariance error, I assume I need to enter a covariance, but what should I use as a default value?

I tried changing my IMU publishing to:

imu_data = read_imu()
imu_msg = Imu()
imu_msg.header = Header()
imu_msg.header.stamp = rospy.Time.now()
imu_msg.header.frame_id = BASE_LINK
imu_msg.orientation.x = quaternion[0]
imu_msg.orientation.y = quaternion[1]
imu_msg.orientation.z = quaternion[2]
imu_msg.orientation.w = quaternion[3]
imu_msg.orientation_covariance = [[1, 0.001, 0.001], [0.001, 1, 0.001], [0.001, 0.001, 1]]
imu_msg.angular_velocity.x = imu_data['gx']
imu_msg.angular_velocity.y = imu_data['gy']
imu_msg.angular_velocity.z = imu_data['gz']
imu_msg.angular_velocity_covariance = [[1, 0.001, 0.001], [0.001, 1, 0.001], [0.001, 0.001, 1]]
imu_msg.linear_acceleration.x = imu_data['ax']
imu_msg.linear_acceleration.y = imu_data['ay']
imu_msg.linear_acceleration.z = imu_data['az']
imu_msg.linear_acceleration_covariance = [[1, 0.001, 0.001], [0.001, 1, 0.001], [0.001, 0.001, 1]]
imu_pub.publish(imu_msg)

but it still gives me the "Covariance specified for measurement on topic wheelodom is zero" error.

What does the other error, "filter time older than odom message buffer", mean?

Default covariance when using robot_pose_ekf?

I'm trying to setup robot_pose_ekf for fusion IMU and wheel odometry, but it's giving me a ton of errors like:

[ERROR] [1519539033.564366334]: filter time older than odom message buffer
[ERROR] [1519539033.600801081]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.003523360]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.330590307]: Covariance specified for measurement on topic wheelodom is zero
[ERROR] [1519539036.363531683]: filter time older than odom message buffer
[ERROR] [1519539036.397191390]: filter time older than odom message buffer
[ERROR] [1519539036.431200313]: filter time older than odom message buffer

Why is this?

For the covariance error, I assume I need to enter a covariance, but what should I use as a default value?

What does the other error, "filter time older than odom message buffer", mean?

Edit: I tried adding stub covariances like:

[1, 0.001, 0.001, ...
 0.001, 1, 0.001, ...
 0.001, 0.001, 1,...

and that got ekf to output odom_combined without any explicit errors...except it appears to completely ignore IMU imput. When I rotate my robot, the pose orientation remains a fixed [0,0,0,1]. What am I doing wrong?