如何从iOS上的加速度计获得准确的速度?

时间:2015-06-15 17:12:17

标签: ios gps accelerometer velocity

即使用户只是走路,我的应用也需要非常准确的速度。我尝试使用GPS,它运行良好,但速度不高。所以我的问题是,我可以使用加速度计来获得更准确的值吗?如果是的话,我该怎么做?

4 个答案:

答案 0 :(得分:0)

  

我可以使用加速度计来获得更准确的值

不,加速度计无法告诉您有关速度的任何信息。加速度和速度是截然不同的事情。实际上,在以恒定速度运动期间,存在 no 加速度(除了重力和类似的副作用)。您可以以光速行驶并且不会加速(如果您可以以光速行驶)。

答案 1 :(得分:0)

我认为你不会从加速度计得到什么。加速度计仅返回运动(x,y,z)。我不知道你怎么能够从中获得速度,除非你会做一些需要大量研究的线性建模算法,这可能是我认为的博士课题。

我提议以下实施。

- (id) init
{
    self = [super init];
    if (self != nil) {
        self.manager = [[CLLocationManager alloc] init];
        self.manager.delegate = self;
        [self.manager startUpdatingLocation];
    }
    return self;
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"Speed = %f", newLocation.speed);
}

或者您可以直接使用CMPedometer类,我认为该类专为物理活动应用而开发。我最近使用过那门课,我很满意。

import CoreMotion

let lengthFormatter = NSLengthFormatter()
let pedometer = CMPedometer()
pedometer.startPedometerUpdatesFromDate(NSDate(), withHandler: { data, error in
if !error {
    println("Steps Taken: \(data.numberOfSteps)")

    var distance = data.distance.doubleValue
    println("Distance: \(lengthFormatter.stringFromMeters(distance))")

    var time = data.endDate.timeIntervalSinceDate(data.startDate)
    var speed = distance / time
    println("Speed: \(lengthFormatter.stringFromMeters(speed)) / s")
}
})

答案 2 :(得分:0)

从加速度计获得合适的速度估算是不可能的。即使您在静止时开始使用设备并在休息时使用陀螺仪结束也是如此。

平均GPS位置可能是最好的,可能是某种移动平均线。

答案 3 :(得分:0)

我已多次回答过类似的问题。 使用加速度计的应用程序将无法正常工作超过几秒钟。原因是由于双重整合导致的显着精度损失。 这在Goole Talk"传感器融合"视频。

对于低GPS速度,你能做些什么:
有点简化:
1.取5秒的位置, 2.计算fix(i-5)和fix(i)之间的距离, 3.计算时差,

然后用distanceMeters / timeDeltaSeconds

计算速度,单位为m / s

高级解决方案会使用一个让我们说5秒钟的时间窗口, 这个评估窗口每秒钟会进一步移动, 使用与上述相同的3个计算步骤