GPSロガーのCSVを地図に表示する|2台を車に積んで走った記録
こんにちは。ニンジンです🥕
第1回では、GT-502MGG-NとATGM336HをRaspberry Pi Pico 2 W(以下 Pico 2 W)につなぎ、置きっぱなしで精度を比べました。今回は同じロガーを車に積み、通勤路などを4回走って、走行中の違いを比べます。後半では、記録したCSVをPythonで地図に重ねる方法も紹介します。地図の手順だけ知りたい方は、GPSロガーのCSVを地図に表示する方法へ進んでください。
この記事の結論
- 最初の走行では、GT-502MGG-Nが17回再起動した。原因は、ダッシュボードに置いただけで揺れていたことだとみられる。固定してからは、再起動が1回 → 0回 → 0回に減った
- 走行中も、測位に使う衛星の数はATGM336H、信号の強さはGT-502MGG-Nが上(第1回と同じ傾向)
- トンネルでは、ATGM336Hが入口で約5秒長く位置を出し続けた。出口ではほぼ同時に復帰した(1回分のデータ)
- 記録したCSVは、Pythonのfoliumと地理院タイルで地図に重ねられる
確認環境
| 項目 | 内容 |
|---|---|
| マイコン | Raspberry Pi Pico 2 W(Pico 2 WH) |
| ファームウェア | MicroPython v1.28.0(2026-04-06版、RP2350) |
| 開発環境 | Thonny 5.0.0(Windows) |
| データの集計 | パソコンのPython 3(pandas・matplotlib・folium) |
用意するもの(GT-502MGG-N・ATGM336H・Raspberry Pi Pico 2 W ほか)
第1回と同じ部品です。配線とPicoのプログラムは、第1回で説明しています。

ケース入り・アンテナ一体型で、アンテナの向きを気にせず置ける
GPS受信機 シリアル出力タイプ(先バラ)みちびき対応 1PPS出力付 GT-502MGG-N
比べた1台目。MediaTek MT3333搭載です。走行中も4回とも、1機ごとの信号の強さはこちらが上でした。

北斗が見えるぶん、測位に使える衛星が多い
ATGM336H GPS+BDS デュアルモードモジュール(アンテナ付き)
比べた2台目。小さな基板に外付けのパッチアンテナをつなぐタイプです。走行中も4回とも、測位に使う衛星の数はこちらが多くなりました。アンテナは表裏に注意。



このほか、電源にモバイルバッテリー、持ち出し用のケースにダイソーのタッパーを使いました。4回目から使った端子台やコンデンサは、「再起動の対策」の節で紹介しています。
※リンクはアフィリエイトを含みます。価格・在庫・同梱内容は変わることがあるので、購入前に各商品ページをご確認ください。
測定条件(4回の走行)
第1回のロガーを、持ち運びしやすいようにタッパーに入れて車に積みました。置き方と配線は、各回の結果を見て次の回から変えています(理由は次の節で書きます)。条件が日によって違うので、比べるのは「同じ日の2台」だけにします。
| 回 | 日時 | 距離 | 置き方 | 電源の分け方 | GT-502MGG-Nの通信速度 |
|---|---|---|---|---|---|
| 1回目 | 10/16 18:41〜19:02(日没後) | 約12.5km | ダッシュボードに置いただけ | ブレッドボード | 115200bps |
| 2回目 | 10/18 14:00〜14:29(トンネルあり) | 約15.7km | テープ固定 | ブレッドボード | 9600bps(切り替え失敗) |
| 3回目 | 10/19 07:56〜08:19 | 約12.6km | テープ固定 | ブレッドボード | 9600bps(切り替え失敗) |
| 4回目 | 10/19 18:30〜18:51(日没後) | 約12.6km | テープ固定 | 端子台+コンデンサ | 115200bps |
- どの回もフロントガラス越しで、2台のアンテナは結束バンドでまとめています
- ATGM336Hは、4回とも115200bpsでした
- 電源はモバイルバッテリーです。2回目は途中でバッテリーが切れて終わりました
Freenoveのブレークアウトボードは、ピンごとにLEDが付いています。GPSがデータを送るたびに、GPSとつないだピンのLEDが点滅します。配線が合っているかを、目で確かめられます。
▲ ピンのLEDが、GPSのデータに合わせて点滅する(約5秒・音声なし)
走行中にGT-502MGG-Nが再起動していた(電源の瞬断)
1回目の走行では、GT-502MGG-Nの測位が17回途切れました。ATGM336Hは、同じ時間に1回(1秒)しか途切れていません。
ログを調べると、これは測位が途切れたのではなく、GT-502MGG-Nが再起動していたことが分かりました。理由は次の3つです。
- 時刻の小数部分がずれる(いつもは
.000なのに、途切れたあとは.421などになる) - 測位に使う衛星の数が、0機から数え直しになる
- Galileoの衛星が、一度一覧から消える
どれも、電源を入れ直したときと同じ特徴です。このとき、タッパーはダッシュボードに置いただけで、走行中はカタカタ揺れていました。ブレッドボードの差し込みが、振動で一瞬外れていたとみられます。
再起動の対策(テープ固定・端子台・コンデンサ)と結果
対策は、次の順に入れていきました。
2回目から:タッパーをダッシュボードにテープで固定した
4回目から:電源の分け方を端子台にした
ブレッドボードの差し込みをやめ、3.3VとGNDを端子台で分けました。GPSの電源線は、圧着端子を付けてネジで留めています。信号線(TX・RX)は、Freenoveのブレークアウトボードのネジ端子に直接留めました。
4回目から:電源ラインにコンデンサを足した(おまじない)
端子台の3.3VとGNDの間に電解コンデンサ(25V 470μF)を入れました。正直なところ、今回の症状に効くかは分かりません。計算すると、470μFで電圧の低下を0.3V以内に抑えられるのは約1.4ミリ秒だけです(3.3V系の電流を約0.1Aとした場合)。接点が一瞬ばたつく程度なら支えられますが、それ以上は支えきれません。安心のための「おまじない」として入れています。
電解コンデンサには向きがあります。帯(−)の側をGNDにつなぎます。
結果
テープで固定した2回目は1回、3回目は0回に減りました。端子台とコンデンサに変えた4回目も0回です。
いちばん効いたのは、タッパーを固定したことだとみられます。端子台とコンデンサは同時に入れたので、どちらが効いたかは分かりません。今回の結果から言えるのは、「固定して1回 → 0回に減り、端子台にしても0回が続いた」というところまでです。



圧着工具とテープは、手持ちのものでかまいません。参考までに、今回使ったものを載せています。
※リンクはアフィリエイトを含みます。価格・在庫・同梱内容は変わることがあるので、購入前に各商品ページをご確認ください。
115200bpsへの切り替えに失敗していた(2回目・3回目)
2回目と3回目は、GT-502MGG-Nが9600bpsのまま記録していました。9600bpsでは1秒分のデータを送りきれず、一部の行が欠けます(くわしくは第1回で説明しています)。
どちらも、長く電源を切っていたあとの起動でした。起動直後のGT-502MGG-Nは、まだ通信速度を変えるコマンドを受け付けないようです。そこで main.py を、GPSが出力を始めるのを待ってからコマンドを送り、切り替わらなければ3回まで送り直すように直しました。第1回のダウンロードファイルは、この修正版です。
直したあとの4回目は、ev_NNN.csv に baud,115200 try1(1回目で成功)と残っています。
走行中の比較(測位率・衛星数・HDOP・C/N0)
いちばん条件がそろった4回目(10/19夕方)の結果です。
| 項目 | GT-502MGG-N | ATGM336H |
|---|---|---|
| 測位率 | 100%(途切れ0回) | 100%(途切れ0回) |
| 測位に使った衛星数(中央値) | 19 | 23 |
| HDOP(中央値) | 0.60 | 0.60 |
| 平均信号強度 C/N0 | 37.3 dB-Hz | 34.2 dB-Hz |
| 2台の位置の差(同じ時刻どうし) | 中央値1.9m、95%値5.1m |
ほかの日の結果も並べます。
| 回 | 衛星数(GT/ATGM) | HDOP(GT/ATGM) | C/N0(GT/ATGM) | 2台の差(中央値) |
|---|---|---|---|---|
| 1回目(10/16 夕方) | 21/26 | 0.61/0.50 | 35.9/30.0 | 2.6m |
| 2回目(10/18 昼) | 20/26 | 0.64/0.50 | 36.6/31.7 | 6.3m |
| 3回目(10/19 朝) | 21/29 | 0.59/0.50 | 34.2/33.0 | 2.9m |
| 4回目(10/19 夕方) | 19/23 | 0.60/0.60 | 37.3/34.2 | 1.9m |
4回とも、衛星数はATGM336H、信号強度はGT-502MGG-Nが上でした。第1回の置きっぱなしの比較と同じ傾向です。
- 信号強度:屋外に置いたとき(GT 42.3/ATGM 35.7)より、GT-502MGG-Nで5〜8dB、ATGM336Hで1.5〜6dBほど低くなっています。フロントガラスと車体で、電波が弱くなるためとみられます
- 2台の差:2回目(10/18)だけ6.3mと大きくなっています。この日はGT-502MGG-Nが9600bpsで、行が欠けていたことも影響しているかもしれません
- 補正:GT-502MGG-Nは、4回目の走行のほとんどで品質「2」(補正あり)でした。10/20の朝に窓際で別に確かめたとき、GT-502MGG-NのGSVに42番・50番の衛星が出ていました。NMEAの33〜64番はSBAS(静止衛星から届く補正情報)の番号で、日本のMSASとみられます
トンネルでの比較(入口と出口)
2回目(10/18)に、トンネルを1回通りました。通過にかかった時間は約40秒です。
| 項目 | GT-502MGG-N | ATGM336H |
|---|---|---|
| 測位が途切れた時間 | 14:26:24〜14:27:07(43秒) | 14:26:29〜14:27:06(37秒) |
| 入口 | 先に途切れた | 約5秒長く位置を出し続けた |
| トンネルの中 | 受信している衛星は0機 | 信号強度6〜8の衛星を「受信中」と表示し続けた |
| 出口 | ATGM336Hの約1秒後に復帰 | 先に復帰。10秒で23機まで回復 |
入口でATGM336Hが粘ったのは、直前の速度と向きから位置を推定して出していたためとみられます。トンネルの中では、2台とも実際には測位できていません。
ただし、この結果は1回分です。しかもこの日のGT-502MGG-Nは9600bpsで、トンネルの約35秒前(14:25:48)にも再起動していました。条件がそろっていないので、「こういう違いが出た」という参考の結果として見てください。
GPSロガーのCSVを地図に表示する方法(Python・folium・地理院タイル)
記録したCSVには、1秒ごとの緯度経度が入っています。これを地図に重ねると、どこで測位が途切れたのか、2台がどれくらいずれたのかがひと目で分かります。
仕組みは次のとおりです。
- NMEAの緯度経度(「度分」)を、地図で使う「度」に直す(
nmea.pyの_deg_str()で記録済み) - 地図の画像(タイル)は、国土地理院の「地理院タイル」を使う
- Pythonのライブラリ folium で、地図の上に軌跡の線を引いてHTMLにする
この記事のプログラムは、まとめてダウンロードできます。
手順1:Picoからログを取り出す
ThonnyでPicoをつなぎ、メニューの「表示」→「ファイル」を開きます。
左下に、Picoの中のファイルが表示されます。log_NNN.csv と ev_NNN.csv が、ロガーが記録したファイルです。
ファイルを右クリックして、「ダウンロード」でパソコンに保存します。ev_NNN.csv も同じように保存します。
PicoをパソコンにつなぐとPicoが起動し直し、空の新しいログができます。いちばん大きい番号のファイルが、走行のログとは限りません。ファイルの大きさで見分けてください。
手順2:パソコンに必要なライブラリを入れる
コマンドプロンプトで、次のコマンドを実行します。
pip install pandas matplotlib folium pillow
手順3:ログと集計スクリプトを同じフォルダに置く
ダウンロードしたZIPの pc/ フォルダに、log_NNN.csv と ev_NNN.csv をコピーします。
pc/
├─ analyze.py
├─ track_figure.py
├─ make_demo_log.py
├─ log_001.csv
└─ ev_001.csv手順4:地図つきのHTMLを作る
pc/ フォルダでコマンドプロンプトを開き、次のコマンドを実行します。
python analyze.py log_001.csv
集計結果が表示され、out_001 フォルダができます。
| ファイル | 中身 |
|---|---|
| map.html | 地図+2台の軌跡(ブラウザで開く) |
| timeline.png | 衛星数・信号強度・HDOP・速度の推移 |
| summary.txt | 測位率・途切れた回数などの集計 |
手順5:ブラウザで地図を見る
map.html をダブルクリックすると、ブラウザで地図が開きます。
- 右上のボタンで、背景を「淡色地図」「標準地図」「航空写真」に切り替えられます
- 2台の軌跡は、それぞれ表示・非表示を切り替えられます
- 丸印は、測位が途切れた地点です
実機がなくても試せる(架空のデータ)
架空の走行ログを作るスクリプト(make_demo_log.py)も入れてあります。日比谷から東京駅の南側を通って京橋付近まで、約2kmを時速約30kmで走ったことにしたログです。途中でGT-502MGG-Nだけ12秒、測位が途切れます。track_figure.py --demo を実行すると、同じルートの地図を画像(track_demo.png)で作れます。
python make_demo_log.py
python analyze.py log_demo.csv
python track_figure.py --demo
GPSロガーと地図表示のよくある質問(FAQ)
Qfoliumで作ったmap.htmlを開いても、地図が「Access blocked」で表示されません。
AOpenStreetMapの標準タイルは、パソコンに保存したHTMLから開くと、参照元の情報がないため読み込みを断られます。この記事の analyze.py は、国土地理院の地理院タイルを使っているので、保存したmap.htmlをそのまま開いて表示できます。
Q走行中だけGPSモジュールの測位が途切れます。
A測位が途切れたのではなく、電源が一瞬切れてモジュールが再起動していることがあります。ログで、時刻の小数部分がずれる、使う衛星の数が0から数え直しになる、といった特徴が出ていたら再起動です。今回は、タッパーをダッシュボードにテープで固定してから、17回あった再起動が1回 → 0回に減りました(走った日や道は違います)。
QPicoから取り出したログが空っぽです。
APicoをパソコンにつなぐと、ロガーが起動し直して空の新しいログができます。いちばん大きい番号のファイルが、走行のログとは限りません。Thonnyのファイル一覧で、ファイルの大きさを見て選んでください。
Qフロントガラス越しでも、GPSは使えますか?
A使えました。ただ、屋外に置いたときより信号強度が下がり、GT-502MGG-Nで5〜8dB、ATGM336Hで1.5〜6dB低くなりました。それでも4回目の走行では、2台とも測位率100%でした。
まとめ
| こんなときは | おすすめ | 理由 |
|---|---|---|
| 測位に使う衛星を増やしたい | ATGM336H | 走行中も4回とも衛星数が多かった |
| 1機ごとの信号の強さ | GT-502MGG-N | 走行中も4回とも平均C/N0が高かった |
| トンネルの入口で少しでも長く位置がほしい | ATGM336H | 約5秒長く位置を出し続けた(1回分のデータ) |
| 手軽に車に置きたい | GT-502MGG-N | ケース入りで、裏に両面テープが付いている |
車に積むときは、モジュールの違いより先に、しっかり固定することが大事でした。置いただけでは、GT-502MGG-Nの再起動が17回起きています。固定してからは、再起動が1回 → 0回 → 0回に減りました。
GPSモジュール比較シリーズ
- GT-502MGG-NとATGM336Hの使い方|Raspberry Pi Pico 2 WとMicroPythonでGPSを受信して2台を比較
- GPSロガーのCSVを地図に表示する方法|Pico 2 WでGT-502MGG-NとATGM336Hを車に積んで走行・トンネル比較【Python・folium】(この記事)
Follow me on X
本ブログの中の人「ニンジン🥕」はXやってます。新着記事はいち早くポストでお知らせしているので、見逃したくない方は @ninjin_py_vba をフォローしてみてください🥕
@ninjin_py_vba をフォロー









コメント