【发布时间】:2014-04-27 21:00:15
【问题描述】:
为了控制机械臂,我有一个具有 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 顺时针旋转,姿势将相应旋转,而不是“有时顺时针旋转,有时逆时针旋转”。
【问题讨论】:
-
我高度建议您使用 ROS 的 transform 库。它让你做你想做的事变得更加容易,包括将四元数转换为任意帧中的标准齐次变换矩阵。
-
您是否尝试从输入交换当前旋转和旋转的乘法顺序?
标签: linear-algebra quaternions ros inverse-kinematics