Network Bridge é um nó ROS2 leve projetado para comunicação robusta entre sistemas robóticos em protocolos de rede arbitrários. Suportando protocolos UDP e TCP prontos para uso, este pacote conecta perfeitamente tópicos ROS2 entre redes, facilitando comunicações remotas eficazes entre uma estação base e sistemas robóticos, ou entre vários sistemas robóticos.
Simplesmente clone o repositório em seu espaço de trabalho ROS2 e construa com 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
Basta configurar os parâmetros da interface de rede e listar os tópicos desejados para começar. Se você estiver usando UDP em dados de celular, é recomendável configurar uma VPN para facilitar a conexão. Além disso, observe que nenhuma criptografia ocorre neste pacote. Atualmente, se desejar criptografia, você deve usar uma VPN.
Consulte config/Udp1.yaml
para obter uma descrição de todos os parâmetros, bem como os arquivos de configuração de exemplo do TCP.
Os exemplos de configuração a seguir demonstram um robô enviando uma mensagem em /gps/fix
por UDP para uma estação base que publicará novamente a mensagem. Isso funciona perfeitamente em todos os tipos de mensagens, desde que sejam criadas e originadas em ambas as extremidades da transmissão.
/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
Os protocolos de rede são implementados como plugins pluginlib, permitindo a criação de interfaces arbitrárias usando a classe abstrata include/network_interfaces/network_interface_base.hpp
. Qualquer interface que possa enviar e receber bytes poderia teoricamente ser implementada, incluindo protocolos que vão além da comunicação ponto a ponto, como o ZMQ. Considere abrir uma solicitação pull se você implementar uma nova interface de rede.
Este nó pode ser iniciado com DEBUG de nível de criador de logs, que fornece informações úteis para ajustar os parâmetros de compactação, taxa e mensagem obsoleta. Para cada mensagem enviada, o lado receptor exibirá o número de bytes recebidos, o tamanho descompactado em bytes e o atraso de transmissão.
Este pacote foi desenvolvido para uso no Indy Autonomous Challenge pela equipe Purdue AI Racing. A inspiração foi tirada de mqtt_client (https://github.com/ika-rwth-aachen/mqtt_client/).