Odometry message

Is the odometry message provided by ardurover the same odometry data that gmapping (http://wiki.ros.org/gmapping) need to work?


mavros is a subscriber for odom message not a publisher, but there is a /mavros/local_position/odom that seems to be odometry published by APM…

Hi Leonardo,

We publish an rpm message which maybe what is getting sent through mavros. There’s also a PR from @pavloblindnology to create a new message with better information. I’m surprised but happy about this PR so if that went in I could help with the Rover changes to publish that message.

I’ve tested /mavros/local_position/odom in SITL and seems to be the one I need. local position is relative to HOME position, right? velocity part of the message become the same velocity that I command, so it seems that it is what I’m looking for.
The PR is for wheel encoder, but that is not available in our ASV.

I would like to get inside the code, what could it be the steps to find local_position/odom message implementation?


Hi, I’m trying to configure google cartographer to run with my lidar and ardurover (mavros) data.
Recorded data is taken outside of my house, I walk with an aluminum frame supporting lidar and electronics.

I was able to add IMU data to improve SLAM process:

now I want to add odometry msg. I could check that /local_position/odom message is on rover coordinate frame, however /local_position/velocity message is in NED frame:

Now I’m trying to test a ros bag file recorded with and without odometry. The thing is that adding odometry have a worse result than without it.

So, my questions are:
Where do odometry came from? is from EKF, fusing GPS and IMU data?
How reliable could odometry be in a rover without wheel encoder?
I rosbag play my file and echo odometry topic. Linear velocity part of the message seems to be ok. I would like to check position part of the message. Is there a way to plot it? I have the dataflash of that test. Could i use it for check odometry?
Odometry msg seems to be published at 10Hz, that is good, but IMU data seems to be published at 5Hz, that is a little low. Could it be possible to publish IMU data at 10Hz?


No one?
I really need to integrate odometry into my SLAM system and odom message seems to be not working in a real implementation.
In SITL, pose is updated correctly, but when I’ve tried it on real hardware and move electronics for 5~6 mts in my backyard the pose msg seems to be in the order of ±1 …



So i guess you’re seeing odometry messages but there are no wheel encoders on the vehicle? If that is true then I don’t think the odometry information can be coming from ArduPilot.

I think the speed of the IMU data can be increased by increasing the SRx_RAW_SENS parameter to 10 (where “x” is a number from 0 ~ 3 corresponding to the telemetry port being used.

It’s very interesting what you’re doing by the way!

I thought I had odom data, but I don’t. It is just noise. I don’t have wheel encoders becouse it is a boat. I thought that odom coul come from EKF in the boat. But I think that there is no sensor available on a boat that can replace a wheel encoder…

I will try increase IMU speed. TELEM2 on pixhawk will be SR2_RAW_SENS?


1 Like


Yes, increasing SR2_RAW_SENS should increase the rate of the IMU data coming out of Telem2.

By the way, you may have seen that we’ve recently added support for external position estimates from ROS. We have some remaining issues with aligning the clocks between the flight controller and the companion computer but I hope we will resolve these issues in the next few weeks.

Is ArduRover able to use the nav_msgs/Odometry message?


So you’d like us to consume that odometry message and pass it into the EKF? We don’t currently support that but we could. Could you explain what you’re trying to do? That’ll just add some motivation and help decide on timing…

I was having difficulty locating the info on which mavlink messages are supported by ardupilot for visual navigation.

I’m trying to use the ZED stereo camera for visual navigation with ardurover, so I need to get odometry data from the zed ros wrapper into the EKF. The ZED node has an odom topic with the nav_msgs/odometry message. http://docs.ros.org/api/nav_msgs/html/msg/Odometry.html

I understand the vision_position_estimate message is supported now. The odometry message appears to have the same pose with covariance, and header message as the vision_position_estimate, plus twist with covariance and child_frame_id. I don’t think I’d actually need twist for surface navigation, so I don’t need the ekf to do anything with that data. I just need ardurover to get the pose and header data into the ekf as it’s already doing for vision_position_estimate.

After looking more into this today, I think I could hack together a simple ros node to translate from the odometery message to vision_position_estimate, although it would certainly be preferable for ardurover to consume the odometry message directly. I think the zed camera has a large enough user base that ardupilot would benefit from making it easier to use zed odometry straight out of the box so to speak. I found this mavros pull request today that is relevant to the odometry message. May help with timing issues also. https://github.com/mavlink/mavros/pull/991

I am experimenting with ardurover on a few vehicles ranging from an 1/8 scale rock crawler up to a full size tractor. I want to use these for testing agricultural robotics applications at my farm that will require visual odometry, and other machine vision techniques, for more precise navigation than would be achievable with only gps.

1 Like

Disregard what I said above about the twist message. I was confused about what it does. It’s actually the linear and angular velocity, so clearly those are useful and needed.

Also, I had forgotten that the zed ros wrapper is the only open source component of the zed sdk. For now, I’m going to see if I can add a visual_position_estimate node to the zed ros wrapper that publishes the geometry_msgs/PoseWithCovarianceStamped message. From my current understanding, that is what ardupilot currently accepts for vision navigation.


sending the vision-position-estimate should work with ArduPilot although we have this issue regarding syncronising the clocks between the computer running ROS (companion computer or ground station computer) and the flight controller. This issue should be resolved soon once this PR from @peterbarker goes into master.

The ardupilot specific VISION_POSITION_DELTA is the perfect message for sending in visual odometry information because it will directly be consumed by the EKF and the time syncronisation problem goes away.

By the way, if you’re using an NVidia TX1 and don’t require ROS, you can simply load APsync (which uses OpenKai instead of ROS) to send the visual odometry data from the ZED to ArduPilot. It’s well tested and works very well.

Hey rmackay9


In this topic, they say that the odometry messages are calculated with the gps and the imu.
So no need for wheel encoders. So are you sure?

hello rmackay9,
I am using Navio2 for developing a skid steering ground rover. I wanted to integrate wheel odometry into the system to improve positional accuracy, however, due to hardware limitation of Navio2, there is no direct support for interfacing the encoders.
Is there is any way/mavlink message using which I could relay this information to ardurover?