🤖
topic名をremapして2つのGNSSデータを別々に購読する
はじめに
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