四轴PID整定


13

我在这里继续回答这个问题:在自主模式下,四旋翼飞机不稳定性且简单起飞 ...我想问几个有关为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”(控制横摇的两个电动机)的示例读数:

滚动与电机PWM输入

至于输入/输出:

输入:滚动和俯仰值(以度为单位),由加速度计+陀螺仪的组合获得

输出:使用伺服库的motor.write()函数提供的电机的PWM值


解析度

我解决了问题。就是这样:

  1. 问题的症结在于我实现Arduino程序的方式。我正在使用write()函数更新伺服角度,该角度恰好接受参数中的整数步(或以某种方式仅响应整数输入,100和100.2产生相同的结果)。我将其更改为writeMicroseconds(),这使直升机更加稳定。

  2. 我在一台电动机上加了RPM,而另一台电动机则保持稳定。我对此进行了更改,以增加一台电机的RPM,同时减少另一台电机。这样可以使总水平推力保持不变,这在我试图使该东西保持垂直高度时可能会对我有所帮助。

  3. 我将RPM推到最大极限,这就是为什么四轴飞行器在全油门时始终失去控制的原因。RPM在感觉到倾斜时没有上升的空间。

  4. 我观察到其中一台电动机固有地比另一台电动机弱,我不知道为什么。我将偏移量硬编码到该电机的PWM输入中。

感谢所有的支持。


源代码:

如果您有兴趣,这是我的裸露PID实现的源代码PID源代码

请随时在您的硬件中对其进行测试。欢迎对该项目做出任何贡献。


1
循环的输入是什么,输出是什么?
Guy Sirton 2014年

@GuySirton:更新了我的问题
metsburg 2014年

电动机命令中的平坦部分是什么?看起来有些饱和。您像连续功能一样滚动更改,但是命令看起来非常突然。另外,为什么在侧倾输入保持在相同范围内时,两个电机PWM命令都向上漂移?大概的时间是多少?
Guy Sirton 2014年

1
30秒后失去控制的原因可能与两个命令都向上漂移有关。我认为您正在尝试控制命令之间的差异,但是您不能允许这些命令继续漂移。
Guy Sirton 2014年

@GuySirton:他们没有漂移,我将其从零开始递增,以便在3/4秒内达到特定的稳态。但是,当您说“ 30秒后您失去控制的原因很可能与您的两个命令都上移有关”时,我认为您是对的。如果我不使用此渐进增量,如果我将PWM输入固定在某个水平(低于上面显示的最大输入),则30秒后失去控制的问题就消失了。
metsburg 2014年

Answers:


6
  1. 您的比例增益似乎过高。
  2. 您似乎在不断增加一台电动机的RPM,同时锁定另一台电动机以使系统旋转。这不是一个好的控制策略,因为最终这些策略都会变得饱和,您将失去控制。而且随着时间的增加,您命令系统的能力也会降低。因此,您需要一个更好的系统模型。
  3. 如果您处理#1和#2,则系统会更稳定,但您可能对控制带宽不满意。为了解决这个问题,您需要使系统更坚固,其中包括消除在传感器方面和在控制方面的任何滞后。

3

我将从阅读以下问题开始:调整PID回路的好的策略是什么?

如果我不得不猜测,我会说您的免费过滤器构造方式存在问题。在关闭四轴飞行器马达的情况下,您应该前后倾斜框架,以查看所报告的侧倾/俯仰值是否实际准确。

在我看来,加速度计的输入与滤波器的输出之间似乎存在延迟-振荡可以通过对输入数据的较晚反应来解释。最终的翻转看起来可能是随着时间的推移而累积的集成错误-换句话说,当您的四轴飞行器站在其一边时,它实际上认为它在水平徘徊。

(更新)关于图形,电动机速度持续增加(而不是保持平衡)这一事实意味着您在某处出错。也许您的积分项正在无限增长,您应该为其指定一个合理的最大值。


来回倾斜时,我用滚动值更新了我的问题。我通过降低最大PWM输入解决了最终的翻转。似乎校正值在很高的RPM下不起作用。在高转速下工作时,我可以轻松地用手转动钻机。在较低的RPM时,我会感觉到很大的阻力,并且四旋翼飞机似乎会摆动回到其原始位置(我猜这很好)。因此,“翻身”问题可能是通过降低RPM来解决的(不知道无人机是否会起飞,希望它会起飞)。振荡问题仍然存在。
metsburg 2014年

如果我正确地阅读了该图,则您的侧倾传感器认为它开始于,然后开始振荡,并最终在附近结束。但是在视频中,在一侧。这种差异来自何处? - 5 ± 90 35±90
伊恩

好吧,该图形并不完全适合视频中显示的测试。如上所述,该图来自我对此设置进行的众多测试之一,并且我不记得确切的情况。该图只是为了让您了解输入与输出响应的行为方式,我还想确定输入与输出之间没有太多的滞后(假设环路以150+ Hz的频率运行)。将视频与图表匹配可能没有多大意义。视频中没有用于测试的确切数据集。
metsburg 2014年

我意识到图表有点误导,对此感到抱歉。我将尝试用更准确的图表更新图表。实际上,由于我正在从串行端口绘制数据,因此当我创建此图时,Arduino开发板已与笔记本电脑捆绑在一起。经过一定程度的振荡后,我不得不进行干预并手动降低振荡速度。这就是为什么您看到它在-5度下沉,而实际上在90度左右下沉的原因。稍后,我将尝试更新更准确的图形。
metsburg 2014年

我从图中看到的另一件事是,您的推力总在增加。好像错了
伊恩

1

好吧,这里可能发生了很多事情……

1)您报告的角度正确吗?吵?您可以通过手动倾斜四边形并监视显示的值来轻松检查。

2)您自己的PID实现存在错误。您可以在那里使用受信任的实现来检查您的代码。

3)道具,电机安装方向错误。

4)...


1)我已经倾斜并检查了报告的角度,几乎是正确的,但是绝对嘈杂。2)非常有可能...实际上,我认为这是对它的完整总结:P 3)不太可能,两个顺时针,两个逆时针...我已经多次检查了道具,我猜这种类型的错误会导致了无法控制的严重错误。4)....
metsburg

4)...错误的PID调节比没有PID的情况更糟!
dm76,2014年

是的,我现在看到了。明天我会努力的。我的第一个计划是使用受信任的PID库,第二个计划是将PID的输出从PWM信号更改为roll.pitch校正。
梅斯堡2014年
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.