董燕丽 秦嘉程 刘攀 赵晓艳
(晋中信息学院智能工程学院 山西省晋中市 030800)
随着智能时代的到来,机器人技术得到空前发展。机器人技术是科学技术发展的综合产物,是一门交叉学科,综合了生物学、手部运动、计算机图形学、通信等多个学科,是对社会经济发展有重大影响的产物,是生产力发展的必然。机器人技术可以衡量中国的制造技术以及一体化水平,因此机器人技术的蓬勃发展是未来必然的趋势。
从传统的履带式机器人到现代的四足机器人,机器人的应用越来越广泛。移动机器人不仅工作范围广,而且它们能够很好的适应恶劣的生存环境,躲避障碍。机器人作为科学技术的产物,可以帮助人们更方便、更快捷、更高效、更安全的完成任务,尤其是一些特殊任务。如疫情期间,为减少接触减少感染,采用移动机器人为病人配送药物和防疫物资。国家对机器人的创新、创造也是大力支持,通过举办各种比赛,让大家通过竞技的形式互相学习,并形成良性竞争,以比赛促发展,为进一步的研究打下坚实的基础。
移动机器人的整体设计主要分为三个部分:PCB 电路设计、软件编程、总体装配和机构调试。移动机器人的整体结构要求是:打孔精准,螺丝精确入位,各个元器件部分可拆卸,不同元器件之间相互配合,最终达到精确到达指定位置的目的。其次,硬件电路要细化完善,使每台电机和传感器都能完全通电,在程序中将各个部分有机的结合起来,控制整个系统的运行,完成规定的动作,最终到达我们要求的目的地。
机器人的传感器识别系统相当于整个机器人的“眼睛”,如果机器人遇到障碍物时,传感器会识别出机器人与障碍物的距离,并随着移动的行进改变路径,然后用摄像头来识别障碍物的类型,通过复杂的计算完成路径规划,机器人会选择最佳的运行方式。当目标物体颜色差别很大时,它可以自动的检测出目标的颜色,识别出并比较物体的色差从而保证能够正确找到目标。自动的颜色寻找在众多机器人比赛中十分实用且重要。但缺点也十分明显,在实际运行现场,环境光照对摄像头的影响非常大,光照的强弱会直接影响机器人识别目标物的正确率。为尽量避免环境光对识别系统的影响,提高识别正确率,可以通过多次实验对比,找到适应摄像头的光源强度,从而能更好地保证所有搜集到的图像是准确的。
移动机器人的算法设计分为辨识算法和控制算法。首先用辨识算法从外部获取大量信息并从中提取中对自己有用的信息,剔除无用无效信息;然后控制算法对搜集到的信息和数据进行分类。本设计采用的环境辨识算法是通过摄像头检测和超声波障碍物判断,属于初级行为决策算法。高端行为决策算法非常复杂,如人工神经网络、遗传算法、模糊逻辑等,决策分析法和层次分析法也是未来机器人领域的研究重点。人工运动,又称Ki,是行为决策算法发展的产物。本文设计的算法是通过各元器件发挥作用,从而确定最简单有效的路径,使机器人能够快速到达,为后续进程节省时间。
移动机器人的硬件设计采用模块化的思路,系统的硬件主要是由电机、电源模块、电机驱动模块、摄像头模块、超声波模块、编码器模块、控制器模块等组成的,核心控制器采用STM32 的单片机,具体的系统框图如图1所示。
图1:移动机器人的硬件系统框图
移动机器人的核心控制器选用32 位CPU 的STM32 单片机,开关时钟采用8MHZ 外接晶体振荡器,系统时钟工作频率为72MHZ 内倍频,选择外接晶体振荡器是为了避免外部干扰造成的内部晶体振荡器的稳定性不强,导致时钟不准确。因此,大多数STM32 开发板使用外部8MHz 的晶体振荡器源。
电源模块为整个系统供电,起着非常重要的作用。由于不同模块需要的电压幅值不同,因此需要对电源进行降压处理。电机模块采用12V 的蓄电池作为输入电压,其他各个元件均为5V 供电。需将12V 电压经过降压电路后进行稳压,12V 的输入电压降到稳定的5V 电压左右后,供给单片机系统和其他元件作为输入电压。
摄像头模块的主要功能是依据对象显示的颜色进行路径搜索,也就是说,摄像头可以找出自己需要的物体颜色并找到一条最适合的路线,用摄像头拍摄的照片为240×160 像素。如果要求更精准的颜色识别,可对摄像头模块进行适当改进,在摄像头附近添加新光源以实现准确的检测。摄像头的图像传输速率是每秒30 帧,曝光时间也可以由自己依据实际情况设置,本设计最终设置采用13 ms 来搜集外界信息。合成的摄像头模块,良好的性能可以满足机器人竞赛的要求。
超声波模块是一个距离测量模块,在移动机器人的路径规划中主要用来避障,保证机器人能顺利避开障碍,迅速到达指定位置。其测距原理为:一端发射声波,声波碰到障碍物后反射回来,另外一端负责接收声波,测量出声波发射到遇到障碍物返回的时间,所用时间乘以声波速率即为障碍物与模块之间的距离。通过多次实验对比发现:如果障碍物在模块3 米范围内,探测结果是相对准确的,若超过3 米则会存在较大误差,容易误判,若超过4.5 米,则障碍物无法被探测到。市场上有激光测距模块,其测量距离可以达到几十米到几百米,精度也比较高,但是激光模块的电源比较大,而且成本太高,不适合使用,且超声波测距模块已足够满足机器人比赛的实际需求。
本设计采用型号为TB6612FNG 的电机驱动模块,该模块的AINl/AIN2、BIN1/BIN2 是控制信号输入端,A01/A02和B01/B02 是电机控制插座;STBY 是正常待机模式下的控制引脚;VM(4.5-15 V)和VCC(2.7-5.5 V)是电机驱动电压。TB6612FNG 是一种基于MOSFET 的H 桥,双通道电路输出,可同时驱动2 个电机。比晶体管H 桥驱动器效率更高,每通道600 mA 的平均驱动速度相当于1.2 A 的最大电流水平。比L293D 的初始负载增加了一倍,它不需要任何额外的充放电,其外围结构简单,对于PWM 信号,100 kHz 的频率比5 kHz 和40 kHz 的频率高。
编码器模块是机器人定位的关键模块,编码器因其精度高,外形小巧,分辨率高,耗损率低,使用寿命长,易于安装等诸多优点而被广泛使用。相同的产品既可以通过角位移来检测,也可以使用技术转换工具通过线性位移来检测。编码器的中间为带有光栅的码盘,光通过光栅,接收管接收到高电平,没通过,接收到低电平。电机旋转一圈,码盘上有多少光栅,接收管就会接收多少个高电平。
由于光电管的仪器产生数字脉冲信号,它们可以直接连接到单片机的计数器端口。每一个光电元件产生两个脉冲,它们具有相同的形状,只有90°的相位差。如果电机正转,第二次脉冲滞后90°,如果电机倒转,第二次脉冲超前90°。在实际的运行中只有一个脉冲信号,需通过测量脉冲频率来获得电机的速度。电机的旋转是通过给电机施加正电压和负电压来确定的,参加比赛期间,电机运行强度很高,电机转速很快,电机的旋转与电压方向一致,可通过电压脉冲的极性来有效地确定电机的旋转方向并实现速度的控制。
陀螺仪模块的作用是检测移动机器人的姿态,通过检测俯仰角、航向角和横滚角来确定机器人的姿态。系统选用型号为ATK-MPU60X0 的陀螺仪,该型号的陀螺仪是一款高性能三轴加速度加三轴陀螺仪的六轴传感器模块。可利用自带的数字运动处理器DMP 硬件加速引擎,将第三个数字传感器连接到I2C 接口。扩展后可通过I2C 或SPI 接口发送9轴信号。MPU60X0 还可以通过I2C 接口连接非惯性数字传感器。
完成硬件的各元器件选型后,应用SOLIDWORK 软件绘制移动机器人模型图,并进行装配,根据模型图购买硬件实物后,组装起来即为参赛的移动机器人。机器人的模型图如图2所示。
图2:移动机器人模型图
软件程序是单片机控制系统中最重要的部分,通过软件控制完成系统优化、摄像头数据搜集、超声波数据搜集、电机控制、准确到达目的地等工作,系统流程图如图3所示。
图3:系统流程图
单片机的初始化过程包含4 部分,分别是时钟初始化、定时器中断初始化、串口初始化和PWM 初始化。
3.2.1 时钟初始化
单片机的时钟是单片机运行中非常重要的部分,STM32单片机有着自己的时钟树和5 个时钟源:HSE、LSI、HSI、LSE 和PLL,系统时钟可以用HSE、HSI 和PLL 作为时钟源,通常是HSE 时钟,所有的MCU 引脚和外围设备都挂在时钟上。因此,必须先启动时钟,才能启动系统。否则,所有组件和I / O 端口将无法正常使用。
3.2.2 定时器中断初始化
该系统使用时钟来设置摄像头区域并收集图案,从而确定机器人的移动路径。要求系统在相应时间内运行一定周期,由于摄像头曝光时间应设置在指定时间,因此确定搜集周期的目的是确保收集的编码器脉冲正确,并在指定时间内检查电机的PWM 是否正常。
3.2.3 串口初始化
单片机的串口是用来通信的,而各串口通信的模块,默认值可能会有不同,导致各模块间无法正常通信。要想正确通信,就需要初始化串口的通信参数使各模块通信同步。串行接口的波特率通常选115200bit/s,串行时钟采用PLL 时钟源。由于串口通信的同步收发模式对外部设备要求高,对时钟的要求严格,且程序代码编写较为复杂,所以串口通信一般都使用异步收发模式。
3.2.4 PWM 初始化
PWM 表示脉冲宽度调制,它是一系列脉冲,这一系列脉冲是以方波的形式向前传输。在单片机工作的任何时间段内,PWM 波形只有高低两种形式的电平。当涉及PWM 信号时,需要注意两个重要的领域,一个是PWM 的占空比,另一个是PWM 信号频率。占空比不同,PWM 波形的接通时间就不同,通过控制从0%到100%的占空比,我们可以调整PWM 信号的“接通时间”,从而控制信号的宽度。由于我们可以通过调节脉冲信号的宽度来改变接通时间,所以将这种控制方式称为“脉冲宽度调制”。
为了确保每个采集脉冲的周期相同,初始化后应立即启动编码器。编码器启动如果滞后了,由于不同的图像和不同的处理时间,会导致编码器的脉冲时间的不同,从而产生错误,进而影响电机的闭环控制,导致机器人无法精准定位。
PID 控制是应用最早、最广泛的控制策略之一,常用于自动控制过程中,参数匹配合理的情况下,该方法的控制过程简单、完整,可靠性很高。PID 指的是比例、积分和微分控制,在此系统中,积分装置的作用是限制振幅,即作用时间和作用位置,微分装置的作用是使系统更稳定。但实际上比例系数P 和积分系数I 的闭环控制就能够使系统稳定运行,因此系统只使用两个系数P 和I,即电机为闭环P、I 控制且微分系数D 设置为0。但由于系统控制的电机经常加减速,积分层只能在积分PID 位置出现一段时间,因此系统采用增量式PID 控制。
增量式PID 根据每单位的脉冲数读取电机信息,并将实时读取的数据与设定的目标值进行对比,根据偏差值进行控制,通过算法处理减小偏差并趋于零。增量式PID 的积分时间是系统积累的,没有积分极限,这也是它与PID 最重要的区别。
图像处理包括:图像解析、图像分离与处理以及图像编码。主要是通过计算机对原始图像进行解析,然后通过原始图像滤波、图像的压缩、图像增强复原等,摄像头收集图像并将其放置在二维阵列中。
3.5.1 图像矫正
由于地面不平或者其他环境因素的影响,安装好的摄像头在拍摄图片的时候可能会存在失真,一般是垂直失真和水平失真两类。水平失真对系统影响很小,无需专门校正。但垂直失真对最终的数据结果影响很大,一般图像压缩越深,压缩程度越大,在机器人的路径规划中越容易出现严重偏差。为了解决垂直失真问题,我们采用持续采样的方法,摄像头拍摄的图像以像素的形式存储在二维矩阵中。二维数组的两个维度是图像的行数和列数,要纠正垂直失真,必须在短距离内收集较少的行,在长距离内收集较多的行。具体的行数通过设置实际图像来确定。
3.5.2 图像有效信息采集
机器人运动位置和轨迹的边界是照片中最有效的信息。因此,使用实时边缘跟踪方法从搜集到的照片里来提取边缘线条。移动机器人的运行轨迹是沿着黑线行进的,因此在正常运行的状态下,机器人可以检测到黑线,且黑线应该在相机图像中心,如果照片中没有黑线,说明机器人已经偏离既定轨道。以第一条线中心为测量点,左右扫描,直至该点由黑变白,上一行记录的点X为参考点,以X为基准,扫描两侧,设定扫描区域。扫描跳转点后,记录该点。然后扫描上一行中记录的点作为该行的参考点。最后,将这些点记录在一个阵列中,对机器人的运动采取实时监控。
3.5.3 颜色识别
摄像头搜集的图像以像素的形式存储在二维矩阵中,不同颜色对应的像素模拟值会有不同,因此用采集到的图像信息分别与二维阵列中的255 个模拟值相对照,即可选出正确的模拟值也就是正确的颜色。它们受光的影响,直接会导致模拟值的误差。程序中模拟值的范围是有限的,范围是彩色的。
移动机器人的定位调试,包括硬件调试和软件调试两部分。硬件调试主要是检查移动机器人的各硬件设备的性能,包括PCB 板调试、摄像头调试和车轮安装等;软件调试则是检查和验证程序是否准确,控制算法和定位精度等。
4.1.1 PCB板调试
首先用万用表测试所有线路,先检查电源周围的进出线是否存在短路情况,进出线直接影响着整个系统的安全运行;接下来检查降压电路出口处是否正常输出5V 或3.3V,TEM模块输出5V 和3.3V;然后测试控制单元5.03V、3.3V、3.35V。确认电源正常,将电机驱动器下载到MCU,用示波器检查相应的MCU 引脚是否有PWM 波输出,尤其要测试通过光耦电路后引脚是否还能正常输出PWM 波,因为PCB 板上的光耦电路经常会出现异常。绘制的系统PCB 板如图4所示。
图4:PCB 板绘制图
4.1.2 摄像头调试
为了使移动机器人在行进过程中看的更远,摄像头应安装在机身较高的位置,可以采用广角摄像头,给与摄像头充足的识别时间。但对于机器人自身的图像要进行筛除。实验发现,当摄像头与地面呈一定角度拍摄时,图像通常呈现的是线路一部分,所以安装摄像头时,通常会与地面成一定角度来装配。由于摄像头与地面存在夹角,拍摄的图像会有大大小小的垂直失真。为了纠正垂直失真,我们应该在近距离收集较少的线,在远处收集更多的线,但线的数目是由实际图像的设置决定的。调整路线上黑线的位置,并设置两个数组,在数组A 中记下距离,在数组B 中记下图像中黑线的坐标。两个数组A 和B 是内置的,找到了匹配效果最好的函数图像,最后,用七次幂函数进行镶嵌时,函数图像最平滑,其数据被填充到阵列中,摄像头捕捉到存储在二维阵列中的函数后,最后得到摄像头的实际图像,通过算法修正后的图像效果如图5所示,左侧图为原始图像,右侧图为压缩图像,可以看到失真修复效果较好。
图5:失真修复效果图
4.1.3 车轮的安装
总体框架搭建后,安装电机。电机由一块铁板和一块三脚架固定,形成机器人的底盘,编码器安装在轮子旁边,安装时通过调整电机和编码器的位置,可以完全合并,测试编码器通电正常。移动机器人的实体外观如图6所示。
图6:移动机器人外观图
软件调试主要是看摄像头对图像的处理效果和电机PID的参数设置的调试。
4.2.1 图像处理
摄像头搜集的图像由众多像素组成,去除图像中的线条后,二维阵列由240×1160 到93×1160 组成。调试时,我们先逐行接管,即每行采集左右边缘,并存储在两个数组中,表示轨迹的左右信息。扫描的方法是从两边到中间。由于中心在车前,所以应该是注释中的一个元素,在两侧扫描后,可以扫描到轨道边缘并停止扫描,这样就可剔除轨道外的干扰数据,从而获得更精准的路径数据了。试验表明,机器人计算出的坡度是稳定的,因为坡度是边线的曲率,但直线部分的曲率是相同的。在直线段,采用中线扫描算法进行校正,使其在中线保持稳定。
4.2.2 PID 控制
采用PID 控制算法控制电机转速,如果地面摩擦等因素影响机器人的运动,会对机器人的行径造成不可预知的干扰。PID 控制算法中的微分判据会增加高频干扰,这将大大改变机器人的行进速度。因此系统不采用微分控制D,只采用P比例控制和I 积分控制来调节机器人电机的性能。
调参数时,首先只使用比例控制,将其余参数设置为零。假如小车调试稳定,则实际值与设定值之间存在静态误差,接着不断修改P 参数,直到使误差值达到理想值,则增加I积分系数以消除之前数据的错误,控制速度缓慢增加,发现改进后电机驱动问题得到了解决。如果任务不正确,系统将覆盖。这时,缩小尺寸和范围可以在一定程度上修复覆面。
试验时发现机器人在曲线和在直线上的转速不同。采用PID 控制系统在直线速度和曲线速度之间切换是非常重要的。实验发现移动机器人在直线和曲线之间的速度切换是刚性的,进入弯道时,有明显的突然延迟,离开弯道时却很快。改进思路是在测量评估后再降低目标速度,这样,由直线到曲线的速度切换变得更平滑。由于直线和曲线之间的频繁变速,很好地解决了电机转速不稳定带来的一系列不必要的麻烦。
经过反复实验并对测试数据进行对比,发现在电机的转速控制中加入PID 算法后,机器人的定位比上次比赛过程中更精准,尤其是在弯道和直道的切换过程中,移动机器人的速度更加平滑,运行更加稳定,最终达到行走最优路径的目标,大大提高了机器人的操作精度,实现了机器人的颜色识别和精准定位。