为了控制机械臂,我有一个具有 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 顺时针旋转,姿势将相应地旋转,而不是“有时顺时针旋转,有时逆时针旋转”。