Design and Implementation of an Intelligent Delivery Cart Based on STM32 ()
1. 引言
智能配送机器人是当前备受瞩目的人工智能研究领域的重要应用产物之一。在信息技术不断蓬勃发展的时代中,智能移动机器人及其相关产品将拓展到医疗福利、商场超市、餐厅旅馆、维修清洗和家庭生活等多个方面[1]。特别是配送小车作为一种可以通过预先设定特定指令,自动实现目标的配送任务,并且具备有循迹和避障等功能,使得其在智能制造领域的未来发展中有着不可或缺的地位[2]。
国外关于配送小车相关的研发和试点应用起步较早,配送系统已发展得十分成熟。英国企业Starship Technologies成功开发了一种具备完整避障系统的智能配送车,该智能配送车搭载摄像头模块和超声波传感器,可以无死角观察周围环境,并且具备远程监控功能;美国硅谷Nuro公司推出了全自动无人配送车R-1,其车身搭载激光雷达和多个摄像头模块,具有自动识别红绿灯、行人和自动变道功能,与之类似的智能配送车还包括美国Robby Technologies公司的Robby机器人和日本机器人开发公司ZMP发布的CarriRo Delivery [3]-[6]。
相比国外,国内的无人配送技术起步稍晚,但发展势头迅猛,在配送小车领域不断创新。杨思、周蕾等人设计一种高精度药品识别配送机器人,其主要功能在于药品识别、导航避障和智能控制等[7];周培祥、宋晨曦设计了一种基于BP神经网络的智能药物运输系统,此系统对房间号楼层进行判断,对需要配送的目标房间进行精准识别和实时检测,最终完成药品的精准配送[8];万瑞丰,黄景帆等人研究基于OpenArt与TC377的智能送药小车,该小车主控芯片选用TC377系列,通过锂电池对送药小车进行供电,系统搭配OpenArt和PID闭环控制方案,实现图像识别和速度控制[9];方博汇、杨璐等人对于校园无人配送小车进行设计与研究,融合视觉传感器、惯性传感器、全球定位系统等多个传感器,对传感技术、目标检测算法深入研究设计了一辆多传感器融合的无人配送小车[10];黄凯文、赵煜等人研究了一款基于机器视觉的Arduino智能物流配送车,该小车基于Arduino mega 2506单片机,选用OpenMV模块做物流配送车的机械视觉识别设计,并通过舵机云台控制实现二维码扫描与识别,实现物流配送中的智能避障、语音播报提示等功能,精准运送物品,提高了物品的运输效率和准确性[11]。
尽管目前很多高校和企业对智能配送小车进行了深入的研究[12]-[15],部分快递公司、酒店等已经开始投入智能配送小车的服务,但由于其操作方式复杂、机器人占用面积大、价格昂贵等原因,使得它们并不普及,在市场上的流通还需要时间,主要还是依靠人工进行物品的输送。针对以上问题,本设计致力于实现一款基于STM32芯片的智能配送小车系统,该系统主要面向小型场合中物品的配送任务,旨在丰富智能配送的手段和方式,减少了人工工作量,使得整个操作更加简便、易行。系统以STM32F103VET6芯片为控制核心,搭配有摄像头模块、显示屏模块、无线通讯模块、循迹模块、超声波测距等多个模块,可以实现摄像头智能识别、GUI图形界面显示、物品遗失警告、触摸屏终端控制等功能;同时使用LittleVGL开源图像库进行GUI触摸显示界面设计,用户通过对触摸显示屏的点击来确定物品配送目标房间号,进行模式选择并启动小车,完成物品配送。
2. 硬件系统设计
本设计的系统硬件部分由STM32主控板、摄像头模块、显示屏模块、无线通讯模块、循迹模块、测距模块等组成,系统结构框图如图1所示。控制模块主要包括STM32F103C8T6芯片、电源电路、时钟电路、调试电路,复位电路这四个部分;除了控制配送小车的行驶方案之外,智能配送小车还提供了多种其他功能,包括摄像头智能识别、语音播报功能、GUI图形界面显示、物品遗失警告及触摸屏终端控制,使配送小车系统更加完善。
Figure 1. Hardware system block diagram
图1. 硬件系统框图
2.1. 控制模块与摄像头模块
STM32系列芯片以ARM Cortex-M为内核,从稳定性和实用性方面来看,更优于STM8系列和MSC-51系列芯片。其容量较大且具有较大的存储空间,对于智能配送小车的应用更加贴合,并且安全性能高,足以保障配送系统的安全性,因此本设计芯片选择采用STM32系列。确定选用此系列芯片之后,还需要选用合适的芯片型号,STM32系列型号较多,主流使用型号为STM32F1和STM32F4系列,两款系列片上资源丰富、容量较大、安全性能较高。内核分别为ARM CortexTM-M3和ARM CortexTM-M4,尽管F4系列最高主频168 MHz F4,内部具有DSP指令集和单精度浮点运算单元,其数据处理能力和通信速度优于F1系列,但价格较为昂贵,综合考虑本设计的整体方案,选用STM32F1系列芯片。
STM32F103VET6芯片作为控制模块,芯片工作电源电压为2 V至3.6 V,最高主频72 MHz主频,且价格便宜、实用性强,尤其是该芯片自带512 k的Flash,可以解决数据储存失败等风险,可用于非易失性数据存储,足以满足控制需求。STM32F103VET6芯片原理图如图2所示,该芯片部分特性如表1所示。
Figure 2. STM32F103VET6 chip physical diagram
图2. STM32F103VET6芯片实物图
Table 1. STM32VET6 feature table
表1. STM32VET6特性表
名称 |
参数 |
名称 |
参数 |
USART |
5个 |
CPU |
72 MHz |
SPI |
3个 |
工作电压 |
2 ~3.6 V |
IIC |
2个 |
模数转换器 |
12位 |
通用定时器 |
4个 |
PWM计时器 |
2个 |
选用OpenMV4plus作为配送小车的摄像头模块。根据Open MV4plus摄像头模块的数据开发手册可以得知,Open MV4plus的P4、P5口分别对应其USART3的TX、RX端,将主控芯片STM32F103VET6中UART5的RX、TX端分别与其连接,即主控芯片RX端的PD2口与Open MV4plus中TX端的P4连接,主控芯片TX端的PC12口与Open MV4plus中RX端的P5连接,VCC接开发板的3.3 V电源,并共地。Open MV4plus摄像头模块电路原理图如图3所示。
Figure 3. OpenMV4plus circuit schematic diagram
图3. OpenMV4plus电路原理图
2.2. 无线通讯模块与语音播报模块
选用HC-05蓝牙模块作为配送小车的无线通讯模块。利用串口调试助手分别设置好HC-05蓝牙模块主、从模式后,主机连接触摸显示屏模块配套的STM32F407开发板中,即主机HC-05蓝牙模块的RXD引脚连接开发板UART4的PC10口,TXD引脚连接开发板UART4的PC11口,VCC接开发板的5 V电源,并共地,主机HC-05蓝牙模块电路原理图如图3所示;同理,从机连接配送小车的主控芯片,即从机HC-05蓝牙模块的RXD引脚连接主控芯片UART1的PA9口,TXD引脚连接主控芯片UART1的PA10口,VCC接主控芯片的5 V电源,并共地,从机HC-05蓝牙模块电路原理图如图4和图5所示。
Figure 4. Master bluetooth module circuit schematic diagram
图4. 主机蓝牙模块电路原理图
Figure 5. Slave bluetooth module circuit schematic diagram
图5. 从机蓝牙模块电路原理图
选用TTS语音模块作为配送小车的语音播报模块。通过字符串的形式将需要播报的内容发送给TTS,因此分别连接TTS的RX、TX引脚与主控芯片UART3的TX发送引脚、RX接收引脚的PD8、PD9口,VCC接主控芯片的5 V电源,并共地。TTS语音播报模块电路原理图如图6所示。
Figure 6. TTS voice broadcasting module circuit schematic diagram
图6. TTS语音播报模块电路原理图
2.3. 其它模块
选用八路数字量循迹模块作为配送小车的循迹模块。将八路灰度循迹模块RX、TX引脚的PA1、PA2引脚分别与主控芯片UART2的PA2、PA3口连接,VCC接主控板的5 V电源,并给它们共地。八路灰度循迹模块电路设计图如图7所示。
Figure 7. HC-SR04 ultrasonic distance measurement module circuit schematic diagram
图7. HC-SR04超声波测距模块电路原理图
选用HC-SR04超声波模块作为配送小车的测距模块。HC-SR04超声波测距模块有Trig、Echo、VCC和GND四个引脚,将超声波测距模块的Trig、Echo分别连接主控芯片的PB9、PB8口,VCC接主控板的5 V电源,并给它们共地,HC-SR04超声波测距模块电路设计图如图8所示。
Figure 8. HC-SR04 ultrasonic distance measurement module circuit schematic diagram
图8. HC-SR04超声波测距模块电路原理图
选用MPU6050作为配送小车的陀螺仪模块。使用MPU6050与主控芯片之间通过IIC进行通信,将MPU6050的IIC通讯数据线与主控芯片PB11口连接,IIC通讯时钟线与主控芯片PB10口连接,即分别连接MPU6050的SDA、SCL引脚与主控芯片PA1、PB10口。VCC接主控芯片的5 V电源,并共地,其他引脚不做连接。MPU6050陀螺仪模块电路原理图如图9所示。
Figure 9. MPU6050 gyroscope module circuit schematic diagram
图9. MPU6050陀螺仪模块电路原理图
选用MG310直流电机和TB6612驱动排线直连作为配送小车的直流电机模块。MG310直流电机模块电路接线分为电机编码盘接线和TB6612驱动两部分。将电机编码盘H1主控芯片PA0、PA1口连接,电机编码盘H2与主控芯片PC6、PC7口连接,再分别接入5 V电源,并共地,电机编码盘电路原理图如图10所示。
Figure 10. Motor encoder disk circuit schematic diagram
图10. 电机编码盘电路原理图
将TB6612驱动的PWMA引脚与主控芯片PB8口连接,PWMB引脚与主控芯片PA11口连接,VCC接主控芯片的5 V电源,并共地。TB6612驱动电路原理图如图11所示。
Figure 11. TB6612 driver circuit schematic diagram
图11. TB6612驱动电路原理图
3. 软件系统设计
软件设计开发主要采用STM32Cube IDE平台、Keil UVision5平台、OpenMV IDE平台以及Edge Impulse在线网站。为了提高编程效率与质量,系统选用C语言为主、少量Python语言为辅的编程语言。采用模块化编程的方式使得移植和调试变得更加方便快捷。在整个设计过程中,首先对单个模块进行学习训练和功能检验,确保每个模块能够正常完成预期的功能需求。接着,进行代码的移植和编写,完善每个模块的功能实现。最后,将所有代码整合和修改,完成智能配送小车的代码的设计和编写工作。
3.1. 控制模块软件设计
智能配送小车在首次工作时,各个模块初始化,终端控制的触摸显示屏显示当前小车状态,用户通过点击触摸显示屏上方的“1”、“2”、“3”和“4”四个按键来对配送的指定目标房间号进行选择,选择完成后可以观察到显示屏最顶部会有指定目标房间号提醒。此时系统会对物品放置箱内是否存在物品进行检测,检测到存在物品后,根据用户选择配送模式控制小车完成工作。当用户选择的行驶模式为自动模式时,配送小车根据预定目标房间的路线行驶;当用户选择的行驶模式为手动模式时,通过点击触摸显示屏中的“U”、“D”、“L”和“R”四个指令操作控制小车行驶轨迹。最终当配送小车到达指定目标房间后停车,等待用户取走物品放置箱内物品,此刻系统会再次对物品放置箱进行检测,判断物品被取走后,返回初始点,等待下一次工作,主程序设计流程图如图12所示。
Figure 12. Main program design flowchart
图12. 主程序设计流程图
3.2. 图像识别模块软件设计
房间号的识别通过Open MV摄像头对房间号拍照,并经过Edge Impulse在线网站训练得到模型。新建一个“HOME”文件夹,打开OpenMV IDE软件,选择“工具–数据集编辑器–新数据集”,选择“HOME”文件夹为储存路径。在OpenMV IDE内创建Class类别文件夹,分别用来存放房间号的图像数据。拍照完成后打开“HOME”文件夹,检查收集完成的数据集是否正确,以“one”为例,图像数据集如图13所示。
Figure 13. Collected “1” image dataset
图13. 收集完成的“1”图像数据集
数据集上传成功后,接下来点击“Transfer learning-Start training”迁移模型训练,训练完成的房间号模型如图14所示。可以观察到训练的准确性高达98.4%,除过少量的“THREE”训练不成功,“ONE”、“TWO”和“FOUR”的训练准确度100%,训练集分布清晰。最后点击“Deployment-OpenMV-Build”生成并导出训练好的房间号训练模型,如图14所示。
Figure 14. Trained room number model
图14. 训练完成的房间号模型
3.3. 物品遗失警告模块软件设计
采用HC-SR04超声波测距模块对物品放置箱内的一定距离来确认物品是否遗失,具体程序设计操作为:在物品放置箱的一侧箱体竖直安装一块测距模块,规定安全距离值为测距模块与对面箱体的距离。物品放置后,产生一个新的距离值,在配送小车配送过程中,新的距离值发生的变化达安全距离值时,系统将自动判断该物品可能存在遗失风险,并通过语音播报模块向用户发出有声警报,提醒其及时处理。程序设计流程图如图15所示。
Figure 15. Item loss warning program design flowchart
图15. 物品遗失警告程序设计流程图
3.4. 其它模块软件设计
TTS语音集成模块可以直接支持中文、英文字母等文本合成。智能配送小车系统与该模块采用UART通讯模式,分别将TTS语音集成模块的RX、TX引脚与MCU串口的TX、RX引脚交叉连接,将波特率均选择为9600 bps,对串口发送给相应中文,该模块进行相应的语音播报。例如,在小车初始化完成后,播报“初始化完成,欢迎使用智能配送小车”;当用户选择1号房间并点击出发按钮后,播报“房间号为一,准备出发”;当小车工作过程中,物品遗失后,发出语音播报“物品遗失”警告,如图15所示。
选用的MG310直流电机自带高精度磁编码器,根据编码器工作原理,利用PID控制算法对配送小车系统进行控制。通过将编码器获取的数据与设定值产生误差的比例、积分和微分来对其进行闭环控制。通过编码器获取电机转速作为反馈,以设定速度为目标值,实现速度控制。每50 Ms进行一次PID算法运算,每5 Ms读取一次编码器数值,并对每次读数的速度进行滤波算法,以提高得到数据的准确性。采用PID调试助手观察电机速度,将串口适配该软件的串口协议。
4. 系统测试
4.1. 主控板测试
测试之前先取下5 V短接帽和电机供电H9短接帽,然后接入电源,打开开关,给主控板供电。待稳压模块的电源灯亮起时,测量稳压输出端的电压大小。使用螺丝刀调节稳压上方的按钮,便可以调节输出电压大小,观察到电压大小为5 V时,此刻稳压模块测试完成。插上5 V短接帽和电机供电H9短接帽,观察到主控板、陀螺仪、蓝牙模块和下方循迹模块补光灯均亮起,如图16和图17所示。智能小车控制结果如表2所示。
Figure 16. Voltage at the voltage regulation output
图16. 稳压输出端电压
Figure 17. Main control board test diagram
图17. 主控板测试图
Table 2. Control cart test results table
表2. 控制小车测试结果表
|
按键“U” |
按键“D” |
按键“L” |
按键“R” |
测试总次数(次) |
20 |
20 |
20 |
20 |
测试成功率 |
100% |
100% |
100% |
100% |
4.2. GUI触摸显示屏与主控板通讯测试
使用一对主、从蓝牙设备分别连接GUI触摸显示屏和主控板,观察两块蓝牙模块灯光从快速闪烁,转变为相同的闪烁频率,表示蓝牙设备配对成功。在GUI程序中设置的API接口“LV_EVENT_PRESSING”,表示只要按下,则一直触发该点击的按键。因此点击屏幕按键,观察串口调试助手,可以发现只要点击某一按钮不松手,串口调试助手持续发送此按键相应数据。以点击GUI触摸屏界面中的房间号“1”为例,串口调试助手发送数据如下图18所示,可以观察到,只要点击此按键,串口不断发送数据“01”直至松手。其他按键均进行多次测试,测试结果无异常。
Figure 18. Serial port debugging assistant interface
图18. 串口调试助手界面
4.3. 图像识别测试
通过串口调试助手查看、记录房间号识别测试的数据。利用Open MV摄像头模块对已经训练过的房间号模型进行识别,该步骤需要注意被识别房间号处于摄像头拍摄画面中。观察并记录串口助手上输出的房间号类别,以4号房间为例,识别结果如图19所示,可以看到“four = 0.984314”,表示有98.4%的概率认为识别到了4号房间,识别准确率较高。
Figure 19. Camera recognition results
图19. 摄像头识别结果
每个房间号重复识别100次,最终得出的房间号图像识别测试的结果如表3所示。可以观察到,除1号房间在各种天气条件下识别成功率都达到100%外,2、3、4号房间的识别成功率达也基本达到了准确无误,不同天气条件房间号识别测试结果如表3所示。
Table 3. Room number recognition test results table
表3. 房间号识别测试结果表
|
1号房间 |
2号房间 |
3号房间 |
4号房间 |
识别总次数(次) |
100 |
100 |
100 |
100 |
识别成功率(晴天) |
100% |
100% |
100% |
100% |
识别成功率(阴天) |
100% |
99% |
99% |
99% |
识别成功率(多云) |
100% |
99% |
100% |
100% |
识别成功率(雨天) |
100% |
98% |
99% |
99% |
4.4. 其他功能测试
TTS语音播报模块与智能配送小车系统采用UART通讯,首先用串口调试助手调试TTS集成模块音量、播报速度等,确定数据接收完成后,发送“初始化完成”,该模块成功播报“初始化完成”,测试结果图如图20所示。
Figure 20. TTS debugging results diagram
图20. TTS调试结果图
对该部分程序设计完成后,分别给主控板和GUI触摸显示屏供电,点击触摸显示屏按键,TTS语音播报会进行相应的语音提醒,将所有按键一一测试,语音播报正确,此功能测试无误。
使智能配送小车处于工作状态,并在物品放置箱内放置待配送的物品,在未到达指定目标房间之前,一旦取走箱内物品,配送小车立即发出警告提醒。打开串口调试助手进行测试,图21为放置物品后测试得到的距离值,图22为物品遗失后得到的距离值,此功能测试无误。
Figure 21. Placing items
图21. 放置物品
Figure 22. Item loss
图22. 物品遗失
5. 结论
本设计是基于STM32的小型场合物品智能配送任务与规划的设计与求解,具有操作简便、易行,丰富了智能配送的手段和方式,有效减少了实际配送工作中人员的参与程度。该系统具备有摄像头智能识别、GUI图形界面显示、物品遗失警告、触摸屏终端控制等功能。主要设计内容如下:
1) 制定了智能配送小车的总体设计方案、配送模式的控制方案及预期需实现的功能,对比各个模块选型,确定了符合设计要求的硬件模块,并完成了主控板电路设计、硬件接口电路设计与电路板的焊接。
2) 参考现有的程序代码与硬件系统数据手册,学习各模块的工作原理,并通过STM32Cude IDE、Keil5、OpenMV等软件进行系统的软件设计。
3) 经过系统测试,其摄像头智能识别、GUI图形界面显示、物品遗失警告、触摸屏终端控制等功能均能正常工作,配送小车能够实现小型场合的物品智能配送。
Conflicts of Interest
The author declares no conflicts of interest regarding the publication of this paper.
Appendix (Abstract and Keywords in Chinese)
基于STM32的智能配送小车设计与实现
摘要:本文研究了智能配送小车系统设计的关键技术。系统以STM32F103VET6芯片为控制核心,通过摄像头模块完成房间号图像数据采集与识别;采用LittleVGL实现人机交互的触摸显示屏界面设计;使用无线通讯模块实现触摸显示屏与智能小车的数据无线传输;利用超声波模块判断物品放置箱内状态;并通过灰度循迹、直流电机、陀螺仪等模块控制小车进行物品配送任务,最终完成智能配送小车的实物模型。实验结果表明,智能配送小车系统各个模块之间相互配合,能够实现实验场合物品的智能配送。
关键词:STM32F103VET6,智能配送小车,LittleVGL,GUI图形界面