主要内容

Arduino®机器人线跟随应用

这个例子展示了如何在Simulink®中创建一个直线跟随算法,以及如何在Arduino机器人上运行它。万博1manbetx

介绍

万博1manbet万博1manbetxxSimulink Support Package for Arduino Hardware可以在Arduino Robot上创建和运行Simulink模型。该机器人有两块基于Leonardo (ATmega32u4)的主板:Arduino机器人电机板和Arduino机器人控制板。Arduino机器人控制板有模拟输入引脚、数字输入/输出引脚、PWM、键盘、电位器(POT)、指南针、蜂鸣器等外围设备。Arduino机器人电机板有模拟输入引脚、数字输入/输出引脚、PWM、电机驱动器、电机、车轮、微调电位器(TRIM)、红外传感器等外围设备。有关详情,请参阅Arduino机器人网站

这个例子展示了如何创建一个Simulink模型,通过访问红外传感器和电万博1manbetx机,在Arduino机器人电机板上运行直线跟随算法。您将了解如何使用来自Simulink库的模块和来自Simulink支持包的Arduino硬件的标准库来访问Arduino机器人电机板的外围设备。万博1manbetx万博1manbetx

这个例子演示了如何使用Simulink库和标准Arduino库中的模块访问Arduino机器人控制板的外围设备(键盘,蜂鸣器)。万博1manbetx您将学习如何在Arduino机器人控制板和Arduino机器人电机板之间建立串行通信。

先决条件

如果您是Simulink新手,我们建万博1manbetx议您完成以下步骤:交互式仿真软件教程万博1manbetx开始使用Simulink万博1manbetx,及万博1manbetx仿真软件开始视频。

所需硬件

要运行此示例,您将需要以下硬件:

  • Arduino机器人

  • USB电缆

  • 4节可充电镍氢AA电池

  • 9 v适配器

  • A0白色薄板上的轨道图,带有~1.5“宽的黑线

介绍直线跟随器的应用

Arduino机器人的直线跟随机构如下图所示:

在这个应用程序中,你需要得到Arduino机器人从黑线中心的电流偏差来得到Error信号。根据错误信号,您将驱动Arduino机器人电机板上的电机采取纠正措施,并将Arduino机器人带回黑线的中心。

1.在检查Arduino Robot时,你会注意到Arduino Robot Motor Board上的红外传感器可以得到Arduino Robot的电流偏离黑线的中心。您将学习使用来自Simulink库和标准Arduino库的块从IR传感器读取值。万博1manbetx

2.您将学习如何提供脉宽调制(PWM)信号来控制连接到Arduino机器人电机板的电机,并旋转轮子来移动Arduino机器人。

任务1 -创建一个Simulink子万博1manbetx系统来读取Arduino机器人电机板上的红外传感器

在本节中,您将学习如何将IR传感器值解码为尺寸为5的Simulink信号,该信号对应于Arduino机器人电机板上存在的IR传感器数量。所描万博1manbetx述的逻辑在中实现红外传感器子系统.Arduino机器人电机板的原理图可从网站的“原理图及参考设计”一节下载Arduino机器人网站.红外传感器的连接方式如下:

5个红外传感器(IR0-IR4)连接到多路复用器(MUX)的输入通道。MUX选择器MUXA、MUXB、MUXC分别连接微控制器上的数字引脚7、8、11。单片机一次只能读取一个红外传感器,通过提供3个数字信号(MUXA, MUXB, MUXC)在MUX的输出上选择所需的红外传感器信号。3个数字信号足以接入5个红外传感器。MUXA是LSB, MUXC是选择器字节的MSB。根据选择字节,选择如下红外传感器:

穆克赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛赛!!!!!!!_

所选红外传感器,呈现在MUX输出上,连接到微控制器的模拟引脚A2。

下面的步骤将向您展示如何在Simulink中创建一个屏蔽子系统来读取IR传感器。万博1manbetx

1.使用一个常数块以确定要读取的红外传感器。从一个固定的街区库:Simulin万博1manbetxk >源码并更新以下设置:常量值->从0-4任意值,采样时间-> 0.002,输出数据类型-> uint8。0 ~ 4对应红外传感器编号。

2.将红外传感器编号转换为二进制值,以提供对应于MUXA, MUXB, MUXC的数字引脚的输入按位运算符块。使用3按位运算符阻塞操作和值0x1, 0x2, 0x4分别为选择器字节提供LSB给MSB。使用3数字输出街区库:Arduino万博1manbet万博1manbetxx硬件的Simulink支持包> Common将MUXA、MUXB、MUXC的Pin码分别填充为7、8、11。连接选择器字节的LSB(从AND操作获得)到对应于MUXA的数字输出块,中间位到MUXB, MSB到MUXC。

3.使用一个模拟输入块从库:Arduino万博1manbet万博1manbetxx硬件的Simulink支持包> Common读取对应MUX输出的引脚A2。输入引脚2和取样时间0.001。模拟输入块从红外传感器读取数据类型uint16的值,范围从0-10230 -白色1023 -黑色).使用一个数据类型转换块将值转换为int16。将数据类型转换块的输出连接到外港

4.将数字输出块的优先级设置为1,因为在读取IR传感器值之前需要写入选择器字节。将模拟输入块的优先级设置为任何大于1的值,以确保在选择器字节写入MUX后执行。要设置块的优先级,请右键单击块>属性>常规>优先级。要了解有关块优先级及其对块执行顺序的影响的更多信息,请参阅指定块的属性

5.使用一个对迭代器子系统通过所有5个传感器。For迭代器子系统的输入是步骤1中创建的Constant块。Constant块的值为[0 1 2 3 4],表示所有5个传感器。使用外港for迭代器子系统的输出。

6.将步骤2-4创建的块放到For Iterator子系统中。的内部打开For Iterator子系统红外传感器子系统并检查选择器分配阻碍。选择器和分配块用于一次循环一个IR传感器编号,并将值分配给输出向量。

7.通过选择步骤6中创建的所有块来创建子系统,如下所示:

任务2-创建Simulink子系统以万博1manbetx控制Arduino机器人电机板上的电机

在本节中,您将学习如何使用所需的扭矩Simulink信号,在Arduino机器人电机板上旋转2个电机,向前和反向方向。万博1manbetx所描述的逻辑在汽车子系统.Arduino机器人电机板原理图显示了微控制器与电机驱动器的连接如下:

电机驱动器通过从微控制器获取输入来控制左右电机的速度和方向。注意微控制器的数字引脚6、5、10、9连接到电机驱动器的IN_A1、IN_A2、IN_B1、IN_B2。电机驱动器的输入IN_A1、IN_B1分别对应左、右电机的前进运动。IN_A2、IN_B2分别对应左、右电机的反向运动。

一个脉宽调制(PWM)信号可以用来控制电机。从微控制器到电机驱动器的正输入对应于电机的正向运动,而负输入对应于电机的反向运动。对于两个电机的前进运动,你必须将PWM信号应用到IN_A1和IN_B1,并将零值应用到IN_A2和IN_B2。类似地,对于反向运动,必须将PWM信号仅应用于IN_A2和IN_B2,将零值应用于IN_A1和IN_B1。

下面的步骤展示了如何在Simulink中创建一个屏蔽子系统来控制电机。万博1manbetx

1.使用一个输入块从微控制器获得左电机的输入。

2.脉宽调制块出现在库:Arduino万博1manbet万博1manbetxx硬件的Simulink支持包> Common可以用来发送PWM信号来控制电机。使用2个PWM模块,输入IN_A1, IN_A2的引脚6,5。

3.输入值与IN1 (IN_A1/ IN_B1)、IN2 (IN_A2/ IN_B2)的关系如下所示:

输入| IN1 | IN2  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 已经输入| 0负| 0 | | abs(输入 ) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

向前移动时,使用aMUX块多路输入值和a常数数据类型为int16的值为0的块。

4.PWM块接受0-255 (uint8)的值。如果要反向移动,请使用腹肌整数舍入模式->舍入将输入的负值转换为正值,并使用步骤3中值为0的Constant块将其多重化。

5.使用有条件的开关块u2 >阈值其中u2 ->输入,Threshold ->。如果条件满足,则选择正向移动多路复用值,否则选择反向移动多路复用值。

6.使用一个多路分配器将输出连接到对应于IN_A1, IN_A2的2个PWM模块。

7.对正确的电机重复步骤1-6中的整个逻辑。输入对应IN_B1, IN_B2的2个PWM模块的引脚10,9。

8.通过选择如下所示的所有块来创建一个子系统:

任务3 -用直线跟随算法建立Sim万博1manbetxulink模型

在本节中,线跟随器算法被实现为带有PID控制器的闭环控制系统。所描述的逻辑在中实现直线跟随算法子系统. 算法描述如下:

蓝点表示红外传感器(IR0 - IR4)。当Arduino机器人位于黑线中心时,IR2读数为黑色(~1023),IR0、IR1、IR3、IR4读数为白色(~0)。选择一个阈值将0-1023的范围转换为二进制值。当低于阈值(亮或白色背景)时为1,高于阈值(暗或黑色背景)时为0。

每个传感器都有一个权重,当检测到更高的偏差时,每个传感器都有更高的值,以提供更高的控制信号。加权电流偏差由下式计算:

$$ Current\ deviation = frac{\sum_0^4\ sensor\ read \ (0/1)\ *\

当机器人在一条细黑线上居中时,IR2读取0,而IR0、IR1、IR3、IR4读取1。

代入式中,计算出电流偏差如下:

$ $目前\偏差= \压裂{(1 * 4)+ (1 * 2)+ (0 * 0)+ (1 * 2)+ (1 * 4)}{1}= 0 $ $

期望的偏差当机器人以一条细黑线为中心时,将常数值设为0。误差计算为$Error\ =\ Desired\ deviation - Current\ deviation$.在这种情况下,当电流偏差为0时,误差为0,机器人可以直线移动。下表列出了所有可能出现的错误的汇总列表:

  • * -除以0的情况

注意,正误差意味着Arduino机器人>右转左电机扭矩增加,右电机扭矩减少。Arduino机器人的负误差表示左转>左电机转矩减小,右电机转矩增大。

为了在Simulink中实现上面提到的线跟随逻辑,可以创建两个子系统:一个是使用IR传感器获取Arduino机器万博1manbetx人的电流偏差,另一个是控制电机。中的实现示例可以看到直线跟随算法子系统的模型。

1.看看房子里面电流偏差计算分系统. 根据上述算法给出机器人当前偏离黑线中心的偏差。

点需要注意:

  • 红外传感器门限设置为固定值600。

  • 使用获得

  • 整数溢出饱和选项检查用于数学功能块

  • 整数舍入模式作为圆形的用于产品块,以确保当前偏差代表准确的整数值。

  • 开关块,以处理可能被零除的情况下,为当前偏差计算。

2.分析转矩估计子系统.它给出了所需的扭矩值(从-255到255)为左和右电机。

点需要注意:

  • 机器人的基本扭矩设为常数值100。的输出数据类型设置为int16以匹配扭矩校正

  • 状态流程图实现在三种不同的状态之间切换:GoStraight, TurnLeft, TurnRight扭矩方向

3.观察红外传感器子系统的优先级为1,电机子系统的优先级为5,以确保只有在获得机器人与红外传感器的电流偏差后才对电机施加控制动作。

4.在这个例子中,一个离散PID控制器块被用来得到基于误差的控制动作。您可能需要通过将Robot放置在轨道上迭代地调整P、I、D值。确保电池充足电以使车轮正常运转。

任务4 -在Arduino机器人电机板上运行直线跟随程序

在本节中,您将学习在Arduino机器人电机板上部署Simulink算法所需的步骤。万博1manbetx

1.使用USB线将Arduino机器人电机板连接到主机。这条电缆也会给电路板供电。

2.在模型中,单击模拟>模型配置参数打开配置参数对话框。在打开的对话框中,选择硬件实现窗格中选择和Arduino机器人电机板从下拉菜单中选择硬件板。您可以手动选择COM端口号,也可以保留该端口号自动其余设置保持默认值。然后单击应用>好吧.一个预配置模型是为了你的方便。

3.下一个点击部署到硬件按钮。

4.下载模型后,断开Arduino机器人电机板上的USB线。

5.将机器人放在轨道上,打开Arduino机器人电机板上的机器人电源开关。模型在Arduino机器人电机板上运行,Arduino机器人开始移动。

6.环境光和轨道厚度等因素会影响机器人跟踪黑线的能力。如果Arduino机器人没有跟踪黑线。为了克服这些问题,您可以调整离散PID控制器的P、I、D值,并在模型中更改基本扭矩、IR传感器阈值的值,以使机器人跟踪黑线。使用在Arduino机器人电机板上再次下载模型部署到硬件选择。重复,直到Arduino机器人正确地跟随黑线。

7.关闭机器人开关。

任务5 -通过Arduino机器人控制板和Arduino机器人电机板之间的串行通信扩展模型

在本节中,您将学习如何建立Arduino机器人电机板与Arduino机器人控制板之间的串行通信。您将学习如何解码Arduino机器人控制板上的键盘信号,以及如何使用它们作为Arduino机器人电机板上的控制信号。所描述的逻辑在Arduino机器人控制板模型Arduino机器人电机板模型

本例使用Arduino机器人控制板上的小键盘和蜂鸣器外设向Arduino机器人电机板发送控制命令,并对从Arduino机器人电机板接收到的反馈做出反应。Arduino机器人控制板的原理图可以从网站的“原理图与参考设计”一节下载Arduino机器人网站.如图所示,小键盘连接到Arduino机器人控制板的引脚A0。键盘有5个按键控制一个分压器电路。按键后检测到的电压在微控制器上由10位(0-1023)模拟值到数字值表示。根据引脚A0处电压的数字表示,您可以知道按下了哪个键。

A0数字值|键|键|键|键|键|键| 0-10 |键|键|键|键|键|键|键|键|键|键|键|键_

Arduino机器人控制板的原理图显示,蜂鸣器连接到数字引脚D5。

通过按下Arduino Robot control Board上的按键,可以控制Arduino Robot Motor Board上轮子的移动,并根据Arduino Robot Motor Board收到的反馈信息在Buzzer上播放音调。两块板之间采用串行通信进行数据传输。

一)通过Arduino机器人控制板键盘发送串口命令:

你可以看到Arduino机器人控制板上的按键。按键5可以在机器人的两种模式之间进行切换:直线跟随模式和手动模式。根据选择的模式和按下的按键,可以向Arduino机器人电机板发送串行命令。下表总结了Arduino机器人控制板串行发送的数据:

模式|键按下| |串行数据移动  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 行追随者| NA |跟踪黑线中心| 1手动| | | 0停止没有手动| 1 |逆时针| 2手册| 2 | |落后3手册| 3 | |转发4手动顺时针| 4 | | 5  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _
  • NA -不适用

1.打开Arduino机器人控制板模型.要知道按下的键可以使用模拟输入块从库:Arduino万博1manbet万博1manbetxx硬件的Simulink支持包> Common引脚编号0,采样时间0.004。

2.遵守关键防反跳如果按键保持按下0.016秒,则使用状态流程图验证按键按下。请注意,按键反弹时间可能因机器人硬件的不同而不同。

3.modeSelect状态流程图检测是否按下键5,并从直线跟踪模式切换到手动模式,反之亦然。注意,默认模式是直线追随者。除5之外的任何按键对直线跟随模式没有任何影响。

4.串行命令子系统决定以直线跟随器或手动模式发送的数据。在手动模式下,可以根据按键发送到Arduino机器人电机板的数据使机器人移动。

5.使用串行传输块从库:Arduino万博1manbet万博1manbetxx硬件的Simulink支持包> Common端口1发送命令到Arduino机器人电机板。串行传输块的初始值为1,表示默认的线跟随器模式。

6.注意,模拟输入键盘读块的优先级是1,串行传输块的优先级要低得多,比如10。这确保您在连续发送命令之前确定按下的键。

b)在Arduino机器人电机板上接收串口数据并发送反馈:

1.打开Arduino机器人电机板模型.从Arduino机器人控制板接收串行数据串行接收块从库:Arduino万博1manbet万博1manbetxx硬件的Simulink支持包> Common端口1,采样时间0.002。注意,串行接收块比串行传输块有更高的采样率Arduino机器人控制板模型以确保不遗漏任何数据。

2.遵守决定模式用于确定Arduino机器人电机板所遵循的模式的状态流程图。默认模式为直线跟随。请注意,状态Serial Receive块的输出指示是否接收到任何新数据。状态流程图使用状态信息在模式之间进行相应的切换。

3.请参阅启用的子系统线跟随器模式有线跟随算法放置在里面。

4.手动模式启用的子系统使用开关情况块从Arduino机器人控制板接收的数据从机箱子系统选择相应的移动。默认移动为停止,即左电机输入和右电机输入均为0。

5.根据开关箱块a串行传输块(带端口1)选择的移动向Arduino机器人控制板发送反馈。值1、2和0作为反馈发送。值1对应于逆时针或顺时针移动选择。值2对应于向前或向后移动选择。值0对应于停止的默认移动。

6.开关箱块的优先级(1)高于串行传输块(20)的优先级。

7.你可以看到线跟随器模式手动模式子系统将左右电机的转矩作为输出。这些输出使用合并块,作为电机子系统的输入。串行接收块的优先级高于电机子系统。

c)在Arduino机器人控制板上串行接收反馈:

1.打开Arduino机器人控制板模型.的串行接收端口1和采样时间0.002的模块接收来自Arduino机器人电机板的反馈。

2.确定基调状态流图使用串行接收块接收的数据来确定要播放的音调。以下是接收数据和所选音调的摘要:

数据收到|基调(Hz ) _ _ _ _ _ _ _ _ _ _ _ _ _ 1 | 2 | 125 0 | 0  _ _ _ _ _ _ _ _ _ _ _ _ _

3.脉冲发生器模块用于产生50 Hz和125 Hz频率。一个常量块用于0hz。

4.这些色调被合并使用合并块并作为输入数字输出块从库:Arduino万博1manbet万博1manbetxx硬件的Simulink支持包> Common.“蜂鸣器”对应的Pin码设置为5。

5.串行接收模块的优先级小于串行发送模块,蜂鸣器模块的优先级最小。

任务6 -在Arduino机器人控制板和Arduino机器人电机板上运行各自的模型

在本节中,您将学习在Arduino机器人控制板和Arduino机器人电机板上部署Simulink算法所需的步骤。万博1manbetx

1.先用USB线将Arduino机器人控制板连接到主机。

2.Arduino机器人控制板模型,选择五金板为Arduino机器人控制板仿真>模型配置参数>硬件实现.选择COM端口手动或自动,同时保持其余设置为默认。然后点击部署到硬件按钮。

3.下载模型后,断开Arduino机器人控制板上的USB线。

4.使用USB线将Arduino机器人电机板连接到主机。

5.Arduino机器人电机板模型,选择五金板为Arduino机器人电机板仿真>模型配置参数>硬件实现.选择COM端口手动或自动,同时保持其余设置为默认。然后点击部署到硬件按钮。

6.下载模型后,断开Arduino机器人控制板上的USB线。

7.将机器人放在地面上,打开Arduino机器人电机板上的电源开关。模型在板上运行,Arduino机器人以Line Follower的默认模式启动。当你按5键时,它从线跟随器切换到手动模式,并按照手动模式下的默认动作停止。然后根据按1、2、3或4键,它可以逆时针、向后、向前或顺时针移动,只要按下键。一旦你释放了钥匙,机器人就会进入停止模式。按下键5,机器人切换到直线跟随模式。

8.关闭机器人开关。

其他可以尝试的事情

  • 通过使用一些示例输入来验证每个子系统的外设访问工作。例如,可以通过Constant块(值范围从-255到255)向子系统使用样本输入来控制电机,以查看轮子是向前旋转还是向后旋转。

  • 调整PID控制器设置。提高机器人的移动速度和转弯速度。

  • 本例使用一个恒定的红外传感器阈值。尝试实现红外传感器阈值的动态计算,该阈值会因环境光线而变化。

  • 本例中使用了一个固定值基转矩。尝试动态调整基础扭矩。例如,你可以通过增加直线运动的基础扭矩来让机器人跑得更快。为了确保更平稳的转弯,你可以降低基础扭矩。

  • 尝试访问Arduino机器人控制板和Arduino机器人电机板上的其他外围设备。例如,探索从Arduino机器人控制板上的电位器发送串口命令到Arduino机器人电机板。

总结

这个例子展示了如何创建一个线条跟随应用程序,并在Arduino机器人上运行它。这个例子为Arduino机器人提供了一个基本的线跟随算法。看看你是否可以修改现有的算法或实现一个新的算法,使你的机器人跟踪黑线更快,不管在轨道设计中的任何十字路口或锐角转弯,都遵循这条线。

在本例中,您已经了解了如何使用Simulink Support Package for Arduino硬件中的模块访问Arduino机器人电机板、Arduino机器人控制板的不同外围设备。您已经学习了如何在Arduino机器人控制板和Arduino机器人电机板之间建立串行通信。万博1manbetx万博1manbetx

使用Simulink库中的模块和Arduino的Simulink支持包访问Arduino机器人不同外围设备的技术可以扩展到其他基于Arduino的板。万博1manbetx万博1manbetx