文档

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

此示例演示如何从Simulink模型生成和构建独立的ROS节点。金宝app

介绍

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

先决条件

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

  • 构建和运行生成的c++代码需要一个安装了ROS和SSH服务器的Ubuntu Linux系统。你可以使用你自己的Ubuntu ROS系统,也可以使用用于Robotics system Toolbox™示例的Linux虚拟机(参见开始使用凉亭和模拟乌龟机器人指令)。

  • 检查ros机器人的反馈控制的例子。

为代码生成配置模型

配置一个模型,为独立的ROS节点生成c++代码。模型是比例控制器中引入的ros机器人的反馈控制的例子。

  • 开放RobotController.slx. 单击链接或运行RobotController在命令窗口。

  • 在工具栏中,单击建模>模式设置。

  • 硬件实现“配置参数”对话框中的硬件板机器人操作系统(ROS),单击“应用”。的硬件板设置节包含特定于生成的ROS包的设置,例如要包含在package.xml文件。改变维护人员的名字ROS示例用户

  • 该模型需要可变大小的阵列。要启用此选项,请选中适应信号代码生成>接口>软件环境. 如果此选项不可用,请设置系统目标文件代码生成ert.tlc。

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

配置对接ROS设备

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

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

  • 建模选项卡上,单击模型设置

  • 硬件实现在“配置参数”对话框的窗格中,选择一个建立行动硬件板设置>目标硬件资源>组> Build选项.所选的构建操作会影响Simulink在构建模型时的行为。金宝app没有一个(默认设置)仅为ROS节点生成代码,而不将其构建在外部ROS设备上。构建和负载生成代码,将其传输到外部设备,并构建一个ROS节点可执行文件。如果您选择构建并运行,生成的节点可执行文件将在构建结束时自动启动。

  • 设定建立行动构建和运行。

  • 配置与外部ROS设备的连接。下机器人选项卡上,单击连接到机器人打开接入ROS设备对话框。在这个对话框中,您可以输入Simulink部署ROS节点所需的所有信息。金宝app这包括您的ROS设备的IP地址或主机名、您的登录凭据和Catkin工作区。改变柔荑花序工作区~ / catkin_ws_test

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

  • 如果ROS设备已经打开,并且可以从您的计算机访问,您可以通过单击来验证连接设置测试.该测试验证每个设备设置,如果发现问题,则在Simulink诊断查看器中显示警告和错误。金宝app如果可能的话,测试还建议如何解决这些问题。点击测试现在。

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

  • 更改设备连接设置并测试它们,直到没有显示其他警告或错误。如果可以自动修复设置,Simulink会通过显示金宝app修理按钮。一旦你有了一套好的设置,点击好吧在连接设置对话框中保存设置。

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

生成C++ ROS Node

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

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

2.代码生成过程首先为模拟准备模型,以确保所有块都被正确初始化。此准备需要一个到ROS master的有效连接。

在MATLAB中,可以使用rosdevice对象,在ROS设备上启动ROS master。如果你不提供参数,rosdevice使用您在Simulink对话框中输入的设备连接设置连接到ROS设备。金宝app

d = rodevice runCore(d);

3.使用rosinit将MATLAB连接到运行在ROS设备上的ROS主机:

rosinit (d.DeviceAddress)

4.告诉Sim金宝appulink使用与MATLAB相同的ROS连接设置。下模拟选项卡,选择ROS工具箱> ROS网络.设置ROS Master (ROS 1)和Node Host的网络地址为默认的

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

5.在Simulation选项卡下,单击构建和运行。如果您得到任何关于总线类型不匹配的错误,请关闭模型,清除基本MATLAB工作区中的所有变量,然后重新打开模型。

点击视图诊断链接模型工具栏底部,以查看构建过程的输出。

6.代码生成完成后,ROS节点被转移到ROS设备上的Catkin工作区。节点在那里生成并开始自动运行。

生成的节点连接运行在ROS设备上的ROS master。

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

rosnode列表

您可以使用罗斯托普验证部署节点在ROS主题上发布数据以控制机器人运动:

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

运行并验证ROS节点

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

1.在MATLAB中,输入ExampleHelper金宝appSimulinkRobotROS启动机器人模拟器。模拟器自动连接到运行在ROS设备上的ROS主机。如果您想连接到基于凉亭的机器人模拟,请参见从Simulink®连接到一个支持ros的机器人金宝app

sim=ExampleHelperSi金宝appmulinkRobotROS

2.验证模拟机器人是否朝着目标(目标)移动期望的职位模型中指定的常量)。机器人一旦到达目标就会停下来[- 10,10]。

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

4.在MATLAB中,您可以管理由Simulink生成的ROS节点金宝approsdevice对象。一旦部署了Si金宝appmulink模型,您就可以使用rosdevice在任何点运行和停止节点,而无需在Simulink中重新构建它。金宝app

AvailableNodes属性显示已部署的robotcontroller节点。您可以通过调用isNodeRunning功能。

d = rosdevice

isNodeRunning (d,“robotcontroller”

5.停止运行ROS节点。

stopNode (d,“robotcontroller”) isNodeRunning (d,“robotcontroller”

6.单击重置模拟模拟窗口中的按钮。机器人停留在位置[0,0]且不移动。

  • 现在重新启动节点。

runNode (d,“robotcontroller”
  • 机器人再次开始向目标位置移动。

7.一旦您完成了验证,您可以按照如下方式清理系统状态。

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

stopNode (d,“robotcontroller”
  • 在主机上,关闭机器人模拟器图形窗口及类型rosshutdown在MATLAB命令行。

rosshutdown

高级主题和故障处理

在Simulink中指定ROS网络设置金宝app:默认情况下,Simulin金宝appk使用from的ROS连接设置rosinit在MATLAB。要覆盖这些设置,请在Simulink中指定ROS连接设置。金宝app下模拟选项卡,选择ROS工具箱> ROS网络设置ROS主节点和节点主机的网络地址:

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

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

安装额外的ROS包:机器人系统工具箱包括许多ROS消息类型(例如,对于Baxter®或PR2®)这不是标准ROS发行版的一部分。如果Simulink模型包含非标准或自定义消息类型,则可以成功模拟和生成代码。但是,为了构建生成的ROS节点,您需要首先下载并安装所有必需的软件包。以下是一种方法(假设所需的包是金宝appbaxter_core_msgs).

在MATLAB提示符下:

d = rosdevice;openShell (d);

在Linux shell上:

#刷新可用包列表sudo apt-get update #搜索ROS Baxter包列表(例如,ROS -indigo- Baxter -core-msgs) apt-cache Search Baxter #下载并安装所需包sudo apt-get install ROS -indigo- Baxter -core-msgs

请注意,此命令可能需要几分钟才能完成。

在MATLAB中运行ROS Master:在上面的示例中,您连接到ROS设备上运行的ROS主机。或者,您可以在MATLAB中创建ROS主机。使用rosinit在MATLAB命令行:

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

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

rosinit (“NodeHost”'172.28.194.92'

NodeHost设置对于确保生成的ROS节点能够在MATLAB上与主机通信非常重要。请注意:生成的ROS节点将使用NodeHost在MATLAB中与全局ROS节点通信的IP地址,因此确保可以从ROS设备访问指定的IP地址(例如,使用发出砰的声响).看到连接到ROS网络举例说明更详细的意义NodeHost设置。

任务模式:S金宝appimulink可以为多任务或单任务模式生成代码(请参阅基于时间的调度和代码生成(金宝app仿真软件编码器))。默认情况下,生成的ROS代码使用单任务模式(所有速率的单个线程),没有实时调度。这允许执行生成的ROS代码sudo特权,但可能导致较难预测的性能。

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

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

相关话题