gpt4 book ai didi

iOS 使用 Core Motion 计算设备速度

转载 作者:可可西里 更新时间:2023-11-01 01:57:51 27 4
gpt4 key购买 nike

我正在尝试计算物理设备的速度

在谷歌我得到

  1. 通过CLLocationManager使用//我不想使用

  2. 使用 UIAccelerometer 类:DEPECRATED

到目前为止,我已经尝试过这样

    func coreMotion() { // CALLING FROM VIEW DID LOAD
if self.motionManager.isDeviceMotionAvailable {
self.motionManager.deviceMotionUpdateInterval = 0.5
self.motionManager.startDeviceMotionUpdates(to: OperationQueue.current!,
withHandler: { [weak self] (deviceMotion, error) -> Void in

if let error = error {
print("ERROR : \(error.localizedDescription)")
}

if let deviceMotion = deviceMotion {
self?.handleDeviceMotionUpdate(deviceMotion)
}
})
} else {
print("WHAT THE HELL")
}
}

func handleDeviceMotionUpdate(_ deviceMotion: CMDeviceMotion) {
let attitude = deviceMotion.attitude
let roll = self.degrees(attitude.roll)
let pitch = self.degrees(attitude.pitch)
let yaw = self.degrees(attitude.yaw)
let accl = deviceMotion.userAcceleration
self.calculateSpeed(accl)
self.previousAccl = accl
print("Roll: \(roll), Pitch: \(pitch), Yaw: \(yaw)")
print("ACCELRATION: \(accl.x) \(accl.y) \(accl.z)")
}

func degrees(_ radians: Double) -> Double {
return 180 / Double.pi * radians
}

我也得到加速对象,即 userAcceleration我如何从中计算速度?

最佳答案

要计算设备的速度,您有两种可能性:

1 - 通过近似位置的导数函数:通过两个位置和这两个位置之间的时间,您可以估算速度。

2 - 或计算加速度的原语。但请注意,只有当您知道 à t_0(测量开始时)的速度时,此方法才能为您提供正确的速度值

但是如果你坚持使用加速度来做它,你可以在 t_i 计算速度(其中 i 是你从加速度计收到的更新数)

速度(t_i) = 速度(t_i-1) + 加速度(t_i) * (t_i - t_i-1)并且速度(t_0)应该是已知的

这样你必须在加速度计的每次更新时做速度 = 速度 + 加速度 * (lastUpdateTime - currentTime)

[编辑]

这确实就像你在评论中提到的那样只有一个维度如果你想计算所有三个维度的速度你将不得不为每个轴做三次一次

speedX = speedX + accelerationX * (lastUpdateTime - currentTime)

speedY = speedY + accelerationY * (lastUpdateTime - currentTime)

speedZ = speedZ + accelerationZ * (lastUpdateTime - currentTime)

并且您需要在 t_0 时了解 speedX/Y/Z 以将您的 var 初始化为正确的值。

关于iOS 使用 Core Motion 计算设备速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49854246/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com