February 11, 2008『GPSのための実用プログラミング』最近このサイトへアクセスしてくださる方の傾向を観ると、GPS関係のキーワードで検索エンジンから来られる方が多いようで、特に自作GPSロガーは大人気となっています。そのような流れを受けて、今後もできるだけGPS関連の情報は充実させていきたいと考えています。その長期計画の一環として、GPS参考書『GPSのための実用プログラミング』の紹介、並びに掲載されているC言語コードをC++化したことについて、この記事では触れたいと思います。 僕はGPSの受信機をソフトウェアで構成することに元々興味があったので、以前は『Open source GPS C/A信号の抽出』の記事にもあるとおり、GPSのL1電波(1575.42MHz)から意味のある情報、例えば擬似距離(pseudo range)や搬送波位相(carrier phase)を抽出する、といった信号処理側から攻めていました。ところがこの攻め方はあまりメジャーのようではなく、その意味のある情報から更に計算を行って、現在位置といった測位を行うほうに興味がある方が多いようです。そのような方にお勧めしたい本として、電子航法研究所の坂井先生が書かれた『GPSのための実用プログラミング』という本があります。出版元は東京電機大学出版局です。 この本は上記測位の点に要点を絞って解説された本で、C言語のコードと共に測位計算の手順が紹介されているので非常にわかりやすい本です。GPSの計測データの保存フォーマットとして一般的なRINEXファイルについても触れられているので、たとえGPS受信機を持っていなくてもIGS等のインターネット上に公開されているRINEXファイルを元に測位計算を体験してみることができます。 掲載されているC言語のコード(某所で公開されていますが、本の購入者のみ利用可能ということなのでリンクは控えさせていただきます)は非常に役に立ちましたが、僕自身の理解を深めるにためにも掲載コードの一部(第2章~第4章)を、色々と構造化して僕の好きなC++風に書き換えてみました。せっかくなのでコードを公開しようと思いますが、著作権の問題もあるかと思いますので、現在問い合わせ中です(肩透かしでごめんなさい→その後公開しました、記事末尾参照ください)。 ちなみに本を読み進めるにあたって、いくつか疑問点があり坂井先生に質問したところ、以下のような正誤が第1版ではあることがわかりました。
またさらに以下の疑問点があったので、問い合わせております(→その後、いずれの項目も指摘のとおりという返答をいただきました)。
いずれの問題点も、GPSの仕様書『GLOBAL POSITIONING SYSTEM STANDARD POSITIONING SERVICE SIGNAL SPECIFICATION』(PDF)と付け合せた上での結論です。 ※その後、プログラムを公開を坂井先生にご快諾していただきました。080205_gpsフォルダからダウンロードできます。このプログラムの使用にあたっても、元のCプログラム同様、以下の条件でお願い致します、とのことです。
内容は4章までではなく5章までとしました。実行はVC2005 Express Editionとg++-3.4.4で確認しました。一部別ディレクトリ(commonとnavigation)のヘッダが必要になると思いますが、実行環境に応じて調整を行ってください。 ※(2008/6/27 追記)富士通 近藤様よりプログラムについてご指摘を戴きました。衛星位置の計算の際に、昇降点の経度を求めるのですが、その補正項について解釈を誤っていたようです。この昇降点は『電波が到達した時刻のECEF座標系における値』でなければならないのですが、補正の際には送信時刻ベース(伝播時間を差し引いた時間)の補正であるエフェメリスからの補正、並びに受信時刻ベース(伝播時間を差し引かない時間)の補正である地球自転の2つがあり、それを混同していたようです。これに基づいてプログラムの修正を行いました。修正前の状態は __MISUNDERSTANDING_ABOUT_OMEGA0_CORRECTION__ をdefineすることで再現できるようにしてあります。『理解するためのGPS 測位計算プログラム入門』の質問コーナーにも同等の内容が触れられており、そちらも参考にしました。 コメント
DGPSについて 以下お教えいただきたく GPGGAの最後にOUTPUTされますが ② とあるWEB SITEにでていますが、 >春名さん
>春名さん 1. DGPSの補正ELEMENTについては、わたくしの質問に間違い はないはずです。 2.マルチパスの問題について、ある原因についてはすでに 春名浩一 >春名さん GPS受信機を用いて、RINEXの取得する時間は12分30秒以下になったら、正しい測位計算できませんですか? Posted by: akira : December 20, 2012 05:43 PM>akiraさん 参考になるかどうかわかりませんが、MITでの高速FFTを活用した、 >mad-ssさん コメントする
|
スポンサード リンク
|