Network Bridge は、任意のネットワーク プロトコルを介したロボット システム間の堅牢な通信のために設計された軽量の ROS2 ノードです。このパッケージは、すぐに使用できる UDP および TCP プロトコルをサポートし、ネットワーク全体で ROS2 トピックをシームレスに橋渡しし、基地局とロボット システム間、または複数のロボット システム間の効果的なリモート通信を促進します。
リポジトリのクローンを ROS2 ワークスペースに作成し、 colcon build
でビルドするだけです。
ros2 launch network_bridge tcp.launch.py
ros2 topic pub /tcp1/MyDefaultTopic std_msgs/msg/String "data: 'Hello World'"
ros2 topic echo /tcp2/MyDefaultTopic
ros2 launch network_bridge udp.launch.py
ros2 topic pub /udp1/MyDefaultTopic std_msgs/msg/String "data: 'Hello World'"
ros2 topic echo /udp2/MyDefaultTopic
ネットワーク インターフェイス パラメータを設定し、希望するトピックをリストするだけで開始できます。携帯電話データで UDP を使用している場合は、接続を容易にするために VPN をセットアップすることをお勧めします。また、このパッケージ内では暗号化が行われないことにも注意してください。現在、暗号化が必要な場合は VPN を使用する必要があります。
すべてのパラメータの説明と TCP 設定ファイルの例については、 config/Udp1.yaml
を参照してください。
次の構成例は、 /gps/fix
上のメッセージを UDP 経由でベースステーションに送信し、その後メッセージを再発行するロボットを示しています。これは、メッセージが送信の両端で構築され、ソースされる限り、すべてのメッセージ タイプでシームレスに機能します。
/udp_sender:
ros__parameters:
UdpInterface:
local_address: "192.168.1.2"
receive_port: 5001
remote_address: "192.168.1.3"
send_port: 5000
topics:
- "/gps/fix"
/udp_receiver:
ros__parameters:
UdpInterface:
local_address: "192.168.1.3"
receive_port: 5000
remote_address: "192.168.1.2"
send_port: 5001
ネットワーク プロトコルは pluginlib プラグインとして実装され、抽象クラスinclude/network_interfaces/network_interface_base.hpp
使用して任意のインターフェイスを作成できます。理論的には、ZMQ などのポイントツーポイント通信を超えるプロトコルを含め、バイトを送受信できるあらゆるインターフェイスを実装できます。新しいネットワーク インターフェイスを実装する場合は、プル リクエストを開くことを検討してください。
このノードはロガー レベルの DEBUG で起動でき、圧縮、レート、および古いメッセージのパラメーターを調整するための有用な情報を提供します。送信されるメッセージごとに、受信側は受信したバイト数、解凍後のサイズ (バイト単位)、および送信遅延を出力します。
このパッケージは、パーデュー AI レーシング チームによってインディ オートノマス チャレンジで使用するために開発されました。インスピレーションは mqtt_client (https://github.com/ika-rwth-aachen/mqtt_client/) から得られました。