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

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

新規登録して質問してみよう
ただいま回答率
86.02%
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

受付中

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

suginobu
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)とは、拡張現実のことです。人が認識する現実の環境で視覚・聴覚などの知覚が感知する情報をコンピュータで拡張する技術、もしくはその環境そのものを表す言葉です。

1回答

0グッド

0クリップ

1754閲覧

投稿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

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

ozwk

2019/02/24 12:53

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

回答1

1

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

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

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

投稿2019/02/25 02:00

ozwk

総合スコア13062

hoshidash👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

suginobu

2019/02/25 16:31

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

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Xcode

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

Swift

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

AppleWatch

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

AR(Augmented Reality)

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