zl程序教程

您现在的位置是:首页 >  其他

当前栏目

智能车竞赛技术报告 | 单车拉力组 - 沈阳航空航天大学 - 青梅绿茶队

技术智能 报告 竞赛 大学 单车 沈阳
2023-09-11 14:15:18 时间

简 介: 本设计以第十六届全国智能车大赛为背景,车模使用大赛单车拉力组指定的 K型车模,以宏晶STC16F为主控,外加自行设计的母板、驱动板和前置运放模块,配备MPU6050陀螺仪、512线编码器、聚苯电容和工字电感等模块完成整套单车的制作,并实现电单车的维持平衡的同时完成指定赛道循迹任务。

使用 Keil 为开发环境,完成车模控制代码编写。主要利用陀螺仪获取车模当前相对角度和电感传感器采集到赛道信息,主要采用串级PID 算法进行控制,使车模保持平衡的同时按照一定速度完成电磁引导赛道循迹任务。该智能车系统具有一定的智能性和稳定性,可以为单车平衡的研究提供一些经验。

关键词 单车平衡循迹电磁

学 校:沈阳航空航天大学
组 别:单车拉力组   
队伍名称:青梅绿茶队   
参赛队员:马群 李俊杰 曹宁 
指导教师:张晓新 屈乐乐   
带队教师:张晓新     

 

第一章


1.1. 智能车大赛介绍

  为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,受教育部高等教育司委托,由教育部高等学校自动化专业教学指导委员会主办全国大学生智能汽车竞赛。 全国大学生智能汽车竞赛是一项以“立足培养、重在参与、鼓励探索、追求卓越”为指导思想,面向全国大学生开展的具有探索性的工程实践活动。

  它以设计制作在特定赛道上能自主行驶且具有优越性能的智能模型汽车这类复杂工程问题为任务,鼓励大学生组成团队,综合运用多学科知识,提出、分析、设计、开发并研究智能汽车的机械结构、电子线路、运动控制和开发与调试工具等问题,激发大学生从事工程技术开发和科学研究探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神。在全国数百所高校的支持下,全国大学生智能汽车竞赛至今已成功举办了十五届,参赛学生总规模超过 35 万人次,学生收获和竞赛声誉保持高位。

  第十六届单车拉力组规则介绍

  单车拉力组是第十六届大赛新出组别,使用了类似于摩托车的两轮 K 型车模,要求在不使用惯量轮的情况下实现车模的平衡。
  车模微控制器指定使 STC 系列单片机。比赛没有赛道,只有电磁线。允许使用电感、红外光电、摄像头传感器、激光传感器等。
  赛道使用电磁线进行导引,赛道元素包括直道、弯道、坡道、十字路口。

1.2. 报告内容

  在这份报告中,本小组通过对小车设计制作整体思路、电路、算法、调试、车辆参数的介绍,详尽地阐述了我们的思想和创意,具体表现在结构的设计制作,以及算法方面的思维想法。这份报告凝聚着我们的心血和智慧,是我们共同努力后的成果。

  在准备比赛的过程中,我们小组成员涉猎控制、模式识别、传感技术、汽车电子、电气、计算机、机械等多个学科,这次磨练对我们的知识融合和实践动手能力的培养有极大的推动作用,在此要感谢清华大学,感谢他们将这项很有意义的科技竞赛引入中国;也感谢像卓大大这样为了比赛不停奔波忙碌的老师们。我们的成果离不开学校的大力支持及指导老师悉心的教导;还要感谢的是和我们一起协作的队员们,协助,互促,共勉使我们能够走到今天。

 

第二章 案设计


  本章主要简要地介绍智能车系统总体设计思路,在后面的章节中将整个系统分为机械结构、控制模块、控制算法等三部分对智能车控制系统进行深入的介绍分析。

2.1.系统总体方案的选定

  根据竞赛规则相关规定,单车系统采用K车模,以STC16F40K128作为核心控制器,在Keil开发环境中进行软件开发。单车利用陀螺仪获取当前赛车的姿态信息,通过倾斜角和舵机转向的闭环PID控制,来维持运行状态下小车的平衡。赛道引导电磁信号由车体前方的电磁传感器采集,经内部AD进行模数转换均值滤波后,用于赛车的转向控制决策。通过编码器测速模块来检测车速;电机转速控制采用 PI控制,进而完成智能车速度的闭环控制。此外,还增加了按键和OLED屏幕作为人机交互设备。

2.2.系统总体方案的设计

  根据以上系统方案设计,赛车共包括六大模块:STC16主控模块、平衡控制模块、电感传感器模块、电源模块、速度控制模块和辅助调试模块。各模块的作用如下:
  1. STC16主控模块:将采集电感传感器、编码器等传感器的信号,根据控制算法做出控制决策,驱动舵机、电机完成对智能车的控制。
  2. 平衡控制模块:感知赛车的姿势、状态,维持平衡。
  3. 电感传感器模块:可以通过一定的前瞻性,提前感知前方的赛道信息,为智能车的“大脑”做出决策提供必要的依据和充足的反应时间。
  4. 电源模块:为整个系统提供合适而又稳定的电源。
  5. 速度控制模块:检测反馈单车后轮的转速,并进行速度闭环控制。
  6. 辅助调试模块:主要用于智能车系统的功能调试、赛车状态监控等方面。

 

第三章 能车机械结构


  相较于其它组别,单车的机械结构有非常严苛的条件,是决定是否能成功跑完一圈的重中之重。为了保证单车可以尽可能远距离的直线行驶,重心最好尽可能在车子中心,不会左右倾斜,同时重心尽可能低,来提高稳定性。

3.1.前瞻电感调整

▲ 图3.1 智能车俯仰图

▲ 图3.1 智能车俯仰图

  本车使用五路电感完成赛道电磁信号采集。摆放方式为:横、竖、横、竖、横。在这种摆放方式尽量保证前瞻横向距离长一些,这样摆放后在后续实验中单车丢线现象明显减少同时在合适的PID巡线控制下回线更准确更快速。但前瞻横向距离不宜过长,这样会导致单车稳定性减弱。

  传感器支架必须结实耐撞,震动尽量小。震动会导致传感器得到感应电动势“抖动”,导致车模会在赛道上“颤抖”,同时重量轻,减少重心前移。

  考虑到单车在运行时的稳定性,前瞻在设计时应尽量轻便,使得单车重心整体后移,在相同的控制方法下,单车抗干扰性更强,尤其在坡路段行驶,稳定性提高显著。在多次实验后,因运放设计限制,使用3D打印出轻质支杆来支撑前瞻,同时将前瞻PCB板整体后移,使用短线将PCB焊盘连接到放置在前方的5路电感。这样设计后单车稳定性与灵活性都有提高。

3.2.前轮前探调整

▲ 图3.2 单车模型图

▲ 图3.2 单车模型图

  在固定前轮时,需要从车架中心的5个螺丝孔中选择间隔一个孔的两个孔,孔位的选择决定了前轮前探的程度,选择的孔位越靠下,前轮离车身越远,重心越低,最小转动半径越大。

  本组开始时使用的时最靠下的3、5孔位,在调试时,由于转动半径太大,使单车在转弯时不是超调就是转弯不足,同时在直线循迹时还可能出现左右摆动的情况,使单车摆动几次后失去平衡跌倒,增加了调试难度。后更改为2、4孔,改善了这一现象。

3.3.电机

  驱动电机为 RS-380,工作电压 5.4-9V,额定工作电压 DC7.2V,空转转速可达 15000r/min,空载电流 0.55A,最大力矩可达 91.32g.cm,最大输出功率 12.6W。伺服电机为 S3010 舵机,6V 电压时扭力可6.5kg*cm,动作速度快。

3.4.舵机

  本车使用的是 S3010 型号舵机,原车模配备的舵机虽然具有体积小重量轻便于安装的优点,但容易损坏且使用寿命较短;而 S3010 舵机虽然体积和重量偏大,但是使用寿命长、扭力大,反应快,更利于车模控制。基于单车长时间运行和拆卸的不便性,我们采用 S3010 舵机,以追求更长的舵机使用寿命和对车模平衡的快速控制能力。在舵机的安装中,需要使舵机安装时要保证左右对称,保证舵机左右转向时力臂相等。

3.5.其他关于提高稳定性的调整

▲ 图3.3 车身俯视图

▲ 图3.3 车身俯视图

  • 电池方面:本组将电池固定在车中间的架子里,使其不会轻易晃动,保证重心不会轻易改变。
  • 编码器方面:一开始选择了放在单车偏下方的位置,结果发现单车倒地时可能会摩擦编码器,遂换成偏上方位置。
  • 车轮方面:由于材质和设计问题,后轮轮胎极易磨损(前后轮轮胎相同,由于后轮为驱动轮,更易磨损),需要不时更换。

 

第四章 件设计及实现


  硬件是基础,只有一个良好、稳定的硬件环境才能保证车能平稳快速的行驶。我们在整个系统设计过程中严格按照规范进行。本着可靠、高效的原则,在满足各个要求的情况下,尽量使设计的电路简单,PCB的效果简洁。

4.1.主控板

4.1.1.主控芯片

▲ 图4.1 STC16F40K128原理图

▲ 图4.1 STC16F40K128原理图

4.1.2.电源模块设计

  电源模块为系统其他各个模块提供所需要的电源。设计中,除了需要考虑电压范围和电流容量等基本参数之外,还要在电源转换效率、降低噪声、防止干扰和电路简单等方面进行优化。可靠的电源方案是整个硬件电路稳定可靠运行的基础。

  1、电池采用带保护板锂电池供电,额定电压 7.4V,满电电压 8.2V,可以直接给电机供电。

  2、使用稳压芯片 MIC39100输出电压 3V,用于陀螺仪、OLED、单片机、编码器等供电。

▲ 图4.2 稳压芯片 MIC39100原理图

▲ 图4.2 稳压芯片 MIC39100原理图

  3、使用开关稳压芯片 AS1015 输出5.5V 电压给舵机供电,输入为3.6V-23V,输出可达5A电流,满足舵机需求。

▲ 图4.3 开关稳压芯片 AS1015原理图

▲ 图4.3 开关稳压芯片 AS1015原理图

4.2.电机驱动板

  驱动电路的基本原理是 H 桥驱动原理。选用DRV8701为驱动芯片,第一是单车可利用面积较小,而DRV8701无需外部升压,这就可以省出升压电路的空间缩小整个电路所用的体积,二是在提升或者保证性能的同时简化电路设计。

▲ 图4.4  电机驱动板原理图

▲ 图4.4 电机驱动板原理图

4.3五路运放板

  运放模块采用LMV358,此模块将电磁传感器由510mH电感和6.8nF电容构成谐振,采集到的信号在离赛道高2cm以上可检测到正常信号,并且传输给板载LMV358二级放大整流后通过输出信号接口,接到单片机ADC接口。

▲ 图4.5 运放原理图

▲ 图4.5 运放原理图

4.4 编码器

  采用龙邱512线增量式编码器。

4.5 陀螺仪

  采用 MPU6050 六轴加速度计,软件IIC可达 1K采样率,5ms采集一组数据,精度高体积小。严格将MPU6050芯片摆放到单车的中轴线上。

▲ 图4.6 陀螺仪实物图

▲ 图4.6 陀螺仪实物图

 

第五章 件系统设计及实现


  控制程序是人的思想在车模体现,程序要体系化,模块化,稳定化,目标是将硬件电路和机械性能发挥到最大,让车模用最快(最慢)的速度完成比赛。

5.1.平衡控制系统

  单车最基础、最重要的就是平衡问题,单车只有可以一直稳定的运行,不会突然倒下,抗干扰性强,才可以进行下一步的循迹调试。

5.1.1.平衡原理

  单车可以看成一个倒立摆(左右方向不稳定),这个倒立摆受重力作用是一个不稳定系统,需要额外的回复力维持平衡,而提供回复力的正是单车转向时的”离心力”。离心力是速度和把手转向角(α)的函数,在一个固定的速度下,可以认为控制把手转向角度就是控制回复力。如果回复力不够大,就无法矫正,或者矫正速度很慢,这会导致系统不稳定;如果回复力过大,就会导致矫正过度,这也会导致系统不稳定; 我们最希望的状态就是回复力刚好,使倒立摆快速回到平衡位置,又不至于矫正过度。
  维持自行车平衡,需要获取左右方向倾角θ,以合适的算法控制转角α达成。

5.1.2.电机PI控制

  根据物理知识,速度的变化会导致离心力的变化,增加调节平衡的难度,因此本组采用了恒定速度的方式,保持速度不变,改变舵机转向角度来保持平衡。

  对于速度控制,我们采用了增量式PI控制算法,保证电机转动过程中可以明显感觉到转动速度均匀,而非周期性得一快一慢。

5.1.3.获取方向倾角

  本组决定通过MPU6050来获取左右方向倾角,我们可以通过MPU6050得到单车各个方向的加速度和角速度,然后需要进行一些复杂的计算才能得到正确的倾斜角度,如一阶互补滤波,卡尔曼滤波等算法。本组一开始采用了卡尔曼滤波算法计算方向倾角,效果不理想,后更改方案使用龙邱科技提供的封装好的DMP算法,可以直接调用方向倾角,经过实验发现效果很好。

  陀螺仪FIFO每5ms产生一次中断,因此数据都是以5ms或者5ms的倍数的时间间隔进行处理。平衡每5ms控制一次。

5.1.4.平衡PID控制

  本组通过位置式PID控制算法来维持单车平衡。

  将方向倾角(横滚角)作为比例项,比例项的和作为积分项,左右方向的陀螺仪读数作为微分项。结果输出控制舵机的PWM占空比从而改变舵机的转角,最后实现平衡。

  横滚角与车身结构有着很深的联系,是保证平衡的关键因素,需要给横滚角加一个常数消除车身左右配重不平等因素来让单车直线行驶,积分系数I很重要,用于平衡长时间的积分量。将会直接影响小车的当前角度是否能达到目标角度,当目标倾角越大时,静态误差也越大,比如设定的目标倾角为5°时,I不够大的情况下,小摩托可能一直保持在8°左右行驶,那么就很容易倒地。

5.2.循迹控制系统

5.2.1.电磁差比和差加权算法

  电感差比和差算法对弯道道型有着良好的亲和度,同时也具有很高的稳定性;电感差比和差加权算法相较于电感差比和加权算法,水平电感差比和偏置算法更有优势。

  error=(AA*(float)(sqrt_lleft-sqrt_rright)+BB*(float)(sqrt_left-sqrt_right))10/ (AA(float)(sqrt_lleft+(1.5sqrt_middle)+sqrt_rright)+CCmyabs((float)(sqrt_left-sqrt_right)));

5.2.2.循迹PD控制

  经过差比和差加权算法之后,将结果输入PD系统,通过PD系统输出的值为变量Zhongzhi,将中值加入到平衡环的比例项,通过改变平衡状态使单车把手转角转向不同的角度,以达到既可以保持平衡,又可以循迹的功能。在调试过程中发现,仅通过比例系数P就可以实现直线循迹功能,但在转弯时,矫正速度过慢,致使极易冲出跑道,因此加入积分项增加稳定性。

5.3. 控制算法的参数整定

【通用原理部分,此处省略3000字...】

5.3.2.循迹控制算法的参数整定

▲ 前瞻传感器细节图

▲ 前瞻传感器细节图

  电磁循迹采用位置式 PD 控制。经多次试验得出,在不同速度下,选用Kp,Kd不同。考虑率到5路电感搭配问题,可以适当调整5路电感采集回来信号的权值大小。本车采用差比和差进行电感值处理,在多次实验中我们将2、4权值设成1、5权值1.5倍,使得转弯灵敏度提升,同时提高3电感的权值来提高靠线速度。再搭配合理PD参数,可以实现快速稳定循迹。

  由于单车不能自行起步,需要队员在起跑线内辅助起步,因此要设置合理的限幅,通过对其限幅能够达到稳定起步的效果。

5.3.3.速度控制算法的参数整定

  方向控制采用位置式PID控制。

增量式PID算法:

  • 比例P : e(k)-e(k-1)
  • 积分I : e(i)
  • 微分D: e(k) - 2e(k-1)+e(k-2)

5.3.4. 平衡控制算法的参数整定

  方向控制采用位置式PID控制。

位置式 PID 算法:

  • e(k): 用户设定的值(目标值)- 控制对象的当前的状态值
  • 比例P : e(k)
  • 积分I : ∑e(i)

  在低速条件下使用PID三个参数进行调节,可以保证单车稳定行驶,抗干扰性强,可以通过井盖之类的颠簸路面;在高速情况下将积分项系数Ki设为0,发现车能在直线高速行驶时仍能保持车身非常稳定,没有震荡,所以没有必要使用 Ki 参数。该控制方案调整为PD控制。

  设置合适的调节限幅,限幅太大会造成调节幅度过大,造成车模侧倒;太小则转角太小。对输出结果限幅,防止把手转角过大使单车瞬即失去平衡摔倒。

 

第六章 发工具、制作、安装、调试过程说明


6.1 开发工具

  程序的开发是在KEIL下进行的,包括源程序的编写、编译和链接,并最终生成可执行文件。程序的下载是在下stc-isp进行的。

6.2 人机交互工具

  在调试过程中需要不断地修改变量的值来达到整定参数的作用,对此我们选用了液晶屏配合按键的调试方法。实时显示电磁信号强度、电机转速、巡线偏差等变量。

  其中液晶屏我们选用OLED液晶,该液晶具尺寸小,高分辨率等特点。采用IIC协议OLED。界面如图6.1所示。我们使用液晶屏幕实时显示重要参数,如电池电压,AD采集读数,车把的转角等等,并使用按键改变参数,方案选择等。

▲ 图6.1 OLED效果演示图

▲ 图6.1 OLED效果演示图

  图6.1 OLED效果演示图

 

第七章 型车主要技术参数说明


 

第八章


  自报名参加“恩智浦”杯智能汽车竞赛以来,我们小组成员从查找资料、设计机构、组装车模、编写程序一步一步的进行,最后终于完成了最初目标,定下了现在这个设计方案。

  在此份技术报告中,我们主要介绍了准备比赛时的基本思路,包括机械、电路以及最重要的控制算法的创新思想。在机械结构方面,我们分析了前瞻电感的改进办法,对前轮前倾进行一系列的改动。在电路方面,我们以模块形式分类,在最小系统、主板、电机驱动、电池使用、电磁采集等模块分别设计,经过不断实验,最后决定了最终的电路图。在程序方面,我们使用C语言编程,利用开发工具调试程序,经过小组成员不断讨论、改进,终于设计出一套比较通用稳定的程序。在这套算法中,我们结合路况调整参数,保证在最短时间内跑完全程。

  在备战过程中,我们遇到了很多挫折,一次次的修改方案,艰难的蜕变。非常感谢沈航智能车创新俱乐部这个像家一样的地方,同时也感谢在场地和经费方面都得到了学校和学院的大力支持,更要特别感谢一直支持和关注智能车比赛的学校和学院领导以及各位指导老师,同时也感谢比赛组委会能组织这样一项有意义的比赛。

 

§参考文献


[1]卓晴,黄开胜,邵贝贝.学做智能车:挑战"飞思卡尔"杯[M].北京:北京航空航天大学出版社,2007.
[2]王盼宝主编.智能车制作[M].北京:清华大学出版社,2017.
[3]殷剑宏,吴开亚.图论及其算法[M].中国科学技术大学出版社,2003.
[4]谭浩强著.C程序设计[M].北京:清华大学出版社,2003.
[5]张文春.汽车理论[M].北京:机械工业出版社.2005.
[6] 夏克俭.数据结构及算法 [M] .北京:国防工业出版社, 2001.
[7] 邵贝贝.单片机嵌入式应用的在线开发方法 [M].北京.清华大学出版社.2004.
[8] 蔡述庭.“飞思卡尔”杯智能汽车竞赛设计与实践 [M].北京:北京航空航天大学出版社. 2012.

附录代码清单

主函数:

#ifdef Man1
void Demo_SBB_Car(void)
{		
	float data sqrt_lleft,sqrt_rright,sqrt_right,sqrt_left,l_eft,sqrt_middle;
	float data right,left,rright,lleft,middle;
	char txt[16];
	while(1)
	{		
			if(KEY_Read(KEY0) == 0)           
	{
		Zhongzhi+=0.3;
		if(Zhongzhi>2)
			Zhongzhi = -2;
	} 		
			left   = 	1 ;   				
			lleft  =  (ADC_Read_Average(8,5)-LL_min) * 100.0 / (LL_max-LL_min) ;   						
			right  = 	1 ;	    			
			rright =	(ADC_Read_Average(11,5)-RR_min) * 100.0 / (RR_max-RR_min) ;
			middle =  (ADC_Read_Average(13,5)-M_min) * 100.0 / (M_max-M_min)	;
			l_eft = left;
			if(l_eft>=48.0 && l_eft<100.0)
					l_eft=(l_eft-48.0)*0.3+85.0;		
			if(l_eft>12.0 && l_eft<48.0)
					l_eft*=1.8;
			left=l_eft;		
			sqrt_lleft = sqrt(lleft);
			sqrt_rright = sqrt(rright);
			sqrt_left = sqrt(left);
			sqrt_right = sqrt(right);
			sqrt_middle = sqrt(middle);
			error = AA * (sqrt_lleft-sqrt_rright) /  (sqrt_lleft + + sqrt_rright);
			Zhongzhi= bal_pid(error);			
		if(Zhongzhi>6.0 )
		Zhongzhi=6.0;
	if(Zhongzhi<-6)
		Zhongzhi=-6;
			if(Flag_Imu)					             
			{	
				Flag_Imu = 0;		 
			LQ_DMP_Read();//1.7ms               
			if(Flag_Show >50)
			{		
				Flag_Show = 0;			
				sprintf(txt,"LL:%4.0f RR:%4.0f", lleft, rright);
				OLED_P6x8Str(0,0,(u8*)txt);				
				sprintf(txt,"M:%4.0f", middle);
				OLED_P6x8Str(0,1,(u8*)txt);					
				sprintf(txt,"ZJ:%d", Zhijiao);
				OLED_P6x8Str(50,2,(u8*)txt);						
				sprintf(txt,"Z:%.1f",Zhongzhi);
				OLED_P6x8Str(0,4,(u8*)txt);
				sprintf(txt,"ERR:%5.1f", error);
				OLED_P6x8Str(40,5,(u8*)txt);
				sprintf(txt,"L:%4.0f R:%4.0f", left, right);
				OLED_P6x8Str(0,7,(u8*)txt);
			}				
		}		
	}
}
#endif


● 相关图表链接: