< >
Home » ROS2与Matlab入门教程 » ROS2与Matlab入门教程-连接到ROS2网络

ROS2与Matlab入门教程-连接到ROS2网络

说明:

  • 介绍如何MATLAB连接到ROS2网络

介绍:

  • 一个ROS2网络由多个ROS2节点组成

  • 与ROS主机通过跟踪所有活动的ROS实体来促进通信的ROS不同,ROS2基于数据分发标准(DDS) ,它是一种端到端的中间件,提供发现、序列化和传输等功能

步骤:

  • 连接到 ROS 2 网络。要连接到 ROS 2 网络,您必须在 MATLAB 中创建一个 ROS 2 节点,指定domain ID

  • 交换数据。连接后,MATLAB 通过发布者和订阅者与同一域 ID 中的其他 ROS 2 节点交换数据

  • 断开与 ROS 2 网络的连接。清除对节点、发布者和订阅者的所有引用会从 ROS 2 网络中删除 MATLAB

  • 在默认域中创建 ROS 2 节点

  • ros2node在默认域中创建节点,默认域使用0. 节点与同一域中的其他节点通信,并且不知道其他域中的节点

defaultNode = ros2node("/default_node")

defaultNode = 
  ros2node with properties:

Name: '/default_node'
  ID: 0
  • 用于clear删除对节点的引用,允许将其从 ROS 2 网络中删除
clear defaultNode
  • 在不同的域上创建 ROS 2 节点

  • 要在非默认域中创建节点,请显式指定域 ID 作为 的第二个输入参数ros2node。下面newDomainNode是在 ID 指定的域中创建的25

newDomainNode = ros2node( "/new_domain_node" ,25)

newDomainNode = 
  ros2node with properties:

    Name: '/new_domain_node'
      ID: 25
  • 要查看特定域的网络信息,请将 ID 作为参数提供给ros2函数。以下命令显示具有域 ID 的所有节点25
ros2("node","list","DomainID",25)

/new_domain_node
  • 更改默认域 ID

  • 如果域 ID 未明确提供给节点或ros2命令,则默认情况下它们使用ROS_DOMAIN_ID环境变量的值。用于getenv查看当前值。如果该环境变量未设置或未设置为有效值,则将0使用默认域 ID

getenv( "ROS_DOMAIN_ID" )

ans =

  0x0 empty char array
  • ROS_DOMAIN_ID使用setenv命令进行设置
setenv( "ROS_DOMAIN_ID" , "25" ) 
envDomainNode = ros2node( "/env_domain_node" )

envDomainNode = 
  ros2node with properties:

    Name: '/env_domain_node'
      ID: 25
  • ros2 函数提供由该环境变量指定的网络信息。用于ros2 node list查看具有域 ID 的节点25
ros2 node list

/env_domain_node
/new_domain_node
  • 重置ROS_DOMAIN_ID为默认值
setenv("ROS_DOMAIN_ID","")
  • ROS 2 网络中的通信

  • 要连接到现有的 ROS 2 网络,请在所需域中创建一个节点。ROS 2 网络以一种称为发现的机制自动检测在同一域中创建的任何新节点

  • 启动时,ROS 2 中的每个节点都会将其存在通告给同一域中的其他节点。其他节点通过向新节点提供它们的信息来响应这个通告。

  • 如果具有具有兼容服务质量 (QoS) 设置的相应对象,则具有诸如发布者和订阅者之类的通信对象的节点与其他节点建立连接

  • 发现是一个持续的过程,它使新节点能够在创建时加入网络。每个节点都在监视 ROS 2 网络,其行为类似于 ROS 网络中的 ROS 主节点。节点在离线时也会向其他节点通告它们的缺席

请输入图片描述

  • 新的 ROS 2 节点将其广告发送到现有节点。现有节点响应广告,然后为正在进行的通信进行设置

  • 子网外的 ROS 通信

  • 子网是将 IP 网络逻辑划分为多个较小的网段。ROS 2 节点可以与同一子网内的其他节点通信。要检测子网之外的节点,请创建一个DEFAULT_FASTRTPS_PROFILE.xml文件来配置 MATLAB 使用的特定 DDS 实现。添加与内部address元素通信的子网外部系统的 IP 地址列表。请注意,要让两个系统进行通信,它们都必须在各自的DEFAULT_FASTRTPS_PROFILE.xml文件中指定另一个系统的地址。将该domainId元素设置为用于通信的网络的适当值

  • 将此文件保存在 MATLAB Current Working Directory中。在 MATLAB 之外使用 ROS 2 的系统应将此文件放在运行 ROS 2 应用程序的同一目录中。下面是一个示例DEFAULT_FASTRTPS_PROFILES.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<profiles>
    <participant profile_name="participant_win" is_default_profile="true">
        <rtps>
            <builtin>
                <domainId>0</domainId>
                 <initialPeersList>
                     <locator>
                         <kind>UDPv4</kind>
                         <address>192.34.17.36</address>
                     </locator>
                     <locator>
                         <kind>UDPv4</kind>
                         <address>182.30.45.12</address>
                     </locator>
                     <locator>
                         <kind>UDPv4</kind>
                         <address>194.158.78.29</address>
                     </locator>
                 </initialPeersList>
             </builtin>
         </rtps>
     </participant>
</profiles> 
  • ROS 2 向系统中存在的节点发布信息,其 IP 地址列在DEFAULT_FASTRTPS_PROFILES.xml中。如果DEFAULT_FASTRTPS_PROFILES.xml不存在或不包含正确的 IP 地址,则不会收到来自子网外另一台机器的节点的信息

请输入图片描述

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与matlab入门教程