RTKを使用し高精度測位に挑戦してみよう！

##はじめに
こんにちは、AITOYA株式会社の小川です！

u-centerで位置情報を取得してみよう！の連載2回目です！
前回は、評価ボードのセットアップ、u-centerのインストール、単体測位を行い、一通り測定ができるところまで挑戦しました。
今回は__RTK（アール・ティー・ケー／Real Time Kinematic）__という方法を使用して、超高精度に位置測位を行ってみましょう。

##GNSSの仕組み
……と、その前に一旦__GNSS（ジー・エヌ・エス・エス）__の仕組みを勉強しましょう！
そもそもGPS等の位置測位はどういう仕組で動いているのでしょうか？
厳密に言うと、一般的に衛星を使った位置情報測位のことを__GPS__と呼ぶことが多いですが、__GPS__は__Global Positioning System__の略で、アメリカが打ち上げた軍事衛星を用いて行う位置測位のみを指します。
__GPS__以外に__QZSS__（日本）、__GLONASS__（ロシア）、__Galileo__（EU）等の衛星が存在し、それらを総称して__GNSS(Global Navigation Satellite System）、日本語では全球測位衛星システム__と呼称します。
GNSSは複数の衛星から送られてくる時間情報を利用して現在地点を導き出す仕組みになっており、次の三つの要素で構成されています。

1. __GNSS衛星（スペース・セグメント）__　受信機に対して時間信号を発信する
2. __地上管制（コントロール・セグメント）__　衛星を監視したり制御したりと、衛星の時刻や軌道が許容範囲を超えないように保守を行う
3. __GNSS受信機（ユーザー・セグメント）__　衛星から時間信号を受信する

![cont001-002-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700771/db6788e2-fc43-c89e-0101-0cc0d14b7e95.png)

衛星は約2万km上空の六つの軌道に4基以上の衛星が配備されており、約12時間周期で地球を周回しています。
受信機は3つ以上の衛星（上空の衛星の位置は既知であると仮定しています）より発信された時間の信号を受信して、その信号を受信した時刻との差で衛星までの距離を算出します。
（距離＝時間×速さなので、時間差及び信号の速度が分かれば、それぞれの衛星からの距離がわかります。）
そして、3つの衛星からの距離を測ることで受信機の場所を特定することが可能になる、という仕組みになっています！これは三点測位といわれるロジックを使っており、特定の3つ以上の地点から、対象物までの距離が判明することで、その場所も確定するといったものです。
これは屋内におけるBluetooth Beaconなども同じ仕組みを使っています！

しかし、3つの衛星からの距離を計算したとしても、正確に現在の位置情報を算出することは難しいとされています（衛星の高さは地球から約2万km、それに対して1m単位とかで位置情報を取得しようとしているのだから、当たり前と言われたらそうですよね）。原因として、受信側の時計が0.01秒単位のズレていたり、都市部や山間部ではビルなどに電波が遮られたり反射したりしてしまうことが挙げられます。また、上空にある大気圏の影響や、衛星自体が想定しているルートから微妙にずれてしまうことによる誤差も存在します。本当に細かいズレが重なって、測定地点では少し大きなズレになってしまいます。
![cont001-002-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700771/fa7b710b-5c8e-4acf-25e6-717d9cc2b372.png)

##RTKの仕組み
そこで今回使用するのが、RTKという仕組みです！ RTKは__基準局（固定されていて、位置が確定しているもの）__と__移動局（測位したい対象）__の2つから構成され、それらをネットワークで接続し位置を割り出します。
（移動する基準局というものも例外的に存在します）
![cont001-002-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700771/c777d8a5-5a36-bf7b-e019-6dba5b3ce054.png)

今回は__u-center+WindowsPC+Wi-Fi__を使用し基準局に接続します。
ZED-F9Pを使用したローカルエリア__RTKが高精度・高速な理由は、大きく分けて2つ__あります！

1つ目の理由として、__周波数の違う電波を受信して、それの差を用いて精度を向上させている__ことが挙げられます。
衛星からは複数の周波数帯域の信号が送信されており、周波数の違いを使用して信号のズレを解消することが可能になります。
具体的には__L1信号（1575.42MHz）とL2信号（1176.45MHz）を受信__し、__周波数の違いから遅延量の差を読み取り、2つの電波の到着時間を比較することで遅延量を補正する__ことが可能になる、という仕組みです。
つまり、ある一つの地点から異なる周波数の電波を2つ出すことによって、それぞれのズレを相殺することが出来るようになるということです。ZED-F9Pはこの機能が使えるため、高精度な信号取得が可能になります。
![cont001-002-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700771/09d93270-dccd-10f5-1002-a8645fc30205.png)

2つ目の理由として、__基準局を基点とした測定をすることにより、精度を向上させている__ことが挙げられます。
基準局の位置はmm単位で確定している前提のため、仮に基準局側で測位した地点が確定している地点とズレていたら、そのズレは移動局側にも発生している可能性が高い、というロジックでズレを消去しているのですね。RTKにネットワークが必要なのもこれが大きな理由で、__常に基準局のズレ情報を移動局側にも送ってもらうことで、高精度な測位が可能__となるというわけです！
![cont001-002-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700771/ec96cd8a-c658-9159-d851-afc429b9c197.png)

こちらの機能はDGNSS（ディファレンシャル GNSS）という方式でも使用されていますが、前述した周波数の違う信号から導かれた情報と組み合わせることで、より高速・高精度な位置測位が可能になるというわけですね！
余談ですが、基準局と移動局は約20kmまで離れていても問題ないため、仮に一つの街に一つ基準局があれば街全域でローカルエリアRTKが使用可能になります。
20kmというのはあくまで目安で、基準局と移動局両方が同じ衛星からの信号を取得できない限りこの機能は使用できません。
また、自分で基準局を用意することももちろん可能なのですが、
有志が情報を公開している、多くの「善意の基準局」があるため、そちらを使用する方が手軽です！
余談ですが、基準局と移動局は約20kmまで離れていても問題ないため、仮に一つの街に一つ基準局があれば街全域でローカルエリアRTKが使用可能になります。また、自分で基準局を用意することももちろん可能なのですが、有志が情報を公開している、__多くの「善意の基準局」がある__ため、そちらを使用する方が手軽です！

<a href="http://rtk.silentsystem.jp/" target="blank">善意の基準局</a>

##RTKを使用して位置情報を取得してみよう！
というわけで、前置きが非常に長くなってしまいましたが、今回はRTKという測位方法を使用して、迅速かつ正確に位置情報を取得してみたいと思います。

__今回は東京都内で使用することを前提__とし、全国の技術者に愛されている「トランジスタ技術」を発行しているCQ出版社の基準局を使用します。
メニューバーの__Receiver→NTRIP Client__を選択します。各項目には、下記のように入力します（2020年4月15日現在のものです、今後設定等が変更になる可能性があるので、善意の基準局掲示板にて最新の情報を確認するようにしてください）。

+ NTRIP：160.16.134.72
+ Port：80
+ MountPoint：CQ-F9P
+ User-ID：guest
+ Password：guest
![cont001-002-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700771/795fee88-9b50-a32b-21f7-c919f49706dd.png)

以上の情報を入力すると、__画面下のNTRIP Clientのところに、IPアドレスと接続を示すインジゲータが表示される__はずです。
__緑色のインジゲータになってれば接続できている証__です。
さて、ここまで設定が完了するとRTKを使用した測位が始まります。

下記の表示を確認してみてください。
![cont001-002-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700771/7685a395-7eb7-007e-0f44-9c5416f56828.png)

FIXになっていたら正確に位置情報が取得できている状態です。FLOATであればまだ正確に位置情報が取得できていません（ただし1m程度の誤差範囲に収まる）。


##さいごに
今回はRTKという方法を用いて、高精度・高速な測位を試してみました。

当社は、cm級位置情報測位デバイスの「iChidori（いちどり）」シリーズを始めとした、位置情報ソリューションをお客様に提供している企業です。 製品の説明はこちらをご覧ください！→ <a href="https://www.aitoya.com/#products" target="blank">iChidori</a>
![cont001-002-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700771/c6ca161b-704f-4e32-40dc-27fc2198b855.jpeg)

本記事は、AITOYA株式会社HPに掲載している内容と同一のものです。→<a href="https://www.aitoya.com/" target="blank">AITOYA株式会社HP</a>