ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
One data source will work.
What message type is Pioneer3AT/pose
? If it's a PoseWithCovarianceStamped
, then your configuration is wrong. Change it to
<param name="pose0" value="Pioneer3AT/pose" />
When in doubt, start with one sensor at a time. Get your pose data working, then add the IMU, etc.
2 | No.2 Revision |
One data source will work.
What message type is Pioneer3AT/pose
? If it's a PoseWithCovarianceStamped
, then your configuration is wrong. Change it to
<param name="pose0" value="Pioneer3AT/pose" />
When in doubt, start with one sensor at a time. Get your pose data working, then add the IMU, etc.
EDIT: Also, the best thing to do is paste your entire ekf_localization_node
launch file, and post a sample message from each sensor.
3 | No.3 Revision |
One data source will work.
What message type is Pioneer3AT/pose
? If it's a PoseWithCovarianceStamped
, then your configuration is wrong. Change it to
<param name="pose0" value="Pioneer3AT/pose" />
When in doubt, start with one sensor at a time. Get your pose data working, then add the IMU, etc.
EDIT: Also, the best thing to do is paste your entire ekf_localization_node
launch file, and post a sample message from each sensor.
EDIT 2: Your IMU data appears to be in the /imu
frame. Are you providing a transform from /imu
to /Pioneer3AT/base_link
? Also, you want to make sure that your Pioneer code is not broadcasting a /Pioneer3AT/odom
->/Pioneer3AT/base_link
transform.
4 | No.4 Revision |
One data source will work.
What message type is Pioneer3AT/pose
? If it's a PoseWithCovarianceStamped
, then your configuration is wrong. Change it to
<param name="pose0" value="Pioneer3AT/pose" />
When in doubt, start with one sensor at a time. Get your pose data working, then add the IMU, etc.
EDIT: Also, the best thing to do is paste your entire ekf_localization_node
launch file, and post a sample message from each sensor.
EDIT 2: Your IMU data appears to be in the /imu
frame. Are you providing a transform from /imu
to /Pioneer3AT/base_link
? Also, you want to make sure that your Pioneer code is not broadcasting a /Pioneer3AT/odom
->/Pioneer3AT/base_link
transform.
EDIT 3: So I ran your bag file with the launch file you posted. I am definitely getting publications on /odometry/filtered
, though the only data going into it is IMU data, because your bag didn't have any Pioneer odometry messages in it. If you're still having trouble, do this for me:
ekf_localization_node
running. Bring everything up.Post the bag, and let me know what, if any, output you were getting from ekf_localization_node
.
It'll help me debug. Thanks!
5 | No.5 Revision |
One data source will work.
What message type is Pioneer3AT/pose
? If it's a PoseWithCovarianceStamped
, then your configuration is wrong. Change it to
<param name="pose0" value="Pioneer3AT/pose" />
When in doubt, start with one sensor at a time. Get your pose data working, then add the IMU, etc.
EDIT: Also, the best thing to do is paste your entire ekf_localization_node
launch file, and post a sample message from each sensor.
EDIT 2: Your IMU data appears to be in the /imu
frame. Are you providing a transform from /imu
to /Pioneer3AT/base_link
? Also, you want to make sure that your Pioneer code is not broadcasting a /Pioneer3AT/odom
->/Pioneer3AT/base_link
transform.
EDIT 3: So I ran your bag file with the launch file you posted. I am definitely getting publications on /odometry/filtered
, though the only data going into it is IMU data, because your bag didn't have any Pioneer odometry messages in it. If you're still having trouble, do this for me:
ekf_localization_node
running. Bring everything up.ekf_localization_node
.It'll help me debug. Thanks!
EDIT 4: If you download the bag file you posted, and then start playing it back, and do rostopic echo /Pioneer3AT/pose
, you'll see that no messages are published to /Pioneer3AT/pose (or you can just do rosbag info
on the bag and see that no odometry messages are in there). Now run your system live, and do rostopic echo /Pioneer3AT/pose
. If nothing comes out, then you've got a problem with your odometry publishing.
6 | No.6 Revision |
One data source will work.
What message type is Pioneer3AT/pose
? If it's a PoseWithCovarianceStamped
, then your configuration is wrong. Change it to
<param name="pose0" value="Pioneer3AT/pose" />
When in doubt, start with one sensor at a time. Get your pose data working, then add the IMU, etc.
EDIT: Also, the best thing to do is paste your entire ekf_localization_node
launch file, and post a sample message from each sensor.
EDIT 2: Your IMU data appears to be in the /imu
frame. Are you providing a transform from /imu
to /Pioneer3AT/base_link
? Also, you want to make sure that your Pioneer code is not broadcasting a /Pioneer3AT/odom
->/Pioneer3AT/base_link
transform.
EDIT 3: So I ran your bag file with the launch file you posted. I am definitely getting publications on /odometry/filtered
, though the only data going into it is IMU data, because your bag didn't have any Pioneer odometry messages in it. If you're still having trouble, do this for me:
ekf_localization_node
running. Bring everything up.ekf_localization_node
.EDIT 4: If you download the bag file you posted, and then start playing it back, and do rostopic echo /Pioneer3AT/pose
, you'll see that no messages are published to /Pioneer3AT/pose (or you can just do rosbag info
on the bag and see that no odometry messages are in there). Now run your system live, and do rostopic echo /Pioneer3AT/pose
. If nothing comes out, then you've got a problem with your odometry publishing.
EDIT 5 (in response to comment): here's a screenshot of the output of your bag after about 30 seconds. Is this what you mean by "light years"?
This is exactly what I would expect to see from a single IMU being used for your state estimate. You're fusing linear acceleration, which is typically pretty noisy, and is clearly not zero-mean in this case, as you are creeping along in all three dimensions. If you have no other measurements from other sensors to help, small errors in your IMU acceleration will accumulate and lead to false velocity, which will continue to grow infinitely, and your position will as well.
Long story short: you can't get a good state estimate with a single IMU by itself.
Re: the odom->base_link transform, see REP-105. ROS assumes three principal frames: map, odom, and base_link (or whatever naming scheme you want). The purpose of packages like robot_localization is to provide two things:
nav_msgs/Odometry
message with the robot's current pose estimatetf
. Note that the transform from the odom
frame to the base_link
frame is equivalent to your pose in the world (technically, it's the inverse, but when you put the transform together, you use the same data as your message).Now, tf
does not like two different nodes broadcasting the same transform. The Pioneer node you're using has an option that allows it to broadcast the /Pioneer3/odom->/Pioneer3/base_link based on its raw wheel odometry. You want a better estimate of your position, so you fuse the raw wheel odometry with IMU data. This produces the two outputs above.