2017年5月6日GPSモジュールから取得できる電文についてここで使用しているGPSモジュールはubloxのNEO-M8Nである。configurable)」と記載がある。ある程度の移動速度が出ていないと進行方向が出てこないので、自車の方位は地磁気コンパスなどを用いるほうがよいであろう。地磁気コンパスについても、そのうち記載できれば良いと思っている。フォーマット」として検索していただければよい。参考までに、持っているNEO-M8Nのファームウェアのバージョンは2.01であった。u-bloxのホームページには3.01のファームウェアも公開されており、アップデートすることは可能である。やみくもにアップグレードするのも注意する必要がある。3.01では機能アップもされていることながら、生データが出力しなくなっている。ファームウェアのイメージがあれば、2.01、3.01を行ったり来たりできるので大丈夫である。2017年5月6日GPSモジュールから来たデータを変数に格納する前回のプログラムは、GPSモジュールから来た情報をそのままUSBのシリアルに送っていただけである。ただの通信テストに用いる場合に用いる手段である。実際にはGPSモジュールから読み込んだデータを加工する必要があるので、変数に代入しておかないとならない。ここでトラブルケースが多いので記載しておく。手法としてはいくつかあるので、一つのサンプルとして受け止めてもらえればありがたい。事実、大会で実際に使用したプログラムとは手法が違う。違う手法を使ったのか考えてもらいたい。プログラムの説明である。Loopの中でBufferを監視しており、Bufferに何か入ったらGPS_Readという関数を呼び出している。feed)を検出するまでWhileループしている。ここで再度Bufferが空かどうか確認しているのは、Bufferが空な状態で読んでしまうと、-1(0xFF)を受信してしまうことを恐れている。Bufferが空でなければ1文字読みだして返り値用の変数に順次1文字づつ格納している。Feed文字)が来た後に、0x0を書き込み文字列の終わりであることを示している。この0x0が入った以降は、ゴミが入っていても文字列としては無視されるので、わざわざ消す必要がない。文字列に入った文字はシリアルモニタに出力している。この後の必要部分の抜き出し等は純然なプログラミングの世界となるので、他のWebや文献を参考にしてほしい。UNOにはシリアル通信用のピンが1セット準備されているのだが、これは、シリアル通信変換回路を通じてUSBコネクタに通じているようである。余談になるが、2017年の大会中の出来事で、デバッグ中にUSBケーブルをつけたままロボットカーが走り出してしまいUSBポートを物理的に破壊してしまった。)USBポートの破壊による回路欠損はその場ではんだごてを使って応急処置ができたものの、USBコネクタは使い物にならなくなってしまった。その時は、パソコンとシリアル端子を接続することで無事にダウンロードをすることができ九死に一生を得た。UNOの場合は、シリアル通信が1セットだけである。IDEのシリアルモニタでプログラムの動作を確認しながらGPSモジュールの通信を行うために、複数のシリアル通信を用いる必要がある。MEGAを使うという手もあるが、Arduinoは入出力に使う端子を利用してシリアル通信を利用できる。ソフトウェアシリアルと呼ばれており、ライブラリが準備されている。作成したプログラムのデバッグ用にはUSB経由のシリアル通信を用い、GPSモジュールとの通信にはソフトウェアシリアルを用いるということである。IDEのシリアルモニタで観測した様子である。UNIの5V,GNDと5番、6番の各ピンを使用した。IDEのスケッチは下記のように組んでみた。ソフトウェアシリアルを組み込み、GPS_Serialと名前をつけて、5番、6番のピンを指定した。その後、シリアルモニタ用には115200kbpsの通信速度を、GPSモジュール用のGPS_Serialには9600bpsの通信速度を定義した。プログラムとしては、ただ単にソフトウェアシリアルのバッファにたまった電文を読み(read)、USBを経由するシリアルに書き込んで(write)しているだけである。これでとりあえずGPSモジュールからの信号もArduinoの中に取り入れたことになる。2017年4月26日GPS受信データGPSからの受信状況は以下に示す。GPSアンテナからは東側の空しか見えず、非常に悪い環境なのがわかる。これを見ると、片側が受信できている様子がなんとなくわかる。この状態でGPSの位置を見ると結構ずれており、このままではあまり使えない。軸のレンジが少しわかりにくいのだが、一番小さい円から2.5m刻みである。外側の円が10mの誤差となる。これをできるだけ精度を高めるためには、いくつかのノウハウがある。全天を見張らせるところで実験してみると、結構そのまま使えるデータになることもある。GPSモジュールの設定を変えるなどして試してみるとよい。上記はGPSモジュールを固定して長時間データ収集した結果である。(https://www.u-blox.com)と接続してみる。先に使った設定では、GPSモジュールはCOM3に接続され、9600bpsの通信速度になっている。Portだけを設定すればよい。下の図の矢印のところあたりでPortと通信速度が設定できる。すると、通信を始める。あとは、U-Centerのマニュアルを見ながらいろいろと試してもらいたい。ちなみに、GPSデータは以下の様に出力される。位置情報は黒塗りさせてもらっているが、雰囲気はわかっていただけたと思う。実際にGPSモジュールとPCを接続してみる。多くの方がそうだと思うが、PCとGPSモジュールを接続した状態で、GPS信号をそのまま受信できる環境を持っている人は多くないと思われる。窓の近くにPCと接続されたGPSモジュールを持っていくことになり、これが結構面倒である。自宅に古い電話線の余りが15mほどあったので、その電話線を延長ケーブルとして使っている。実は、こんな小さい工夫がちょっとした実験に役立っている。電話線を使ったのは、細くて柔らかいからであり、実際には4本以上の配線があればよいので、LANケーブルを使ってしまってもよい。信号線にはツイストペアが良いという話は確かにあるが、この実験程度では気にしなくてよい。端末処理は行い、GPSモジュール用のコネクタも作成した。