質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

AppleWatch

AppleWatchは、iPhoneと連動して動作する時計型のデバイスです。時間の確認だけでなく、通話や受信メールの確認などを行うことができます。

AR(Augmented Reality)

AR(Augmented Reality)とは、拡張現実のことです。人が認識する現実の環境で視覚・聴覚などの知覚が感知する情報をコンピュータで拡張する技術、もしくはその環境そのものを表す言葉です。

Q&A

1回答

3732閲覧

加速度センサーから変位を求める

suginobu

総合スコア11

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

AppleWatch

AppleWatchは、iPhoneと連動して動作する時計型のデバイスです。時間の確認だけでなく、通話や受信メールの確認などを行うことができます。

AR(Augmented Reality)

AR(Augmented Reality)とは、拡張現実のことです。人が認識する現実の環境で視覚・聴覚などの知覚が感知する情報をコンピュータで拡張する技術、もしくはその環境そのものを表す言葉です。

0グッド

0クリップ

投稿2019/02/24 05:37

AppleWatchの加速度センサーの値から積分を二回行い変位を求めたい

AppleWatchの加速度センサーの値から台形積分法を二回行い変位を求め,オブジェクトの座標を移動させようとしています.
しかしながら,変位を求めてオブジェクトを移動させると,移動させたい方向に移動した後に同じ分だけ戻ってきてしまいます.
積分のやり方が間違っているのでしょうか.
数学に詳しい方がいらっしゃればお教えいただきたいです.

該当のソースコード

swift

1// ローパスフィルターの係数(これは環境によって要調整。1に近づけるほど平滑化の度合いが大きくなる) 2 let filterCoefficient:Double = 0.9 3 var lowpassValue:[Double] = Array (repeating: 0, count: 3); 4 var highpassValue:[Double] = Array (repeating: 0, count: 3); 5 6 // 時間差分 7 let timeSpan:Double = 0.05//0.1 8 // ひとつ前の加速度 9 var oldAccel:[Double] = Array (repeating: 0, count: 3) 10 // 加速度から算出した速度 11 var speed:[Double] = Array (repeating: 0, count: 3) 12 // ひとつ前の速度 13 var oldSpeed:[Double] = Array(repeating: 0, count: 3) 14 // 速度から算出した変位 15 var difference:[Double] = Array (repeating: 0, count: 3) 16 //加速度データ 17 var dataArray2:[Double] = Array(repeating: 0, count: 3) 18 19 func Integral2(num:Int)->Double//numでx,y,zを分けている 20 { 21 // ローパスフィルター(現在の値 = 係数 * ひとつ前の値 + (1 - 係数) * センサの値) 22 lowpassValue[num] = lowpassValue[num] * filterCoefficient + dataArray2[num] * (1 - filterCoefficient) 23 // ハイパスフィルター(センサの値 - ローパスフィルターの値) 24 highpassValue[num] = dataArray2[num] - lowpassValue[num]; 25 26 //速度計算 27 speed[num] = ((highpassValue[num] + oldAccel[num]) * timeSpan) / 2 + speed[num] 28 oldAccel[num] = highpassValue[num] 29 30 //変位計算(速度を台形積分する) 31 difference[num] = ((speed[num] + oldSpeed[num]) * timeSpan) / 2 + difference[num] 32 oldSpeed[num] = speed[num]; 33 34 return difference[num] 35 }

参考URL

加速度センサーの値から速度と変位を求める

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2019/02/24 12:53

>移動させたい方向に移動した後に同じ分だけ戻ってきてしまいます どうやって確認しましたか?
guest

回答1

0

青色のような加速度入力を入れると、ローパスの値は赤色のようになります:

となると、ハイパスの値はこうなります:

真の加速度方向への入力の後、ローパスの残渣成分によって逆方向に偽の加速度が残ります。
なのでこれを使って積分すると意図した方向に動いた後ゆっくり戻るような挙動になります。

投稿2019/02/25 02:00

ozwk

総合スコア13551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suginobu

2019/02/25 16:31

ご回答いただきありがとうございます! 丁寧に回答していただきありがとうございます! なぜ逆方向に向かうのかよくわかりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問