0
加速度データを絶対的な垂直軸(地面から床まで)でアクセスしたいアプリケーションを作成していますが、CoreMotionで取得できるのは、デバイスの相対軸からの加速度。たとえば、デバイスがテーブル上に平らに置かれている場合、垂直軸は実際には絶対垂直軸から90°です。絶対縦軸加速度の検出
これを修正しようとするとジャイロデータを再生していますが、データは意味をなさないものです。
// Make sure the accelerometer hardware is available.
if self.motion.isAccelerometerAvailable && self.motion.isDeviceMotionAvailable {
self.motion.accelerometerUpdateInterval = 1.0/Double(slider.value) // Hz managed by slider
self.motion.startAccelerometerUpdates()
self.motion.startDeviceMotionUpdates(using: self.motion.attitudeReferenceFrame)
self.motion.deviceMotionUpdateInterval = 1.0/Double(slider.value)
// Configure a timer to fetch the data.
self.timer = Timer(fire: Date(), interval: (1.0/Double(slider.value)),
repeats: true, block: { (timer) in
// Get the gyroscope data.
if let data = self.motion.deviceMotion {
//Angles: pitch
pitch = data.attitude.pitch
print("Pitch angle: \(self.degrees(radians: pitch))")
//Angles: yaw
yaw = data.attitude.yaw
print("Yaw angle: \(self.degrees(radians: yaw))")
}
//Get the accelerometer data
if let data = self.motion.accelerometerData {
let x = data.acceleration.x
//let y = data.acceleration.y
//let z = data.acceleration.z
// Use the accelerometer data in your app.
self.label.text = "x: \(x)"
let xCorrectedWithPitch = cos(self.degrees(radians: pitch)) * x
print("x: \(x)\nPitch: \(pitch)\nxCorrectedWithPitch: \(xCorrectedWithPitch)")
let xCorrectedWithYaw = cos(self.degrees(radians: yaw)) * xCorrectedWithPitch
print("x: \(x)\nYaw: \(yaw)\nxCorrectedWithYaw: \(xCorrectedWithYaw)")
// Use the accelerometer data in your app.
self.accelArrayY.append(xCorrectedWithYaw*9.81)
time = time + timer.timeInterval
self.timeArrayY.append(time)
}
誰も助けにはあまり
ありがとうエリック、多くのありがとう!しかし、私は '未解決の識別子Vector3の使用'を得ています。私はGameSceneを使用していないことに注意してください。アプリは物理的なアクティビティトラッカーのようなものですから。私はそれをどのように宣言すべきですか?これを修正するために何かインポートする必要がありますか?ありがとう! – CarlosBF
もう一度、私はRay WenderlichのUtilsを見つけました。私はVector3の拡張機能とパブリック関数を正常にインポートしました。しかし、私はまだあなたのコードの最後の部分が記号を検出するために構築することはできません。まず、私は '未解決の識別子のサインを使う'が得られますが、SceneKitをインポートすることでそれを修正しました。しかし問題は、 "タイプCGFloatの値にメンバーxがない"ということです。私はzVector.xを使ってzAcceleration.xを変更しました。それは実行されますが、それが正常かどうかわかりません。 – CarlosBF
うれしいことに助けてください。あなたは正しい、それはzVectorでなければならない。切り取ってペーストしたもの...元の回答で変更しました –