上下文
我的任务是为微型四轴飞行器设计和构建速度PID控制器,而不是在室内飞行。四轴飞行器飞行的房间配备了基于摄像头的高精度室内跟踪系统,可以为四轴飞行器提供速度和位置数据。由此产生的系统应该能够接受每个轴(x,y,z)的目标速度,并以该速度驱动四轴飞行器。
四轴飞行器的控制输入是侧倾/俯仰/偏航角度和高度的推力百分比。
我的想法是为每个轴实施一个PID控制器,其中SP是该方向上所需的速度,测量值是跟踪系统提供的速度,输出值分别是滚动/俯仰/偏航角度推力百分比。
不幸的是,因为这是我第一次接触控制理论,我不确定我是否正朝着正确的方向前进。
问题
我理解基本的PID控制器原理,但它仍然存在 我不清楚如何将速度(m / s)转换成滚动/俯仰/偏航 (弧度)只加总误差并乘以常数? 是的,速度和滚动/俯仰是成正比的,它也是如此 意味着通过乘以正确的常数产生正确的 导致
对于垂直速度控制器的情况,如果速度设置为0,则四轴飞行器实际上应保持其高度而不上升或下降。如何将这个与PID控制器集成在一起,以便当误差实际为0时推力值不为0(应该保持悬停而不是下降)?我应该在输出中添加一个常量项吗?
一旦系统实施,这将是一个好方法 调整PID增益参数?手动试错?
系统开发的下一步是附加层 位置PID控制器,作为设定点所需的 位置(x,y,z),测量位置由室内提供 跟踪系统和输出是x / y / z速度。这是一个好方法吗? 分离这些PID控制层的原因是该项目是一个促进可重用性的更大框架的一部分。使用单层PID控制器直接将位置坐标作为设定值并输出滚动/俯仰/偏航/推力值会更好吗?
答案 0 :(得分:1)
答案 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)