高识杰
(山东科技大学,山东 青岛 266590)
近年来,我国人工智能技术取得了迅猛的发展,计算机技术和各类传感器技术也都有着很大的进步,正是这些技术的快速发展为智能扫地机器人在科技领域取得重大成就做出了铺垫[1]。智能扫地机器人的最终目的是实现智能化与自主化,即在无人控制的情况下能独立自主地完成安排的清扫任务。本文基于单片机设计原理,设计了一款智能扫地机器人,具体思路如下。
本文基于单片机设计的智能扫地机器人系统如图1所示,整个硬件系统包括超声波测距模块、红外线避障模块、姿态检测模块、单片机模块、电机及其驱动电路模块、清扫模块6个模块[2]。
图1 系统硬件系统
智能扫地机器人的软件流程如图2所示,单片机上电之后先对GPIO引脚、红外线避障模块、姿态检测模块、超声波测距模块以及电机控制模块进行初始化。
图2 系统软件流程
初始化后,先检测前方的距离,当扫地机器人前方距离障碍物很远就直接前进,向前移动的同时检测前方的距离[3];当扫地机机器人移动到障碍物前时,就触发避障程序(该程序将会在软件设计部分中详细说明)。
本设计中,单片机控制模块选择ARM单片机作为控制核心,硬件连接思路如下。
(1)GPIOA.1连接到超声波模块的触发端口Echo。
(2)GPIOA.2作为终端捕获口连接到超声波模块的距离信息发送口Trig。
(3)GPIOA.5—GPIOA.7和GPIOB.0是电机的控制端口,连接到电机控制芯片左侧正反转和右侧正反转。
(4)GPIOB.1连接清扫电机控制芯片。
(5)GPIOA.4、GPIOA.15、GPIOB.10、GPIOB.11 4个引脚为单片机的IIC引脚,与MPU6050的INT、AD0、SCL以及SDA连接。
(6)GPIOB.9和GPIOB.8为IO口,接收扫地机器人两侧红外避障模块的传感器信号。
本设计选取MPU6050六轴加速度陀螺仪传感器作为智能扫地机器人的姿态传感器,如图3所示。该数字运动处理器可以帮助使用者省去大量的姿态数据运算,可以减轻加速度计和陀螺仪的运行压力,有效地减少加速度计和陀螺仪的温漂所带来的误差。
图3 MPU6050硬件接线
红外避障模块主要由红外避障传感器完成工作,当模块通电后,红外线发射二极管开始工作。当遇到不透明障碍物时,障碍物会吸收一小部分红外线,并反射绝大部分的红外线,模块另一个光敏二极管接收到红外线后会改变其反向的导通阻值[4],这样只需再配备一个分压电阻就可以将红外线信号转变成电压信号。
本设计使用小型直流电机作为扫地机器人的动力来源,电机额定工作电压为5 V,额定工作电流为100 mA,额定转速为190 r/s,最终算出每台电机额定功率。
扫地机器人需要4个轮子,且每个轮子都由一个电机来驱动,一共需要4个电机,总功率为2 W。设计中,共需要3组L9110 H芯片,L9110 H支持正反转控制,如果电机的正极接OB,负极接OA,IB就是正转控制,IA为反转控制,反之亦然。硬件连接电路如图4所示。
图4 L9110H硬件连接
本设计使用HC-SR04超声波测距模块测量扫地机器人与前方障碍物之间的距离,模块为3.3 V低压工作模块,不需要额外使用电源电路给模块提供电能。HC-SR04超声波模块可以测量圆锥角15°、高为4 m的圆锥体范围内的所有物体与模块的距离。该模块有两根通信线,但其通信协议既不属于同步通信,也不属于异步通信,而是一种极其特殊的TTL电平通信[5-6]。
本设计需要一个框架支撑4个电机以及电源模块和控制板,框架参数如下。
整个车体由两块透明亚克力板组成,车体长260 mm,宽140 mm,6个铜柱支撑两块亚克力板构成一个夹层,夹层宽35.5 mm用于固定电机。车轮直径为6.6 cm,根据上节电机的额定转速可以算出,扫地机器人的行进速度为39 m/min。
本设计使用3个5号电池串联组成的干电池组作为外置电源,额定输出电压为4.5 V,电池组容量为2 700 mAh。使用专门的电池盒装配(电池盒上有电源开关),足以支撑整套智能扫地机器人系统的电能供应。
本设计使用旋转式清扫装置,由一个48 V的电机拖动,转速为1 200 r/min。通过外置继电器间接驱动,清扫装置直径为20 cm,刷头材质为棉材质,以保证更高效率的清扫。
本文设计的两个红外避障模块程序,是将GPIOB的IDR寄存器的第9位和第8位重命名为Lift_sen和Right_sen,以便操作。当模块未检测到障碍物时,默认输出高电平;当遇到障碍物时,输出低电平。
首先,在整个库中有3个文件,分别是IIC的通信函数驱动文件、DMP驱动文件和MPU6050陀螺仪与监督度计的驱动文件。其中,mpuiic.c文件主要是IIC通信协议的定义。
其次,inv_mpu.c文件是MPU6050姿态运算的相关函数和算法,其中的函数是对DMP算法的配置,加载了DMP模块固件,最后再重置陀螺仪;mpu_dmp_get_data函数是操作DMP单元获取翻滚角、俯仰角和航向角3个欧拉角量姿态数据。
最后,MPU6050.c驱动文件包含了MPU6050六轴加速度陀螺仪传感器的初始化。本设计不会直接使用三轴加速度量和三轴陀螺仪量,只使用MPU6050的初始化函数MPU_Init。通过将GPIOA.15设置成MPU60 50模块的AD0模块为地址设置端口,将GPIOA.4设置成模块的中断输入端口。
首先,捕获中断初始化函数CAP_Init。触发方式设置成上升沿中断触发,对中断优先级和中断服务函数进行配置。具体如图5所示。
图5 捕获中断服务函数程序流程
其次,TIM2_IRQHandler函数。当中断触发时,会先查看捕获完成标志位是否为高,为高说明已经捕获完成。如果没有捕获完成,则要查看触发了什么中断,如果是更新中断,要看溢出计数是否溢出。如果溢出,则需要强制结束捕获;如果未溢出,则需要溢出计数+1。
最后,Lenth函数。函数运行后,会检测捕获完成标志位是否为1,如果为1,就读取溢出计数,并乘65 536后再加计数器内的计数数值,最后将计数的数值除以58,这样计算出来的是以cm为单位的距离数据;如果捕获未完成,则返回上一次计算的距离数据。
car_movtion_Init函数是将GPIOA.4、GPIOA.5、GPIOA.6、GPIOA.7以及GPIOB.0设置成推挽输出模式。因此,本次定义了小车向前、向后、左转、右转和静止5个动作模式,分别为car_front、car_back、car_lift、car_right和car_static 5个函数。
当执行car_right函数时,单片机驱动左侧轮子向前行驶并驱动右侧轮子向后行驶,机器人车体则原地右转;当执行car_lift函数时,单片机驱动左侧轮子向后行驶并驱动右侧轮子向前行驶,机器人车体则原地左转。
3.5.1 变量定义介绍
关于float pitch、roll、yaw 3个量,分别是储存俯仰角、翻滚角和航向角的浮点量变量。
u32 time_F=0;
该变量用于测算障碍物的长度。由于小车避障时一定会偏移“主航线”一定的距离,在避障结束后需要再返回到主航线上。
static u8 dir=0;
该变量用于标记当前为正向行驶还是反向行驶的方向标志位。1为反向行驶,0为正向行驶。
3.5.2 转向控制程序介绍
扫地机器人的转向控制函数共设计了4个转向函数。
(1)right_first_corr函数。该函数是控制避障时的第一次右转,在执行函数之前会先确定是正向行驶还是反向行驶。
(2)Lift_first_corr函数。该函数为避障时第一次左转,在转向之前会判断是正向行驶还是反向行驶。
(3)Lift_second_corr函数。该函数为第二次左转函数,其转向逻辑与第一次左转函数类似,先判定是正向行驶还是反向行驶,如果正向行驶,需要左转将航向角修正至90±2°;反向行驶,需要左转将航向角修正至-90±2°。
(4)right_second_corr函数。该函数为第二次右转函数,其转向逻辑与第一次右转函数类似,当正向行驶时,需要将当前的航向角修正至0±2°;反向时,需要将当前的航向角修正至180±2°。
3.5.3 避障控制程序介绍
本文设计的智能扫地机器人在房间内的行走路径为“弓”字形,其避障逻辑无论是正向行驶还是反向行驶都是右转避障,即当扫地机器人在“弓”字形路径上行驶时,遇到障碍物的第一动作先右转90°躲避障碍物。
3.5.4 主函数程序介绍
单片机上电后,会初始化各个模块。首先,初始化delay系统延时功能,再设置中断组为组别2,即两位抢占优先级和两位相应优先级;其次,对小车运动模块进行初始化,再初始化MPU6050模块和DMP处理单片机;最后,初始化超声波测距模块和红外线避障模块。
按照以上设计思路,对小车的硬件和功能进行测试,包括机器人的驱动能力、姿态检测模块对航向角的测量以及小车的避障功能。
测试得出,当把电池仓的电源开关打开,各模块的电源指示灯都亮起,说明供电正常;上电后,机器人会静止一段时间,主要是对各模块进行初始化;初始化完成后,扫地机器人会向前移动。
当扫地机器人运行到障碍物前时,会向右旋转90°,沿着障碍物向前移动,直到左侧的红外避障传感器不再触发信号,当确定左侧没有障碍物时,机器人会左转90°躲避障碍。当扫地机器人运行到障碍物的后方时,会回到“主航线”继续运行,如果前方有障碍物,则会继续进行避障操作。
本文基于红外测距原理,结合单片机设计了一款智能扫地机器人,由各类硬件电路构成的执行模块进行避障测试,旨在完成特定的清扫任务。经系统软硬件联调测试,本文设计的扫地机器人在实际操作中具有较为显著的可行性,不仅造价划算,而且性能优越,适合在今后的居家应用中推广。