# Relation between cmd_vel and odometry twist data? I have some short questions please if anyone can answer these questions.

Q1: What will be the unit of angle when we use

angle = tf::getYaw(odom.pose.pose.orientation);


Q2: What should be the unit of linear and angular velocity when setting cmd_vel of diffrential drive robots? i.e.

cmdvel_.linear.x = vt;  // (m/s)
cmdvel_.angular.z = w;  // (rad/s) is it ok?


Q3: What is the unit of Odometry.twist.twist.angular.z?

Q4: If I want to find the previous velocity vector from Odometry data. Am I doing right? I want to find velocity vector in Odom frame?

linearV = (odom.twist.twist.linear.x);
angularV = (odom_globalVal.twist.twist.angular.z);

Vx = linearV * cos(angularV);  // wrong::its not an angle its angular velocity

Vy = linearV * sin(angularV);  // wrong


Thanks a lot.

edit retag close merge delete

Sort by » oldest newest most voted

Great references (and hopefully they clarify your questions too) are on the wiki and the REPs, e.g. distances are in meters, angles are in radians or more broadly, SI or SI-derived units are to be used (by everyone).

Remember that the twist message "expresses velocity in free space broken into it's linear and angular parts." So angular.z is the angular velocity (not an angle).

more

Thanks, It helps a lot. In my implementation I want to find the previous velocity vector of differential drive robot. Is there any possibility that I can find it from Odometry data.

Yes. The Odometry message contains the current Twist (and its covariance) at the time of that measurement. Have a look at the REP 103 that defines the standard units that should be used in ROS.

more

i also have this problem. i think linearV = (odom.twist.twist.linear.x); is the velocity of the robot, but observing the data obtained it isn't like that. So i confused if i am wrong? why?

more