学生休息室

分享技术和现实生活的例子,学生如何在他们的日常项目中使用MATLAB和Simulink #学生成功万博1manbetx

开始MATLAB, Simulink和ROS万博1manbetx

塞巴斯蒂安·卡斯特罗是回到讨论连接MATLAB和Simulink与万博1manbetx机器人操作系统(ROS)

注意:R2015a,机器人系统工具箱配备了MATLAB和Simulink,并万博1manbetx有一个正式的ROS接口。在R2019b中,该功能已被转移到较新的版本ROS工具箱.这篇文章和视频是在R2019b发布之前创建的,你可能会发现语法和产品命名上的一些差异。

概述

机器人操作系统(或ROS)是一种用于设计复杂机器人系统的常用框架。它是建立分布式机器人软件系统的流行,以及它与仿真,可视化,机器人算法的包装集成,以及更多。ROS在工业中越来越受欢迎,特别是在自动车辆的发展中。

ROS Toolbox提供的ROS界面可让您:

总之,MATLAB和Simulink可以通过桌万博1manbetx面原型、部署独立的ROS节点或两者共存,与基于ROS的工作流共存。如果你想在MATLAB和Simulink中设计哪怕是一个很小的组件,请继续阅读!万博1manbetx

连接Matlab和ROS

机器人系统工具箱提供了一个接口,用于用ROS编写MATLAB脚本和桌面原型。这包括以下功能:

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

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

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

  • 价格:您可以使用rosrate分别根据CPU挂钟或ROS主时钟将控制回路调慢。
  • 定时器:创造MATLAB定时器对象允许您在不同的时间表上安排函数调用而不会阻止。这意味着您可以在后台运行多个定时器,同时仍然访问MATLAB命令窗口。

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

有关ROS的MATLAB接口的更多信息,请观看下面的视频。
MATLAB和Simulink机器人竞万博1manbetx技场:MATLAB和ROS入门

连接Simulink和万博1manbetxROS

ROS工具箱还包括一个用于ROS连接的Simulink块万博1manbetx库。这包括以下功能:

使用Sim万博1manbetxulink,您可以利用块样本时间和速率变化来构建多速率算法,如下所示。

Simulink的另一个优点是能够将MATLA万博1manbetxB、Simulink和statflow建模语言结合到不同的算法组件中。

  • MATLAB代码很适合用文本编程最好表达的组件,比如数组/矩阵运算和机器学习。如果你有用MATLAB写的算法,你可以用Simulink调用它们万博1manbetxMATLAB功能块
  • 万博1manbetx块是很好的控制算法,它通常表示为框图。您还可以利用内置的块库来进行信号处理、计算机视觉、机器人算法等。
  • 州流程图表适用于基于决策的逻辑、状态机、表格逻辑和基于时间或事件的调度。

有关ROS的Simulink接口的更多信息,请参见下面的万博1manbetx视频。
[视频] Matlab和Simulin万博1manbetxk Robotics竞技场:使用Simulink和ROS开始

生成独立ROS节点

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

随着到最终实现的转换时,您可以手动端口MATLAB和SIMULINK原型算法,以便在机器人上工作。万博1manbetx或者,您可以考虑使用代码生成自动化此过程。这可以加快开发过程并删除手动实现错误。

两种代码生成方法是:

  • 生成可重用的代码:使用Matlab编码器万博1manbetx仿真软件编码器,嵌入式编码器从Matlab文件和Simulink模型生成独立的C / C ++文件或库。万博1manbetx这种方法是灵活的,因为您可以将生成的代码与您已经到位的任何框架集成,但它仍然涉及一些手动努力运行。
  • 产生ROS节点:使用ROS工具箱,您可以直接从Simulink模型生成基于c++的ROS节点(回想一下,MATLAB代码可以从Simulink模型中调用)。万博1manbetx与前面的方法(生成算法的入口点)相比,生成的代码还将包括ROS功能(发布、订阅等)和基于模型中指定的样本时间的算法调度。

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

使用生成的节点

从Simulink生成ROS节点后,您可以使用几种方法。万博1manbetx

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

有关将算法部署为独立ROS节点以及使用已部署的节点的更多信息,请参见以下视频。
MATLAB和Simu万博1manbetxlink机器人竞技场:部署算法到ROS
Matlab和Simu万博1manbetxlink机器人竞技场:使用ROS设计分布式系统


结论

您已经概述了如何在MATLAB和Simulink中创建算法原型,以及如何将它们变成独立的基于c++的ROS节点。万博1manbetx如果你想了解更多,请在我们的Facebook群组

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

- 塞巴斯蒂安

一个MATLAB和Simulink与ROS接口的例万博1manbetx子,如ROS实用程序所示rqt_graph

|

评论

要发表评论,请点击在这里要登录您的MathWorks帐户或创建新的。