基于机器视觉导航的循迹小车设计*
2021-01-08许志鸿王聪伟
王 健,许志鸿,武 政,高 靖,王聪伟
(1.内蒙古农业大学机电工程学院,内蒙古 呼和浩特 010018;2.中国铁路呼和浩特局集团公司车辆部,内蒙古 呼和浩特 010053;3.内蒙机械动力研究所,内蒙古 呼和浩特 010010)
循迹小车是一个集环境感知、规划决策、自动行驶等功能于一身的光机电一体化系统,它集合了传感器、信息处理及自动控制等技术。如今,随着国内外各种智能小车大赛的火热举行,各高校对其展开了深入广泛的研究,同时也是对单片机课程的继续学习和应用强化。
1 硬件电路设计
循迹小车的布局满足以下条件:(1)为使小车有优良的加减速度性能,应使小车的质量较小;(2)为使小车的结构简单,采用单个万向轮代替传统小车前轮;(3)为有良好的视野,摄像头支架应固定在小车前端;(4)为降低重心,摄像头的支架应在满足视野的要求下,取最小高度;(5)为平衡前后重心,小车的电池应尽量放在小车后端,同时为降低重心,应将电池固定在满足结构要求的最低位置。
系统的硬件电路包括主控模块、视觉传感器、电源模块、动力驱动模块和显示模块,系统设计方案框图如图1所示。
图1 系统设计方案框图
1.1 主控模块
主控模块选用单片机STM32F系列作为控制芯片,并由晶振时钟电路和按键复位电路组成单片机最小系统,如图2所示。
1.2 电源模块
设计中选用可多次循环充电的电池供电,并具有电池电压测量功能。通过稳压电路的转换为电机驱动芯片供电,为CCD摄像头TSL1401CL提供5V电压,并为单片机和OLED液晶显示屏提供3.3V电压,电路如图3、图4所示。
图2 单片机最小系统
图3 稳压电路
图4 电池电压测量电路
1.3 视觉传感器及其接口电路
视觉传感器选用型号为TSL1401CL的CCD,具有信号传输零丢失、噪点较小、感光度较高等特点,实物及接口电路如图5所示。
图5 TSL1401CL型CCD及接口电路
1.4 动力驱动模块
动力驱动模块由电机及驱动组成,电机采用霍尔编码器,型号为TB6612FNG。霍尔编码器能够将角位移的信息转换成具有一定特性的电数字脉冲信号,测量出位移或速度信息,如图6所示,其接口电路如图7、图8所示。
图6 霍尔编码器示意图
图7 霍尔编码器接口电路1
图8 霍尔编码器接口电路2
电机驱动采用A4950,通过脉宽调制控制电机,其接口电路如图9所示。
图9 电机驱动接口电路
1.5 显示模块
显示模块由OLED显示屏实现,主要显示电池电量、运行速度等信息,其接口电路如图10所示。
图10 显示屏接口电路
2 软件设计
2.1 主程序设计
系统流程如图11所示。初始化完成后,CCD开始采集赛道二维图像信息,并进行图像处理。通过霍尔编码器获取小车当前的速度并反馈给单片机,由增量式PID调节器控制电机,从而实现对小车速度的控制。
图11 主程序流程图
2.2 导航算法设计
对摄像头采集的图像采用数字图像处理方法,获取黑色赛道信息,实现机器视觉小车的导航功能,算法流程如图12所示。
图12 导航算法流程图
摄像头采集的图像经二值化、取反及闭运算后的效果如图13所示。从图13中可以看出,赛道信息能够准确地被提取。
2.3 PID算法设计
图13 赛道图像处理效果图
利用PID控制可以实现循迹小车的快速平稳运行。通过PID的三个环节,可对偏差信号进行反馈、处理和修正,以此提高运行速度,缩短系统的响应时间从而提高小车的灵敏度。PID形象表达如图14所示。
图14 PID形象表达
2.4 电机控制算法设计
电机采用模糊控制算法,根据输入偏差和变化量的大小建立适当的模糊规则表,使直道输出高速度,转弯迅速减速,出弯后再加速,解决了二次曲线出弯冲出赛道的问题,再配合经典的增量式PID控制电机转速,实现了小车的速度控制,并具有良好的控速性能。
3 性能测试
基于机器视觉导航的循迹小车实物如图15所示。通过对硬件的测试,小车已能通过CCD摄像头进行导航,测试中采用辨别率高的黑白赛道,即以白色的A4纸为底衬,在A4纸中央贴上12mm宽的黑色PVC绝缘胶带。赛道是由两条平行的长为1100mm的黑色PVC胶带和两个半径大约为600mm的半圆拼接而成。循迹小车在赛道上的行驶情况如图16、图17所示,机器视觉小车的主要参数如表1所示。
图15 基于机器视觉导航的循迹小车实物
图16 循迹小车直道行驶
图17 循迹小车转弯行驶
表1 机器视觉小车参数表
4 结束语
基于机器视觉导航的循迹小车采用单目CCD实现了赛道信息的采集,运用双峰法动态阈值和多点平均动态阈值分割出赛道和背景信息。基于模糊控制算法,再配合经典的增量式PID控制电机转速,使直道输出高速度,转弯迅速减速,出弯后再加速,解决了二次曲线出弯冲出赛道的问题,实现了小车的速度控制。为了使小车结构简单和转向灵活,采用单个万向轮代替了传统小车前轮。