连接到在另一台计算机上运行的Subscriber
何为“另一台计算机”
你可以认为是处于同一局域网内的另一台计算机,或者是通过VPN连接的远程计算机。
譬如,发布者计算机的 Ip 地址是 192.168.0.3,监听者计算机的 Ip 地址是 192.168.0.103.
实现办法
设置 ROS_DOMAIN_ID
ROS 2 使用 ROS_DOMAIN_ID 来隔离网络中的不同机器人群组。
所有电脑必须使用相同的 Domain ID。
默认 ID 是 0。
我们可以在发布者和监听者的电脑上设置相同的 ROS_DOMAIN_ID,例如:
1 | export ROS_DOMAIN_ID=30 |
即将 ROS_DOMAIN_ID 设置为 30,当然,你也可以选择其他数字,只要确保发布者和监听者使用相同的值即可。
设置 ROS_LOCALHOST_ONLY
ROS_LOCALHOST_ONLY 就是“仅本机模式”,如果设置为 1,ROS 2 将只在本地计算机上进行通信,不会与其他计算机进行通信。
因此,在发布者和监听者的电脑上都需要将 ROS_LOCALHOST_ONLY 设置为 0,以允许跨计算机通信:
1 | export ROS_LOCALHOST_ONLY=0 |
暂时关闭防火墙
DDS 使用 UDP 协议进行大量通信。
Linux 的防火墙(如 ufw 或 iptables)经常会拦截这些包。
因此,在发布者和监听者的电脑上暂时关闭防火墙,以确保 DDS 通信畅通:
1 | sudo ufw disable |
运行 node_one.py
在发布者计算机上运行 node_one.py:
1 | python3 node_one.py |
在监听者计算机上检查时候能否看到发布者的主题
在监听者计算机上运行以下命令,查看是否能够看到发布者的主题:
1 | ros2 topic list |
如果一切设置正确,你应该能够看到发布者的主题,例如 /chatter。
此时,你可以在监听者计算机上运行 ros2 topic echo /chatter 来查看发布者发送的消息:
1 | ros2 topic echo /chatter |
如果topic echo能够显示发布者发送的消息,那么你已经成功连接到在另一台计算机上运行的Subscriber了。
源码
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Isaac Sim Plus ROS 2!