0

我正在用 myo 手镯做一个项目。手镯使用四元数来跟踪它的方向。我想要的是一个指向我的前臂方向而没有方向的向量,即我只想要一个代表我的前臂的单位向量。这可能吗?有人知道该怎么做吗?

我已尝试按照本网站Maths - Transforming Vectors with Quaternions上的说明执行 P' = QPQ^-1 的四元数乘法,但我无法使其正常工作。我怀疑这是因为 Myo 手镯输出的四元数不是单次旋转,而是在我移动手臂/手镯时不断变化的方向/旋转。

基本上,我从 Myo 获得的数据是 [X,Y,Z,W] 的形式,并且随着我移动手臂而变化。如果有人能帮助我,我将不胜感激

干杯,//哈勒

4

1 回答 1

0

听起来您正在尝试从四元数中获取欧拉角,因此此参考可能是一个更好的起点。Myo SDK 文档中的 hello-myo 示例(在此处下载 SDK 的一部分)使用以下代码:

// 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你通常希望首先以四元数格式进行计算(参见Gimbal lock),但根据你的应用程序,欧拉角可能没问题.

于 2018-11-23T16:02:09.257 回答