基于ARM及机器视觉的智能药品运送机器人系统设计与研究
2022-08-26江龙韬刘怡沛
江龙韬,刘怡沛,张 卓
(河海大学 物联网工程学院,江苏 常州 213002)
0 引言
21 世纪以来, 国内外对机器人技术的发展越来越重视。机器人技术被认为是对未来产业发展具有重要意义的高新技术之一[1-2]。随着近年来医疗产业需求的不断扩大,医疗机器人创新技术和系统的不断涌现,医疗自动化正逐渐成为具有巨大前景的新兴产业[3-4]。就目前情况而言,医疗机器人的研制主要集中在外科手术、康复和医院服务机器人系统等几个方面[5-7]。但新型冠状肺炎疫情的爆发加速了机器人在医疗行业,特别是在医院服务配送方面的应用发展[8-10]。针对疫情防控过程暴露出的核心问题, 如医疗物资匮乏、消毒任务繁重、医护人员短缺等, 投入和使用具有特定服务功能的机器人进行疫情防控无疑会具有极大的优势[11-12]。
因此当今医疗行业迫切需要一种具有无人送药功能的新型机器人,以此来节约医疗人力、提高诊疗效率,更好地保护疫情中从事诊疗工作的医护人员[13-14]。针对以上热点需求,本文设计了一种以STM32嵌入式系统为核心,结合神经网络数字识别,机器视觉寻迹的医疗智能送药机器人。该机器人具备自动门牌号识别、自主送药路径规划、货物装载检测及卸取、智能人机交互等功能,实现了对医疗送药实时性及复杂性的功能需要。经具体实验测试表明,该机器人可自主识别病房号并规划路径送药,且能在医疗人员取药后自动返回,快速进行下一轮送药工作,可以在紧急医疗环境下提供高效准确的医疗配送服务。
1 系统结构及原理
结合医院地形特点,设计了一种实时性强、准确性高、性能稳定的智能医疗送药机器人,本文介绍的系统主要由以下几个部分构成:ARM控制模块,传感器检测模块,神经网络识别模块,机器视觉循迹模块,电机驱动模块,动作提示模块。系统总体设计结构如图1所示。
图1 医疗智能送药机器人总体系统设计
1)ARM控制模块:接收传感器及视觉模块传输的数据,进行路径规划,使用PID算法驱动电机进行运输任务。
2)传感器检测模块:实时采集机器人车速,货物装载情况等数据。
3)神经网络识别模块:在特定情况下识别病房门牌号,确定行进方向。
4)机器视觉循迹模块:处理地面复杂状况,拟合正确路线防止机器人偏离。
5)电机驱动模块:根据ARM模块发出的PWM信号驱动两轮电机。
6)动作提示模块:到达路线标志点时,提示医疗人员进行装载卸货等操作。
本文所设计系统的工作重心主要包括整体硬件电路系统的搭建、高性能ARM芯片对于路径规划算法的设计与实现、机器视觉神经网络在复杂场景下的应用;通过完成以上3个部分,并将其在实际应用中紧密融合,最终可以使送药机器人完成快速稳定、及时准确的配送任务。
2 系统硬件设计
2.1 ARM控制模块设计
ARM控制模块以STM32F407ZGT6为核心进行设计,主要参考了ST官方的STM32F40XXX中文数据手册。该CPU基于ARM Cortex-M4F内核设计,内部FLASH为1 024 KB,SARM为192 KB,同时具备144个可使用GPIO引脚,非常适合编写大型的复杂系统程序。设计时外部低速时钟LSE晶振设置为32.768 kHz,高速外部时钟HSE晶振设置为8 MHz,同时晶振电路分别带有10 PF、20 PF的负载电容构成晶体谐振器,可以为单片机提供精准的时钟频率。系统默认启动方式为BOOT0=0,BOOT1=0的主FLASH启动方式,以此种方式启动可以直接运行用户实现烧录的程序。设计时还预留了SWD方式的烧录调试口,该调试方式仅需4 Pin便可经ST-Link/V2进行完美的单片机硬件调试,为后续的程序编写提供了极大的便利。ARM控制模块部分电路如图2所示。
图2 ARM控制模块部分电路图
2.2 神经网络识别模块设计
神经网络识别模块以RISC-V内核的K210芯片为核心进行设计[15-17]。该芯片拥有双核64 bit处理器,支持乘除平方根运算的双精度浮点数运算单元FPU,标称的工作频率可达400 MHz。处理器内部还设计了专门用于计算CNN卷积神经网络的神经网络处理器KPU,使其算力可以达到1 TOPS,超过了树莓派、Jetson Nano等嵌入式平台,同时内部设置的8 MB超大SARM允许在实际应用中烧录轻量级神经网络模型。并且该芯片支持Micropython嵌入式语言,能够使用官方提供的Maixpy固件库,极大地方便了工程中的二次开发。在本设计中,将其与具有200万像素的OV2640摄像头配合使用,进行门牌号识别工作。
2.3 机器视觉寻迹模块设计
机器视觉寻迹模块采用国外硬件工程师CHRIS ANDERSON设计的OPENMV4Plus开源机器视觉模块[18-20]。该模块以STM32H743V1芯片为主控,作为新一代的Cortex-M7处理器,其工作频率可达480 MHz。同时板载FLASH为芯片内置2 MB+32 MB,SRAM为芯片内置1 MB+32 MB,可用于存储复杂的图像处理程序。该处理器同样支持Micropython嵌入式编程语言,且搭配有完整的官方固件库,可配合OPEVIDE进行高效开发。在本设计中,与具备30万像素的OV7725摄像头配合使用,在进行二值化、腐蚀膨胀、拟合直线等复杂的图像处理任务下,处理速度可达到每秒83帧,满足实际场景下寻迹需求。
2.4 传感器检测模块设计
2.4.1 光电货物检测模块设计
光电货物检测模块由红外对管和LM393构成的单值电压比较器组成,红外对管的基本原理是一个对管发射出的红外线,另一对管用来接收物体反射回的红外线,将反射回来的光波强度映射为模拟量。集成电压比较器LM393的主要作用是将红外对管U1得到的模拟量与可调电位器RP1上的模拟量进行比较,得到灵敏度可调的数字量输出,单片机通过检测高低电平就可以得知是否有货物装载;设计中采用的红外对管发射接收装置采用直径4 mm的红外发射管,发射的光波为950 nm的红外线,其额定的工作电压为DC 3.0~5.5 V,工作电流为5~15 mA。同时电路中还设计了二极管D1用于电源正常工作指示,D2用于红外对管U1模拟量与电位器RP1模拟量大小指示。光电货物检测模块电路如图3所示。
图3 光电货物检测模块电路图
2.4.2 霍尔编码器模块设计
霍尔编码器模块采用了两通道增量式的520-P13磁性编码器。编码器电路包含一个用于磁电转换的磁珊和磁敏检测电路。该型号的磁性编码器工作电压为5 V,温度为-20~+80 ℃,适用于520型号电机;其引出的引脚一共有6 Pin,分别为Motor+、VCC、A相、B相、GND、Motor-,其中的A相、B相引脚在电机转动时会分别发出相位相差90度的100 kHz方波,分辨率为每圈13个脉冲。通过将ARM主控的通用定时器TIMERX设置为Encoder编码器模式,就可对编码器输出的AB相脉冲进行捕获。将每秒捕获的脉冲数除以每圈脉冲再乘以车轮直径就可得到机器人实时速度,根据需要使用一节互补滤波滤除高阶噪声之后就可以得到平滑的速度输出曲线。
2.5 电机驱动模块设计
电机驱动模块的驱动电路设计部分以BTS7970芯片为核心进行设计,该芯片脉宽调制能力高达25 kHz,且具有通过限制过高电流降低功耗的功能,能够保证送药机器人精准的调速控制及持续工作状态下的续航。实际设计中通过将4个BTS7970两两组合构成了两路H桥全桥驱动电路,全桥驱动通过不同极性的PWM波能够分别导通BTS7970内部的不同MOSFET,从而达到控制电机正转反转变速的功能。同时电路中加入了LED灯进行正反转的指示,当电机正转时,LED1亮LED2灭;反转时,LED2亮LED1灭,极大方便了后续的硬件调试工作。具体电路设计如图4所示。
图4 电机驱动模块电路图
电机驱动模块的电机部分使用了减速比为1∶30的JGB27-520减速电机,该型号电机额定转矩可达3 kg/cm,使用的电压为DC 12 V,最大输出功率为7 W,满足实际药物配送的载重需求。实际应用中与上述驱动电路相配合,将两个减速电机分别接至JP1和JP3端口,通过控制单片发出每秒10 kHz的不同占空比PWM方波,即可使驱动模块输出不同极性大小的电流,进而控制该电机进行前进、后退、转弯,达到配送药品的目的。主控实际分配的控制引脚如表1所示。
表1 电机驱动模块管脚设置
2.6 动作提示模块设计
动作提示模块由一个有源蜂鸣器模块和红黄绿三色LED灯组成。有源蜂鸣器模块通过BEEP引脚拉低电平导通PNP三极管输出电流使蜂鸣器发出响声。实际应用中,当检测到货物为空时亮绿色LED灯提示人员装载药品,检测到载有药品时亮红色LED灯;当送药至指定门牌号病房前停车等待取药时,蜂鸣器发出声响同时黄色LED灯亮提示人员取药。具体电路如图5所示。
图5 动作提示模块电路图
3 系统软件设计
3.1 ARM主控模块软件设计
3.1.1 系统主程序设计
系统上电首先对各模块初始化操作,接着等待初始房间号识别,通过神经网络算法识别到初始门牌号之后等待货物装载,通过光电货物检测模块判断搭载货物后进行货物配送任务,配送过程中的程序算法分为4个部分:路径规划算法、机器视觉寻迹算法、神经网络识别号码算法、PID控制位置和速度算法。其中机器视觉算法搭载于OPENMV平台上,主控通过USART1_IRQHandler()串口中断函数接收传送回来的路径实时坐标来计算当前位置与正确路径的偏移量,同时还通过传送的特殊字符进行十字路口的有无判断。神经网络算法搭载于K210平台上,用于在十字路口进行门牌号识别为机器人指示正确方向,主控通过USART2_IRQHandler()函数接收神经网络算法识别到的门牌号数据,判断方向进行差速转弯并继续寻迹。路径规划算法用于近端、中端、远端病房的判断,指示机器人正确的行进路线,同时记录行进过程中的十字路口及转弯等标志位,以便能够快速准确地返回原始药房。PID算法通过串口1中断的出的偏移量、编码器得到的机器人速度以及转弯或是直线行进的判断,得出两个驱动电机的共4路PWM数值装填数值填入各自的TIMX_CCRX寄存器中,纠正路线偏移量的同时调整机器人速度。最终到达目标病房后,停车亮黄灯控制蜂鸣器发出声响,提示医护人员卸载药品。药品卸下后,返回到达药房停车,进行下一轮的配送工作。主程序流程如图6所示。
图6 系统总流程图设计
3.1.2 路径规划算法
路径规划算法首先通过目标病房号road_num进行近端病房的判断,若判断为近端病房,则直接寻迹至第一个十字路口,根据初始门牌号判断转弯,更新dir_flag1记录转弯方向,cnt_crossroad加一记录检测到的十字路口数量,待货物卸载后,原路返回检测到第二个十字路口即cnt_crossroad等于2时,通过预先记录的dir_flag1即可决定转弯方向,进而快速准确的返回初始药房。若判断为非近端病房,则直接行驶至第二个十字路口,中间屏蔽掉第一个十字路口,若在第二个十字路口检测到目标门牌号,则之后的流程与近端病房一致。若未检测到,则进入远端病房模式,此模式下默认需经过两个十字路口才可到达目标病房,因此首先记录cnt_crossroad等于2时转弯方向dir_flag1,接着记录cnt_crossroad等于3时转弯方向dir_flag2,待卸下药品时即可检测到快速根据十字路口及转弯标志位返回药房。路径规划算法的程序流程如图7所示。
图7 路径规划算法流程图设计
3.1.3 编码器互补滤波算法
工业传感器测量过程中,一阶互补滤波算法是比较常用的一种算法。此算法可以有效地滤除掉系统测量时引入的高频噪声,保留有用的低频测量数据。本系统所选择的霍尔编码器由于在AB相脉冲传输过程中容易受到电机产生外界高频磁场干扰,实际测量到的速度曲线存在较大的波动,因此使用该算法进行平滑速度曲线处理。算法的原理是将新的采样值与上一次的滤波结果进行线性加权计算得到新的滤波结果,算法的数学表达式如下:
y(t)=(1-α)*y(t-1)+α*x(t)
(1)
其中:y(t)为t时刻的滤波结果,y(t-1)为上一时刻的滤波结果,x(t)为t时刻的采样值。α为加权系数,通常取接近于0的值,本设计中取值为0.02。
实际应用中,该算法对于速度曲线的改善效果明显,使得经过互补滤波处理后的速度测量值可以作为电机控制算法中的反馈速度帮助机器人进行闭环控制。
3.1.4 PID电机调速算法
传统的单级PID控制器是一种线性控制器,对线性对象有良好的控制效用[21]。但对于本文设计的具有位置和速度双变量的送药机器人系统难以达到高效准确的控制效果。本文系统所设计的串级PID控制采用位置控制器和速度控制器串联工作[22],外环PID位置控制器的输出作为内环PID速度控制器的期望值,由内环PID速度控制器的输出装填4路PWM占空比,从而可以对机器人的位置及速度实现精准控制。具体设计如图8所示。
图8 PID算法框架设计
PID控制器主要由比例、积分、微分三部分组成,其核心就是对Kp、Ki、Kd参数的适当选取[23]。作为比例控制系数的Kp能够提高系统的响应速度,快速减少误差,但对于微小误差没有能力将其消除;设置Ki积分控制系数能够对在系统调整过程中不断累计的误差进行积分,并输出积分控制量,最终消除静态误差;Kd微分控制系数则是对系统变化的趋势做出反应并超前调节系统,加快系统进入稳定状态的速度。
由于在ARM模块中时间过程为离散值,实际应用中PID算法的数学表达式如下。
u(t)=Kp*err(t)+
(2)
其中:u(t)为t时刻控制的输出量,Kp为比例系数,Ki为积分系数,Kd为微分系数,err(t)为t时刻系统的偏差值。
ARM模块设置的定时器控制周期为20 ms。经过系统建模与多次实际测试,本系统最终选取的PID系数如表2所示,其中左右电机由于响应速度的不同,分别设置了对应系数。
表2 PID系数设置
3.2 神经网络识别算法
神经网络识别算法的核心是采用YOLOv3模型来对OV2640摄像头实时采集的图像进行处理。首先通过数据集进行本地训练,可以得到搭载在K210平台上的yolov3.kmodel模型文件。烧录模型后首先使用kpu.load()函数加载事先训练好的YOLOv3模型,接着通过kpu.run_yolo3(img)函数输入摄像头拍摄的244×244分辨率图像,利用KPU卷积神经网络运算单元进行运算,即可得到识别的结果以及对应的目标检测概率,对概率大于0.65的结果使用红框进行标注,左上角增添识别结果及目标概率。算法流程如图9所示。实际运用K210平台通过UART串口通信的方式将识别出的数字及具体图像坐标点传送给ARM主控模块,主控内部程序通过输入的数字坐标来推算出具体门牌号,进行道路口方向的选择和整体的路径规划。实际门牌号识别效果如图10所示。
图9 神经网络算法流程图
图10 门牌号识别效果图
3.3 机器视觉循迹算法
机器视觉寻迹算法核心是通过OPENMV自带的图像处理固件库对OV7725摄像头拍摄的图像进行一系列处理,拟合路径中心坐标同时检测有无十字路口。为了加快每帧图像的处理速度,该算法首先进行ROI(region of interest)图像感兴趣区域的设置,由320×240分辨率设置为200×100分辨率[24]。然后根据预设像素阈值对改变分辨率后的图像进行黑白二值化处理。由于黑白二值化处理后的图像边缘处有不规则分布的噪点,对之后的拟合存在显著影响,因此在拟合直线之前,增加了对整体图像的腐蚀、膨胀处理,即通过卷积运算去除掉小的白色噪点之后,再对原有的白色阈值图像进行补偿增宽。最后通过调用find_lines()函数来拟合图像中的白色直线,得到道路中心线的相关参数。通过USART串口通信将中心坐标(X,Y)传递给主控芯片计算路径偏移量。实际运行效果如图11所示。
图11 算法实际效果图
同时为了适应路径规划需求,设计了十字路口检测算法,首先通过拟合道路直线后得到上下末尾端点的横坐标x1和x2,如果x1大于等于x2时,会在x方向(x2,x1)范围内,y方向(30,130)感兴趣区范围内,逐行横向遍历像素点,反之亦然。若发现白色区域有横向延申趋势,则判断为十字路口,并记录其中心点的横纵坐标。同时通过串口发送特殊帧0XFF及十字路口中心坐标告知STM32主控前方存在十字路口。机器视觉算法的总体流程如图12所示。
4 实验结果与分析
4.1 测试步骤
为了验证本文所设计的基于嵌入式的医疗智能送药机器人在现实医疗配送服务中的可行性,与预先设想的效果进行对比,分别模拟实际的医疗环境对近端病房、中端病房、远端病房进行测试,具体步骤如下:
1)进行初始门牌号识别。
2)搭载货物进行运送。
3)到达指定门牌号后进行货物卸载。
4)卸载货物后返回初始药房处。
在上述实验过程中,观察机器人运行的实际效果,记录一轮配送运行时间。模拟试验总计分为三轮,一轮近端(1,2号病房),一轮中端(3,4号病房),一轮远端(5,6,7,8号病房)。其中1,2号近端病房位置固定,用来进行测试基础功能的完备性。3~8号中端及远端病房位置随机,用来模拟实际医疗环境中的病房配送任务。
4.2 测试结果及分析
由表2可知,近端病房配送一次药物的时间均值为14.37 s,且每次时间波动变化不大,可以看出近端病房配送运行稳定。
表2 近端病房测试结果
由表3可知,中端病房配送药物的时间均值较近端病房增加了6.22 s,但时间波动仍然较小,因此中端病房任务同样运行稳定。
表3 中端病房测试结果
由表4可知,远端病房由于配送的距离较长,每次配送任务完成的时间上存在着较大差异,但是最多不超过29 s,且每次配送任务都能完成,因此相对满足现实中医疗服务的需求,达到了设计的要求。机器人实际配送过程如图13所示。
表4 远端病房测试结果
图13 机器人配送实物过程
综上所述,该机器人工作过程较为稳定可靠,能够完成在不同距离病房间的日常配送任务,满足医疗配送机器人的设计要求。但是在长距离的配送服务中,每次配送时间还是存在一些差异,之后可以通过加入TF测距雷达、改进PID控制算法等方法进一步改善机器人的工作性能,满足复杂场合下的配送任务。
5 结束语
未来无论是在专业的医疗服务领域还是在人们的日常药物配送活动中,特种医疗机器人技术都将发挥巨大的作用,帮助人们缓解极端情况下人力资源的紧张,使之在更好的地方发挥价值。本文设计的一种用于医疗服务的智能送药机器人,通过结合OPENMV提供的机器视觉寻迹及K210提供的数字门牌号识别,可以实现路径的实时规划,识别初始的送药病房号,进而把所需要的药物送至目标病房。经过系统测试,机器人的各项功能指标达到了预期的效果,且在任务执行时运行稳定。目前该医疗机器人可以单独工作,将来考虑加入组队联网算法,以便进一步扩展其业务服务功能。