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

如何从iOS上的加速计获得准确的速度?,ios,gps,accelerometer,velocity,Ios,Gps,Accelerometer,Velocity,我的应用程序需要非常精确的速度,即使用户只是走路。我试着使用GPS,它工作得很好,但速度不是那么低。所以我的问题是,我能用加速度计得到更精确的值吗?如果是,我会怎么做 我能用加速计得到更精确的数值吗 不,加速度计不能告诉你任何关于速度的信息。加速度和速度是完全不同的东西。事实上,在匀速运动过程中,没有加速度(除了重力和类似的副作用)。你可以以光速旅行,但没有加速度(如果你可以以光速旅行)。我认为你不会从加速度计中得到什么。加速计仅返回运动(x、y、z)。我不知道你怎么能从中获得速度,除非你会做一

我的应用程序需要非常精确的速度,即使用户只是走路。我试着使用GPS,它工作得很好,但速度不是那么低。所以我的问题是,我能用加速度计得到更精确的值吗?如果是,我会怎么做

我能用加速计得到更精确的数值吗


不,加速度计不能告诉你任何关于速度的信息。加速度和速度是完全不同的东西。事实上,在匀速运动过程中,没有加速度(除了重力和类似的副作用)。你可以以光速旅行,但没有加速度(如果你可以以光速旅行)。

我认为你不会从加速度计中得到什么。加速计仅返回运动(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")
}
})

从加速计得到一个合适的速度估计值是不可能的。即使你开始时设备处于静止状态,结束时设备处于静止状态,并且使用陀螺仪


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

我已经多次回答过类似的问题。 带加速计的apporach在几秒钟内无法正常工作。其原因是由于双重积分导致的显著精度损失。 这在谷歌的“传感器融合”视频中得到了很好的解释。

对于低GPS速度,您可以做什么:
稍微简化一点:
1.每5秒取一个位置, 2.计算固定点(i-5)和固定点(i)之间的距离, 3.计算时差

然后通过
distanceMeters/timeDeltaSeconds

高级解决方案将使用5秒的时间窗口, 这个评估窗口将每秒再向前移动一步,
使用与上述相同的3个计算步骤

我需要计算用户是否停止行走。。至少有可能吗?也许使用HealthKit中的步进计数器?惯性导航与加速计和陀螺仪一起工作,但与iDevice相比,它的传感器要好得多。@zaph加速计和陀螺仪,是的。事实上,Core Motion将通过将所有可用类型的数据合并为CMDeviceMotion来报告正在发生的事情;但无论如何,这并不是OP所要求的。出于许多原因,这将很难奏效。一个是步长,它甚至可能不接近。我妻子一起走了好几英里,报告的距离差可能是2:1。GPS有一个随机误差,需要移动相当长的距离和许多平均值。这很有趣,需要对此进行研究。你有什么建议,我想知道你在想什么?当你没有良好的接收时,GPS不工作。频率的多少也很重要。然后电池电量耗尽。要找到一个最优的解决方案,有许多权衡。使用CMPedometer的优点是,我不认为它比使用GPsave能保持电池寿命。GPS定位可能是最好的,可能是某种移动平均值。但并不是每个问题都有一个可用的解决方案。