秋月に行ったところ、またしても何か買ってきてしまいました。
秋月の上のコンカフェでまた買い物してしまった…🙃🙃🙃 pic.twitter.com/y1O4zcw6jd
— Ar-Ray (@Ray255Ar) 2023年9月4日
今回はGNSSを購入しました。
GNSS(衛星測位システム)は「GPS」という名前で知られる時刻取得・測位システムで、スマートフォン・カーナビや自動運転などの技術に必須なシステムとなっています。
複数の衛星から受信機を介して位置を計算してコンピュータで受信を行うことで時刻と測位情報を取得可能です。
受信モジュール自体は1000円くらいから入手でき、追加でアンテナやコネクタを購入します。
今回購入したu-blox m8モジュールはアンテナ付き・USB給電・接続可能なモデルで¥2600で購入できるのでハイコスパで便利です。
5年前にディスコンしているのはかなり難点ですが…
UBX-M8030
UBX-M8030はu-blox製の標準的なGNSSモジュールです。
L1のみ対応となっていますが、u-bloxのGUIアプリケーション「u-center」の設定によっては10Hz出力や接続先の衛星の設定を変えたりできます。
GUIで詳細に設定できてドキュメントが充実しているGNSSとしては激安ですね。
RTKやマルチバンドには対応していないので、これらを使いたい場合はZED F9Pなどの高精度GNSSを購入するといいでしょう。
設定
ここからはWindows11 Homeを使用します。
u-centerのダウンロード
※ 秋月のページから確認することもできます。
まず、以下のページからu-centerのダウンロードを行います。(u-center2ではありません!)
ドライバのアンインストールとインストール
Windows11では正しくドライバが認識しないようで、デバイスマネージャーを開くと「THIS IS NOT PROLIFIC PL2303. PLEASE CONTACT YOUR SUPPLIER.」という名前で認識されていました。
これを右クリック→アンインストールでアンインストールしてから、秋月のページから PL2303G_Prolific_DriverInstaller_v130.zip
をダウンロードします。
中に入っている PL2303G_130_20190311.exe
を実行してドライバをインストールすると正しく認識されるようになります。
設定
Windows11上で次の項目を上から順に設定しました。
- ボーレート:115200
- 更新頻度:10Hz
- 出力フォーマット:NMEA・GPRMC
ボーレートは更新頻度を10Hzにするために上げます。
NMEAフォーマットは以下のサイトで詳しく解説しています。
u-centerを開くと、次のようなウィンドウが開くので赤枠のプルダウンからポートを選択して矢印の接続ボタンを押して接続します。
ボーレートは購入初期状態では9600になっています。
まず、ボーレートを115200にします。
設定画面を開く場合は、
View(F9)
からMessage View
→UBX
を選択します。
ボーレートは UBX
の CFG
→ PRT
を選択して Baudrate
で設定します。
設定したら一旦 send
を押します。
最後に CFG
→ CFG
に移動して保存します。
保存すると、接続が切れてしまうので、ボーレートを115200に設定してから再度ポートを開きます。
次に周期を設定します。
CFG
→ RATE
を選択して Measurement Period
を調整します。
buadrateと同様に保存します。
最後にフォーマットを設定します。
CFG
→ MSG
を選択して Message
を調整します。
チェック項目はデフォルトで大丈夫だと思います。
buadrateと同様に保存します。
Ubuntu22での動作
ここからはUbuntu22での作業になります。
Ubuntuの場合、デフォルトのドライバで/dev/ttyUSB0
に接続されます。
ボーレートを115200にした場合、catコマンドで出力を確認できます。
ROS2での動作
ROS2では nmea_navsat_driver
で動作できます。(Ubloxではうまく動きませんでした…)
aptでインストールできないので、ビルドする必要があります。
必要に応じて依存関係をダウンロードしてください。
mkdir ws_nmea/src -p cd ws_nmea/src git clone https://github.com/ros-drivers/nmea_navsat_driver -b ros2 sudo apt install ros-humble-tf-transformations sudo pip3 install transforms3d cd .. colcon build
デバイスの設定については、 nmea_serial_driver.yaml
を編集します。
nmea_navsat_driver: ros__parameters: port: "/dev/ttyUSB0" baud: 115200 frame_id: "gps" time_ref_source: "gps" useRMC: False
実行は以下のコマンドで実行します。
source ~/ws_nmea/install.bash ros2 launch nmea_navsat_driver nmea_serial_driver.launch.py
ros2トピックの確認は次のコマンドで確認できます。
source ~/ws_nmea/install.bash ros2 topic echo /fix
データ型は sensor_msgs/msg/NavSatFix
です。
最初は受信待ちをするため位置が決まりませんが、しばらくすると受信できるようになります。
データの status/status
を確認するといいでしょう。
補足: /dev/ttyUSB0
で接続したくない場合
他のUSBシリアルモジュールを接続すると、ttyUSB0だと不都合が起こる場合があります。
固有IDを使って接続する方法はいくつかありますが、私はudevルールを編集してシンボリックリンクを貼る方法を使っているので紹介します。
ここでは、 gnssが接続されたときに /dev/ttyUSBx
以外に /dev/gnssx
と /dev/ublox-m8-x
にシンボリックリンクを貼ります。
lsusb
でIDを確認した上で次のコマンドを入力します。
VENDORは 067b
、PRODUCTは 2303
でした
echo 'SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", SYMLINK+="gnss%n", SYMLINK+="ublox-m8-%n", MODE="0666"' > ./99-ublox-m8.rules sudo cp ./99-ublox-m8.rules /etc/udev/rules.d/99-ublox-m8.rules sudo udevadm control --reload-rules sudo udevadm trigger
これで /dev/gnss0
を指定してデバイスを接続できるようになります。