我已经在代码审查中问过这个问题,因为这是可以工作的c ++代码,但是他们说在这里更好。 因此,我有一些代码可以将四元数(orix,oriy,oriz,oriw)旋转到另一个四元数,但是这种旋转编写得很糟糕,有人可以用更少的行数来做mabye。 所以我有两个问题,有人知道四元数是如何旋转的吗?我认为它以欧拉角围绕y旋转-pi / 2? 其次,有人知道如何更好地编写它吗?
这是完整的代码,它进行了转换(使用tf2导入)。
编辑:是的,tf2是一个库。这里的链接:docs.ros.org/melodic/api/tf2/
tf2::Quaternion quat(orix,-oriy,oriz,oriw);
tf2::Quaternion q_rot;
tf2::Vector3 rotation_vector(0.7071068,0.7071068);
q_rot.setRotation(rotation_vector,M_PI);
quat = q_rot*quat;
quat.normalize();
tf2::Matrix3x3 matrix(quat);
tf2::Matrix3x3 change_y(1,-1,1);
matrix = change_y * matrix;
double roll,pitch,yaw;
matrix.getRPY(roll,yaw);
quat.setRPY(roll,yaw);`