文章编号:
2095-6835(2023)11-0050-04基于CCD 传感器的智能车路径识别研究
米汤,尚友良,符晓玲
(昌吉学院,新疆昌吉回族自治州831100)
摘要:为了实现无人控制智能车在不同道路上自主循迹行驶的目的,设计了一种基于CCD 传感器的智能车控制系统。该控制系统以32位单片机STM32F103RCT6为控制核心,通过CCD 传感器采集路径图像信息,并通过核心控制器对图像进行二值化处理,以及采用动态阈值提取的方式选取阈值。利用PID 控制算法实现电机的运转和舵机的转向。通过实物验证,该控制系统成功实现了在不同道路环境下按照黑引导线快速准确地行驶,行驶过程中智能车表现出较好的实时性和鲁棒性。
关键词:CCD 传感器;路径识别;图像处理;PID 控制中图分类号:TP391.4
文献标志码:A
DOI :10.15913/jki.kjycx.2023.11.013
随着科学技术的发展和人类社会的进步,汽车行业进入了新的轨道,开始由传统制造向智能制造发展。在新的发展趋势下,如何使智能车准确高效地识别路径是首要问题,这也受到了诸多学者的关注和研究。目前路径识别的方法主要有光电传感器、视觉传感器和电磁传感器3种。
焦冰等[1]
设计了一种以MK60DN512ZVQ10为控制器核心,OV7725视觉传感器获取赛道二值化图像的智能车控制系统,并采用PID 控制算法控制舵机的转向和驱动电机的转速。冯玉如[2]、杜方鑫[3]设计了一种基于线性CCD 的智能车控制系统,采用线性CCD 采集路况信息,将采集到的路况信息发送给单片机,单片机根据阈值进行二值化处理,实现自动循迹的功能。王海燕[4]设计了一种基于电磁传感器的路径识别系统,该系统采用6组相同电磁电路横向“一”字布局,大大提高了检测密度和广度,该设计提升了数据采集的效率和准确度,使得智能车的循迹更加稳定。
1智能车硬件总方案
为了更好地实现智能车自主循迹,本文给出的设计方案硬件包括控制器核心模块、电源模块、摄像头驱动模块、电机驱动模块、舵机驱动模块和OLED 显示模块,整体硬件结构如图1所示。1.1
核心控制模块
选用32位的嵌入式微控制器STM32F103RCT6作为核心处理器,程序存储容量是256KB ,程序存储器类型是FLASH ,并配有必要的外围电路组成了智能车的核心控制系统。STM32F103RCT6嵌入式微处理器
作为处理核心,拥有高性能、低成本、低功耗、方便二次开发等特点[5]。
核心控制器如图2所示。
图1硬件结构
图2核心控制器
1.2电源模块
电源模块是智能车系统不可或缺的一部分,它是
整个系统的动力源泉,为智能模型车的微控制器、舵机、CCD 传感器、电机等模块提供所需的工作电压。
本次设计选用的是12V 18650锂电池,其标称容
—————————————————————————
*项目来源:新疆维吾尔自治区自然科学基金资助项目(编号:2022D01C462)OLED 显
示屏模块
核心控制模块STM32F103RCT6
CCD 巡线传感器
电源模块
电机驱动模块
舵机驱动模块
驱动指令
供电
转向指令
显示信息
电机使能开关
显示屏接口
CCD 巡线接口
电源输入STM32F103RCT6主控芯片
电源开关
复位按键路径信息
用户按键两路带编码器电机接口
USB 一键下载
电位器
量为2600mAh 。这种电池具有安全性能好、容量大、无记忆效应、寿命长等优点,具有短路保护和过充过放保护的能力,在工作中稳定性比较好。1.3
摄像头驱动模块
视觉传感器的数据采集与处理是整个智能车制作调试中至关重要的一环,视觉传感器采集赛道信息的正确与否直接决定智能车的循迹性能。该设计选用TSL1401线性CCD 作为智能车系统的视觉传感器,该线性传感器包含了128个线性排列的光电二极管。每个光电二极管都有各自的积分电路,积分电路由相关的电荷放大电路以及一个内部像素数据保持功能组成。内部像素数据保持功能可以为所有像素点提供同时积分的开始和停止时间。模块内部控制逻辑简单,只需要串行输入(SI )信号和时钟信号(CLK )。TSL1401线性CCD 传感器实物如图3
所示。
图3CCD 传感器
1.4电机驱动模块
本设计的驱动电机选用MG513型号的直流有刷
电机,其额定电压为12V ,额定功率约4W 。直流有刷电机是车辆的动力输出结构,将电能转化为机械能,驱动车辆前进,通常是电机本体与减速齿轮系的结合。编码器类型为高性价比AB 相霍尔编码器,车轮扭动一圈输出390个脉冲,自带上拉整形,STM32编码器接口模式可硬件计数。智能车系统选用AT8236直流有刷电机驱动器,它能够以高达6A 的峰值电流双向控制电机,利用电流衰减模式,可通过对输入信号进行脉宽调制来控制电机转速。1.5
舵机驱动模块
舵机是用于控制车辆前轮转向的装置。本设计选用数字型舵机S20F 控制智能车转向,此款舵机供电电压为5~6V ,可连续30min 堵转并保持力矩,使用全金属齿轮,频繁打舵不卡齿。舵机工作原理是控制电路接收信号源的控制脉冲,并驱动电机转动。齿轮组将电机的速度成大倍数缩小,并将电机的输出扭矩放大响应倍数后输出。电路板检测并根据电位器判断舵机转动角度,然后控制舵机转动到目标角度或
汽车检测线保持在目标角度。
2智能车软件设计
2.1
驱动电机控制
本次设计驱动电机选用PID 控制。所谓PID 控制,就是对系统偏差进行比例、积分以及微分的控制。PID 控制策略结构简单、稳定性好、可靠性高,并且易于实现。本设计选用的位置式PID 控制算法可以很好地提升系统性能。位置闭环控制就是根据编码器的脉冲信号累加测量电机的位置信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。
位置式PID 公式为:
t e
T t e T
e K u t
d d d 1
d 0i p +⎪⎪⎭
⎫  ⎝
⎛+=⎰(1)
式(1)中:K p 为比例项系数;T i 为积分时间常数;T d
为微分时间常数。
将K p 乘上各项,展开就得到了常用的位置式PID 公式:
⎰++=t
t
e
K r e K e K u 0
d
i p d d d (2)
式(2)中:K i 为积分项系数;K d 为微分项系数。
上面给出的位置PID 公式为连续控制的,但在实
际控制智能车的过程中是无法做到连续控制的,需要使用离散化的PID 公式,为:
u (k )=K p e (k )+K i ∑e (k )+K d [e (k )-e (k -1)](3)式(3)中:u (k )为输出;e (k )为本次偏差;∑e (k )为e (k )偏差的累积和,其中k 为1,2,…,k ;e (k -1)为上一次的偏差。
电机控制框图如图4所示。程序代码如图5所示。
图4电机控制框图
2.2转向舵机控制
舵机的控制需要一个周期为20ms 的时基脉冲,
脉冲宽度为0.5~2.5ms ,和舵盘位置0°~180°相对应,呈线性变化。舵机输出的角度随着脉冲信号的宽度而发生改变,即给它一定宽度的脉冲信号,它的输出轴就会维持在一个与脉冲宽度相对应的角度上。舵机通过调节信号占空比来改变舵机转动的角度。舵机转向
目标位置
+
比例
积分微分
输出电机驱动
电机
测量位置
控制框图如图6所示。2.3
路径识别与图像处理
路径检测与识别是智能车自主循迹的基础,本设计选用CCD 传感器识别赛道路径,智能车通过摄像头
获取路径图像,通过二值化提取出道路的黑线信息,
然后由微控制器传输控制信息决策,控制舵机的转角和电机的转速[6]。
总体设计如图7所示。
float CCD_PID(float Current_Value,float Target_Value ){
static float Bias,OutPut,Integral_bias,Last_Bias;Bias=Target_Value-Current_Value;//计算偏差Integral_bias+=Bias;//求出偏差的积分if(Integral_bias>5000)Integral_bias=5000;
else if(Integral_bias<-5000)Integral_bias=-5000;if(Car_Num ==Akm_Car)
OutPut=(CCD_KP_Akm/100)*Bias+(CCD_KI_Akm/100)*Integral_bias+(CCD_KD_Akm/100)*(Bias-Last_Bias);//位置式PID 控制器
else if(Car_Num ==Diff_Car)
OutPut=CCD_KP_Diff*Bias+CCD_KI_Diff*Integral_bias+CCD_KD_Diff*(Bias-Last_Bias);else if(Car_Num ==Small_Tank_Car)
OutPut=CCD_KP_STank*Bias+CCD_KI_STank*Integral_bias+CCD_KD_STank*(Bias-Last_Bias);else
OutPut=CCD_KP_BTank*Bias+CCD_KI_BTank*Integral_bias+CCD_KD_BTank*(Bias-Last_Bias);Last_Bias=Bias;//保存上一次偏差if(MotorA.Motor_Pwm ==0&&MotorB.Motor_Pwm ==0)//电机关闭,此时积分清零Integral_bias =0;return OutPut;}
图5电机控制程序代码
图6
舵机转向控制框图
图7循迹设计图
2.3.1阈值提取
CCD 摄像头全部的感光点都经过一个电荷-电压
转换器,因此可以保证几万个感光点的一致性,这就进一步提高了图像的稳定性[7]。TSL1401线性CCD
传感芯片只能返回一维数据,在较短的时间内可以完成信息数据的采集[8]。线性CCD 采集的信号由于是被反射回来的光线,因此结果容易受外界环境变化的影响,这就意味着设计一种抗干扰能力强、识别精度高的智能车识别系统尤为重要。
由于线性CCD 传感器一个曝光周期只能采集视野范围内一条线的信息,即128个像素信息。通过AD 采样获取像素点的电压数值。通过采样函数将一个曝光周期内采集到的128个像素点的电压值寄存到数组AVD1[i]中,用于计算与数据处理。在128个像素点的信息中,光线越强的像素点电压值越高,越弱的像素点电压越低。由此可以区分白底赛道和黑引
导线,通过算法计算赛道中间值,让小车近似循中线行进。
实际黑白赛道中白部分的像素点电压值要大于黑部分,因此想要检测黑线在赛道中的实际位置,通过设置阈值,将黑线和白底区分开。将CCD 传感器每次采集回来的128个像素点灰度值,通过动态循环比较的方式,出整个数组中最大和最小的灰度值,
取两者之和的平均值作为黑白线间的阈值。
由于CCD 传感器镜头容易受到光照环境的影响,智能车在赛道上行驶时,对应每个位置光的折射强度不一样,因此每次采集回来的像素点灰度值都会发生变化,通过动态循环所得的阈值是一个动态值,能够在不同的光照环境或者不同曝光时间长度下更好地区分黑线和白底的像素点灰度值。2.3.2
二值化处理
赛道中黑线的位置主要是通过检测像素点灰度值的跳变来确定。其原理为:将采集到的像素点灰度值数组与阈值通过动态循环比较,当像素点灰度值大于
或等于阈值,判定该像素点对应为白底部分;反之,则判定为赛道的黑引导线。这就是二值化的基本原理与方法。通过动态循环依次左右循环比较,得到白底部分跳变为黑线和黑线部分跳变为白底部分时对应的像素点数组序列号,即可确定黑线在赛道中的位置,通过算出序列号的平均值计算出赛道黑线的中线值。调整Z轴角速度(PID控制),让黑引导线时刻保持在车体的中间,以此实现智能车的自主巡线与转向。通过Keil软件进行编程,实现线性CCD取中值。程序代码如图8所示。
void Find_CCD_Median(void)
{static u8i,j,Left,Right,Last_CCD_Median;
static u16value1_max,value1_min;value1_max=CCD_ADV[0];//动态
阈值算法,读取最大和最小值
for(i=15;i<123;i++)
{if(value1_max<=CCD_ADV[i])
value1_max=CCD_ADV[i];
}value1_min=CCD_ADV[0];//最小值
for(i=15;i<123;i++)if(value1_min>=CCD_ADV[i])
value1_min=CCD_ADV[i];
CCD_Threshold=(value1_max+value1_min)/2;//计算出本次中线提取
的阈值
for(i=15;i<118;i++)
{if(CCD_ADV[i]>CCD_Threshold&&CCD_ADV[i+1]>CCD_Threshold
&&CCD_ADV[i+2]>CCD_Threshold&&CCD_ADV[i+3]<CCD_Thresho
ld&&CCD_ADV[i+4]<CCD_Threshold&&CCD_ADV[i+5]<CCD_Thres hold)
{
Left=i;
break;
}
}
}
图8线性CCD取中值程序代码
3测试验证
为了更好地验证本设计的普适性和合理性,本次实验分为3个环节进行测试,分别是直线、S弯和环形三种赛道。本次测试所用赛道是自制的中间铺有
2.0cm黑引导线的白底黑线赛道。实验结果如下。
3.1直线赛道
首先,测试了智能车在直线赛道的循迹情况,通过设定不同的速度观察循迹效果,可以看出智能车在循迹过程中没有偏离黑引导线,行驶平稳没有晃动。结果如图9所示。
3.2S弯道
其次,对智能车在弯道的循迹效果做了测试,控制智能车在驶入弯道时减速,驶出弯道时加速。由测试发现智能车转弯时不会驶出赛道中线且车速切换自然,结果如图10所示。
3.3环形赛道
最后,测试智能车在环形赛道的循迹效果,这一环节设定不同速度循迹行驶,观察不同速度智能车转弯时偏离中线的角度,由实验结果发现,当车速增大时智能车会驶出环形赛道。针对这种情况,可以通过调节PID参数改善。PID调参过程如表1所示,实验结果如图11
所示。
图9
直线测试
图10弯道测试
1PID
参数调节
速度/(mm·s-1)K p K i K d稳定性800﹣2.03﹣0.006﹣1.62差
800﹣1.36﹣0.010﹣2.32较差
800﹣1.36﹣0.006﹣1.62较好
1200﹣2.03﹣0.006﹣1.62差
1200﹣1.36﹣0.010﹣2.32较差
1200﹣1.36﹣0.006﹣1.62较好
图11环形赛道测试
由以上测试结果可以看出,本次设计可以使智能车在不同赛道上自主循迹行驶,且行驶稳定,控制偏差小。由此印证了本次设计的合理性和可行性,由实验结果也可以得出,该控制系统具有很好的稳定性和鲁棒性。
4结束语
基于线性CCD设计了智能车路径识别控制系统,采用STM32F103作为核心控制器,TSL1401线性CCD
(下转第56页)
图2
深圳快递
图3
上海快递
图4北京快递
4结论
通过此次研究与分析,证明了利用机器视觉技术
识别二维码实现快递分拣是切实可行的,采用工业相机实时获取快递二维码图像,再对图像进行识别处理、提取信息,并将获得的信息传递给机器人,从而对快递进行分类。机器视觉技术具有识别速度快、准确率高、抗干扰性强的优点,且此方案设计结构简单、便于组装,极大地提高了快递分拣效率,降低了人工成
本。可以预见,机器视觉技术在传统物流行业将发挥越来越大的作用。
参考文献:
[1]刘星余.面向物流仓储分拣机器人的多目标视觉识别与定位
方法研究[J ].粘接,2021,47(7):109-112.
[2]罗健,罗亚波.基于双目视觉的物流分拣测量系统[J ].组
合机床与自动化加工技术,2021(11):75-79.
[3]赵吉清.基于机器视觉的机器人分拣系统的设计与实现[J ]
.
电工技术,2020(6):24-25,28.
[4]高健,刘青川,范蕊,等.基于机器视觉的工业机器人智能
分拣系统设计研究[J ].南方农机,2021,52(3):18-19.[5]储琴.基于机器视觉的工业机器人分拣控制系统探究[J ].
电子制作,2021(4):41-43.
[6]韩志豪,刘晓英.基于Python 的机器视觉实验教学平台设
计[J ].计算机测量与控制,2020,28(3):250-254,259.
————————
作者简介:舒慧(1989—),女,湖北武汉人,硕士,
研究方向为机器人视觉技术及应用。
(编辑:丁琳)
———————————————————————————————————————————————(上接第53页)
采集赛道路径信息,并采用动态阈值提取的方式选取阈值,然后对图像做二值化处理,由微控制器根据反馈回的图像信息控制智能车自主巡线。实验表明,本设计基于CCD 传感器的智能车控制系统可以使智能车在不同赛道自主循迹行驶,且状态稳定,由此验证了本次设计的可行性和稳定性。进而本设计拥有良好的鲁棒性和实时性,具有很强的实用性。
参考文献:
[1]焦冰,李琳,邱会然.基于视觉路径识别的智能车控制系统
设计[J ].机床与液压,2021,49(12):78-81.[2]冯玉如.基于CCD 传感器的路径识别方法研究与应用[J ]
.数字技术与应用,2018,36(8):87-88,90.
[3]杜方鑫.线性CCD 循迹智能车控制系统的设计[J ].电子技
术与软件工程,2018,131(9):238.
[4]王海燕.一种电感传感器在智能小车路径识别中的应用方案
设计[J ].电子元器件与信息技术,2020,4(11):28-29.
[5]刘孝赵,王海圳,董宜孝.基于STM32F103RCT6的数据采
集设计[J ].无线互联科技,2022,19(14):62-64.[6]王玲玲,梁勇.基于摄像头的自主循迹智能车设计[J ].计
算机与数字工程,2017,45(11):2314-2316,2321.[7]黄锦阳,胡傲,秦浩杰,等.基于线性CCD 循迹智能车的
设计与实现[J ].现代计算机(专业版),2018,21(21):77-80.
[8]杨健贤,刘海刚,区逴凡,等.基于线性CCD 的路径识别
算法研究[J ].工业控制计算机,2015,28(7):63-65.
————————
作者简介:米汤(1991—),男,硕士研究生,助教,教师,研究方向为机器人控制。尚友良(1998—)
,男,本科。符晓玲(1977—),女,博士研究生,教授,自动化教研室主任,研究方向为无人驾驶。
(编辑:王霞)