首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于近程惯性导航的iPhone4 iOS5传感器融合

用于近程惯性导航的iPhone4 iOS5传感器融合
EN

Stack Overflow用户
提问于 2012-06-01 10:18:01
回答 1查看 1.1K关注 0票数 1

我环顾了一下周围,没有太多关于iOS5惯性导航的演讲或例子。我知道iOS5引入了一些非常酷的传感器融合算法:

代码语言:javascript
复制
    motionQueue = [[NSOperationQueue alloc] init];
    [motionQueue setMaxConcurrentOperationCount:1];

    motionManager = [[CMMotionManager alloc] init];
    motionManager.deviceMotionUpdateInterval = 1/20.0;


[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical toQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) {

}];

我已经看过了来自WWDC的两个视频,它们都涉及上面的区块。

生成的CMDeviceMotion包含设备姿态向量,以及从用户诱导的加速度中分离出来的加速度。

有没有专门针对iOS 5的开源惯性导航项目,可以利用这种新的传感器融合?我说的是进一步将这些数据与GPS和磁力计输出相结合,以获得更准确的GPS位置。

一个额外的问题:从硬件的角度来看,这种融合是可能的吗?如果我开始在较长时间内对所有可用的传感器数据进行20 of的处理,我的iPhone4会融化吗?

我已经准备好开始修补这些,但我希望得到一些比上面的空块更可靠的开始:)

谢谢你的指点!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-09 04:22:51

我正在为潜水员写一个应用程序,希望添加惯性导航,因为GPS和其他基于无线电的导航在水下是不可用的。我做了相当多的研究,发现iPhone上的传感器数据对于精确的惯性导航来说有太多的抖动。我做了一个快速实验,发现即使在设备完全静止的情况下,由于信号中的噪声引起的“漂移”也显示设备在短短几分钟后就“移动”了许多米。这是我在实验中使用的代码。如果你能看到我做错了什么,让我知道。否则,我想要回我的下午!

代码语言:javascript
复制
- (void)startCoreMotion {
CMMotionManager *manager = [[CMMotionManager alloc] init];
if ([manager isAccelerometerAvailable]) {
    manager.deviceMotionUpdateInterval = 1.0/updateHz;
    [manager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
        xVelocity += (( 9.8 * motion.userAcceleration.x ) / updateHz);
        yVelocity += (( 9.8 * motion.userAcceleration.y ) / updateHz);
        zVelocity += (( 9.8 * motion.userAcceleration.z ) / updateHz);

        xPosition += ( xVelocity * ( 1 / updateHz ));
        yPosition += ( yVelocity * ( 1 / updateHz ));
        zPosition += ( zVelocity * ( 1 / updateHz ));

        self.xPositionLabel.text = [NSString stringWithFormat:@"x = %f m", xPosition];
        self.yPositionLabel.text = [NSString stringWithFormat:@"y = %f m", yPosition];
        self.zPositionLabel.text = [NSString stringWithFormat:@"z = %f m", zPosition];

        self.xVelocityLabel.text = [NSString stringWithFormat:@"vx = %f m/s", xVelocity];
        self.yVelocityLabel.text = [NSString stringWithFormat:@"vy = %f m/s", yVelocity];
        self.zVelocityLabel.text = [NSString stringWithFormat:@"vz = %f m/s", zVelocity];

        self.distanceLabel.text = [NSString stringWithFormat:@"dist = %f m", sqrt( pow(xPosition, 2) + pow(yPosition, 2) + pow(zPosition, 2))];

    }];
}

}

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10843615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档