本作品专题是具有警示功能及简易自驾功能的自走车研究,主要目的是为了降低驾驶者在道路上遇到的危险,经由系统能在驾驶者遇到危险状况时,即时的提醒驾驶者或者系统自动的即时做出反应,让驾驶者能避免危险或降低车祸的严重程度,以达到降低驾驶车辆之危险性。
近年来交通事故逐渐呈现缓慢的提升,在道路上如何提升自身与他人安全,已经成为驾驶者一大重要事项。为了提升安全,在驾驶期间提高专注力很重要,但长时间保持专注力在精神上是一大负担,尤其是对有一定年纪的长辈或是工作下班、熬夜的人负担更是沉重。
此时,其实选择代驾或是停车休息才是最好的选择,但人们往往不会这麽做。因为代驾或休息往往会浪费大量的时间或是金钱,所以往往最後的结果都是带着疲倦的精神状态开着车危险的回家。为了得知肇事的主要原因,根据警政署查询肇事原因统计资料[1] ,如图1所示,可以把前七项的肇事主要原因大致进行归类:
一、违反交通规则
可能原因:(1)驾驶者因为赶时间或是其他原因故意违规;(2)未注意到号志状况;(3)酒驾。
二、未注意到周遭人车状况
可能原因:(1)转弯未注意旁边车辆;(2)没有保持车辆安全距离;(3)酒驾。
三、反应不及
可能原因:(1)新手驾驶;(2)疲劳驾驶;(3)对突然出现的动物、人、车等无法及时反应;(4)视线不隹不法及石柱要到前方有无人或障碍物。
以上的归类其实都围绕着「未注意」与「反应不及」这两件事情上,而这两件事情针对不同族群又有不同的差别。例如道路上突然冒出的一个人,对於反应较好的年轻人可以做到紧急闪避;但是对於一些反应速度较差的年长者,可能就会反应不及而直接撞上人引发事故。所以,对各个年龄层或者驾驶者的驾驶经验不同都会让问题最後的结果不一样。
不管结果如何,提高安全驾驶要解决的应该是在「未注意」与「反应不及」上的问题。本作品就针对此两点进行作品的设计,以树莓派( Raspberry pi )进行道路及号志的监视,帮助驾驶者注意到未能注意的地方,但树莓派只适合做影像上的处理,并不适合控制自走车动力和操作感测器。因此,选择Holtek晶片当作控制核心,操控马达及各种感测器来监控是不是有紧急状况发生。最後再与树莓派沟通取得监视的影像资料,就能解决「未注意」与「反应不及」这两种问题。
功能说明
本作品的动作流程如图2所示,其中以HT66F2390晶片为本系统的主控核心,主要负责控制自走车动力、取得超音波数值,再辅以树莓派做影像上的处理以取得号志资讯、道路宽度、道路弧度,最後利用I2C进行资料沟通,让HT66F2390晶片能得到并统整所有讯息,方便来决定自走车要行走的模式。
本行走模式及行走条件如下:
一、前进条件
1.前方无号志
2.前方无障碍物
3.道路宽适合自走车行走
当前方无号志、无障碍物且道路适合行走时,自走车就会前进并根据道路的弧度决定要转弯的角度。
二、减速条件
1.前方有障碍物但在安全距离外
2.前方有号志
3.转弯时
当前方有障碍物并在安全距离外时自走车会慢慢减速直到障碍物在安全距离内。若前方有红灯也会慢慢减速直到抵达红灯处,而转弯时会以固定慢速前进让自走车转弯能更加安全。
三、停止条件
1.前方有红灯
2.安全距离里有障碍物
自走车到达红灯前或是安全距离里有障碍时都会停止前进,这样才能让自走车保持在安全的状态。
作品结构
硬体架构
图3为本作品的硬体架构图,图中可以看到HT66F2390与其他设备连接的关系,其主控核心HT66F2390直接对感测器及马达上做读取与控制的动作,与树莓派之间则是利用I2C进行沟通。
作品的实体接线脚位如表1所示,其功能以下进行简单说明:
1.超音波感测器脚位说明
脚位Echo--HT66F2390的PC7脚
脚位Trig--HT66F2390的PD0脚
PC7是为了接收超音波感测器的高态讯号时间,并以此判断距离
PD0则是要送给超音波感测器起始触发送出超音波讯号的脚位
2.伺服马达MG90S
脚位橘色线--HT66F2390的PB2脚
MG90S只有三条线一条电源线(红色),一条接的线(黑色)一条讯号线(橘色),而讯号线的功能就是要利用PWM控制马达转向的角度
3.伺服马达MG995
脚位橘色线--HT66F2390的PB3脚
与MG90S的接脚一样,不同的只有PWM控制的不是角度而是速度
2.树莓派
脚位SDA--HT66F2390的PF2脚
脚位SCL--HT66F2390的PF3脚
本作品控制核心HT66F2390与树莓派沟通是使用I2C协定, I2C仅使用两只脚位,其中SDA是资料传输脚作用是用来传输资料的,SCL则是用来控制资料传送的脉波控制脚。
表1:实体配线脚位
HT66F2390
|
脚位
|
硬体名称
|
脚位
|
PC7
|
超音波感测器
|
Echo
|
PD0
|
超音波感测器
|
Trig
|
PB2
|
MG90S
|
橘线
|
PB3
|
MG995
|
橘线
|
PF2
|
Raspberry pi
|
SDA
|
PF3
|
Raspberry pi
|
SCL
|
HT66F2390主控核心电路
图4为HT66F2390主控核心的控制电路,本作品是以HT66F2390晶片内部的周期型TM来控制180度的伺服马达与360度的伺服马达。马达型号分别为MG90S与MG995如图5、图6所示。
其中180度的伺服马达有可以控制角度的特性,在本作品中是担任自走车的转向驱动马达,而360度伺服马达则有可以控制转速的特性。在作品中是用来控制自走车的前进、减速、停止的动作,而两颗伺服马达都均以PWM进行控制,控制的PWM周期、角度、转速如下:
1. MG90S伺服马达(180度)
PWM周期:20ms
高态讯号时间与对应角度:
0.5ms ----------- -90度
1.5ms ----------- 0度
2.5ms ----------- 90度
2. MG995伺服马达(360度)
PWM周期:20ms
高态讯号时间与对应正反转:
0.5ms ----------- 反转
1.5ms ----------- 停止
2.5ms ----------- 正转
正转与反转之高态讯号时间愈接近中间值(1.5ms)则转速会越慢,反之差距愈大则速度越快。
超音波控制方式
图7为超音波感测器,感测器上有4只脚位,分别为VCC、Trig、Echo、GND、VCC和GND为电源和接地脚,Trig则是外界要给>=10us高态讯号的输入脚位,Echo则是超音波感测器输出高态讯号的脚位。
控制方法是经由HT66F2390输出>=10us高态讯号给Trig脚,此时超音波感测器会自动发出8个40KHz的脉波,如图8第一个脉波图所示,等音波撞到障碍物回弹回超音波感测器时,Echo脚就会输出高态讯号,此高态输出的时间为发送音波到接收的时间。
最後,与障碍物距离就可以经由音速公式= 331.5 + 0.607 * t (t为摄氏温度)乘以Echo脚高态时间再除以2换算取得。
本超音波感测器Echo脚的高态讯号会使用HT66F2390外部中断的上下缘侦测模式进行侦测,但是中断只能侦测到开始与结束的状态却无法得知时间的长短,这时候就要使用TimeBase作计数的动作,最後会根据计数值换成时间乘以音速除2就能取得距离了。其中TimeBase会在外部中断侦测到上缘触发讯号时开始计数,如图8第二个脉波图所示,在高态的时间里TimeBase会持续做计数的动作,直到侦测到下缘触发,也就是讯号变为低态讯号为止才停止计数,此段时间累计就是超音波来回於与障碍物之间的时间差。
树莓派红绿灯影像侦测
图9是Raspberry pi3+的实体图,树莓派是一款基於Linux的单晶片电脑,由英国树莓派基金会开发,目的是以低价硬体及自由软体促进学校的基本电脑科学教育,本作品所使用的是Raspberry pi3+版本,Raspberry pi系统内部可以安装Python程式撰写软体,我们的影像处理程式是以Python程式进行撰写。
图10为以摄影机拍摄的红绿灯光晕图。在影像识别上,本系统是先侦测是否有红绿灯的存在,再判断红绿灯旁边光晕的颜色,以此来判断号志灯的目前状态是红灯还是绿灯。
树莓派道路影像侦测
图11为道路区块去除部分表示图,红框部份表示是可以去除的部分,之所以红框部分可以去除是因为摄影镜头会照到自走车前面的画面。而画面里同时包含道路与天空部分,但天空不会有道路,所以这部分的影像就是可以去除的部分,去除完後的影像资料就会变小,就可以有效的提升程式执行速度。
主控核心晶片与树莓派沟通技术
I2C为飞利浦公司在1980年代为了让主机板、嵌入式系统或手机用以连接低速周边装置而发展的通讯功能,I2C协定非常简单,只需有一条串列资料线(SDA)和一条串列时钟线(SCL)。其中SDA是用来发送资料,SCL则是用来控制资料传送速度的脉波信号,本作品控制核心晶片HT66F2390A与树莓派的沟通方式就是使用I2C协定完成信号传输,图12为I2C实体接线图。
差速器与转向机构
图13图14分别为差速器与转向机构,车子在转弯时左右边的车轮都会有不同的内轮差,如果没有解决内轮差的问题,那麽车子转弯时就会极为不顺畅,而差速器就是为了解决这个问题设计出来的机构。本作品的差速器是以3D列印制作完成。图14的转向机构则是用7个齿轮去带动轮胎转向,当作中间的马达转动时,左右两侧的轮圈就会跟着齿轮被带动转向。
超音波装置
图15为超音波感测器安装放置的地方,我们将超音波感测器放置在车头部分,让自走车能及时感测到前方的道路状况。
程式系统流程与影像识别
程式系统图
图16为程式系统流程,本程式流程分为影像处理系统及整合控制系统两大部分。系统开启电源时会各别启动树莓派与控制晶片HT66F2390并进行初始设定,设定完毕後就会进入各别的系统开始执行动作。
影像处理系统
图17为影像处理系统处理程序图,我们将经由摄像镜头取得的影像经过灰阶、二值化、滤波等影像处理後就能取得亮点及光晕颜色,再以此为判断便能判断出颜色。
图18为影像处理结果图,在图18中最上面为原始影像,原始影像经过阀值的处理,阀值以外去除颜色,阀值以内保留颜色。这样的做法能让我们能保留较明显的色彩,保留下来的影像如图18中间左图所示。图18中间右图则是原始影像经过灰阶及二值化处理保留的白色部分就是影像中较为明亮的地方,这个地方就有可能是太阳光、电灯、其他光影等,最後再把这两张处理结果经过交叉比对就能得到红绿灯的颜色判断。
图19为道路的处理结果图,图19最左上图为原始影像,右上角图为把不要的区块裁切掉的图,左下角图则是二值化後的图,右下角图则是结果图。我们将侦测到的边界绘制绿线以方便观察,根据结果便能得到道路边界的座标,最後,树莓派将所取得的红绿灯颜色及道路边界座标以I2C协定,传送给控制核心晶片HT66F2390,以作为控制自走车的判断依据。
实验结果
图20为本专题的整合控制系统流程图,控制系统控制着自走车的所有动作。其中自走车主控核心HT66F2390会根据从树莓派接收到的资料进行自走车控制的决策。
而树莓派接收到的资料有两笔,第1笔为号志讯息,第2笔为车道的边缘弧度。控制核心HT66F2390会先根据号志讯息判断有没有号志,如果有号志会再判断是红灯还是绿灯。如果是红灯就停止前进,如果是绿灯就使用超音波感测器侦测前方状况。前方若没有障碍物则前进,若有则依照安全距离来决定是要减速还是停止。在前进的过程中,自走车的转向机构会不断根据道路弧度来进行转向让自走车能照着车道中心行走。
图21是自走车测试防撞功能,主要是测试车子的行走能力并在前方设置障碍物测试自走车能不能自动减速及停止。最後得到的就如图21所示,自走车会慢慢减速直到停止的状态。而号志辨识的部分,系统是在自走车前行的前方设置红灯以测试系统能不能自动停止。
图22为侦测到红绿灯的状况,而图23及24则是自走车分别遇到红灯成功自动停止,与遇到绿灯前进的实际状况。自走车为提升驾驶者的安全性,车体会保持在道路正中央以避免偏移跑道之危险,图25为自走车行走的转弯路线,而图26则为自走车实体测试路线场地。