使用Qt的反向运动学(正解)cnc 5轴头

时间:2018-12-04 07:28:46

标签: qt rotation qt5 inverse-kinematics kinematics

在5轴机床上,我使用正向运动学从C轴和A轴的位置了解刀具的方向:

5x head

在Qt中前进运动很容易:

QVector3D forward_kinematic(double C,double A){
  QQuaternion aRotation=QQuaternion::fromAxisAndAngle(-1.0f, 0.0f, 0.0f, A);
  QQuaternion cRotation=QQuaternion::fromAxisAndAngle(0.0f, 0.0f, 1.0f, C );
  QQuaternion totalRotation = cRotation*aRotation   ;
  QVector3D  rotated_tool_axis = totalRotation.rotatedVector(QVector3D(0,0,1)); 
  return rotated_tool_axis;
}

此轴配置非常简单,但可以有所不同, 例如

aRotation=QQuaternion::fromAxisAndAngle(1.0f, 0.0f, 1.0f, A);;
cRotation=QQuaternion::fromAxisAndAngle(0.0f, 0.0f, 1.0f, C );;

我的问题是:如何进行逆运动学?

从刀具方向矢量到C和A轴位置

例如,对于与XYZ平行的轴,我可以使用  自动vect = quaternion.toEulerAngles(); 然后,欧拉角等于轴位置。

示例,对于我使用的(1,0,0)和(0,-1,0)轴

inline QVector2D forward_kinematic( QVector3D orientation){
 auto quaternion=QQuaternion::rotationTo(QVector3D(0,0,1),orientation);
 auto vect =quaternion.toEulerAngles();
 return  QVector2D(-vect.y(),vect.x());
}

但是我不知道如何使用其他轴配置

0 个答案:

没有答案