未分類 – Support http://tokyo2show.co.jp/knowledge Fri, 21 Nov 2025 14:01:26 +0000 ja hourly 1 https://wordpress.org/?v=6.8.3 Linux GPS_Tracker RTK① http://tokyo2show.co.jp/knowledge/2025/11/12/linux-gps_tracker-rtk%e2%91%a0/ Wed, 12 Nov 2025 06:19:46 +0000 https://tokyo2show.co.jp/knowledge/?p=834 Read MoreLinux GPS_Tracker RTK①

]]>

RaspiでスタートしたGPS_tracker(リアルタイム軌跡表示)続編

前回はノートPCにLinux OS MintをインストールしWebサーバー等をインストールしてGPS_Trackerをテストしました。当初 軌跡がリアルタイムとはいかず30秒程度遅延が発生していたのを改良しほぼリアルタイムで表示、 軌跡のエクスポート等ほぼうまくいきました。

今回はRTK版に挑戦してみました。

まず、GPSを ZED-F9PのGR-901Uに変更し、ポート、スピードの設定変更ができるようにGUI版を作成しました。

ただ、コンソール上で切り替え設定したほうが簡単なので、現状はGUIのコントローラーはBetaとしてあります。

あらかじめ Windows u-centerで GR-901Uの移動局の設定を済ませます。

NTRIPの基準局からのデータをUSBに送信するために RTKLIB STR2STRを利用させていただきました。

画面のように RTK測位が FLOAT FIXと表示されるようになりました。

NTRIPをUSBポートに送信しているとレスポンスが悪い時があるので別の方法を検討しています。

ZED-F9P(GR-901V)を使い、自転車で走りましたが、停止時以外はFLOATです。 歩道と車道を 往路 復路と走りましたが、かなり正確に記録されています。遅延がありましたので修正したいと思います 数十秒程度。

画面レイアウトを変更

コントロールパネル、測量パネルも アコーディオンにしました。

白地図を追加

]]>
Rasi GPSD② ノートPC(Linux Mint OS)GPS軌跡リアルタイム表示 http://tokyo2show.co.jp/knowledge/2025/11/06/rasi-gpsd%e2%91%a1%e3%80%80%e3%83%8e%e3%83%bc%e3%83%88pc%ef%bc%88linux%e3%80%80mint-os%ef%bc%89gps%e8%bb%8c%e8%b7%a1%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%a0%e8%a1%a8%e7%a4%ba/ Thu, 06 Nov 2025 04:55:04 +0000 https://tokyo2show.co.jp/knowledge/?p=817 Read MoreRasi GPSD② ノートPC(Linux Mint OS)GPS軌跡リアルタイム表示

]]>
RaspberryPi4で運用していたGPSシステムを古いノートPC試してみます。

Raspiでは電源の問題や、SSHでターミナルコマンドを送信するなど手間の問題があります。

古いノートPCにLinuxをインストールし サーバー&デスクトップ環境でGPS軌跡リアルタイムシステムを作ってみました。

ノートPCはCore i 5 第4世代、メモリは4G、SSDは128GB 液晶タッチパネル搭載

Linuxは Ubuntu系の Linux Mintをインストールしました。

OSのインストール:

Linux Mintのイメージファイルをダウンロードし、USBメモリに作成してPCにインストールします。

ログインすると、Windowsライクなデスクトップ(Cinamon)で 予想以上に快適に使用できます。

WiFiの設定を行いアプリ(パッケージ管理)をアップデート&インストールを行います。

サーバーのインストール: Apache2

sudo apt install -y apache2

1. `pip3 install -r requirements.txt` (Pythonパッケージのインストール)

※ WARNING: Running pip as the ‘root’ user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

と警告がでます。この警告は無視してもインストールは続行されます。ただし、システムのPythonパッケージとの競合に注意してください。

現状維持(注意が必要)

既にrootでインストール済みの場合:

# インストール済みパッケージを確認

pip3 list

# システムパッケージとの競合をチェック

dpkg -l | grep python3

注意点:

  • システムアップデート時に問題が発生する可能性
  • 他のPythonアプリに影響する可能性
現在の状況確認

# インストール済みパッケージを確認

pip3 list | grep -E “(flask|websockets|gpsd)”

# システムパッケージとの重複を確認    dpkg -l | grep -E “python3-(flask|websockets)”

  • 警告を無視してもインストールは続行される
  • システムパッケージとの競合リスクあり
  • 可能であれば仮想環境の使用を推奨
  • 既にインストール済みなら、動作確認を優先

現在のインストールで問題が発生していなければ、そのまま使用しても問題ありません。問題が発生した場合は、仮想環境への移行を検討してください。

2. `python3 gps_tracker_v2.py` (サーバーの起動)

3. ブラウザで `http://localhost:5000` にアクセス

GPSDのインストール

GPSDと関連ツールをインストール

sudo apt install -y gpsd gpsd-clients python3-gps

# インストールされたバージョンを確認

gpsd –version

“`

#### 1.2 GPSデバイスの確認

“`bash

# USB接続のGPSデバイスを確認

ls -l /dev/ttyUSB*

動作確認ができたら、GPSDを自動起動するように設定します:

“`bash

# GPSDサービスを有効化

sudo systemctl enable gpsd

# GPSDサービスを起動

sudo systemctl start gpsd

# GPSDサービスのステータスを確認

sudo systemctl status gpsd

PCを持って(iphoneデザリングまたは モバイルWiFiを用意)ログを取りに行ってみましょう。

地図表示に遅延(約1分)がありました。 gps_worker()で取得したデータがWebSocketに即時送信されていないことです。gps_worker()で取得したデータをWebSocketクライアントにリアルタイムでブロードキャストするように修正します。 そして GPSDソケットを非ブロッキングにし、データ取得の応答性を改善します。

データ取得間隔を50msに短縮(GPS 10Hz対応)

ヘッダーを小さく、また コントローラーをアイコン化してみました。

また、OpenStreet Mapに対応し GoogleMap と切り替えが可能。 MAP API キーがなくても表示できます。

次回 リアルタイム表示が改善されているか 確認したいと思います。

ちなみにWindowsに移植を行い 動作確認しました。GPS_Tracker.exe

]]>
Rasi GPSD① BU-353N 10Hz http://tokyo2show.co.jp/knowledge/2025/10/20/rasi-gpsd/ Mon, 20 Oct 2025 05:25:07 +0000 https://tokyo2show.co.jp/knowledge/?p=798 Read MoreRasi GPSD① BU-353N 10Hz

]]>
GPS リアルタイム軌跡表示システム

GPSDからNMEAデータを取得し、Google Mapsにリアルタイムで軌跡を表示するWebアプリケーションです。

機能

  • ✅ GPSDからリアルタイムでGPSデータを取得(10Hz対応)
  • ✅ WebSocketでリアルタイム通信
  • ✅ Google Maps上に軌跡を表示
  • ✅ 現在位置マーカーの自動追従
  • ✅ 速度・高度情報の表示
  • ✅ NMEAデータのリアルタイム表示
  • ✅ 軌跡のクリア機能
  • ✅ 自動追従のオン/オフ切り替え
  • ✅ 接続状態の表示

システム要件

  • Linux(Raspberry Pi推奨)
  • Python 3.7以上
  • GPSD起動済み
  • インターネット接続(Google Maps API使用)

セットアップ手順

1. GPSDのインストールと設定

# GPSDをインストール
sudo apt-get update
sudo apt-get install gpsd gpsd-clients

# GPSDの設定ファイルを編集
sudo nano /etc/default/gpsd

設定例:

DEVICES="/dev/ttyUSB0"
GPSD_OPTIONS="-F /var/run/gpsd.sock -b -n -s 115200 -G"
USBAUTO="true"
# GPSDを起動
sudo systemctl restart gpsd

# GPSDの動作を確認
gpsmon

2. 必要なパッケージのインストール

# Pythonパッケージをインストール
pip3 install -r requirements.txt

# または
python3 -m pip install -r requirements.txt

3. Google Maps API キーの取得

  1. Google Cloud Consoleにアクセス
  2. 新しいプロジェクトを作成
  3. “Maps JavaScript API”を有効化
  4. APIキーを作成
  5. index.htmlの以下の行を編集:
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">

YOUR_API_KEYを実際のAPIキーに置き換えてください。

4. ファイルの配置

すべてのファイルを同じディレクトリに配置します:

gps_tracker_v2.py
index.html
requirements.txt
README.md

5. サーバーの起動

# サーバーを起動
python3 gps_tracker_v2.py

6. ブラウザでアクセス

サーバーを起動したマシンのIPアドレスにアクセス:

http://[サーバーのIPアドレス]:5000

例:

http://192.168.1.12:5000

使用方法

  1. ブラウザでアプリケーションにアクセス
  2. WebSocket接続が自動的に確立されます
  3. GPSデータが取得されると、地図上にリアルタイムで軌跡が表示されます
  4. 赤い点が現在位置、赤い線が軌跡です

コントロール

  • 軌跡をクリア: 保存された軌跡を削除
  • 地図を中心に戻す: 現在位置に地図を移動
  • 自動追従: ON/OFF: GPSの位置情報に地図を自動追従させるかどうかを切り替え

機能詳細

GPSデータ取得

  • GPSDからJSONデータを取得(位置情報)
  • GPSDからNMEAデータを取得(生データ)
  • 10Hz(0.1秒ごと)でデータを更新

地図表示

  • Google Maps JavaScript APIを使用
  • 現在位置を赤い点で表示
  • 軌跡を赤い線で表示
  • 自動追従機能で常に現在位置を中心に表示

NMEAデータ表示

  • テキストボックスにスクロール可能
  • 最新100行を保持
  • タイムスタンプ付きで表示

トラブルシューティング

GPSデータが表示されない

# GPSDのステータスを確認
sudo systemctl status gpsd

# GPSDを再起動
sudo systemctl restart gpsd

# GPSDのログを確認
gpsmon

# GPSDから直接データを確認
gpspipe -w -n 10

WebSocket接続エラー

# ファイアウォールでポート5000と8765が開いているか確認
sudo ufw status

# ポートを開く(必要に応じて)
sudo ufw allow 5000
sudo ufw allow 8765

Google Mapsが表示されない

  • Google Maps API キーが正しく設定されているか確認
  • APIキーに制限がかかっていないか確認
  • インターネット接続を確認
  • ブラウザのコンソールでエラーメッセージを確認

NMEAデータが表示されない

# GPSDからNMEAデータを直接確認
gpspipe -r -n 10

# GPSDの設定を確認
cat /etc/default/gpsd

技術仕様

ポート

  • 5000: HTTPサーバー(Flask)
  • 8765: WebSocketサーバー

GPSD設定

  • デバイス: /dev/ttyUSB0(設定により変更可能)
  • ボーレート: 115200bps(設定により変更可能)
  • 更新レート: 10Hz

データ形式

{
  "type": "gps",
  "lat": 35.6812,
  "lon": 139.7671,
  "speed": 0.0,
  "altitude": 0.0,
  "timestamp": "2024-01-01T12:00:00"
}
{
  "type": "nmea",
  "data": "$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47",
  "timestamp": "2024-01-01T12:00:00"
}

ファイル構成

“`
.
├── gps_tracker_v2.py # GPSサーバー(Python)
├── index.html # Webインターフェース(HTML/JavaScript)
├── requirements.txt # Python依存関係
├── README.md # このファイル
└── start_gps_tracker.sh # 起動スクリプト(オプション)

while True:
try:
# GPSデータを取得(JSON)
data = gpsd_socket.recv(1024).decode(‘utf-8’)

        # JSONデータを解析
        for line in data.strip().split('\n'):
            if line:
                try:
                    packet = json.loads(line)

                    # デバッグ情報を出力(最初の1回のみ)
                    if not hasattr(gps_worker, '_debug_printed'):
                        print(f"Packet class: {packet.get('class')}")
                        print(f"Packet keys: {list(packet.keys())}")
                        gps_worker._debug_printed = True

                    # TPV (Time-Position-Velocity) パケットを処理
                    if packet.get('class') == 'TPV':
                        mode = packet.get('mode', 0)

                        if mode >= 2:  # 2Dまたは3Dの位置情報がある
                            lat = packet.get('lat', 0)
                            lon = packet.get('lon', 0)
                            speed = packet.get('speed', 0)
                            altitude = packet.get('alt', 0)
                            timestamp = datetime.now().isoformat()

                            # 軌跡データを保存
                            point = {
                                'lat': lat,
                                'lon': lon,
                                'speed': speed,
                                'altitude': altitude,
                                'timestamp': timestamp
                            }

                            with track_lock:
                                track_history.append(point)
                                # 無制限で保存(メモリが許す限り)

                            print(f"GPS: Lat={lat:.6f}, Lon={lon:.6f}, Speed={speed:.2f}m/s")
                except json.JSONDecodeError:
                    pass

# 1. システムを更新

sudo apt-get update

sudo apt-get upgrade -y

# 2. Python 3をインストール(通常は既にインストール済み)

sudo apt-get install python3 python3-pip -y

# 3. GPSDをインストール

sudo apt-get install gpsd gpsd-clients -y

# 4. Apacheをインストール

sudo apt-get install apache2 -y

# 5. 必要なPythonパッケージをインストール

pip3 install flask flask-cors websockets

# 6. GPSDを設定

sudo nano /etc/default/gpsd

# 以下のように設定: GPSポートは BU-353N(PL-2303)= ttyUSB(0,1,2) 115200bps

# DEVICES=”/dev/ttyUSB0″

# GPSD_OPTIONS=”-F /var/run/gpsd.sock -b -n -s 115200 -G”

# USBAUTO=”true”

# 7. GPSDを起動

sudo systemctl enable gpsd

sudo systemctl start gpsd

# 8. Apacheを起動

sudo systemctl enable apache2

sudo systemctl start apache2

]]>