入门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库。这包括以下功能:
- 使用主题(发布/订阅)和参数服务器
- 表示ROS消息为金宝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帐户或创建一个新帐户。