即使用户只是走路,我的应用也需要非常准确的速度。我尝试使用GPS,它运行良好,但速度不高。所以我的问题是,我可以使用加速度计来获得更准确的值吗?如果是的话,我该怎么做?
答案 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
高级解决方案会使用一个让我们说5秒钟的时间窗口, 这个评估窗口每秒钟会进一步移动, 使用与上述相同的3个计算步骤