我在这里继续回答这个问题:在自主模式下,四旋翼飞机不稳定性且简单起飞 ...我想问几个有关为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输入中。
感谢所有的支持。
源代码:
请随时在您的硬件中对其进行测试。欢迎对该项目做出任何贡献。