将设备的磁场X、Y、Z值转换成全局参考框架
使用type_magnetometer传感器时,与设备方向相关的磁场强度值x,y,z值.我要获得的是将这些值转换为全局参考框架,澄清:用户采用设备,测量这些值,而不是在任何轴周围旋转设备,并获得相同的值. 请在下面找到类似的问题: 在全球坐标中获得磁场值 How can I get the magnetic现场矢量,独立于设备旋转? 在此答案中,描述了示例解决方案(这是针对线性加速的,但我认为这没关系): https://stackoverflow. com/a/11614404/2152255 我使用了它,得到了3个值,x总是很小(不要认为它是正确的),y和z可以,但是当我旋转设备时它们仍然改变了一点.如何调整?可以解决所有问题吗?我使用简单的Kalman滤波器来近似测量值,因为即使设备根本没有移动/旋转,我也会获得安静的不同值.请在下面找到我的代码: import android.app.Activity; import android.hardware.Sensor; imp
0 2024-02-17
编程技术问答社区
安卓。磁强计数据出现偏差
我正在尝试从加速度计,陀螺仪和磁力计数据估算标题.我已经通过在这里. 我正在尝试的是,我握住手机,直线行走了15个步骤,我试图估计上面链接中给出的欧拉角.但是,当我绘制原始数据时,我观察到磁力计数据会偏离.这是原始传感器数据的图像. 我的问题是:如何估计欧拉角,以表明我在直线上行走. 解决方案 您是在室内行走还是在某个地方可能有电场或磁场?从磁力计图来看,这就是发生的事情.如果是这样,恐怕没有解决您的问题的方法. 尝试运行指南针应用程序,甚至携带玩具指南针,然后走同样的路.我敢打赌,您会在走路时看到指南针. 我一直是环境,在桌子下向三英尺向下移动指南针可能会导致其摇摆180度. 顺便说一句:您几乎永远不想要欧拉角.他们有退化病例.如果可以的话,请尝试使用转换矩阵或四元素.
6 2024-02-10
编程技术问答社区
利用磁场计算旋转矩阵
在获取旋转矩阵值中它包含public static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic) 在这里如何计算float[] gravity? 我找到了一个代码示例,其中它同时使用Accelerometer和Magnetic field 计算orientation boolean success = SensorManager.getRotationMatrix( matrixR, matrixI, valuesAccelerometer, valuesMagneticField); if(success){ SensorManager.getOrientation(matrixR, matrixValues); double azimuth = Math.toDegrees(matrixValues[0]); double p
2 2024-02-07
编程技术问答社区
安卓。SensorManager.getRotationMatrix和SensorManager.getOrientation()的算法
要在Android中获得从Euler角度(例如,俯仰,滚动,方位角)的方向,需要执行以下操作: sensormanager.getRotationMatrix(float [] r,float [] i,float [] Gravity,float [float [] geomagnetic); sensormanager.getorientation(float [] r,float []方向); 在第一个中,我意识到它使用了一种三合一算法;旋转矩阵(R [])由重力,地磁X重力,重力X(地磁X重力)组成--- x是交叉产物. 请参见下面的代码: float Ax = gravity[0]; float Ay = gravity[1]; float Az = gravity[2]; final float Ex = geomagnetic[0]; final float Ey = geomagnetic[1];
2 2024-02-06
编程技术问答社区
在iPhone的Opengl Es中获得定向装置
我正在尝试将地磁和加速度计转换以在OpenGL ES1中旋转相机,我从Android找到了一些代码,并更改了此代码的iPhone代码,实际上它或多或少地工作了,但是有些错误,我m找不到这个错误,我把代码放了,也请呼叫OpenGL ES1:glLoadMatrixf((GLfloat*)matrix); - (void) GetAccelerometerMatrix:(GLfloat *) matrix headingX: (float)hx headingY:(float)hy headingZ:(float)hz; { _geomagnetic[0] = hx * (FILTERINGFACTOR-0.05) + _geomagnetic[0] * (1.0 - FILTERINGFACTOR-0.5)+ _geomagnetic[3] * (0.55); _geomagnetic[1] = hy * (FILTERINGFACTOR-0.05) + _geom
2 2024-01-09
编程技术问答社区
谁能告诉我,重力传感器是否作为倾斜传感器来提高航向精度?
X和Y轴的磁力计轴可用于计算电话水平到本地地面时北面的标题.但是,在滚动或俯仰电话时,我们应该使用滚动和音高学位来消除倾斜错误. 现在,我想知道重力传感器是否被用作倾斜传感器来获取滚动和音高以帮助提高朝北的准确性? 解决方案 在这里,我描述了如何相对于水平面和磁性北的设备的方向.从方向(旋转矩阵)获取磁性标题只是一行. 以加速度计和磁力计读数为3维向量 a 和 m . a x m 您可能至少要应用一个简单的移动平均值计算交叉产品. 一般而言,这不是一个好主意使用滚动,俯仰和偏航,所以请不要.无论如何,您不需要它. 加速度计读数 a ,交叉产品 a x m ,加速度计读数和交叉产物的交叉产品 a x( a x m )可为您提供3个垂直矢量.通过将它们的长度的倒数乘以它们来使它们使它们向量.这3个单元向量会给您 旋转矩阵等效于设备的方向.在我的应用中,磁头为atan2(R[Y][Y], R[Y][X]),其中r是旋转矩阵.您可能必须采用旋转矩阵的不同元素,也许
2 2024-01-09
编程技术问答社区
IMU速度估计
您知道我可以在哪里找到来自IMU(ACC+Gyro+磁力计)数据的速度估算的代码或示例.我从IMU站立的数据中计算出偏见.我想用某种过滤器(Kalman/补充)实现速度估计,但找不到任何速度.我也有相机速度估计,也许可以作为某种融合有帮助? 先感谢您! 亲切的问候 解决方案 我没有示例代码,可以完全适合您的情况.但是这种方法可以帮助(基于过去的经验), 卡尔曼过滤器: 决定并制定状态X,控制输入U,输出,预测和观察方程. 实施/重复了Kalman过滤器的某些实现.这是一个基于simulink的设置测量噪声和预测误差方差.以后可能需要进行一些微调. 验证KF是否反对某些参考.如果您有另一种测量速度的方法,请检查针对它的KF速度. 状态和控制输入: 状态可以是包含 的数组 线性速度[VX,VY,VZ] 角速度[Omega_x,Omega_y,Omega_z] 陀螺仪中的偏见.这种偏见在很大程度上是恒定的,但会随温度和其他因素而变化. KF将使用加速
12 2024-01-09
编程技术问答社区
使用getRotationMatrix()和getOrientation()查找方向。
我试图在磁性北面方向从摄像机中指出矢量的方向.我的印象是我需要使用从getIrientation()返回的值,但我不确定它们代表什么.当我更改手机的方向时,我从getorientation()中获得的值不会可预测(旋转90度不会将值更改为90度).我需要知道getIrientation()返回的值是什么.到目前为止,我已经写了下面的内容: package com.example.orientation; import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; im
12 2024-01-09
编程技术问答社区
UNITY 3D的磁铁脚本
我正在从事一个Google纸板项目,现在我有一个针对Android的演示: 按下Google纸板磁铁按钮时,我想向前走. 我在网络上找到了一些脚本,但我不知道如何使这些脚本在我的Unity Project中工作. 任何人都可以进一步帮助我吗? 解决方案 假设您能够正确读取磁铁输入.这就是我执行FPS样式控制器脚本的方式: 在Unity5中导入资产包标准资产/字符. 从该软件包创建一个arigidbodyfpscontroller.prefab的实例. 删除其子对象," maincamera" 导入 Google Cardboard Unitypackage . 用cardboardmain.prefab 替换您在步骤3中删除的" maincamera" 更新或修改arigidbodyfirstpersoncontroller.cs getInput()方法的副本. getInput()带有Google Cardboard Forward运
如何使用陀螺仪和磁力计计算方向
i具有陀螺仪和磁力计的原始数据.根据这些数据,我必须以1维的精度计算标题信息. 我想知道,是否有任何算法可以帮助我使用具有上述准确性的可用信息获取标题信息? 任何文章或任何链接也将有所帮助. 谢谢 解决方案 我假设您正在使用电话收集gyroscope+magnetometer数据. 除非您知道设备的初始状态,否则您无法用Gyro+Magnetometer计算标题.您必须尝试Accelerometer+Magnetometer.您可以从Android/iOS设备的运动传感器API中获取rotation-matrix' or偏航组件的标题值. 如果您想实现自己的尝试倾斜补偿算法.您所要做的就是使用accelerometer和magnetometer实施倾斜的eCompass.您可以在设备框架中获得accelerometer和magnetometer读数. Accelerometer和Magnetometer给出读数作为设备旋转的函数.此旋转包含滚动,音高
32 2023-10-26
编程技术问答社区
我如何使用Core Motion来使用SwiftUI输出磁力计数据?
我使用SwiftUI的核心运动来输出磁力计,加速度计和陀螺仪的数据很难.我假设我的问题与StartMagnetMeterUpdates()有关. 我尝试使用在堆栈溢出上以及GitHub/Google上找到的源代码.问题是我发现的所有代码都使用Uikit而不是Swiftui.可以在不使用Uikit的情况下实施此功能吗? import CoreMotion let motionManager = CMMotionManager() var x = 0.0; var y = 0.0; var z = 0.0 func magnet() { motionManager.magnetometerUpdateInterval = 1/60 motionManager.startMagnetometerUpdates() if let magnetometerData = motionManager.magnetometerData { x = magnetom
16 2023-10-10
编程技术问答社区
如何用swift获取磁力计数据?
我试图通过使用Coremotion从iPhone 6获取磁场数据. 我没有以下代码访问原始数据的问题: if available { motionMangager.magnetometerUpdateInterval = updateInterval motionMangager.startMagnetometerUpdatesToQueue(queue, withHandler: { (data, error: NSError!) -> Void in println("x: \(data.magneticField.x), y: \(data.magneticField.y), z: \(data.magneticField.z)") }) } 但是:我需要使用设备运动实例来派生的数据. 所以我做了以下操作: if motionMangager.devi
54 2023-10-08
编程技术问答社区
CMDeviceMotion返回0个磁场值
我正在开发具有指南针功能的iOS应用程序.我尝试使用CMMagnetometerData更新,这些更新可带来未校准但正常结果的更新. 之后,我尝试获取CMDeviceMotion更新,结果始终以CMMagneticFieldCalibrationAccuracyUncalibrated精度给出零磁场.我唯一拥有的设备是iPad,因此无法对其他人进行测试. 可能是字段为零,因为传感器没有校准,但我找不到执行校准的任何方法. 如何解决这个问题? 更新: 在这里建议使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:对我. 在这里建议将showsDeviceMovementDisplay设置为true.但是它也不起作用,校准窗口只是没有弹出. 最后,解决.根据我的观察: 1)使用startDeviceMotionUpdatesUsingReferenceFrame:t
4 2023-10-07
编程技术问答社区
获取全局坐标中的磁场值
对于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 或作为上述内容的替换. 如果已经有一些已经完成此操作的源代码,我将不愿
10 2023-08-28
编程技术问答社区
没有地磁的安卓设备定位
我需要获得设备方向.据我所知,通常使用TYPE_ACCELEROMETER和TYPE_MAGNETIC_FIELD传感器.我的问题是SensorManager.getDefaultSensor返回我null用于地磁传感器.它也返回null TYPE_ORIENTATION传感器. manager = (SensorManager) getSystemService(SENSOR_SERVICE); Sensor sensorAcc = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), //normal object sensorMagn = manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); //null orientationListener = new OrientationSensorListener(); manager.registerListe
14 2023-05-14
编程技术问答社区
CMCalibratedMagneticField不更新
CMCalibratedMagneticField一直返回0. CMAcceleration返回值,CMMagnetometerData也返回值. 只有CMCalibratedMagneticField不,我需要它,因为它是没有偏见的电磁场. 我正在iPhone 4s上测试. [MotionManager startDeviceMotionUpdatesToQueue:deviceQueue withHandler:^(CMDeviceMotion *motion, NSError *error) { CMCalibratedMagneticField f = motion.magneticField; //CMMagneticField t = motion.; //CMAcceleration s = motion.gravity; Works!
24 2023-05-06
编程技术问答社区
哪个iOS类/代码返回磁北?
我想以程度使设备偏离磁性北的偏差,并在我编写的某些代码中使用该值. 我不想使用该设备的位置服务,因此我对获得True North而不是磁性北(仅使用设备的磁力计)不感兴趣. 哪个类(或编码过程..)可以为我提供该值(仅依赖于磁力计)? CllocationManager类及其属性依赖于启用的位置服务 作为核心运动框架具有其CMMAGNETOMETOMETOMETOMENTATA类为我们提供以下属性: @property(readonly, nonatomic) CMMagneticField magneticField A structure containing 3-axis magnetometer data typedef struct { double x; double y; double z; } CMMagneticField; 我如何从中获得学位?还是有其他方法(类/属性/方法)仅将学位从磁力计中获得? 事先感
4 2023-05-04
编程技术问答社区
如何用iPhone建立一个指南针?
在Google上进行了一些搜索后,我问自己: 有可能用 iPhone 3G的GPS传感器? 我有怀疑,只有在设备移动时才有可能. 任何想法都将受到赞赏. 解决方案 是的,您是对的,这是唯一的方法.尽管我认为一旦知道方向,您就可以从加速传感器跟踪手机的小动作,即使原始动作停止了,也可以准确地绘制方向. 注意:这是过时的信息,直到3GS出来之前是正确的.不幸的是,我无法删除接受的答案,所以请看下面. 其他解决方案 使用原始的iPhone和iPhone 3G,没有. 是,iPhone 3GS 2009年6月可用.它包括一个允许指南针应用的磁力计. http://www.google.com/search? 使用magnetometer键. 此功能 正如其他人所说的那样,使用iPhone 3G,您可以在手机移动时告诉运动方向,但是您将无法告诉手机的方向以向用户指示方向.当然,可以指示用户以某种方式定位手机,而该手机与动作的结合可以准确
16 2023-04-20
编程技术问答社区
在iOS中,核心位置和核心运动框架的磁场值有什么区别?
我有两种使用iOS设备的磁力计获得磁场(强度,X,Y和Z)的方法. 1)核心位置 使用了CLLocationManagerDelegate方法locationManager:didUpdateHeading:的Clheading.这类似于Apple的Teslameter样本应用程序. 2)核心运动 从CMMotionManager's magnetometerData.magneticField使用CMMagneticField. 问题: a)两者有什么区别?我从两者中获得了不同的价值.我期望他们会返回相同的值. 当我从静止位置启动应用程序时(面对表格),然后将设备抬高到空气中时,差异最为明显. b)如果有差异,我什么时候应该从核心位置标题中使用磁场,何时应该使用核心运动的磁场? 注意:我也不确定核心位置和核心运动的"磁场"是否是指不同的磁场概念. 注意:我将强度作为两种方法的(x^2 + y^2 + z^2)的平方根计算. 解决方案 为了解开
30 2023-04-07
编程技术问答社区
如何检查一个完全支持设备方向事件的设备/浏览器?
我有一个可以正常工作的HTML5指南针.现在,我需要一种聪明的方法来区分"启用伪设备方向"的浏览器(作为桌面Chrome和FF)和使用该设备磁力计的iPhone/android/iPad浏览器(例如iPhone/android/iPad浏览器). 我当前的解决方案是对DeviceErientationEvent的基本检查,并触摸支持: if (window.DeviceOrientationEvent && 'ontouchstart' in window) { // setup real compass thing, with event.alpha } else { // setup some mouse following hack } 就足够了吗?我不太确定设备"具有触摸支持,但没有磁力计",例如Mac Book上的Chrome具有触摸支持和假设备方向? 解决方案 似乎很奏效,我错了,Mac Book上的Chrome并没有进入"真正的指南针"部分.
48 2023-03-28
编程技术问答社区