- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的处境有点奇怪。我目前的情况通常是一个很好的情况——根本没有陀螺仪漂移——但我不知道为什么会这样。正如到处报道的那样,我预计陀螺仪会漂移很多。因此,这个问题是为了找出我没有看到任何漂移的原因。
最后,我使用 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/
我希望创建能够快速重复的功能 - 大约 50 毫秒。然而,我需要在调用中尽可能保持一致性,并且我发现 NSTimer 有点不稳定。看来我可能会从 mach_absolute_time 找到一些保持时间
根据 API 文档以及之前的 SO threads , SystemClock.elapsedRealtime() 应该即使在设备处于 sleep 状态时也能保持准确的时间。这不是我观察到的。 我编写
我想开发在谷歌地图上绘制当前位置的应用程序。在这里,我通过 LocationManager(GPS 提供商和网络提供商)的 onLocationChanged 获取位置详细信息。我能够获取位置详细信息
我有一个使用 MKMapView 的简单 iPhone 应用程序。它有一个分段控件,可以调整要缩放的区域(街道、社区、城市、州、世界)。它工作正常,但如果我缩小到州级别并回到街道,我注意到中心点已经移
我正在尝试在连接到本地 NTP 服务器的 Mac 上获取实际的 NTP 漂移。 读取/var/db/ntp.drift 文件时,根据PPM to milliseconds conversion 得到-
我有一个 AWS Cloud Formation 堆栈。我启动并停止了该堆栈中的 EC2 实例。现在堆栈已漂移,下面是漂移结果。我该如何解决这个问题,因为预期和实际都是相同的。 最佳答案 我不相信这与
我是一名优秀的程序员,十分优秀!