5

无人驾驶(pid算法)

 3 years ago
source link: https://blog.csdn.net/feixiaoxing/article/details/89348400
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

无人驾驶(pid算法)

费晓行 2019-04-17 06:13:34 5190
分类专栏: 自动驾驶

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

    对于工科的同学来说,最简单的自动控制代码其实就是PID。在现实的生产中,最难控制的往往是输入和输出之间的关系。很多时候,系统的输入和输出是很复杂的关系,根本没有办法用方程来表示,或者说无法用方程来准确表示。这个时候,PID就可以发挥用处。PID非常简单,主要就是比例系数、积分系数和微分系数。我们可以用一个简单的代码来说明这个问题,

    如果大家运行一下,你大概会得到这样的结果,

    通过输出,我们会发现数据会慢慢靠向200,这也是我们最终希望标定的数值。当然,这只是一个基础的逻辑,这个200可以是距离、温度、压力,或者是任何其他有意义的物理量。

    整个代码的逻辑也不复杂,首先我们从get_from_sensor获取传感器值。为了简单,这里仅考虑输出量和被控制量是1:1的线性关系。接着,代码将sensordata作为入参传递给pid_process函数,而pid_process就是整个功能的主要部分。最后,从pid处理函数获得输出值,一般会传向放大机构或者执行机构,这样就可以完成所有的自动操作过程。

    当然,这只是一个基础的PID控制代码,实际生产中还需要对它进行容错和优化考虑,比如如果让自动控制更快更准,而且要振荡更小。建议大家多看看下面这篇blog,https://blog.csdn.net/u010312937/article/details/53363831,肯定会对自己大有裨益。等到自己对PID比较熟悉的时候,也可以多多研究双闭环PID控制方法。

    PID多用于电机控制。电机控制是嵌入式很大的一个部分,通常一般用双PID闭环或者三PID闭环来解决。如果是双PID闭环,外部循环是速度偏差,内部是电流偏差,输出PWM。如果是三PID控制,那么从外到内分别是距离、速度和电流偏差,一般把电流和扭矩看是成等效的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK