在ROS的环境变量中,需要在~/.bashrc中设置的并不多(此处是指在wiki的基本教程中出现的,大牛请无视),大概只有三个:
$ROS_MASTER_URI
$ROS_HOSTNAME
$ROS_IP
这三个是出现频率最高的。
$ROS_MASTER_URI比较好理解,就是整个ROS系统的主机的IP网址。注意是网址:
export ROS_MASTER_URI=http:
看见没,带http的!
而下面两个$ROS_HOSTNAME
和$ROS_IP
着实让我绕了好久。因为就是不知道改了哪里,roscore就进不去了。。。
所以下面一点点的实验:
实验为单机运行,也就是运行本机上的ROSCORE,先不涉及分布式配置。
本机的hostname为robin,IP为192.168.0.12
1、/etc/hosts中无添加内容,~/.bashrc中只有ROS_MASTER_URI:
/etc/hosts:
~/.bashrc:
export ROS_MASTER_URI=http:
OK,source后roscore一下,失败~!
看一下环境变量值:
robin@robin:~$ echo $ROS_MASTER_URI
http:
robin@robin:~$ echo $ROS_HOSTNAME
robin@robin:~$ echo $ROS_IP
hostname和IP都是没有值的。
2、仅在~/.bashrc中添加$ROS_IP,etc/hosts不变:
export ROS_MASTER_URI=http:
export ROS_IP=`hostname -I`
source后roscore,成功了。
3、仅在~/.bashrc中添加$ROS_HOSTNAME,etc/hosts不变:
export ROS_MASTER_URI=http:
export ROS_HOSTNAME=`hostname`
source后roscore,失败!
4、将3的HOSTNAME不用robin名称,换成IP值的话呢?
export ROS_MASTER_URI=http:
export ROS_HOSTNAME=`hostname -I`
成功!
5、还是换成3的情况,然后修改/etc/hosts呢?
bashrc:
export ROS_MASTER_URI=http:
export ROS_HOSTNAME=`hostname`
hosts:
192.168.0.12 robin
成功!
6、hosts为空,bashrc全都有呢?
export ROS_MASTER_URI=http:
export ROS_HOSTNAME=`hostname`
export ROS_IP=`hostname -I`
失败!
7、hosts写上,bashrc也写全呢?
hosts:
192.168.0.12 robin
bashrc:
export ROS_MASTER_URI=http:
export ROS_HOSTNAME=`hostname`
export ROS_IP=`hostname -I`
成功!
饶了好久才发现这个文章:http://www.mamicode.com/info-detail-915039.html
其中最重要的是:
- ROS_IP/ROS_HOSTNAME
ROS_IP和ROS_HOSTNAME是可选的环境变量,用来设置ROS节点或工具的公开网地址。这两个选项是互斥的,如果两者都设置优先使用ROS_HOSTNAME。如果你指定一个IP地址,使用ROS_IP;如果制定一个主机名(a host name),使用ROS_HOSTNAME。当一个ROS成员报告URI给master或者其他成员,这个值就会被用到。这个设置只用在一台计算机有多个地址,需要强制ROS到特定的一个的情况。
除了’localhost’(本地主机),ROS成员绑定到所有可用的网络接口,他不影响实际绑定地址。如果这个值设定为本地主机,ROS成员只绑定在环回接口。这将会阻止远程成员与本地成员交流。
说的直白一点就是,hostname的优先级要比IP的优先级高,设定了hostname就以hostname为准,不在管后面是否还有IP的设置。实验6失败,实验7成功,实验5成功。
这里的hostname设置又因为etc配置的原因,如果直接写上IP(hostname - I 实验4成功)就用这个IP了,没hosts什么事。但是若用名称的话(hostname 实验3失败,实验5成功),就需要在hosts中设置name的IP,不然会因为找不到名称的IP而启动不成功。
假若没有设置ROS_HOSTNAME
的话,才会去寻找$ROS_IP
实验2成功,这个就比较直接了,直接就是IP地址。
如果两个都没有的话,实验1 的结果就是不成功。所以还是需要有一个的。
主从机的分布式配置后面再写,有了上面的思路,应该好写
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)