0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Arduino机器人绘制一个MATLAB Logo

MATLAB 来源:MATLAB 2023-07-13 10:04 次阅读

引言:

随着学习和研究的不断深入,在仿真模拟的基础上引入硬件设备变得越来越流行,也越来越重要,MATLAB/Simulink 在硬件支持方面应用广泛,提供了上百个硬件支持包来满足使用者的需求,下载安装好之后,可以很方便地使用封装好的函数和模块对硬件进行控制。依靠 MATLAB 强大的代码生成功能,可以灵活部署到 Arduino、Raspberry Pi、NVIDIA Jetson 等嵌入式设备中。MATLAB 现在支持生成 C/C++ 代码、用于 FPGA 的 VHDL 代码以及 NVIDIA GPU 的 CUDA 代码等,并且所生成的代码针对相应的算法也进行了优化,对于不具备相应手写代码经验的用户来说,极大地降低了学习成本,可以将更多的精力放在模型或算法本身的设计当中。

今天我们就从 Arduino 入手,通过一个简单的示例介绍 MATLAB 在硬件支持方面的一些初步应用,以及这些内容可以如何应用到教学当中。Arduino 有多个不同型号的开发板,因为成本低廉简单易学被广泛应用。在之前的文章 “MATLAB/Simulink × Arduino Engineering Kit | 机电一体化虚拟实操课程”中我们已经了解到 Arduino Engineering Kit(AEK)在课堂教学中的应用。AEK 是 MathWorks 与 Arduino 公司合作开发的工程套件,套件除了基本的开发板还包含配套的电机传感器等组件,通过组装调试,用户可以搭建成三个不同的机器人。同时套件还包含完整的学习材料和 MATLAB/Simulink 代码模型,非常适合控制类相关领域的初学者学习以及课堂教学。

下面我们将通过对 AEK 组装调试“墙壁绘图机器人”过程的详细介绍,展示 MATLAB 在硬件支持、电机控制、以及图像处理等方向的应用,无论之前是否有相关基础都可以快速上手。

1. 组装机器人

8ba72ba4-209c-11ee-962d-dac502259ad0.png

AEK 套件中包含了组装绘图机器人所需的全部零部件,包括一款型号为 Nano 33 IoT 的 Arduino 开发板、扩展板、三个电机以及其他配件。在安装视频的指导下,通常 1~2 个小时就可以组装好。

8bd753ba-209c-11ee-962d-dac502259ad0.png

机器人的工作原理是将两个滑轮固定在竖直放置的白板顶部两端,滑轮与两个直流电机相连,通过控制机器人在白板上移动来进行绘图,此外机器人还配有伺服电机来控制记号笔的起落。所有的控制和调试都可以在 MATLAB 中进行。

2. 图像处理

我们绘制的图形以简笔画为主,以下图(1)所示的 MATLAB logo 为例,你可以在 MATLAB 中连接摄像头进行拍照,也可以将已有的照片导入 MATLAB 中。要将照片转化成机器人可以识别的数据格式并用于进一步的复现绘制,需要对图片进行一系列处理。MATLAB Image Processing Toolbox 中包含了大量成熟的函数和算法可以直接调用,通过运行以下代码可将图(1)处理成图(2)的形式:

img2 = rgb2gray(img);
img3 = ~imbinarize(img2,'adaptive','ForegroundPolarity','dark');
img4 = bwmorph(img3,'clean');
img5 = bwmorph(img4,'thin',inf);

此时图片中已经只包含绘图所需的轮廓线,但我们还需要做进一步的处理来获取对应的坐标。使用递归的方法调用 bwboundaries 函数以及数据处理可以获得图(3)所示曲线的一系列坐标值。最后将曲线进行合理的分段、合并形成图(4)所示的三组坐标值,分别用三种颜色表示,这也意味着要完成绘制需要画三笔。

至此我们已经准备好绘图需要的数据,接下来可以连接硬件对电机进行控制了。

(1)

(2)

8c6f084a-209c-11ee-962d-dac502259ad0.png

(3)

8c86f252-209c-11ee-962d-dac502259ad0.png

(4)

3. 连接硬件

8c9f32f4-209c-11ee-962d-dac502259ad0.png

MathWorks 官方提供了近 200 个硬件支持包,此外还有大量用户自己开发上传的支持包。点击 MATLAB 中“附加功能”->“获取硬件支持包”,搜索 Arduino,即可下载 “MATLAB Support Package for Arduino Hardware”。下载完成后通过 USB 将机器人与电脑连接,根据支持包提示进行驱动的安装与配置,然后就可以在 MATLAB 中控制直流电机和伺服电机的运动了。

在 MATLAB 中运行如下命令:

a = arduino

可以看到工作区中生成了一个类型为 arduino 的对象 a,包含如下属性:

8d2532aa-209c-11ee-962d-dac502259ad0.png

在此基础上可进一步连接扩展板:

carrier = motorCarrier(a)

更多支持的函数可参考帮助文档:arduino。因为电机与扩展板相连,现在我们可以通过 carrier 连接伺服电机:

s = servo(carrier,3);

设置 pos 的值,调用 writePosition 函数即可控制电机转动角度即记号笔的位置:

pos = 0.3; %Change this value as per your requirements
writePosition(s,pos)

与伺服电机类似,你也可以通过简单几行命令控制直流电机的运动,并且我们可以通过开环和闭环两种方式实现。开环的方式通过 dcmotor 函数连接电机:

mL = dcmotor(carrier,'M2');
mR = dcmotor(carrier,'M1');

设置好速度后即可通过 start 和 stop 控制电机的运转:

start(mL)
start(mR)
pause(3) % Wait 3 seconds
stop(mL)
stop(mR)

相对应的,闭环控制的方式是通过 pidMotor 实现,你可以通过调节 PID 参数获得更精确的控制:

pidML = pidMotor(carrier,2,'position',3,[0.18 0.0 0.01]); % Modify the PID gains [Kp Ki Kd] as per your requirements
pidMR = pidMotor(carrier,1,'position',3,[0.18 0.0 0.01]);

设置好目标角位移 theta 即可通过 writeAngularPosition 控制运转:

writeAngularPosition(pidML,theta,'rel');
writeAngularPosition(pidMR,theta,'rel');

在下文中我们将通过闭环控制的方式进行绘图。

以上所有控制函数列表都可以在帮助文档中查到,与电机类似,你也可以配置自己的传感器开发更多新的功能。

4. 对图像数据做进一步处理

现在我们已经得到要绘制的曲线的一系列坐标,也可以对电机进行控制。但是坐标值是基于图片生成的真实数据,要想在白板上绘制,需要将曲线坐标缩放成合适的大小,并在此基础上将坐标的变化准确地转换成电机转动的角度。

我们需要测量白板的基本尺寸,并通过查阅电机最大扭矩等参数,基于基本的力学分析,将可绘制的区域找出,并进一步设定想要绘制的区域大小,结果如下图所示。其中云图标识了根据扭矩计算出的机器人在白板移动时的可行域,可以看到当机器人接近白板顶端时扭矩将会变大,这也符合实际情况。红色区域为我们选定的最终的绘图区,根据此区域的大小我们可以将图像坐标按比例缩放为适合的范围。

8d4bdcca-209c-11ee-962d-dac502259ad0.png

由于绘制的过程是控制机器人沿一系列坐标点移动,当点过于密集时不仅会花费更多时间,甚至可能会降低精度。我们可以设置一个最小移动距离,遍历所有的坐标点将小于该距离的中间点移除,经过实验这里取为 2mm。

最后即可根据机器人的尺寸、初始位置以及电机参数通过三角函数将坐标值转化成机器人每一步移动时电机需要转动的角位移。

5.控制机器人进行绘图

现在我们可以控制机器人进行绘图了,如前文介绍,绘制的图像分为三条曲线,首先通过伺服电机将记号笔抬起,移动至第一条曲线的起点,然后将笔落下绘制,结束后再抬起笔移动至第二条曲线依次完成。

我们来通过视频看一下最终的绘制过程:

6. 总结与展望

通过调试一个简单的绘图机器人,我们可以了解图像处理、硬件连接、控制以及数学等多个领域的基础知识,快速上手 MATLAB 在这些方向的应用。在此基础上,你可以开发更为复杂的算法,处理实际拍摄的照片而非简笔画,你也可以利用两只记号笔绘制彩色图案,关于绘图机器人还有更多应用和功能等着你来解锁。除了绘图机器人,你还可以将 AEK 组装为移动漫游车或者自平衡小车,三种机器人形态会共享 Arduino 开发板、电机以及部分零部件,详细信息可以在 MATLAB 或 Arduino 官网上查看。

AEK 套件因为简单易上手、功能完整等特点,被很多老师选择用于控制类课程的教学,学生可以作为团队的形式完成整个项目,也可以根据实际需求侧重某一个应用方向来进行拓展。

对于手边没有 AEK 完整套件的同学,只需要一个 Arduino 开发板,以及摄像头、传感器等一些外设,同样可以参考 AEK 的代码和模型以及 MATLAB 的帮助文档开发自己的应用,使用方法和上文类似,大家可以充分发挥自己的想象力进行一些有趣的尝试。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    175

    文章

    2922

    浏览量

    228440
  • 机器人
    +关注

    关注

    206

    文章

    27033

    浏览量

    201396
  • 仿真
    +关注

    关注

    50

    文章

    3872

    浏览量

    132158
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184833

原文标题:暑假怎么玩?来用 Arduino 机器人绘制一个 MATLAB Logo 吧!

文章出处:【微信号:MATLAB,微信公众号:MATLAB】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    matlab机器人

    请问一下机器人的计算工作是否用MATLAB在计算呢?能简单说明下吗?
    发表于 05-30 16:58

    DIY打招呼的乌龟机器人

    Arduino IDE自带)和NewPing.h(点击这里下载)。我首先定义了触发引脚、相应引脚以及超声波传感器的最大距离;之后我又定义了布尔变量,可以用来切换机器人的自动模式。
    发表于 12-11 17:26

    群舞蹈机器人表演

    和Zigbee通讯模块,并能够扩展其它智能传感器。所有机器人通过Arduino控制器组成的协调器进行协同控制,既可嵌入式独立运行,也可以通过USB 接口连接到PC 进行控制。套件
    发表于 03-24 11:36

    如何学做一个机器人

    我想用arduino一个机器人。源码不知道,去哪找。还有应该看那些参考书籍。各位前辈有什么好的建议吗?
    发表于 05-15 22:32

    自律型机器人制作入门.基于Arduino

    开始,详细介绍了简单自律机器人的制作方法,包括轮型机器人和关节型机器人两种类型。读者可以购买相应的套件组装,也可以自己动手制作。《自律型机器人制作入门:基于
    发表于 06-23 11:18

    Arduino机器人制作指南

    Arduino机器人制作指南
    发表于 06-14 17:40

    Arduino调试Rapiro机器人

    火了把。Rapiro这个名字来源于RAspberry PI RObot(树莓派机器人),它是12自由度的机器人,其处理器为MEGA32
    发表于 08-10 20:19

    怎样去设计基于arduino的简单记忆机器人

    arduino的入门作品——简单的记忆机器人作为新手小白但却有这颗激情与热爱的心的我,在昨天上午看到记忆机械手的视频后实在是按耐不住自
    发表于 03-02 07:24

    DIY设计款多功能Arduino机器人

    描述多功能Arduino机器人这主要是辆蓝牙控制的汽车。但是您可以将其升级为避障车和跟随车。这也包含在PCB中。
    发表于 07-04 06:59

    流行的arduino nano避障机器人项目

    描述arduino nano避障机器人这是流行的 Arduino 机器人项目。为了避免大量的
    发表于 08-02 06:44

    构建ARLOK arduino机器人的教程

    描述ARLOK arduino机器人PCB+展示代码https://github.com/Settorezero/Arlok
    发表于 08-08 07:14

    自制5合1 Arduino机器人

    描述5合1 Arduino机器人机器人控制板包含 ATmega328P 微控制器和
    发表于 08-23 06:23

    Arduino IDE制作剑龙机器人

    非常小的 PCB 来完成。但是,正如我之前所说,PCB 也是美学的基本组成部分。当我在脑海中想象整个机器人时,我想到它的背面应该有大的绿色 PCB,上面有独特的风筝形板。PCB
    发表于 08-29 07:10

    使用PCB构建Arduino机器人避障项目

    描述Arduino 机器人避障 | PCB版| 更少的布线在这个项目中,我使用 PCB 构建了最小的线版本障碍物,以避免汽车或机器人。技
    发表于 09-13 06:17

    Arduino教学机器人的使用教程

    本文档的主要内容详细介绍的是Arduino教学机器人的使用教程
    发表于 09-27 06:53