智能车 PID 调试

文章目录

  • 智能车 PID 调试
    • 学习目的
    • 开环控制与闭环控制
      • 开环控制
      • 闭环控制
      • 小结
    • PID 概述
      • 简介
      • PID 公式:
    • 舵机 PID
      • 分析
      • 算法
    • 电机 PID
      • 分析
      • 算法
      • 调试口决
    • 注意事项

学习目的

  • 使电机速度和舵机转向更精准,有利于导航控制。
  • 利用传感器反馈值实现闭环控制,消除不必要的干扰误差。
  • 让整个系统更稳定。

开环控制与闭环控制

开环控制

当操作者启动系统,使之进入运行状态后,系统将操作者的指令一次性输向受控对象。此后,操作者对受控对象的变化便不能作进一步的控制。

闭环控制

当操作者启动系统后,通过系统运行将控制信息输向受控对象,并将受控对象的状态信息反馈到输入中,以修正操作过程,使系统的输出符合预期要求。

小结

小车的控制使用开环控制很容易漂移或者跑偏,也不够灵活,不利于导航系统的运行,所以应当选取闭环控制,PID 就是一种经典闭环控制算法。

PID 概述

简介

将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称 PID 控制器。


PID 算法应用广泛,多用于自动控制领域,如机器人,小车,洗衣机等,在智能车中广泛用于电机控制。

PID 公式:

U ( t ) = K p ∗ e r r ( t ) + T i ∫ e r r ( t ) d t + T d ∗ d e r r ( t ) d t U(t) = K_p * err(t) + T_i \int err(t)d_t + T_d * \frac{derr(t)}{d_t} U(t)=Kp​∗err(t)+Ti​∫err(t)dt​+Td​∗dt​derr(t)​

Kp:控制器的比例系数,对误差信号进行放大或衰减,其大小决定了控制作用的强弱。该系数过大可能导致系统震荡,使得稳定性变差,降低系统的相对稳定性;系数过小会导致控制效果不明显,反应迟钝,不能有效修正干扰的影响;且该系数不能完全消除系统的稳态误差。

Ti : 控制器的积分时间,也称积分系数,通过对误差累积的作用影响控制器的输出,并通过系统给出的负反馈减小偏差,理论上只要时间足够,积分控制可以消除稳态误差。该系数过大可能导致系统积分超调,使得调整时间过长;过小可能导致收敛过长,不能及时克服干扰影响。

Td: 控制器的微分时间,也称微分系数,该系数能够反映出误差信号变化的速度,在误差刚出现时就产生很大的控制作用,具有超前的控制作用,有利于减小调整时间,改善系统动态品质。该系数过大会引起系统震荡,导致系统稳定性下降;过小可能导致改善效果不明显。同时,微分容易引入高频噪声,导致系统不稳定。

总结一下,PID 三个字母,大致可以说是 P 主管响应,I 减小静差,D 抑制震荡,但使用不当会有反作用。

舵机 PID

分析

舵机控制一般选用位置式 PID ,因为舵机本次的控制量输出值与上次控制量输出值关系不大,只与过去状态有关,舵机需要的是快速转到某个角度。而位置式 PID 正好不需要对控制量进行记忆,而是直接对偏差值进行计算得出期望的控制量。
位置式 PID 可由 PID 公式离散化得出,进行离散化是由于计算机控制是一种采样控制,它只能根据采样时刻的偏差计算控制量,而不能像模拟控制那样连续输出控制量量,进行连续控制。由于这一特点,PID 公式中的积分项和微分项不能直接使用,必须进行离散化处理。
离散化后则得到位置式 PID,也称全量式 PID :

u ( k ) = K p ∗ e ( k ) + K i ∗ ∑ i = 0 k e ( i ) + K d ∗ [ e ( k ) − e ( k − 1 ) ] u(k) = K_p * e(k) + K_i * \sum_{i = 0}^ke(i) + K_d * [e(k) - e(k-1)] u(k)=Kp​∗e(k)+Ki​∗∑i=0k​e(i)+Kd​∗[e(k)−e(k−1)]

k ―― 采样序号, k =0,1,2,……;
u(k) ―― 第 k 次采样时刻的计算机输出值;
e(k) ―― 第 k 次采样时刻输入的偏差值;
e(k-1) ―― 第 k -1 次采样时刻输入的偏差值;
K i K_i Ki​ ――积分系数;
K d K_d Kd​ ――微分系数;

算法

C语言算法:

//PID 结构体
typedef struct
{float Kp;                       //比例系数Proportionalfloat Ki;                       //积分系数Integralfloat Kd;                       //微分系数Derivativefloat Ek;                       //当前误差float Ek1;                      //前一次误差 e(k-1)float Ek2;                      //再前一次误差 e(k-2)float LocSum;                   //累计积分位置
}PID_TypeDef;//pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
/************************************************
函数名称 : PID_Loc
功    能 : 位置式PID
参    数 : SetValue ------ 设置值(期望值)ActualValue --- 实际值(反馈值)PID ----------- PID数据结构
返 回 值 : PWM -------- PWM输出
*************************************************/float PID_Loc(float SetValue, float ActualValue, PID_TypeDef *PID)
{float PWM;                                 //PWM输出PID->Ek = SetValue - ActualValue;          //计算当前误差PID->LocSum += PID->Ek;                    //累计误差PWM = PID->Kp * PID->Ek + (PID->Ki * PID->LocSum) + PID->Kd* (PID->Ek1 - PID->Ek);                  //位置式 PID 控制PID->Ek1 = PID->Ek;                       //保存上一次偏差if(PWM > Servo_max){PWM =  Servo_max;}else if(PWM < Servo_min){PWM =  Servo_min;}                                       //限幅return PWM;
}

该算法中的反馈值可由陀螺仪所测偏航角提供。

电机 PID

分析

电机一般选用增量式 PID,所谓增量式 PID 是指控制器的输出只是控制量的增量 Δ u ( k ) \Delta u(k) Δu(k)。当执行机构需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式 PID 控制算法进行控制。
设 Δ u ( k ) = u ( k ) − u ( k − 1 ) \Delta u(k) = u(k)-u(k-1) Δu(k)=u(k)−u(k−1)可得增量式 PID :

Δ u ( k ) = K p ∗ [ e ( k ) − e ( k − 1 ) + K i ∗ e ( k ) + K d ∗ [ e ( k ) − 2 ∗ e ( k − 1 ) + e ( k − 2 ) ] ] \Delta u(k)=K_p*[e(k)-e(k-1)+K_i*e(k)+K_d*[e(k)-2*e(k-1)+e(k-2)]] Δu(k)=Kp​∗[e(k)−e(k−1)+Ki​∗e(k)+Kd​∗[e(k)−2∗e(k−1)+e(k−2)]]

增量式PID根据公式可以很好地看出,一旦确定了 K p , K i , K d K_p, K_i, K_d Kp​,Ki​,Kd​,只要使用前后三次测量值的偏差, 即可由公式求出控制增量。
而得出的控制量 Δ u ( k ) \Delta u(k) Δu(k)对应的是近几次位置误差的增量,而不是对应与实际位置的偏差,没有误差累加。
也就是说,增量式PID中不需要累加。控制增量Δu(k)的确定仅与最近 3 次的采样值有关,容易通过加权处理获得比较好的控制效果,并且在系统发生问题时,增量式不会严重影响系统的工作。
增量式 PID 控制算法与位置式 PID 算法相比,计算量小的多,因此在实际中得到广泛的应用。
而位置式 PID 控制算法也可以通过增量式控制算法推出递推计算公式:
u ( k ) = u ( k − 1 ) + Δ u ( k ) u(k) = u(k-1) + \Delta u(k) u(k)=u(k−1)+Δu(k)
也就是目前在计算机控制中广泛应用的数字递推 PID 控制算法。

算法

C语言算法:

//PID 结构体
typedef struct
{float Kp;                       //比例系数Proportionalfloat Ki;                       //积分系数Integralfloat Kd;                       //微分系数Derivativefloat Ek;                       //当前误差float Ek1;                      //前一次误差 e(k-1)float Ek2;                      //再前一次误差 e(k-2)float LocSum;                   //累计积分位置
}PID_TypeDef;//pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
/************************************************
函数名称 : PID_Inc
功    能 : 增量式PID
参    数 : SetValue ------ 设置值(期望值)ActualValue --- 实际值(反馈值)PID ----------- PID数据结构
返 回 值 : PWM -------- 本次PID增量(+/-)
*************************************************/
float PID_Inc(float SetValue, float ActualValue, PID_TypeDef *PID)
{float PWM;                                  //增量PID->Ek = SetValue - ActualValue;           //计算当前偏差PID->LocSum += PID->Ek;                     //累计误差PWM = PID->Kp * (PID->Ek - PID->Ek1) + PID.Ki * EK + PID.Kd * (PID.Ek - 2 * PID.Ek1 + PID.Ek2);                                          //增量式PID控制器                       PID->Ek2 = PID->Ek1;PID->Ek1 = PID->Ek;if(PWM > motor_Max){PWM = motor_Max;}else if(PWM < motor_Min){PWM = motor_Min;}                                           //限幅return PWM;
}

该算法中的实际值可由编码器等传感器提供。

调试口决

参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线振荡很频繁,比例度盘要放大
曲线漂浮绕大湾,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
曲线振荡频率快,先把微分降下来
动差大来波动慢。微分时间应加长
理想曲线两个波,前高后低四比一
一看二调多分析,调节质量不会低
------------------------------------------------------(摘取自百度百科)

注意事项

  • 增量式算法不需要做累加,控制量增量的确定仅与最近几次偏差采样值有关,计算误差对控制 量计算的影响较小。而位置式算法要用到过去偏差的累加值,容易产生较大的累加误差。

  • 增量式算法得出的是控制量的增量,只输出变化部分,影响小,必要时还可通过逻辑判断限制或禁止本次输出,不会严重影响系统的工作。而位置式的输出直接对应对象的输出,因此对系统影响较大。

  • 增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机,而位置式PID适用于执行机构不带积分部件的对象,如舵机。

  • 在进行PID控制时,位置式PID和增量式PID需要输出限幅,不然容易烧毁电机或舵机。

智能车 PID 调试相关推荐

  1. 智能车PID控制详细介绍(普通PID、串级PID、改进PID)——适用于四轮车、三轮车、平衡车

    目录 智能车运动控制系统 一. PWM(脉冲宽度调制)原理 二. PID控制基本原理 三. 舵机处理系统 1 舵机组成及其工作原理 2 舵机PID控制策略 四. 直流电机调速 1 直流电机调速系统组成 ...

  2. 智能车竞赛技术报告 | 智能车视觉 - 南京邮电大学 - 栅库砸车跑路队

    学 校:南京邮电大学  队伍名称:删库砸车跑路队 参赛队员:刘乐      孙锐      甘翠      带队教师:江兵      刘烨      第一章 方案设计   本章主要介绍智能汽车系统总体 ...

  3. 智能车竞赛技术报告 | 智能车视觉 - 天津大学 - 北洋钽星

    简 介: 全国大学生智能汽车竞赛以"立足培养.重在参与.鼓励探索.追求卓越"为宗旨.本文介绍的AI视觉智能车结合了图像处理.神经网络.PID控制.机械设计等技术,实现了省赛国赛的比 ...

  4. 智能车竞赛技术报告 | 智能车视觉 - 武汉理工大学 - WHY

    学 校:武汉理工大学 队伍名称:WHY      参赛队员:何镇豪    殷芳锐    汪正华           带队教师:邹斌,夏婉扬 第一章 引言   全国大学生智能车竞赛受教育部高等教育司委托 ...

  5. 智能车竞赛技术报告 | 智能车视觉 - 西安邮电大学 - AI小布丁

    学 校:西安邮电大学     队伍名称:AI小布丁       参赛队员:张展鹏 徐军其 杜博林 带队教师:亢红波 蔡秀梅                第一章 引言   全国大学生智能车竞赛是从 2 ...

  6. 智能车竞赛技术报告 | 智能车视觉 - 中国矿业大学 - 会飞的车

    简 介: 本文以第十六届全国大学生智能车竞赛为背景,介绍了 AI视觉四轮智能车系统的软硬件结构和开发流程.采用大赛组委会指定的 C型车模,以恩智浦 32位微控制器 MIMXRT1064最小系统板作为核 ...

  7. 智能车竞赛技术报告 | 智能车视觉 - 中原工学院 - 逐鹿 - 分母队

    学 校:中原工学院  队伍名称:逐鹿-分母队 参赛队员:王泽南    张志宇    徐程升    带队教师:但永平    耿世勇    第一章 引言   智能车辆是一个集环境感知.规划决策.多等级辅助 ...

  8. 智能车竞赛技术报告 | 节能信标组 - 宿迁学院 - MAkkaPakka

    学 校:宿迁学院      队伍名称:Makka Pakka    参赛队员:王妙龙 吴子敬 李翔 带队教师:倪亚南 袁静     第一章 引言   全国大学生智能车竞赛是旨在加强学生实践.创新能力和 ...

  9. 智能车竞赛技术报告 | 基础四轮组 - 哈尔滨工程大学 - 济海追风5队

    简 介: 本文详细介绍了哈尔滨工程大学"济海追风5队"在第十六届全国大学生智能汽车竞赛基础四轮组中的系统方案.本次比赛采用大赛组委会指定的B3型车模,以英飞凌半导体公司生产的32位 ...

最新文章

  1. 计算机网页设计布局与排版研究,论计算机网页设计的布局与排版
  2. 华为创造出5g和鸿蒙,拥有5G专利,开发鸿蒙系统:《华为智慧》复盘成长路总结成功之道...
  3. stm32 输入捕获学习(一)
  4. java.lang.reflect.Method.getGenericParameterTypes()方法示例
  5. 在线抓娃娃爆火之后,新玩家入局还有希望吗?
  6. php直接的模块接口,api(接口)模块
  7. [html] 说说video标签中预加载视频用到的属性是什么?
  8. java简单密码验证程序
  9. python激光扫描雷达_rospy中的实时2D激光扫描仪数据
  10. 剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)
  11. 【robot framework】GET/POST请求
  12. C# 中的 ConfigurationManager类引用方法应用程序配置文件App.config的写法
  13. 知识点 - 哈密顿图
  14. python数据容器
  15. 那些好玩的生成器网站
  16. 家庭宽带之IPv6网络测试
  17. 【观察】戴尔科技:未来企业的创新平台,数字中国的坚实底座
  18. android 拨打电话 实例,Android实战教程第三篇之简单实现拨打电话功能
  19. 计算机系统如何禁止文件删除功能,Win7如何禁止在C盘上安装软件?|win7系统c盘哪些文件是可以删除的...
  20. Soul源码解析(16)-Soul网关熔断插件使用及源码解读

热门文章

  1. BT网络中DHT和UPnp的解释(转)
  2. 华为 -VLAN配置
  3. 关于async、await 与 Promise的理解函数请求方法与使用
  4. 运用 Evince 阅读 PDF 电子书
  5. 我拿到了梦寐以求的字节跳动和腾讯双offer!成功入职字节跳动
  6. java 正则 大括号_java正则表达式获取大括号之间的内容
  7. 全球清廉指数排名中国上升三位
  8. Dijkstra算法详解(完美图解、趣学算法)
  9. 用css和html做一个宣传海报,用css和html实现的一个forest logo
  10. CentOS7 设置定时重启