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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

4338閲覧

Android端末から得た加速度から角度を求めた時の誤差

John_syado

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2015/12/16 04:38

Android端末に搭載されている加速度センサから加速度を取得し、その加速度から角度を求めたのですが、2度程度誤差が出てしまいます。割と大きい誤差が出てしまい困っています。角度を求めるまで加速度は小数点○位以下を切り捨てなどの処理はしていません。アドバイスをいただけると嬉しいです。

以下が私の計算方法です。


java

1//ang_acc_x int型 xの角度 2//ang_acc_y int型 yの角度 3//acc_x double型 xの加速度 4//acc_y double型 yの加速度 5//acc_z double型 zの加速度 6 7ang_acc_x = (int)(((Math.atan(acc_x/(Math.sqrt(Math.pow(acc_y,2)+Math.pow(acc_z,2)))))*180)/Math.PI); 8ang_acc_y = (int)(((Math.atan(acc_y/(Math.sqrt(Math.pow(acc_x,2)+Math.pow(acc_z,2)))))*180)/Math.PI);

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

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

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

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

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

ozwk

2015/12/16 05:19

誤差とはなんですか?水平においた時に2度ずれるということですか?
John_syado

2015/12/16 05:27

水平から垂直に動かした際に2度~88度くらいまでにしかならず、0度~90度になってほしいのですが誤差があるという意味です。説明不足ですいません…。
ozwk

2015/12/16 06:02

その「水平」「垂直」とやらは何で確かめているのですか?
ozwk

2015/12/16 10:22 編集

水平を出したいらしいです。>重力加速度の影響を緩和
John_syado

2015/12/17 02:10

水平は加速度がx:0,y:0,z:9.8になるところを基準にしていました。垂直はそこから分度器で90のところにしてました…。加速度センサから得た加速度に一応ローパスフィルタはかけています。重力の影響を緩和に関しては何もしてませんが、重力加速度を元に三角関数で角度を出す方法を利用しているので、重力の影響を緩和しては角度が出せなくはならないのでしょうか?
guest

回答1

0

ベストアンサー

角度と加速度を同時に表示又はログを取って、
加速度が(0,0,9.8)程度になるところで角度が0になるか確かめてみては?
LPFかけてるなら値がゆっくり変化するのでなおさらです。

そしてatanですが、これで90度を取ろうとすると分母が0になるので
atan2を使いましょう。

あと、「xの角度」、「yの角度」と謎の表現をしているので、
数式からどこの角度かを読み取りましたが、
そこの角度はあなたが本当に使いたい角度ですか?
過去の質問から察するに、最終的には
恐らく回転軸2つで水平を保とうとするはずですから
その回転順に沿った角度を算出したほうが良いのでは?

投稿2015/12/17 03:22

ozwk

総合スコア13528

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

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

John_syado

2015/12/17 04:36

回答ありがとうございます。(0,0,9.8)付近で-2度が表示されていたので困っていたのですが、atan2を使用してみたらちゃんと0度になり90度にもなりました。xの角度とyの角度はロールとピッチのつもりでした。
ozwk

2015/12/17 04:53

ロールとピッチとは全然違う値になっているので、見なおしたほうがいいです
John_syado

2015/12/17 05:24

ロールは端末の前後を軸にした左右の回転。ピッチは端末の左右を軸にした前後の回転だと思っていたのですが間違っているでしょうか?この理解で合っているなら一応私の求める角度が出てきているのですが何か根本的に間違っているのでしょうか…。
ozwk

2015/12/17 05:39

回転の順番はどうなっていますか?
John_syado

2015/12/17 05:59

何度もありがとうございます。水平から右に傾けた後水平に戻し、前に傾けた後水平に戻したりしていました。
ozwk

2015/12/17 07:01

表現が悪かったですね。 回転は、ピッチ->ロールという定義ですか? ロール->ピッチという定義ですか? 端末の前軸(y)で90度回した後に右軸(x)で90度回すのと 端末の右軸(x)で90度回した後に前軸(y)で90度回すのとでは結果が異なると思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問