🤖

topic名をremapして2つのGNSSデータを別々に購読する

2024/09/03に公開

はじめに

nmea_navsat_driverでGNSSデータを購読する中で同じクライアントに2つのGNSSセンサを接続してそれぞれの位置情報を取得したくなった。この場合、各用のnmea_navsat_driverを起動すると同じトピック名に2つのセンサーデータが載ってしまうのでどちらのセンサーデータか見分けがつかない。

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

この対策としてnmea_navsat_driver起動時にトピック名をremapすることにした。

やってみる

Remappingについてはここに解説がある。

具体的には次のようにした。GNSSセンサは/dev/ttyACM0/dev/ttyACM1としてそれぞれシリアル接続されているとする。

実行例

ros2 run nmea_navsat_driver nmea_serial_driver --ros-args -p port:=/dev/ttyACM0 -p baud:=9600 -r /fix:=/base/fix
ros2 run nmea_navsat_driver nmea_serial_driver --ros-args -p port:=/dev/ttyACM1 -p baud:=9600 -r /fix:=/rover/fix

--ros-args -r /fix:=/base/fix とすることで/fix/base/fixにリマップしている。

トピックリストを確認する

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

/base/fix/rover/fixにそれぞれ変更されている

ros2 topic echo /base/fix
header:
  stamp:
    sec: 1725340635
    nanosec: 504079643
  frame_id: gps
status:
  status: -1
  service: 1
latitude: .nan
longitude: .nan
altitude: .nan
position_covariance:
- 9998000100000000.0
- 0.0
- 0.0
- 0.0
- 9998000100000000.0
- 0.0
- 0.0
- 0.0
- 1.599680016e+17
position_covariance_type: 0
---
header:
  stamp:
    sec: 1725340636
    nanosec: 504510274
  frame_id: gps
status:
  status: -1
  service: 1
latitude: .nan
longitude: .nan
altitude: .nan
position_covariance:
- 9998000100000000.0
- 0.0
- 0.0
- 0.0
- 9998000100000000.0
- 0.0
- 0.0
- 0.0
- 1.599680016e+17
position_covariance_type: 0

おわりに

topic名をremapして重複を避けることで同じパッケージで複数のセンサーデータを扱う場合でもそれぞれのデータを購読して取り扱うことができる。このへんが柔軟に設定できるのはとても便利だと思う。

Discussion