投稿日

AI で作った Android スマホアプリで手軽に RTK 位置測位の PoC をスタートしよう!

こんにちは。ソラコムでソリューションアーキテクト (お客様への技術支援) をしている服部です。大阪生まれ大阪育ちです。

2026年6月30日に、SORACOM IoTストアにて「RTK対応GNSSレシーバー QLM29HBAA-GM」の販売を開始しました。センチメートル級の高精度な位置情報は、道路の車線や交差点、線路上の位置、広大な芝生のフィールド、採掘場などにおける詳細な位置把握を通じて、安全管理や作業効率化に活用できる可能性があります。この、QLM29HBAA-GMの製品概要やRTKの基本、購入後に測位を始めるまでの手順は、事業開発担当のsakiが以前のブログで紹介しています。(初めて知る方は、まずこちらをご覧ください!)

本ブログはその次のステップ、フィールドテスト編です。QLM29HBAA-GM を提供する Quectel 社 (Quectel Wireless Solutions Co., Ltd.) のアプリケーション「QGNSS」でも  Windows PC さえあればすぐ利用を始められますが、RTK 測位は屋外で試す場面も多くあります。そこで、Androidスマートフォンアプリを使い、QGNSSでの詳しい確認を補いながら現場で手軽にセンチメートル級の高精度な位置情報の測位を検証する方法をご紹介します。

用意するものとアプリでできること

必要なものは次のとおりです。

  • USBタイプのQLM29HBAA-GM
  • データ通信対応のUSB変換アダプター(USB Type-A メス – USB Type-C オス)
  • Android 14以降で、USBホスト/USB OTG (USB On-the-go) に対応したスマートフォン
  • セルラー通信やWi-Fiによるインターネット接続
  • 購入後にソラコムから案内される RTK 補正情報サービスのアカウント

今回私は Android スマートフォンとして motorola moto g05 を利用しました。Android アプリを APK ファイルとしてインストールする必要があるため、利用するスマートフォンは提供元不明のアプリのインストールを一時的に許可できる必要があります。また、位置測位は上空の視界が開けた屋外で試してください。

アプリケーションの Map ビューでは RTK/GNSS の測位軌跡が、SPS、Float RTK、Fixed RTK などの測位状態ごとに色分けして表示されます。ここでは QLM29H による測位データと Android スマートフォン自身の GPS 測位データを比べることもできます。Console では測位時の NMEA のログ出力が流れておりフィルタすることができます。Settingsでは、QLM29H の USB 接続、NTRIP、SORACOM プラットフォームへのデータ送信を設定できます。また、測位セッションや生ログを保存・共有でき、出力したログは QGNSS で再生できます。

Android スマートフォンアプリ QLM29H RTK を導入する

Android スマートフォンアプリ QLM29H RTKは、サンプルアプリとして GitHub の Releases に公開しています。

このサンプルアプリは、最初に QLM29HBAA-GMの商品ページ にある公開仕様とスタートガイド、そこで案内されている Quectel 社のハードウェア・ソフトウェアユーザーガイド、GNSS RTK アプリケーションノートを AI に読み込ませたうえで要求仕様を固め、その後に AI のコーディング支援によって Android アプリとして実装をしました。アプリ本体の APK ファイルだけでなく詳細な仕様文書とともにソースコードも公開していますので、誰でもすぐ試せて、なおかつ自社用途向けにカスタマイズする出発点にもできます。
なお、本アプリは検証を目的としたサンプル実装です。Quectel 社または SORACOM が提供する公式アプリではなく、両社の公式サポート対象でもありません。利用およびカスタマイズは、ご自身の責任で行ってください。

スマートフォンアプリ QLM29H RTK を導入するにはGitHub Releasesを Android 端末で開き、最新リリースのAssetsからAPKファイルを取得します。インストール前に、Release Notesとチェックサムも確認してください。

APKをファイル管理アプリから開き、配布元を確認してインストールします。「不明なアプリ」の許可が必要なら、使用するアプリだけ一時的に許可し、完了後に戻します。その他のインストール方法やセットアップの詳細は、GitHub の README も参照してください。

(ちょっと横道) AI でスマホアプリを手軽に作って検証できる時代!

公開した Android スマートフォンアプリ QLM29H RTKは、AI のコーディング支援、いわゆる Vibe Coding で作成したもので、私は一切コードを書いていません。スマートフォンは SIM や Wi-Fi の通信機能はもちろん、GPS や ジャイロなどのセンサーが使えて、さらに Bluetooth でビーコンなどとも連携ができるので、IoT 用のエッジデバイスとして活用しがいがあります。さらに AI の発展でスマホアプリの実装がとても手軽になりました。

実は今回、8/5水曜の午後に Quectel さんにソラコムの本社オフィスで勉強会を実施頂いたのですが、そのあとオフィスで AI とアプリの要求事項のディスカッションを開始して、さらに大阪への帰りの新幹線で開発要件として整理し、帰宅してからコーディングを開始して夜には初版の Android アプリが動いていました。8/6木曜は業務のすきまの時間で QLM29H の接続や RTK 測位、SORACOM Unified Endpoint の通信などテストして細かいエラーをつぶしていき、8/7金曜は休暇をとって朝から子どもの習い事に付き添いだったのですが、その送り迎えの車移動で本格的にフィールドテスト、その帰宅後に機能の修正や追加を実装する、という進み具合でした。ここまでで私の実際の稼働の時間としては、各日2-3時間ぐらいで合計8時間というところかと思います。ほんとに便利な時代になりました。。。

具体的には、最初に ChatGPT (GPT-5.6 Sol, Effort:Medium) で以下のような指示を出すところからスタートしました (Quectel社のドキュメントも2つ添付)。 ここは、チャットで聞ける様々な対話型 AI で同様のスタートができるでしょう。 ChatGPT を使ったのはアプリケーション仕様のやりとりを音声会話 (GPT-Live) でやれるとタイピングせず他の作業もできて楽だからというシンプルな理由です笑

以下の github のサンプルスクリプトと同様の仕事をする、シンプルな Android アプリケーションを作成したいので要件を整理してください。
soracom-labs/qlm29h-samples.git
アプリケーションの最小要件;
- USB 接続された QLM29H を認識できる
- NTRIP サーバーの設定ができる
- NMEAの出力を確認できる (シリアルコンソールのような生の出力をtailしているような画面で)
- 位置情報を地図表示できる (quality label ごとにドットが色分けされる)
- SORACOM ( uni.soracom.io ) への送信データ形式と頻度(サンプルレート)を設定できる
- アプリケーションのデザインは SORACOM Design System (https://design.soracom.io/brand/colors/) を参考にする
なお、必要であれば添付のドキュメント(Quectel_QGNSS_User_Guide_V3.4.pdf, quectel_qlm29hxaa-gm_software_user_guide_v1-1.pdf)を参考にしてください。不足している情報があれば質問してください。

すると、Android の対応バージョンはどこからにするかとか、Android 本体へのデータ保存はどれくらいの容量にするかなどいくつか質問が出てきたので答えていき、そろそろ良いかというところで、以下のような指示で仕様書にまとめてもらいました。

ではここから先は Codex で実装を進めるので、仕様書として markdown 形式でまとめてもらえますか?添付したドキュメントや github は見なくても仕様書だけを見れば設計意図がわかるようにしてください。

そこで出力された仕様書のファイル (qlm29h_android_app_spec.md) を今度は Codex (GPT-5.6 Sol, Effort:Medium) で読み込んで実装を開始しました (最終的な仕様書は github の REQUIREMENTS.md にあります) 。今回私は ChatGPT と同じ OpenAI の Codex というAI コーディングエージェントを利用しましたが、他にも Anthropic 社の Claude Code や Google 社の Antigravity、Github 社の Copilot など、利用可能な AI コーディングエージェントをご利用ください。

そして実装開始の最初の指示は以下の一文だけでした。

仕様書を読み取って開発を進めて下さい

ここから、実装の進め方を AI と確認したりファイルアクセスやコマンド実行の許可などをすすめていき、1時間くらいで最初の Android アプリが出来上がりました。

そこからは Android スマートフォンを PC に接続して、アプリのインストールや基本機能のテストを AI と一緒に進めました。なお、AI コーディングエージェントが PC を経由して Android スマートフォンを操作するためには、Android スマートフォンの設定項目 “開発者向けオプション” で “USB デバッグ” を有効にする必要があります。とはいえ、そんなことも実装を進めるうちに AI コーディングエージェントが教えてくれますので、ぜひ、IoT アプリケーションの開発にトライしてみてください!!「このブログ記事を読み込んで」みたいな指示からスタートするのも良いと思います!

インターネット接続あるいは SORACOM への接続を用意する

さて話を戻しまして、、RTK 補正情報の受信にはインターネット接続が必要です。スマートフォンに SIM を入れるか、Wi-Fi に接続して、インターネットを利用できる状態にしてください。

Android スマートフォンアプリ QLM29H RTK で SORACOM の Unified Endpoint にデータ送信をすることで、SORACOM Harvest Data に測位データを蓄積したり、SORACOM Beam や Funnel でクラウドサービスに測位データを転送することができます。

Unified Endpointを利用するには、SORACOM Air for セルラー (SORACOM の IoT SIM) によるセルラー通信、または既存のインターネット回線と SORACOM Arc によるバーチャル SIM 接続を利用します。

例えば SORACOM Harvest Data などでデータを蓄積する場合は、Air または Arc から Harvest Data へのデータ保存が利用できる状態を先に準備してください。具体的な接続・転送先設定は、それぞれの公式ドキュメントを参照してください。

接続して測位を始める

アプリがインストールできたら、QLM29HBAA-GM を USB 接続します。Settings の USB devices に QLM29H がシリアル接続として検出されていることを確認して、Connect をオンにして USB アクセスを許可します。NTRIP の設定画面で、QLM29HBAA-GM の購入後に SORACOM から通知されたユーザー名とパスワードを入力して保存し、Connect をオンにします。必要に応じて、Smartphone GNSS や SORACOM Unified Endpoint の設定をします。

Map メニュー上部のアイコンで USB、Internet、NTRIP が接続状態 (緑色に点灯) になれば準備完了です。屋外で測位を開始しましょう。Map メニュー下部の [SP] (スマートフォン自体のGPS測位のデータ) や [Fixed RTK] (センチメートル級の高精度測位が可能な状態) をタップすることで測位点の表示・非表示を切り替えられ、Follow チェックボックスによって現在位置への追従の有無を設定できます。RTK による高精度な位置測位を実現するには、高層ビルに囲まれておらず上空視界がひらけていること、高架橋など周囲の遮蔽物が無いこと、通信環境が確保できていることなどを確認してください。スマートフォンの操作は必ず安全な場所で行ってください。

大阪駅うめきた公園外周を走ってみた!

大阪駅北側のうめきたエリアは、もともと貨物駅だった約24haの広大な駅前の土地にホテル、オフィス、大規模商業ビルと新駅を整備しており、そのうち 8ha が緑化エリアとなっており、今なお道路や交通動線が日々変化しているアツいエリアです! うめきた公園はそのうち4.5ha の広大な駅前公園となっており、今回はQLM29HBAA-GMとAndroidスマートフォンを自転車の前カゴに載せ、北東カドのラウンドアバウト (環状交差点) をスタートして公園を含む外周約2kmを走りました。

RTK には主に Fixed と Float という測位状態があります。これは、QLM29H のような移動局受信機と各地に設置された RTK 測位の基準局が捉えたGNSS 搬送波 (衛星信号の波) の位相情報 (波の数の差など) をもとに、移動局受信機の位置を高精度に算出できたかどうかを示す状態です。QuectelのGNSS RTK Application Noteでは、Fixed RTK 測位時の水平位置精度は 10cm未満 とされています。Float はまだ確定に至っていない計算過程の状態で一般に測位誤差は 10〜50cm か条件によってはそれ以上の誤差になり得る状態、と説明されています。(ただしこれは製品仕様上の値であり、Fixed と Float の状態を読むための一般的な目安です。今回の走行における誤差を実測した結果ではありません)

Map では緑色の Fixed、黄色の Float、オレンジの DR が混在する結果となりました。大阪駅周辺は高層ビルが多く、そもそも上空の視界が得られにくく衛星信号が遮られることに加えて建物による信号の反射 (マルチパス) が起きやすいため、RTK 測位にはどうしても不利な条件になります。その中でも、アプリの[SP] (スマートフォン自体の GPS 測位データ、 薄い赤色) による参考軌跡と見比べると、今回の走行では QLM29HBAA-GM の軌跡の方が実際の走行位置に近い軌跡を描画できているように思います。

今回は道路の基準座標と照合はしていないため、画面上の車線図の位置を前提としていますが、このようにセンチメートル級の測位精度が得られ、地図側にも十分な位置精度がある場合には、通行した車線を識別できる可能性があります。

なお今回は敢えて上空の視界が全く得られない状況の位置測位も確認するために、大阪駅の地下駐輪場にも入ってみました。このときの測位状態としてオレンジ色の [DR] の軌跡が残っています。DR (Dead Reckoning、デッドレコニング) とは、GNSS で得た直前の位置に加え、内蔵 IMU (慣性計測ユニット) などから得られる移動情報を用いて現在位置を推定する仕組みです。GNSS 信号が届きにくいトンネルや地下でも位置測位を継続できる一方、GNSS を利用できない時間が長くなるほど誤差が蓄積する特徴があります。今回は、地上では Fixed RTK (緑色) の測位ができている状態で、地下駐輪場に入ってすぐにデッドレコニング (DR、オレンジ色) の測位データが記録され地上付近から再び RTK/GNSS の測位 (Float RTK、黄色) データとなっていました。実は QLM29HBAA-GM は、DR で利用する 内蔵 IMU (慣性計測ユニット) を常に活用して地上でも高層ビルなどによる信号の反射 (マルチパス) の影響を除外しようとするので、RTK が Float の状態でも良い結果が得られるようです。

また、この検証では測位結果を Unified Endpoint 経由で Harvest Data へ転送できることも確認しました。また Unified Endpoint 経由なので、Android アプリの設定はそのままに SORACOM 側で SORACOM Beam や SORACOM Funnel を設定することで、対応するクラウドサービスへ測位データを転送できます。Harvest や Beam などを高頻度 (1分未満の頻度) で送信する場合はご利用料金が想定外の規模にならないよう必ず費用の試算をしてください。

さらに走行後は、Console メニューの `Share historical log` または `Settings` メニューの`Sessions`へ進み、対象セッションの `Share logs` を選択すれば NMEA ログを共有したりエクスポートできます。NTRIPを使用したセッションでは RTCM ログも出力されます。NMEA ログは、Windows 版 QGNSS v2.5の Log Play で再生できます。現場では Android スマートフォンで測位し、後から PC で軌跡を再生して詳しく振り返ることができました。

まず RTK 測位を体験し、さらにカスタマイズへ

いかがでしたでしょうか?ご利用の前には、QLM29HBAA-GMの商品ページユーザーガイドRTK 補正情報サービスの対応エリアも確認してください。そして、まずはスマートフォンで RTK 測位によるセンチメートル級の高精度な位置情報の取得を体験し、その結果をもとに自社の用途や運用条件に合う形を検討してみてください。RTK 位置測位の活用はお気兼ねなくお問い合わせ下さい。

ご相談お待ちしております!

― ソラコム服部 (masa)