我在Raspberry PI上的Ubuntu 20上启动ROS,将ROS_HOSTNAME设置为$(hostname).local
,ROS_MASTER_URI设置为http://$(hostname):11311
。问题是,如果我连接到WiFi,然后连接失败(例如,如果WiFi超出范围),那么机器人将停止正常工作。
我在想,一个可能的解决方案是创建一个新的网络接口或VLAN,并在该网络上启动ROS,然后将该新网络桥接到wlan接口,这样可以使ROS连接的网络独立于wlan接口。但如果wlan在线,它仍然可以访问网络。我还想保留连接到机器人的可能性通过WLAN网络上的另一个设备发送ROS。
我在这里寻求帮助是因为我没有足够的网络知识来解决这个问题。所以任何指导都将是感激的。如果有其他更好的方法来解决这个问题,请让我知道。
1条答案
按热度按时间7tofc5zh1#
我建议使用ros_bridge与机器人进行通信。如果您的机器人有一个Web界面,并且您需要在Web上可视化机器人后端的一些数据,或者甚至向机器人发送命令,则经常使用x1e0 f1 a。与此节点对应的是
roslibjs
库。您可以在here中找到要了解更多信息,您可以查看Robot Web Tools,这是一个基于Web的机器人应用程序工具集合。
但是,也许你对web应用程序不感兴趣;你仍然可以将
ros_bridge
与roslibpy一起使用,roslibpy是rosbridge协议的python实现。它与roslibjs
相同,但它使用python而不是javascript。您可以轻松地创建一个python应用程序,它将使用
roslibpy
订阅或发布主题或调用服务。这种方法更好,因为您将封装您的机器人后端,并且您可以使用
ros_bridge
节点的参数控制外部世界可以看到的内容。如果您的机器人失去wifi连接,您还可以更好地处理重新连接。尽管如此,您仍然可以使用公开的
ROS_MASTER_URI
进行rviz和debug proposes,但我不会尝试使用它来控制机器人,因为如果您失去wifi连接,节点之间的连接将不会重新创建。在我的工作中,我们在AMR产品中使用了一段时间的
ros_bridge
,我不得不说,它并不像我最初想象的那样健壮。例如,当机器人改变wifi接入点时,会出现问题,缓存消息的行为也不符合文档。对于网络,我们仍然使用它,但为了控制一群移动的机器人,我们不得不放弃它。并且我们开发了基于RabbitMQ的解决方案。但我猜如果你使用的是Raspberry Pi,那么它就不是一个生产机器人,因此我认为你应该可以使用
ros_bridge
。