gpt4 book ai didi

ios - 基于磁力计和陀螺仪的北计算

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:50:43 27 4
gpt4 key购买 nike

我需要计算“朝向”(无论是基于真北还是磁北)。正如在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com