ROS中的ROS_MASTER_URI环境变量解析

ROS_MASTER_URI=http://localhost:11311中的ROS_MASTER_URI是什么呢?
URI是什么呢?查阅百度百科可知:
URI(Uniform Resource Identifier,统一资源标识符)就是在IMS网络中IMS用户的“名字”,也就是IMS用户的身份标识。别的不管,反正就是个标识。
查阅别人的博文如下:
如果需要远程链接,
需要在远程服务器将ROS_MASTER_URI变为启动roscore的地址,即master地址
比如export ROS_MASTER_URI=http://192.168.1.4:11311
设定master地址之后,启动服务的时候,发现在master服务器上执行rosnode list可见这个服务,但是调用其服务,不能链接。
所以在远程机器上的环境变量还需要添加远程服务器自己的IP(否则默认是主机名,但master根据主机名找不到远程服务器)

所以说,当用电脑A用ROS操作系统控制机器人(B,C,D)时,此时的ROS_MASTER_URI是主机地址,也就是电脑A,不是机器人B,机器人C,机器人D。
那么为什么有了IP地址还需要主机名呢?
查阅百度可知:
ip地址等于身份证号,主机名等于姓名,身份证号是独一无二的
就像身份证,主机名就是你的姓名,让别人可以看到并知道你是谁~~IP地址就像是身份证号,别人喊你不可能喊你的身份证号吧?其他电脑要识别你只能是通过IP地址。其实就是主机名是让其他用电脑的人能知道你是谁?IP地址是让其他的电脑知道你在哪里~~
实际上不管是IP地址还是主机名都是为了标识一台主机或者服务器。IP地址就是一台主机上网时网络给它的一个地址。主机名就相当于又给这台机器取了个名字。你可以取各种各样的名字,如果你要用这个名字去访问这台主机,系统怎么通过这个名字去识别一台主机呢?那么就需要我们配置他们之间的对应关系。配置对应关系在/etc/hosts中配置。在文件中按照对应格式添加IP地址和主机名:比如:192.168.74.134 hostname。
因为要实现各个机器都能够互相识别,所以就要在各个机器上都配置所有节点的主机名和IP之间的对应关系。主机名可以解析为IP地址,IP地址也可以解析为相应的主机名

下面将详述具体的配置过程:
首先在终端中查看本机的IP:

$ifconfig

下拉显示的内容,找到Inet addr,如下图所示,我的ip地址为127.0.0.1
ROS中的ROS_MASTER_URI环境变量解析
文章图片

然后
vim ~/.bashrc

在最后添加
  1. export ROS_HOSTNAME=你的hostname
  2. export ROS_MASTER_URI=http://(你想要设置为主机的IP):11311
  3. export ROS_IP=192.168.3.10 (本机的IP)
下面将解释上面三行代码:
上面三行代码的export的作用是导入全局变量,因为ROS_HOSTNAME是ROS的全局环境变量,在脚本文件.bashrc中不能直接使用它们,必须得使用export将全局变量导入才能使用它们。
注意,在这里的ROS_MASTER_URI要设置为你想要当作主机的IP,主机从机这里要设置为一致的IP,另外最好加上ROS_IP。
那么对于主机的的.bashrc上面应该设置为:
exportROS_HOSTNAME=主机的hostname
exportROS_MASTER_URI=主机的IP:11311(也就是说11311是固定的)
exportROS_IP=主机的IP地址
那么对于从机的.bashrc上面应该设置为:
exportROS_HOSTNAME=从机的hostname
exportROS_MASTER_URI=主机的IP:11311
exportROS_IP=从机的IP地址
同样的,在主机上修改 /etc/hosts 文件,加入从机的ip及hostname。
第四步:告诉ROS系统,谁才是老大!
分别在主机和从机上使用vim或其他编辑器修改 ~/.bashrc 文件,在末尾加

export ROS_HOSTNAME=SLAM
exprot ROS_MASTER_URI=http://10.10.40.174:11311


【ROS中的ROS_MASTER_URI环境变量解析】

    推荐阅读