电子说
机器人绝对是当前的一个热门话题之一。从工业机器人到扫地机器人,从实验室机器人到各种创新玩具机器人,机器人逐渐走进了大众的视野,进入了普通人的生活。不管是技术发烧友还是普通消费者,都越来越多的把目光投向了机器人。随着网络众筹的兴起,技术创业的经济门槛降低,一个又一个明星众筹项目也激发了越来越多的技术爱好者从关注到实践,纷纷投身机器人开发的怀抱。每个人都期待着自己开发的创新原型,能称为下一个被投资人或公众所瞩目的焦点。
古人云,“工欲善其事,必先利其器。” 现在让我们来看看如何使用MATLAB 这个“利器” 来帮助我们快速实现我们的创意。
MATLAB 平台
MATLAB 是全球知名的数据分析和处理软件,这个红色的二次曲面 LOGO 几乎出现在每一所大学的教科书里。
图1 MATLAB LOGO
但事实上,它不再仅仅是那个我们在学生时代所认识的仅仅用于数据处理与画图的“超级计算器”,它在行业内的应用远比教育领域更为广泛和深入。从下图的工具箱结构可以窥知一二。可以看到右侧的深蓝色模块,它也为各个专门的应用领域开发了一系列工具箱。
图2 MATLAB 工具箱
MATLAB/Simulink 算法开发平台也几乎是汽车、军工等行业进行控制算法设计的必备工具。基于 Simulink模型的建模、仿真、测试验证以及代码生成,这种基于模型的设计理念 (MBD)也正在替代传统的手写 C 代码的开发流程,成为算法开发的主流与未来的趋势。
图3 基于模型的设计
那么,这对于开发机器人意味着什么呢?这意味着,你不仅可以摆脱繁复的 C 代码编程,还可以借助 MATLAB 强大的工具箱系列,通过仿真来帮助你测试算法、优化参数等等。如果用户购买了代码生成工具箱,还可以提取所生成的嵌入式 C/C++ 算法函数,集成到自己外部的工程项目中去,如图4左侧箭头,这也是商业产品开发的主流选择。
MATLAB/Simulink Support Package
我这里主要想介绍一下免费硬件支持包: MATLAB/Simulink Support Package。它相当于是 MATLAB 与各种低成本硬件之间的桥梁。
下载安装官方免费的 MATLAB/Simulink Support package,简单设置好对应的板卡后,Simulink 框图或者 MATLAB脚本便可以一键编译下载到硬件运行了,如下图右侧箭头。这对于快速实现早期创意非常有用,尤其是对小的开发团队来说,可以将注意力更多的放到算法设计与开发上,而不是基本的 C 代码实现。
图4 从模型到实现
MATLAB/Simulink Support Package为一系列所支持的板卡提供了基本的驱动模块,只需要在软件界面上进行简单的配置,就可以将实现框图式的算法模型一键下载到硬件板卡上去,有助于我们快速实现早期创意,缩短原型开发周期。
通过它,我们可以很容易实现与这些硬件通讯,读取数据到 MATLAB 环境进行分析和处理,轻松下载 Simulink这种框图式的算法来实现各种有创意的应用。
图5 MATLABSimulink Support Package
案例介绍
下面,我们使用 Arduino MEGA 2560来演示如何实现将模型一键下载到硬件。这是一个非常简单的例子:使用光敏电阻来控制LED灯的明暗。
硬件连线
简单的说就是利用光敏电阻与固定电阻串联形成分压电路,并将分压电压读入Arduino,然后用这个值来输出控制发光二极管的明暗。将分压电压值读入Arduino的A1 引脚;将发光二极管的正极连接PWM的第二个引脚,如下图所示。其它的基本连线不再繁述。
图6 硬件连线图
软件准备
通过 MATLAB 主界面上的 Add-Ons 的 Get Hardware Support Packages向导,选择所需要安装的支持包。
图7 安装包下载入口
选择 Arduino,根据向导提示下载或安装支持包。
图8 下载安装向导
安装完成后,打开Simulink Library Browser 中的Simulink Support Package for Arduino Hardware库,如下图。我们可以看到为 Arduino提供的一系列驱动模块,从模块的示意图以及端口的符号,我们可以大概推测它的作用:从各种类型的板卡接口读取或输出信号。
另外从左侧树状图可以看到,还提供了 Ethernet Shield 与 Wifi Shield 的驱动模块。
图9 Arduino 支持库
建模
Simulink 建模简单可以描述为模块的拖拽与连线的过程。
我们需要从A1端口(分压线接入)读取分压信号,所以从库里拖入一个 Analog Input模块,并双击设置端口号为1,设置采样时间为 0.01 S。另外还需要输出到 PWM的第二个引脚( LED连接处),所以拖入一个 PWM 模块,并双击设置端口号为2。
为了简化整个下载过程,我们这里对信号不做任何算法处理,直接将两个模块连接起来,如下图。这也就意味着 LED 的亮度与光敏电阻状态直接相关。
图10 模型截图
编译下载
Simulink Support Package for Arduino Hardware支持几乎所有的 Arduino 型号。在点击红色方框的按钮编译下载之前,需要通过配置页面来指定当前所使用的 Arduino 板卡类型,如下图。
图11 设置Arduino板卡
确保 Arduino 与电脑相连,点击上图模型截图中红色方框的编译按钮,框图将会自动生成C/C++ 代码,并后台自动调用 Arduino IDE 进行编译下载到 Arduino板卡上去。
此时,你用手捂住光敏电阻,便会看到 LED 灯亮度的变化。
在线调试
对于 Arduino MEGA 2560等型号,还支持在线调试。在配置页面,除了选择型号外,如下图设置为 ‘External mode’。
图12 设置在线调试运行
点击图中的绿色仿真按钮。
图13 在线调试
此时,框图同样被生成代码并编译下载到 Arduino 上运行,同时 Simulink 模型运行,双击打开示波器 Scope 模块实时看到当前所读取的传感器信号。这个数据也可以保存下载,做后期传感器标定与分析。
图14 信号波形
传感器标定,也就是经常都需要将原始值进行线性或非线性缩放以及平移,得到有物理含义的数值,比如自定义的光照强度等级。如下图,中间接入一个简单的查表模块进行线性缩放。
后续
支持一键下载的硬件除了举例的 Arduino之还有很多,算法的设计也可以非常复杂。实际上,越是复杂的算法,才越能体现框图式算法设计方法的优势。
下载安装对应的硬件支持包之后,帮助文档里都会提供由浅入深的应用案例。如下图是一个LEGO解魔方算法的一个案例。
图15 LEGO解魔方算法模型
打开这个模型,点击编译,就可以把这个算法完整下载到 LEGO 机器人上去了,有兴趣的可以自己亲自动手试一试。
图16 LEGO解魔方
结语
使用MATLAB/Simulink Support Package 相当于铺平了从Simulink 到硬件实现的路,使得不擅长写 C 代码的人可以彻底摆脱代码实现的困扰,借助 Simulink 平台也能轻易的开发出更多有趣的应用来。
全部0条评论
快来发表一下你的评论吧 !