Kei*_*all 9 c# accelerometer gravity wiimote
对于一个项目,我和我的团队一直在尝试使用内置的加速度计和WiiMotion Plus陀螺仪在3D空间中跟踪wiimote.
我们已经能够使用ODE(在http://www.alglib.net/上找到)跟踪旋转和位置,但是我们遇到了从加速度计中移除重力分量的问题.
我们研究了具有公式的Accelerometer重力组件(在C#/ XNA中实现)
private Vector3 RemoveGravityFactor(Vector3 accel)
{
float g = -1f;
float pitchAngle = (Rotation.Z);
float rollAngle = (Rotation.Y);
float yawAngle = (Rotation.X);
float x = (float)(g * Math.Sin(pitchAngle));
float y = (float)(-g * Math.Cos(pitchAngle) * Math.Sin(rollAngle));
float z = (float)(-g * Math.Cos(pitchAngle) * Math.Cos(rollAngle));
Vector3 offset = new Vector3(x, y, z);
accel = accel - offset;
return accel;
}
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用.作为参考,加速度直接来自加速度计,并且在通过ODE工作之后以旋转角度测量旋转.
此外,我们在理解这个公式是如何工作方面遇到了问题.由于我们的跟踪考虑了所有维度,为什么不考虑Yaw?
提前感谢您提供的任何建议或帮助.
编辑:
在与我的队友和老板讨论之后,我们发现如果我们正确使用X,Y和Z,这个公式实际上会有效.我们来到另一个树桩了.
我们遇到的问题是我们正在使用的Wiimote库根据陀螺仪运动返回相对旋转值.换句话说,如果按钮朝上,左右旋转wiimote是偏航,如果按钮面向你,当它应该是整个wiimote的旋转时,偏航是相同的.
我们发现欧拉角可能是我们的答案,但我们不确定如何恰当地使用它们.如果对此新开发项目有任何意见或任何其他建议,请给予他们.