曹永豪,刘付永红,张钿钿,郭沈燕,黄亮亮,王汝瀚
(1.华南理工大学自动化科学与工程学院,广东广州 510641;2.华南理工大学物理与光电学院,广东广州 510641;3.华南理工大学 材料科学与工程学院,广东 广州 510641)
近几年无论是汽车企业还是互联网大公司,都将自动驾驶作为重要的研究热点。作为对将来生活有极大影响的新技术,其安全性、稳定性、舒适性受到了广大的关注。
为了更方便、高效地进行研究,以智能小车为实验载体,采用TiCore264[1-2]系列芯片作为中央处理器,同时使用总钻风摄像头采集路面信息、编码器获取后轮转速、TFT 彩屏[3]显示图像,摄像头将采集到的图像传输给TC264 进行数据处理以识别不同道路类型,再经过控制算法输出三路Pulse Width Modulation(PWM)信号[4]分别控制舵机、左电机、右电机,最终通过完成普通道路基本循迹、三岔路口判断和小中大圆环判断来实现自动驾驶。
系统以TC264 芯片作为中央处理器,因其核心板拥有两个核心,能够稳定地接收摄像头传来的图像,并对其进行处理得到预设的控制信号。
实现自动循迹的智能车将电池放在主板下面并接入电源模块,电压从电源模块输出经过主板为所有模块提供工作电压,然后摄像头获取道路图像信息,并通过串口将采集到的信息传输给TC264 芯片进行分析处理,经过TC264 的算法处理后输出PWM信号分别给舵机和驱动模块,还会输出信号给TFT屏幕将摄像头采集到的图像显示出来。驱动模块会将接受到的PWM 信号转变成输出控制电机的电压。在调试阶段开启TFT 彩屏显示摄像头采集的图像,以供道路标志点的算法设计,在循迹的时候关闭屏幕显示,以免屏幕显示占用太多CPU,导致智能车无法稳定地循迹。该智能车还采用了双编码器,将左右轮的速度采集回来给TC264 以实现负反馈速度闭环控制[5]。
该智能车包括七大模块:主板、TC264 核心板、电源板、驱动板、摄像头、编码器、TFT 彩屏,所有模块的电气连接示意图如图1 所示。另外,虽然此智能车没有使用到陀螺仪,但是主板的设计还是保留了这一接口。
图1 模块连接示意图
各类模块的功能如下:
①主板:提高智能车集成化程度,TC264 核心板、电源模块和TFT 彩屏均插在主板上面。
②TC264 核心板:接收摄像头和编码器传输过来的信号,根据控制算法做出决策输出三路PWM 信号控制舵机和电机。
③电源板:为各类外设提供符合要求的电压,包括舵机6.5 V、核心板3.3 V、编码器5 V、隔离电路5 V、摄像头3.3 V 等。
④驱动板:根据主板传输过来的PWM 信号,通过IR2103S[6]芯片和H 桥电路实现电机电压的控制。
⑤摄像头:采用MT9V034[7]总钻风摄像头,130°无畸变获取道路边界黑线图像信息,传输给TC264核心板。
⑥编码器:获取后轮左右电机的转速传输给核心板,以实现负反馈速度闭环控制。
⑦TFT 彩屏:在控制算法设计阶段通过查看TFT 彩屏的信息来设计可以识别不同道路元素的控制算法。
电源模块的产生是为了给核心板、摄像头、SD卡、屏幕、陀螺仪、编码器、隔离电路和舵机供电,三种降压电路如图2 所示,采用LM2941S[8-9]将7.2 V 降压为6.5 V 为舵机供电;采用LM2940IMP-5.0[10]将7.2 V 降压为5 V,为两个编码器和隔离电路提供电源,同时为AMS1117 提供输入电压;采用AMS1117-5.0 将5 V 电压降为3.3 V,为核心板、摄像头、SD 卡、TFT 彩屏和陀螺仪提供电源。
图2 三种降压电路图
驱动模块需要将主板传输来的PWM 信号转换为H 桥控制信号对H 桥的MOS 管进行通断控制,进而控制电机的转速和转向[11-12]。驱动板原理图如图3 所示,将PWM 信号转换为H 桥控制信号的元件为IR2103,而IR2103 的工作电压为12 V,所以还需要将电源电压7.2 V 升压为12 V。PWM 接口接受四路信号,可以实现电机的正反转。
图3 驱动板原理图
主板上承载了摄像头接口、屏幕接口、编码器接口、SD 卡槽、电源接口、舵机接口、驱动接口、核心板接口、陀螺仪接口,在各元件之间采用网络标签的方式进行连接以减少连线混乱,其设计原理图如图4所示。
图4 主板部分原理图
主板基本都是接口和一个隔离电路,把所有的电线集成到了一块电路板上,极大地提高了集成度。主板PCB 的设计图如图5 所示,(a)、(b)分别为PCB的正反面。
图5 主板PCB的设计图
文中设计的智能车循迹由摄像头采集道路信息,经过控制算法处理输出PWM 信号控制舵机和电机来实现的。采用总钻风摄像头识别到的图像是灰度值不同的图像,为了容易准确地识别到行进的路线,减少环境因素干扰,系统运用图像二值化[13]将原图像转化为纯黑白两色图像。经过二值化处理后的图像,道路的边线信息就容易被获取,根据道路两边的黑线取平均值,并将该平均值与屏幕的中线进行比较计算偏差,然后再通过编码器获取当前车速[14],经过偏差和车速来输出PWM 信号控制舵机的转角以及对应的电机左右轮差速,使得智能车在行进拐弯的时候更加稳定。实现道路普通循迹外,测试中还需要识别三岔和圆环元素进行对应的控制,使得智能车能够顺利的通过三岔路口和圆环。控制流程图如图6 所示。
图6 控制流程图
智能车循迹是识别道路边线进行循迹的,真实世界中有着各种各样的颜色,但只需要识别道路黑色的边线即可,其他颜色可以忽略掉,因此需要将摄像头采集到的图像进行二值化处理,从而找到问题的主要矛盾的主要方面,提高识别的精确度。系统首先将图像转化为灰度直方图,即将图像以256 阶的灰度存储在数组当中,方便接下来对图像的进一步处理。
循迹的基本原理是通过计算道路两边的黑色边线来算出中线,然后根据中线和屏幕中线的偏差来计算控制舵机的打角,并给后轮电机一定的速度偏差来实现基本循迹。
在控制舵机的时候,无法使用所有舵机的转动范围,当转角大于180 度时,轮子的转动范围限制了舵机的转动,此智能车搭建完毕后,前轮居中时控制舵机的PWM 信号占空比为10.95%,前轮左打满时控制舵机的PWM 信号占空比为11.90%,前轮右打满时控制舵机的PWM 信号占空比为10.03%,控制舵机的PWM 信号的幅值是3.3 V,频率是50 Hz,周期是0.02 s。智能车在直道行驶时,控制后轮电机PWM 信号的基础占空比是27%,幅值为3.3 V,频率是10 000 Hz;当智能车在中线偏差绝对值大于10 的弯道行使时,给到的PWM 信号占空比为24%,幅值和频率保持不变,然后在24%的基础上给予左右轮PWM 信号分别加减相同的占空比,目的是使智能车在转弯的时候减少打滑的情况发生,能够稳定、快速地过弯。其中包括了利用PID 计算中线偏差以及计算舵机和电机的PWM 偏差。这里使用了模糊控制[15-16]+PID,测试初期只使用了模糊控制,但是控制效果并不是很好,智能车在循迹的过程中很容易发生摇摆,经过改进后采用模糊控制+PID,车的运动变稳定了,从而提升了道路元素的识别成功率。
将测试小车放在三岔路口,使用屏幕观察三岔路口的特点,根据判断条件:两边边线有拐点,而且拐点到有效行上边界的斜率左负右正,屏幕显示如图7 所示。实践表明,测试系统的算法识别率是挺高的,不过会发生误判,在一些弯道会被误判成三岔,后来通过道路模式分类,解决了这个问题。
智能车在识别到三岔道路后,系统采用的方案是给予一定时间的固定舵机打角,当智能车进入预定道路之后再回归到正常循迹的过程。
圆环的算法设计过程和三岔大体上保持一致,根据场景中的特定位置,判断其圆环特征,屏幕显示如图8 所示。测试初期出现智能车会因为圆环的第一个缺口而发生循迹抖动,为此设计了一个算法实现智能车在识别到这个缺口时保持直走一段时间,判断到第二个缺口后就采用固定打角驶入圆环。缺口的判断条件是识别到左边丢线(即无法搜索到道路边界线)加右边是直线,是则采用直走的方案,直走结束后再来观察是否达到入环判断条件,即左边有拐点且右边是直线,如果满足条件就固定打角入环,否则,就继续正常循迹。这种策略可以避免圆环误判造成冲出道路的现象发生。
图8 屏幕显示圆环路口图
基于TC264 的智能车要实现自动驾驶,首先要能够获取到与速度相匹配的帧率的图像,并将获取到的图像进行处理,为了提高运算速度和精度,通常需要降低图像分辨率,并对图像做二值化处理,以便对道路的识别和判断,从而作出不同的控制策略。面对不同的路面元素需要设计合适的判断条件对其进行判断,并综合利用PID 控制和模糊控制来对舵机进行转向控制,利用编码器和PID 对车速进行闭环控制,以确保智能车能够稳定地识别路面元素并对其作出相应的决策。