原链接: https://community.bwbot.org/topic/634
开发测试平台: 小强机器人
在有些情况下我们想要连接远程的master节点是没办法设置hosts文件的。比如在Android上运行rosjava时。这样就导致我们能够发布消息到远程节点,但是却无法订阅远程消息。问题在于默认的ROS_MASTER_URI
是http://computer-name:11311
。而我们连接的时候是通过IP连接的,这样导致本地节点订阅的是http://xxx.xxx.xxx.xxx:11311
,其中xxx.xxx.xxx.xxx
是远程机器的IP。这两个不一致,导致无法订阅消息。
解决方法是把远程的ROS_MASTER_URI
也设置成IP的形式。这个可以通过设置ROS_IP
变量实现。比如在launch文件内添加
<env name="ROS_IP" value="xxx.xxx.xxx.xxx" />
但是实际使用的时候远程节点IP可能并不是固定的。这样设置之后一旦IP发生变化,程序就没办法继续运行了。下面介绍一个更好的方法。使用robot_upstart
软件包
安装robot_upstart
软件包
sudo apt-get install ros-kinetic-robot-upstart
安装自启动服务
rosrun robot_upstart install --interface enp2s0 startup/launch/startup.launch
需要注意的是这里的 --interface
参数。这个参数指定网络设备,在程序启动的时候会自动获取这个网络设备的IP然后设置到ROS_IP
环境变量。这样ROS_MASTER_URI
就会和当前的IP一致。