我在做一个带有肌手镯的项目。手镯使用四元数来跟踪它的方位。我想要的是一个指向我前臂方向而不定向的向量,也就是我只想要一个代表我前臂的单位向量。这有可能吗?有人知道怎么做吗?
我试着按照这个站点数学-四元数变换向量‘上的说明执行P’= QPQ^-1的四元数乘法,但我没有做到这一点。我怀疑这是因为四元数输出的Myo手镯不是一个单一的旋转,而是一个不断变化的方向/旋转,因为我的手臂/手镯。
基本上,我从Myo得到的数据是以X,Y,Z,W的形式,随着我手臂的移动而发生变化。如果有人能帮我一把,我会非常感激的。
干杯,//
发布于 2018-11-23 16:02:09
听起来你想从四元数中得到欧拉角,所以本参考可能是一个更好的起点。Myo文档( SDK下载这里的一部分)中的hello-myo示例使用以下代码:
// Calculate Euler angles (roll, pitch, and yaw) from the unit quaternion.
float roll = atan2(2.0f * (quat.w() * quat.x() + quat.y() * quat.z()), 1.0f - 2.0f * (quat.x() * quat.x() + quat.y() * quat.y()));
float pitch = asin(max(-1.0f, min(1.0f, 2.0f * (quat.w() * quat.y() - quat.z() * quat.x()))));
float yaw = atan2(2.0f * (quat.w() * quat.z() + quat.x() * quat.y()), 1.0f - 2.0f * (quat.y() * quat.y() + quat.z() * quat.z()));与上述不相关,也不确定它是否有用,但如果你试图在现实世界中找到手臂,你总是需要一个已知的参考或开始方向,然后比较以下所有的测量值。对于Myo,这通常是通过让佩戴者把他们的手臂放在一个已知的位置,并按下一个校准按钮。有时候,有更聪明的方法来实现这一点,但这取决于应用程序。一旦您有了引用,您将从未来的度量中减去它以获得真正的方向,本质上是:orientationReal = orientationMeasured - orientationReference,您通常希望先以四元数格式进行计算(请参阅万向节锁),但根据应用程序的不同,欧拉角可能是可以的。
https://stackoverflow.com/questions/53443536
复制相似问题