🌟

nmea_navsat_driverをROS2で動かしてみる

2024/08/29に公開

はじめに

ROSでGNSSを利用したくなったのでnmea_navsat_driverを使ってみたが、ドキュメントがほぼない状態なのでリポジトリを漁りながら動かしたのでログを残しておきます。

環境&材料

やってみた

アンテナを接続したNEO-F9PとPCをUSBケーブルでつなぐ。しばらくして以下のコマンドでNMEAデータが送信されてきているかを確認する。/dev/ttyACM0は環境によっては/dev/ttyUSB0とかかもしれないので環境に応じて確認する

sudo cat /dev/ttyACM0

nmea_navsat_driverをビルドする

cd ~/ros2_ws/src
git clone https://github.com/ros-drivers/nmea_navsat_driver.git -b ros2
cd ~/ros2_ws
rosdep update && rosdep install --from-paths src --ignore-src -y
colcon build --packages-select nmea_navsat_driver

依存モジュールをインストールする

pip install src/nmea_navsat_driver/
pip install transforms3d
sudo apt-get install ros-humble-tf-transformations

実行する。そのままだと/dev/ttyACM0がパーミッションエラーになるので権限を変更してからやる

sudo chmod 666 /dev/ttyACM0
cd ~/ros2_ws
source ~/ros2_ws/install/setup.bash
ros2 run nmea_navsat_driver nmea_serial_driver --ros-args -p port:=/dev/ttyACM0 -p baud:=9600

正常に起動したらターミナルの別タブを開いてトピックリストを確認してみる

ros2 topic list
/fix
/heading
/parameter_events
/rosout
/time_reference
/vel

/parameter_events以外がnmea_navsat_driver関係のトピック

位置情報を読んでみる

ros2 topic echo fix

sensor_msgs/NavSatFix Messageが受信できた

header:
  stamp:
    sec: 1723801363
    nanosec: 176435832
  frame_id: gps
status:
  status: 1
  service: 1
latitude: 35.68948933333333
longitude: 139.69133083333333
altitude: 87.2
position_covariance:
- 0.0046240000000000005
- 0.0
- 0.0
- 0.0
- 0.0046240000000000005
- 0.0
- 0.0
- 0.0
- 0.07398400000000001
position_covariance_type: 1
---
header:
  stamp:
    sec: 1723801364
    nanosec: 172798509
  frame_id: gps
status:
  status: 1
  service: 1
latitude: 35.68948933333333
longitude: 139.691330
altitude: 87.2
position_covariance:
- 0.0046240000000000005
- 0.0
- 0.0
- 0.0
- 0.0046240000000000005
- 0.0
- 0.0
- 0.0
- 0.07398400000000001
position_covariance_type: 1
---
header:
  stamp:
    sec: 1723801365
    nanosec: 180197950
  frame_id: gps
status:
  status: 1
  service: 1
latitude: 35.689489166666665
longitude: 139.691330
altitude: 87.1
position_covariance:
- 0.004760999999999999
- 0.0
- 0.0
- 0.0
- 0.004760999999999999
- 0.0
- 0.0
- 0.0
- 0.07617599999999998
position_covariance_type: 1
---

おわりに

とりあえずROS2にGNSSの位置情報を流したかったので目的は達成できました。メッセージの内容はこれから精査していこうと思います。

Discussion