【RTK2021】RTCM3フレームの抽出法学習<つかみどころがない規格>

ALESの契約用にRTCMを受信するシステムを作るのですが、RTCMを受信してから、2つのF9P MovinBaseへ同時配信しなければいけないので、RTCMの受信パケットをRTCMのフレームに分解してESP-NOWで送信する方式を検討してます。そのため、RTCMのフレームの抽出の仕方 ESP-NOWだと250byteMAXなのでパケット全部一挙に送信できない不便さがありますが、ESP-NOWで行くという方針なので手間をかけてます。
を調査しました。

●RTCM触りたくないのですが
 RTCM規格は、有料仕様書を所有している人しか判りませんし、情報を公開してはいけないことになっているので、仕様の詳細を公開している資料はWEBにはほとんどありません。RTCMという団体が閉鎖的でダサい規格を維持してます、あと10年ももたないのではと思ってますが。とりあえず、RTK機器はすべてRTCMで動いているので、使わざるを得ません。

●あちこちから教えていただいたRTCMの情報
国土地理院に、GNSS測量機器の解説資料をご紹介にあずかりました。
https://www.gsi.go.jp/common/000068240.pdf
このPDFをダウンロードして、78ページにフレーム構造の図がありました。

プリアンブル8ビットは、0xD3です。、実際受信してあるRTCMデータをみると

2列目が予約6bitと3列目が10bitで合わせて2バイトですが、2列目がゼロなら3列目の数字がメッセージのバイト数になります。全フレームバイト数は、プリアンブル+予約+メッセージ長+CRC=6バイト+メッセージバイト数(3列目数値)上表の場合は、3列目が0x91=hex2decして、145がメッセージ長で、+6バイトで全長151バイトです
確かに151例目の0x33で終わっていて、次のフレームの0xD3がきてました。
ここで注意するのは、フレームの中に0xD3が何個も登場することがあるからです。ですので、騙されないように
総フレームバイト数を計算して、フレームの最後のバイトを確認して次に0xD3がきているれば、その頭の0xD3が本物のプリアンブルだと決定できるので、面倒な手続きをふまないとRTCMデータフレームを抽出できません。

 

※注意
0xd3だけで検出しても、万一フレーム内のメッセージデータに0x3dという数値がでてくるとミスリードするので、ヘッダーの3バイトから全フレーム数を把握して、ひと塊として管理していくことが重要みたいです。

data[0]=0xd3 0xd3 プリアンブルで目印
data[1]=0x00 reserve6bitとメッセージデータ10bitの上位2bit
data[2]=0xYY メッセージデータ10bitの下位8ビット

メッセージデータ数は10bitなので、最大1023個あります。

■試しに上記アルゴリズムでプNTRIP受信プログラムに、フレーム分解機能を追加してみました。

■NITRIPからのRTCMをフレームに分解して表示するサンプルプログラム
通常のNTRIP受信プログラムに追加したものですので、NTRIP受信プログラムを
動作させたことがある方ならお使いいただけますが、初めての場合は、何もないシンプルなNTRIP受信プログラムから学習しはじめてください。こちらです

 GISTにアップしてあるので、M5AtomでM5StickC動作させてありますが、M5StickCでもM5Atomでも動作すると思います。
https://gist.github.com/dj1711572002/117354e2cbe66b181037c64de19d93db

 

 

 

 

 

カテゴリー: RTK

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です