连接到ROS网络
ROS网络由单个ROS的主人和多个ROS节点.ROS主机通过跟踪所有活动的ROS实体来促进ROS网络中的通信。每个节点都需要向ROS主机注册,以便能够与网络的其余部分通信。MATLAB®可以启动ROS主程序,也可以在MATLAB之外启动主程序(例如,在不同的计算机上)。
当您使用ROS时,通常要遵循以下步骤:
连接ROS网络.要连接到ROS网络,您可以在MATLAB中创建ROS主机或连接到现有的ROS主机。在这两种情况下,MATLAB还将创建并注册自己的ROS节点(称为MATLAB全球节点)和主人。的
rosinit
函数管理此进程。交换数据.一旦连接,MATLAB通过发布者、订阅者和服务与其他ROS节点交换数据。
断开ROS网络连接.调用
rosshutdown
函数断开MATLAB从ROS网络。
这个例子告诉你如何:
在MATLAB中创建一个ROS master
连接到外部ROS主机
先决条件:从ROS开始
在MATLAB中创建ROS Master
要在MATLAB中创建ROS master,请调用
rosinit
没有任何争论。该函数还创建全局节点,MATLAB使用该节点与ROS网络中的其他节点通信。
rosinit
启动ROS核心…耗时0.37326秒。在http://172.29.205.71:50844上初始化ROS master。初始化全局节点/matlab_global_node_57049,使用NodeURI http://dcc066343glnxa64:41725/和MasterURI http://localhost:50844。
MATLAB外部的ROS节点现在可以加入ROS网络。它们可以使用MATLAB主机计算机的主机名或IP地址连接到MATLAB中的ROS主机。
您可以通过调用关闭ROS主节点和全局节点rosshutdown
.
rosshutdown
使用NodeURI http://dcc066343glnxa64:41725/和MasterURI http://localhost:50844关闭全局节点/matlab_global_node_57049。在http://172.29.205.71:50844上关闭ROS master。
连接到外部ROS主机
你也可以使用rosinit
命令连接到外部ROS主机(例如在机器人或虚拟机上运行)。可以通过两种方式指定主机的地址:通过IP地址或运行主机的计算机的主机名。
每次呼叫rosinit
,你得打电话rosshutdown
在调用之前rosinit
用不同的语法。为简洁起见,这些调用rosshutdown
在这些例子中省略。
“master_host”
是一个示例主机名,'192.168.1.1”
为外部ROS master的IP地址示例。根据外部主机在网络中的位置调整这些地址。如果在指定的地址上没有找到master,这些命令将失败。
rosinit (“192.168.1.1”) rosinit (“master_host”)
都调用rosinit
假设主服务器在端口11311上接受网络连接,这是标准的ROS主端口。如果主服务器运行在不同的端口上,则可以将其指定为第二个参数。连接到在主机名上运行的ROS主机master_host
和端口12000,使用以下命令:
rosinit (“master_host”, 12000)
如果你知道主节点的整个统一资源标识符(URI),你可以创建全局节点并使用下面的语法连接到这个主节点:
rosinit (“http://192.168.1.1:12000”)
节点主机规格
在某些情况下,您的计算机可能连接到多个网络并具有多个IP地址。这幅图展示了一个例子。
左下角的计算机运行MATLAB并连接到两个不同的网络。在一个子网中,IP地址为73.195.120.50,
在另一个中,它的IP是192.168.1.100
.这台计算机想要在IP地址上连接到TurtleBot®计算机上的ROS主机192.168.1.1
.作为向主机注册的一部分,MATLAB全局节点必须指定其他ROS节点可以到达的IP地址或主机名。TurtleBot上的所有节点都将使用该地址将数据发送到MATLAB中的全局节点。
当rosinit
调用主节点的IP地址时,它会尝试检测用于联系主节点的网络接口,并将其用作全局节点的IP地址。方法显式指定IP地址或主机名NodeHost
属性中的名称-值对rosinit
调用。的NodeHost
名称-值对可以与前面介绍的任何其他语法一起使用。
这些命令将计算机的IP地址通告给ROS网络为192.168.1.100
.
rosinit (“192.168.1.1”,“NodeHost”,“192.168.1.100”) rosinit (“http://192.168.1.1:11311”,“NodeHost”,“192.168.1.100”) rosinit (“master_host”,“NodeHost”,“192.168.1.100”)
一旦一个节点在ROS网络中注册,您就可以通过使用命令看到它发布的地址rosnode
信息
< nodename >
.通过调用,可以看到所有已注册节点的名称rosnode列表
.
ROS环境变量
在高级用例中,您可能希望通过标准ROS环境变量指定ROS主服务器的地址和所发布的节点地址。前面几节中解释的语法应该足以满足大多数用例的需求。
如果没有提供参数rosinit
,该函数还会检查标准ROS环境变量的值。这些变量是ROS_MASTER_URI
,ROS_HOSTNAME
,ROS_IP
.控件可以查看它们的当前值采用
命令:
采用“ROS_MASTER_URI”getenv ()“ROS_HOSTNAME”getenv ()“ROS_IP”)
属性设置这些变量setenv
命令。设置完环境变量后,调用rosinit
没有争论。ROS主服务器的地址由ROS_MASTER_URI,
全局节点的通告地址由ROS_IP
或ROS_HOSTNAME
.的附加参数rosinit
时,它们会覆盖环境变量中的值。
setenv (“ROS_MASTER_URI”,“http://192.168.1.1:11311”setenv ()“ROS_IP”,“192.168.1.100”) rosinit
你不需要同时设置ROS_HOSTNAME
而且ROS_IP
.如果两者都设置好了,ROS_HOSTNAME
优先。
验证连接
为了使ROS连接正常工作,必须确保所有节点都可以与主节点通信,并彼此通信。各个节点必须与主节点通信以注册订阅者、发布者和服务。它们还必须能够相互通信以发送和接收数据。如果您的ROS网络没有正确设置,则有可能能够发送数据而无法接收数据(反之亦然)。
该图显示了一个具有单个ROS主节点和两个向主节点注册的不同节点的ROS网络。每个节点都与主服务器联系,以查找ROS网络中其他节点的公告地址。一旦每个节点都知道另一个节点的地址,就可以在没有主节点参与的情况下建立数据交换。
下一个步骤
看到与ROS发布者和订阅者交换数据来探索ROS中的出版商和订阅者。