見出し画像

GPS(GNSS)測位の理解解像度をもう少し上げたい

本記事は、オリエンティアアドベントカレンダー(裏) 19日目の記事です。

と言って、ぶっちゃけオリエンテーリングあんま関係ない、技術的にマニアックな解説をする記事になっています。競技の役に立たないのはもちろん、地図調査の役にもあまりたちません…

オリエンテーリングの大会運営をするうえで有用な記事は、すでに先人が書いたこちら: https://note.com/iwahage/n/ne7f793846a3a  などをご参照ください。


はじめに

GPS測位の原理の超基本

GPSの原理、といえばまぁ皆さん聞いたことくらいはあるのではないかと思います。だいたい以下のような感じです:

  • GPS衛星は正確な時計を持っていて、その時刻を電波で地上に発信する

  • 地上の受信機は、衛星からの電波を受信し、その時刻から電波が衛星から受信機に到達するまでの遅延時間を求める。

  • 遅延時間から衛星との距離がわかる。この距離が3つ分かれば三次元での自分の位置がわかる。

  • 実際には受信機の時計は精度が悪いため、受信機の時刻も未知変数として4機からの電波を受信することで位置が確定できる。

とまぁ、こんな感じですね。

本記事で解決したい疑問

これでまぁ一応合ってはいるわけですが、このレベルの解像度ではまだまだ分からないことがあります。

  • 時刻って具体的にどういう形態で送ってるのか?時刻情報を送ることそのものに一定の時間がかかりそうなもんだが?そのへんはどうやってんの?

  • 誤差はなぜ生じるのか

  • 最近話題の(?)RTKはなぜあんなに高精度なのか?昔あった(今もあるけど)DGPSとかいうやつと何が違うのか?高精度受信機は安物と何が違うのか?

  • なんか「みちびき」の出す補強信号で基準局無しでセンチメーター級の精度って聞いたけど、これはなんなの?

このへんの疑問に自分なりに調べ、まとめたものが本記事になります。

どうも、一般向けの解説では色々なことがふわっと説明されていてイメージが湧かない。しかし、専門書になるとそれはそれでいきなり数式やいろいろな前提知識を要求されるものが多いです。本記事では、その中間的なところ、専門知識までは要求しないが、一般にふわっとしている部分の解像度を一段上げたい、というところを目標にしています。

また、単にGPSの原理に留まらず、その基礎にある数学や工学の面白さ、というのも伝えたいことの一つです。そのために、敢えて蛇足なるような補足解説も入れました。

なお、私も9月くらいに思い立って付け焼き刃でこの記事書いてます。可能な限り嘘は書かないように書いたつもりですが、不正確なところは広い心で流しつつ、明らかに間違ってるところがあったらコメントなどで優しく指摘してもらえると幸いです。

本記事の内容

まず、GPSの衛星がどのような電波を出しているかを解説します。次に、測位の最も基本的な方法であるコード測位の仕組み、主にGPS衛星の電波の遅延時間をどのように計測するか?というところを詳しく解説します。

その後、cm級の測位を行うための搬送波を用いた測位の手法について説明します。搬送波測位測位の手法としては、RTKが代表的ですが、日本の準天頂衛星システム(QZSS、みちびき)から配信されるセンチメートル級補強信号を用いた方法なども解説します。

なお、衛星測位システムは一般名称としてはGNSSといい、米国が運用しているシステムの名前がGPSというわけですが、本記事では基本的に米国GPSの仕様に準拠した話が中心になりますので、基本的にGPSで通します。

寄り道知識:搬送波と変調の話

いきなり脱線というかGPSから離れた知識で恐縮ですが、変調の話をさせてください。

ある信号、例えば音声信号を電波で遠くに送りたいとします。人間の可聴域はだいたい20Hz-20kHzくらいとされています。この周波数の信号をこのまま電波で送れるかというと、いろいろと不都合があります。

一つは混信です。みんなが同じ周波数帯を使ってしまうと混信するか、一人ずつ送受信するかとなってしまって都合が悪いです。

もう一つは、電波というのは(あるいは「波」とか「振動」と一般化してもいいかも)、周波数によってアンテナの大きさとか、伝搬距離とか、回り込みのしやすさとか、色々な特徴があります。よって、目的に応じて都合のいい周波数(それは送りたい信号の周波数とは大概異なる)の電波を使いたいわけです。

そこで、変調という技術を使います。変調とは、送りたい信号(今の例では音声)を、より高い周波数の波(搬送波)に乗せる技術です。

例えば、AMラジオは1MHz前後、FMラジオは70-90MHzくらいを使って音声信号を運んでいます。「乗せる」とふわっとした言い方をしましたが、具体的には下図のように、AMなら搬送波の振幅を、FMなら周波数を変化させることで、信号を表現します。(AM:Ampritude modulation:振幅変調、FM:Frequency Modulation:周波数変調)

AM変調とFM変調(wikipediaから)


また、そのような変調された信号を受信して、元の信号を取り出すことを復調とか検波とかいいます。どうやって取り出すか?というところまでは説明しきれないのですが、とりあえずはそういう技術があるものと思っておいてください。

上記のAMやFMはアナログ信号の変調ですが、GPSの信号はデジタル信号です。変調の名前としてはBPSKといって、図のように、波形が上下反転するような変調をします。


wikipediaから転載。BPSKは上の方にあたる。

GPSの電波に含まれるもの

やっとGPSの話です。GPS衛星はいくつかの周波数で電波を出していて、その周波数帯にはL1、L2、L5とか名前がついています。さらにそれぞれに民生用だったり軍用だったりいろいろな信号が乗っていて、それらを合わせてL1C/AとかL2Pとかいう呼び方がされます。

民生用の受信機では基本的にL1 C/Aという信号を使うので、ここではL1 C/Aについて説明します。(高価な受信機だとL2やL5の周波数も受信できます。基本的な原理はL1 C/Aと同じようなものだと思うのですが、調査不足)

前節で搬送波に送りたい信号を乗せる、という話をしましたが、これがGPSでは三階建てになっています。
航法メッセージをC/Aコードに乗せて、更にそれを搬送波に乗せています。まずはそれぞれどんなものが見ていきましょう。

航法メッセージ

航法メッセージには、衛星の軌道情報、電離層パラメータ、GPS時計の誤差補正、衛星の健康状態、時刻(秒単位)などの情報が含まれています。

これらは測位をするにあたっての前提となる情報です。衛星の位置が分からなければ、測位ができません。衛星の軌道なんて1度乗っちゃえば永遠に変わらなさそうなものですが、実際には色々な要因で軌道は微妙に変化し続けているため、都度その軌道情報を把握する必要があるそうです。

ビットレートは50bpsと非常に低速です。全ての情報を送信し終わるまでに12.5分かかります。一部のGPS機器でコールドスタート時は10分程度開けた場所で…等と説明書に書いてあったのはこの情報を一通り受信するためです。

しかし、航法メッセージは測位の前提情報としては必要ですが、実は測位自体には使っていません。情報さえあればいいので、なにもこんな低速でGPS衛星から受信しなくたって、携帯電話回線があれば、そっちから取れば一瞬です。スマホや、スマホと接続できるGPS機器の測位開始が早いのはこのためです。

ちなみに、航法メッセージにはエフェメリスアルマナックという2種類の情報が入っています。エフェメリスは、信号を送信している衛星自身についての精密な軌道情報。アルマナックは自分以外の衛星の概略軌道情報です。エフェメリスは30秒周期、アルマナックは12.5分周期で送信されています。
なんでほかの衛星の情報まで送信するかというと、受信機の周辺にだいたいどの衛星が飛んでいるのか?という情報がないと、どの衛星の電波を受信しようとすればいいかが分からないからです。
(参考:https://qzss.go.jp/overview/column/diagram_170613.html

C/Aコード

C/Aコードは、1023bitの疑似乱数列で、レートは1.023MHzです。乱数と言っても、値は衛星ごとに固定で、1023bitの数列を1ms周期で繰り返し送信しています。また、この乱数列は公開されています。

基本的な測位に使うのはこのC/Aコードです。受信機は衛星から送られてきたこのコードを見て、遅延時間を測定し、衛星との距離を求めています。

ちなみにC/Aは"Coarse/Acuisition"、粗捕捉の意味。軍用のPコード(P=Precise)に対して粗い、という意味(だと思う)。

搬送波

変調と搬送波の項で説明した搬送波です。周波数は1575.42 MHz。先述のように、搬送波は本来信号を運ぶための乗り物です。しかしながら高精度測位ではこの搬送波も測位に使います

L1 C/Aの構成。各信号で横軸のスケールが全く違うことに注意。

どうやって距離を測るのか?~コード測位の仕組み

上述の通り、GPSによる測位の基本はC/Aコードによる測位です。まずはこの測位の方法を見てみましょう。

相関係数の話

遅延時間を調べるために、相関係数というものを使います。
相関係数の計算を言葉や数式で説明するとむしろややこしくなるし面倒なんで、図を見てください。(面倒なので細かい説明は省略します。計算の定義としてあまり正確じゃないかもなので、ちゃんと勉強したい人は注意)

2つの信号A,Bの相関係数の求め方(最後に平均をとってるけど、合計でもいい。"1"と"-1"以外の数値が出てくる場合、分散で割ったりとか、掛け算の前に平均を引いたりとかいろいろある)

こんな感じで相関係数を計算します。まず、相関係数の性質のうち、話の本筋に関係するところ確認します。なお、ここでは分かりやすさのために信号値が"1"と"-1"しか出てこないものとして説明していますが、別にそれ以外の数値が出てきても計算の仕方や性質はだいたい同じです。

①全く同じ信号の相関係数は1になる
掛け算のところが1×1か(-1)×(-1)になるわけですから、相関係数が1になるのはご理解いただけると思います。

②全く相関のない数列同士の相関係数は0に収束する
「全く相関がない」、ということは、片方が"1"であるときにもう片方の信号が"1"か"-1"かは50%ずつなわけですから、掛け算の結果を合計すれば0に収束していくはずです。
(この話、厳密には、乱数の性質をちゃんと定義しないといけない…)

③同じ乱数列で時間をずらしながら相関係数を出すと、ズレが0の時は1、それ以外は0近くなる
これは図で描くと↓のような感じで計算します。(「元の信号」は6bitの数列の繰り返し)

自己相関関数の計算

既述の①から、遅延時間が0であれば全く同じ信号同士の比較なので相関係数が1、時間が1bit分以上ズレている場合、相互の相関が無くなるため②で述べたように相関係数は0に収束します。上の例では6bitしかないので0.3という値が出てしまっていますが、信号長が長くなれば、より0に近い値になります。(というかGPSで使用する疑似乱数列はこの性質がちゃんと出るように調整されている)。ちなみに同じ信号でこんな感じで時間を少しずつズラしながら相関係数を計算する関数を自己相関関数とかいいます。

C/Aコードによる遅延時間の測定

ずいぶん回りくどい説明が続きましたが、GPSの話に戻ります。GPS衛星がC/Aコードを送信する周期・タイミングは既知です。よって、上記③の性質を使って、受信したC/Aコードと受信機内部で生成したC/Aコードのレプリカとの相関を計算することによって、遅延時間を求めることができます。

下図はExcelで1023bitの乱数列を作って、20us遅延させた信号との相関係数をグラフにしたものです。20usのところにピークが立っているのが分かりますね。こんな感じの計算を受信機内部でやっています。

ピークは三角形になっていますが、この底辺の幅は1bitの幅の2倍です。時間でいうと約2us程度。光速から距離に換算すると約600mになります。
実際の受信機では、1bitの幅の1/100程度、すなわち数メートル程度の精度で距離を求めることができるようです。

相関係数による遅延時間の計測(ノイズ無しの場合)

ちなみにちょっと補足。C/Aコードは1ms周期で送信されています。1msというのは光速から距離に換算すると約300kmです。GPS衛星の高度は約20,000kmですので、全然距離が足りてません。計測した距離には300km周期の不確実性があるということです。しかし、300㎞も距離があるとほかの衛星との測位結果との関係から、有り得ない解は除去できるので実際の位置計算問題にはなりません。(ここが後述の搬送波測位での不確実性との違いですね)

雑音に埋もれた信号から遅延時間を計測する

え?なんでこんな面倒くさいことやってるかって?
もっと単純な形の信号で(1msに一回”1”になって他が0、みたいな信号とか)やったらダメなの?

これについて、明確に答えている文献は確認できなかったので、この疑似雑音を使う方式の一般的な特徴から自分なりの推測を書きます。(ので、嘘だったらごめんなさい)

一つはこの方式は雑音に強い、という特徴があります。GPSは高度20,000kmとわりと遠いところから電波を出しているので、それなりに減衰してノイズが混ざってしまいます。しかし、疑似乱数と外乱のノイズは(理想的には)相互に全く相関がないはずです。よって相関係数の計算では、ノイズが重畳していてもそれなりに正しく計算ができます。

実際に先ほどの例で、受信信号にC/Aコードの100倍の電力のノイズ(ガウス雑音)を加算した信号で同じ計算をしてみます。受信信号は波形だけを見ると全く判別不能ですが、相関係数を見るとしっかり20usのところにピークが立っているのが確認できます。まぁこの辺は雑音の特徴の仮定の仕方とかサンプリングレートとかによっても変わるので、お遊びだと思ってほしいのですが、何となく雑音にも強いというイメージをもっていただければと思います。

なお、実験に使ったExcelファイルはこちらに置いておくので、どういう計算をしているか見てみたい方はどうぞ。(クラウドだとうまく動かないのでダウンロードして遅延時間やノイズ量を変えて遊んでみてください)
https://www.dropbox.com/scl/fi/p8ayr5nyrkszyfiunxtl8/GPS.xlsx?rlkey=zkcoyapkvihal1p5qjnhmr2hg&dl=0

相関係数による遅延時間の計算(ノイズ有り)

もう一つの特徴は、同じ周波数を異なる衛星で共有できるということです。
GPS衛星からの電波は当然どの衛星からの電波か区別できないといけません。みんなが同じ周波数を使った場合、普通は混信してしまいます。しかし、このスペクトラム拡散通信の場合、C/Aコードの疑似乱数列を衛星ごとに変えることによって、どの衛星からの電波か区別ができます。異なる疑似乱数列同士の相関係数はほぼ0ですから、先の雑音の話と同じく、同じ周波数を使用しても互いに混信しません。

いや、テレビやラジオみたいに衛星ごとに周波数変えればよくね?と思われるかもしれません。実際ロシアのGLONASSはそういう方式を採用していたようです。しかし、その場合受信機は複数の周波数に対応しなければいけないし、周波数同士混信しないように間隔にマージンを取って設定しなければいけないので、周波数利用効率が悪くなってしまいます。

そんなこんなで、いろいろと利点があって、この疑似乱数を使う方式がGPSでは採用されているようです。ちなみにGLONASSも比較的新しいタイプはGPSと同じ方式になっているようです。

余談ですが、このように数列を使って同じ周波数で複数の通信を同時に行う方式のことを符号分割多重アクセス(Code Division Multiple Access、CDMA)とか言ったりして、GPS以外にも携帯電話の通信とかにも使われるようです。

誤差はなぜ生じるのか

このあとは、高精度測位の話をしたいと思うのですが、その前にまず、GPSの誤差はなぜ生じるのか?について確認したいと思います。

主な誤差要因を下表にまとめます。(出典はトランジスタ技術22年1月号)

$$
\begin{array}{|c|c|c|c|} \hline
起因&誤差要因& 大きさ & 時間的相関 \\ \hline
衛星&衛星時計誤差 & 2~数\text{m} & 15分 \\ \hline
衛星&衛星軌道誤差 & 2~数\text{m} & 15分 \\ \hline
大気&電離圏遅延誤差&2~30\text{m}&15分\\ \hline
大気&対流圏遅延誤差&2.3~25\text{m}&30分\\ \hline
受信機&マルチパス&0.5~15\text{m}&数分\\ \hline
受信機&受信機熱雑音&0.25~0.5\text{m}&なし\\ \hline
\end{array}
$$

衛星時計・軌道誤差

GPS衛星の時計や軌道の補正情報は、航法メッセージの中に含まれているのですが、精密な測量を行うには不十分で、後述の高精度単独測位(PPP)ではより精密な補正情報を利用します。

電離層遅延・対流圏遅延

電離層は高度60~70kmにあり、太陽光により電離した電子によって遅延が発生します。電離層での遅延量は周波数によって異なるという特徴があるため、多周波を受信できる場合にはそれらを比較することで誤差を低減することができます。
また、対流圏では屈折により遅延が発生します。こちらは周波数による相関はありません。

電離層・対流圏ともに、大気の状態によって遅延量が変わるため、時間的や地域による違いも大きいです。よって一律のパラメータで補正することが難しいため、後述の高精度測位ではいろいろと工夫をして排除しています。

補正手段の分類

高精度測位のための手段としては、大きく分けて
①搬送波を使って測位を行う
②基準局での受信結果を使って誤差の補正を行う
という2つの手法があり、両方を使うものもあります。

これらを使用した代表的なサービス名と大まかな精度を下表に記します:

$$
\begin{array}{|c|c|c|} \hline
分類&コード測位& 搬送波測位 \\ \hline
単独測位&(普通の測位) & \text{CLAS} ,\text{ MADOCA} \\
              &数\text{m}&\text{cm級}\\ \hline
相対測位&\text{SBAS,SLAS}& \text{RTK} \\
              &\text{1-3m程度}&\text{cm級}\\ \hline
\end{array}
$$

以下でその仕組みを詳しく見ていきます。

ディファレンシャルGPS(SBAS、SLASなど)

以前から安価なGPSも含めて広く使用されている補正がDGPSです。これは、位置の分かっている基準局で測位を行い、その誤差情報を移動局に伝達することで、精度を改善しよう、という技術です。

現在広く使われているものとして、SBASがあります。これは、静止衛星から誤差の補正情報を配信する仕組みで、各国で似たような仕組みが整備されています。日本では、もともとMSASという名前で、気象衛星ひまわりに相乗りする形でサービスが提供されていましたが、2020年からはみちびき3号に引き継がれています。
(静止衛星を使うのは地上と通信するのに都合がいいかららしい)

元々は航空機向けのサービスでしたが、安価なものを含めてほとんどのGPS受信機が対応しています。SBASの信号は、GPSの航法メッセージと似たような仕様で放送されているため、比較的安価に補正機能を使うことができるためです。

また、みちびきからはSLAS(Sub-meter Level Augmentation Service サブメータ級測位補強サービス)という補正信号も出しています。情報の仕様はSBASとは異なるらしいですが、精度としてのスペックはSBASとあまり変わらないようです。(調査不足)

この補正情報によって、誤差を1‐3m程度に抑えることができます。(ということになっていますが、実際のところやはり調査などで使うともっとズレる印象があります。スペック通りの測位ができるのは理想条件なので…)
逆にいうと、この辺がコード測位の限界で、これ以上の精度を求めるには搬送波を使った測位が必要になります。

高精度測位の仕組み~搬送波測位

搬送波=目盛りは細かいが数字の書いてない定規

先述のとおり、C/Aコードを使った基本の測位では、補正情報を使っても1m程度が限界です。衛星や大気に起因する誤差は各種補正により排除することができますが、衛星との距離を測定する定規にあたるC/Aコードは1bitが1/1.023=0.97μs、距離にして300mです。距離の計測は波長の1/100~1/1000程度が限界であるため、衛星との距離を測る精度は数m程度になります。

そこで、搬送波に注目します。搬送波はC/Aコードの1520倍の1575.42MHzの波で、波長は約19cmです。よって搬送波を定規として使えば衛星との距離の計測精度がmm単位まで向上するじゃないか、というのが高精度測位の基本的なアイデアです。

ただし、搬送波にはC/Aコードのように「目印」が無いため、衛星から受信機までの間に波数がいくつあるのかが分かりません。分かるのは1波長の中のどの位置かという情報だけです(下図参照)。いわば目盛りは細かいが数字の書いていない定規みたいなもんです。

搬送波位相の計測と距離の関係。実際にはここに各種誤差要因が乗る。

ちなみに用語の補足説明で、「1波長(周期)の中のどの辺か」のことを「位相(phase)」と言います。位相は0~2πで表したり0~360°で表したり色々なのですが、今回は1波長を1として、0~1の値を取るものと思ってください。

(蛇足ながら、地図学や幾何学では「位相」という単語を英語のtopologyの訳として使っています。これは、「どことどこが繋がっているか」という関係性のことを言っています。例えば鉄道路線図は、駅の位置や線路の形状を無視して位相構造のみを表現した地図です。なんでphaseとtopologyが同じ単語になったのかは知りませんが…)

例えば、波長を19cmとして、観測した位相φが0.5、衛星と受信機までの間の波数Nが100だったら、19cm×100.5=1910cm、みたいな感じで衛星との距離が計算できるわけですが、N=99だったら1891cm、といった具合に、Nによって波長間隔の不確実性が発生します。これを整数アンビギュイティ(曖昧さ)といいます。この整数アンビギュイティをどう解決するか?が高精度測位のキモになります。逆にいえば、一度Nを確定させてしまえば、位相の変化だけを観測し続ければ、高精度測位を継続することができます。

ではどうやって整数アンビギュイティを解くのでしょうか?まず重要なのは、各種誤差要因を如何に排除するか、です。波長19cm間隔の曖昧さを解こうという話をしているのに、衛星や大気圏での誤差によってメートル単位のズレが生じていたら、到底これを解くことはできません。

RTK

搬送波を使った測位にはいくつかやり方があるのですが、まずはもっとも使われているRTKから説明します。

RTKでは、受信機(移動局)の近く(大体10㎞以内だとベストで100㎞くらいまでは何とかいけるらしい)に、座標の分かっている固定局を設け、誤差を相殺することで、各種誤差要因を排除しよう、という技術です。

いやそれさっきのSBASとかのDGPSと何が違うって?
違いは、搬送波をきっちり利用するための工夫です。詳しく見ていきましょう。

2重位相差によって誤差を相殺する

実は、RTKでは、衛星と受信機の間の距離を直接求めません。

基準局と移動局で計測した位相の差をとり(1重差)さらに別の衛星との間の1重差との差を取ります。これを「2重位相差」とよびます。

1重差を取ることで衛星の軌道とクロック、大気圏での誤差が相殺され、二重差を取ることで受信機のクロック誤差も相殺されます。

一重差の図


二重差の図

最終的に出てきた式が、衛星a,bとの間の二重位相差です。同じ計算を他の衛星との間でも行うと、衛星の数をnとすると、n-1本の二重位相差の式を得ることができます。

$${\Delta L^{**}_{**}}$$が最低3つ(つまり衛星4つ分)揃うと3次元で移動局の位置を特定することができる(すいません、この辺のちゃんとした計算はよくわかりませんでした)のですが、そのためには整数アンビギュイティNを求める必要があります。そこで使用されるのが、カルマンフィルタという技術です。

カルマンフィルタ

え~ここでまた話がそれて恐縮です。カルマンフィルタの中身まで解説する必要はあまりないのですが、せっかくなので概要を書かせてください。めんどくさかったら飛ばしてください。

カルマンフィルタはざっくりいうと、「誤差が含まれる観測結果を測定し続けることで、動的な対象の状態を推定する」技術です。アポロ計画で宇宙船の位置推定に使われたことで有名です。


カルマンフィルタの原理。あまりこういう図で説明してる資料はなかったので間違ってたらごめん

大まかな原理としては、
①推定した状態から観測結果を予測
②それを実際の観測結果と比較する
③比較した結果に応じて、推定した状態を更新する
といった感じです。

カルマンフィルタにより、誤差が含まれる観測結果からも、対象の状態を推定することができ、さらに推定した状態の実際の状態に対する誤差は時間とともに0に収束していくことが確率論的に期待されています。RTKの場合は、位置、速度、整数アンビギュイティを推定する状態変数としてカルマンフィルタを作るのが一般的なようです。

ちなみに、カルマンフィルタの特徴はRTK以外の測位でも有用であるため、通常のコード測位などの場合でもよく使われるようです。

整数アンビギュイティを解く

カルマンフィルタによって位置と整数アンビギュイティNを推定することができるのですが、カルマンフィルタは原理上Nを整数ではなく実数として扱います。

そのため、カルマンフィルタの出力に対して、さらにNを整数化するプロセスが必要です。そのためのアルゴリズムとしてLAMBDA法というものがあるそうです。が、よくわかりませんでした!ので名前だけの紹介でそういうもんがあると思っておいてください。

推定誤差が十分小さく、Nの整数を特定することができた解をFix解といいます。一方、まだ推定誤差が大きくNの整数を絞り切れていない状態をFloat解といいます。FIX解の状態になると、RTKは非常に高精度(cm級)を出すことができます。(一方、誤差の状態によっては間違った整数を推定してしまうことがあり、これをミスFixとか呼んだりします。)

一度Fix解を得てしまえば、そこから連続的に観測している限り、高精度を維持できるのですが、観測が途切れてしまうと、Float状態に戻ってしまったりします。

高精度測位のいろいろ

RTKは、基準局を設けることで各種誤差要因を相殺し、高精度を実現する手法でした。しかし、やはり基準局を用意するのは面倒くさいよよね、という点があり、これを改善するいろいろな手法が開発されています。

ネットワークRTK

基準局をある程度の密度で用意しておいて、それらの基準局の観測データからユーザーの直近に仮想基準局を作ることで、基準局から離れた位置でも高精度の測位をできるようにしよう、というのがネットワークRTKです。

色々方式があるようですが、もっとも一般的な方式では、ユーザーの概略位置をサーバーに送信→サーバーで仮想基準局の測位データを生成、送信→ユーザーで通常のRTKと同じ方法で測位。というやり方です。

後述のPPPなどに対する課題としては、受信局の位置をサーバーに伝達しなければならないため、双方向の通信が必須であること、ユーザーが増加するとそれに比例してサーバーの負荷も増大することです。

PPP、MADOCA

PPPとはPrecise Point Positioning 高精度単独測位の略で、基準局無しで高精度の測位をする技術です。

RTKでは、基準局を用意して各種誤差を相殺していましたが、PPPでは、各誤差がどの程度か、という情報を受信機側に配信することで、基準局無しでも搬送波を利用した測位を行います。

PPPは測量機器メーカーがいろいろと開発しているようなのですが、ここでは日本のQZSSから配信しているサービスMADOCAの場合を例として説明します。

MADOCAでは、衛星の精密な軌道、クロック誤差の情報を配信しています。電離層・対流圏の情報は含まれていないため、これは受信機側で何とかするしかありません。電離層遅延は2周波を受信することで誤差をキャンセルすることが可能です。対流圏遅延は周波数依存性がないため、モデルによって推定します。観測データから、受信機位置、搬送波位相バイアス、受信機クロック誤差、対流圏遅延をカルマンフィルタで推定する、というのが一般的なアルゴリズムであるようです。RTKの場合、受信機位置以外のパラメータは二重位相差でキャンセルされるため、推定する状態量がずいぶん増えていることになります。

精度としては、RTKには及びませんが20cm程度の精度が出るようです。ただし、問題は収束時間で、cm級の精度を出すには30分程度の時間が必要になるようです。(推定すべき状態量が多いため?)

次に説明するCLASと比べると、収束時間、精度に劣る代わりにサービスエリアが準天頂衛星システムが受信できる全地域で利用可能という利点があります。

PPP-RTK、CLAS

PPP-RTKは、PPPの長い収束時間という弱点を改良したものです。PPPで配信される衛星側の誤差に加えて、大気の誤差情報も配信することで、推定する状態量を減らし収束時間を改善します。

じゃあ最初から大気圏の情報も配信しろよ、という感じですが、衛星要因の誤差は全世界共通ですが、大気圏の誤差は地域依存性があるため、工夫をしないと対象地域の面積に比例して、配信する情報量が増大してしまうという課題がありました。特に、衛星からの配信の場合は帯域が限られるため、広い地域で利用可能な配信を行うことは困難です。

こちらもPPP同様、測量機器各社が開発した方式が色々あるようですが、ここでは、みちびきから配信されているCLAS(Centimeter Level Augmentation/センチメーター級測位補強サービス)を紹介します。

CLASは衛星の補正情報に加えて、日本国内の電子基準点の観測データを基に、電離層・対流圏の補正情報を生成して配信しています。配信では日本国内を12のエリアに分割し大まかな補正パラメータを生成し、さらに約230点のグリッドごとに細かい補正項を生成しています。このようなやり方で配信することで、単純に230点の補正情報を配信するよりも情報量を抑えることができます。

https://www.soumu.go.jp/main_content/000800171.pdfより

更に、変化が比較的速い衛星クロック誤差は5秒周期で、その他の補正データは30秒周期で配信することで、データ量を減らし、2000bpsという限られた帯域を有効利用しています。ちなみに、50km間隔で基準点を設けて配信することを想定すると、RTKの場合1Mbps程度の帯域が必要になるようで、いかに効率的になっているかがわかります。

受信機側の方式として、補正情報を観測データに直接適用して位置を求める方式と、内部で仮想基準局のデータを生成し、通常のRTKと同じアルゴリズムを使う方法があるようです。前者の方が性能はいいようですが、後者の方が汎用性があります。

通常のRTKと比べると精度や収束時間は若干劣りますが、数分程度でFixするため、携帯の電波が入らないエリアなどでは便利そうです。

(ちなみに、droggerにCLAS対応モデルが出たので、最近私も買ってみました。時間がなくて書けないのでレビューは追々…)

まとめ

GPSの測位の原理について、いろいろ調べてみました!
結果、よくわかりませんでした!
いかがでしたか?

ちゃんと知りたい方はいくつか参考文献を見てみてください!

参考文献

  • トランジスタ技術2022年1月号
    いちばん参考にしました。一番広く浅く書いてあるかな。

  • Interface 2022年3月号
    内容は上記トラ技と被ってる部分も多いですが、Pythonによる演習が用意されているので、手を動かして理解したい人にはいいかもしれないです。(私は結局やっていない)

  • トランジスタ技術2019年2月号
    22年1月号と被ってる部分も多いですが、違う説明の仕方を見たりするのも参考になるので。

  • トランジスタ技術2018年1月号
    本記事でうやむやにして書いていない、RTKで二重位相差から座標を求める計算式とかが書いてある。

  • 衛星測位入門 ―GNSS測位のしくみ―
    図書館で借りれたので読んでみた。最小二乗法の計算など、かなり具体的な計算についても解説されています。RTKについてはあっさりな解説。



この記事が気に入ったらサポートをしてみませんか?