- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要计算“朝向”(无论是基于真北还是磁北)。正如在 iOS 设备上所见,CLLocationManager
返回的 CLHeading
对象通过相应的属性为我们提供了真航向和磁航向。此外,我们可以很容易地看到,这些值与设备的顶部(设备坐标系的正 Y 轴)相关,这对我的目的不利。
我实际上需要的是计算与设备屏幕(Z 轴)相关的朝向,因为我不需要指南针,而是 AG 应用程序之王。问题是,当您将设备旋转到横向时,您会得到从您面对的方向向左或向右的航向值,这正是我最终需要的。据我所知,我可以获得磁力计“原始”数据(以微特斯拉为单位提供给我,每个设备轴的值从 128 到 -128)以及陀螺仪“原始”数据(分为三种类型:欧拉角,旋转矩阵或四元数)。我需要知道的是,我需要对那些应用哪些计算以获得“面向”方向而不是“航向”。
最佳答案
我已经做了一段时间了,因为我没有看到答案,所以我决定将我的解决方案放在这里,以供那些将搜索同一问题的答案的人...
_motionManager = [[CMMotionManager alloc]init];
if (_motionManager.gyroAvailable) {
_motionManager.deviceMotionUpdateInterval = 1.0/20.0;
[_motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error)
{
CMAcceleration gravity = motion.gravity;
CGPoint tiltVector = CGPointMake(-gravity.x, -gravity.y);
_tiltAngle = [self angleYAxisToVector:tiltVector];
CLLocationDirection heaqding = [[SVSession sharedSession] heading].trueHeading;
double newHeading = fmod(heaqding + _tiltAngle, 360.0);
self.azimuth = degreesToRadian(newHeading);
[self updateLocations]; //this function updates my ui for the new heading
}];
} else {
NSLog(@"No gyroscope on device.");
[_motionManager release],_motionManager = nil;
}
这里有一些额外的片段可能有助于理解这个例子:
-(double)angleYAxisToVector:(CGPoint)vector{
double dX = vector.x;
double dY = vector.y;
if(dY == 0){
if(dX > 0){
return 0.0;
}else{
if(dX < 0){
return 180.0;
}else{
return -1;
}
}
}
double beta = radiansToDegrees(atan(dX/dY));
double angle;
if(dX > 0){
if (dY < 0){
angle = 180 + beta;
}else{
angle = beta;
}
}else{
if (dY < 0){
angle = 180 + beta;
}else{
angle = 360 + beta;
}
}
// NSLog(@"angle = %f, normalized = %f",beta,angle);
return angle;
}
#define degreesToRadian(x) (M_PI * (x) / 180.0)
#define radiansToDegrees(x) ((x) * 180.0 / M_PI)
#define degreesToRadians(x) degreesToRadian(x)
#define radiansToDegree(x) radiansToDegrees(x)
快乐编码...
关于ios - 基于磁力计和陀螺仪的北计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9260033/
我需要一种方法来从局部获取全局引用系中旋转的欧拉角。我正在使用 c#、wpf 3d 和陀螺仪。我在屏幕上有一个地球仪,它应该以与陀螺仪相同的方式移动。由于陀螺仪发送相对于自身的运动,我需要使用四元数来
我试图理解不同的运动/位置陀螺仪、运动和加速度所代表的含义。 (startGyroUpdates、startDeviceMotionUpdates 等)。 但是,经过一些研究后,我很难看出陀螺仪和运动
我想使用陀螺仪、加速度计和磁力计来获得 3 轴完全平滑的旋转。 第一个问题是我的输出有很大的噪音,我想知道如何消除它。 第二个问题是陀螺仪漂移,我认为应该用卡尔曼滤波器来解决。 第三个问题是加速度计。
我正在开发一个游戏,需要检测设备是否向上或向下移动以向上或向下移动角色,因为我正在使用陀螺仪(如果有更好的方法请纠正我) 但是陀螺仪对我来说非常复杂(因为我不太了解 phisyc),所以我不知道如何根
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
我一直在尝试确定如何将 iPhone 陀螺仪用于驾驶员安全应用程序,但我对此感到非常困惑。我知道手机中的陀螺仪可以测量手机本身的变化和旋转,但是它可以用来测量手机在行驶的汽车中发生的变化吗? 例如,如
我正在尝试创建一个应用程序来跟踪设备在 2D 空间中的移动。在网上查了下,我能找到的一种方法是积分两次线性加速,但是错误很可怕。 这个问题有什么解决办法吗?我希望能够向上移动手机,这会导致在屏幕上绘制
我正在使用 Unity 制作一款使用陀螺仪的游戏。我正在尝试检测设备围绕穿过屏幕的轴的旋转,我假设它是 Unity Space 中的 Z 轴。我尝试使用 Input.gyro.attitude.eul
我正在学习使用 iOS 中的陀螺仪传感器编写应用。是否有处理陀螺仪的类,类似于加速度计的 UIAcceleration/UIAccelerometer/UIAccelerometerDelegate?
我想通过陀螺仪传感器的能力得到我想“看”的X、Y、Z位置的精确位置 我能够从陀螺仪传感器获得 9 的值,但我无法计算出从该陀螺仪传感器获得准确位置的公式。 我想要公式或例子来得到正确的答案 这是我想要
最近我做了一些研究,使用加速度计 + 陀螺仪来使用这些传感器在没有 GPS 帮助的情况下跟踪智能手机(见这篇文章) Indoor Positioning System based on Gyrosco
我正在测试 Core Motion 并使用陀螺仪。现在我得到了我不理解的值(value)观。我的假设是对于每个 x、y 和 z,我会得到一个 0-360 之间的值,这将是一个完整的旋转,但事实并非如此
我正在尝试使用陀螺仪制作一个简单的应用程序,其中角色会根据 iPad 1 的旋转进行移动。 我的代码无法正常工作,因此我测试了原始、俯仰、偏航的值,无论我如何移动设备,它们实际上都保持为零。我确定 i
我有一个非常简单的应用程序,我试图通过核心运动使用陀螺仪。 此时,出于测试目的,我只是获取滚动、俯仰和偏航的值并在屏幕上打印。根据下图,据我所知,roll、pitch、yaw分别对应红、绿、蓝轴,对吗
我正在使用 Core Motion,并且收到“展开可选值时意外发现 nil”,但只有大约一半的时间加载应用程序。如何更正下面的代码,使其稳定? import UIKit import CoreMoti
我有一些代码旨在测量移动设备上的设备运动,它曾经可以在移动浏览器中运行,但现在不再可以了。以下是直接取自 Mozilla 网络文档的示例: function handleMotionEvent(eve
Original Question 我正尝试在我的 iPhone 6s 上使用 A-Frame 运行一个 webVR 程序,而我测试过的这三个浏览器无法访问我的陀螺仪。 Safari Chrome F
我想知道 Apple 开发人员是否可以澄清 API 是否可用。 互联网上有一些猜测,似乎没有人回答这个问题。 或多或少,Apple Watch OS 2.0 并不是最容易使用的测试版,甚至发行版似乎也
我想制作一个应用程序来获取 Android 手机的所有读数,例如加速度计、GPS、陀螺仪、摄像头等。记录所有这些数据并将其发送到云端以供使用。 我是一名初学者 android 开发人员,想基本了解如何
我是一名优秀的程序员,十分优秀!