in a 5 axis machine, I use forward kinematics to know the orientation of the tool from the position of C and A axis:
Forward kinematic it's easy in 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;
}
This axis configuration is's very easy, but can be different, for example
aRotation=QQuaternion::fromAxisAndAngle(1.0f, 0.0f, 1.0f, A);;
cRotation=QQuaternion::fromAxisAndAngle(0.0f, 0.0f, 1.0f, C );;
My question is: how can I do inverse kinematics?
From tool orientation vector to C and A axis position
for example, for axis parallels to XYZ I can use auto vect =quaternion.toEulerAngles(); Then, euler angles are equal to axis position.
example, for (1,0,0)and (0,-1,0) axis I use
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());
}
But I don't know how how to do it with others axis configurations