我正在尝试使用以下公式将Twist转换为左右车轮的速度:
float speed_wish_right = (cmd_vel.angle*WHEEL_DIST)/2 + cmd_vel.speed;
float speed_wish_left = cmd_vel.speed*2-speed_wish_right;
Twist.angle是向量[x,y,z],因此是Twist.linear。 xyz在向量中是什么意思,如何从两个向量中获得角度和速度?
这是我在Arduino中的回调函数
const int WHEEL_DIST = 16;
void velCallback(geometry_msgs::Twist vel) {
float linear = vel.linear.x;
float angle = vel.angular.z;
float speed_wish_right = (angle * WHEEL_DIST) / 2 + linear;
float speed_wish_left = linear * 2 - speed_wish_right;
motors.setSpeeds(speed_wish_left, speed_wish_right);
}
答案 0 :(得分:4)
请考虑您在某个空间中,然后有3个轴-x
,y
和z
彼此垂直,并且它们的交点称为原点(x = 0,y = 0,z = 0)。这可以作为参考框架,即您可以定义各种点和方向。他们。
x
中的y
,z
和Twist.linear
是x
,y
和z
中的线速度方向wrt该参考框架。
类似地,x
中的y
,z
和Twist.angular
是x
,y
和{{1 }}方向wrt相同的参照系。
现在,您可以确定需要什么了。
我可以看到您有一个地面机器人。因此,很可能您的角速度将在z
中,即您的转弯速度。并且您的线速度将主要在z
中,即您的直线移动速度。至少Turtlebot 2就是这种情况。