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

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

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

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2130閲覧

GPSのHeading情報を取り出したい

woodstocks

総合スコア11

GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/14 06:10

編集2022/01/12 10:55

前提・実現したいこと

Raspberry Piクックブック(Simon Monk著)のP283に乗っているgps_test.pyというGPSデータの中から緯度経度、時間の情報を表示させるプログラムを参考に、Headingの情報も表示させたい。

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

Heading情報表示のコードが分からず、下のようなエラーが出て困っています。プログラムは初心者なので分かりやすくどうしたらいいか教えてもらいたいです。

TypeError: 'instancemethod'object has no attribute '__getitem__

該当のソースコード

python

1#参考にした本のプログラム 2 3from gps import * 4session = gps() 5session.stream(WATCH_ENABLE|WATCH_NEWSTYLE) 6 7while True: 8 report = session.next() 9 if report.keys()[0] == 'epx' : 10 lat = float(report['lat']) 11 lon = float(report['lon']) 12 print("lat=%f\tlon=f\ttime=%s" % (lat, lon, report['time']) 13time.sleep(0.5) 14 15 16#実際に書いたプログラム 17 18from gps import * 19session = gps() 20session.stream(WATCH_ENABLE|WATCH_NEWSTYLE) 21 22while True: 23 report = session.next() 24 if report.keys()[0] == 'epx' : 25 lat = float(report['lat']) 26 lon = float(report['lon']) 27    hed = float(report.get['hed']) 28 print("lat=%f\tlon=%f\thed=%f\ttime=%s" % (lat, lon, hed, report['time']) 29time.sleep(0.5) 30

試したこと

[cgps -s]を実行するとGPSが受信しているデータを見ることができた。そこで、hedingの情報も読み取ることができたため、[hed]の行を追加してみた。

[hed]を追加すると、keyerror が出てしまったため、前にgetを付けてkeyerrorが出ないようにした。
また、[hed]だけでなく[heding]や[magver]などを試したが、同じエラーが出てしまっている。

補足情報(FW/ツールのバージョンなど)

pythonは2.7を使用
gpsdの受信確認は完了し、常に5機程のGPSを認識している。また、RaspberryPi本体のupgradeは済んでおり、最新の状態でも同様のエラーが出てしまった。

使用した部品は、RaspberryPi3 B+    太陽誘電製GYSMAXBのGPSモジュール

参考にした本「RaspberryPiクックブック (Smon Monk著)
参考にしたページ https://gpsd.gitlab.io/gpsd/gpsd_json.html

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

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

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

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

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

guest

回答1

0

woodstocksさん、

cgps.c のソースコードを見たところ、headingは、gpsdata->fix.track を参照してるようなので、report['track']で取得できるのが、headingとなると思います。

  • cgps.c:
/* Fill in the heading. */ if (gpsdata->fix.mode >= MODE_2D && isnan(gpsdata->fix.track) == 0) { double magheading = true2magnetic(gpsdata->fix.latitude, gpsdata->fix.longitude, gpsdata->fix.track); if (!magnetic_flag || isnan(magheading) != 0) { (void)snprintf(scr, sizeof(scr), "%.1f deg (true)", gpsdata->fix.track); // <======== このあたり ======== } else { (void)snprintf(scr, sizeof(scr), "%.1f deg (mag) ", magheading); } } else (void)snprintf(scr, sizeof(scr), "n/a");

o ソースコード取得は、apt source gpsd-clients を使いました。

投稿2019/11/19 06:01

mt08

総合スコア1825

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

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

ms_0322

2019/11/22 07:55

woodstocksさん、mt08さんこんにちは。 今、私も同じようなことで行き詰っていてこの質問にたどり着きました。 woodstocksさんのプログラムの{hed}の所を{track}に変更してやってみたのですが、 [Typeerror: 'str' object is not callable]や[Keyerror: 'track']といった、TypeErrorやKeyErrorがでてしまってなかなかできません。 if文の所を書き換えなければHeading情報を取得できないと考えているのですが、どのように書き換えればよいのか分かりません。mt08さん、その他のみなさん教えていただけると大変助かります。どうかよろしくお願いします。
mt08

2019/11/25 09:29

ms_0322さん、 report に入ってくるデータは、同じものとは限らないので、'track'というキーが入ってるものがきたときに取得してみてください。
ms_0322

2019/12/03 01:36

回答ありがとうございます。 mt08さん、reportに入ってくるデータを同じもの、”track”に関するものに固定することはできないのでしょうか? trackが[Heading]を指しているのは、私もソースコードを見てみて分かったのですが、取り出し方がわからないのです。プログラム初心者でも分かるように教えていただけないでしょうか。 どうかよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問