「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
私はソフテックへ入社して10年超の中堅社員で、主に組み込みソフトの開発に携わってきました。最近、あるお客様からGPS(全地球測位システム、Global Positioning System)受信機モジュールを使用した組み込みソフト開発のご依頼をいただきました。開発システムの要求仕様に、現在位置情報(緯度、経度)をファイルに記録する機能が含まれていたため、GPS受信機モジュールを使用して、位置情報の取得と記録を行うソフトを開発しました。
今回のソフテックだよりでは、その際の経験をもとに、今後GPSを使用したいと考えておられる方へ向けて、GPSの概要を簡単にご紹介したいと思います。
GPS受信機モジュールのインターフェースについては、調歩同期式シリアル通信(UART)を採用している場合が多く、それらはNMEA0183準拠の通信プロトコルに対応しています。マイコンとGPSモジュールの接続例を下図に示します。
図1. マイコンとGPS受信機モジュールの接続例
一般的なマイコンであれば、UARTペリフェラルを標準で搭載していますので、GPS用の通信チャンネルを1つ用意すれば、簡単に接続することができます。 通信プロトコルNMEA0183については、次章で説明します。
一般的にGPS受信機モジュールから取得可能な情報は位置情報だけではありません。GPSから取得可能な情報の例を以下に挙げます。
など
これらの情報を使用する場合、情報精度が、実現したい機能にマッチしているかを十分検討した上で使用する必要があります。
例えば、緯度、経度の位置情報を使用する場合でも、実現したい機能によって、何m程度の誤差が許されるのか(数m程度なのか、数十m程度なのか?)は異なるはずです。
捕捉可能な衛星の数などの違いによって、GPS受信機モジュールの位置情報精度も変わってきますので、要求仕様を満たせるかどうかをよく検討した上でGPS受信機モジュールの選定を行いましょう。
GPSの位置情報は、GPS受信機モジュールからNMEA0183プロトコル準拠のデータフォーマットで通知されます。
NMEA0183は、米国海洋電子機器協会(National Marine Electronics Association)が策定、管理するデータ通信プロトコルで、GPSやソナー、ジャイロコンパスなどの海上電子装置での使用を前提としています。
NMEA0183について簡単に説明します。
通信電文は、センテンスと呼ばれる開始文字’$’から改行’\r\n’の終了文字で挟まれたデータの集合体になります。
センテンス内のデータはカンマ’,’で区切られた複数のデータで構成されます。センテンスの先頭アルファベット2文字はトーカーID(Talker ID)と呼ばれる情報発信元のIDになります。
”GP”は単独GPSの情報、”GL”はGLONASS(ロシアの衛星システム)の情報、”GN”は複合GPS情報であることを表しています。
トーカーIDの後ろの3文字はデータ種別を表すメッセージIDです。
GPSで使用するメッセージの種類には、GGA(GPS固定データ、Global positioning system fixed data)、RMC(推奨最小GPSデータ、Recommended minimum specific GPS data)、GSA(精度低下率と有効衛星数、GPS DOP and active satellites)、GLL(地理的位置、Geographic position, latitude/longitude)などがあります。
緯度・経度の情報が必要な場合、利用できるメッセージは複数存在しますので、開発するシステムの機能に合わせてどのメッセージの使用が最適かを十分検討する必要があります。
例えば、弊社で開発したシステムでは、位置情報のほかにUTC時刻と日付の情報が必要であったため、RMCデータを主に使用しました。
GPS受信機モジュールから通知される実際のデータ(緯度・経度の情報が取得可能なもの)の例を以下に示します。
○ GGA(GPS固定データ、Global positioning system fixed data)
受信データ例:
$GPGGA,094012.000,3421.1155,N,13402.7798,E,1,5,2.53,-34.1,M,31.6,M,,*4D
項目 | データ例 | 説明 |
---|---|---|
メッセージID | $GPGGA | GPS固定データ |
時刻(UTC) | 094012.000 | 09時40分12秒000 |
緯度 | 3421.1155 | 34度21.1155分(=34.351925度) |
N/S表記 | N | N=北緯、S=南緯 |
経度 | 13402.7798 | 134度02.7798分(=134.046330度) |
E/W表記 | E | E=東経、W=西経 |
位置決定品質 | 1 | 0=無効データ、1=GPSデータ、2=DGPSデータ、6=デッドレコニング(自律航法)データ |
使用衛星数 | 5 | 捕捉衛星5個 |
水平精度劣化度 | 2.53 | 水平位置の相対精度2.53 ※値が小さいほど精度が高いことを示します。 |
標高 | -34.1 | 標高 -34.1m |
標高の単位 | M | 単位:メートル |
ジオイド高 | 31.6 | ジオイド高31.6 m |
ジオイド高の単位 | M | 単位:メートル |
DGPS参照局ID | データなし ※DGPS(差動GPS、Differential GPS)未使用を示します。 |
|
チェックサム | *4D | サム値4D |
表1.GGAデータ説明
○ RMC(推奨最小GPSデータ、Recommended minimum specific GPS data)
受信データ例:
$ GNRMC,094022.000,A,3421.1107,N,13402.7726,E,0.45,231.16,240715,,,A*7D
項目 | データ例 | 説明 |
---|---|---|
メッセージID | $ GNRMC | 推奨最小GPSデータ(複合GPS) |
時刻(UTC) | 094022.000 | 09時40分22秒000 |
ステータス | A | A=有効データ、V=受信機警告 |
緯度 | 3421.1107 | 34度21.1107分(=34.351845度) |
N/S表記 | N | N=北緯、S=南緯 |
経度 | 13402.7726 | 134度02.7726分(=134.046210度) |
E/W表記 | E | E=東経、W=西経 |
移動速度 (単位:ノット) |
0.45 | 移動速度0.45ノット |
進行方位度 | 231.16 | (真北から)231.16度 |
日付(UTC) | 240715 | 2015年07月24日 |
地磁気の偏角 | なし | |
地磁気のE/W表記 | なし | |
モード | A | A=標準GPS、D=DGPS、E=デッドレコニング、N=無効データ、S=シミュレータモード etc. |
チェックサム | *7D | サム値7D |
表2.RMCデータ説明
○ GLL(地理的位置、Geographic position, latitude/longitude)
受信データ例:
$GNGLL,3421.1114,N,13402.7730,E,094020.000,A,A*4E
項目 | データ例 | 説明 |
---|---|---|
メッセージID | $ GNGLL | 地理的位置データ(複合GPS) |
緯度 | 3421.1114 | 34度21.1114分(=34.351857度) |
N/S表記 | N | N=北緯、S=南緯 |
経度 | 13402.7730 | 134度02.7730分(=134.046217度) |
E/W表記 | E | E=東経、W=西経 |
時刻(UTC) | 094020.000 | 09時40分20秒000 |
ステータス | A | A=有効データ、V=無効データ |
モード | A | A=標準GPS、D=DGPS、E=デッドレコニング、N=無効データ、S=シミュレータモード etc. |
チェックサム | *4E | サム値4E |
表3.GLLデータ説明
組み込みソフトでは、上記プロトコルへの対応として、受信電文の解析処理(上記フォーマットの中から必要な位置情報を抜き出す処理)などが必要となります。
C/C++言語に対応したNMEA Parser(NMEA電文解析ライブラリ)ソフトなど、インターネット上に公開されているものもいくつかありますので、手軽に通信試験を行いたい場合はそれらを試用してみるのもよいかもしれません。
GPS受信機モジュールを組み込みシステムで使用する際、ソフトウェアで工夫が必要となるポイントがいくつかあります。
システムの要求仕様にもよりますが、例えば以下のような点が挙げられます。
組み込みソフトの場合、リアルタイム性を要求されることが多いため、GPS受信機モジュールの起動から測位までの時間について、注意が必要です。
GPSは、他のセンサのように起動してすぐにデータ(位置情報)が得られるわけではありません。
衛星を捕捉し、実際の位置情報データが出力されるまでには、一定の時間がかかります。
電源投入からデータが出力されるまでの時間については、GPS受信機モジュールによって数十秒〜数分の差がありますので、システム要件に応じて最適なGPS受信機モジュールを選定することが必要となります。
また、各メーカーで高速なデータ読み出しをサポートする機能を用意している場合もあります。
例えば、GPS受信機モジュールが一定周期で起動し、常にホットスタート(位置情報の計算に必要なアルマナック情報とエフェメリス情報の両方を持っている状態で起動すること)を可能にするような機能です。
このような機能を使用することで、起動数秒後でも位置情報を取得することが可能になります。
消費電力については、バッテリー駆動のデバイスの場合に主に注意が必要となります。
スマートフォンを使用されている方ならよくおわかりだと思いますが、GPSを常時起動状態にしておくと、大きな電力を消費します。
高速に移動する物体の位置情報を精密に観測するような用途を除けば、秒単位、数十秒単位で位置情報を取得できればよい場合がほとんどだと思いますので、必要なときにだけGPSを起動する工夫が大切になります。
GPS受信機モジュール自体に、スタンバイモードや周期起動モードなどの省電力機能をもつものもありますので、それらを有効に活用することが大切です。
また、前章で説明したNMEA0183通信プロトコルの不要なメッセージを停止したり、送信周期を遅くしたりすることで、省電力につながる場合もあります。
GPS受信機モジュールの機能を確認して、最適な設定で使用することをおススメします。
衛星電波を受信できない場合については、持ち運びを前提としたデバイスで注意が必要なポイントになります。
GPSモジュールの特徴として、衛星を捕捉できない屋内では情報を取得できないという問題がありますので、持ち運び可能なデバイスを屋内に持ち込んだ場合の処理、対策については十分検討する必要があります。
例えば、大まかな位置情報を把握できていればよいというシステムでは、屋外から屋内に移動した際に、最後に取得したデータを保持、記憶する処理を追加するだけでよいケースもあります。
なお、最近では、屋内測位の研究開発も進んでおり、専用の中継器等を設置することで、屋内/屋外でシームレスに高精度な位置情報を取得できるシステムも市販されているようです。
今後はそれらを使用する解決策が主流になるかもしれません。
今回は、GPS受信機モジュールを使用した組み込みソフト開発についてご紹介しました。
最近は安価なデバイスでGPSが利用されるケースも増えており、GPS活用の機会は今後ますます増えるのではないかと考えています。今号が皆様のソフト開発のお役にたちましたら幸いです。
最後までお読みいただきありがとうございました。
(T.S.)
関連ページへのリンク
関連するソフテックだより