智能车竞赛技术报告 | 单车拉力组 - 哈尔滨工业大学 - 紫丁香

卓晴 2021-09-01 00:42:10 阅读数:463

技术 智能 竞赛 报告 单车

简 介: 本设计以第十六届全国智能车大赛为背景,采用大赛组委会统一指定的K型车模,以16位单片机STC16F为核心控制器,实现电单车的平衡并能通过指定赛道元素。以Keil为开发环境,利用陀螺仪获取车模所处角度,利用电感传感器获取赛道信息,使用PID算法进行控制,解决了十字、坡道、直角等特殊赛道元素,并沿赛道以合适的速度运行。该智能车系统具有一定的智能性和稳定性,可以为单车平衡的研究提供一些经验。

关键词 智能车电磁单车平衡

学 校:哈尔滨工业大学
队伍名称:紫丁香二队
参赛队员:蔡臻达
刘宗源
徐 程  
带队教师:张 依  
陶秩欧

 

第一章


1.1 全国大学生智能车大赛介绍

为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,受教育部高等教育司委托,由教育部高等学校自动化专业教学指导分委员会主办全国大学生智能汽车竞赛。

全国大学生智能汽车竞赛是以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一。该竞赛以"立足培养,重在参与,鼓励探索,追求卓越"为指导思想,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件。

全国大学生智能汽车竞赛由竞赛秘书处设计、规范标准硬软件技术平台,竞赛过程包括理论设计、实际制作、整车调试、现场比赛等环节,要求学生组成团队,协同工作,初步体会一个工程性的研究开发项目从设计到实现的全过程。该竞赛融科学性、趣味性和观赏性为一体,是以迅猛发展、前景广阔的汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械与汽车等多学科专业的创意性比赛。该竞赛规则透明,评价标准客观,坚持公开、公平、公正的原则,力求向健康、普及、持续的方向发展。

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

单车拉力组是第十六届大赛新出组别,使用了类似于摩托车的两轮K型车模,要求在不使用惯量轮的情况下实现车模的平衡。

车模微控制器指定使STC系列单片机。比赛没有赛道,只有电磁线。允许使用电感、红外光电、摄像头传感器、激光传感器等。

赛道使用电磁线进行导引,赛道元素包括直道、弯道、坡道、十字路口。

1.3 报告内容

在此报告中,我们介绍了小车的电路板设计、机械结构调整、传感器安放、
平衡控制算法和电磁循迹算法等内容,展现了我们在备赛过程中所做出的种种尝试和努力。

 

第二章 械结构设计及调整


智能车的核心是控制策略和算法,但是,机械结构也是限制赛车速度的巨大瓶颈,如果一辆赛车的程序架构很好,但是机械部分做的不好的话,其速度也会被大大的限制。今年的单车比赛属于第一届,与以往只求快速的旧规则不同,单车的比赛要求车模既能在快赛道上疾驰又能在慢赛道上稳定,这对车的机械结构更提出了极大的要求。

当车速较高的时候,车模转弯会有明显的倾斜现象而在坡道会出现剧烈的颠簸现象,此时对车的机械结构要求很高。同时车速较慢时,机械性能影响车的自身的平衡能力,这对运行的对称性和稳定性提出了更高要求,因此,我们在不违反规则的情况下对车模进行了多方面的改造以使车模具有良好的运行性能。

2.1 整车布局

我们组采用的是官方指定的新K车模,车模尺寸为256.5*119.26*62mm,轮胎直径67.5mm。这种车模的设计采用单个舵机的平衡方式,自身平衡能力较差,比较依赖车模对称性和质量分布,因此采用增加配重的方式来改善质量分布使其更加均匀。驱动电机为RS-380,工作电压5.4-9V,额定工作电压DC7.2V,空转转速可达15000r/min,空载电流0.55A,最大力矩可达91.32g.cm,最大输出功率12.6W。伺服电机为S3010舵机,6V电压时扭力可达6.5kg*cm,动作速度快,车模整体质量较轻。智能车的外形大致如图2.1

(1) 调整电池位置使电池中心位于车体中心
(2) 将电池取出原位置,放置于车体下方以降低中心
(3) 舵机改换s3010,扭力更大,控制更加方便
(4) 对前轮倾角进行调节,保证车在行驶中的稳定性。
(5) 采用牛角架和三碳杆固定电磁前瞻,减轻车的重量,增强车的稳定性。

▲ 图2.1 智能车实物

▲ 图2.1 智能车实物

2.2 电池安装

我们组采用的电池选用龙邱定制的锂电池,额定电压7.4V,电量可达3000mAh,放电能力强,能够轻松带动电机转动。同时这种电池具有重量小体积小的特点,对于K车模来说,可以有效地减轻车模重量。车模的原装电池方式是将电池放置于车模中心,这导致车模重心较高不利于车模的平衡,因此通过合理选择电池位置使电池置于车模底部,使得整个车重心得到降低最后更加稳定轻盈。侧视图如图2.2所示。

▲ 图2.2 电池安装示意图

▲ 图2.2 电池安装示意图

2.3 转向舵机选择和安装

K车模允许使用的电机有SD-12和S3010两种型号的舵机,原车模所用的舵机为SD-12舵机,这两种舵机各具特点:SD-12舵机具有体积小重量轻的特点,便于安装,但容易损坏且使用寿命较短;而S3010舵机则体积大重量相对较重,需要额外的固定装置,拆卸复杂但使用寿命长、扭力大,更利于车模控制。基于单车拉力赛的需要,以控制性能为考量,我们组采用S3010舵机,以追求更好的稳定性和对车模平衡的控制能力。

在舵机的安装中,车模对称性尤为重要,舵机安装时要保证左右对称,这样可以保证舵机左右转向时力臂相等且处于最大范围,提升舵机的响应速度。经理论分析,功率等于速度与扭矩的乘积,加大转向速度必然减少输出扭矩,扭矩过小会造成迟钝,所以安装时必须考虑到转向机构的响应速度与舵机扭矩之间的关系,获得最佳转向效果。经过实验,我们的舵机安装如图2.3所示。

▲ 图2.3 舵机安装示意图

▲ 图2.3 舵机安装示意图

2.4 前轮倾角调节

K车模作为单车车模,对前轮的倾角提供了多种选择。这些倾角的不同会对平衡带来不同的影响。转向总成对于单车的自稳定性至关重要。如果单车不能转向(例如,车把被卡住),则无法抵抗倾斜,因此会倾倒。对于这一点,转向轴倾角(即前轮倾角)可以控制轨迹量,对自行车的自稳定性起着重要的作用。转向轴倾角为图2.4中的st所示。

▲ 图2.4 转向轴倾角示意图

▲ 图2.4 转向轴倾角示意图

经过理论分析和实际的调试,我们发现转向轴倾角只能在合理的角度范围内才能使车模稳定。而车模在合理倾角时,倾角越小,越容易平衡但对速度有一定限制,倾角越大,越容易转向易于提速。本着追求更快的原则,我们将车模前轮倾角调到所能达到的最大值,具体倾角如图2.5所示。

▲ 图2.5 前轮倾角示意图

▲ 图2.5 前轮倾角示意图

2.5 电磁前瞻安装及位置

单车拉力组作为室外电磁组别,车模的电磁前瞻基本有两种安装方式:第一种是单杆装法,即使用一个碳杆固定在车模前端;第二种是双杆装法,即使用两个碳杆固定在车模后端。两种方式相比,第一种方案可以有效减轻车的重量,且固定杆短会使车模摇晃幅度减少,但是下坡时仍存在颠簸;第二种方案可以防止因牛角架而引起的卡舵机现象,在慢速时稳定性较好,但是过长的碳杆导致车模整体变重,转向困难,且坡道更加颠簸。因此,结合前两种方案,我们制定出来三杆固定的方式,在方案一的基础上再加如两个固定杆,使车模重量未有明显变化的同时,尽可能的减少杆上下摇晃的可能,使速度得到保证的同时,又增加了车的稳定性。

同时,因为单片机的处理能力和自身平衡算法的影响,车模的转向响应在快速时明显捉襟见肘,因此,我们采用加长前瞻的处理方式,使电磁信号能够更早被接收从而提高反应速度。具体安装及位置如下图2.6。

▲ 图2.6 电磁前瞻示意图

▲ 图2.6 电磁前瞻示意图

2.6 车模主要技术参数

智能车主要技术参数包括物理尺寸、电路指标等,具体参数见表 2.1。

▲ 图2.6.1 表21 智能车主要技术参数

▲ 图2.6.1 表21 智能车主要技术参数

 

第三章 件电路设计


硬件是基础,只有一个良好、稳定的硬件环境才能保证车能平稳快速的行驶。智能车电路部分主要由六个部分组成:单片机模块、电源模块、驱动模块、电磁模块、传感器模块和其余调试模块。我们在整个系统设计过程中严格按照规范进行。本着可靠、高效的原则,在满足各个要求的情况下,尽量使设计的电路简单,PCB的效果简洁出众。

3.1 单片机模块

单片机最小系统是智能车系统的核心控制部件。我们采用了STC16F芯片。原理图如图3.1所示:

▲ 图3.1 单片机系统原理图

▲ 图3.1 单片机系统原理图

3.2 电源模块

电源模块为系统其他各个模块提供所需要的电源。电源模块可以说是智能车的命脉,电源模块的可靠性决定了车模的其他部分能否正常发挥作用。电源的不稳定将导致单片机复位、传感器不能正常工作等严重问题,因此稳定优秀的电源模块对车模尤为重要。

3.2.1 电压需求

电源设计中主要考虑到需要的电压和电流,并通过LED灯显示电池电压,便于直观发现供电是否正常。我们需要的电源要求包括3.3V,5V,-3.3V,6V等。

3.2.2 供电实现

(1) 电池采用锂电池供电,额定电压7.4V,满电电压8.4V,可以直接给电机供电。
(2) 使用稳压芯片TPS 76850 输出电压5V,用于陀螺仪、串口下载等供电。原理图如图3.2.2.1所示

▲ 图3.2 DCDC电路 7.2V-5V原理图

▲ 图3.2 DCDC电路 7.2V-5V原理图

(3) 使用稳压芯片TPS 76833 输出电压3.3V,用于OLED、单片机、编码器、蓝牙模块运放板等供电。

▲ 图3.3 转换电压 5V-3.3V原理图 560、

▲ 图3.3 转换电压 5V-3.3V原理图

(4) 使用开关稳压芯片MIC29302输出6V电压给舵机供电,用电池直接供电容易烧毁舵机,29302具有防止电流反灌功能有效提高舵机使用寿命。

▲ 图3.4 转换电压 7.2V-6V原理图

▲ 图3.4 转换电压 7.2V-6V原理图

(5) 使用稳压芯片LM2663来获得-3.3V电压。运放工作需要正负3.3V供电。

▲ 图3.5 转压电路3.3V转-3.3V原理图

▲ 图3.5 转压电路3.3V转-3.3V原理图

3.3 驱动模块

驱动电路为智能车驱动电机提供控制和驱动,这部分电路的设计要求以能够通过大电流为主要指标。驱动电路的基本原理是 H 桥驱动原理。经过对各种驱动芯片详细对比,我们最后选用芯片为BTN7971。BTN7971是集成半桥电路,电路简单,只需要简单的几个外围电阻,缺点是输入电压要高于7V才能正常工作。但是由于是采用锂电池供电,供电电压始终高于7V,因此这一缺点也得以缓解。另外电路的简洁使最后的电路板面积更小可以有效的减少质量分布不均所带来的平衡问题。

▲ 图3.6 BTN驱动原理

▲ 图3.6 BTN驱动原理

3.4 电磁运放模块

电磁传感器输出的信号,即电感线圈两端的电压,比较小而且波动较大,需要进行调理。我们采用运算放大器放大采回的电压信号,然后经过二极管和电容的整流和滤波,得到较为平稳而且较大的电压值。经过对于多个运放芯片的比较,我们最后采用了OPA4171芯片。电路图如下:

▲ 电磁信号检波放大电路原理图

▲ 电磁信号检波放大电路原理图

3.5 传感器模块

3.5.1 电磁传感器

由于赛道的电磁线通过的电流为 100mA20KHZ 的信号,为了检测其信号我们采用10mH 的电感和 6.8nF 的电容并联谐振,来感应20KHZ的信号。选择好的电感电容非常重要,由此我们选择使用配谐度高的电感电容来采集信号。

3.5.2 编码器

采用增量式512线光电编码器,其供电电压为3.3V5V,输出为小幅值的正弦信号。为了将此信号放大整形,设计了信号调理电路,其基本原理是使用一个运放做成比较器电路,调节参考电压,使输出变为0V-3.3V的方波信号,送入单片机进行运算。### 3.5.3 陀螺仪

采用icm20602六轴加速度计,硬件SPI可达10波特率,精度高体积小。

 

第四章 论分析及控制算法实现


4.1 角度融合

经过我们的长期调试,发现通过陀螺仪采集到的原始数据经过转换后使用一阶互补滤波或者卡尔曼滤波能够得到较好的波形,是成功平衡的基础。此外,我们对加速度计的信任不能太高,太高了,会导致融合的角度容易产生波动,最终会导致舵机的控制不够丝滑。

4.2 路径识别

使用电磁传感器对赛道的电磁信息进行采集,在对采集到的数据进行处理后,对已处理的电感数据进行循迹处理。

4.2.1 数据处理

由于噪声的存在,采集到的电磁信号不可以直接使用,需要先进行取平均操作和归一化处理。将多次采集的电感值去除最大值和最小值后求取平均值,然后进行归一化处理。归一化是使用电感数值的最大值和最小值对采集到的电感值进行处理,使处理后的值处于0到100之间。对电感采集的值进行处理后可以消除部分噪声。

4.2.2 循迹处理

对电感数值进行处理后,需要使用电感数值获取小车偏离赛道的程度和方向。我们使用了4个电感对赛道电磁信息进行采集,使用通过差比和计算得到的数值标识小车偏离赛道的程度和方向。

4.3 PID控制算法介绍

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

4.4 舵机的PID控制算法

对于舵机的闭环控制,我们采用了位置式PID控制算法。
使用计算式如下:

angle_out = kp * (angle+expect_angle) + ki*integral + kd*gyro

根据网上的技术资料和实际测试,我们发现当车向一侧倾斜时控制舵机往相同的方向打一定角度的舵机能够使车保持平衡。但只使用PD控制算法,电单车会因为路面不平,机械零点不对称等一系列因素,小车将会跑着跑着往一边倾斜,然后开始向车身倾斜的那一边转圈,最后越转越小直到倒下。此时我们就需要引入积分量了,积分参数乘以积分的累加值等于积分输出。让舵机的控制变为位置式PID,这个积分输出有滞后的作用,但是电单车又必须要这么做。积分输出小了,在直线行驶的时候电单车,还是会先向一边倾斜,然后转圈直到倒下。积分输出大了,就会导致舵机响应严重的滞后。这里这个积分输出需要有一个合理的值,同时积分的累加值是需要限幅的。

经过不断调试,最终我们选择了一组PID参数,得到了较为理想的平衡控制效果和转向反应速度。

4.5 驱动电机的PI控制算法

经过反复调试,我们发现当单车Ki和Kp差不多相等时速度较为稳定且反应较快。
使用计算式如下:

Pwm +=kp * (Last_bias - Bias) + ki * Bias

 

第五章 发工具及交互工具的选用


在车模开发和调试过程中,开发工具和交互工具发挥了很重要的作用。从电路板的设计到控制程序的编写,各种电脑上的开发工具提供了很大的帮助。在调车时,交互工具简化了调节参数的过程并使参数可以得到直接的显示,极大地减轻了调车的负担。

5.1 开发工具的使用

我们选用了STC16F作为车模的控制器,并使用Keil编写代码,作为软件开发环境,使用Altium Designer绘制电路板,作为硬件开发环境。

5.2 人机交互工具的使用

在调试过程中,人机交互是重要的部分,人机交互功能实现的好坏会极大地影响调车的效率。我们通过屏幕实现机器向人传递信息,通过按键和拨码实现人向机器传递信息。

屏幕我们选择OLED液晶,该屏幕尺寸小,分辨率高,使用效果图5.1所示。按键采用五项按键,可以实现上下左右及确定操作,操作方便且占空间较小。使用4个拨码开关用于切换小车的不同模式。

▲ 图5.1 OLED屏显示界面

▲ 图5.1 OLED屏显示界面

5.3 两机交互工具的使用

调试时两机之间的交互也是十分重要的。出现问题时能否及时发现原因很 大程度上取决于两机交互功能实现的好坏。我们采用蓝牙模块实现电脑和小车之间的信息交互。虽然蓝牙的传输距离和传输速度有限,但足以满足调试要求且蓝牙实现起来较为简单。

 

第六章


6.1 车模总结

6.1.1 控制方面

使用PID对车模倾角进行控制,实现了车模的平衡;使用PD对车模转向进行控制,实现了车模有效循迹;使用PI对车模速度进行控制,实现了车模速度的稳定控制。

6.1.2 结构方面

通过增加配重、改变电路板位置和改变传感器安装位置等措施,尽量地做到了车模重量分布合理均匀;尝试多种车模前轮倾角,最终确定出最有利于提速的前轮倾角;自行设计和焊接电路板,实现转压、采集和控制等功能。

6.1.3 不足之处

更改车模结构时,忽略了车模结构对慢速的影响,使车模慢速没有达到很慢,慢速成绩有待提升。

6.2 工作总结

在备赛的将近一年时间里,我们学到了很多知识,克服了很多挫折困难,锻炼了自己。

从最初的电路设计到电机舵机的控制,从电机舵机的控制到基本循迹,从基本循迹到处理各种元素,从处理各种元素到提升车模的速度和稳定性,以及最后从快速调节切换至慢速调节,每一次取得的进步都是我们用努力换来的。在备赛的过程中,我们在学长的帮助下,广泛地阅读文献,不断地尝试各种算法和车模结构,积极地与其他队伍交流,我们在备赛过程中不断地学习新的知识,不断地提升车模性能,最终取得了不错的成绩。

在备赛过程中我们,我们面临很多的困难和挫折:和其他队伍竞争、调车陷入瓶颈、遇到难以解决的问题、因为疫情比赛时间一改再改、国赛规则突然发生改变…但每一次我们都坚持了下来,三个人团结一致,一起克服困难。

感谢智能车竞赛,通过智能车竞赛我们都有了进步,得到了锻炼。

 


借此次写报告的机会向帮助过我们的人和团体表示感谢。

感谢指导我们的学长,帮助我们的指导老师,为我们提供便利的学校以及组委会的老师。

感谢日夜相伴的队员,感谢一同备赛相互帮助的其他队伍。

最后,向没有机会出现在队员名单中的幕后英雄致敬。

 

考文献


[1] 卓晴,黄开胜,邵贝贝.学做智能车 [M].北京:北京航空航天大学出版社.2007.
[2] 王淑娟,蔡惟铮,齐明.模拟电子技术基础 [M].北京:高等教育出版社.2009
[3] 张军.AVR单片机应用系统开发典型实例 [M].北京:中国电力出版社,2005.
[4] 张文春.汽车理论 [M].北京.机械工业出版社.2005.
[5] 殷剑宏,吴开亚.图论及其算法 [M] .中国科学技术大学出版社,2003.
[6] 夏克俭.数据结构及算法 [M] .北京:国防工业出版社, 2001.
[7] 邵贝贝.单片机嵌入式应用的在线开发方法 [M].北京.清华大学出版社.2004.
[8] 蔡述庭."飞思卡尔"杯智能汽车竞赛设计与实践 [M].北京:北京航空航天大学出版社. 2012.
[9] 自平衡自行车的运动仿真[J]. COMSOL 博客, 2015.

附录 主要程序:

///////////////////////////////////////////////////////////////////////////////////
//定时器中断,每10ms执行一次,timer:uint16类型,最高65535
////////////////////////////////////////////////////////////////////////////////////
void INT2_int (void) interrupt 10 // 陀螺仪FIFO定时中断,10ms,
{

int data Servo_PWM; // 舵机PID
///////转向控制///////////////////////////
Zhongzhi = get_diff();// 根据电感采集的归一化偏差数值计算中值的位置
Zhongzhi = 0.5 - Turn_Kp*Zhongzhi; // 计算期望的倾斜角度
if(Zhongzhi > 4.5) Zhongzhi = 4.5; // 左拐,限幅
if(Zhongzhi < -3.5) Zhongzhi = -3.5; // 右拐,限幅
Encoder = myabs(Read_Encoder(1)); // 编码器采值
//ICM_Read();
Angle_Balance = angle; // 角度更新
if(KEY_Read(KEY3) == 0) // 单击K3(走起,启停键)读取
{

Flag_Stop =! Flag_Stop; // 单击走起,再击停车
}
else if(KEY_Read_Comb() == KEY02DOWN) // 组合键读取
{

Zhongzhi = Angle_Balance; // 同时按下K0 K2键标定初始值
} // 按键控制,控制发车等
//Velocity = 60 - myabs(left - right) * 0.1; // 变速控制
//Velocity = 45 + myabs((int)Angle_Balance) * 1.5; // 变速控制
Servo_PWM = SBB_Get_BalancePID(Angle_Balance, gyro[1]); // PID计算单车平衡的PWM数值
if( Servo_PWM < - Servo_Delta) Servo_PWM = - Servo_Delta;// 舵机角度
限制
else if(Servo_PWM > Servo_Delta) Servo_PWM = Servo_Delta;// 舵机角度限制
PWMServo = Servo_Center + Servo_PWM; // 转换为舵机控制PWM
PWMMotor = SBB_Get_MotorPI(Encoder, Velocity) / 15; // 电机增量式PI控制
//if(left == 99 && right == 99) Flag_Stop = 1; // 冲出赛道停车
if(Angle_Balance > 35 || Angle_Balance < -45) Flag_Stop = 1;// 摔倒停车判断
if(Flag_Stop == 1) // 停车
{

PWMMotor = 0; // 电机关闭
PWMServo = Servo_Center; // 舵机回中
Integration = 0; // 积分参数归零
}
MotorCtrl(PWMMotor); // 电机PWM
ServoCtrl(PWMServo); // 舵机控制PWM,舵机范围:【约1500±300】
Flag_getTurn++; // 转向标志
Flag_Show++; // OLED信息显示标志
}


● 相关图表链接:

版权声明:本文为[卓晴]所创,转载请带上原文链接,感谢。 https://blog.csdn.net/zhuoqingjoking97298/article/details/120028041