2024年2月4日日曜日

pyubx2を利用してZED-F9Pの設定を変更するスクリプトを作った


背景

前回pygpsclientというプログラムを利用して、ZED-F9Pを2台利用してRTKのためのntrip server + casterとntrip clientをubuntu上で動かしました。

このpygpsclientはpyubx2などのpythonライブラリを利用して作られており、一部の機能はcliとして呼び出せるのですが、自分が利用したい設定値の書き込みや読み出し機能は自分が調べたり試したりした範囲ではcliとして提供されていません。
(ubxsetrateが近いのですが、設定値の読み書きは不能でした。)

コマンドを通して設定変更や内容確認ができたら便利だと思うので、cliとして使えるpythonスクリプトを作りました。
備忘録としてgithubでも公開しつつ記事にも使い方を残します。

スクリプトをまとめているリポジトリはこちらです。
https://github.com/asukiaaa/scripts-pyubx-config

使ったもの

  • ubuntuをインストールしたPC
  • python3
  • ZED-F9P
  • USBケーブル

準備

関連ライブラリをインストール

pythonとgitを使うので、それらをインストールします。
sudo apt update
sudo apt upgrade
sudo apt install -y python3-pip git

主な処理にpyubx2を、cli化にclickを利用しているので、それらをpipでインストールします。
pip3 install pyubx2 click

スクリプトを含むリポジトリをダウンロード

下記のリポジトリダウンロード(clone)して実行可能な状態にします。
https://github.com/asukiaaa/scripts-pyubx-config

この記事では~/gitprojectsというディレクトリにリポジトリを配置して利用します。
mkdir -p ~/gitprojects
git clone https://github.com/asukiaaa/scripts-pyubx-config.git

書き込み対象はpyubx2の定義を利用

これから解説するコマンドでkeyとして指定する書き込み対象は、pyubx2でUBX_CONFIG_DATABASEとして定義されているものを使います。
設定変更したい対象は、上記の定義から探してください。

この記事ではUART1の通信速度設定であるCFG_UART1_BAUDRATEに対する書き込みを例として解説します。

設定書き込み

pyubx-cfg-set.pyで設定値を書き込みます。
--portでZED-F9Pのポートを、--keyで書き込み対象のキーを、--valueで書き込み値を渡して実行します。
通信速度を標準から変えている場合は--baudrateで指定してください。標準のbaudrateは38400bpsです。
このコマンドはUART1の通信速度設定であるCFG_UART1_BAUDRATEに対する書き込みを行います。
~/gitprojects/scripts-pyubx-config/pyubx-cfg-set.py --port /dev/ttyACM0 --key CFG_UART1_BAUDRATE --value 9600

コマンドの組み立てが成功すると下記のようなログが表示されます。
<UBX(CFG-VALSET, version=0, ram=1, bbr=0, flash=0, action=0, reserved0=0, CFG_UART1_BAUDRATE=9600)>

通信速度が合っていないとコマンドの書き込みが無視されるので、先程の説明の繰り返しになりますが、標準の38400bps以外にしている場合は--baudrateで指定してください。

設定読み込み

pyubx-cfg-get.pyで設定値を読み込めます。
--portでZED-F9Pのポートを、--keyで書き込み対象のキーを、--valueで書き込み値を渡して実行します。
(通信速度を標準から変えている場合は--baudrateで指定してください。標準のbaudrateは38400bpsです。)
このコマンドはUART1の通信速度設定であるCFG_UART1_BAUDRATEに対する読み込みを行います。
~/gitprojects/scripts-pyubx-config/pyubx-cfg-get.py --port /dev/ttyACM0 --key CFG_UART1_BAUDRATE

コマンドが成功すると下記のようなログが表示されます。
<UBX(CFG-VALGET, version=1, layer=0, position=0, CFG_UART1_BAUDRATE=9600)>

先程のコマンドで設定した9600が設定されたのが分かります。

使いどころ

ZED-F9Pを基地局モードにする際に便利です。
下記のコマンドは、位置固定モード(CFG-TMODE-MODEを2)にした上で、緯度経度高さを36.17609700, 139.29287333で,98.5に設定するコマンドです。
cd ~/gitprojects/scripts-pyubx-config
PORT=/dev/ttyACM0
./pyubx-cfg-set.py --port $PORT --key CFG_TMODE_MODE --value 2
./pyubx-cfg-set.py --port $PORT --key CFG_TMODE_LAT --value 361760970
./pyubx-cfg-set.py --port $PORT --key CFG_TMODE_LON --value 1392928733
./pyubx-cfg-set.py --port $PORT --key CFG_TMODE_HEIGHT --value 9850

pyubx-cfg-get.pyで確認可能です。
cd ~/gitprojects/scripts-pyubx-config
PORT=/dev/ttyACM0
./pyubx-cfg-get.py --port $PORT --key CFG_TMODE_MODE
./pyubx-cfg-get.py --port $PORT --key CFG_TMODE_LAT
./pyubx-cfg-get.py --port $PORT --key CFG_TMODE_LON
./pyubx-cfg-get.py --port $PORT --key CFG_TMODE_HEIGHT

書き換えに成功していれば下記のログが表示されます。
<UBX(CFG-VALGET, version=1, layer=0, position=0, CFG_TMODE_MODE=2)>
<UBX(CFG-VALGET, version=1, layer=0, position=0, CFG_TMODE_LAT=361760970)>
<UBX(CFG-VALGET, version=1, layer=0, position=0, CFG_TMODE_LON=1392928733)>
<UBX(CFG-VALGET, version=1, layer=0, position=0, CFG_TMODE_HEIGHT=9850)>

おわり

コマンドで設定して値を読み書きできるスクリプトを作って、ZED-F9Pに対する設定の書き込みと読み込みができました。

参考

scripts-pyubx-config
pyubx2
ZED-F9P 2台とpygpslientを利用してntripのserverかつcasterとclientとして動かしてRTKで位置を推定

0 件のコメント :