@小鱼
我通过更改dds服务端口号的方法,在单机上能够将两组不同的“服务-talker-listener”隔离开,分别发布和订阅。
完成了上述验证后,开始两台电脑通过这种方式进行连接:
环境:
- 电脑1:作为发布端,服务也在这台电脑上运行(ip 192.168.82.51)
- 电脑2:作为订阅端
操作:
- 在电脑1上设定环境变量,启动服务
$env:ROS_DISCOVERY_SERVER="192.168.82.51:11815"
fastdds discovery --server-id 0 --ip-address 192.168.82.51 --port 11815
- 在电脑1新建终端,设定环境变量,启动talker
$env:ROS_DISCOVERY_SERVER="192.168.82.51:11815"
ros2 run demo_nodes_cpp talker
- 在电脑2新建终端,设定环境变量,启动listener
$env:ROS_DISCOVERY_SERVER="192.168.82.51:11815"
ros2 run demo_nodes_cpp listener
- 为了排除话题发布配置错误的问题,在电脑1上新建终端,设定环境变量,启动listener
$env:ROS_DISCOVERY_SERVER="192.168.82.51:11815"
ros2 run demo_nodes_cpp listener
结果:
- 电脑1 内的订阅者能够监听到发布者的消息
- 电脑2 内的订阅者能够监听到电脑1发布者的消息
最后的结论是,电脑通过wifi在局域网里连接,虽然udp可以联通,但组播的方式仍收到限制,最后通过集中式的发现协议成功联通。(撒花 ❀\ ^^/)