我正在编写机器人滑盖升降机的代码。我可以准确地获得升力的位置,但我希望能够保持升力的位置几乎没有振荡(小的高频振荡应该很好)。我正在使用PID控制循环,我花了很多时间来调整它。然而,由于重力有助于降低速度,但在试图上升时减速,因此无法很好地调整PID。现在,当它试图保持其位置时,它会缓慢上升到目标位置,然后一旦到达目标位置,只是几乎不会超过下一次更新,它会再次下降,然后再次重复该过程。
我正在考虑获取PID计算的原始功率值,并简单地为它补充一些常数以补偿重力,但我无法访问PID计算,因此我必须自己编写PID代码
这个修改过的PID循环是否有效或是否有另一个控制循环有助于弥补这种不对称情况?
作为参考,我使用操纵杆控制升降机。我申请移动升降机,然后每当我停止供电时(操纵杆处于0位置),PID开始尝试保持当时的位置。
答案 0 :(得分:2)
这是一个经典示例,您可能需要在控制循环中使用前馈术语。
在上述模型中,反馈补偿器是您的PID回路,它将您的错误信号转换为执行器命令。前馈补偿器是一种将所需角度(在此示例中为 r )转换为执行器命令的计算。
由于您知道作用在系统上的重力,因此可以估算出执行器抵消该力所需的扭矩量。这就是重力补偿。
执行器所需的重力补偿扭矩为 扭矩=力*距离。 (请确保您的单位对于此计算是正确的!)。
力是元素的重量或质量*重力。
但是请谨慎计算距离!因为力是指向重力方向的向量,所以所需的距离只是距执行器中心的水平距离。该距离将取决于幻灯片的当前角度。此计算将类似于Distance = cos(theta)* x。
假设执行器的输出是扭矩(或可能是电流),则此计算将为输出= P 误差+ I (积分误差)+ D *(速度误差) +前馈。
您希望PID反馈仅消除错误。这样,当幻灯片位于设定位置时,前馈项会将其固定在原位,并且PID回路将纠正任何错误。如果您的前馈模型完全正确,则您的PID增益都可以设置为零,并且可以正常工作(但是该模型并不正确,这就是为什么需要反馈的原因)。
顺便说一句,这个问题更适合机器人堆栈交换。您可能会在那找到更多问题的答案。
答案 1 :(得分:0)
如果你设置了太高的积分项,你会得到更多的超调......为了抑制振荡,你应该仔细设置微分项,而不要过多地使用它。 (令人生畏,不是吗?)
尝试从P = 0开始,I = 0,D = 0.升高P直到系统振荡为止。然后放一些D项来抑制那些振荡。然后放一些I term来得到0稳态错误。
为了充分利用重力问题进行调整,我建议使用增益调度方法,从而调整并使用一个PID上升,另一个PID下降。
如果不满意,可以尝试一些自适应控制技术,如模型参考自适应控制。