四轴飞行器PID控制器

时间:2014-01-13 14:16:19

标签: robotics control-theory

上下文

我的任务是为微型四轴飞行器设计和构建速度PID控制器,而不是在室内飞行。四轴飞行器飞行的房间配备了基于摄像头的高精度室内跟踪系统,可以为四轴飞行器提供速度和位置数据。由此产生的系统应该能够接受每个轴(x,y,z)的目标速度,并以该速度驱动四轴飞行器。

四轴飞行器的控制输入是侧倾/俯仰/偏航角度和高度的推力百分比。

我的想法是为每个轴实施一个PID控制器,其中SP是该方向上所需的速度,测量值是跟踪系统提供的速度,输出值分别是滚动/俯仰/偏航角度推力百分比。

不幸的是,因为这是我第一次接触控制理论,我不确定我是否正朝着正确的方向前进。

问题

  • 我理解基本的PID控制器原理,但它仍然存在 我不清楚如何将速度(m / s)转换成滚动/俯仰/偏航 (弧度)只加总误差并乘以常数? 是的,速度和滚动/俯仰是成正比的,它也是如此 意味着通过乘以正确的常数产生正确的 导致

  • 对于垂直速度控制器的情况,如果速度设置为0,则四轴飞行器实际上应保持其高度而不上升或下降。如何将这个与PID控制器集成在一起,以便当误差实际为0时推力值不为0(应该保持悬停而不是下降)?我应该在输出中添加一个常量项吗?

  • 一旦系统实施,这将是一个好方法 调整PID增益参数?手动试错?

  • 系统开发的下一步是附加层 位置PID控制器,作为设定点所需的 位置(x,y,z),测量位置由室内提供 跟踪系统和输出是x / y / z速度。这是一个好方法吗? 分离这些PID控制层的原因是该项目是一个促进可重用性的更大框架的一部分。使用单层PID控制器直接将位置坐标作为设定值并输出滚动/俯仰/偏航/推力值会更好吗?

3 个答案:

答案 0 :(得分:1)

  • 这是基本的想法。理论上,您可以在系统中使用几个常量来从一个单元转换为另一个单元。在您的情况下,P,I,D常数将隐含地包含正确的转换因子。例如,如果在一个理想化的系统中你想要通过反馈来控制角度,P = 0.5度,你可以访问的是速度,你知道5度倾斜给出1 m / s,那么你会编程P控制器将测量速度乘以0.1,结果将是角度的控制输入。
  • 我认为最好的方法是实现一个SISO PID控制器,不是高度(h),而是垂直速度(dh / dt),推力百分比作为输出,但我不确定。
  • 不幸的是,如果您对参数没有预先了解,那将是唯一的方法。如果四轴飞行器坠毁,我建议一个不会造成太大伤害的环境......
  • 这听起来像是一个很好的方式

答案 1 :(得分:1)

我可能会对您的博客感兴趣:http://oskit.se/quadcopter-control-and-how-to-really-implement-it/

基本原理很容易理解。调整要困难得多。我花了最多的时间来实际知道要输入pid控制器的内容以及变量上的+和 - 符号之类的小东西。但最终我解决了这些问题。

测试PID控制器的最佳方法是使用某种方法动态设置值,这样您就不必每次都重新编译固件。我在我工作的四轴飞行器固件中使用mavlink。使用mavlink,可以使用支持mavlink协议的任何地面控制软件轻松配置直升机。

从小处开始,使用现成的控制器构建一个工作的直升机,然后自己编写。然后测试并调整它并进行实验。除非您自己尝试构建直升机,否则您永远不会真正了解PID控制器。我的裸机软件开发库可以帮助您更轻松地编写软件,而无需担心硬件驱动程序的实现。链接:https://github.com/mkschreder/martink

答案 2 :(得分:0)

如果您使用的是python编程语言,则可以使用ddcontrol框架。 您可以通过SISO数据估算传递函数。为此,可以使用tfest函数。然后,您可以使用pidopt函数来优化PID控制器。