我正试图在我的Unity项目中使用IMU实现"航位推算"。目前我不能得到好的结果:速度变为负,所以角色向后移动,或者角色有时在IMU向前移动后来回移动。我怀疑脚本被调用的频率没有IMU数据发送频率高,或者我的脚本不正确。有没有一种方法可以让方法/脚本更频繁地被调用?或者是我在代码中做错了什么:
/// <summary>
/// This is the coroutine called in the start Method. It keeps running in the background and keeps track of the user making steps.
/// </summary>
/// <returns>WaitForSeconds</returns>
IEnumerator StepcounterLeft()
{
float prev_zVel = 0;
float prev_zAcc = 0;
for (var a = 0; a < 1;)
{
yield return new WaitForSeconds(0.0001f);
float zAcc = (float)vn100l.CurrentMeasurements.LinearAccelerationBody.Z;
float zVel = prev_zVel + (prev_zAcc + ((zAcc - prev_zAcc)/2.0f)*Time.deltaTime);
if (zVel > -0.1 && zVel < 0.1)
zVel = 0;
speed = zVel / 10;
prev_zVel = zVel;
prev_zAcc = zAcc;
if ((zAcc > -0.1 && zAcc < 0.1) && (prev_zAcc > -0.1 && prev_zAcc < 0.1))
prev_zVel = 0;
}
}
通过System.Threading创建一个新线程的速度为0.001秒。要从加速度计中读取所有值,我需要0.000008秒的速度,但这似乎是它能达到的最快速度。