主要内容

在Simulink®中使用ROS 2开始金宝app

此示例显示如何使用ROS 2的Simulink块从本地ROS金宝app 2网络发送和接收消息。

介绍

金宝app用于机器金宝app人操作系统2(ROS 2)的Simulink支持使您可以创建与ROS 2网络合作的Simulink模型。ROS 2是一种通信层,其允许机器人系统的不同组件以形式交换信息信息.组件通过以下方式发送消息:出版这是一个特殊的问题话题, 如/里程计。其他组件通过以下方式接收消息:订阅到那个话题。

金宝app对ROS金宝app 2的Simulink支持包括Simulink块库,用于发送和接收指定主题的消息。当您模拟模型时,Simulink连接到ROS 2网络,该网金宝app络可以运行在与Simulink相同的机器上,也可以运行在远程系统上。一旦建立了这个连接,Simulink就会与ROS 2网络交换消息,直到模拟金宝app终止。如果安金宝app装了Simulink Coder™,您还可以从Simulink模型为独立ROS 2节点生成c++代码。

此示例显示了如何:

  • 创建并运行Simulink模型以发金宝app送和接收ROS 2消息

  • 使用ROS 2消息中的数据

先决条件:创建一个简单的模型开始使用ROS2

模型

您将使用Simulink发金宝app布Xy机器人的位置。您还将订阅相同的位置主题并显示收到的Xy地方

输入以下命令以打开已完成的模型在示例中创建。

开放式系统('ros2getstartedexample');

创建发布者

配置块以发送几何图形\u msgs/点消息到命名的主题/位置(修订)"/“是标准的ROS语法)。

  • 从Matlab ToolStrip,选择>刚出现的>金宝appSimulink模型打开一个新的Simulink金宝app模型。

  • 从Simulink金宝app ToolStrip,选择模拟>图书馆浏览器打开Simulink库浏金宝app览器。点击ROS工具箱选项卡(您也可以键入罗斯利夫在matlab命令窗口中)。选择活性氧2图书馆。

  • 出版块到模型。双击块以配置主题和消息类型。

  • 选择指定您自己的对于主题源,然后进入/位置在里面话题

  • 点击选择旁边消息类型。将出现一个弹出窗口。选择几何图形\u msgs/点点击好啊关闭弹出窗口。

创建ROS 2消息

创建一个空白的ROS 2消息,并使用机器人路径的x和y位置填充它。然后将更新的ROS 2消息发布到ROS 2网络。

ROS 2消息表示为总线信号在Si金宝appmulink中,总线信号是一组Simulink信号,也可以包括其他总线信号(参见探索Simuli金宝appnk总线功能(金宝appSimulink)概述示例)。ROS 2空白信息块输出与ROS 2消息对应的Si金宝appmulink总线信号。

  • 点击ROS工具箱在库浏览器中的选项卡或类型罗斯利夫在MATLAB命令行中,选择活性氧2图书馆。

  • 空白信息块到模型。双击块打开块遮罩。

  • 点击选择挨着消息类型框,选择几何图形\u msgs/点从生成的弹出窗口。放采样时间至0.01。单击好啊关闭块掩码。

  • 来自金宝app>信号路由在库浏览器中的选项卡,拖动a公交车分配堵塞。

  • 连接输出端口空白信息块到的总线输入端口公交车分配堵塞。连接输出端口公交车分配块到输入端口出版堵塞。

  • 双击公交车分配堵塞。您应该看到x,y和z(包括一个信号几何图形\u msgs/点消息)列在左侧。选择???信号1在右侧列表框中,单击去除.选择两者Xy在左侧列表框中显示信号,然后单击选择点击好啊应用更改。

注意:如果您没有看到列出的x、y和z,请关闭总线分配块的块掩码,并在造型标签点击更新模型确保总线信息已正确传播。如果您看到错误,则无法找到“选定信号”信号1',无法找到总线分配块中的“信号,表示总线信息尚未传播。关闭诊断查看器,重复上述步骤。

现在,您可以使用机器人位置填充总线信号。

  • 来自金宝app>来源选项卡,在库浏览器中拖动两个正弦波块进入模型。

  • 连接每个输出端口正弦波块到分配输入端口x和y公交车分配堵塞。

  • 双击正弦波连接到输入端口的块X。设定阶段参数到-pi/2点击好啊.离开正弦波块连接到输入端口y默认情况下。

您的出版商应该如下所示:

此时,将模型设置为将消息发布到ROS 2网络。您可以通过以下方式进行验证:

  • 模拟选项卡,将模拟停止时间设置为inf

  • 点击开始模拟。金宝appSimulink为模型创建一个专用的ROS 2节点,以及对应的ROS 2发布者出版堵塞。

  • 虽然模拟正在运行,请键入ros2节点列表在matlab命令窗口中。这列出了ROS网络中可用的所有节点,并包括具有名称的节点/ untitled_90580(模型的名称以及使其唯一的随机数)。

  • 虽然模拟正在运行,请键入ros2主题列表在MATLAB命令窗口中。这列出了ROS 2网络中可用的所有主题,包括/位置

  • 点击停止停止模拟。金宝appSimulink删除ROS 2节点和发布者。通常,模型的ROS 2节点和任何相关发布者和订户在模拟结束时会自动删除;不需要额外的清理步骤。

创建订阅服务器

使用Si金宝appmulink接收消息发送到/位置主题。您将从消息中提取x和y位置,并在xy平面中绘制。

  • 来自ROS工具箱在库浏览器中的选项卡,拖动a订阅块到模型。双击块。

  • 选择指定您自己的主题源框,然后输入/位置话题盒子。

  • 点击选择挨着消息类型框,选择几何图形\u msgs/点从弹出窗口。放采样时间至0.01。单击好啊关闭块掩码。

订阅块输出Simulink总线信号,金宝app因此您需要从中提取x和y信号。

  • 来自金宝app>信号路由在库浏览器中的选项卡,拖动a总线选择器块到模型。

  • 连接味精输出订阅块的输入端口总线选择器堵塞。

  • 来自造型选项卡,选择更新模型以确保总线信息被传播。你可能会得到一个错误,“在总线选择器块'untitled/Bus Selector'不能在输入总线信号中找到选定的信号'signal1'”。这个错误是预期的,将在下一步解决。

  • 双击总线选择器阻止。选择???信号1???signal2.在右侧列表框中,单击去除。在左侧列表框中选择x和y信号,然后单击选择点击好啊

订阅块将在每次步骤中输出最近收到的主题的消息。这是新的输出指示是否在上一个时间步长内接收到消息。对于当前任务是新的不需要输出,请执行以下操作:

  • 来自金宝app>下沉在库浏览器中的选项卡,拖动a终结者块到模型。

  • 连接是新的输出订阅块到输入的输入终结者堵塞。

其余步骤配置提取的显示Xy信号。

  • 来自金宝app>下沉选项卡,在库浏览器中拖动XY图块到模型。连接输出端口总线选择器块的输入端口XY图堵塞。

  • 来自金宝app>下沉选项卡,在库浏览器中拖动两个展示块到模型。连接模型的每个输出总线选择器各就各位展示堵塞。

  • 保存您的模型。

您的整个模型应该如下所示:

配置和运行模型

  • 来自造型选项卡,选择模型设置。在里面解算器窗格,套类型固定步骤固定步长0.01

  • 设置模拟停止时间10.0

  • 点击开始模拟XY绘图将出现。

当您第一次在Simulink中运行模型时金宝appXY由于加载ROS库引起的延迟,绘图可能看起来比上面的延迟更吉特。一旦你重新运行了几次模拟,剧情应该看起来更平稳。

注意模拟才不是在实际或“真实”的时间内工作。模型中的块在一个循环中评估,只能模拟时间的进展,而不是旨在跟踪实际时钟时间(有关详细信息,请参阅模拟环路相位(金宝appSimulink))。

修改模型以仅对新消息作出反应

在上述模型中订阅块在每个时间步长上输出一条消息(总线信号);如果根本没有收到任何消息,则输出一条空白消息(即,一条具有零值的消息)。因此XY坐标最初拟绘制(0,0)

在本任务中,您将修改模型以使用启用子系统,以便仅在收到新消息时绘制位置(有关更多信息,请参阅使用启用的子系统(金宝appSimulink))。一种预配置模型包括在您方便的情况下。

  • 在模型中,单击并拖动以选择总线选择器XY图块。右键单击所选内容并选择从所选内容创建子系统

  • 来自金宝app>端口和子系统模块库选项卡,在库浏览器中拖动使能够块进入新创建的子系统。

  • 连接是新的输出订阅阻止子系统的启用输入,如下图所示。删除终结者堵塞。请注意是新的仅当在前一步步骤中收到新消息时,输出才为真。

  • 保存您的模型。

  • 点击开始模拟。您应该看到以下内容XY情节

启用子系统中的块仅在系统接收到新ROS 2消息时执行订阅堵塞。因此,初始(0,0)值不会显示在XY情节