我如何在Swift 4中使用陀螺仪来获得偏航?

问题描述 投票:0回答:1

我看了这篇文章,但似乎已经过时了:Swift gyroscope yaw, pitch, roll

我正在尝试使用CoreMotion来计算围绕Y轴的旋转,并在iOS上的Swift Playground中将其作为double返回。我目前正在尝试解决如何获得偏航,因为从Swift的Apple文档中它似乎以double形式返回,并将值保存为变量。这就是OI到目前为止所做的事情:

let yaw = 0.0
    if motionManager.isGyroAvailable {
        motionManager.deviceMotionUpdateInterval = 0.2;
        motionManager.startDeviceMotionUpdates()

        motionManager.gyroUpdateInterval = 0.2
        motionManager.startGyroUpdatesToQueue(OperationQueue.currentQueue ?? ) {
            [weak self] (gyroData: CMGyroData!, error: NSError!) in

            self?.outputRotationData(gyroData.rotationRate)
            if error != nil {
                println("\(error)")
            }
        }
    } else {
        print("gyroscope not working")
    }

我试图在iOS 12上的Swift Playgrounds上使用这款适用于iPad的最新版本的swift和XCode。

swift xcode swift-playground gyroscope core-motion
1个回答
1
投票

试试这个解决方案

var motion = CMMotionManager()
var timer: Timer!


 override func viewDidLoad() {
 super.viewDidLoad()
   startData()
 }

func startData() {

    motion.startGyroUpdates()

    timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(SensorViewController.update), userInfo: nil, repeats: true)

}

private func roundDouble(value: Double) -> Double {
    return round(1000 * value)/100
}

@objc func update() {


    if let gyroMeterData = motion.gyroData {

        print(\"self.roundDouble(value: gyroMeterData.rotationRate.x)")
        print(\"self.roundDouble(value: gyroMeterData.rotationRate.y)")
        print(\"self.roundDouble(value: gyroMeterData.rotationRate.z)")

    }

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.