1

为了控制机械臂,我有一个具有 6 个维度(x、y、z 位置以及滚动、俯仰、偏航旋转)的控制器。我使用位置 (x, y, z) 和四元数 (x, y, z, w) 来表示机器人夹具的所需位置和方向。

我正在使用一些人们可能不熟悉的库(即来自 ROS 的 geometry_msgs),所以这是我在伪代码中所做的:

while(true):
  new_position = last_position + (joy.x, joy.y, joy.z)
  new_quaternion = last_quaternion * quaternionFromRPY(joy.roll, joy.pitch, joy.yaw)

  // (Compute inverse kinematics using position and orientation, then send to robot arm)

  last_position = new_position
  last_quaternion = new_quaternion

  delay(dt)

我可以很好地设置姿势位置部分的 x、y 和 z。从技术上讲,我也可以很好地设置四元数,但我的问题是控制四元数非常不直观,因为旋转不是可交换的。即,如果我围绕 x 轴旋转 180 度,那么围绕 z 轴的旋转控制会反转。

有什么方法可以让我从某种“全局参考框架”中控制旋转,如果这有意义的话?我希望这样,如果我将操纵杆绕 z 顺时针旋转,姿势将相应地旋转,而不是“有时顺时针旋转,有时逆时针旋转”。

4

1 回答 1

1

这不就像交换四元数乘积中的因子顺序一样简单吗?

单位四元数qv局部坐标中的向量转换为全局坐标中的旋转向量q*v*q'。修改后的四元数a*q*ba, b也是单位四元数)转换v

a*(q*(b*v*b')*q')*a', 

其中 b 部分可以解释为局部坐标中的旋转,a 部分可以解释为全局坐标中的旋转。

因此,要仅在全局坐标中应用旋转,请设置b=1,即,将其排除在外,并将所需的旋转放入a因子中。

于 2014-04-28T12:51:40.967 回答