OSQZSS

オープンソース準天頂衛星(QZSS)受信機

測位演算の効率化

2014-04-11 17:30:46 | ロケット
リソースの潤沢なPCであれば問題ありませんが,組み込みシステムの
マイコンで疑似距離と放送歴から単独測位を実施しようとすると,
処理能力が不足しがちです.

特に,放送歴から衛星位置を求める演算は,三角関数を多用します.
さらに,測位演算のiterationのたびに,すべての衛星位置を再計算するのは,
非常に効率の悪い実装になります.

そこで,この衛星位置の計算を効率化する手段として,衛星の位置,速度,
加速度をある一定周期で計算し,その間は等加速度運動と仮定して
2次関数から衛星位置を求める方法が考えられます.

ICD-GPS-200には,放送歴から衛星位置を求めるアルゴリズムしか
説明されていませんが,下記の論文などで,速度,加速度の
導出方法が示されています.

GPS Satellite Velocity and Acceleration Determination using the Broadcast Ephemeris

ちゃんとした評価をしたことがありませんが,実装してみての実感として,
10秒間隔でも単独測位には十分な精度で衛星位置を近似することができます.

可視のGPS衛星は多くても10機程度なので,1秒に1衛星,放送歴から位置,
速度,加速度を計算するだけて良いことになります.

これでずいぶんと演算負荷を軽減できるのではないでしょうか.
お試しください.

【追記】高須さんにiterationごとの衛星位置の計算は不要とご指摘いただいた.
確かに,疑似距離と衛星クロックパラメータが与えられれば,受信時刻から
逆算して信号の送信時刻を求めることができる.その時刻での衛星位置さえ
計算しておけば,再計算は不要だ.RTKLIBでは,この方法が実装されている.

坂井さんの「GPSのための実用プログラミング」を始め,多くのテキストでは
疑似距離の残差を求める際に,観測時刻における衛星と受信機の位置から
幾何学距離を求め,その伝搬遅延を差し引いて信号の送信時刻を求めている.

そのため,iterationのたびに衛星位置を再計算しているのだが,
これが不要とは思いつかなかった.

そんなわけで,2次関数での外挿は無用の長物に…

【追記2】それでもこのままでは悔しいので,2次関数で外挿された衛星位置の
誤差を評価してみた.放送歴から計算した衛星位置に対して,外挿した場合の
衛星位置の差をプロットしてみると,10秒程度であれば数cmの誤差に収まっている.
放送歴のUREが1m程度なので,十分に小さな近似誤差だと言える.



効率化への貢献度が下がってしまった外挿法だけれども,測位解の出力頻度を
上げたいときなど,さらなる演算負荷低減の役に立つかな.

コメント (1)    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Beagleboneの無線化 | トップ | ラジコンカーのRTK測位 »
最新の画像もっと見る

1 コメント

コメント日が  古い順  |   新しい順
iteration中の暦再計算 (TTAKASU)
2014-04-12 08:33:02
「測位演算のitterationのたびに,すべての衛星位置を再計算する」とありますが、一般的にはこの様な「再計算」は必要ありません。演算負荷軽減のためには、まずは暦の計算をiterationループの外に出すことを検討すべきと思います。

コメントを投稿

ロケット」カテゴリの最新記事