Questions tagged «pid»

比例积分微分控制器。在许多控制情况下,尤其是伺服系统中使用的一种控制算法。


4
如何使用Arduino PID库直线驱动机器人?
我想创建一个基于Arduino的机器人,该机器人具有2个轮子,每个轮子上的正交编码器,一个H桥驱动器芯片(或电机控制器)和一个脚轮。我想使用PID库来确保速度与行进距离成正比。 从概念上讲(假设电动机对PWM的响应不同),如何实现PID控制,使其以直线运动并以与剩余行进距离成比例的速度行进?
19 arduino  pid  driver  encoding 

3
如何动态地自动调整PID参数?
我有一个简单的伺服系统,该系统使用在MCU中实现的PID控制器执行反馈。但是,系统的属性会动态更改,因此永远无法在所有情况下调整PID参数。 我的机器人是一个轻巧的手臂,带有可向后驱动的电动机,类似于此机器人: 手臂执行多项任务,包括捡起重物,在桌子上推拉物体。这些任务中的每一个都需要不同的PID调整参数,而这些参数我很难预测。 我真正想要的是一些高级功能,该功能可以根据手臂的行为谨慎地调整参数。例如,如果注意到手臂在摆动,则可能会减小P并增加D。或者如果注意到手臂没有达到目标,则可能会增加I。 是否存在这样的算法?即使算法没有立即完善参数,我也会很高兴。例如,在将参数调整到新值之前,手臂可能会摆动几次。

3
如何进行PIV控制?
我正在考虑尝试使用PIV控制而不是PID控制。与PID相反,PIV控制在互联网和文献中几乎没有解释。几乎只有一个信息源解释了该方法,这是Parker Motion的技术论文。 我从控制方法图(在Laplace域中)了解到,控制输出归结为以下各项的总和: Kpp *(位置误差的积分) -Kiv *(测得速度的积分) -Kpv *(测得的速度) 我对么?谢谢。

2
使用PID获得差动机器人直线驱动的方法
考虑一个差动驱动机器人,该机器人具有两个电动轮,每个电动轮都附有一个编码器,用于反馈。假设每个DC电动机都有一个功能,其浮点数从-1到1,并设置PWM信号以向该电动机提供成比例的功率。不幸的是,并非所有电机都相等,因此向每个电机发送相同的PWM信号会使机器人转向左侧或右侧。我试图考虑如何使用附加到每个电机的编码器作为PID回路的输入来直线驱动机器人。 我将执行以下操作:我将左右编码器之间的差取整,将误差限制在某个范围内,将其归一化为[-1,1],然后将其映射到电机功率0至1。因此,如果I和D为零,并且我们得到的误差为1(因此,左马达的旋转比右马达大得多),则左马达将设置为0,右马达将设置为1(造成硬剩下)。 这有什么问题吗?有什么更好的方法?

3
四轴PID整定
我在这里继续回答这个问题:在自主模式下,四旋翼飞机不稳定性且简单起飞 ...我想问几个有关为APM 2.6模块控制的四旋翼飞机实现基本PID的问题。(我正在使用3DRobotics的框架) 我已经将整个控制系统简化为两个PID块,一个用于控制侧倾,另一个用于控制俯仰(偏航和其他所有功能,稍后再考虑)。 我正在由自由旋转的光束组成的钻机上测试此设置,其中,我绑住了四旋翼的两个臂。另外两个可以自由移动。因此,我实际上一次测试一个自由度(侧倾或俯仰)。 检查下面的图像:在这里,A,B标记安装装置的自由旋转的梁。 通过仔细调整P和D参数,我成功实现了约30秒的持续飞行。 但是,“持续”,我的意思是指一种测试,其中无人机不会倾倒到一侧。稳定的飞行仍然遥遥无期,而且飞行30秒以上也很困难。它从一开始就摇摆不定。到达20到25秒时,它开始向一侧倾斜。在30秒内,它向一侧倾斜了不可接受的距离。很快,我发现它倒挂了 至于PID代码本身,我正在从陀螺仪+加速度计数据的“互补滤波器”中计算比例误差。积分项设置为零。P项约为0.39,D项为0.0012。(我不是故意使用Arduino PID库,只是想在这里实现自己的PID之一。) 如果您想了解它的工作原理,请查看此视频。 http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [是的,设置非常古老!我同意。:)] 请让我知道在此阶段我可以做些什么来提高稳定性。 @Ian:在我的安装程序中进行的许多测试中,我使用来自串行监视器的读数绘制了一些测试的图表。这是横摇与“ Motor1&Motor2-PWM input”(控制横摇的两个电动机)的示例读数: 至于输入/输出: 输入:滚动和俯仰值(以度为单位),由加速度计+陀螺仪的组合获得 输出:使用伺服库的motor.write()函数提供的电机的PWM值 解析度 我解决了问题。就是这样: 问题的症结在于我实现Arduino程序的方式。我正在使用write()函数更新伺服角度,该角度恰好接受参数中的整数步(或以某种方式仅响应整数输入,100和100.2产生相同的结果)。我将其更改为writeMicroseconds(),这使直升机更加稳定。 我在一台电动机上加了RPM,而另一台电动机则保持稳定。我对此进行了更改,以增加一台电机的RPM,同时减少另一台电机。这样可以使总水平推力保持不变,这在我试图使该东西保持垂直高度时可能会对我有所帮助。 我将RPM推到最大极限,这就是为什么四轴飞行器在全油门时始终失去控制的原因。RPM在感觉到倾斜时没有上升的空间。 我观察到其中一台电动机固有地比另一台电动机弱,我不知道为什么。我将偏移量硬编码到该电机的PWM输入中。 感谢所有的支持。 源代码: 如果您有兴趣,这是我的裸露PID实现的源代码:PID源代码 请随时在您的硬件中对其进行测试。欢迎对该项目做出任何贡献。

3
我不了解PID控制器的积分部分
我不了解PID控制器的组成部分。让我们假设来自维基百科的伪代码: previous_error = 0 integral = 0 start: error = setpoint - measured_value integral = integral + error*dt derivative = (error - previous_error)/dt output = Kp*error + Ki*integral + Kd*derivative previous_error = error wait(dt) goto start 一开始将积分设置为零。然后,在循环中,随着时间的推移,它会整合错误。当我对设定值进行(正)更改时,误差将变为正,积分将随着时间(从头开始)“消耗”这些值。但是我不明白的是,当误差稳定回到零时,积分部分仍将具有一定的值(随着时间的推移而产生积分误差),并且仍将对控制器的输出值有所贡献,但不应这样做,因为如果误差为零, PID的输出也应该为零,对吗? 有人可以解释一下吗?
12 control  pid 


1
具有重叠效果的多个控制回路
我熟悉使用PID在有单个输出和单个错误信号的情况下执行闭环控制,以了解输出达到所需设定点的程度。 但是,假设有多个控制回路,每个控制回路具有一个输出和一个误差信号,但是这些回路不是完全独立的。特别是,当一个回路增加其执行器信号时,这将改变系统中其他回路的输出影响。 举一个具体的例子,想象一个与电阻器串联的电压源,在六个并联的可调电阻器的系统上施加电压。我们可以测量通过每个电阻器的电流,并希望通过调节电阻来独立控制每个电阻器的电流。当然,这里的技巧是,当您调节一个电阻器的电阻时,它会改变并联组的总电阻,这意味着它会改变分压器与电压源电阻之间的压降,从而改变通过其他电阻器的电流。 现在,很明显,我们有一个理想的系统模型,因此,通过求解一组线性方程式,我们可以预测所有电阻同时应使用的电阻。但是,闭环控制的全部目的是我们要纠正偏离理想模型的系统中的各种未知错误/偏差。那么问题是:当您拥有具有这种交叉耦合的模型时,实现闭环控制的好方法是什么?
9 control  pid 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.