学生休息室

分享技术和现实生活的例子,学生可以如何使用MATLAB和Simulink在他们的日常项目#学生成功金宝app

入门MATLAB, Simulink和ROS金宝app

塞巴斯蒂安·卡斯特罗将MATLAB和Simulink与金宝app机器人操作系统(ROS)

注意:R2015a,机器人系统工具箱配备MATLAB和Simulink与官方金宝app界面的ROS。在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的连接

Robotics System Toolbox为MATLAB脚本编写和桌面原型创建提供了一个界面。这包括以下功能:

  • 启动或连接到ROS master
  • 使用主题(发布/订阅)、服务、操作和参数服务器
  • 阅读特殊信息(例如,图像、激光雷达扫描、点云和占用网格)

下面是一个简单的基于发布和订阅的控制算法的MATLAB代码片段。

在上面的示例中,使用while循环管理算法,这意味着循环迭代将尽可能快地处理。还有一些额外的方法来安排MATLAB代码的执行。

  • 利率:您可以使用rosrate分别根据CPU墙时钟或ROS主时钟减慢控制环路。
  • 定时器:创建MATLAB定时器对象让你调度函数调用在不同的调度而不阻塞。这意味着您可以在后台运行多个计时器,同时仍然可以访问MATLAB命令窗口。

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

有关MATLAB接口到ROS的更多信息,请观看下面的视频。
【视频】MATLAB和Simulink金宝app Robotics Arena: Getting Started with MATLAB and ROS

连接Simulink和金宝appROS

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

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

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

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

有关Simulink接口到ROS的更多信息,请观看以下视金宝app频。
【视频】MATLAB and Simu金宝applink Robotics Arena: Getting Started with Simulink and ROS

独立生成ROS节点

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

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

两种代码生成方法是:

  • 生成可重用的代码:使用MATLAB编码器金宝app仿真软件编码器,嵌入式编码器从MATLAB文件和Simulink模型生成独立的C/ c++文件或库。金宝app这种方法很灵活,因为您可以将生成的代码与您可能已经拥有的任何框架集成在一起,但是它仍然需要一些手动操作才能运行。
  • 产生ROS节点:使用ROS工具箱,您可以直接从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 Robotics Arena:部署算法到ROS
MATLAB和Simu金宝applink Robotics Arena:用ROS设计分布式系统


结论

您已经看到了如何在MATLAB和Simulink中创建算法原型的概述,以及它们如何成为基于c++的独立ROS节点。金宝app如果你想知道更多,请在我们的Facebook群组

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

——塞巴斯蒂安

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

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。