そもそもこのGPSロボットの製作を思い立ったのは一昨年の冬、室内用の自律ロボット製作が一段落して次に製作するロボットの仕様を考えていた頃でした。そのときは、漠然と次回製作のロボットは屋外を自律走行できるものを考えていたのですが、その後障害物のない洋上を自律航行で自由に走り回れるロボット船を開発できないものかと考えて思い浮かんだのがGPSロボットです。
当初はGPSの仕組みもまったくわからず、筆者の知識と製作技術ではたして実現可能かどうかも判然としませんでした。その後、一年ほどかけてネットでGPSの情報を集めた結果、筆者の知識でも何とかものになりそうな気がしてきて、予備段階として陸上でテストできるロボット・カーの製作に取りかかったのは2007年の年もおしせまった12月のことでした。
早速購入したのは、Strawberry Linuxから販売されているGPSモジュールでした。このモジュールは、5.5V電源で動作するので、筆者がロボットに使用している秋月電子製のH8-3052Fマイコンと電源を共用できるので好都合です。今回は、このGPSモジュールをロボット制御に活用する上での基本的な事柄について述べてみたいと思います。
このモジュールは、RS-232Cレベルでパソコンと通信することができます。モジュール側端子に5V電源およびアースを接続し、送信および受信用端子をパソコンのRS-232C端子と接続すると、簡単にハイパーターミナルでモジュールから送られてくるデータを読み取ることができます。
通信条件は4800bps、データ8ビット、ストップ・ビット1、パリティなし、フロー制御なしに設定します。送られてくるデータは、NMEA-0183formatV2.2形式のテキスト・データです。データはその内容によってGGA,GSV,GSA,RMCと呼ばれる4種類の文字列が各項目ごとに改行されて順に表示され、1秒間隔で更新されます。これらの項目の中でGPSロボットを制御するために最も適したデータはRMCセンテンスです。
上の写真はDsub9ピン端子に配線した様子です。
表示例:$GPRMC,132544,A,3545.7081,N,13949.9745,E,000.0,000.0,141205,,,A*76
測位時刻 :13:25:44(世界標準時)
緯度 :北緯35度45.7081分
経度 :東経139度49.9745分
対地速度 :0ノット
進行方向 :0°
日付 :2005年12月14日
(以上、GPSモジュールの取扱説明書から抜粋)
RMCセンテンスで表示される主な内容は、測位時刻、現在地の緯度、経度、対地速度、進行方向および日付などです。この中で筆者のGPSロボットで制御に利用しているのが緯度、経度および進行方向データです。
次に、ロボットでGPSモジュールのデータを活用する際の注意点を述べておきます。これを念頭に入れておかないと、プログラムを組む上で後々筆者のようにつまずくことになります。
まず、モジュールから送られてくる緯度と経度ですがこれは世界測地系の数値です。現在、地図などに表示される緯度および経度にはこの世界測地系と東京測地系の2種類が存在し世界測地系のデータを東京測地系にあてはめると日本では西寄りにおよそ400mのずれがあるようです。
筆者はモジュール購入直後、自宅の緯度、経度を測定してその結果を市販の地図ソフトにプロットしたところ400mも位置がずれていて、これでは使い物にならないと一時落胆したものです。
進行方向のデータは、北を基準として時計回りに0度から359.9度まで表示します。当初はロボットの進行方向を把握するために電子コンパスの導入も検討していましたが、モジュールから送られてくるデータの中にこの項目があることを知り、電子コンパスの導入は見送りました。よほど高速の移動体でないかぎり、実用上問題なさそうです。
次回は、筆者が最も苦労したGPSデータの中からマイコン制御に必要な部分だけを抜き出すプログラムについて説明します。
