4周波受信機 [mosaic-G5 P6] と Raspberry Pi を組み合わせた単独高精度測位
〜通信費・基準局不要で CLAS と MADOCA-PPP の同時測位〜
はじめに
2025年2月、ベルギー Septentrio 社より最新のチップセットを搭載した「mosaic-G5」シリーズが発表されました。 このシリーズは、測位エンジンの刷新や同時取得チャンネル数の増加など、基本性能が大幅に強化されています。 さらに2026年5月には、上位モデルとなる「mosaic-G5 P6」が登場しました。 最大の特徴は、QZSS(みちびき)の L6 信号受信に加え、2つのアンテナ入力による GNSS ヘディング(方位角算出)に同時に対応した点にあります。 本稿では、この最新チップ mosaic-G5 P6 を活用し、従来の受信機では物理的な制約から困難だった CLAS(L6D 信号)と MADOCA-PPP(L6E 信号)の「ワンチップ完全並行取得」によるリアルタイム測位システムを構築します。 外部通信や基準局を一切必要とせず、衛星信号のみでセンチメートル級の精度をリアルタイムに得るための手順について、ハードウェアからソフトウェア実装まで詳しく解説します。
目次
- セプテントリオ社 mosaic シリーズの機能比較
- mosaic-G5 P6 を搭載した Raspberry Pi 拡張基板
- RxControl による mosaic-G5 P6 モジュールの設定
- Raspberry Pi 上での MRTKLIB のインストール
- 手法1:VRS 変換方式で CLAS(mrtk cssr2rtcm3)
- mrkt relay の -b 1 オプションについて
- 手法2:MRTKLIB エンジン方式で CLAS(mrtk run)
- Raspberry Pi と MRTKLIB による MADOCA-PPP(mrtk run)
- CLAS と MADOCA-PPP の同時測位
- HAT 基板のご購入について
mosaic-G5 P6 を搭載した Raspberry Pi 拡張基板
ここでは、最新の GNSS 受信モジュール mosai-G5 P6 を搭載した Raspberry Pi 拡張基板、「mosaic-G5 P6 HAT( iChidori-Crest )」の設計思想を解説します。
従来の構成が抱えていた課題
従来、CLAS と MADOCA-PPP、さらに GNSS ヘディングを同時に実現しようとすると、それぞれの補強信号に対応した受信機が合計3台と、さらに信号を分けるための分配器が必要でした。
mosaic-G5 P6 と外部演算装置としての Raspberry Pi の統合
mosaic-G5 P6 は強力なデコード機能を持ち、L6D / L6E 信号を内部でデコードできます。しかし、チップ単体ではデコードした補強信号を自身の測位演算にそのままでは適用できないという仕様上の制約があります。 補強信号を測位演算に利用するためには、外部の演算装置が必要になります。そこで、デコードされた補強情報を外部へ取り出し、測位計算を行う「外部演算装置」として Raspberry Pi を組み合わせました。 演算ソフトウェアには、高機能な RTKLIB をベースに拡張された「MRTKLIB」を採用しました。
基板のハードウェア構成
mosaic-G5 P6 HAT 基板「iChidori-Crest」は、Raspberry Pi との一体化を前提としつつ、フィールドでの実運用を重視した設計を行っています。
- 一体化設計:Raspberry Pi の GPIO ヘッダに直接マウント可能な HAT 基板。
- GNSS デュアルアンテナ:MAIN / AUX の2系統の MMCX アンテナ端子を備え、ヘディング取得に対応。
- 4ch シリアル通信:USB ケーブルによる USB-serial 接続 2ch( USB1, USB2 )に加えて、mosaic-G5 P6 の COM1 を Raspberry Pi 4 の UART0 に、COM2 を UART4 に接続。
- 拡張性:PCI Express Mini Card スロット( LTE モジュール用を想定)、SIM カードスロット、データ記録用 SD カードスロット(将来対応)を搭載。
PCI Express Mini Card スロットには、ソラコム IoT ストアで販売している「LTE Cat.1 モジュール本体EC21-J Mini PCIe」や「LTE Cat.M モジュール本体 BG96 Mini PCIe」が接続できます。
選べる2つの測位アプローチ
mosaic-G5 P6 HAT基板と MRTKLIB の組み合わせでは、CLAS 信号の利用において以下の2つの手法を選択可能です。
- 手法1:VRS 変換方式で CLAS(mrtk cssr2rtcm3) Raspberry Pi 側で CLAS データを仮想基準局(VRS)形式の RTCM3 データに変換し、それをシリアル経由で mosaic-G5 P6 に戻す手法です。測位演算自体は mosaic 内部の RTK エンジンが行うため、ホスト側の負荷が軽いのが特徴です。手法1へ
- 手法2:MRTKLIB エンジン方式で CLAS(mrtk run) mosaic から出力される観測データと L6 補正データを、Raspberry Pi 上の MRTKLIB PPP-RTK エンジンへ直接入力し、計算を行う手法です。高度なパラメータ調整が外部から可能になります。手法2へ
なお、MADOCA-PPP については、観測データと L6E 補正データを Raspberry Pi に入力する MRTKLIB エンジン方式での運用が必須となります。
RxControl による mosaic-G5 P6 モジュールの設定
RxTools のダウンロード
まずは、受信機側が L6 信号他を正しく受け、出力するための設定を行います。Septentrio 純正の GUI ツールパッケージ「RxTools」に含まれる「RxControl」を使用します。
RxTools には、Windows 用と Linux 用( Intel )の実行ファイルがあります。
残念ながら、Linux 用(Arm)の実行ファイルがないので、Raspberry Pi では、動きません。
この章は、Windows PC から操作することを想定しています。
Raspberry Pi 上で port forward の設定をすることで、Raspberry Pi に mosaic-G5 を接続したまま、他のマシンで立ち上げた RxTools からリモート接続する方法は後述します。
「RxTools」のダウンロードは、こちら「RxTools:GNSS受信機の制御・分析ソフトウェア | Septentrio」
「RxTools」の使い方詳細は、 こちら 「[RxTools]を使ってみよう! | AITOYA Inc.」
「RxTools」をインストールしたら、Windows PC から USB Type-C ケーブルを mosaic-G5 P6 基板へ接続してください。 USB ケーブルを接続すると、仮想 COM ポートが2つ現れます。これが、mosaic-G5 P6 からは、USB1 と USB2 の接続として見えます。
最初に「RxControl」を起動して、先ほどの仮想 COM ポート1を選ぶ(仮想 COM ポート2は、SBF 出力に使用)ことで、mosaic-G5 P6 と接続できます。まずは、mosaic-G5 P6 の FW Version を確認して下さい。View > Message Inspector View > SBF:ReceiverSetup1 > RxVersionで確認できます。執筆時点で、1.1.1 でした。 FW が古い場合は、Septentrio 社のページから、最新の FW をダウンロードして、更新することもできます。
QZSS L6 トラッキングの有効化
mosaic-G5 P6 は、工場出荷状態では QZSS の L6 信号トラッキングが無効になっています。
この設定を忘れると、後段のソフトウェアに補正データが一切出力されないため、最も重要なステップです。
Navigation > Advanced User Settings > Tracking > Signal Tracking から「QZSSL6」を有効にします。
RTK Floatの有効化と
CNavigation > Positioning Mode... > PVT Mode タブを選びます。
Mode : Roverから「RTKFloat」を有効にします。
また、Solution Selectivity の Level から「Loose」を選びます。
SBF 出力の設定
次に、Raspberry Pi へ送るデータの種類( SBF ブロック)を指定します。
Communication > Output Settings > SBF Output から、以下の主要ブロックを含むストリームを設定します。
- MeasEpoch: 生の観測データ
- QZSRawL6D: CLAS の生データ( L6D 信号)
- QZSRawL6E: MADOCAの生データ( L6E 信号)
- 各衛星の Nav:軌道情報(GPSNav, GALNav, QZSNav 等)
- PVTGeodetic:受信機自身の位置情報( VRS の参照用)
USB1 に、上記が含まれるように、PostProcess と Support にチェックを入れます。
Interval は、1sec とします。
Raspberry Pi 上での MRTKLIB のインストール
Raspberry Pi 上で MRTKLIB を構築し、mosaic-G5 P6 と連携して CLAS および MADOCA-PPP の同時測位を実行するための詳細な手順とコマンドを解説します。
まずは、Raspberry Pi 上で MRTKLIB を動作させるための準備を行います。
MRTKLIB は、従来の RTKLIB を C11 規格で再構築した、スレッドセーフかつモジュール化されたライブラリです。
今回は、Raspberry Pi 4 Model B(RAM 1GB)に Raspberry Pi OS(Trixie)を導入する前提で解説を進めます。
( Linux hostname 6.18.34+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.18.34-1+rpt1 (2026-06-09) aarch64 GNU/Linux )
MRTKLIBのインストールとビルド
まず、Raspberry Pi に MRTKLIB を導入します。MRTKLIB は、CMake を用いてビルドします。
事前準備 :CMake(3.15以上)、C11 対応コンパイラ( GCC など)、および行列演算高速化のための LAPACK / BLAS をインストールしておきます。
$ sudo apt-get update
$ sudo apt-get install -y cmake build-essential liblapack-dev
ビルド手順: 以下のコマンドでソースを取得し、ビルドを行います。
# リポジトリのクローン(執筆時点での最新版)
$ git clone https://github.com/h-shiono/MRTKLIB.git -b v0.7.9
$ cd MRTKLIB
$ cmake --preset default
# ビルドの実行(-jオプションで並列処理)
$ cmake --build build -j
# 実行ファイルの確認
$ build/mrtk --help
# 設定ファイルの展開
$ cd tests/data/claslib
$ tar zxvf claslib_testdata.tar.gz
$ cd ../madocalib
$ tar zxvf madocalib_testdata.tar.gz
$ cd ../../../
ビルド完了後、build/ ディレクトリ内に統合バイナリ mrtk が生成されます。
共通ツール:mrtk relay の役割
Raspberry Pi と mosaic-G5 P6 の間でデータをやり取りする際、中核となるのが mrtk relayコマンドです。 このツールは、受信機のシリアルポートから出力される SBF( Septentrio Binary Format )ストリームを読み込み、TCP サーバーとして他の演算プロセスへ配信する「中継サーバー」の役割を果たします。
手法1:VRS 変換方式で CLAS( mrtk cssr2rtcm3 )
この手法は、MRTKLIB が CLAS の補正情報を仮想基準局( VRS )形式の RTCM3 データに変換し、それを受信機内部の RTK エンジンに戻すことで測位を行う方式です。
- 特長:ホスト側( Raspberry Pi )の計算負荷が非常に軽く、Raspberry Pi のような非力な SBC でも動作可能です。
- 実行手順:2つのターミナルを使い、以下のプロセスを並行して実行します。
mrtk relay の起動
受信機のシリアルポートを TCP に変換し、計算結果を戻すための「リレーバック -b 」を有効にします。」
# シリアルポート(ttyACM0)をTCP(9000番)へブリッジし、戻り値をシリアルへ入力
$ build/mrtk relay -in serial://ttyACM0:115200 -b 1 -out tcpsvr://:9000
- -in serial://ttyACM0:115200:mosaic-G5 P6 が接続されているポートを指定します。起動直後で、他に USB-serial のデバイスがなければ、これが mosaic-G5 P6 の USB1 です。
- -b 1:出力ストリーム1(ここでは TCP サーバー)から受け取ったデータを、入力のシリアルポートへ書き戻す設定です。これにより単一のポートで双方向通信を実現します。
- -out tcpsvr://:9000:SBF データを TCP 9000番ポートで配信します
mrtk cssr2rtcm3 の起動
リレーされたデータから L6D 信号を抽出し、RTCM3 形式の OSR(観測空間表現)へ変換します。
# 補正情報の変換とリレーへの送信
$ build/mrtk cssr2rtcm3 -k conf/cssr2rtcm3.toml -in sbf://tcpcli://localhost:9000 -out tcpcli://localhost:9000
- -in sbf://...:mrtk relay が配信するストリームに接続し、自動的に L6D、軌道情報、自身の位置情報を抽出します。
- -out tcpcli://...:生成した RTCM3 データをmrtk relay に返し、-b 1 オプションを通じて受信機へ入力されます。
数十秒で L6D のデコードが始まると、mosaic-G5 P6 へ向けて RTCM3 信号が出力され始めます。
すると、mosaic-G5 P6 内部の RTK エンジンが働き、受信機から測位結果が出力されます。
mrkt relay の -b 1 オプションについて
mrtk relay の -b 1 オプションは、特定の出力ストリームから受け取ったデータを、入力ソース側へ書き戻すための非常に重要な機能です。
本記事のシステムにおいて、このオプションが果たす役割と技術的詳細は以下の通りです。
1. 基本的な仕組み
mrtk relay は通常、-in で指定した入力(受信機からの SBF データなど)を -out で指定した複数の出力先へ配信します。 ここに -b 1 を加えると、「1番目の出力ストリーム(-out)の入力バッファに届いたデータを、-in で指定したデバイスへ送り返す」という双方向のパスが確立されます。
- 「1」の意味:出力ストリームのインデックス番号です。コマンドライン上で最初に記述された -out が「1」としてカウントされます。
- 動作例:
mrtk relay -in serial... -b 1 -out tcpsvr...と実行した場合、TCP サーバー(出力1)に接続した外部クライアントから送られてきたデータが、そのままシリアルポート(入力)へ書き込まれます。
2. 技術的なメリット:シングルポートでの双方向通信
このオプションの最大の利点は、1つのシリアルストリームでデータの読み出しと書き込みを同時に行える点にあります。
- ポートの集約: 従来、受信機からデータを「出す」ポートと、補正情報を「入れる」ポートを物理的に分ける必要がありましたが、-b 1 を使うことで1つのポートに集約できます。
- SBC との親和性:Raspberry Pi のような、利用可能なシリアルポート数に限りのあるシングルボードコンピュータで、mosaic-G5 のような高機能受信機を制御する際に不可欠な設定です。 残ったシリアルポート( USB2, COM1, COM2 )は、例えば、NMEA 出力専用にしたり、RxTools 接続用のポートとすることができ、取り回しがしやすくなります。 下記のように USB2 を RxTools 接続用のポートとすると、mosaic-G5 P6 基板の接続先を Raspberry Pi にしたままで、Windows PC から TCP / IP で接続することが可能になります。
# USB2をRxTools接続用のポートとする例
$ build/mrtk relay -b 1 -in serial://ttyACM1:115200 -out tcpsvr://:28784
3. 本記事( VRS 変換方式)における具体的な役割
「手法1:VRS 変換方式(mrtk cssr2rtcm3 )」において、このオプションは以下の流れで機能します。
- 1. 観測データの配信:mosaic-G5 から出力された観測データ( SBF )を -in(シリアル)で受け取り、-out( TCP サーバー)へ配信します。TCP サーバーなので、複数の測位計算エンジンへ補正データを中継して、配信することができます。
- 2. 補正データの受け取り:外部で動作する mrtk cssr2rtcm3 が生成した RTCM3(補正データ)を、同じ TCP サーバー経由で受け取ります。
- 3. リレーバック:-b 1 により、その RTCM3 メッセージを即座にシリアルポート経由で mosaic-G5 P6 へ流し込みます。
これによって、mosaic-G5 P6 内部の RTK エンジンが補正情報を認識し、RTK 測位演算することが可能になります。
設定時の注意点
- 記述順序: -b 1 は「1番目の -out」を指すため、必ず -out tcpsvr://...(通信用)をログファイル保存用の -out file://...よりも前に記述する必要があります。もし-out の順序を逆にすると、受信機にデータが戻りません。
手法2:MRTKLIB エンジン方式で CLAS( mrtk run )
この手法では、受信機を単なる「観測データの供給源」として使い、測位演算( PPP-RTK )のすべてを Raspberry Pi 上の MRTKLIB エンジンで実行します。
- 特長:受信機のエンジンに依存せず、ホスト側で高度なパラメータ調整やリアルタイムの評価が可能です。
mrtk relay の起動
手法1と同様ですが、演算をホストで行うため、リレーバック-bは必要ありません。手法1の mrtk relay プログラムが動いていたら、不要です。
$ build/mrtk relay -in serial://ttyACM0:115200 -out tcpsvr://:9000
conf/claslib/rtkrcv_mosaic_g5.toml ファイルの変更
必要であれば、該当部分を以下のように変更します。
[streams.input.rover]
type = "tcpcli"
path = "localhost:9000"
format = "sbf"
[streams.input.correction]
type = "off"
path = ""
format = ""
mrtk run の起動
MRTKLIB の PPP-RTK エンジンを直接起動します。
# 設定ファイルを指定してリアルタイム測位を開始
$ build/mrtk run -s --config conf/claslib/rtkrcv_mosaic_g5.toml
- -s:起動と同時に測位処理を自動開始します。
- --config:mosaic-G5 用の設定ファイルを指定します。このファイル内で L6 信号のデコードや衛星の選択アルゴリズムが定義されています。
mrtk run は SBF ストリームに含まれる観測データと L6 信号を解析し、独自に測位結果を算出します。デフォルトでは NMEA 形式の解がファイル出力されます。
Raspberry Pi と MRTKLIB によるMADOCA-PPP( mrtk run )
手法2と全く同じ要領で、MADOCA-PPP による測位も行うことができます。
SBF 出力の設定で、QZSRawL6E の出力を有効にしておく必要があります。
Step 2 で、引数として与える設定ファイルを変更するだけです。
mrtk relay の起動
手法1の mrtk relay プログラムが動いていたら、不要です。
$ build/mrtk relay -in serial://ttyACM0:115200 -out tcpsvr://:9000
conf/malib/rtkrcv.toml ファイルの変更
該当部分を以下のように変更します。
[streams.input.rover]
type = "tcpcli"
path = "localhost:9000"
format = "sbf"
[streams.input.correction]
type = "off"
path = ""
format = ""
mrtk run の起動
$ build/mrtk run -s --config conf/malib/rtkrcv.toml
MADOCA-PPP( L6E 信号)は電離層・対流圏遅延に関する補正情報を含まないため、CLAS に比べて収束に時間を要しますが、その一方で GLONASS や Beidou といった衛星も測位に利用できるため、使用可能な衛星数が多いという特徴があります。
CLAS と MADOCA-PPP の同時測位
ここまで、CLAS の2つの手法( VRS 変換方式/ MRTKLIB エンジン方式)と、MADOCA-PPP の MRTKLIB エンジン方式について、それぞれ個別に紹介してきました。 mosaic-G5 P6 と MRTKLIB の組み合わせでは、これら3つの測位を1台の受信機・1本のアンテナ・1台の Raspberry Pi だけで同時に走らせることができます。
同時測位の構成
構成図を示します。mosaic-G5 P6 から出力される SBF ストリーム(観測データ、航法データ、および L6D・L6E の生データを含む)を mrtk relay が中継し、後段の3つのプロセスへ配信します。
- mrtk cssr2rtcm3:CLAS の VRS 変換方式。生成した RTCM3 データを -b 1 によって mrtk relay 経由で mosaic-G5 P6 へ戻し、受信機内部の RTK エンジンで CLAS 測位を行います。
- mrtk run( ppp-rtk モード):CLAS の MRTKLIB エンジン方式。L6D補正情報を用いてRaspberry Pi上のMRTKLIBで測位演算します。
- mrtk run( ppp-kine モード):MADOCA-PPP。L6E 補正情報を用いて Raspberry Pi 上で MRTKLIB で測位演算します。
いずれの経路も同一の SBF ストリームを入力としているため、受信機やアンテナを増設することなく、3方式の測位結果を常に並行して得られます。これは、CLAS 用・MADOCA 用に受信機を分けて用意する必要があった従来の構成に対する、mosaic-G5 P6 ならではの大きな利点です。
測位条件
オープンスカイ環境で静止させたアンテナを用い、約2時間にわたって同時測位を行いました。
測位レートは 1Hz です。下図にその時の測位結果をプロットしたものを示します。
横軸は時刻、縦軸は平面直角座標系におけるY座標値です。
CLAS の2方式については、Fix した点のみをプロットしています。
測位結果の比較
まず MADOCA-PPP(緑)は、測位開始直後は数十cm〜1m程度のばらつきがあり、安定するまでにおよそ1時間半を要しています。
一方、CLAS の2方式( VRS 変換方式:青、MRTKLIB エンジン方式:橙)は、いずれも測位開始からほどなく Fix に至っており、MADOCA-PPP に比べて立ち上がりが速いことがわかります。
ただし、VRS 変換方式の CLAS では、19:45〜20:00 頃の約15分間、Fix が外れている区間が見られます(グラフ中で青のプロットが途切れている部分)。整数値アンビギュイティを解く CLAS では、こうした一時的な Fix 外れが起こり得ます。
同時測位の意義
ここで重要になるのが、3方式を同時に走らせていることです。
VRS 変換方式の CLAS が Fix を外している区間でも、同じ時間帯の MRTKLIB エンジン方式の CLAS や MADOCA-PPP の測位結果は継続して得られています。
したがって、いずれか一方の結果が欠測・不安定になった際には、他方の結果で補完するといった運用が可能です。
このように、mosaic-G5 P6 と MRTKLIB を組み合わせることで、通信費や基準局を必要とせずに、複数の高精度測位方式を同一のハードウェア上で冗長化できます。 単一方式に依存しない、よりロバストな測位システムを低コストに実現できる点は、本構成の大きな魅力といえるでしょう。
関連ページ
HAT 基板のご購入について
当記事紹介のモデル「iChidori-Crest (P6)」の価格、ご購入につきましては、CQ出版社のWebサイト(下記ボタン)をご利用ください。
