在5轴机床上,我使用正向运动学从C轴和A轴的位置了解刀具的方向:
在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());
}
但是我不知道如何使用其他轴配置