ロボットのRTK座標と方位が3万円未満で揃う:UM982をUbuntu+Pythonで動かして実測してみた

概要

アリエクでアンテナ込みで3万円を切る価格で2アンテナ対応のRTKモジュールが販売していたので、購入して試してみました。
結果としてかなり高精度に位置推定ができ、かつ非常に使いやすいモジュールだったのでおすすめです。
詳細は後述しますが、開空間ならCEP99(99%の確率で、実際の測位点がその円の半径内に収まる)が2.0cmという精度!!しかも細かい設定無しであっさり動いたので感動・・・。

また、Pythonから直接叩くライブラリがあまりなかったので自作して公開しました。ぜひ使ってみてください。補正情報の取得とモジュールへの配信までサポートしているため、USBに繋いでサンプルを動かせば、すぐにRTK FIXまで持っていけると思います。

github.com


購入までの経緯

2025年のつくばチャレンジ(ロボットの自律走行コンテスト)において、UbloxのF9Pというモジュールを使ってRTK GPSによる自律走行にチャレンジしてみましたが、

  • うまくFIXしない
  • せっかく高精度に位置がわかっても、ロボットの方位がわからないので別の方法で推定する必要がある

という点が課題となり、うまく使いこなせませんでした。

そのため、安価なRTKGPSモジュールを二個搭載して方位も求められるようにするか・・・と思い、アリエクを探していたところ、UM982という、まさに求めているようなモジュールが販売されていたので早速購入してみました。

https://ja.aliexpress.com/item/1005010071697174.html

購入から届くまで

普通は購入したらすぐに発送されるものですが、比較的高価、かつそれなりに使いこなすのにスキルがいるので、セラーから、英語で「なんに使うんだ、本当に使いこなせるか?使いこなせないからって返品するなよ?」というチャットが入ります。

こっちはさんざんガジェット買って失敗しているのよ!と「ロボットのエンジニアだから問題ない、すぐに返品しないから大丈夫!とにかく送ってくれ!(意訳)」と返信したら無事送ってくれました。
ネットにあまりドキュメントがないので、合わせてドキュメントも要求したところ、かなり詳細なAPIリファレンスを送ってくれたので、もし購入するならリファレンスを含めて要求するといいと思います。私の手元にはあるのですが、公開してよいかというと微妙なので・・・。

動作確認!

結局届くまで3週間程かかり、届いたのがこれ。
まぁなんかそれっぽい。とりあえずUbuntuに繋いで確認すると、/dev/ttyUSB0が見えたので一安心。


ということであとはリファレンスを見ながら実装です。
Windows用のアプリケーションももらったけれど、結局Windowsで動かしたってロボットには使えないし、初手からPythonで叩いて実装していきました。
悩んだのは初期ボーレートくらいかな?結局115200で試したら動作しました。
ということで再掲ですが、作ったライブラリを公開したので使ってください。メッセージをパースしていくの結構面倒なので、同じ苦労を二度する必要はないと思います。
ちなみに、ライブラリでは取得周期も変更できるようにしていますが、20Hzまでなら安定してデータが取得できていました。

ライブラリは、以下の表に示すとおり、移動ロボットに必要な情報はたいてい取得できるように作ってあります。使い方はREADMEを見ていただければすぐにわかるはず。補正局情報は善意の基準局、というサイトから探してください。

github.com

属性 説明
lat float 緯度(10進数度)
lon float 経度(10進数度)
alt float 高度(メートル)
heading float 方位(度、デュアルアンテナ)
pitch float ピッチ角(度)
speed_knots float 対地速度(ノット)
speed_mps float 対地速度(m/s)- プロパティ
speed_kmh float 対地速度(km/h)- プロパティ
course float 進行方位(度)
rtk_state str RTK状態
num_sats int 使用衛星数
hdop float HDOP
baseline_m float ベースライン長(メートル)
timestamp float タイムスタンプ
diff_age float 補正データ経過時間(秒)
heading_stddev float 方位標準偏差(度)
pitch_stddev float ピッチ標準偏差(度)
is_valid bool 有効な位置データか - プロパティ
is_rtk_fix bool RTK Fixか - プロパティ

評価実験

ここまでの実装で、表面上はFIXするようになったので、あとはどの程度使えるかについても簡単に評価を行いました。
実験環境は以下に示すような開けた空間です。自宅だと障害物が多いので、広い駐車場に移動して、車の上にアンテナを載せて45分間定点で測定しました。この情報を元に、ヘディングと緯度軽度の分布を評価していきます。
いやしかし、こんな車が駐車場に停まっていたらどうみても怪しい・・・・。

実験環境

実験結果

取得したデータを解析した結果を以下に示します。
基本的に全てFIXしており、方位の標準偏差が0.1256°、位置精度も平均からの最大誤差が2.28 cmと、自律走行ロボットに搭載するには十分そうな精度。うーん、3万円以下でこんなセンサが手に入るとは素晴らしい。
ここには上げていないですが、移動時の精度も悪くないです。(データを出すと住んでいる場所が公開されるのが悩ましい…)

【RTK状態の内訳】
RTK Fix: 25,826 (100.0%)
RTK Float: 0
DGPS: 0
Standalone: 0

【方位 (Heading)】
平均: 305.0911°
標準偏差: 0.1256°
最小: 304.6718°
最大: 305.5854°
中央値: 305.0895°

【ベースライン長 (アンテナ間距離)】
平均: 51.12 cm (0.5112 m)
標準偏差: 0.11 cm (0.0011 m)
最小: 50.74 cm
最大: 51.57 cm
中央値: 51.12 cm

【位置精度 (平均位置からのばらつき)】
平均誤差: 0.85 cm (0.0085 m)
標準偏差: 0.46 cm
最大誤差: 2.28 cm
CEP 50%: 0.76 cm (50%の点がこの半径内)
CEP 95%: 1.75 cm (95%の点がこの半径内)
CEP 99%: 2.02 cm (99%の点がこの半径内)

【高度】
平均: 84.93 m
標準偏差: 0.02 m
最小: 84.89 m
最大: 84.99 m

【HDOP (精度低下率)】
平均: 0.40
最小: 0.40
最大: 0.40

【使用衛星数】
平均: 44.9
最小: 43
最大: 47

実験結果

まとめ

ということで、年末年始の宿題として、アリエクのRTKGPSモジュールを動かしてみました。
結果としてはお値段以上の性能!この性能で3万円を切るならほぼ無料みたいなものなので(本当か?)、ぜひ皆さん試してみてください。

また、2026年のつくばチャレンジでも週末組というチーム名で参加予定なので、これを見てセンサを使ったよ、という方がいたらぜひお声掛けいただけるととっても嬉しいです。