我对 IMU 的短期位置跟踪进行了很多研究,但似乎找不到任何东西。很多人说用加速度计跟踪位置是不可能的,但这一切都是在长期位置跟踪的背景下进行的。我只是在寻找不到一秒钟的东西。
我用谷歌搜索了一下,发现了这个视频。
这显示了使用 IMU 来实现这一点,但是当我对加速度进行二重积分时,它变得非常混乱。关于如何解决这个问题有什么建议吗?卡尔曼滤波器能解决一些问题吗?
我想构建一个 Ionic 应用程序,当应用程序最小化(在后台运行)时,该应用程序仍然可以使用加速度计数据。
我尝试过使用:
前两个在前台工作,但当应用程序在后台时不起作用(加速度计读数暂停并在前台再次恢复)。即使我使用这个 polyfill,通用传感器 API 也根本无法工作: https: //github.com/kenchris/sensor-polyfills
我还尝试了离子背景模式插件,但是,加速度计读数仍然在后台暂停。 https://ionicframework.com/docs/native/background-mode
Ionic 应用程序如何在后台使用加速计?有没有我不知道其存在的插件(例如,Ionic 背景地理定位允许应用程序在后台接收位置)?还有其他办法吗?
background accelerometer ionic-framework devicemotion sensors
我一直在尝试使用传感器包实现陀螺仪图像查看器,但是,结果似乎非常滞后。我在YouTube上发现了一个类似的项目,它试图实现类似的目标,但正如您在视频中看到的,动画也非常滞后。
下面的代码只是从事件中输出数据,我注意到数据的更新在更新之间有 50 毫秒的滞后。
有没有办法让动画更平滑或者更快地更新数据?或者这是 Flutter 的限制?
注意:我已经按照其他帖子的建议尝试了 --release 版本,但结果保持不变。
import 'package:sensors/sensors.dart';
class MyGyro extends StatefulWidget {
final Widget child;
MyGyro({this.child});
@override
_MyGyroState createState() => _MyGyroState();
}
class _MyGyroState extends State<MyGyro> {
double gyroX = 0;
double gyroY = 0;
@override
void initState() {
super.initState();
gyroscopeEvents.listen((GyroscopeEvent event) {
setState(() {
gyroX = ((event.x * 100).round() / 100).clamp(-1.0, 1.0) * -1;
gyroY = ((event.y * 100).round() / 100).clamp(-1.0, 1.0);
});
});
}
@override
Widget build(BuildContext context) { …Run Code Online (Sandbox Code Playgroud) 我计划从包含加速计和陀螺仪的 IMU(惯性传感器)获取 3D 笛卡尔坐标中的位置。我用它来跟踪 3D 对象的位置和轨迹。
1-根据我有限的知识,我假设单独的加速度计就足够了,导致 xyz 轴A (Ax,Ay,Az) 上的加速度,并且需要积分两次才能获得速度,然后获得位置,但积分会增加一个未知的常数值,这种称为漂移的误差随着时间的推移而增加。如何消除这个错误?
2-此外,为什么首先需要陀螺仪,我们不能将 xyz 轴加速度转换为位移吗?如果加速度计告诉运动轴,那么为什么要检查陀螺仪的方向。抱歉,这是一个非常基本的问题,我到处检查都使用了陀螺仪+加速器,但不知道为什么。
3-即使在静止且没有任何运动时,地球引力也会作用在传感器上,其给出的值始终大于传感器运动所产生的值。如何消除重力?
完成此操作后,将对它们应用卡尔曼滤波器以融合它们并平滑值。在无法选择 GPS 的环境中,这种方法对物体轨迹估计的准确度如何。我从arduino获取加速度计和陀螺仪值,然后导入到Python,并将其绘制在实时更新的 3D 图形上。任何帮助将不胜感激,尤其是类似代码的链接。
是否可以在XCode模拟器中模拟运动(即加速度计),麦克风和摄像头?
如果是这样,你怎么做?
如果没有,是否有任何XCode插件或第三方应用程序执行此操作?(当然除了下载到实际的iPhone).
提前致谢!
有人可以给我一个例子,说明你是如何检测iphone是向左移动还是向右移动.就像一个摇晃的长版本我希望我的应用程序能够知道用户手臂是向右还是向左.想象你的手就像一个窗口刮水器,最后是手机
有任何想法吗?
谢谢,山姆:P
因此,我只是想让一个球在屏幕周围反弹,这应该会因为重力而减速,并像普通球一样从墙上反射(反弹).有人可以提供一些基础知识和非常简单的实现吗?其他例子似乎有点"过头",似乎超出了我想做的事情.我试过这个:
public void updateLogic() {
if (x < -1) {
xPos += (-x * gravity);
} else if (x > 1) {
xPos -= (x * gravity);
}
if (y > 1) {
yPos += (y * gravity);
} else if (y < -1) {
yPos -= (-y * gravity);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我自己最接近的.顺便说一句,x和y值来自加速度计.任何帮助将不胜感激,谢谢!
我试图使用加速度计制作速度表但由于某种原因代码崩溃可以有人请告诉我有什么问题以及如何解决它谢谢你
这是logcat中的红色部分:
05-14 13:03:55.826: INFO/ActivityManager(91): Start proc com.hanud.speedo for activity com.hanud.speedo/.speedometer: pid=2052 uid=10127 gids={}
05-14 13:03:56.806: DEBUG/AndroidRuntime(2052): Shutting down VM
05-14 13:03:56.806: WARN/dalvikvm(2052): threadid=1: thread exiting with uncaught exception (group=0x400207f0)
05-14 13:03:56.986: ERROR/AndroidRuntime(2052): FATAL EXCEPTION: main
05-14 13:03:56.986: ERROR/AndroidRuntime(2052): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.hanud.speedo/com.hanud.speedo.speedometer}: java.lang.ClassNotFoundException: com.hanud.speedo.speedometer in loader dalvik.system.PathClassLoader[/data/app/com.hanud.speedo-2.apk]
05-14 13:03:56.986: ERROR/AndroidRuntime(2052): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
05-14 13:03:56.986: ERROR/AndroidRuntime(2052): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-14 13:03:56.986: ERROR/AndroidRuntime(2052): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-14 13:03:56.986: ERROR/AndroidRuntime(2052): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-14 13:03:56.986: ERROR/AndroidRuntime(2052): at android.os.Handler.dispatchMessage(Handler.java:99)
05-14 13:03:56.986: ERROR/AndroidRuntime(2052): at android.os.Looper.loop(Looper.java:123) …Run Code Online (Sandbox Code Playgroud) 对于我的应用程序,我需要计算我的设备参考真北的加速度.我的想法是计算磁北的设备方向并对其应用偏角以使方向为真北.然后我想计算设备的加速度并将其引用到方向,但我不知道应该怎么做.
我会尝试使用SensorManager.getRotationMatrix()和获取设备方向SensorManager.getOrientation().然后我得到了偏角GeomagneticField.getDeclination()并将其应用于方位值的方位角SensorManager.getOrientation().
但是,如何将加速度计值映射到此方向?它甚至可能吗?
我在CMDeviceMotion的userAcceleration字段中看到了一些意外的读数.当我从CMAccelerometerData查看原始加速度计数据时,我看到如果iPhone在桌面上是平的,读数是1G直下(1G在-Z轴),如果我放下iphone(当然在柔软的表面上)那么加速器读数按预期变为零.那一切都很好.当我改为使用CMDeviceMotion类时,当桌面上的iPhone平放时,userAcceleration读数为零.再次这很好.但是当我放下iPhone并读取CMDeviceManager userAcceleration时,userAcceleration值是1G直线上升(+ Z)而不是按预期下降(-Z).看起来userCcceleration读数实际上与设备实际遇到的加速度完全相反.有没有人观察过这个?在尝试整合速度和位置之前,我可以反转(乘以-1)所有userAcceleration值,还是我误解了userAcceleration正在读取的内容?
accelerometer ×10
android ×3
sensors ×3
ios ×2
iphone ×2
position ×2
background ×1
camera ×1
core-motion ×1
devicemotion ×1
flutter ×1
gyroscope ×1
imu ×1
java ×1
microphone ×1
orientation ×1
pykalman ×1
python ×1
sensor ×1
tracking ×1
xcode ×1