主要内容

连接到ROS网络

一个ROS网络由单个的ROS的主人和多个ROS节点.ROS master通过跟踪所有活跃的ROS实体来促进ROS网络中的通信。每个节点都需要向ROS主节点注册,以便能够与网络的其他部分通信。MATLAB®可以启动ROS主程序,或者主程序可以在MATLAB之外启动(例如,在不同的计算机上)。

当你使用ROS时,你通常会遵循以下步骤:

  1. 连接到ROS网络.要连接到ROS网络,您可以在MATLAB中创建ROS master或连接到现有的ROS master。在这两种情况下,MATLAB也将创建并注册自己的ROS节点(称为MATLAB全球节点)与主人。的rosinit函数管理这个过程。

  2. 交换数据.一旦连接,MATLAB通过发布者、订阅者和服务与其他ROS节点交换数据。

  3. 断开ROS网络.调用rosshutdown函数断开MATLAB与ROS网络的连接。

这个例子向你展示了如何:

  • 在MATLAB中创建一个ROS master

  • 连接到外部ROS master

先决条件:开始使用ROS

在MATLAB中创建一个ROS Master

  • 要在MATLAB中创建ROS master,调用rosinit不带任何参数。该函数还创建了全局节点,MATLAB使用该节点与ROS网络中的其他节点通信。

rosinit
启动ROS Core... . 1.3452秒完成。在http://192.168.0.10:58759上初始化ROS master。使用NodeURI http://dcc864407glnxa64:40189/初始化全局节点/matlab_global_node_05162

MATLAB外部的ROS节点现在可以加入ROS网络。他们可以使用MATLAB主机的主机名或IP地址连接到MATLAB中的ROS主机。

您可以通过调用rosshutdown

rosshutdown
使用NodeURI http://dcc864407glnxa64:40189/关闭全局节点/matlab_global_node_05162

连接外部ROS Master

你也可以用therosinit命令连接到外部ROS主机(例如运行在机器人或虚拟机上)。您可以通过两种方式指定主服务器的地址:通过IP地址或通过运行主服务器的计算机的主机名。

每次呼叫之后rosinit,你必须打电话rosshutdown在调用之前rosinit使用不同的语法。简单地说,这些调用rosshutdown在这些例子中省略。

“master_host”是一个示例主机名和'192.168.1.1”此处以外部ROS master的IP地址为例。根据外部主服务器在网络中的位置调整这些地址。如果在指定的地址没有找到主机,这些命令将失败。

rosinit (“192.168.1.1”) rosinit (“master_host”

两个电话rosinit假设主机在端口11311上接受网络连接,该端口是标准的ROS主端口。如果主机运行在不同的端口上,可以将其指定为第二个参数。连接到以主机名运行的ROS主机master_host和端口12000,使用以下命令:

rosinit (“master_host”, 12000)

如果你知道master的整个统一资源标识符(URI),你可以创建全局节点并使用下面的语法连接到这个master:

rosinit (“http://192.168.1.1:12000”

节点主机规范

在某些情况下,您的计算机可能连接到多个网络并具有多个IP地址。这张插图展示了一个例子。

左下角的计算机运行MATLAB,并连接两个不同的网络。其中一个子网的IP地址为73.195.120.50,另一方面,它的IP是192.168.1.100.这台计算机想要连接到TurtleBot®计算机的IP地址上的ROS主机192.168.1.1.作为向master注册的一部分,MATLAB全局节点必须指定其他ROS节点可以到达的IP地址或主机名。TurtleBot上的所有节点都将使用这个地址向MATLAB中的全局节点发送数据。

rosinit使用主节点的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_URIROS_HOSTNAME,ROS_IP.的当前值采用命令:

采用“ROS_MASTER_URI”getenv ()“ROS_HOSTNAME”getenv ()“ROS_IP”

属性可以设置这些变量setenv命令。设置环境变量后,调用rosinit不带参数。指定ROS主机的地址ROS_MASTER_URI,全局节点的通告地址为ROS_IPROS_HOSTNAME.如果你指定额外的参数rosinit,它们会覆盖环境变量中的值。

setenv (“ROS_MASTER_URI”“http://192.168.1.1:11311”setenv ()“ROS_IP”“192.168.1.100”) rosinit

您不必同时设置两者ROS_HOSTNAMEROS_IP.如果两者都设置了,ROS_HOSTNAME优先。

验证连接

为了让您的ROS连接正常工作,您必须确保所有节点都能与主节点以及彼此之间进行通信。单个节点必须与主节点通信,以注册订阅者、发布者和服务。它们还必须能够相互通信以发送和接收数据。如果您的ROS网络没有正确设置,可能会发送数据而无法接收数据(反之亦然)。

这个图显示了一个具有单个ROS主节点和两个向主节点注册自己的不同节点的ROS网络。每个节点都与主节点联系,以查找ROS网络中其他节点的通告地址。一旦每个节点知道另一个节点的地址,数据交换就可以建立,而无需主机的参与。

下一个步骤