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

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

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

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

270閲覧

加速度・地磁気センサを利用して方位を取得したい

kkkkks

総合スコア7

Java

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/01/25 06:16

前提・実現したいこと

androidstudioで、加速度センサと地磁気センサを利用して方位を取得したいと考えています。
以下のサイトを参考し、実機で試してみたのですが、方位が均等に取れず、また、端末の姿勢によって精度がバラバラになってしまいました。座標の変換がうまくいっていないことが考えられますが、どのように直せば良いのかわかりません、、、
http://android.keicode.com/basics/sensors-accelerometers-megnetic.php>
http://m-shige1979.hatenablog.com/entry/2015/07/22/080000>

そのため、変更点や直すべき点を教えて頂けると幸いです。(また、調べた結果atanを使うとよいということが分かったのですが、その場合はどうしたらよいのでしょうか)
投げやりな質問になってしまし申し訳ありませんが、ご教授いただけると幸いです。
よろしくお願いいたします。

発生している問題・エラーメッセージ

実機で試すと、方位が均等に取れません。
(例:スマホを持ってその場で一周してもずっと南と表示)

該当のソースコード

//fAccellとfMagneticから傾きと方位角を計算する if (accelerationValues != null && magneticValues != null) { //回転行列を得る SensorManager.getRotationMatrix(inR, I, accelerationValues, magneticValues); //ワールド座標とデバイス座標のマッピングを返還 SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR); //姿勢を得る(デバイスの向きに応じて回転行列を計算する) SensorManager.getOrientation(outR, orientationValues); //ラジアンから角度へ変換 float angle = (float) Math.floor(Math.toDegrees(orientationValues[0])); //角度の範囲を0-360度へ変換 if (angle >= 0) { orientationValues[0] = angle; } else if (angle < 0) { orientationValues[0] = 360 + angle; } // 北:0、東:90、南:180、西:270 azimuth = orientationValues[0]; //Z軸(方位角) pitch = radianToDegree(orientationValues[1]); //X軸(傾斜角):画面が自分に向いているときが基準(向こうに傾けるとプラス、手前がマイナス) roll = radianToDegree(orientationValues[2]); //Y軸(回転角) } //方角の表示 int azimuth_i = Math.round(azimuth); if(45<= azimuth_i && azimuth_i<135) { smdTextView.setText("東" + "(" + azimuth_i + "[deg])"); }else if(135<= azimuth_i && azimuth_i<225){ smdTextView.setText("南" + "("+ azimuth_i + "[deg])"); }else if(225<= azimuth_i && azimuth_i<315){ smdTextView.setText("西" + "("+ azimuth_i + "[deg])"); }else{ smdTextView.setText("北" + "("+ azimuth_i + "[deg])"); }

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

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

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

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

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

aja

2018/01/25 08:48

端末の姿勢によって精度がバラバラというのは、手に持って方位を見ているからではないですか?デスク上で安定させて何が問題なのか確認しましょう。
kkkkks

2018/01/25 09:44

お返事ありがとうございます。 デスクでやっても同様の結果になります。また、方位磁石で確認しながら、東西南北の四方位確認しましたが、全く正しく検出されません…
aja

2018/01/25 11:00

端末がキャリブレーションされているかですね。方位アプリなどを入れて磁石と合っているか確認してみるのもありかも
kkkkks

2018/01/25 11:14

プログラミング自体は、問題なさそうですかね??
aja

2018/01/25 12:26

コードが完全ではないので分かりません。参考サイトのままでまずテストしてから変更したほうがいいです
kkkkks

2018/01/26 04:40

そうですよね、そうしてみます。有難う御座いました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問