Raspberry Pi OS (Debian 11 bullseye) を使用して、RTK 対応 GNSS レシーバー QLM29HBAA-GM (以下、QLM29H) の動作確認と RTK 測位を行います。他の Debian 系 Linux でも同様の手順で動作します。
この手順は、QLM29H の USB タイプ (QLM29HBAAGM00UBASM-5) を対象にしています。QLM29H の RS-232 タイプ (QLM29HBAAGM00AAASM-5) を使用する場合は、商品ページ に記載された「ハードウェアユーザーガイド」のリンクから Quectel_QLM29HxAA-GM_Hardware_User_Guide_VX.X.pdf をダウンロードし、ドキュメント内の RS-232 interface definition を参考に配線してください。
QLM29H を接続してシリアルポート名を確認する
QLM29H の USB ケーブルを Raspberry Pi の USB ポートに接続します。
Raspberry Pi にログインして、QLM29H に割り当てられたシリアルポート名を確認します。
$ dmesg | grep ttyUSB以下のように
ch341-uart converter now attached to ttyUSBXと表示されていることと、QLM29H に割り当てられたシリアルポート名 (ttyUSBXの部分) を確認します。[xx.xxx] usb 1-1.2: ch341-uart converter now attached to ttyUSB0
以降の手順ではシリアルポート名を読み替えてください
シリアルポート名 (ttyUSBX の部分) は、Raspberry Pi に接続している USB デバイスや接続順によって ttyUSB0 や ttyUSB1 などに変わります。以降の手順では /dev/ttyUSB0 と記載しています。ttyUSB1 と表示された場合は、/dev/ttyUSB0 を /dev/ttyUSB1 に読み替えてください。
NMEA データの受信を確認する
QLM29H が出力する NMEA データを確認します。NMEA データは、位置情報や時刻などを含むテキスト形式のデータです。
以下のコマンドを実行します。
$ stty -F /dev/ttyUSB0 115200 $ cat /dev/ttyUSB0以下のような NMEA データが出力されていることを確認します。
$GNGGA,103253.000,xxxx.xxxxxx,N,xxxxx.xxxxxx,E,5,50,0.35,... $GNRMC,103253.000,A,xxxx.xxxxxx,N,xxxxx.xxxxxx,E,...確認できたら Ctrl + C キーを押して終了します。
サンプルスクリプトを準備する
soracom-labs/qlm29h-samples をクローンし、作成されたディレクトリに移動します。
$ git clone https://github.com/soracom-labs/qlm29h-samples.git $ cd qlm29h-samples以降、このディレクトリを
qlm29h-samplesディレクトリと呼びます。依存パッケージをインストールします。
$ sudo apt install python3-pip $ pip3 install -r requirements.txtqlm29h-samplesディレクトリにあるrtk_client.pyを開き、QLM29H を接続してシリアルポート名を確認する で確認した QLM29H のシリアルポート名がSERIAL_PORTに設定されていることを確認します。SERIAL_PORTのデフォルト値は以下のとおりです。SERIAL_PORT = "/dev/ttyUSB0"たとえば、QLM29H のシリアルポート名が
ttyUSB1の場合は、以下のように変更します。SERIAL_PORT = "/dev/ttyUSB1"
サンプルスクリプトを実行する
サンプルスクリプト rtk_client.py を実行すると、QLM29H で高精度な RTK 測位を行えます。サンプルスクリプトは、NTRIP サーバーから RTK 補正情報を受信し、QLM29H に転送し続けます。高精度な RTK 測位を継続するには、サンプルスクリプトを終了せずに実行し続けてください。
サンプルスクリプトは 1 時間あたり約 6 MiB のデータ通信を行います
- 高精度な RTK 測位を行うには、サンプルスクリプトが NTRIP サーバーから RTK 補正情報を受信し、QLM29H に転送する必要があります。NTRIP サーバーへの接続には、Raspberry Pi のインターネット接続環境が必要です。
- サンプルスクリプトを実行している間は、NTRIP サーバーから RTK 補正情報を受信するため、継続的にデータ通信が発生します。通信量の目安は 1 時間あたり約 6 MiB です (Linux 環境での実測値)。
- SORACOM Air for セルラーを使用する場合は、利用する IoT SIM のサブスクリプションやバンドルのデータ通信料金を確認してください。実際のデータ通信量は、IoT SIM のデータ通信量を確認する で確認できます。実際の利用料金は、今月の利用料金を確認する / 課金詳細情報 CSV をダウンロードする で確認できます。
NTRIP は、インターネット経由で RTK 補正情報を受信するためのプロトコルです。
qlm29h-samplesディレクトリで、ソラコムからメールで通知される NTRIP サーバーのユーザー名/パスワードを環境変数に設定します。以下のコマンドの
ユーザー名とパスワードの部分だけを、ソラコムから発行された NTRIP サーバーのユーザー名とパスワードに置き換えて実行します。$ export NTRIP_USER="ユーザー名" $ export NTRIP_PASS="パスワード"rtk_client.pyを実行します。$ python3 rtk_client.pyサンプルスクリプトが NTRIP サーバーに接続し、データ通信を開始して RTK 補正情報を受信します。
Permission deniedエラーが表示された場合Permission deniedエラーが表示された場合は、以下のコマンドを実行してから Raspberry Pi に再ログインしてください。$ sudo usermod -aG dialout $USERRaspberry Pi に再ログインしたあとは、サンプルスクリプトを実行する の手順 1 からやり直してください。
Fixed RTKと表示されることを確認します。[MAIN] Opening serial port /dev/ttyUSB0 @ 115200 bps If port not found, check with: ls /dev/ttyUSB* /dev/ttyACM* [INIT] Enabling RTK mode: $PQTMCFGRTK,W,1,1*6C [NTRIP] Connecting to qrtksa1.quectel.com:2101 ... [MAIN] Waiting for first GNSS fix (up to 30s)... [NTRIP] Connected. Receiving RTCM corrections... [MAIN] Running. Press Ctrl+C to stop. [MAIN] Watch for 'Fixed RTK' in GGA output to confirm RTK positioning. [NTRIP] GGA sent (GPS SPS Mode): $GNGGA,xxxxxx.000,xxxx.xxxxxx,N,xxxxx.xxxxxx,E,1,... [NTRIP] RTCM forwarded: 1164 bytes [reference station coordinates (stationary) / receiver/antenna description / GPS MSM4 / GLONASS MSM4 / Galileo MSM4 / BDS MSM4] [NTRIP] GGA sent (Differential GPS / SPS / SBAS Mode): $GNGGA,xxxxxx.000,xxxx.xxxxxx,N,xxxxx.xxxxxx,E,2,... [NTRIP] RTCM forwarded: 1164 bytes [reference station coordinates (stationary) / receiver/antenna description / GPS MSM4 / GLONASS MSM4 / Galileo MSM4 / BDS MSM4] [NTRIP] GGA sent (Float RTK): $GNGGA,xxxxxx.000,xxxx.xxxxxx,N,xxxxx.xxxxxx,E,5,... [NTRIP] RTCM forwarded: 1176 bytes [reference station coordinates (stationary) / receiver/antenna description / GPS MSM4 / GLONASS MSM4 / Galileo MSM4 / BDS MSM4] [NTRIP] GGA sent (Fixed RTK): $GNGGA,xxxxxx.000,xxxx.xxxxxx,N,xxxxx.xxxxxx,E,4,... [NTRIP] RTCM forwarded: 1176 bytes [reference station coordinates (stationary) / receiver/antenna description / GPS MSM4 / GLONASS MSM4 / Galileo MSM4 / BDS MSM4][NTRIP] GGA sentのログ行には、$GNGGAで始まる NMEA データが含まれます。この例では、xxxx.xxxxxx,Nが緯度、xxxxx.xxxxxx,Eが経度です。[NTRIP] GGA sent (GPS SPS Mode)と表示されたログ行の緯度・経度は、単独測位による位置情報です。高精度な RTK 測位ではありません。[NTRIP] GGA sent (Float RTK)と表示されたログ行の緯度・経度は、RTK 演算中の位置情報です。高精度な RTK 測位ではありません。[NTRIP] GGA sent (Fixed RTK)と表示されたログ行の緯度・経度は、高精度な RTK 測位による位置情報です。位置精度の目安は < 0.1 m + 1 ppm CEP です (基準局より 1 km 以内の場合は約 10 cm)。
Fixed RTKの状態になるまで数十秒から数分かかる場合があります。- 建物や樹木などの障害物が少ない、空が広く開けた場所で使用してください。屋内や遮蔽物の多い環境では Fix できない場合があります。
次のステップ
取得した位置情報を SORACOM Air for セルラー または SORACOM Arc 経由で Unified Endpoint に送信することで、SORACOM Harvest Data にデータを蓄積したり、SORACOM Lagoon 3 で地図上に可視化したりできます。
サンプルスクリプト rtk_harvest.py は、RTK 補正情報の受信と Unified Endpoint への送信を一体化したスクリプトです。
使用する IoT SIM または SORACOM Arc のバーチャル SIM/Subscriber が所属するグループで、SORACOM Harvest Data を有効化 します。
qlm29h-samplesディレクトリで、ソラコムからメールで通知される NTRIP サーバーのユーザー名/パスワードを環境変数に設定します。以下のコマンドの
ユーザー名とパスワードの部分だけを、ソラコムから発行された NTRIP サーバーのユーザー名とパスワードに置き換えて実行します。$ export NTRIP_USER="ユーザー名" $ export NTRIP_PASS="パスワード"以下のコマンドを実行します。
$ python3 rtk_harvest.pyHARVEST_INTERVAL(デフォルト: 5 秒) ごとに以下の形式で Unified Endpoint に送信されます。{ "lat": 35.00000000, "lon": 139.00000000, "alt": 33.8, "quality": 4, "quality_label": "Fixed RTK", "satellites": 45, "hdop": 0.35, "utc_time": "10:32:15Z" }
