1

私は周りを見回しましたが、iOS5の慣性航法に関する話や例はそれほど多くありません。iOS5がいくつかの非常にクールなセンサーフュージョンアルゴリズムを導入したことを私は知っています:

    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位置を取得することについて話しています。

ボーナスの質問:この種の融合は、ハードウェアの観点からも可能ですか?利用可能なすべてのセンサーデータの20Hz処理を長期間にわたって開始した場合、iPhone4を溶かしますか?

私はこれらをいじくり回す準備ができていますが、上の空のブロックよりもしっかりしたものを手に入れたいと思っています:)

ポインタありがとうございます!

4

1 に答える 1

3

私はスキューバ ダイバー向けのアプリを作成しており、水中では GPS やその他の無線ベースのナビゲーションが利用できないため、慣性ナビゲーションを追加したいと考えています。かなりの調査を行った結果、正確な慣性航法には iPhone のセンサー データにジッターが多すぎることがわかりました。簡単な実験を行ったところ、デバイスが完全に静止している場合でも、信号のノイズによる「ドリフト」により、わずか数分でデバイスが何メートルも「移動」したことがわかりました。これが私の実験で使用したコードです。私が間違っていることがわかりましたら、お知らせください。そうでなければ、私の午後を取り戻したい!

- (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))];

    }];
}

}

于 2013-01-08T20:22:50.703 に答える