Allystar HD9310オプションCを用いたみちびきCLAS補強情報抽出
Allystar HD9310オプションCは、みちびきの送信する補強信号のCLASまたはMADOCAのいずれかの情報を受信できます。これを使って、みちびき3号機が放送する新しいCLAS情報であるサブタイプ12メッセージを確認しました。
Allystar HD9310オプションCは、みちびき1号機から4号機までのCLAS情報をまとめてシリアルポートに出力します。新しいサブタイプ12を含むCLAS情報は、現在は試験的にみちびき3号機のみから放送されていますので、Pythonプログラムでみちびき3号機のPRN(pseudo random noise、衛星を識別するための番号)199のみを抽出するプログラムを作成しました。
#!/usr/bin/python3
# ref: https://www.thecombineforum.com/threads/how-to-use-zed-f9p-as-a-base-station-for-trimble.331721/
import sys
while True:
data = sys.stdin.buffer.read(1)
if (data != b'\xf1'): continue
data = sys.stdin.buffer.read(1)
if (data != b'\xd9'): continue
data = sys.stdin.buffer.read(1)
if (data != b'\x02'): continue
data = sys.stdin.buffer.read(1)
if (data != b'\x10'): continue
len_palyload = sys.stdin.buffer.read(2)
svn = sys.stdin.buffer.read(2)
freqid = sys.stdin.buffer.read(1)
len_data = sys.stdin.buffer.read(1)
i_len_data = int.from_bytes (len_data, byteorder='little') - 2
gps_week = sys.stdin.buffer.read(2)
gps_time = sys.stdin.buffer.read(4)
snr = sys.stdin.buffer.read(1)
flag = sys.stdin.buffer.read(1)
data = sys.stdin.buffer.read(i_len_data * 4)
checksum = sys.stdin.buffer.read(2)
i_svn = int.from_bytes (svn, byteorder='little')
i_gps_week = int.from_bytes (gps_week, byteorder='big')
i_gps_time = int.from_bytes (gps_time, byteorder='big') // 1000
i_snr = int.from_bytes (snr, byteorder='big')
print ("prn={} GPSW={} GPST={} SNR={}".format(i_svn-700, i_gps_week, i_gps_time, i_snr), file=sys.stderr)
if (i_svn-700 == 199): sys.stdout.buffer.write(data)
sys.stdout.flush()
固定ワード0xf1 0xd9 0x02 0x10
を見つけたら、HD9310の仕様書に従い情報をデコードして、PRN 199のCLAS補強情報のペイロードを取り出すプログラムです。このファイルを、例えばhd9310.py
という名前で保存します。マイコンRaspberry PiのUSBポートにHD9310を接続して(認識されたポートは/dev/ttyUSB3)、socat /dev/ttyUSB3,b115200,raw - | ./hd9310.py > 20200923a.l6
とすると、ほぼリアルタイムに受信したみちびきのPRN番号と信号強度が表示され、それと同時にファイル20200923a.l6
にみちびき3号機のCLAS補強情報が保存されます。
# socat /dev/ttyUSB3,b115200,raw - | ./hd9310.py > 20200923a.l6
...
prn=193 GPSW=2124 GPST=262821 SNR=0
prn=194 GPSW=2124 GPST=262822 SNR=37
prn=195 GPSW=2124 GPST=262822 SNR=43
prn=199 GPSW=2124 GPST=262822 SNR=42
prn=193 GPSW=2124 GPST=262822 SNR=0
prn=194 GPSW=2124 GPST=262823 SNR=37
prn=195 GPSW=2124 GPST=262823 SNR=43
prn=199 GPSW=2124 GPST=262823 SNR=42
prn=193 GPSW=2124 GPST=262823 SNR=0
prn=194 GPSW=2124 GPST=262824 SNR=37
prn=195 GPSW=2124 GPST=262824 SNR=43
prn=199 GPSW=2124 GPST=262824 SNR=41
prn=193 GPSW=2124 GPST=262824 SNR=0
prn=194 GPSW=2124 GPST=262825 SNR=37
prn=195 GPSW=2124 GPST=262825 SNR=43
prn=199 GPSW=2124 GPST=262825 SNR=42
prn=193 GPSW=2124 GPST=262825 SNR=0
prn=194 GPSW=2124 GPST=262826 SNR=37
prn=195 GPSW=2124 GPST=262826 SNR=43
prn=199 GPSW=2124 GPST=262826 SNR=41
...
GPSW
はGPS(Global Positioning System)の週番号を表し、1980年1月6日世界協定時(UTC: Coordinated Universal Time)0時0分からその時までの週数を、またGPST
はGPS時刻を表し、閏秒を含まないその年の1月1日からその時までの秒数です。
このようにして生成したL6ファイルを、CLASLIBのssr2obs
コマンドのダンプオプションを使ってダンプしました。
$ ./ssr2obs -k obs.conf -dump 20200923a.l6
$ ls parse_cssr_type*
parse_cssr_type1.csv parse_cssr_type2.csv parse_cssr_type6.csv
parse_cssr_type11.csv parse_cssr_type3.csv parse_cssr_type7.csv
parse_cssr_type12_grid.csv parse_cssr_type4.csv parse_cssr_type8.csv
parse_cssr_type12_stec.csv parse_cssr_type5.csv parse_cssr_type9.csv
$
設定ファイルobs.conf
の内容や、コマンドssr2obs
のコンパイル方法は準天頂衛星みちびきの測位ライブラリCLASLIBの利用(その3:ssr2obsによるVRS-RTK測位)をご参照ください。
この中のparse_cssr_type12_grid.csv
は次の通りです。
Message Number,Message Sub Type ID,GNSS Epoch Time 1s,SSR Update Interval,Multiple Message Indicator,IOD SSR,Compact Network ID,Network SV Mask,No. of Grids,[Grid Number],Troposphere Hydro-Static Vertical Delay,Troposphere Wet Vertical Delay,[GNSS ID],[Satellite Number],STEC Residual Correction[TECU]
4073, 12, 259170, 5, 0, 8, 12, 0x1f7eb, 2, 1, 2.560, 0.264, 0, 3, 33.2300
,,,,,,,,,,,, 0, 4, 31.0300
,,,,,,,,,,,, 0, 9, 37.1700
,,,,,,,,,,,, 0, 17, 20.9600
,,,,,,,,,,,, 0, 19, 18.6000
,,,,,,,,,,,, 0, 28, 19.4600
,,,,,,,,,,,, 2, 4, 19.8400
,,,,,,,,,,,, 2, 11, 16.6600
,,,,,,,,,,,, 2, 12, 9.8300
,,,,,,,,,,,, 2, 19, 16.2700
,,,,,,,,,,,, 2, 24, 76.1100
,,,,,,,,,,,, 2, 33, 13.8900
,,,,,,,,,,,, 4, 195, 19.9400
,,,,,,,,,,,, 4, 199, 8.3500
,,,,,,,,, 2, 2.556, 0.260, 0, 3, 33.0700
,,,,,,,,,,,, 0, 4, 31.2700
,,,,,,,,,,,, 0, 9, 37.2900
,,,,,,,,,,,, 0, 17, 20.3600
,,,,,,,,,,,, 0, 19, 18.2400
,,,,,,,,,,,, 0, 28, 18.7400
,,,,,,,,,,,, 2, 4, 19.3200
,,,,,,,,,,,, 2, 11, 15.9400
,,,,,,,,,,,, 2, 12, 9.6300
,,,,,,,,,,,, 2, 19, 16.0700
,,,,,,,,,,,, 2, 24, 76.2300
,,,,,,,,,,,, 2, 33, 13.8100
,,,,,,,,,,,, 4, 195, 19.8600
,,,,,,,,,,,, 4, 199, 7.9100
4073, 12, 259170, 5, 0, 8, 2, 0x1b5f7, 11, 1, 2.656, 0.272, 0, 3, 22.4400
,,,,,,,,,,,, 0, 4, 21.8000
,,,,,,,,,,,, 0, 17, 8.2500
,,,,,,,,,,,, 0, 19, 5.5400
...
サブタイプ12メッセージの一部が復号できました。いつか、RTKLIBを用いて、リアルタイムでCLASを利用できたら楽しいだろうと想像しています。
みちびき1号機から4号機までのそれぞれのリアルタイムCLAS補強情報をNTRIP Casterに転送したら、自宅でもプログラム開発ができ、さらに、他の方々のCLAS利用プログラム開発にも役立つと思いますが、…いけないものでしょうかね。
関連記事
- Allystar HD9310の新評価基板 14th October 2020
- Allystar HD9310ファームウェアのアップデート 22nd June 2020
- Allystar HD9310の実験 22nd November 2019