Soracom

Users

スタートガイド
Home スタートガイド さまざまなデバイスと SORACOM RTK 対応 GNSS レシーバー QLM29HBAA-GM で高精度な位置情報を取得する Getting Started

Linux で QLM29H を使用する

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 を接続してシリアルポート名を確認する

  1. QLM29H の USB ケーブルを Raspberry Pi の USB ポートに接続します。

  2. Raspberry Pi にログインして、QLM29H に割り当てられたシリアルポート名を確認します。

    $ dmesg | grep ttyUSB
    
  3. 以下のように 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 デバイスや接続順によって ttyUSB0ttyUSB1 などに変わります。以降の手順では /dev/ttyUSB0 と記載しています。ttyUSB1 と表示された場合は、/dev/ttyUSB0/dev/ttyUSB1 に読み替えてください。

NMEA データの受信を確認する

QLM29H が出力する NMEA データを確認します。NMEA データは、位置情報や時刻などを含むテキスト形式のデータです。

  1. 以下のコマンドを実行します。

    $ stty -F /dev/ttyUSB0 115200
    $ cat /dev/ttyUSB0
    
  2. 以下のような NMEA データが出力されていることを確認します。

    $GNGGA,103253.000,xxxx.xxxxxx,N,xxxxx.xxxxxx,E,5,50,0.35,...
    $GNRMC,103253.000,A,xxxx.xxxxxx,N,xxxxx.xxxxxx,E,...
    
  3. 確認できたら Ctrl + C キーを押して終了します。

サンプルスクリプトを準備する

  1. soracom-labs/qlm29h-samples をクローンし、作成されたディレクトリに移動します。

    $ git clone https://github.com/soracom-labs/qlm29h-samples.git
    $ cd qlm29h-samples
    

    以降、このディレクトリを qlm29h-samples ディレクトリと呼びます。

  2. 依存パッケージをインストールします。

    $ sudo apt install python3-pip
    $ pip3 install -r requirements.txt
    
  3. qlm29h-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 補正情報を受信するためのプロトコルです。

  1. qlm29h-samples ディレクトリで、ソラコムからメールで通知される NTRIP サーバーのユーザー名/パスワードを環境変数に設定します。

    以下のコマンドの ユーザー名パスワード の部分だけを、ソラコムから発行された NTRIP サーバーのユーザー名とパスワードに置き換えて実行します。

    $ export NTRIP_USER="ユーザー名"
    $ export NTRIP_PASS="パスワード"
    
  2. rtk_client.py を実行します。

    $ python3 rtk_client.py
    

    サンプルスクリプトが NTRIP サーバーに接続し、データ通信を開始して RTK 補正情報を受信します。

    Permission denied エラーが表示された場合

    Permission denied エラーが表示された場合は、以下のコマンドを実行してから Raspberry Pi に再ログインしてください。

    $ sudo usermod -aG dialout $USER
    

    Raspberry Pi に再ログインしたあとは、サンプルスクリプトを実行する の手順 1 からやり直してください。

  3. 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 への送信を一体化したスクリプトです。

  1. 使用する IoT SIM または SORACOM Arc のバーチャル SIM/Subscriber が所属するグループで、SORACOM Harvest Data を有効化 します。

  2. qlm29h-samples ディレクトリで、ソラコムからメールで通知される NTRIP サーバーのユーザー名/パスワードを環境変数に設定します。

    以下のコマンドの ユーザー名パスワード の部分だけを、ソラコムから発行された NTRIP サーバーのユーザー名とパスワードに置き換えて実行します。

    $ export NTRIP_USER="ユーザー名"
    $ export NTRIP_PASS="パスワード"
    
  3. 以下のコマンドを実行します。

    $ python3 rtk_harvest.py
    

    HARVEST_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"
    }