2. 無線ネットワークを利用した GPS テレメトリ観測システムの開発
2.8. ソフトウェア設計
2.8.4. 測位情報の取得
本項では、NMEA 0183センテンスから測位情報を取得する方法について説明する。
2.8.4.1. NMEA 0183 フォーマット
GPS受信機GPS-72Dは、測位情報をNMEA 0183と呼ばれるフォーマットにて
シリアルで出力する[10]。文字コードはASCIIコードである。図2-20にNMEA 0183 センテンスの例を示し、センテンスの種類について図2-21に示す。各センテンスは’$’
で始まり改行を表す終端文字LFで終わる。
基本的には、各センテンスは文字’$’に続く6文字で区別される。ただし、各センテ ンスは、センテンスに含まれる半角カンマの数と最初の半角カンマの直前の文字を組 み合わせても区別可能である。文字列の取りこぼしが考えられる場合、後者の方が安 全に動作する。
なお、一般的には位置座標は小数点以下4桁の固定少数点方式で表されている。ま た、NMEA 0183 はセンテンスの出力順序を規定しておらず、GPS 受信機メーカの 任意となっている。
図2-20 NMEA 0183センテンスの例
図2-21 各NMEA 0183センテンスに格納されている情報
42
2.8.4.2. NMEA 0183 センテンスの処理アルゴリズム
本研究では、GPSテレメトリに必要なNMEA 0183センテンスについて、終端文 字を検出した後にバイナリデータかどうか判定を行い、ASCII 文字列であると判別 されたデータに対して半角カンマの数と最初のカンマの直前にある一文字によって センテンスを判別する方法を採用した。この方法でも判別できなかった文字列は$か ら続く先頭6文字にて判別を行った。この手法により、次のメリットを得ている。
1) LFを終端文字とするバイナリデータとNMEA 0183を共存させることが可能
2) 先頭の文字を4文字まで受信し損ねたとしても必要なセンテンスを判別可能
測位情報を処理するフローチャートを図2-22に示す。
図2-22 測位情報の処理に関するフローチャート
43
2.8.4.3. バイナリデータへの対応
一般的に、GPS受信機のバイナリ出力フォーマットは各社各様である。例えばバ イナリ出力時もLFを終端文字に利用しているSUP500などのGPS受信機であれば、
本研究で示したアルゴリズムをそのまま利用可能である。一方で、u-bloxなどのバイ ナリ出力時の終端文字が定義されていない場合は、終端文字をトリガとした受信文字 列の処理ができない。この場合、バイナリ出力時の開始コードを受信した段階で逐次 処理に移行する必要がある。
2.8.4.4. 割り込みを利用した処理と利用しない処理
GPS受信機より受信した文字列に対し、2.8.4.2に示した方法を適用することによ
ってNMEA 0183センテンスは処理できる。その処理の呼び出しをシリアル受信割
り込み内で行うことで、自動的に処理されているかのような振る舞いを実現でき、測 位情報が必要なときにシリアルデータの受信を待つことがなくなる。また、ソースコ ードの可読性も向上する。ただし、2.8.5項で説明するGPS受信機が出力するセンテ ンスの種類とその出力順の把握には、プログラムの行間でシリアル受信割り込みが発 生して状況を把握できなくなることを避けるために、シリアル受信割り込みによるセ ンテンスの処理は好ましくない。そのため、本研究では、シリアル受信割り込みのタ イミングで受信文字列を処理する方法と任意のタイミングにおいてそれまでに受信 した文字列を処理する方法の2通りを実装した。
図2-23に、シリアル受信割り込みを利用してNMEA 0183センテンスを処理する 際の、シリアル受信割り込みと1センテンスの処理タイミングを示す。
図2-23 シリアル受信データとセンテンス処理のタイミング
44