基板について
M8TとM8Pは「RTK_STAT」以外はピンコンパチ。
1種類の基板を起こせば両方に使用できます。
roverとbaseがあるので4枚あれば色々楽しめます。
サイズは40×90の金フラッシュ
920Mhz無線モジュールはFタバさん。
20mWで1200mとマニュアルに記載されてましたが、実測もう少しありました。
roverの座標をbaseへ送信してbaseに接続したパソコンで距離と受信電界強度をプロットして調べました。
128バイトのバイナリパケットで受信電界強度が付加されます。
送信から受信まで0.1秒程度です。
920Mhz無線モジュールと115200bpsシリアル送受信、M8T/M8Pとも230400bpsシリアル送受信。
外部と230400bpsシリアル送受信×2ch。
高速シリアル通信用にfifo内臓のMCUが必要でした。
また、64bit long doubleでの演算に強力なFPUも必要。
そして、これも重要なのですが開発環境が「チープコスト」でなければなりません。
コンパイル後のサイズが512KB程度ありそうだった。少なくと128KB以下にはならない。
良いMUCがありました。1000円です。200MHZ。
開発環境はタダ。デバッガは5000円。
良心的なお値段です。
重いのですが。
ふつうはラズパイなのですが、あえて基板を起こして920Mhz無線モジュールを載せました。
起動は速いです。組み込みマイコンですので瞬時です。
でも、最低でもM8T/M8Pホットスタート時間は待ちます。3秒で送信開始です。
コールドスタート状態ならラズパイが起動しちゃいますね。
でも、でも、OSレスが良いのです。
ソフトウェア
残念なことに内臓ramが512KBしかありません。
1MBあればrtklibをそのまま移植できたのですが。
SBASを削除したり、1周波なのでNFRQ=1にしたり。
結構改造が必要でした。
strsvr_tの構造体でなく直接raw_tやrtk_tを確保してます。
rtkposの演算時間がroverとbase共通衛星数10程度で60msでした。
組み込みマイコン?でも速いです。
NEO M8T × 2台
1)最初にroverとbaseにM8Tを使って920Mhzでobsデータを送受信させました。
920Mhzの実速度1300bytes/secぐらいだったのでbaseから送信するRXMRAWXの衛星数を
減らすよう送信時に仰角25度と信号レベル35dbHzでマスクしました。
rtkpos演算時には30度,40dbHzでマスクしています。
使用衛星はGPS,Galileo,QZSS,BeiDouの4種類です。
SBASはIGP band等のデータがメモリを多く使用するので残念ながら使用していません。
SBASで衛星数が+1個になるようにしようとしましたが挫折。
まあ他の衛星がたくさんあるのでSBASを無理しません。
rawデータをそのまま920Mhzで送信するのは衛星数が多いので厳しいです。
svinfoで仰角マスクしたobs送信方式としました。
baseはinput_ubxしてobsデータを作成して、仰角マスクの衛星のobsを排除してパケット分割して送信。
roverで受信したパケットがbaseのobs。
roverのM8T rawデータをinput_ubx。
2つのobsデータを1つにまとめてsortobs。それからrtkpos。
2)どうせ送信するならRTCM3が良いと思い、別バージョンのソフトを作成しました。
M8PへのbaseにM8Tを使えるかと思ったのですが。。。
baseはinput_ubxしてしてraw2rtcm。write_obsの中でgen_rtcm3。
RTCM3はデータが少ないのでマスクせずbase受信全衛星を送信。
受信データから input_rtcm3 してobsデータを1秒分まとめる
roverデータはinput_ubxしてbaseのobsデータとまとめてrtkposをコール。
なんとかM8T2台でRTCM3でのfixにたどり着けました。
受信データ1秒分のまとめ方が悪いのかageがrawデータ時より0.2秒遅れてしまう。