主要内容

连接到ROS网络

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

当您使用ROS时,通常要遵循以下步骤:

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

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

  3. 断开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_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_HOSTNAME而且ROS_IP.如果两者都设置好了,ROS_HOSTNAME优先。

验证连接

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

该图显示了一个具有单个ROS主节点和两个向主节点注册的不同节点的ROS网络。每个节点都与主服务器联系,以查找ROS网络中其他节点的公告地址。一旦每个节点都知道另一个节点的地址,就可以在没有主节点参与的情况下建立数据交换。

下一个步骤