赛博智能车第二次内部赛
技 术 报 告
参赛队员: 沈会,孔祥彬,王卓健,黄世嘉,赵睿斌
一. 引言
根据本次内部赛规则的要求,该智能车的设计思路是:
针对三轮:
通过摄像头采集路径信息,通过搜线算法结合中线算法得出赛道中线数组,通过赛道中线数组计算出当前小车的偏离程度,经过pid算法计算出当前pwm输出值,通过电机驱动控制两个直流电机的转速,实现智能车快速寻迹的目的。针对赛道中的元素,对原始图像进行采集,结合搜线算法得出的拐点及其他信息识别元素。最后利用超声波测距模块及串口通信,实现三轮与四轮之间的协同。
针对四轮:在三轮的基础上增加对舵机角度的控制。
技术报告共分为五个部分:第一部分为引言;第二部分是智能车系统设计,介绍智能车总体设计和硬件设计;第三章是控制算法设计,详述智能车软件实现;第四章是总结。
二. 硬件设计
本系统硬件部分由电源模块、主控制器模块、直流驱动电机控制模块、超声波模块、通信模块组成,系统硬件结构如图所示。
1. 主控制器模块
本系统中,主控制器模块采用CH32V307VCT6单片机。CH32V×系列基于32位RISC-V设计的工业级通用微控制器,通过不同内核型号、外设及存储资源的搭配形成了多样化产品型号。CH32Vx全系列配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。CH32V208x搭载V4C内核,加入内存保护功能,同时降低硬件除法周期。CH32V303/305/307搭载V4F内核,加入单精度浮点指令集,扩充硬件堆栈区,具有更高的运算性能。产品资源上:主频可144MHz,独立了GPI0电压(与系统供电分离)。扩展串口U(S)ART数量到8组,电机定时器到4组,并支持1组32位的通用定时器。提供USB2.0高速接(480Mbps)并内置了PHY收发器,以太网MAC升级到干兆并集成了10M-PHY模块,支持蓝牙BLE5.1无线等。我们选择这款单片机主要是因为该单片机集成了两路可编程计数器阵列(PCA)模块,可用于脉宽调制(PWM)输出,来控制车轮的转速。
2. 电源模块
本系统中,为满足智能车各部分正常工作的需要,本系统采用2S航模电池,通过外围电路的整定,电源被分配给各个模块。
tps54531供电电路
电源模块分为两个部分,首先主电路板供电采用tps54531集成稳压块,该集成电路输出电压稳定,加之直流供电,不需要复杂的滤波系统。随后再由两路路互相独立的rt9013供电模块分别负责摄像头供电和其他3.3v网络的供电。另外舵机部分因其瞬时功率较大而另外再采用一路相同的tps54531进行供电。
3. 超声波模块
本系统的两车距离检测模块采用分体式超声波模块,分为发送端与接收端,发送端上有红外发射管与超声波发送探头,接收端上有红外接收管与超声波接收探头,发送端同时发送光信号与声波信号,由于光的速度极快,我们可以忽略光从发送端到接收端的时间,当接收端收到光信号之后开始计时,等到超声波接收探头收到信号时结束计时得到时间 t,两个模块之间的距离等于 t*340(m/s)。模块可以选择串口直接输出距离信息。
4.通信模块
本系统的车速检测模块采用HC-12无线模块,其具有低功耗特点,内部含有 MCU,用户无需对模块另外编程,模块支持4种串口透传模式,通过AT指令进行选择,各种透传模式只管收发串口数据即可,使用方便。模块上有 PCB 天线座ANT1,用户可以通过同轴线,使用433M频段外接天线。
以及电机驱动模块
本系统采用的电机驱动芯片为DRV8701。DRV8701是一款采用4个外部N通道MOSFET的单路H桥栅极驱动器,主要用于驱动12V至24V双向有刷直流电机。
该器件可通过PH/EN(DRV8701E)或PWM(DRV8701P)接口轻松连接控制器电路。内置的感测放大器能够实现可调节的电流控制。这款栅极驱动器内置有相应的电路,以便能够采用固定关断时间的PWM电流斩波来调节绕组电流。DRV8701采用9.5V VGs栅极驱动电压来驱动高侧和低侧FET。所有外部FET的栅极驱动电流均可通过IDRIVE引脚上的单个外部电阻进行配置。低功耗睡眠模式可将内部电路关断,从而实现极低的静态电流消耗。这种睡眠模式可通过将nSLEEP引脚置为低电平来设定。该器件内置以下保护功能:欠压锁定、电荷泵故障、过流关断、短路保护、前置驱动器故障以及过热保护故障情况通过 nFAULT引脚指示。主要思路是通过单片机输出占空比、频率、分辨率可调的PWM波来控制芯片对于驱动上MOS管的通断从而实现电机的调速、正反转控制。
三. 软件设计
1.图像处理
在图像处理方面,由于赛道表面过于光滑,反光现象严重,故我们采用偏振片削弱反射光。由于购买的偏振片尺寸与摄像头并不十分吻合,故利用solidworks对偏振片和摄像头之间的连接装置进行建模。针对摄像头所捕捉到的赛道,既要考虑到能捕捉到足够的元素,又要考虑防止摄像头倾角过小所导致的前瞻性过高所导致的对小车循迹稳定性的影响,故将摄像头调整致合适角度。针对元素处理方面:由于搜线算法的不够完善,使得部分元素的识别所需的特征未采集到,故采用原始二值化图像与搜线得到的特征相结合的方式对元素进行识别。
2. 运动控制
小车采用pid算法对小车进行控制,在过程控制中,PID控制器是一直应用最为广泛的一种控制器,也是众多控制算法中应用最为普遍的控制算法当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。
即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。
PID控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。将偏差的比例§、积分(I)和微分(D)通过线性组合构成控制量,对被控对象进行控制,故称PID控制器。
由于单片机控制是采样控制,只能根据采样时刻的偏差控制输出量,不能计算连续输出量,所以要采用离散化的PID算法。离散PID分为位置式和增量式两种。位置式的输出量直接就是控制量,由于全量输出,所以每次输出均与过去的状态有关,计算时要对过去偏差进行累加,计算机工作量大;而且因为计算机输出量对应的是执行机构的实际输出,如计算机出现故障,输出大幅度变化会引起执行机构位置的大幅度变化,这种情况往往是生产实践中不允许的,在某些场合,还可能造成严重的生产事故。因而产生了增量式PID控制的控制算法,所谓增量式PID是指数字控制器的输出只是控制量的增量。由于计算机输出增量,所以误动作时影响小算式中不需要累加。控制增量的确定仅与最近 k 次的采样值有关,所以较容易通过加权处理而获得比较好的控制效果。
3、协同控制
针对传接球装置,小车采用了强磁弱磁方案,球上粘贴弱磁,四轮粘贴强磁,控制两车的间距达到磁吸的效果,进而进行传球。
考虑到协同系统的稳定性,小车同时使用了超声波测距模块以及串口通信模块,对两车之间的协同进行处理。本组以三轮作为头车,四轮作为尾车。三轮上安装超声波接收器及发送串口,四轮安装超声波发送器及接收串口,三轮检测距离,通过串口发送信号,控制四轮发车。考虑到交接球之间三轮在赛道上对四轮图像采集产生的影响,本组利用白纸为四轮制作了简易车壳。
附录:部分程序源代码
int main(void)
{
Init_System();
WheelCtrl.Stop_flag=1;
while(1){
Pass_Ball();//协同算法
if(mt9v03x_finish_flag_dvp)
{
ImgPreprocess();
Cross();//十字判别
Findline();//巡线
ZEBRA_check();//斑马线搜索
if (wf_flag) {
Wangfan();//往返搜索
}
Mid_Found();//中线算法
if (Point_mid_num<NUM_MAX-1) {
TGraphOffset(&Mid_line,DirColInfo.MidRoadcontrol,PowerLinePot(Mid_line, DirColInfo.MidRoadpower),0,Point_mid_num-1,&err_mid);
}
Check_tri();//三角识别
Ctrl();//控制算法
mt9v03x_finish_flag_dvp = 0;
FPS_s++;
}
Switch_Scan();//编码开关扫描
}
}
四. 总结
设计制作过程中,通过小组成员的努力思考与实践,以及学长比赛的经验,我们有了基本思路,包括机械,电路。机械方面我们采用了传统的四轮布局。在电路方面,有 CH32 主控模块、电机驱动模块、电源模块、传感器模块。这四个模块分别设计,两位硬件成员各负责不同部分,和软件同学一起讨论比较芯片优异和构造合适电路,最终确定现在的电路。
在控制方面,我们使用Mounriver stidio,充分利用上位机等工具以提高效率。经过小组成员不断研讨、争论、改进,虽然还是没有能够完赛,但是对车的制作都有了更多的经验。
虽然我们因为分组等原因不能继续一起做车,但是这段经历也是实验室生活记忆珍贵的一部分,在准备将来的智能车比赛时,我们会继续成长,努力成为心目中的技术大佬,实现更多有趣的作品。