jr7cwk;lavo

▼GPSロガー>GT-730F(L)>ECEF座標から距離計算

位置情報から距離を計算したいケースは良くあると思います。
しかし、緯度・経度から距離を計算するのは意外に大変なようです。
計算用のEXCELシートを公開されている方がおられ、私も活用させて頂いています。

ふと、GPS Viewerで変換されたECEF座標のデータを見ていたら、この値だけで距離計算できるのではないか?と思いはじめました。

地点1のECEF座標をX1,Y1,Z1,地点2のECEF座標をX2,Y2,Z2とした場合、地点間の距離Lは下記で求まるはず。

L=SQRT((X1-X2)^2+(Y1-Y2)^2+(Z1-Z2)^2)
(3次元のベクトルの合成?)

この方法でポイント間の距離を計算して3.6倍し、ポイント間の時間(1秒間隔で取得していれば1(衛星ロストしてなければ))で割るとkm/h単位の速度が得られる事になります。
ただしGT-730F(L)(というか、SkyTraq Venus5と6のどちらも)のログ元が1m単位の座標なので、ログとして出力されている速度情報と比較すると差が出てきます。もっともログ出力の速度情報もなんか怪しい時があるので、どっちが本当かわかりませんけど・・・

注)地球の丸い形状を考慮しない直線距離が算出されるはずです。
 地点間が離れている場合はこの計算だけではNGかも。


<11/1補足>
GPSでの速度情報が、衛星との見かけ上の移動に伴うドップラー効果による周波数の変化で計測されているかのような書き込みが2chで見られましたが・・・
少なくとも市販のナビやGPSロガー程度のハードウエアに受信周波数の変化を計測するようなハードウエアが積まれているとは考えにくいです。

個々の衛星がバラバラな方向に移動してますので、ドップラー効果で速度計測となると、受信可能な衛星全て(または一部)について計測する事になるはず。
比較的単純な信号ならFFT処理などで周波数を求める事は可能ですが、GPSの場合全く同じ周波数に複数の衛星の信号が送信されています。(厳密にはスペクトル拡散という技術で、衛星毎のコードに従って周波数が変化しているはずですが。)
コードの受信だけならともかく、スペクトル拡散された個々の衛星の周波数の変化を測定するとなると、ただ事ではすまないはずだからです。

FFT処理の場合、サンプリング周波数とサンプル数により周波数分解能が決まるという事情もあり、測定精度面の問題も生ずるはずです。


また、GPSレシーバより直接出力される速度情報の精度と、位置情報から算出される速度情報の精度に差が出るのは・・・
位置情報の出力がレシーバ内部で持っている位置情報より桁が丸められているからと考えるのが妥当です。

おそらくレシーバ内では上記のECEF座標から速度を算出していると考えられますが、ECEF座標を緯度・経度・高度に変換した段階で桁の丸めによる計算誤差が相当入るはず。
しかもシリアルに出力する段階でさらに丸めが入り・・・
(それがログ情報ともなると、ログメモリ容量と記録時間との兼ね合いからさらに桁を丸めて記録されたり・・・)

その位置情報から後処理で速度に変換すると、さらに丸め誤差が入り・・・
誤差が累積し相当大きな誤差になる事が考えられます。

なにせ、1秒毎の位置情報から速度を求めるとして、速度の誤差を±1km/hに収めるには、位置情報の誤差範囲は約0.28m以内のにする必要がありますから・・・
処理段階の丸めや計算誤差による影響は相当効いてくるはずです。
(もちろん、計算の前提である1秒毎、の「1秒」も正しくなれけば誤差につながります。)
<補足おわり>


●2009.10.16
●cwk
編集


コメントを書く
記事へ
HOME

copyright/jr7cwk

powered by samidare