我可以直接对四轴飞行器的轴速度进行 PID 控制吗

Can I implement PID control directly on velocity along axis for a quadcopter

我正在制作一个自动四轴飞行器:没有无线电发射器-接收器,四轴飞行器按照预编程指令自行飞行。

几乎所有四轴飞行器都在 throttle/yaw/pitch/roll 上实现 PID,因为这 4 个轴直接在遥控器上。然而,对于没有控制器的自动化系统来说,这有点不方便。作为没有用户输入的自动四轴飞行器,沿 x/y/z 轴的速度更受关注,因为:

  1. 保持平衡(yaw/pitch/roll=0)不等于保持静止,首先,制造上会有一些误差,所以它可能还是有一定的加速度。第二,即使没有加速度,它也可以有速度,导致它在space中漂移。由于没有用户输入,它无法自行修复漂移。再说了,如果有风,它可能会被吹走,它甚至认为它是平衡的。

  2. 订单大多在"go to position(x,y)"或"keeping velocity x, fly above position(x,y) and start camera video capture."左右给出。这些命令不能直接翻译成yaw/pitch/roll。

所以基本上我有两个想法:

  1. 在 yaw/pitch/roll/height 上实施 PID 并使用第二个 PID 回路来控制速度。第二个 PID 回路将所需速度和当前速度作为第一个回路所需的输入和输出 yaw/pitch/roll。

  2. 直接在速度上实现 PID。 pid 循环将所需速度和当前速度(通过对加速度计的加速度进行积分)作为 4 个电机的输入和输出 PWM 宽度。

有没有人尝试过想法2?这行得通吗?

PID 将测量值映射到控制值。如果您可以可靠地感知速度,则可以使用它来驱动 PID。但是,集成加速度计不会为您提供足够可靠的速度。任何传感误差都会通过积分复合,并可能无限增加您的速度估计值。

四轴飞行器上的 R/P/Y PID 不直接控制电机的 PWM,它们控制横滚、俯仰和偏航速率,然后将速率转换为推力,然后将推力分量转换为各种电机,然后将推力转换为 PWM。有关提示,请参阅 ArduPilor MotorMatrix code

您可以在选择速度和电机之间的任何位置放置 PID,但您可能需要 'velocity' 和 'PWM[1-4]' 之间的一些中间 control/state 变量来平衡事物并协调飞行。