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

Using RPM as a form of Wheel Odometry

asked 2016-04-11 10:42:52 -0500

badrobit gravatar image

I am currently working on trying to create some form of wheel odometry to be used in our system to help determine the pose of our robot. There are no encoders on the wheels but the motor that is used to drive the wheels does report its RPM. I am wondering if there is anyway to use this as an input to the robot_localization node?

edit retag flag offensive close merge delete



How does the motor know what RPM the wheels are rotating at without encoders?

Icehawk101 gravatar image Icehawk101  ( 2016-04-11 14:25:42 -0500 )edit

it has a hall sensor internally we just don't have access to it directly we get the value out as RPM

badrobit gravatar image badrobit  ( 2016-04-11 14:32:49 -0500 )edit

2 Answers

Sort by ยป oldest newest most voted

answered 2016-04-11 14:33:42 -0500

Yes, you can do this. The odometry message is basically the total translation and rotation of the robot as well as its current instantaneous velocities both linearly and rotationally.

You know the speed the wheels are rotating at, and I assume you either know or can determine the size of the wheels. Using this data and the kinematic equations of your robot setup you can calculate the robot's current velocities. You find the overall displacement by multiplying the current velocity by the time step and adding that to the total. Check out this tutorial on how to setup a basic odom publisher.

edit flag offensive delete link more

answered 2016-04-11 13:12:25 -0500

John Hoare gravatar image

Sure, you would need to write a node which converts the wheel RPMs into a nav_msgs/Odometry message which robot_localization would consume.

edit flag offensive delete link more


would you suggest just performing this as a 1:1 treating RPM as the same thing as encoder ticks just with much less resolution?

badrobit gravatar image badrobit  ( 2016-04-11 14:33:17 -0500 )edit

You would use Speed = (RPM (diameter * PI) / 60) to find the velocity of each wheel, then put that into the kinematic equations of the robot to determine the robot's overall velocities along the x and y axis and about the z axis

Icehawk101 gravatar image Icehawk101  ( 2016-04-11 14:47:22 -0500 )edit

I am not that familiar with using the kinematic part of the system we have TF2 setup does this just refer to changing the reference frame for the two velocities?

badrobit gravatar image badrobit  ( 2016-04-12 15:27:45 -0500 )edit

The transform is the change in reference between odom frame and the world frame. The kinematic equations are used to determine what effect the individual wheel velocities have on the robot as a whole.

Icehawk101 gravatar image Icehawk101  ( 2016-04-13 07:07:11 -0500 )edit

I guess I am not sure how exactly I would go about doing that. I have the values like you said and I have a rover model loaded through URDF which has all of the required frames listed I am just not sure how to put the speeds into the system in a way that would output the desired result.

badrobit gravatar image badrobit  ( 2016-04-13 11:01:18 -0500 )edit

Question Tools

1 follower


Asked: 2016-04-11 10:42:52 -0500

Seen: 2,120 times

Last updated: Apr 11 '16