智能车竞赛技术报告 | 全向行进组 - 东北林业大学- 进取号E

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能车竞赛技术报告 | 全向行进组 - 东北林业大学- 进取号E相关的知识,希望对你有一定的参考价值。

参赛学校:东北林业大学
队伍名称:进取号E    
参赛队员:郭誉博   
张晓龙   
卢佰奇   

 

第一章


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

  竞赛以竞速赛为基本竞赛形式,辅助以创意赛和技术方案赛等多种形式。竞速赛以统一规范的标准硬软件为技术平台,制作一部能够自主识别道路的模型汽车,按照规定路线行进,并符合预先公布的其他规则,以完成时间最短者为优胜。创意赛是在统一限定的基础平台上,充分发挥参赛队伍想象力,以创意任务为目标,完成研制作品;竞赛评判由专家组、现场观众等综合评定。技术方案赛是以学术为基准,通过现场方案交流、专家质疑评判以及现场参赛队员和专家投票等互动形式,针对参赛队伍的优秀技术方案进行评选,其目标是提高参赛队员创新能力,鼓励队员之间相互学习交流。

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

  全国大学生智能汽车竞组织运行模式贯彻“政府倡导、专家主办、学生主体、社会参与”的 16 字方针,充分调动各方面参与的积极性。

 

第二章 统设计总述


  年限定了H车模作为全向型进组竞赛车模.麦克纳姆轮基于全向移动的特点,配合舵机与摄像头,可以轻松实现在三岔道路横向前进的任务.基于本次芯片采用沁恒推出的CH32V103的引脚数及性能限制.我们采用硬件二值化摄像头OV7725,有效减轻单核的数据处理负担.为了识别元素更为准确,我们又采用四个高精度电感获取更多赛道信息.基于全向移动的特点,车体采取对称式结构方便控制.

 

第三章 械系统设计


3.1 防撞

  在调试过程中,经常会遇到车模冲出赛道的情况,为了防止撞击损坏电路板和传感器,使用质地较硬的漆包线与高硬度碳杆制作电磁前瞻.利用多层热缩管和热熔胶将电感固定在前瞻上.既保证了轻质,又保证了强度.经过测试,最终使用外径4.0*4.0mm,内径1.0mm的碳杆.

▲ 图3-1 电磁前瞻

3.2 电池固定

  由于车模运动速度较高,并且惯性大,所以电池的固定必须牢固,以防在运动过程中电池发生运动,影响参数的校正.并且由于比赛时间紧张,电池还要方便更换.车模采用专用打印件将电池固定在车模X轴中心.

▲ 图3-2-1 电池固定槽(左)(右)

▲ 图3-2-2 实际装配效果

3.3摄像头固定

  由于车模采用摄像头循迹,并需要在三岔元素内进行转向,摄像头与舵机的配合需要一定强度,在保证摄像头在车模运行过程中不会抖动的情况下,又能实现转动.采用了附加支架和轴承将摄像头固定.为了能使摄像头不随碳杆与舵盘发生相对滑动,采用了8.08.023mm碳杆.使用轴承为内径12mm,外径20mm的塑料材质轴承.为了使方杆与轴承内径有接触,使用黑色电工胶带将碳杆加厚.

▲ 图3-3-1 轴承与碳杆

  使用过程中发现附加支架极易拉扯车模底盘,因此将原本采用的机械结构用热熔胶代替.

▲ 图3-3-2 原有的附加支架

▲ 图3-3-3 改用热熔胶固定

  为了获得更好图像,我们增加了连接装置.

▲ 图3-3-4 增加装置后

3.4 舵机固定

  舵机质量尽量小,有利于调整车模重心.为了使摄像头角度在运行过程中可以转动共180度,舵机可控角度应为180度及以上.舵机虚位尽量小,可以尽量减小其抖动对摄像头识别造成的影响.摄像头转角速度也要尽量快.最终我们选用了FT2331M这款舵机.可控角度为240度,体积小,重量20g,转角速度0.09s/60°(6v).

▲ 图3-4-1 FT2331M舵机

  对于多舵机的安装,重点是做好定位孔,要使得舵机齿的位置处于车模中心.基于载板上预定打好的孔,用强度稍高的铝管可以达到很好的固定效果,纸垫片可以有效保护载板版面,也可以对载板和铝管进行绝缘.

▲ 图3-4-2 舵机支架

▲ 图 3-4-3 装配效果

  使用打印件连接舵盘和碳杆

▲ 图3-4-4 连接件

▲ 图3-4-5连接件装配效果

3.5 测距传感器固定

  车模采用tf-mini PLUS激光雷达传感器,用于配合处理坡道元素,分辨率为cm,串口通讯.但可惜受制于处理器,最终未能使用.利用车模上定位孔将其固定在摄像头正下方,调整角度不被电磁前瞻遮挡.

▲ 图3-5 测距传感器 tf-mini

3.6 编码器固定

  编码器的安装要考虑到齿轮的啮合问题,不能过松或过紧。并且编码器要尽 量安装在靠近车中心的位置,防止在碰撞时编码器的位置发生变化。编码器采用 螺丝和塑料固定件固定在车轮上方。为了防止编码器齿轮松动,直接采用 262 胶水将齿轮固定在编码器轴上。编码器配合齿轮容易滑丝,挡板质地坚硬,不易损坏,因此用于固定编码器的挡板,其定位孔设计为槽型,可以用调整挡板的形式调整编码器齿轮的啮合.

▲ 图3-6-1编码器安装

▲ 图3-6-2 编码器安装

▲ 图3-6-3 编码器安装架

3.7陀螺仪固定

  为了保证车体前后对称,且不占用舵机安装空间,将陀螺仪用锡焊固定在主板上,舵机的正下方.X轴Y轴方向与程序有紧密联系.这里选取X轴正向正对车模前方.

▲ 图3-7-1 陀螺仪

▲ 图3-7 实际安装效果

3.8 麦克纳姆轮处理

  本届为了使H车在pvc材质赛道上跑得更稳,没有使用往届的买麦克纳姆轮,而是采用了16届新版的”钻石轮”,提升车体防抖性能;小辊子上胶皮易与其发生相对滑动,胶皮的两侧也容易与轮毂边沿卡住导致横向前进无法稳定,选用厚度为9448A双面胶将胶皮粘在小辊子上.

▲ 图3-8麦克纳姆轮

3.9 PCB板固定

  本车模PCB板为矩形,长100mm,宽80mm.板子上打有舵机安装定位孔,陀螺仪安装定位孔.为了保证陀螺仪确实在车体正中心,同时不影响走线,使用了与车模定位孔相匹配的打印件.主板与打印件之间使用热熔胶连接.打印机件与车模底板间使用21.0mm的高强度铝管连接.

▲ 图3-9-1 打印件

▲ 图3-9-2装配效果(正面)

▲ 图3-9-3装配效果(反面)

  对于电机驱动板,由于不安装传感器,使用45mm尼龙柱*2即可固定,底部为防止对车底盘变形造型影响,使用热熔胶.

▲ 图3-9-4 驱动板

3.10 重心调整

  H车模依靠四个电机差速实现姿态矫正,重心不当容易造成控制逻辑混乱;重心靠上容易使车模跳轮.最终将重达220g的电池以及30g重的主板放置在车模中心位置,且电池紧贴车模底盘,主板与电池间距为3.0mm,选取舵机时特别选取了重量仅为20g的FT2331M舵机,保证了除麦轮外的重量集中在车体中心靠下.

▲ 图3-9-5 整体装配效果

3.11 机械结构选择与踩坑

  在正常的机械结构下,如果漂移甩尾,或是速度不高且提不上速度,不要迷信轮胎处理或是结构微调这些,这时候影响到你的大概率是程序和算法。轮胎处理和结构微调只会在高速时有些许的改善,陷入天天有问题就想调机械也是我们最开始做的问题。

  轮胎处理

  • 其实我们认为最重要的是,把辊子上的胶套用3M薄双面胶粘死在了轮子中间。未作处理的话横向跑车的时候胶套会偏向轮毂一侧,影响辊子正常转动。虽然但是,闭环了确实会在一定程度上不会出现太大的问题。

  • 我们也尝试了用软化剂涂抹胶套,具体的方法就是用刷子把每个辊子上的胶套都刷上软化剂,再用保鲜膜包起来密封八小时左右,一半就是偶尔在晚上调完车后处理第二天早上再拆封这样。如果不嫌拆装麻烦可以拆掉所有辊子上的胶套并浸泡在软化剂里,或是有充足资金买软化剂就直接把麦轮拿去泡。软化剂我们使用的是逐飞店铺的黄色小瓶,呆萌侠的也尝试过。不过因为胶套太薄面积太小,处理完之后没有明显的手感变化,上车测试也是一样。

  呆萌侠的厚胶套我们买过,感觉就是把长橡胶管截成一个个小段,并且是上下等宽等粗,感觉很不靠谱的样子。并且后面卓大公众号评论下面回复这种胶套厚度可能超标,为了安全起见我们就放弃用了,那个其实连装车都嫌累没装过

  • 打磨轮胎的话,可以用砂轮机打磨,也可以找个粗螺丝放到胶套里固定,再卡到台式钻台上,手拿着砂纸在旁边磨。硅橡胶是为了防止打磨将轮胎磨破,可使用南大硅橡胶进行补胎,硅橡胶更软但摩擦力不如原胎。但是这么多辊子磨完会是个巨大的工程,看着就很累最终也没做处理。另外原装胶套本身就很薄,稍不留神就容易磨破。我们尝试处理了一个手感上也没有明显变化。其实跑到了最后胶套已经被自然磨损了一层,边缘甚至还会破损。破损只要不是特别严重我们也就没修,严重的就直接换掉了。

  • 我们发现辊子和轮毂连接处在跑了很长一段时间后会出现黑色的东西,有些粘性但也不少油状的,猜测可能是胶套的碎屑卡在了慢慢积累到一起。这个黑色的东西会让辊子自转稍微受阻。这是我们在拆轮时才发现的,不拆轮单从外面看没有发现,拆之前并未察觉到异样,拆后也只有仔细观察才能发现提升之处。

  其他

  • 卸下来车模前挡板,因为挡板会卡路肩,并且要撞也是先撞掉放在前面的电磁感.
  • 轮胎以及赛道的干净很重要。建议擦轮胎使用微湿的抹布,擦赛道使用较干的抹布进行,擦拭完毕等二者都干掉再发车。也有推荐购买WD-40除锈剂来清洁轮胎。如果隔夜代码跑不了,请先不要怀疑自己,擦一遍赛道和轮子会有意外收获的。

 

第四章 件系统设计


4.1 传感器

  选择的传感器如下:

  • 编码器: 360°位置传感器倒立摆角度绝对式迷你mini编码器.每个电机配备一个角度传感器来测速,共四个.使用SPI通讯接口,CPOL=0/CPHA=0通讯方式.通过测量角度变化读取电机速度.
  • 摄像头: OV7725小钻风硬件二值化数字摄像头.可调帧率0-150,通过软件调节阈值,使图像更好地与环境相适应.相较于彩色摄像头,减轻单片机运算负担.镜头130°,对于调试无任何影响.
  • 激光测距传感器: 北醒激光雷达传感器PIX避障室内版TF-mini-Plus.串口通信, 测距范围10-120cm,精度毫米级.通过850nm激光测量坡道距接收镜头距离,输出赛道起伏状况.配合摄像头准确输出赛道信息.
  • 陀螺仪: ICM-20602传感器模块.SPI通讯,测量精度高,噪声小.负责圆环内及三岔内角度收集.

4.2 电源部分

  电源部分设计本着稳定,低成本,简单的原则,共设计五个电源部分:

  • 作用 电源 使用芯片
  • 舵机驱动 6V TPS5430
  • 摄像头驱动 3V3_CAM LD29150-33
  • 运放驱动 3V3_OP LD29150-33
  • 测距驱动 5V LD29150-50
  • 其他外设 3V3_1 LD29150-33

  为避免摄像头和电磁电源互相影响,特地使用两个电源进行供电,在设计中后考虑到陀螺仪使用较为频繁,应将陀螺仪也单独进行供电.可能这也是赛中,陀螺仪掉线车模于三岔口偶尔无法收到数据的原因.因此建议所有传感器单独供电.
  对于舵机电源,除负责给舵机供电外,还需要利用它的输出作为其他电源芯片的输入. TPS5430经典电路如下:

▲ 图 4-2-1 6V电源电路

  其中所有3V3电源皆使用LD29150-50对6V电源进行转压,实测该芯片稳压误差小于1%.5V电源用于测距模块使用.在转出时应使用0欧磁珠进行电源分割.

▲ 图4-2-2 5V电源\\3V3电源

4.3 人机交互

  为方便观察摄像头获取信息是否正确,设定了SPI通讯的屏幕接口:

▲ 图4-3-1 屏幕接口

  蜂鸣器可以方便地判断元素是否识别到:

▲ 图4-3-2 蜂鸣器

  为方便设定速度档位,设定了按键,单核处理器没有多余的IO口,因此五轴按键只用了三个引脚:

▲ 图4-3-3 按键

4.4 通信接口

  共用到了三种通讯接口,分别是串口,SPI,I\\O.如下表所示.

  • 接口种类 使用外设
  • SPI 陀螺仪,编码器(角度传感器),屏幕
  • UART 摄像头,测距,无线串口
  • I\\O 电机驱动方向信号,按键,蜂鸣器,舵机

  为了避免接触不良,布局设计中应遵照越短越好的原则.其中陀螺仪用锡焊直接焊在载板信号接口处.编码器,电机驱动信号用12pin牛角头线连接,摄像头采用18pin FPC排线进行连接,测距采用xh1.25带锁扣排座连接, 避免接反.无线串口和屏幕采用排针排母直连.

4.5电机驱动

  电机驱动板由两个全桥电路构成,每个全桥电路由4个N-MOS组成.为节约PWM资源,采用Drv8701e芯片,一路IO,一路PWM驱动信号层:

▲ 图4-5-1 H桥驱动电路

  电机和单片机之间用SN74HC125PWR芯片进行隔离:

▲ 图 4-5-2 电机-单片机隔离电路

  驱动芯片和隔离芯片用LD29150-50和LD29150-33电路进行供电,为了节约成本及购买便捷性,采用LD29150同一封装的不同规格进行电源传递:

▲ 图4-5-3 芯片电源

  单片机提供过控制输出PWM占空比实现电机调速,通过改变与驱动板的IO接口高低电平,控制DRV8701e的使能端和输入端信号,进而控制电机正反转和停止.车模使用电机为RS-380电机,堵转以及正反转过渡过程中电机电流较大,最大堵转电流约为20A.因此,设计驱动板时对过电流较大导线进行覆铜处理,MOS管使用TPH1R403NL,足够承受10V以下电压和大电流.

 

第五章 像头处理


5.1简介

  我们使用的单片机存在较多限制,为了使得能提高处理速度,减少单片机负荷,压缩代码量,我们最终决定使用硬件二值化的摄像头和130°无畸变镜头来采集图像,得到原始图像。

5.2摄像头信息的提取和利用

  • 原始信息

  使用硬件二值化摄像头解压缩后得到一幅只有黑和白的图像,实质上是60*80的一个二维数组。

  • 二次信息提取

  在获取到原始图像的基础上,根据赛道特点,根据赛道边线是黑白分界线的特征来提取边线。

  在扫线上,传统的获取方法是在底部往上扫线,根据上一行中点来确定本次中点起始位置的算法存在遍历点次数过多,速度过慢的缺点。因此我们使用八邻域边缘提取算法,分别对左边线和右边线进行边缘提取,八邻域扫线特性和赛道特性契合,处理速度较快,同时利用八邻域扫线过程中,相邻两个像素点位置,可以大致得出赛道趋势,可以在后续判断中使用。获取的赛道具有几个特点:每一行直接具有连续性,每帧图像和上一帧图像边线形态上具有一定的关联性。可以根据实际摄像头角度和光照情况,根据本次图像上边线特点和像素点信息,对光照对原始图像是否严重进行验证,如果不满足条件就不处理本帧图像,采取下一帧图像进行处理。

  我们通过扫线得到了左右边线在一帧图像上的位置,通过对同一行所在列数进行相减,可以得到每一行的赛道宽度。在扫线完成后,根据赛道边线形态和八邻域得出的赛道趋势可以确定赛道上一个很重要的信息,该帧图像近处拐点是否存在和拐点所在坐标。至此,每帧赛道基础信息获取完毕

▲ 图5-1-1 正常赛道获取到的图像

  • 二次信息的利用

  特殊元素判断 :

  本届智能车赛道需要处理的元素有:斑马线,十字路口,三叉,环岛,坡道。
  摄像头获取的图像和车身相对于元素的位置有较大关系。

  其中斑马线较为好判断,在左右两边线间存在大量黑白跳变点。

  坡道使用摄像头结合激光测距模块进行测量。

  三叉识别通过拐点和赛道趋势进行判断,它的特征比较明显,同时找到下方两个拐点,赛道趋势满足特定趋势,赛道宽度逐渐变
  宽即可识别。

  环岛使用摄像头和电磁的综合判断,根据场地上电磁线铺设情况,环岛处电磁值是是整个赛场上最大的,使用横向于车体的电感识别。之后用摄像头进行左右环岛识别和特殊补线处理。通过赛道信息更改赛道边线,从而更改摄像头规划出的路径。

  • 十字,三叉特殊处理

  全向组比赛要求需要在三叉中心旋转,需要识别到以后直行到三叉中心点,而直行过程中如果正常循迹路径规划会出现三叉走向一侧的问题。

  因为十字和三叉近处特征相似,因此可以使用同一种补线思路来对边线进行重新设定使得路径保持直行。减少了代码量,增强了复用性

  重新设定的思路很多,我们最终选取使用根据近处两侧拐点下边线情况来进行重新设定。重新设定分为左侧单边设定和右侧单边设定两种并列情况,可以适应直入十字,斜入十字,直入三叉,斜入三叉四种情况。

  • 中线拟合

  我们选用赛道左右两侧边界来拟合虚拟中线,对单边丢线情况进行特殊处理,算特定行数的虚拟中线和屏幕中线的误差作为转向环输入。

▲ 图5-1-2 特殊情况丢线

 

第六章 PID控制实现


6.1 经典PID控制:

  • 比例、积分、微分控制,简称PID控制,又称PID调节。PID控制的基本方法是根据系统输入与预定输出的偏差的大小运用比例、积分、微分计算出一个控制量,将这个控制量输入系统,获得输出量,通过反馈回路再次检测该输出量的偏差,循环上述过程,以使输出达到预定值。 PID控制器问世至今已有近 70年历史,其有着结构简单、稳定性好、工作可靠、调整方便等优点。
  当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,也适合用PID控制技术。

  • 连续型PID的公式
  即对err(t)分别进行比例,积分,微分运算之后进行加权求和得到输出U(t)。
  • 由于单片机控制是采样控制,只能根据采样时刻的偏差控制输出量而不能计算连续输出量,所以要采用离散化的 PID算法。离散数字 PID分为位置式和增量式两种。

  而增量式PID算法对应可由位置式推出:

  具体的代码实现为:

float Realize_PID(PIDTypeDef_t *pid, float get, float set) {
pid->Now_Val = get;
pid->Ex_Val = set;
pid->Err_Now = pid->Ex_Val - pid->Now_Val;

   pid->Output_p = pid->Kp * pid->Err_Now;
   pid->Output_i += pid->Ki * pid->Err_Now;
   pid->Output_d = pid->Kd * (pid->Err_Now - pid->Err_Last);
   pid->Output = pid->Output_p + pid->Output_i + pid->Output_d;

   pid->Err_Last = pid->Err_Now;
   
   return pid->Output;
}

float Incremental_PID(PIDTypeDef_t *pid, float get, float set) {
pid->Now_Val = get;
pid->Ex_Val = set;
pid->Err_Now = pid->Ex_Val - pid->Now_Val;

   pid->Output_p = pid->Kp * (pid->Err_Now - pid->Err_Last);
   pid->Output_i = pid->Ki * pid->Err_Now;
   pid->Output_d = pid->Kd * (pid->Err_Now - 2.000f * pid->Err_Last + pid->Err_LastLast);
   pid->Output += pid->Output_p + pid->Output_i + pid->Output_d;

   pid->Err_Last = pid->Err_Now;
   pid->Err_LastLast = pid->Err_Last;
   
   return pid->Output;
}

  • 公式中没有体现周期T,其实考虑到周期是一个常数,就直接合在了系数中。采样周期和控制周期都会影响系数。

  • 在PID算法中,比例环节 P 的作用是成比例地反映控制系统的偏差信号e(t),一旦产生偏差,比例控制环节立即产生控制作用以减小偏差;积分环节 I 的作用是消除静差,提高系统的无差度。微分环节 D 的作用是反映偏差信号的变化趋势,能够在偏差信号变化之前先引入一个有效的早期修正信号来提前修正偏差,加快系统的动作速度,减少调节时间。

  • 所谓增量式PID 是指数字控制器的输出只是控制量的增量△u(k)。增量式PID优点在于,由于输出的是增量所以误动作时影响小,必要时可用逻辑判断的方法关掉。另外由于控制增量△u(k)的确定仅与最近k次的采样值有关,所以较容易通过加权处理而获得比较好的控制效果。

  • 在PID参数的选择上,公认的常规方案是,过程控制系统(如电机控制)因较慢的响应常采用PI控制,突出积分项的作用,而随动控制系统(如舵机控制)为了达到较快的响应常采用PD控制。
  大多智能车队会推荐速度环使用增量式PID,方向环使用位置式PID,这是由于增量PID由于也不容易造成电机的正反转切换。但我们认为,在合适的参数下,增量式PID与位置式PID应该是可以等价。

6.2 改进式PID:

  • 不完全微分PID:
  微分项的控制可以加快动态响应的同时,也可能带来极大的高频扰动,因而使用微分项常常采用串接低通滤波的方式,以克服高频干扰,抗微分扰动。

  将一低通滤波环节串接在PID控制器的输出后,或单独串接在微分项的输出之后。
  pid->Output = pid->Output * Lpf1Factor_Out + pid->Output_Last * (1.000f - Lpf1Factor_Out);
  pid->Output_d = pid->Kd * (pid->Err_Now - pid->Err_Last) * Lpf1Factor_d + pid->Output_dd * (1.000f - Lpf1Factor_d);

  • 微分先行PID:
  o 输出微分先行PID:将低通滤波串联在反馈环节(如编码器环节)
  pid->Now_Val = get * Lpf1Factor_val + pid->Last_Val * (1.000f - Lpf1Factor_val);
  o 偏差微分先行PID:将低通滤波串联在偏差环节
  pid->Err_Now = (pid->Ex_Val - pid->Now_Val) * Lpf1Factor_err + pid->Err_Last * (1.000f - Lpf1Factor_err);

  • 变积分PID:
  o 死区:
  死区即实际工程中可容忍的最大误差。实际应用中,小误差产生的原因很大可能是由于测量误差或其它不可避免因素造成而不是实际误差。在较小的偏差下弱调节或不调节,可以让控制避免抖动更加平滑。
  o 三段式积分分离:
  在普通PID控制中引入积分环节主要是为了消除净差和提高控制精度。但在控制系统启动或停车或大幅度增减目标值时,由于积分饱和作用,短时间内会造成系统有特别大的偏差,会造成PID运算的积分积累,致使输出量特别大,很容易导致超调,甚至会引起系统较大的震荡。
  当误差绝对值大于阈值时取消积分项避免过量超调,在大误差范围内减小积分项作用。当被控量接近目标值时(即误差正常时),引入积分控制,以消除净差,提高控制精度。

if (pid->Err_ABS > 50) {
   ki_index = 0.000f;
} else if(pid->Err_ABS > 30 & pid->Err_ABS < 50) {
ki_index = 0.600f;
} else if(pid->Err_ABS > 25 & pid->Err_ABS < 30) {
   ki_index = 0.900f;
} else {
   ki_index = 1.000f;
}

pid->Output = pid->Output_p + pid->Output_i * ki_index + pid->Output_d;

  积分分离也会导致启动时或是状态变化时PID上升时间边长,若要运用则应多次实验并谨慎来选择范围和系数。若阈值太大,达不到积分分离的目的,若太小又有可能因被控量无法跳出积分分离区,只进行PD控制,将会出现残差。
  o 变速积分:

  积分分离每一段的ki_index值都为常数,而变速积分则采用系数的形式,使得积分的分段更加线性化。

if (pid->Err_ABS > L_Err) {
   ki_index = 0.000f;
} else if (pid->Err_ABS < S_Err) {
   ki_index = 1.000f;
} else {
   ki_index = (L_Err - pid->Err_ABS) / (L_Err - S_Err);
}

  变速积分控制更为缓慢,实际应用体验还是积分分离效果更好。
  o 有效偏差法:
  当根据PID位置算法算出的控制量超出限制范围时,控制量实际上只能取边际值U=Umax,或U=Umin,有效偏差法是将相应的这一控制量的偏差值作为有效偏差值计入积分累计而不是将实际的偏差计入积分累计。
  o 遇限削弱积分:
  在计算U(k)时,若上一时刻的控制输出量U(k-1)超过限制范围,则根据偏差的符号决定是否将相应偏差计入积分项。

if (ABS(pid->Output_Last) > OutputLimit) {
if ((pid->Err_Sum > 0 && pid->Err_Now < 0) || (pid->Err_Sum < 0 && pid->Err_Now > 0)) {
       pid->Err_Sum += pid->Err_Now;
  }
} else {
   pid->Err_Sum += pid->Err_Now;
}

  o 实际工程中,如切换PID模式,则建议消除积分项以避免积分饱和。
  • 专家PID:
  专家PID依赖经验与规则的制定,同样也依赖调参。专家PID使用时多用于电机环。

if (pid->Err_ABS < S_Err) {
   //小偏差 较小误差, 调小比例
   pid->Output = Offine_K * pid->Output;
} else if (pid->Err_ABS > L_Err) {
//大偏差
   //串联BangBang-PID
pid->Output = (pid->Err_Now > 0) ? (9500) : (-9500);
} else {
//正常偏差
if ((pid->Err_Now * (pid->Err_Now - pid->Err_Last) > 0 && pid->Err_Last * (pid->Err_Last - pid->Err_LastLast) > 0) || (pid->Err_Now - pid->Err_Last) == 0) {
       //偏差在朝向偏差绝对值增大的方向变化(偏差越来越大), 或者偏差一直为某一固定值
       if (pid->Err_ABS > Mid_Err) {
           //控制器实施较强的控制作用
           pid->Output = Online_K * pid->Output;
      } else {
      //但是偏差绝对值本身并不是很大
           pid->Output = pid->Output + 0;
      }
} else if(pid->Err_Now * (pid->Err_Now - pid->Err_Last) < 0 && (pid->Err_Now - pid->Err_Last) * (pid->Err_Last - pid->Err_LastLast) > 0 || (pid->Err_Now == 0 && pid->Err_Last == 0) {
       //偏差的绝对值向减小的方向变化,或者已经达到平衡状态
       //此时可以保持控制器输出不变
} else if(pid->Err_Now * (pid->Err_Now - pid->Err_Last) < 0 && ((pid->Err_Now - pid->Err_Last) * (pid->Err_Last - pid->Err_LastLast) < 0)) {
       //偏差处于极值极限状态
       if (pid->Err_ABS > Mid_Err) {
           pid->Output = Online_K * pid->Output;
      } else {
           //但是偏差绝对值本身并不是很大
           pid->Output = pid->Output + 0;
      }
  } else {
       //正常情况
       pid->Output = pid->Output + 0;
  }
}

  这是一套较为完整的专家PID,根据实际使用时的情况可以随意删减规则,如为了实际

以上是关于智能车竞赛技术报告 | 全向行进组 - 东北林业大学- 进取号E的主要内容,如果未能解决你的问题,请参考以下文章

智能车竞赛技术报告 | 全向行进组 - 沈阳工业大学 - 找不到北队

十六届智能车全向行进组_国一控制开源

智能车竞赛技术报告 | 双车接力组 - 东北大学 - 三好学生

第十六届智能车竞赛线上全国总决赛远程组委会监督腾讯会议

第十六届智能车竞赛备战新进展

智能车竞赛技术报告 | 节能信标组-东北大学-天魁队