学生休息室

分享学生如何在日常项目中使用MATLAB和Simulink的技术和现实生活示例#studentsuccess金宝app

开始使用MATLAB, Simulink和ROS金宝app

塞巴斯蒂安·卡斯特罗是回来谈论连接MATLAB和Simulink的基础知识金宝app机器人操作系统(ROS)

注意:根据R2015a,机器人系统工具箱为MATLAB和Simulink提供了R金宝appOS的官方接口。在R2019b中,此功能已移至较新的版本ROS工具箱.这篇文章和视频都是在R2019b发布之前创建的,你可能会发现语法和产品命名有一些不同。

概述

机器人操作系统(ROS)是设计复杂机器人系统的常用框架。它在构建分布式机器人软件系统以及与仿真、可视化、机器人算法等软件包的集成方面很受欢迎。ROS在工业中也越来越受欢迎,尤其是在自动驾驶汽车的开发中。

ROS工具箱提供的ROS接口可让您:

  • 从任意连接到ROSMATLAB和Simulink支持金宝app的操作系统金宝app
  • 利用MathWorks工具箱中的内置功能—例如,控制系统、计算机视觉、机器学习、信号处理和状态机设计
  • 从MATLAB和Simulink中设计的算法自动生成独立的基于c++的ROS节点金宝app

总之,MATLAB和Simulink可以通过桌金宝app面原型、独立ROS节点的部署或两者同时存在,与基于ROS的工作流共存。如果您正在寻找在MATLAB和Simulink中设计系统的一个小组件,请继续阅读!金宝app

MATLAB与ROS的连接

机器人系统工具箱提供了MATLAB脚本和桌面原型与ROS的接口。这包括以下功能:

  • 启动或连接到ROS主机
  • 处理主题(发布/订阅)、服务、操作和参数服务器
  • 读取专门的消息(例如,图像、激光雷达扫描、点云和占用网格)

发布和订阅控制算法的简单MATLAB代码片段如下所示。

在上面的例子中,算法是使用while循环来管理的,这意味着循环迭代被尽可能快地处理。还有一些其他的方法来调度MATLAB代码的执行。

  • 利率:你可以用rosrate分别基于CPU挂钟或ROS主时钟减慢控制回路。
  • 定时器:创建MATLAB定时器对象允许您在不同的时间表上安排函数调用,而不会阻塞。这意味着您可以在后台运行多个计时器,同时仍然可以访问MATLAB命令窗口。

注意:所有在计时器和ROS订阅者回调中运行的代码都将在单个线程中执行,因为MATLAB环境对用户来说是单线程的(尽管几个内置函数在内部使用多线程)。

有关MATLAB与ROS接口的更多信息,请观看以下视频。
[视频]MATLAB和Simulink金宝app机器人竞技场:MATLAB和ROS入门

连接Simulink和金宝appROS

ROS工具箱还包括一个用于ROS连接的Simulink块金宝app库。这包括以下功能:

  • 使用主题(发布/订阅)和参数服务器
  • 将ROS消息表示为金宝appSimulink总线信号图形化编程
  • 读取特定的信息(例如,图像和点云)

使用Sim金宝appulink,您可以利用块采样时间和速率转换来构建多速率算法,如下所示。

Simulink的另一个优点是能够为不同的算法金宝app组件结合MATLAB、Simulink和Stateflow建模语言。

  • MATLAB代码适用于最好用文本编程表达的组件,例如数组/矩阵操作和机器学习。如果你有用MATLAB编写的算法,你可以在Simulink中使用金宝appMATLAB功能块
  • 金宝app块是很好的控制算法,通常表示为框图。您还可以利用内置的块库进行信号处理、计算机视觉、机器人算法等。
  • Stateflow图表适用于基于决策的逻辑、状态机、表格逻辑以及基于时间或基于事件的调度。

有关与ROS的Simulink接口的更多信息,请观看以下金宝app视频。
[视频]MATLAB和Simulink金宝app机器人竞技场:开始使用Simulink和ROS

生成独立ROS节点

我们讨论了MATLAB和Simulink如何帮助您从桌面金宝app设计和验证机器人算法。即使您的机器人的机载计算机满足安装和运行MATLAB的要求,您也可能不需要在最终系统上使用这些设计和验证工具的开销。另一方面,安装MATLAB是完全不可能的低成本ROS支持的平台,如覆盆子π

当您过渡到最终实现时,您可以手动移植MATLAB和Simulink原型算法以在您的机器人上工作。金宝app或者,您可以考虑使用代码生成自动化此过程。这可以加快开发过程并消除手动实现错误。

这两种代码生成方法是:

  • 生成可重用代码:使用MATLAB编码器金宝app仿真软件编码器,嵌入式编码器从MATLAB文件和Simulink模型生成独立的C/ c++文件或库。金宝app这种方法是灵活的,因为您可以将生成的代码与您已经拥有的任何框架集成在一起,但是它仍然需要一些手动工作才能运行。
  • 生成ROS节点使用ROS Toolbox,您可以直接从Simulink模型中生成基于c++的ROS节点(请记住,MATLAB代码可以从Simulink模型中金宝app调用)。与之前生成算法入口点的方法相比,生成的代码还将包括ROS功能(发布、订阅等)和基于模型中指定的示例时间的算法调度。

ROS节点生成方法还可以使生成代码以外的过程自动化,如下所示。这包括将文件移动到目标系统中,使用柔荑花序构建系统,并运行生成的可执行节点。

使用生成的节点

从Simulink生成ROS节点之后,有几种方法可以使用它。金宝app

  • 启动和停止节点从MATLAB使用rosdevice,或者通过查找生成的可执行文件或使用rosrun
  • 使用外部模式在Simulink模型中直接调整参数和可视化数据,即使代码本身是在目标计算机上运行的。金宝app代码将与运行在桌面上的Simulink模型的TCP/IP接口一起生成。金宝app虽然这有一些处理开销,但在您仍在设计算法时,这是一个很好的调试步骤。
  • 在参数服务器中配置算法以发送或接收ROS消息或值。这使您可以与MATLAB、Simulink或其他ROS节点和目标机器上的终端进行交互。金宝app

有关将算法部署为独立ROS节点以及使用已部署节点的更多信息,请观看以下视频。
MATLAB和Simu金宝applink机器人竞技场:将算法部署到ROS
MATLAB和Simu金宝applink机器人竞技场:用ROS设计分布式系统


结论

您已经看到了如何在MATLAB和Simulink中对算法进行原型化的概述,以及它们如何成为独立的基于c++的ROS节点。金宝app如果您想了解更多,请在我们的网站上留言或发帖Facebook群组

您可以下载视频中显示的模板和示例MATLAB中心文件交换.示例中使用的虚拟机可以从MathWorks网站

——塞巴斯蒂安

一个MATLAB和Simulink与ROS接口的例金宝app子,如ROS实用程序所示rqt_graph

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。