基于STM32与磁性编码器的自动分拣小车
2021-05-20蒋灵龙邹礼斌
蒋灵龙,邹礼斌,胡 荐
(重庆交通大学机电与车辆工程学院,重庆400074)
0 引言
随着电商的飞速发展,对物流的需求也随之扩大,分拣作为物流中重要的一环,人工分拣的成本、速度、及准确率的不足已很明显。根据2020年中国的智能分拣行业研究报告,智能化的分拣设备能有效应对人工分拣所面临的挑战,成为快递企业提升竞争力的刚性需求。自动分拣设备能在快递分拣环节有效节省人力成本,提升分拣速度。
本设计是一款以STM32和磁性编码器的自动分拣小车原型,可运用到快递分拣、产品归类等多种场景,还可运用到工厂端,自主到达仓库获取所需的零部件并运送到指定位置,实现由“人到物”到“物到人”的转变。
1 硬件系统的组成
本系统选用STM32作为主控芯片,L298N作为动力驱动芯片,霍尔码盘为磁性编码器、陀螺仪模块、摄像头、电源模块等组成。系统的总体结构如图1所示。
2 系统的工作原理
图1 系统结构图
电源经过不同等级调压为整个系统供电,在用户输入分拣物品或分拣顺序后,控制器通过获取陀螺仪和霍尔码盘的数据利用驱动模块驱动电机带动机器人经过程序指定的路径到达分拣目的地,再利用超声波测距获得精确的位置信息,结合光电开关,让机器人精确定位,然后控制机械臂动作,让其上面搭载OPENMV摄像头模块对物品进行识别,并把其放入机器小车自带临时仓库内,然后移动到下一位置,进行下一物品的分拣。完成分拣后自行到达指定仓库位置将临时仓库内的货物放入其中。
3 主要模块
3.1 处理器
本设计使用STM32系列的F103RCT6作为主控,它是一款以CORTEX-M3为内核的32位微处理器,具有高性能、低成本、低功耗的优点。丰富的接口以及标准的库函数使得开发过程方便快捷。
OPENMV是一个可编程的摄像头,搭载STM32芯片,使用MicroPython语言进行编程,对图进行分析。有良好的开源环境,能较为方便地调用并用于简单的图像分析。本设计让其通过串口与主控芯片进行通信,在接收到主控芯片的开始识别信号后进行识别,再将识别到的信息通过串口返回到主控芯片中。
3.2 电机驱动模块的设计
本设计采用主流的L298N电机驱动设计模块,该模块有两个使能输入端,两组逻辑输入端,两个输出口,将输出口与小车两侧的电机相连。给使能端施加PWM波可以控制输出电压的大小,可以实现电机的调速;两组逻辑控制端输入不同的逻辑组合就可以控制输出电压的方向,实现电机的正反转。
3.3 霍尔码盘
霍尔码盘是一种旋转盘式磁性编码器,其原理同光电编码器类似,使用磁性码盘替代带槽光电码盘,磁性码盘上带有间隔排列的磁极,两个霍尔元件位于码盘两侧,相较于光电编码器,磁性编码器有着在灰尘较多的环境能稳定工作的优点。多磁极码盘安装在电机的轴上,随着电机轴转动,在旋转时霍尔元件可以获得A,B两路正交脉冲,相位相差90°,通过放大电路让STM32单片机的定时器通道捕获,其波形如图2所示。
图2 码盘产生的正交脉波
表1 周期内时序
根据图2的波形图可以得到不同旋转方向时的时序(见表1所列),STM32高速捕捉A,B相脉冲信号,每次捕获到A,B相的脉冲后,将其电平与上一次捕获得到的电平进行比较,将其与对应旋转方向的时序对比后就可得到此时电机的旋转方向。
3.4 陀螺仪模块
本设计中使用HWT101姿态陀螺仪来获得机器人姿态信息,内置核心算法与卡尔曼滤波技术,静态精度0.05°、动态精度0.1°。模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态,姿态测量精度静态0.05°,动态0.1°,稳定性较好。陀螺仪通过串口的方式将姿态信息传送给主控芯片,主控芯片对姿态信息进行分析,并做出相应的调整,实现对小车姿态的闭环控制。
4 小车机械结构设计
为保证小车能运动得稳定且快速,底盘采用四轮橡胶铝合金支架结构,两侧搭载大扭矩减速直流电机。4个舵机作为机械臂的关节,中间通过连杆连接,机械臂前端带有爪子,由一个舵机控制开合,底部安装在小车底盘上,可以360°旋转。将近距离光电开关安装在爪子的前端,以便抓取更加准确,将OPENMV安装在爪子的后方,并与爪子在一条中垂线上。两个超声波传感器分别安装在小车底盘的前端和后端。带分隔的仓库固定在底盘支架上方。经试验小车在小于20°的坡度上行驶稳定。
5 小车软件系统
5.1 总体逻辑
小车在出发前对分拣目标进行设置,设置完成后就自主沿着设计好的路径向仓库出发,如果路径上有障碍物能够自主停止。在到达仓库位后对工件进行识别,为目标工件就抓取到小车的仓库中,不是目标工件就移动到下一工件为进行下一次识别,直到所有工件都识别完,然后小车移动到存放目标仓库的位置将车内目标工件放入其中,最后回到起点,本次分拣完成,等待下一个分拣任务。
5.2 小车姿态调整
STM32通过两路PWM控制两侧轮子的转速,小车在运动过程中,由于每个轮子摩擦不相同,即使对两侧轮子上的电机相同的电压,也会导致小车不能沿直线前进。STM32通过读取陀螺仪的的姿态角度值,将小车当前姿态角度与设定角度的差作为误差,两路PWM输出作为被调整量,引入增量式PID算法,实现闭环控制。将PID的参数调整好后,小车运动过程中不断读取角度值,并实时调整PWM输出,在行进方向偏移后能够快速恢复。小车在行进过程中通过超声波模块实时监测小车与前后的物体的距离,当检测到行进方向的物体与其超出安全距离后进行制动,实现避障功能。
5.3 自主定位
自主定位主要借助于陀螺仪获得方向信息,磁性编码器获取距离信息。霍尔码盘产生的两相正交波通过单片机的输入捕获通道进行判断。定义一数据用于计数,开始时计数值为0,判断为正向旋转脉冲计数值加一,反向脉冲则减一,用圆周角π除以码盘旋转一周的脉冲数n即可得每个脉冲所对应电机旋转的角度α,用α乘以车轮的外径R即可得到每个脉冲对应的理论前进距离。如果当前计数值为N,利用式(1)即可计算出小车当前前进的距离,从而实现无标识定位。另外在一个较短的时间内用这段时间的L之差除以这段时间可得到当前的速度。
5.4 OPENMV识别
对目标形状判断可以根据形状的边、角、以及与外圆等各种特征进行判断,调用OPENMV内置的算法函数进行组合就可以完成识别功能,例如要寻找画面内的圆形图形可以调用find_circles函数找到画面内的圆形;要对正方形进行判断则可调用色块占所在矩形的占空比函数density来判断,经实验正方形的占比都大于0.8;对于三角形同样可用占比的方法进行判断。要对颜色和形状同时识别则需要进行一个简单的逻辑嵌套。对于其他非单一色彩的平面和立体则使用基于模板匹配的NCC算法:将目标的灰度图保存在OPENMV内,使用算法在摄像头画面内寻找与其相似度较高的部分。
二维码的读取是将获取到的图像再二值化处理后,经过一系列算法得到一个二进制的序列,将序列纠错后转化得到数据信息,关于其识别的相关研究已较为成熟,这里就不再赘述。
OPENMV在接收到STM32传来的识别指令后,对画面内物体进行识别,若画面内没有目标则给STM32返回一个代表无的指令,若有则实时返回目标的中心坐标。STM32在收到目标的坐标后,控制机械臂以让爪子正对目标,然后接近到,收到光电接近开关信号后抓取。
6 结束语
经试验,本设计以STM32为核心的各个模块工作正常,能运用自身传感器自主定位,准确快速地到达预先设定的位置,OPENMV对不同形状和颜色工件进行识别正确率高,对二维码扫描的有效率高,机械臂抓取灵活,完成多个工件分拣后并将目标工件运送到指定位置,完成任务后能自动回到出发位置。受限于OPENMV像素和运算能力的限制,小车识别物体的种类和准确度有待提高。小车的行进路径固定在程序中,在自动规划和快速更改路径方面还有待研究。