ArduinoにGPS受信機を接続し測位精度を測定しました

GPS受信機をどう使うの?

  • 秋月電子通商で購入したGPS受信機[GPS受信機キット]をArduino経由でPCと接続し、GPS受信機の専用ソフトを使ってGPSの測位データを表示します、そして、測位精度をNMEA信号のログを取って計算します。

必要な部品は?

GPS受信機1個
Arduino UNO R31個
10KΩ抵抗1個
ダイオード1個
GPS信号を受信するための製品・商品の購入先は?

GPS受信機のFritizingデータは?

  • GPS受信機のFritzingの部品データを検索しましたが見つからなかったので自作しました。
  • 秋月電子通商の製品のサイトの寸法データに合わせて外形図を作りました。外観は凝るときりがないので、ほどほどに似ている感じにしています。
Fritzingの部品データを作成する詳しい記事は?

GPS受信機をPCから操作する時の回路図は?

  • 秋月電子通商のGPS受信機[GPS受信機キット]に仕様書[GYSFDMAXB_spec_ae.pdf]へのリンクがあります。GPS受信機の概要が説明されています。Arduinoに取り付ける場合はGPS受信機のRXは3.3V仕様なので、Arduinoからの5Vの電圧をダイオードと抵抗で3.3Vの電圧に変える回路図になっています。
  • Arduino UNO R3のデジタル出力のPin#0とPin#1をTX、RXとして使ってArduino UNO R3のボードをUSBシリアル変換器として使います。
Arduino UNO R3をUSBシリアル変換器として使う記事は?

GPS受信機からの信号を調べるには?

  • GPS受信機からの信号をArduino経由でPCで受信して専用ソフトで表示・計算します。
  1. Arduino UNO R3に空のSketchを書き込みます。
  2. GPS受信機のボーレートの初期値は9600です。シリアルモニタの通信速度が9600であることを確認します。シリアルモニタを立ち上げてGPS受信機からの信号が受信できていることを確認します。
// empty sketch
 
void setup()  
{
}
 
void loop()
{
}
  • 集合住宅の私の部屋はGPS受信が時々切れるので、寝屋川市の友呂岐緑地でGPS受信機の信号計測をしました。
  • Google Mapで選んだ地点の、緯度経度は、34.762638N, 135.618690E でした。
  • Arduino IDEのシリアルモニタにGPS信号が表示されました。

GPS受信機の測位精度は?

  • 屋外(友呂岐緑地)で測定したデータを使って、GPS受信機の緯度経度の測位結果とGoogle Mapから得た緯度経度との差を計算してみます
  • GPS受信機からのNMEA信号を、Teratermで受信してログを取ります。信号は「,」区切りなのでCSVファイルとしてEXCELで読み込み緯度、経度のデータを計算しました。取得したデータ数は1352個(データは1秒に1回で22分程度のデータ)です。
NMEA データ緯度経度
平均3445.75619613537.12101
標準偏差0.0001037570.000329374
最大値3445.75630013537.121700
最小値3445.7560013537.120500
  • 2点間の距離と方位角の計算が国土地理院[測量計算(距離と方位角の計算) ]で公開されているので使用させていただきました。測地系のGRS80とWGS84はほとんど同じとのことです。
  • NMEAの出力は十進法度単位に変換して入力します。
  • 出発点をGPS受信機の平均値、到着点をGoogle Mapから得た緯度経度としています。直線で3.899mの誤差です。(Google Mapで選んだ地点は目視で選んでいるので、その誤差も含みます。)
  • 測定バラツキを、標準偏差の3倍を使って計算します。出発点をGPS受信機の平均値、到着点をGPS受信機の平均値に標準偏差の3倍を加えた数値で計算しました。
  • 繰り返し誤差は今回の測定では3σで1.614mです。半径1.614mの円にほとんどの測定値が収まることになります。最初は自分の部屋で測っていたので結構バラツクなと思っていたのですが屋外で計測すると小さな範囲に収まるなと感じました。
GPS信号の受信データをSDメモリに保存する記事は?
移動しながらGPS信号を受信した時の精度は?

[Power GPS Express]でGPS受信機からの信号を表示する方法は?

  • Power GPS ExpressはGPS受信機の信号を受信し測位情報を表示したりGPS衛星の位置を表示したり、GPS受信機を操作したりできます。
  • 秋月電子通商のGPS受信機[GPS受信機キット]のサイトからソフトウェアパッケージをダウンロードして使えます。
  • GPS受信機とPCをArduinol経由で接続して、Power GPS Expressを立ち上げ、COMポート、ボーレートを設定して接続します。
  • Power GPS ExpressはGPS受信器からの信号をさまざまな方法で処理し、表示します。
  • 測位信号の解析のダイアログで、緯度・経度、高度、速度の測位精度がグラフ化して表示されます。
  • 私の部屋で取得したGPSの測位情報を使うと、測定位置(緯度・経度)は南北方向で200m、東西方向で100m程度の範囲で分布しています。
  • 屋外(友呂岐緑地)で測定すると、捕捉している衛星の数が増えるためか、緯度経度の測定結果の分布はかなり小さな範囲に収まっています。

GPS受信機からのNMEA信号とは?

  • NMEAは航海用の電子機器の信号フォーマットの規格です。今回購入したGPS受信機からはNMEA信号が常時送信されてます。NMEA信号についてはインターネットで「NMEA」を検索すれば信号フォーマットの情報が多く見つかります。
  • 今回購入したGPS受信機から送信されているNMEA信号を通信ソフトで表示させます。
$GPGLL,3445.7563,N,13537.1216,E,054955.000,A,D*52
$GPGSA,A,3,17,09,06,02,11,194,12,19,04,195,03,20,1.09,0.80,0.74*05
$GPGSV,4,1,14,195,87,127,38,19,84,173,37,17,60,151,36,06,59,339,32*43
$GPGSV,4,2,14,09,49,102,46,50,48,194,31,04,32,062,27,11,28,296,35*7D
$GPGSV,4,3,14,20,25,248,26,02,24,300,29,12,18,302,35,194,18,189,33*40
$GPGSV,4,4,14,03,11,048,17,14,03,186,23*7D
$GPRMC,054955.000,A,3445.7563,N,13537.1216,E,0.00,213.19,190622,,,D*63
$GPVTG,213.19,T,,M,0.00,N,0.01,K,D*31
$GPZDA,054955.000,19,06,2022,,*52
$GPGGA,054956.000,3445.7563,N,13537.1216,E,2,12,0.80,19.8,M,34.5,M,,*5B
  • NMEA信号は「$」から始まり5文字の識別子の後にコンマ区切りで信号が続き、’CR,LF’がメッセージの終了になります。
  • $GPGLLのセンテンスを例として説明します。緯度・経度、時刻などのデータが出力されていることが解ります。

$GPGLL,3445.7563,N,13537.1216,E,054955.000,A,D*52<CR><LF>

$センテンスの開始
GPGLLアドレスフィールド( 5 文字)
GP (Talker ID) GPはGPS受信機
GLL (sentence) GLLはGeographic Position, Latitude and Longitude
3445.7563緯度 : 度分.少数位
N北緯 :( N )または南緯( S )
13537.1216経度 :  度分.少数位
E東経( E )または西経( W )
054955.000時刻( UTC )  時 分 秒.少数位
Aステータス [ A :有効,V :無効]
Dモード [A : GPS 単独測位, D : DGPS, N :無効]
*52チェックサム( $ から * の間)
<CR><LF>センテンスの終了

GPS受信機の設定方法は?

  • 秋月電子通商のGPS受信機のリンク[GYSFDMAXB_spec_ae.pdf]にGPS受信機を操作するコマンドの仕様があり、GPS受信機のコマンドフォーマットは18ページの[NMEA Packet Format]に記述されています。
  • 秋月電子通商のサイトのGPS受信機のコマンドの仕様書で、GPS受信機へのコマンドフォーマットは[NMEA Packet Format]に記述されています。
  • 書式は、「[$]+[PMTK]+[3桁の番号]+[データ(コマンドによって異なる)]+[*]+[チェックサム]+[CR,LF]」です。
  • チェックサムの計算は専用サイト[NMEA MTK checksum calculator]があり計算結果を出してくれます。
  • 出力信号の選択は24~25ページの[314 PMTK_API_SET_NMEA_OUTPUT]に記述されています。
  • PMTK314コマンドでGPS受信機からどの信号をどのようなインターバルで出力するかを設定できます。
  • 例えば、GPGLLのみを5秒間隔で出力するためには、最初のビットを’5’残りを’0’と設定します。
$PMTK314,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*2D
  • Arduino IDEのシリアルモニタにはPC側からの送信ができるので、このコマンドを送信するとGPGLLのみが5秒間隔で送信されているのが解ります。
  • 送信するコマンドは最後がCR,LFです。シリアルモニタ下部の設定を「CRおよびLF」にしてください。
  • GPS受信機からの出力設定を初期値に戻すには以下のコマンドを発行します。
$PMTK314,-1*04
  • GPS受信機のボーレートなども変更可能です。どのような機能を変更できるかは、GPS受信機のコマンド仕様書[GYSFDMAXB_spec_ae.pdf]で確認下さい。

ご質問、誤植の指摘などありましたら。「問い合わせ 」のページからお願いします。