RTKLIBからのEmlid Reach観測データ利用

category: Gnss
tags: Rtk Rtklib

現象

Emlid ReachはRTK測位のオールインワンパケージで、初期設定では自らがWi-Fiのアクセスポイントとなり、ブラウザ上でRTK設定のできる、使いやすい1周波数RTK受信機です。衛星群もGPS、QZSS、GLONASS、Galileo、BeiDouの複数を選択できます(ただしGLONASSとBeiDouはどちらか一方を選択)。そして2台のReachがあれば、一方をServerとして、他方をClientとして、TCP接続することによりマルチGNSS RTK測位が可能です。Reach同士であれば、設定した衛星群によるマルチGNSS RTKができました。

別のPCで測位結果を得ることも可能です。2台のReachをNTRIP ServerとしてNTRIP Casterの異なるマウントポイントに接続し、一方、RTKLIBをインストールした別のPCをNTRIP ClientとしてNTRIP Casterのそれらのマウントポイントに接続します。しかし、測位計算を行うと、RTKLIBの測位計算対象はGPSのみに限定されました。

測位計算対象はGPSのみ

この例において、RTK基準局と移動局との両方でBeiDouが利用可能なはずです。しかし、この測位計算でBeiDouは利用されていないことがわかります。Reachは内部にRTKLIBを用いていますので、この例でもBeiDouが利用できるはずです。何故、GPS以外の衛星が利用できないのか、わかりませんでした。

Reach上のRTK設定

Reachの「Base mode」画面で設定できるRTCM3 messagesはつぎの通りです。

メッセージ番号内容
1002GPS L1 code, phase, ambiguity, and CNR
1006Station coordinates and antenna height
1010GLONASS L1 code, phase, ambiguity, and CNR
1097Galileo MSM7
1107SBAS MSM7
1117QZSS MSM7
1127BeiDou MSM7

Emlid Reach base mode設定画面

CNR: carrier-to-noise power ratio (受信電波強度に比例する値)
MSM7: full pseudoranges, phase ranges, phase range rate and CNR (high resolution)

GPSとGLONASSについては昔ながらのRTK Observationを伝送しています。一方、Galileo、SBAS、QZSS、BeiDouについてはMSM7により観測データを伝送しています。RTK Observationと比較して、MSM7は多周波数の観測結果やドップラ周波数などのより多くの情報を伝送できます。GPSやGLONASSについてもMSM7が定義されています(メッセージ番号はそれぞれ1077と1087)。なぜ、GPSとGLONASSについて、MSM7を選択できないのでしょうか。 この画面はReach Viewバージョンv2.16.2のものですが、バージョンアップにより以前にはできたGPSとGLONASSのエフェメリス(着目衛星の軌道情報)伝送ができなくなっていました。

全ての衛星群を解析対象にする

Reachの測位チップu-blox NEO-M8Tのバイナリーデータにはこれらの情報を含むようです。そこで、RTCMメッセージ番号1002と1010の代わりに、それぞれ1077と1087を送信するようにします。Reach単体でもRTCM 3のメッセージ1077と1087を送信できるように、ソフトウェアを改変することも可能ですが、ここでは別のマイコンからReach内部もNEO-M8Tの情報を読み出すことにしました。

参考:RTCM3 Message Type

Reachにはsshによるシェルアクセスが可能です。そこでReachのシェルにログインして調べてみました。内部のNEO-M8Tのシリアルポートはnetcatによりポート番号2000に接続されていて、外部からこのポートにアクセス可能なことがわかりました。これは、第3者が測位モードを変更するなどのセキュリティホールになり得ますので、この方法は今後のReachのソフトウェアアップデートで利用できなくなる可能性があります。私の環境では、研究室ファイアウォールをあてにし、研究室メンバーを信頼できることを前提にしています。

別のマイコン(Raspberry Pi)にRTKLIBをソースコードからコンパイルして、そのマイコン上のプログラムstr2strによりReach内部のNEO-M8Tバイナリ観測データを取り出して、RTCM 3形式に変更したのちに、NTRIP Casterに転送することにしました。マイコン上に次のようなシェルファイルを作り実行することで、Reachで観測した全衛星を測位対象にできました。外部のRTKLIBでGPS以外の衛星が測位対象にならなかったのは、利用するメッセージタイプによるものでした。別のReachでも全衛星が測位対象になりました。

#!/bin/bash

if [ -e ./str2str ]; then
./str2str \
  -in tcpcli://[ReachのIPアドレス]:2000#ubx \
  -out ntrips://:[NTRIP Casterのパスワード]@[IPアドレス]/[マウントポイント]#rtcm3 \
  -msg "1005,1019(5),1020(5),1045(5),1046(5),1044(5),1077,1087,1097,1107,1117" \
  -p 34.44010565 132.41478259 233.057
fi

ReachのIPアドレス、NTRIP CasterのIPアドレス、パスワード、マウントポイント、アンテナ座標はご自分の環境に置き換えてください。このシェルファイルでは、アンテナ座標、GPS、GLONASS、Galileo、QZSS、BeiDouそれぞれのMSM7を送信する設定になっています。また、受信機が早く衛星群を見つけられるように、5秒に1回だけ、これらのエフェメリスを送信する設定になっています。