ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-获取全局坐标中的磁场值

2019-10-09 20:26:49  阅读:421  来源: 互联网

标签:sensor android coordinates magnetometer


对于Android应用程序,我需要跨全球(世界)坐标系的轴进行磁场测量.这是我要(猜测)实现此目标的方式.请帮我纠正.另外,请注意,问题与任务的算法部分有关,而不与传感器的Android API有关-我对后者有经验.

第一步是获取TYPE_MAGNETIC_FIELD传感器数据(M)和TYPE_ACCELEROMETER传感器数据(G).第二个应该根据Android的文档使用,但是我不确定是否不应该使用TYPE_GRAVITY(还是G),因为加速度计似乎不能提供纯重力.

下一步是通过getRotationMatrix(R,I,G,M)获得旋转矩阵,其中R和I分别是旋转矩阵和倾斜矩阵.

现在最可疑的部分是:为了将M向量转换为世界坐标系,我想将[R * I] * M相乘.

我不确定这是否是将磁场读数转换为其他基础的正确方法.另外,我不知道是否应将remapCoordinateSystem用作上述内容的补充或替代.

如果有已经执行此操作的源代码,我将不胜感激地发布一个链接,但是我不想为该特定任务使用大型通用库(例如,用于增强现实支持),因为我愿意喜欢保持尽可能简单.

附:

我想到这个想法是为了清楚起见在原始帖子中添加一些信息.

让我们假设一个设备放在桌子上,并从其磁传感器连续读取数据.每次测量都包含3个值,分别代表设备的局部坐标系,X,Y,Z轴上的磁场.我认为我可以忽略环境场的波动(由低通滤波器消除),因此这3个值在设备保持原位的过程中应保持几乎相同.如果我们绕任何轴旋转设备,则值都会更改,因为我们会更改局部坐标系.但是字段本身并没有实际更改.因此,我想将局部X,Y,Z场测量值转换为这样的X’,Y’,Z’,只要设备不从其位置移动(仅旋转),它们就保持各自的值而与设备旋转无关.

我已经实现了上述算法,并通过建议的转换获得了值X’,Y’,Z’的规则且引人注目的变化,所以其中有些错误.

P.P.S.

有时候,我在SO上找到了与我的问题完全相同的副本-How can I get the magnetic field vector, independent of the device rotation?-但不幸的是答案包含了我的建议,该问题的OP确认它们不起作用.

解决方法:

M相对于单词坐标的坐标只是乘积R * M.

旋转矩阵R在数学上是基本矩阵从设备坐标到字坐标的变化.
假设X,Y,Z为设备坐标基础,而W_1,W_2,W_3为字坐标基础,则
M = m_1 X m_2 Y m_3
并且
M = c_1 W_1 c_2 W_2 c_3 W_3
其中R *(m_1,m_2,m_3)=(c_1,c_2,c_3)转置.

低通滤波器仅用于滤除X,Y方向的加速度. RemapCoordinateSystem用于更改基础的顺序,即从W_1,W_2,W_3更改为W_1,W_3,W_2.

标签:sensor,android,coordinates,magnetometer
来源: https://codeday.me/bug/20191009/1881877.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有