【发布时间】:2019-11-07 00:13:14
【问题描述】:
我已经在代码审查时问过这个问题,因为这是一个 c++ 代码,它可以工作,但他们说这里更好。 所以我有一些代码可以将一个四元数(orix,oriy,oriz,oriw)旋转到另一个四元数,但是这种旋转写得不好,有人可以用更少的行来做。 所以我有两个问题有人知道这个四元数是如何旋转的吗?我认为它以欧拉角围绕 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, 0.7071068);
q_rot.setRotation(rotation_vector, M_PI);
quat = q_rot*quat;
quat.normalize();
tf2::Matrix3x3 matrix(quat);
tf2::Matrix3x3 change_y(1,0, 0, 0, -1,0 ,0 ,0, 1);
matrix = change_y * matrix;
double roll, pitch, yaw;
matrix.getRPY(roll, pitch, yaw);
quat.setRPY(roll,pitch,yaw);`
【问题讨论】:
-
我猜你得到的
matrix实际上并不是一个旋转矩阵(但包含一个反射)。因此,我不希望matrix.getRPY()做任何有意义的事情。 -
你为什么要把Y轴改成-Y?
标签: c++ transformation ros quaternions euler-angles