【发布时间】:2023-02-08 02:39:38
【问题描述】:
问题
我在 2 台计算机上安装了 ROS 2 foxy,并尝试在一台机器上运行 demo talker,在另一台机器上运行 demo listener。不幸的是它不起作用。
然而:
- ros2 多播测试有效;
- 当我完全禁用防火墙时,talker/listener 确实可以工作。
我想知道如何配置防火墙(或任何其他系统参数),以便谈话者/听众无需完全禁用防火墙即可工作。
请注意,ros2 是直接安装在操作系统上,而不是在 Docker 中。
电脑
两台电脑:
- 在同一个网络(带简单路由器的家庭网络);
- 通过电缆连接到路由器;
- 有静态IP;
- 运行 Ubuntu 20.04.5 LTS(焦点)。
$ lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.5 LTS
Release: 20.04
Codename: focal
防火墙:启用 UDP 多播
我已配置 ufw 以允许在两台机器上按照 ref 进行 UDP 多播。 [1] 下面。
$ sudo ufw allow in proto udp to 224.0.0.0/4
Rule added
$ sudo ufw allow in proto udp from 224.0.0.0/4
Rule added
$ sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 224.0.0.0/4/udp ALLOW IN Anywhere
[ 3] Anywhere ALLOW IN 224.0.0.0/4/udp
[ 4] 22/tcp (v6) ALLOW IN Anywhere (v6)
按照此配置,我能够在两台机器之间运行 ros2 多播测试。
machine1 $ ros2 multicast send
Sending one UDP multicast datagram...
machine2 $ ros2 multicast receive
Waiting for UDP multicast datagram...
Received from 192.168.1.108:34434: 'Hello World!'
然而,说话者/听者听不到对方的声音。
machine1 $ ros2 run demo_nodes_cpp talker
[INFO] [1672838648.074547042] [talker]: Publishing: 'Hello World: 1'
[INFO] [1672838649.074330969] [talker]: Publishing: 'Hello World: 2'
machine2 $ ros2 run demo_nodes_cpp listener
(waits forever...)
防火墙:禁用
通过禁用两台机器上的防火墙,谈话者/听众可以听到对方的声音。
machine1 $ sudo ufw disable
Firewall stopped and disabled on system startup
machine1 $ ros2 run demo_nodes_cpp listener
[INFO] [1672838846.953415499] [listener]: I heard: [Hello World: 1]
[INFO] [1672838847.953088937] [listener]: I heard: [Hello World: 2]
machine2 $ sudo ufw disable
Firewall stopped and disabled on system startup
machine2 $ ros2 run demo_nodes_cpp talker
[INFO] [1672838846.944245747] [talker]: Publishing: 'Hello World: 1'
[INFO] [1672838847.944211861] [talker]: Publishing: 'Hello World: 2'
问题
我如何配置我的防火墙(或任何其他操作系统参数),以便谈话者/听众可以看到对方而不必禁用防火墙?
参考
[1] https://docs.ros.org/en/foxy/How-To-Guides/Installation-Troubleshooting.html
【问题讨论】: