主要内容

从Simulink®生成独立ROS节点金宝app

这个示例向您展示了如何从Simulink模型生成和构建一个独立的ROS节点。金宝app

介绍

在这个例子中,您配置了一个模型来为一个独立的ROS节点生成c++代码。然后在Ubuntu®Linux®系统上构建并运行ROS节点。

先决条件

  • 这个例子需要Simulink Coder™和金宝appEmbedded Coder™。

  • 一个带有ROS和SSH服务器的Ubuntu Linux系统是建立和运行生成的C++代码所必需的。您可以使用自己的Ubuntu ROS系统,也可以使用用于机器人系统工具箱的Linux虚拟机™ 示例(参见开始使用露台和模拟的高跷机器人(如需说明)。

  • 点评审查反馈控制ROS的机器人实例

配置代码生成模型

配置模型以为独立ROS节点生成C ++代码。该模型是在中引入的比例控制器反馈控制ROS的机器人实例

  • 打开机器人控制器.单击链接或运行机器人控制器在命令窗口中。

  • 准备下节活性氧选项卡,单击硬件设置打开硬件实现窗格中的。这硬件板设置章节包含特定于生成的ROS包的设置,例如将包含在package.xml.文件改变维护者名称ROS示例用户

  • 该模型使用可变大小的数组。启用可变大小信号的代码生成,检查适应信号在下面代码生成>接口>软件环境.如果是适应信号选项不可见,选中该选项,使用嵌入式编码器功能硬件实现>高级参数

  • 解算器在“配置参数”对话框的窗格中,确保类型设置为固定步骤,并设置固定的大小0.05.在生成的代码中,固定步长定义了用于模型更新循环的实际时间步长(以秒为单位)执行模型生成的代码(金宝appSimulink编码器)).它可以更小(例如,0.001或0.0001),但对于当前用途,0.05就足够了。

配置与ROS设备的连接

一种活性氧装置是否安装了ROS的任何Linux系统,都能够构建和运行ROS节点。如果您有Simulink金宝app编码器,则可以为独立ROS节点生成代码。如果您的系统连接到ROS设备,则Simulink还可以将生成的代码传输到ROS设备,构建可金宝app执行文件,并运行生成的ROS节点(这被称为“部署”ROS节点)。

在这个任务中,您将决定是要为ROS节点生成代码,还是要在ROS设备上构建并运行代码。如果您连接到一个ROS设备,您可以配置Simulink,将其用作您的ROS节点的部署目标。金宝app

  • 在下面建模选项卡,单击模型设置

  • 硬件实现窗格中,选择一个构建操作在下面硬件板设置>目标硬件资源>组>构建选项. 在构建模型时,选定的构建操作会影响Simulink的行为。金宝app没有一个(默认设置)只生成ROS节点的代码,而不在外部ROS设备上构建它。构建和加载生成代码,将其传输到外部设备并构建ROS节点可执行文件。如果你选择构建和运行,生成的节点可执行文件将在生成结束时自动启动。

  • 设置构建操作构建并运行。

  • 配置与外部ROS设备的连接。在活性氧选项卡,从部署到下拉,点击管理远程设备.这将打开连接到ROS设备对话。在此对话框中,您可以输入Simulink需要部署ROS节点的所有信息。金宝app这包括ROS设备,登录凭据和Catkin工作区的IP地址或主机名。改变Catkin工作区~/柳絮试验

ROS文件夹是ROS设备上ROS安装的位置。如果未指定此文件夹,设置测试(请参阅下一步)将尝试为您确定正确的文件夹。

  • 如果ROS设备已打开并可从您的计算机访问,您可以通过单击来验证连接设置测试.如果找到问题,测试验证了Simulink诊断查看器中的每个设备设置和显示警告和错误。金宝app如果可能,测试也表明如何修复问题。点击测试现在。

  • 最有可能,Catkin Workspace~/柳絮试验目标设备上不存在。测试检测到这个问题,并建议创建文件夹并初始化工作区。点击修理自动应用此操作。几秒钟后,您应该会看到一个绿色的通知,说明文件夹已成功创建。在下图中,您可以看到成功创建文件夹的示例。要验证Catkin工作区现在可用,请单击测试在连接设置对话框中。警告已经消失,Catkin工作区已经准备好构建您的ROS节点。

  • 更改设备连接设置并测试它们,直到没有其他警告或错误显示。如果可以对您的设置进行自动修复,Simulink会通过显示金宝app修理按钮。一旦您有一个很好的设置,请单击好啊在“连接设置”对话框中,以保存设置。

连接设置不特定于单个模型,但适用于Simulink中的所有ROS模型。金宝app

生成c++ ROS节点

为独立的ROS节点生成代码,并在ROS设备上自动传输、构建和运行。使用运行在ROS设备上的ROS master运行生成的ROS节点。

1。在MATLAB®中,将当前文件夹更改为一个您有写权限的临时位置。

2。代码生成过程首先准备模型进行模拟,以确保所有模块都已正确初始化。此准备需要与ROS主机的有效连接。

在Matlab中,您可以使用罗斯装置对象在ROS设备上启动ROS主机。如果您提供没有参数,罗斯装置使用您在Simulink对话框中输入的设备连接设置连接到ROS设备。金宝app

d=设备运行核心(d);

3.使用松香要将MATLAB连接到ROS设备上的ROS主站:

罗斯尼特(D.DeviceAddress)

4.告诉Sim金宝appulink使用与MATLAB相同的ROS连接设置模拟标签,在准备部分,选择ROS网络。将ROS主机(ROS 1)和节点主机网络地址设置为违约

每个MATLAB会话只需执行步骤2-4一次,而不是每次生成ROS节点时。

5。在下面活性氧选项卡,单击部署>构建和运行.如果您得到关于总线类型不匹配的任何错误,关闭模型,从基本MATLAB工作空间中清除所有变量,并重新打开模型。

点击查看诊断链接到“模型”工具栏底部以查看生成过程的输出。

6。一旦代码生成完成,ROS节点将在ROS设备上传输到Catkin工作空间。该节点在那里构建并开始自动运行。

生成的节点连接到ROS设备上运行的ROS主站。

7.使用rosnode.要列出所有运行节点是ROS网络。“RobotController”应在显示的节点列表中。

rosnode.列表

你可以用罗斯托普要验证部署的节点是否发布ROS主题上的数据以控制机器人的运动,请执行以下操作:

罗斯托普信息/ mobile_base /命令/速度

运行并验证ROS节点

使用新建的ROS节点运行并使用基于MATLAB的机器人模拟器验证其行为。

1。在matlab,类型examplehelper金宝appsimulinkrobotros.启动机器人模拟器。模拟器自动连接到ROS设备上运行的ROS主站。如果要连接到基于凉亭的机器人仿真,请参阅从Simulink®连接到启用ROS的机器人金宝app

sim = ExampleHelper金宝appSimulinkRobotROS

2。验证模拟机器人向目标移动期望位置模型中指定的常数)。机器人到达目标后停止[-10,10]。

3.点击重置仿真要将机器人的位置重置为[0,0]。机器人将立即开始向目标位置移动。

4.在MATLAB中,您可以使用金宝app罗斯装置目的。部署Simul金宝appink模型后,您可以使用罗斯装置要在任何时候运行和停止节点,而无需在Simulink中重建它。金宝app

可用节点属性显示已部署的机器人控制器节点。的方法可以验证节点是否正在运行伊斯诺德朗宁函数。

d=设备

isNodeRunning(d,“机器人控制器”

5。停止ROS节点的运行。

停止节点(d,“机器人控制器”)Isnoderunning(D,“机器人控制器”

6。点击重置仿真按钮在模拟窗口中。机器人停留在位置[0,0],不移动。

  • 现在重新启动节点。

运行节点(d,“机器人控制器”
  • 机器人应该再次开始朝向目标位置移动。

7.完成验证后,可以按如下方式清理系统状态。

  • 停止在目标设备上运行的节点

停止节点(d,“机器人控制器”
  • 在主机上,关闭机器人模拟器图形窗口及类型Rosshutdown.在matlab命令行。

Rosshutdown.

高级主题和故障排除

在Simulink中指定ROS网络设置金宝app:默认情况下,Simulin金宝appk使用ROS连接设置松香在matlab。要覆盖这些设置,请在Simulink中指定ROS连接设置。金宝app在下面模拟标签,在准备部分,选择ROS网络并设置ROS主站和节点主机网络地址:

生成C++代码存档无论如何构建操作您选择(无,构建和加载,构建和运行),Simulink总是在当前文件夹中生成两个文件:一个包含C++金宝app源代码的存档(在我们的示例中是RobotController.tgz)和一个用于提取和构建C++代码的shell脚本(BuudgRoSoxMult.SH)。如果您的MATLAB计算机未连接到ROS设备,您可以手动传输文件并在那里生成它们。

处理器特定生成的代码:如果您使用来自其他产品(如Computer Vision S下载188bet金宝搏ystem Toolbox™)的块,生成的代码可能包括特定于处理器的优化,在Linux上构建ROS节点时可能会导致编译问题。在这些情况下,您需要让Simulink知道生成的代码在哪个平台上金宝app编译。你可以通过硬件实现“模型配置参数”对话框中的。

在MATLAB中运行rosmaster:在上面的示例中,您连接到运行在ROS设备上的ROS master。或者,你可以在MATLAB中创建一个ROS master。使用松香在matlab命令行:

rosinit (“NodeHost”, <您计算机的IP地址>)

例如,如果主机的IP地址为172.28.194.92,请使用以下命令:

rosinit (“NodeHost”“172.28.194.92”

nodehost.设置对于确保生成的ROS节点能够在MATLAB上与主机通信非常重要。笔记:生成的ROS节点将使用nodehost.在MATLAB中与全局ROS节点通信的IP地址,因此确保指定的IP地址可以从ROS设备访问(例如,使用).见连接到ROS网络有关其意义的更多细节的示例nodehost.环境。

任务模式: 金宝appSimulink可以为多任务或单任务模式生成代码(参见基于时间的调度和代码生成(金宝appSimulink编码器))。默认情况下,生成的ROS代码使用单个任务模式(所有速率的单个线程)而无需实时调度。这允许生成的ROS代码没有苏达特权,但可能会导致不太可预测的性能。

如果您需要更可预测的性能,可以将模型配置为使用多任务。在解算器“配置参数”对话框的“启用”窗格将每一个离散的速率视为一个单独的任务使多任务。在生成的代码中,这将为模型中的每个速率创建一个单独的线程,并为线程使用优先级调度。

要运行ROS节点,您需要对ROS设备具有管理权限。将模型部署到目标设备时,Simulink会自动检测您的权限是否不足。金宝app

相关话题