【RTK21】MovingBase1Base-3Roverでの測量実験その1<モニタPgm作成>

空屋になっている実家を有効活用するために、駐車スペースを作る工事をすることになった。
そこで、駐車スペースの測量をして図面をおこしてレイアウトを設計する準備をしてます。
●実家の測量その1
測量の知識は全くないのですが、本ブログの読者様で測量関係者様が多いので、お話しをお聞きすると、私などの扱っている精度と桁違いの高精度で管理されています。地盤のわずかなずれとか木の根っこの影響など、さすがにプロ級の精度管理は違うなと感じてます。今回は、工事をいれるための、実家の駐車スペースの測量というライトDutyな測量なので、自己流でトライすることにしました。アンテナの設置ですが地面にべた置きが位置精度的には都合がいいのですが、マルチパスの影響がひどくてNGでしたので、三脚を使うことにしました。
家の前で三脚を使えばMovingBase1cm精度は可能でした。地面ではNGでした。

三脚を使った場合、アンテナ位置と地面位置の合わせは、建築用の紡錘型の錘をぶら下げて位置合わせをすることにしました。
※2021年10月12日追記 実際に測量してみた結果 使い勝手NGでしたので、新たなDIY測量システム作りました。
1人で4個のアンテナを管理するのが大変で、アンテナ線も交錯して、つまずいてしまうとか、不具合が多発しました。
さらに、家屋から2m以内にアンテナを設置すると極端に精度がおちる現象があって、カメラ三脚では、ダメでもっと背の高いアンテナポールが必要なことがわかりました。
そこで、本記事の1Base3Roverをやめて、1Base1Roverに変更して、シンプルで1タクト時間が数分で済むというコンセプトで
新たなシステムを作成しました。最新のDIY測量システムはこちらの記事です。

【RTK21】M5Stick付アンテナポール作った<DIY土地測量>

●MovingBase1Base3Roverのメリット
①精度良い
Alesとか善意の基準局からRTCM3を受信して、絶対位置を測定するより、MovingBaseを使ったほうが相対位置精度が良い実験結果をもとに、
②3点同時測定
3Roverを使って、Base含めて四辺形を同時測定できるので、その場で、3次元の位置関係が把握できて具合が良いのではないかと考えました。1対だけで測定して3点を測定するより、同時に3点を測定してその場で位置関係を変えながら、車のサイズの四角をどうレイアウトすれば駐車スペースに収まるかが実地で設計できるので、測量というよりは現地設計ツールという使い方です。

●SimpleRTK2B x2個とSimpleRTK2B  lite x2個で組んだ
①3Rover BOX
3RoverをSimpleRTK2B2枚を重ねて、SimpleRTK2B liteをXbee用USBシリアル変換基板の載せて 透明容器に収納しました。アンテナ3本、USB3本、BaseからのRTCM信号入力1本(内部で3分岐)と計7本分で穴だらけの容器となりました。

②Base BOX
SimpleRTK2B liteにWifi NTRIP Masterを載せた基板を収納してあります。
WiFi NTRIP MasterにはESP32が乗っているので、F9PとESP32の電流負荷
大きいので、USBの5Vから3.3Vを作るために800mAの3端子を使ってます。
電源線も1A以上流せる太い線を使ってます。WiFi NTRIP Masterを載せる普通電源線だと電圧降下で動作不良になるので、電圧降下と電源容量に注意が必要です。

③RTCM信号線
MovingBaseのBase-Rover間のRTCM通信は、高速でmsec単位での管理が必要です。無線化にトライしたのですが、あえなく断念したのもパケットにまとめる時間遅延でNGとなったからです。詳細はこちらの記事です
上記理由で、有線接続で、単純にBaseのシリアル1ポートのTXから出た線3分岐して、Roverのシリアルポート2のRXに接続しているだけです。ノイズが怖いのでシールド線でシールドを片側GND接続してあります。スキー計測時には線が1m以上になるので、460800bpsで1m以上が無事送信できるかが課題となりそうです。

 

●モニタープログラムの内容

gistにvb.netのコードアップしてあります。
https://gist.github.com/dj1711572002/82779ce58006b41e9fd5416fb5f11aca
Data grid view 2個 Button4個 TextBox4個 RadioButton3個 CheckBox2個
CombBox1個(シリアルポート数確認用)

1:測量用サンプリング方法 スキー解析用だとリアルタイムに全CH同時サンプリングを行うのですが、
今回は、時間制約がないので、1CH毎に精度OKになるまでサンプリングして結果として、平均値と標準偏差を採用する測定方法としました。
VisualBasicの基本ププログラムは、1CHシリアル受信したデータをDataGridViewへログするプログラムを改造しました。
基本プログラムの解説
2:CH切り替え SerialPort1,2,3の接続をComboBOx1で確認したら、OPENボタンを押して
3個のシリアルポートをOPENします。割り込み関数を3個用意してありますが、出力は同じ関数で受信するようにして、1回で1ポートしか受信しない構成になってます。選択はラジオボタン3個を選択します。
CH番号とポート番号の組み合わせはdgv1の0行目にCOM番号を3個記入するセルを用意してあるので、ComboBox1のCOM番号を入力します。
OPEN:Sub Button1Click()で3個のシリアルポートをOPENします。
3:ロギング ON/OFF OPENとロギングON/OFFを別にしました。OPEN中でもログを中断できます。スイッチはCheckBox1のReceiving ON/OFFのチェックを入れるとロギングオンになってdgv1に受信したNAV-PVTとNAV-RELPOSNEDが125msec周期で記録されていきます。チェックをはずすと、ログしたデータの平均値とひぃう標準偏差を一番下の行へ記録すると同時にdgv2へ平均値をコピーします。dgv1、dgv2ともにSaveボタンを押すとタイムスタンプの入ったファイル名でCSVファイルとして保存されて、EXCELで読み込めます。
チェックボックスがチェックされた場合を検出して
3個の関数 Sub SerialPort_DataReceived()のうち1個をラジオボタン指定から選択して受信動作開始します。
割り込みが入っても、if文で何もせずにパスさせることで、受信のオンオフとしてます。if文の例です。
 If CheckBox1.Checked = True And RadioButton1.Checked = True Then
4:MovingBaseデータのBinary-ASCII変換 F9P SimpleRTK2Bとliteからは、USBシリアル出力115200bpsでUBX-NAV-PVT100バイト、UBX-NAV-RELPOSNED72バイトがバイナリーで送信されてきます。それをSerialPort_DataReceived()関数でバイナリをASCIIへ変換してます。下記3行だけでBinaryをASCIIに変換してます。
Dim arrByte1 As Byte() = New Byte(SerialPort1.BytesToRead – 1) {}
SerialPort1.Read(arrByte1, 0, arrByte1.GetLength(0)) ‘Binary Receive
ReceivedData1 = BitConverter.ToString(arrByte1) ‘
しかし、BitConverterでの変換はデリミタが”-“記号なので
“B5-62-01-3C”となってますので、バイナリー172バイトデータが
515バイトになります。(172×2の”HEX2文字”+171個の”-“=515個)
5:受信データのから
NAV-PVT、NAV-RELPSONEDを抽出する
シリアル受信割り込み関数で受信データをみていると、515バイトが揃って受信できてない場合があります。場合分けして、
515未満の場合:sd2へ一時保存して次の受信待ち
515バイトより大きい場合:515バイトだけ切り取ってsd1へ一時保存
515バイトの場合:sd3に格納して、完了。
最初に、515バイト切り取って、その中で頭だしして並べ変えます。
Dim topN As Integer = sd1.IndexOf(“B5-62-01-07”) で、NAV-PVTの頭だしを行って、頭から515バイト抽出します。①Sub PrintData()内でデータ処理を行ってます。
substring命令=文字列から指定した文字列を取得する命令
Replace命令=文字列を置換する
if文が複雑で、作成時の記憶がないので解説不能です。
sub printdata()をまるごとコピーして使われるのが良いです。
6:ログDGV DataGridViewを使ってNAV-PVTとNAV-RELPOSNEDを1行に記録しながら
ポーズをいれると最終行にrerlPosN、relPosE、relPosD、relPosLengthの
平均値と標準偏差を計算表示します。
172バイトのバイナリーを515バイトのASCIIデリミタ付に変換したあとに
NAV-PVTは、
PVT_Trans(NVC) ‘ PVT Binary を実数データに変換 parPVT(1-33) as integer
NAV-RELPOSNEDは、
RELP_Trans(NVC) ‘ RELPOSNED Binary を実数データに変換 parRELP(1-15) as integer
で実数値に変換してます。変換の仕方は、フレーム表で計算します。
NAV-PVTのフレーム表
NAV-RELPOSNEDのフレーム表
7:まとめDGV

 

1ポート測定が終了して平均値がでたら平均値のみコピーしてdgv2の最新行へコピーされます。各ポート測定毎の結果を表にして、保存するためにdgv2があります。
8:DataGridViewをまるごとCSV保存 ヘッダーと内容全部を丸ごとCSVファイルに保存して、EXCELで読めるようにします。
Sub Button3_Click() とSub Button4_Click()がdgv1とdgv2の保存関数です。fnameH = Format(Now, “yyyyMMdd_HHmmss”)でタイムスタンプをファイル名にして、ファイルをOPENします。
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(“Shift_JIS”)
fileH = My.Computer.FileSystem.OpenTextFileWriter(fnameH, False, enc)桁数=dgv.ColumnCountと行数=dgv.RowCountをforループで
ヘッダ:SCPheadstrにヘッダー文字列を格納してファイル保存します。
fileH.Write(SCPheadstr)
データ:SCPstrにデータ文字列を格納してファイル保存します。
fileH.Write(SCPstr)

 ●以後
実際に実家で測量作業しながら、プログラム改良していきます。

コメントを残す

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