네트워크 브리지는 임의의 네트워크 프로토콜을 통해 로봇 시스템 간의 강력한 통신을 위해 설계된 경량 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
참조하세요.
다음 구성 예는 로봇이 UDP를 통해 /gps/fix
의 메시지를 기지국에 보낸 후 메시지를 다시 게시하는 방법을 보여줍니다. 이는 전송의 양쪽 끝에서 작성되고 소스되는 한 모든 메시지 유형에서 원활하게 작동합니다.
/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로 시작할 수 있습니다. 전송되는 각 메시지에 대해 수신측에서는 수신된 바이트 수, 압축 해제된 크기(바이트) 및 전송 지연을 출력합니다.
이 패키지는 Purdue AI Racing 팀이 Indy Autonomous Challenge에 사용하기 위해 개발했습니다. mqtt_client(https://github.com/ika-rwth-aachen/mqtt_client/)에서 영감을 얻었습니다.