主要内容

开始与ROS在仿真软件金宝app

这个例子展示了如何使用仿真软件®块ROS从本地ROS网络发送金宝app和接收消息。

介绍

金宝app仿真软件金宝app对机器人操作系统(ROS)的支持使您能够创建与ROS网络仿真软件模型。ROS是一个通信层,允许不同的组件一个机器人系统的交换信息的形式消息。一个组件发送一条消息出版到一个特定的主题,如/测程法。其他组件接收消息订阅这个话题。

金宝app仿真软件金宝app对ROS的支持包括一个图书馆的仿真软件模块为一个指定的话题发送和接收消息。当你模拟模型,模型连接到一个ROS网络,可以作为仿真软件运金宝app行在同一台机器或一个远程系统上。一旦连接建立,仿真软件模拟与ROS网络交换消息,直到终止。金宝app如果仿金宝app真软件编码器™安装,还可以为一个独立的ROS生成c++代码组件,或节点从仿真软件模型。金宝app

这个例子展示了如何:

  • 建立了ROS的环境

  • 创建并运行一个仿真软件模型来发送和金宝app接收ROS的消息

  • 在ROS消息处理数据

先决条件:创建一个简单的模型(金宝app模型),开始使用ROS

模型

您将使用仿真软件发布金宝appXY一个机器人的位置。你也将订阅主题并显示接收到的同一位置X,Y的位置。

输入以下命令来打开完成模型中创建的例子。

open_system (“robotROSGetStartedExample”);

初始化ROS

每一个ROS网络都有ROS的主人协调所有的部分ROS网络。对于这个示例,使用MATLAB®创建ROS掌握在您的本地系统。金宝app仿真软件自动检测和使用本地ROS的主人。

MATLAB命令行上,执行以下:

rosinit

创建一个出版商

配置一块发送geometry_msgs /点消息主题命名/位置(“/“是标准的ROS语法)。

  • 从MATLAB将来发布,选择>金宝app打开模型开始页面金宝app。

  • 在仿真金宝app软件页面开始,金宝app,点击空白模型创建和打开一个新的仿真软件模型。金宝app

  • 从仿真软件将来发布金宝app,选择模拟>库浏览器打开模型库浏览器。金宝app点击ROS工具箱选项卡(你也可以类型roslib在MATLAB命令窗口)。选择ROS图书馆。

  • 拖一个发布块模型。双击块配置主题和消息类型。

  • 选择指定您自己的课题来源,并输入/位置主题

  • 点击选择旁边消息类型。将出现一个弹出窗口。选择geometry_msgs /点并点击好吧关闭弹出窗口。

创建一个ROS的消息

创建一个空白的ROS消息和填充它XY机器人路径的位置。然后发布更新的活性氧ROS网络消息。

ROS消息表示为总线信号在仿真金宝app软件。总线信号是一束模型的信号,也可以包括其他总线信号(见金宝app探索仿真软件总线金宝app功能(金宝app模型)概述的例子)。ROS的空白的信息块输出仿真软件总线信号对应于一个金宝appROS的消息。

  • 点击ROS工具箱在库浏览器选项卡,或者类型roslib在MATLAB命令行。选择ROS图书馆。

  • 拖一个空白的信息块模型。双击打开块面具。

  • 点击选择旁边的消息类型框,并选择geometry_msgs /点从产生的弹出窗口。点击好吧关闭块面具。

  • 金宝app>信号路由在库浏览器选项卡,拖动总线分配块。

  • 输出端口的连接空白的信息块的总线输入端口总线分配块。输出端口的连接总线分配块的输入端口ROS发布块。

  • 双击总线分配块。您应该看到X,YZ(包括一个信号geometry_msgs /点消息)列在左边。选择? ? ?signal1正确的列表框,然后单击删除。选择两个XY在左边的列表框,然后单击信号选择。点击好吧应用更改。

注意:如果您没有看到X,YZ上市,关闭总线分配块的面具,和根据建模选项卡,点击更新模型确保总线信息正确地传播。如果你看到错误,“选择信号总线中的“signal1”分配块不能被发现”,它表明总线信息没有被传播。关闭诊断观众,并重复上述步骤。

你现在可以填充总线信号与机器人的位置。

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

  • 每个输出端口的连接正弦波块赋值的输入端口XY总线分配块。

  • 双击正弦波块连接到输入端口X。设置阶段参数-π/ 2并点击好吧。离开正弦波块连接到输入端口Y为默认。

你的出版商应该如下:

在这一点上,该模型建立了ROS网络发布消息。您可以验证如下:

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

  • 点击运行开始仿真。金宝app模型创建一个专用ROS节点模型和ROS出版商对应发布块。

  • 在运行模拟时,类型rosnode列表在MATLAB命令窗口。这个列表中的所有节点可用ROS网络,并包括一个节点使用一个名称/ untitled_81473(模型的名字连同一个随机数,让它独特的)。

  • 在运行模拟时,类型rostopic列表在MATLAB命令窗口。列出了所有可用的主题在ROS网络,它包括/位置

  • 点击停止停止仿真。金宝app仿真软件删除ROS节点和ROS的出版商。一般来说,ROS节点模型和任何相关的发布者和订阅者是一个模拟的结束时自动删除;不需要额外的清洁步骤。

创建一个用户

使用仿真金宝app软件发送到接收消息/位置的话题。你会提取XY位置从消息和情节的XY飞机。

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

  • 选择指定您自己的课题来源框,并输入/位置主题盒子。

  • 点击选择旁边的消息类型框,并选择geometry_msgs /点从弹出窗口。点击好吧关闭块面具。

订阅块输出仿真软件总线信号,所以你需金宝app要提取XY信号。

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

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

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

  • 双击总线选择器块。选择? ? ?signal1? ? ?signal2正确的列表框,然后单击删除。选择两个XY在左边的列表框,然后单击信号选择。点击好吧

订阅块将输出的最近收到消息主题在每个时间步。的IsNew输出显示信息是否收到之前的时间步。当前任务的IsNew不需要输出,所以做以下:

  • 金宝app>在库浏览器选项卡,拖动《终结者》块模型。

  • 连接IsNew的输出订阅块的输入《终结者》块。

剩下的步骤配置提取的显示XY信号。

  • 金宝app>一个浏览器选项卡在图书馆,拖累XY图块模型。输出端口的连接总线选择器块的输入端口XY图块。

  • 金宝app>在库浏览器选项卡,拖两个显示块到模型中。每个输出的连接总线选择器块之间显示块。

  • 保存您的模型。

你的整个模型应该如下:

配置和运行模型

  • 建模选项卡上,选择模型设置。在解算器窗格中,设置类型固定步固定的大小0.01

  • 设置模拟停止时间10.0

  • 点击运行开始仿真。一个XY情节就会出现。

第一次运行该模型在仿真软件中,金宝appXY情节可能看起来更紧张比上面由于延迟加载ROS库造成的。一旦你重新运行模拟几次,情节应该流畅。

注意,模拟在实际或“真正的”工作。的块模型评估在一个循环中,只有模拟时间的进展,并不是为了追踪实际时钟时间(详情,请参阅模拟循环阶段(金宝app模型))。

修改模型只对新信息的反应

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

在这个任务中,您将使用一个修改模型启用子系统,情节的位置只有当收到新消息(有关更多信息,请参见使用启用子系统(金宝app模型))。一个预先配置的模型包括为您的方便。

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

  • 金宝app>港口和子系统一个浏览器选项卡在图书馆,拖累启用块创建子系统。

  • 连接IsNew的输出订阅块的启用输入子系统如下图所示。删除《终结者》块。请注意,IsNew输出是真的只有在收到新消息在前一个时间步。

  • 保存您的模型。

  • 点击运行开始仿真。您应该看到如下XY情节。

时使子系统的模块只执行一个新的ROS接收到消息订阅块。因此,最初的(0,0)值将不会显示在XY情节。