gpt4 book ai didi

android - 陀螺仪没有任何漂移

转载 作者:行者123 更新时间:2023-11-29 22:10:06 27 4
gpt4 key购买 nike

我的处境有点奇怪。我目前的情况通常是一个很好的情况——根本没有陀螺仪漂移——但我不知道为什么会这样。正如到处报道的那样,我预计陀螺仪会漂移很多。因此,这个问题是为了找出我没有看到任何漂移的原因。

最后,我使用 Galaxy Nexus (Android 4.0.3) 及其陀螺仪进行一些方向变化检测。首先,我只是想记录传感器读数并希望看到较大的漂移值,例如 here。 .我还在其他网站上读到每秒漂移约 1 度或类似的测量结果。

我记录传感器数据的代码非常基础:

SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
LogSensorEventListener listener = new LogSensorEventListener(
SensorLoggerActivity.this, Sensor.TYPE_GYROSCOPE);
sm.registerListener(listener, sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
SensorManager.SENSOR_DELAY_FASTEST);

LogSensorEventListener 也是 SensorEventListenerInterface 的一个非常基本的实现:

@Override
public void onSensorChanged(SensorEvent event) {

final float dT = (event.timestamp - mTimestamp) / 1000000000.f;
if (dT < 1) { // just a fix for the first step

mRelZ += event.values[2] * dT;
list.add(mRelZ);
list2.add(event.timestamp);
}
mTimestamp = event.timestamp;

mRelZ 最初设置为 0,两个列表应跟踪时间和测量值。如果完成我的测量(单击按钮),这些值将写入文件:

    try {

for (int i = 0; i < list.size(); i++) {

long time = list2.get(i);

if (mStartTime < 0) {
mStartTime = time;
time = 0;
} else {
time = time - mStartTime;
}

float timef = time / 1000000000.0f;
sb.append(timef);
sb.append(";");
sb.append(Math.toDegrees(list.get(i)));
sb.append("\n");
}

mOutFileStream.write(sb.toString().getBytes());

mOutFileStream.flush();
mOutFileStream.close();
} catch (IOException e) {
}

一切正常,但我能看到的唯一漂移(例如,当将设备放在 table 上并记录值比方说 60 秒时)大约为 0.2 度。如果我移动设备以获得类似上面屏幕截图中的内容,则根本不会观察到任何漂移...

我做错了什么(或做对了?)??

感谢您的建议!

最佳答案

您的陀螺仪可能是后置滤波的,我在一些 SAMSUNG I9100 设备中发现了这个。他们使用 INVENSENSE CORP 生产的陀螺仪。

edit 2014/12/10 for commenting @Lourenço Castro i believe @Lourenço Castro was right about the 'factory drift'(or zero-drift) and 'accumulated drift';

关于互补/卡尔曼滤波器,在 Android 上,6dof(ACC+GYRO) impl。工作正常,由于加速度计的校准,它可以消除陀螺仪的出厂漂移和累积漂移;

然而,9dof impl.,或考虑添加磁力计传感器,过滤器运行到您不想要的状态。根据我的测试,这是由磁力计未校准状态引起的,需要人们在融合之前摇晃(称为“画八”)手机以将其移除。

9dof 提供完整的旋转估计,而 6dof 无法处理围绕 y 轴旋转的累积漂移(请参阅 android 的引用以了解轴定义)。而且我不认为在启动应用程序之前“摇动和绘制数字 8”是一个好的 UE,所以我们必须回到 6dof 方法并尝试找到一种方法来消除围绕 y 旋转的工厂漂移 -轴。

(这里应该有很多关于互补/卡尔曼滤波器的无聊但令人惊奇的内容。但我想那些来到这里的人已经知道了。)

您可以试用 Google 相机中包含的 360 度全景应用程序,该应用程序可从市场下载。这个应用程序使用视觉辅助(基于图像处理的运动估计)在我们真正开始捕捉之前校准传感器,很容易验证这一点。我猜也没有使用磁力计。

所以我在 Android 上使用传感器融合的建议是:1.没有磁力计; (不知道是硬件问题还是可以通过软件解决。)2.加速度计+陀螺仪提供流畅稳定的6dof运动估计;3.尝试解决绕y轴的漂移,主要是加入visual-method;4. 尝试 3 并尝试 3...

也许有人会遇到这个问题,我希望以上内容对您有所帮助。感谢 StackOverflow 上与此问题相关的帖子。我不记得你们的名字了,但你们都帮了我很多。 :)

关于android - 陀螺仪没有任何漂移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9825129/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com