问题就出现了,ROS是通过节点的名字来通信的。当运行两个同名节点时,第二个节点将忽略用户权限并杀死原始节点。.当多个用户使用同一台机器调试ROS时,这种现象会造成很大的问题。分析ROS节点之间的p2p通信是通过master建立的。两个同名节点不能注册到一个master下,所以同名节点会被kill掉。ROSmaster运行时,会在某个端口上建立名称服务,例如默认端口为11311。节点建立后,会通过环境变量ROS_MASTER_URI将自己的名称注册到对应的master上。ROS_MASTER_URI的默认值为http://localhost:11311,对应默认的master。因此,你只需要在不同端口开启多个master,然后分别设置环境变量,建立一个相互隔离的ROS环境。解决方法可以通过-pport命令行参数指定rosmaster的端口终端1:#创建一个默认的rosmasterroscore#运行一个noderosrunmy_packagemy_nodeterminal2:#创建另一个rosmasterroscore-p23333#查看环境variableecho$ROS_MASTER_URI#http://localhost:11311#目前还是指向默认的master,修改环境变量为新的masterexportROS_MASTER_URI=http://localhost:23333#现在可以放心运行新节点rosrunmy_packagemy_node
