问题标签 [magnetometer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
4257 浏览

android - 如何充分替换 Sensor.TYPE_ORIENTATION(现已弃用)?

我已经尝试了在互联网上SensorManager.getOrientation()相关讨论中找到的几个代码片段。没有人像以前那样可靠地给出磁方位角Sensor.TYPE_ORIENTATIONSensor.TYPE_ORIENTATION任何人都可以分享用于仿真的工作代码吗?

0 投票
3 回答
9787 浏览

android - Android 指南针方位

我正在尝试使用以下方法以度数(即 0-360)获取指南针方位:

方位角值(即orientation[0])应该是 0<=azimuth<360 但是当我旋转我的设备时,我只得到从 -3 到 3 的值。有人可以告诉我问题可能是什么吗?

0 投票
3 回答
29056 浏览

android - 将设备中的磁场 X、Y、Z 值转换为全局参考系

当您使用 TYPE_MAGNETOMETER 传感器时,您将获得与设备方向相关的磁场强度 X、Y、Z 值。我想要得到的是将这些值转换为全局参考框架,澄清:用户拿起设备,测量这些值,然后将设备围绕任何轴旋转一些度并获得〜相同的值。请在下面找到类似的问题: 获取全局坐标中 的磁场值 如何获得磁场矢量,与设备旋转无关? 在这个答案中描述了示例解决方案(它用于线性加速,但我认为没关系):https ://stackoverflow.com/a/11614404/2152255 我用了它,我得到了 3 个值,X 总是很小(不要认为它是正确的),Y 和 Z 都可以,但是当我旋转设备时它们仍然发生了一些变化。怎么可能调整?可以全部解决吗?我使用简单的卡尔曼滤波器来近似测量值,因为没有它,即使设备根本没有移动/旋转,我也会得到不同的值。请在下面找到我的代码:

感谢所有阅读这篇文章并提前发布有关该问题的想法的人。

0 投票
4 回答
20523 浏览

ios - 在 iOS 中,Core Location 和 Core Motion 框架中的磁场值有什么区别?

我有两种使用 iOS 设备的磁力计获取磁场(强度、x、y 和 z)的方法。

1)核心位置
使用CLLocationManagerDelegate方法的CLHeading locationManager:didUpdateHeading:。这类似于 Apple 的 Teslameter 示例应用程序。

2) 核心运动从's
使用。 CMMagneticFieldCMMotionManagermagnetometerData.magneticField

问题:
a) 两者有什么区别?我从两者中得到不同的价值观。我期待他们会返回相同的值。
当我从静止位置(面朝上放在桌子上)启动应用程序,然后将设备举到空中时,差异最为显着。
b) 如果有差异,我应该什么时候使用 Core Location 航向的磁场,什么时候应该使用 Core Motion 的磁场?

注意:我也不确定核心位置和核心运动的“磁场”是否指不同的磁场概念。
注意:对于这两种方法,我将强度计算为 (x^2 + y^2 + z^2) 的平方根。

0 投票
2 回答
1084 浏览

android - 来自智能手机的后处理传感器读数 - 从磁力计计算的重力

我现在正在尝试从记录加速度计、陀螺仪和磁力计输出的 Android 应用程序中提取 Matlab 信息。由于我需要找到线性加速度,我假设我可以从加速度计计算它,并考虑重力。我认为应该可以通过基于磁力计输出(地球磁场)检查手机方向来找到。但我无法用任何公式得到正确的结果。借助磁力计可以找到重力矢量,我说得对吗?如果是这样,我应该如何解释传感器读数?

0 投票
1 回答
1912 浏览

android - Android磁力计返回随机值

我正在构建一个 Android 应用程序,它将设备的罗盘度数记录到一个文件中。获得这个学位有两种方法:

方法一:

方法二:

我通过将我的设备放在北方向(大约 360 度)来尝试这两种方法:

方法 1返回完美的结果,但不幸的是,此方法已被弃用:

  • 359.6567
  • 359.5034
  • 359.859
  • 359.76212
  • 359.8878
  • 359.87048
  • 359.8356
  • 359.80356
  • 359.81192
  • 359.7671
  • 359.84668
  • 359.88528

方法 2也返回良好的结果,但有时(随机)它返回不正确的度数:

  • 359.91495
  • 359.83652
  • 263.67697
  • 359.67993
  • 359.70038
  • 359.688
  • 359.71155
  • 359.70276
  • 359.6984
  • 359.6429
  • 270.6323
  • 359.62302
  • 359.49954
  • 359.44757
  • 359.47803
  • 359.4947
  • 359.39572

如您所见,使用第二种方法会随机返回一些不正确的度数。该设备已校准,我认为问题在于第二种方法,因为第一种方法返回完美的结果。你们能帮帮我吗?

0 投票
1 回答
2751 浏览

android - Android磁力计返回非平滑数据

我正在构建一个 Android 应用程序,它将设备的罗盘度数记录到一个文件中。有两种方法可以获得这个学位:

方法一:

方法二:

我尝试了这两种方法,将我的设备放在北方方向并做一个完整的顺时针 360 度循环,然后再次在北方方向结束。

方法 1返回以下记录的 JSON 数据:

方法 2返回日志以下 JSON 数据:

如您所见,尽管我从北到北直接转了一圈,但第二种方法的结果不如第一种方法顺利。我更喜欢使用第一种方法,但问题是它已被弃用。另一方面,第二种方法不记录平滑数据。在你们看来我该怎么办?

0 投票
1 回答
1949 浏览

android - 旋转设备时磁场测量的奇怪行为

情况:

我正在尝试通过指纹识别利用建筑物内的磁场变化来创建一个室内定位系统。作为传感器,我使用我的手机 Galaxy Nexus。

基本上,获取我的指纹的想法是分别测量 x、y 和 z 方向的磁场,并通过移动设备的方向旋转矢量以将矢量带入世界坐标系。为了定位某人,他还测量了磁场,旋转矢量并将其发送到服务器,我将在服务器上运行我的定位算法。

我的问题:

当我在不同方向测量同一点的磁场时,旋转矢量后不会得到相同的结果。甚至场强也不一样。

为了证明这一点,我在同一位置进行了四次测量,并将手机绕着他的 z 轴(标准 Android 规范)分别逆时针旋转了 90、180 和 270 度。结果可以在该“表”和下面的 Matlab 图(点击链接)上看到(如果您想获得其他视图,请告诉我)

编辑: 更准确地说:我真正做的是我定义了我自己的坐标系,称为房间坐标系。我拿了房间的一面墙,把它定义为北。当它平放在桌子上时,我的手机外星人与那面墙(在第一个位置)的 y 轴。因此,正 z 轴指向天空,x 轴定义为 90 度角的墙壁。以“Raw”命名的向量是手机的原始值,因此它们位于手机的坐标系中。以“Rotated”命名的向量被旋转到该“房间坐标系”中。在图中,虚线向量是原始向量,实线向量是旋转向量。

在此处输入图像描述 在此处输入图像描述

正如您所看到的,即使在旋转它们之后它们也并不真正匹配。你知道为什么会这样吗?有什么我可能还没有考虑到的吗?提前非常感谢!

编辑2

第二次实验

我做了另一个实验,结果更好,但仍然没有我预期的那么好。这一次,方向并不像应有的那样恒定。这次我在户外进行了测量。我将 y 轴疏远到真北并将其平放在地面上。我将它逆时针旋转了大约 3 次 90 度。我用另一台相机拍摄了手机​​位置的照片,并用 Photoshop 测量了实际旋转。您可以在表格和下面的图表中看到结果:

在此处输入图像描述 在此处输入图像描述

补充笔记:

这些值是几秒钟内的平均值。所以这不是噪音的问题。

我知道我不能使用该函数getOrientation,因为它使用磁场来计算方向,这没有意义,因为我想找到磁场的变化。对于上面的示例,我手动创建了旋转四元数。

0 投票
1 回答
1052 浏览

android - 确定 GPS 坐标的方向

我正在尝试根据与磁北或真北相关的 GPS 坐标来确定目标位置的方向。根据我的手机当前所在的位置,由 Android 定位服务确定,我如何知道目标位置在哪个方向?

谢谢

0 投票
1 回答
1201 浏览

android - Android磁力计计算高度

是否可以使用 Android 磁力计获得我所在位置的高度?如果是,我该如何计算高度?据我了解,我从 Android API 中获得了三个坐标 x、y 和 z 以及特斯拉的磁场强度。我可以将这些坐标转换为欧拉角来确定位置,但我不知道我是否可以计算出高度。有人知道这一点并且能够帮助我在不使用 GPS 的情况下计算出海拔高度吗?