基于STM32的视觉识别导盲机器人设计

2024-03-14 06:43刘梦禹田志宏
自动化仪表 2024年2期
关键词:导盲盲人蓝牙

刘梦禹,田志宏,朱 涛

(1.天津科技大学电子信息与自动化学院,天津 300222;2.天津科技大学人工智能学院,天津 300457)

0 引言

根据世界卫生组织统计,目前世界上约有2.85亿名视力障碍人士,其中3 900万名为盲人。中国目前调查发现存在2 100万名视力障碍者,其中的23.8%是盲人[1]。视觉障碍群体的不断扩大,使导盲设施市场的需求快速增长。不仅如此,随着城市建设的逐步提升,人们的居住环境也在发生着变化,传统的导盲设备已经无法适应这种变化[2]。因此,导盲机器人应需而生,并且逐渐受到行业的高度关注。

目前,全球各国关于导盲辅助方面的研究工作已经展开,研究重点集中在手杖类行进辅具、穿戴式行进辅具以及移动式行进辅具这3个方面[3]。随着现代科技的不断发展,智能机器人逐渐进入人们的生活,并且已经成为盲人生活中的一部分。如何将传感技术融合到机器人的运动控制中,已成为当今智能机器人技术领域较为关键的课题。

为此,本文设计了1种智能化移动式导盲机器人。该设计在实现避障、定位功能的基础上,缩小了机器人的体积并减少了质量。本文优化传感器的设计,进一步实现传感器结构的小型化和轻量化[4]。此外,本文结合日益完善的图像识别技术,使导盲机器人更加智能化、人性化,以达到帮助盲人真切感知周围环境的目的。

1 导盲机器人整体方案设计

本文设计的导盲机器人以STM32为主控制器、Jetson Nano为辅助控制器,搭载超声波、蓝牙、全球定位系统(global positioning system,GPS)、摄像头、蜂鸣器等多种传感器。该导盲机器人能够实现以下功能:超声波传感器自动避障;蓝牙模块运动控制;GPS定位;摄像头识别车辆、行人、路肩等;检测到行人时蜂鸣器报警。

导盲机器人系统框架可具体分为主控模块、运动控制模块、避障模块、定位模块以及供电模块。

1.1 工作原理介绍

单片机驱动电机驱动板通过脉冲宽度调制(pulse width modulation,PWM)电路波调压的方式控制后两轮电机的速度,通过PWM驱动舵机控制前两轮的转向。STM32通过串口与GPS模块、蓝牙模块进行通信,实现位置信息的获取。超声波模块受STM32的直接控制,对正前方障碍物进行避障分析。辅助控制器Jetson Nano与相机串行接口(camera serial interface,CSI)摄像头通信获取前方160°广角视线范围信息,进而与内部已采集的车辆、路标、行人等数据进行对比分析。通用同步异步收发器(universal synchronous asynchronous receiver and transceiver,USART)1向STM32发送对应字符串,改变其标志位,从而改变其状态位,进而控制机器人行进,实现辅助避障。工作原理框架如图1所示。

图1 工作原理框架图

1.2 硬件部分设计

1.2.1 主控电路设计

STM32负责底层运动控制、超声波传感器和GPS模块。Jetson Nano 负责视觉信息处理与分析。2个主控模块通过串口进行通信。

①STM32介绍。

在主控制器的选择部分,因为所设计的导盲机器人应用的传感器类型较多,导致占用串口较多(3个)、输入/输出(input/output,I/O)口较少,所以本文选择STM32单片机。该单片机采用ArmCortex-M3内核[5],为哈佛结构,拥有独立的指令总线和数据总线,具有功能强大、响应快、低功耗、工作温度区间宽等优势,被广泛应用于机器人运动控制。

②Jetson Nano介绍。

Jetson Nano A02是一款开源硬件,拥有计算统一装置架构(computer unified device architecture,CUDA)核心、128-coreMaxwell图形处理器(graphics processing unit,GPU)、4 GB大容量内存、5 W低功耗。相较于Raspberry Pi或其他人工智能(artifical intelligence,AI)边缘计算单元,Jetson Nano A02的图像处理能力强、功耗低、性价比高[6]。很多算法可因此获得实时性能。因此,本文将Jetson Nano A02作为视觉识别部分的主控。Jetson Nano接口如图2所示。

图2 Jetson Nano接口

1.2.2 运动控制设计

导盲机器人运动控制设计采用伺服驱动系统。其中,TBSK20舵机直接以PWM电路波调压的方式接收STM32信号,从而控制前两轮转向,以决定机器人的行进方向。TB6612驱动板同时驱动2个直流电机来控制后轮,并运用PWM技术改变占空比来控制电机转速,进而控制机器人的行进速度。

首先,与传统的差速系统相比,伺服驱动系统可使机器人电机动力直接转换为驱动力。转向机构则由独立舵机控制。其结构更加简单、紧凑,控制效率和稳定性更高。其次,以软件为主导的动力系统可以根据软件定义不同的方式或系统的工作条件进行调整,因而操作难度更低、更智能。同时,轮胎与配件损耗较小,可满足长时间稳定运行的应用需求,在柔性控制方面有很大的优势。舵机接口如图3所示。

图3 舵机接口

1.2.3 避障模块设计

导盲机器人搭载了超声波传感器和视觉传感器。两者均可独立实现避障功能。

超声波传感器选用HC-SR04模块,测距精度为3 mm,可提供2~400 cm的非接触式距离感测功能。该超声波传感器的测距原理是依据超声波在空气中传播的速度,通过计算源声波发送时刻和回波信号接收时刻的时间间隔来获取障碍物的距离信息[7]。

(1)

式中:h为测试距离;t为高电平时间;v为声速,为340 m/s。

视觉传感器采用Jetson Nano NX AI高清摄像头。该摄像头具有160°对焦视场广角,感光芯片为索尼IMX219。相较于柔性印制电路板(flexible printed circuit,FPC)标准摄像头系列,Jetson Nano NX AI的视角更广阔、灵敏度更高、扫描效率更快,非常适合图像数据采集和信息处理。

Jetson Nano和STM32之间包含串口通信、串行外设接口(serial peripheral interface,SPI)通信、集成电路总线(inter-integrated circuit,I2C)通信等多种通信方式。本文选择使用USART1进行通信。通信过程如下。首先,Jetson Nano与STM32的TX端与RX端通过晶体管-晶体管逻辑(transistor transistor logic,TTL)电平模块交叉连接。然后,相同的串口通信参数和协议得以确定,如串口波特率均为115 200 bit/s、字长为8 B的数据格式和1个停止位以及无奇偶校验位等。最后,串口通信程序得以编号,例如在STM32中调用USART_SendString、USART_SendArray等函数、Jetson Nano中调用Python的Pyserial库。当Jetson Nano识别到指定物体时,采集到的图像数据将编码为JPEG格式发送给STM32。STM32接收指令,控制机器人行进,并辅助避障。

1.2.4 GPS模块设计

GPS定位模块使用中科微电子的ATGM336H。ATGM336H通道数目为32,冷启动捕获灵敏度为-148 dBm,跟踪灵敏度为-162 dBm,定位精度为2.5 m(即GPS定位在2.5 m精度的概率为50%),支持北斗卫星导航系统(Beidou navigation satellite system,BDS)/GPS/格洛纳斯全球卫星导航系统(glonass global navigation satellite system,GLONASS)的单系统定位[8],以及任意组合的多系统联合定位的接收机模块。ATGM336H可以直接替换U-blox的MAX系列多款GPS模块,主要接口信号Pin-Pin兼容,安装孔一致,功耗低,内置天线检测电路,具有天线短路保护功能。

1.2.5 供电模块设计

因为驱动模块较多,所以机器人采用两部分电源分别给STM32和Jetson Nano供电。机器人采用3节12 V/1 500 mA电源给STM32供电,并采用另外3节相同电源,利用AMS1117 5.0正向低压降稳压器向Jetson Nano 供电。经测试,当开启所有功能后,蓄电时长可达2 h。

1.3 软件部分设计

1.3.1 底层架构部分

底层架构部分软件流程如图4所示。

图4 软件流程图

机器人主控制器STM32以KeilμVision5为编译环境、C语言为编译语言,用于实现机器人多个功能的综合控制,在不同的操作触发下调用不同程序来实现相应功能。这些功能主要包括电机控制程序、舵机控制程序、超声波测距程序、GPS定位程序和蓝牙串口通信程序。通过整合上述各子程序,完成系统的流畅运行。主要代码如下。

int main(void)

{

u8 car_status = 0;

u16 car_speed_flag = 0;

u8 car_angle_flag = 0;

u8 car_avoidance_flag = 0;

u16 dcsr04_distance = 0;

USART1_Init(115200);

USART2_Config(9600);

USART3_Config(9600);

HCSR04_Init();

MOTOR_Init();

Stop();

……}

1.3.2 图像识别——模型训练算法

本文针对目标识别方面使用到的程序为经过AlexeyAB改良过的darknet框架下的你只看一次(you only look once,YOLO)v3算法。该算法在实时目标检测领域中拥有较强的性能,能够契合Jetson Nano的算力。该算法在Jetson Nano中实时运行时可以达到较高的检测速率,能够应对日常生活中90%的场景[9]。图像解析流程如图5所示。

图5 解析流程图

YOLO v3算法已经提供了图像识别的权重。YOLO v3算法采用分而治之的方法,将图片划分成单元格进行识别。在接收图片后,YOLO v3算法根据图像的尺寸进行尺寸解析。解析后的数据与训练数据进行比较[10]。本文将系统的串口权限设为上电默认打开,将图像的实时解析脚本放在开机启动项中。系统上电后,自动运行检测脚本:在未识别到障碍物时,向串口发送数据;在识别到障碍物时,将障碍物的信息通过串口的方式发送给机器人端。

在部署Jetson Nano之前,可以使用更高算力的设备来进行训练。比如,可先在个人计算机(Windows平台)中采用由德国卡尔斯鲁厄理工学院(Karlsruher Insttut für Technoogie,KIT)联合丰田工业大学芝加哥分校(Toyota Technological Institute at Chicago,TTIC)发布的KITTI数据集进行训练。模型使用Windows训练平台,具体参数如下。中央处理器(central processing unit,CPU)为AMD Ryzen 9 4900H。图形处理器(graphics pracessing unit,GPU)为NVIDIA GeForce RTX 2060。存储空间为10 GB硬盘,包括OpenCV软件库和CUD NN网络库。所使用的数据集为KITTI-road。步骤可分为数据处理、训练、使用与部署。

2 试验测试与结果

机器人主控STM32通过串口与蓝牙模块HC-06进行通信,可通过移动端蓝牙调试助手应用(application,APP)测试其运动控制功能与定位功能。蓝牙软件配置过程如下:首先开启蓝牙权限,在“设备连接”功能栏中搜索“HC-06”并成功连接;然后在“按钮控制”功能栏打开编辑模式,分别将数据b、e、d、a、c发送到“OK”“RIGHT”“LEFT”“UP”“DOWN”按钮;最后退出编辑模式,便可通过蓝牙控制机器人运动。当处于室外时,进行GPS定位功能测试,在页面顶端或“对话模式”功能栏获取经纬度信息。经10次测试,捕获延迟时间平均为3 s。

超声波模块测距测试中,利用Timer定时器的PWM输出、输入捕获功能提高超声波测距精度。多次测试结果表明,超声波模块4 m内测距相对误差为4 cm。在完成测距模块检测后,进一步测试其避障功能。在机器人正前方设置1个长方体木箱(20 cm×20 cm×40 cm)作为障碍物,点击“UP”按钮之后不进行任何人为控制操作。当机器人与木箱距离约为15 cm时,舵机控制机器人右转弯。试验结果验证了避障功能的有效性。图像识别测试可以在Windows训练平台上通过使用指令darknet.exe detector map cfg/xxx1.data cfg/xxx2.cfg backup/xxx.weights计算backup路径下权重文件的mAP(全类平均精度)值,进而查看训练的效果。若对图片进行测试,则输入指令darknet.exe detector test cfg/xxx.data cfg/xxx.cfg xxx.weights xxx.jpg。若对视频进行测试,则输入指令darknet.exe detector demo cfg/xxx.data cfg/xxx.cfg xxx.weights。通过darknet程序的统计计算,在预设的7种基础分类中,路肩、车道、立柱、汽车这4种分类的平均准确率为90%。而交通标识、人、树由于样本数量不足(人工标识数量不够)的原因导致准确率仅为80%[11]。识别分类评价指标结果如表1所示。

表1 识别分类评价指标结果

模型的交并比(intersection over union,IoU)指标表示该模型对对应目标预测的检测框的准确程度,即模型建立的检测框是否在准确的位置上。一般认为IoU值大于50%即为正确的检测框。在本文模型中,该指标平均值为68.07%。此外,模型在IoU阈值规定为0.5时,mAP为88.33%[12]。分析结果显示,对于YOLO置信度阈值为0.25时,准确率为0.88,召回率为0.87,综合评判指标F1-score为0.88。

3 机器人创新点

本文所设计的基于STM32的导盲机器人具有以下创新点。

①本设计添加了GPS定位功能,盲人家属可以随时查看盲人的位置信息。

②本设计搭载Jetson Nano AI边缘计算单元,配合Jetson Nano NX AI高清摄像头,可实现识别包括路肩、车道、立柱、汽车、交通标识、人、树在内的7类图像,高效保障盲人出行安全。

③本设计当摄像头识别图像并判断为行人时,蜂鸣器会发出警报,辅助盲人提高警惕。

④本设计电源模块采用2块电池分别向STM32与Jetson Nano供电,避免了因供电不足而导致传感器失效的问题,提高了导盲机器人蓄电时长,可以实现盲人在社区及附近地区实行必要的生活行为。

4 结论

本文采用YOLO v3识别算法,设计了具有视觉识别功能的导盲机器人。试验结果表明,机器人运动控制灵活、定位延迟低、视觉识别精准。本文设计能够实现辅助盲人出行并提高其出行安全系数的功能,具有低功耗、易携带的优势。该设计可广泛应用于盲人所在社区及附近场所、盲人学校、盲人机构等地。

猜你喜欢
导盲盲人蓝牙
盲人取袜
基于云端技术的多功能导盲手杖的设计与实现
蓝牙音箱的直线之美
基于物联网的导盲机器犬的研究与设计
随声附和的盲人
路口导盲及马路障碍物检测提醒系统的设计
自首的盲人
简单、易用,可玩性强Q AcousticsBT3蓝牙音箱
智能导盲
适合自己的才是最好的 德生(TECSUN) BT-50蓝牙耳机放大器