首页 > 编程知识 正文

warrobots快速降杯(pid原理图)

时间:2023-05-04 02:36:39 阅读:98572 作者:1920

PID控制器代表比例-积分-微分控制器,如果你对它有更深的理解,其实很容易理解。三字母PID其实是三个独立的技术,并不是一个复杂的想法。

来自维基百科的PID控制器图

想象一下,我们在路上有一辆自动驾驶汽车,我们绝对不希望我们的汽车在预设的道路上行驶。这就是PID控制器的来源,自动转向。

00-1010第一个问题是我们如何测量当前位置和预定义路线之间的差异?交叉跟踪误差(CTE或XTE)是一个简单的误差函数。它只是测量从一个地方到一条路线的距离。

来自PICpilot的交叉跟踪错误。

然后,我们将使用PID控制来最小化误差。

交叉跟踪误差

比例控制是一种简单的技术,可以根据CTE的说法按比例控制机器人。如果我们离基线很远,我们的车辆就会转向那里。同时,如果我们离基线不远,就会有轻微的转折。

来自乌达城机器人公司的图片

这是可行的,但是如果我们对这个问题三思而行,我们的车基本上是围绕着我们的基线摆动的。看来我们的司机喝醉了。这绝对是一种危险的行为。

页(page的缩写)Kp方程是决定我们采用什么比例的参数。

P-Proportional

因此,我们希望减少振荡的影响。这就是为什么我们引入第二个控制器,导数控制。在这里,我们将考虑如何转弯来平滑坡度。

D. Kd的方程是决定取多少导数的参数。

这个导数是CTE随时间的变化。假设我们每隔1s测量一次,我们可以把导数取为(CTEt-CTEt-1)/1。

看来PD控制足以控制方向盘了。但是让我们看看下面的场景。我们的自动驾驶汽车有一些机械问题。当它启动时,前轮会像下面一样移动。

所以,在它运行的时候,我们的软件并没有意识到这个问题,因为在这个时候,我们应该多引导纠正车轮。因此,我们将看到以下结果。

00-1010为了解决这个问题,我们将增加积分,让机器人思考整个过程。

Ki是决定将使用多少积分的参数。

如果CTE误差不低,机器人会考虑整个情况,因为积分会变大,转向更多。

D-Derivative

如果你注意到了,所有这些PID方程都有自己的参数K,决定了要取的比例。PID优化的算法有很多。接下来,让我们看看如何使用名为“旋转”的优化算法更新参数。它有一个简单的逻辑。

首先要知道优化什么。很明显是关于CTE的。CTE也可以是积极的或消极的。因此,我们可以使用平方误差函数(Python实现):

def err(p):

#相应地计算所有cte

热膨胀系数,微分热膨胀系数,内部热膨胀系数=计算热膨胀系数(当前状态)

steer=-params[0]* cte-params[1]* diff _ cte-params[2]* int _ cte

首先,我们将进行一些初始化。

#选择初始化参数向量

p=[0,0,0]

#定义潜在的变化

dp=[1,1,1]

#我们会在开始时给出一个非常大的错误

best_err=9999999999

#停止优化

阈值=0.001

那么主要算法是(Python实现):

而总和(dp)阈值:

对于范围内的I(len(p)):

p[i]=dp[i]

err=误差(p)

如果出错最好_err: #有一些改进

best_err=err

dp[i] *=1.1

else: #没有改善

p[i] -=2*dp[i] #往另一个方向走

err=误差(p)

#看这个方向的结果。

如果出错最好_err: #有所改进

best_err=err

dp[i] *=1.05

else: #没有改善

p[i]=dp[i]

#由于没有改善,两者的步长

#方向,步长可能太大。

dp[i] *=0.95

事实上,这个算法可以实现简单的行为。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。