IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 智能车中的PID控制 -> 正文阅读

[嵌入式]智能车中的PID控制

智能车中的PID控制

1.简介

小车程序处理对于数据的处理可简化成这样,其中单片机就是小车的核心。在这里插入图片描述
他单片机主要完成:

  • 将传感器采集的数据进行处理

  • 自动控制算法

  • 输出控制信号

    控制算法对小车的性能起了决定性的作用。
    在这里插入图片描述

PID控制,作为一种控制方法被广泛运用在小车控制中。在大多时候你只要会用pid、会调pid,那么这个车你就完成了一半。

2.位置式pid

在这里插入图片描述

我们以小车巡线来介绍位置式pid。这里我们需要实现让小车一直沿着中线前进

为了实现高速巡线,在巡线过程中我们需要让车快速稳定地回到中线。

设小车方向盘的转角为Θ,通过控制Θ就可以实现小车的转向。

我们已知小车偏离中线的距离x,当我们仅仅只考虑这一个参数的时候,我们就可以用比例(Proportion)控制。也就是离中线远方向就打的急,离中线近方向打的缓。
θ = K P x \theta={K_P}x θ=KP?x
以时间t为横坐标,以偏差x为纵坐标作图:

在这里插入图片描述

图像中的曲线斜率代表小车横向移动的速度Vx。这里可以看到,当小车快要接近中线的时候,Vx没有明显的下降,而是出现的一个控制滞后的现象。这其实是因为没有考虑小车的质量,也就是质量产生的惯性使他有一个过冲现象。

为了消除这个现象我们可以引入小车的速度Vx(即x的微分Differentiation),在小车横移速度比较快的时候对P产生的控制量 KpX起一个牵制的,可理解为阻尼。相当于在车横移速度比较快的时候轻点一下刹车,去消除过冲现象,踩刹车的轻重与速度成正比。
θ = K P x ? K d d x d t \theta={K_P}x-{K_d}{dx\over dt} θ=KP?x?Kd?dtdx?
其实PD控制就是我们通常用来控制巡线的方法。

在这里插入图片描述

这里再介绍一下参数i(Integration)。如果对x积分,那他其实就是X-t坐标图围成的面积。在这里就是对历史偏移量的一个记录,对应物理意义可以是位置偏差的累计,如果将他加入控制中,那么他将起到消除稳态误差的作用,而对于巡线来说,这是一个随动控制系统,消除稳态误差意义不大,而且会使得系统不稳定。所以对于巡线来说我们只采用PD控制器。需要用到i控制的时候,我们也通常对其限幅避免出错。

如果将完整PID形式:
θ = K P x ? K d d x d t + K d ∫ x d x \theta={K_P}x-{K_d}{dx\over dt}+{K_d}\int xdx θ=KP?x?Kd?dtdx?+Kd?xdx
通常我们这样表示:

u ( t ) = K p e ( t ) + k i ∫ e ( k ) d e + K d d e ( t ) d t u(t)=K_p e(t)+k_i \int e(k)de +K_d {de(t)\over dt} u(t)=Kp?e(t)+ki?e(k)de+Kd?dtde(t)?
u(t):控制量 e(t):偏差

而具体应用到单片机时,我们采集到的不可能是连续的信号,而是每隔5ms,或者10ms的偏差值。这就要进行离散处理。公式如下:
? ? u ( k ) = K p e ( k ) + k i ∑ e ( k ) + K d ( e ( k ) ? e ( k ? 1 ) ) \star \ u(k)=K_p e(k)+k_i \sum e(k) +K_d {(e(k)-e(k-1))} ??u(k)=Kp?e(k)+ki?e(k)+Kd?(e(k)?e(k?1))
e(k):当前偏差 e(k-1):上一次的偏差

由于d有超前控制的作用,i有滞后效果,所以P可看作对当前的控制,I看作对过去的控制,D看作对未来的控制

3.增量式pid

对于上面的式子如果我们用增量表示每次控制的增加量

u ( k ) = K p e ( k ) + k i ∑ e ( k ) + K d ( e ( k ) ? e ( k ? 1 ) ) u ( k ? 1 ) = K p e ( k ? 1 ) + k i ∑ e ( k ? 1 ) + K d [ e ( k ? 1 ) ? e ( k ? 2 ) ] u(k)=K_p e(k)+k_i \sum e(k) +K_d {(e(k)-e(k-1))}\\ u(k-1)=K_p e(k-1)+k_i \sum e(k-1) +K_d {[e(k-1)-e(k-2)]}\\ u(k)=Kp?e(k)+ki?e(k)+Kd?(e(k)?e(k?1))u(k?1)=Kp?e(k?1)+ki?e(k?1)+Kd?[e(k?1)?e(k?2)]

可以得出增量式pid的公式:

? ? Δ u = K p [ e ( k ) ? e ( k ? 1 ) ] + k i e ( k ) + K d [ e ( k ) ? 2 e ( k ? 1 ) + e ( k ? 2 ) ] \star\ \Delta u=K_p [e(k)-e(k-1)]+k_i e(k) +K_d {[e(k)-2e(k-1)+e(k-2)]} ??Δu=Kp?[e(k)?e(k?1)]+ki?e(k)+Kd?[e(k)?2e(k?1)+e(k?2)]
这里输出的是每次控制的增加量,而输出也仅仅与最近三次的采集值有关,系统出错或者技术误差对其影响更小。增量式PID常用于带积分的系统,电机速度控制时,在变化控制上加上原来的控制量,相对于对其积分了。

4.总结

在上面的例子,用pid的时候我们不需要知道小车的质量m,打角Θ等物理参数,只需要对系统进行调参得到理想的效果,没有比这更简洁,适用的控制方法了。而它将比例、积分、微分三者的控制量直接相加的,是一种线性控制器。对于复杂的系统比如无动量轮控制的自平衡自行车来说pid调起来就显得明显吃力。所以建议先对控制系统进行分析建模,再结合pid控制。

可以根据实际系统分析进行改进,在某些需用i的系统,可以尝试积分分离的PID和变系数的PID。进一步可以采用模糊PID,能得到比系数不变的pid更好的控制性能。

如果大家想进一步的了解pid以及其他控制理论,那么可以在b站搜索up主 DR_CAN 《自动控制原理》关于pid部分的讲解。

在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:26:44  更:2021-10-09 16:27:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:57:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码