我在用着ROS 2(机器人中间件)同时存在于 WSL2 和同一台机器上的主机 Windows 操作系统中。
对于通信,ROS 2 使用 UDP 多播(它还附带一个方便的多播故障排除工具):
为了通过 DDS 成功通信,所使用的网络接口必须启用多播。我们在过去的经验中发现,在使用环回适配器时,此功能可能不一定默认启用(在 Ubuntu 或 OSX 上)。请参阅原始问题或者关于 ros-answers 的对话您可以使用 ROS 2 工具验证当前设置是否允许多播:
在 1 号航站楼:
ros2 multicast receive
在 2 号航站楼:
ros2 multicast send
因此我尝试进行诊断:
- 从 Win 向 Win 发送多播:有效
- 从 WSL2 向 WSL2 发送多播:有效
- 从 Win 向 WSL2 发送多播:它有效
- 从 WSL2 向 Win 发送多播:不起作用
如何启用从 WSL2 向 Windows 发送多播?
这ROS 2 文档继续:
如果第一个命令没有返回类似的响应:
Received from xx.xxx.xxx.xx:43751: 'Hello World!'
那么您将需要更新防火墙配置以允许使用 ufw 进行多播。
sudo ufw allow in proto udp to 224.0.0.0/4
sudo ufw allow in proto udp from 224.0.0.0/4
我在我的 WSL2(ubuntu-22)实例中运行上述两个ufw
命令,但仍然无法从 WSL2 向 Win 发送多播……