Обратный кинематик с использованием Qt (решено вперед) для 5-осевой головки с ЧПУ - PullRequest
0 голосов
/ 04 декабря 2018

в 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 и оси

, например, для осей, параллельных XYZ, я могу использовать auto 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());
}

Но я нене знаю, как это сделать с другими конфигурациями осей

...