四轴飞行器PID控制器

xab*_*bre 5 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 控制器直接将位置坐标作为设定值并输出滚转/俯仰/偏航/推力值会更好吗?

小智 1

  • 这就是基本的想法。理论上,您最终可以在系统中使用几个常数来从一种单位转换为另一种单位。就您而言,您的 P、I、D 常数将隐式包含正确的转换因子。例如,如果在理想化系统中,您希望通过 P=0.5(以度为单位)的反馈来控制角度,但您所能访问的只是速度,并且您知道 5 度的倾斜会产生 1 m/s,那么您会对 P 控制器进行编程,将测量到的速度乘以 0.1,结果将是角度的控制输入。
  • 我认为最好的方法是实现一个 SISO PID 控制器,不是在高度 (h) 上,而是在垂直速度 (dh/dt) 上,并以推力百分比作为输出,但我对此不确定。
  • Unfortunately, if you have no advance knowledge about the parameters, that will be the only way to go. I recommend an environment that won't do much damage if the quadcopter crashes...
  • That sounds like a good way to go

  • 经过相当多的尝试和错误后,它成功了。[YouTube 结果视频](https://www.youtube.com/watch?v=kC0z7a7aisg) (3认同)