X、Y 和 Z 在 geometry_msgs 中的含义 ROS 中的 Twist 消息

des*_*der 8 ros

我正在尝试使用以下公式将 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;
Run Code Online (Sandbox Code Playgroud)

Twist.angular是一个向量 [x, y, z],所以是Twist.linear。x、y、z 在向量中是什么意思,如何从两个向量中获得角度和速度?

这是我在 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);
}
Run Code Online (Sandbox Code Playgroud)

aks*_*k07 11

认为你在一些空间,则有3个轴- xyz它们是相互彼此垂直和它们的交叉点被称作原点(x = 0,Y = 0,Z = 0)。这可以是一个参考框架,即您可以定义不同的点和方向。

xyzTwist.linear是线速度xy以及z方向WRT的参考该帧。

类似地,xy、 和zinTwist.angular分别是关于xyz方向的角速度。

因为你有一个地面机器人,你的角速度很可能是z机器人的转动速度。并且您的线速度将主要x在即机器人的直线移动速度中。至少 Turtlebot 2 就是这种情况。

  • 您可以使用“rosmsg show Geometry_msgs/Twist”进行检查。顺便说一句,它是“float64”。如果此答案解决了您的问题,请单击绿色勾号并接受它,以便可以关闭此问题。 (3认同)