我对四旋翼位置控制器的实现有疑问。
在我的Matlab模型中,四旋翼有4个输入:所需的高度($ Z_ {des} $)和所需的姿态角($ \ Phi_ {des} $,$ \ Theta_ {des} $,$ \ Psi_ { des} $),它反映了模型的微分方程描述的运动(请参见最后一张图片)。



深入了解已实现的Matlab动态模型。正如您所看到的,它具有类似于内部循环控制器的结构:



无论如何……它完美地“悬浮”在起点上。 (完美的图形:))
现在,我只需要检查一下并实现一种位置控制器,即可使四旋翼飞机从起点到达目标点,通常通过3个坐标$ [X_d,Y_d, Z_d] $。

这很棘手,因为我没有与系统的输入和输出相同的空间状态变量。因此,控制器必须采用三个坐标的向量,并且能够输出3个不同的角度才能到达那里。唯一的例外是高度,因为它会被控制器简单地绕过并且不需要其他计算循环。对于这三个角度,有一个不同的故事...

我的第一个想法是简单地在模拟系统的输出给出的位置和所需的位置之间创建一个反馈,如上图所示。 br />但这引起了另一个问题:我的四旋翼模型解决了以下方程组:

$$
\ large \ cases {
\ ddot X =(\ sin {\ psi} \ sin {\ phi} + \ cos {\ psi} \ sin {\ theta} \ cos {\ phi})\ frac {U_1} {m} \ cr
\ ddot Y =(-\ cos {\ psi} \ sin {\ phi} + \ sin {\ psi} \ sin {\ theta} \ cos {\ phi})\ frac {U_1} {m} \ cr
\ ddot Z =(- g +(\ cos {\ theta} \ cos {\ phi})\ frac {U_1} {m} \ cr
\ dot p = \ frac {I_ {YY}-I_ {ZZ}} {I_ { XX}} qr-\ frac {J_ {TP}} {I_ {XX}} q \ Omega + \ frac {U_2} {I_ {XX}} \ cr
\ dot q = \ frac {I_ {ZZ }-I_ {XX}} {I_ {YY}} pr-\ frac {J_ {TP}} {I_ {YY}} p \ Omega + \ frac {U_3} {I_ {YY}} \ cr
\ dot r = \ frac {I_ {XX}-I_ {YY}} {I_ {ZZ}} pq-\ frac {U_4} {I_ {ZZ}}
}
$$

,这意味着他们期望(如上面的matlab模型一样)所需的角度和高度。
但是现在我需要反过来:给定所需位置,计算出正确的角度!!!
对于方向来说,解决方案真的很简单,因为我可以编写类似以下内容的东西:对于其他两个角度,这并不是那么简单。那么我现在该怎么办?只是“反转”给定的方程以获得所需的角度?

另一个想法可能是实现简单的PD或PID控制器。考虑到我可以使用Simulink进行非常快速的实验并获得很好的结果,因此这要容易得多。但是问题又来了:如何从所需位置获得所需角度?

评论

与该问题有关,目前尚未答复。

以及您如何计算Vy和/或Vx ...并且您是否有这个想法的出处或论文?谢谢!

看这篇文章:链接

我正在执行类似的操作。我已经安装了姿态控制器,但是我不知道如何做位置控制器。您最终是如何实现的?

有关此主题的任何数字或更多信息?

#1 楼

到目前为止,最常见的解决方案是使用2个单独的控制器。内环控制器就是您已经拥有的东西:它跟踪角度和高度命令。

外环控制器假定角度被完美跟踪,并将角度视为输入,而不是单独的状态。因此,它获取位置误差并将其转换为所需的横滚/俯仰(通过PID,就像使用控制器来计算所需系统输入的任何其他系统一样),并将这些所需的角度传递到内环控制器中。 />
有道理吗?

如果您想变得更复杂,则外环控制器可以定义所需的加速度。使用更复杂的数学,您可以将其转换为所需的角度。从理论上讲这比较干净,但是在实践中您仍在调整PID循环,因此实际的好处可能无法证明时间和精力的合理性。

------------编辑- ---------

详细说明。外循环看起来像这样。 (为简单起见,假设yaw = 0) d)+ k_ {d,y}(v_y-v_y ^ d)+ k_ {i,y} \ int_0 ^ t(yy ^ d)dt
\\
\ hat {\ theta} ^ d&= -k_ {p,x}(xx ^ d)= k_ {d,x}(v_x-v_x ^ d)-k_ {i,x} \ int_0 ^ t(xx ^ d)dt
\ end {align}
$$
其中$ \ hat {\ phi} ^ d $是所需的侧倾角,$ \ hat {\ theta} ^ d $是所需的俯仰角。当偏航$ \ ne $ 0时,您要将两者结合。像
$$
\ begin {align}
\ phi ^ d&= \ cos(\ psi)\ hat {\ phi} ^ d-sin(\ psi)\ hat { \ theta} ^ d
\\
\ theta ^ d&= \ sin(\ psi)\ hat {\ phi} ^ d + cos(\ psi)\ hat {\ theta} ^ d
\ end {align}
$$
其中$ \ psi $是偏航角(仅供参考,我可能在这里有错误的符号)

然后,在内循环中,您拥有现有的控制器。

评论


$ \ begingroup $
是的,这很有道理。我唯一不清楚的是:给定一个将位置转换为所需角度的外环控制器,我应该在哪里放置PID控制器?您的解释很清楚,但是如果您可以提供一个简单的数字来更好地理解它会有所帮助。谢谢!
$ \ endgroup $
–戴夫
14-10-6在7:06



$ \ begingroup $
您表示的内部/外部循环类似于:模式或我错了?
$ \ endgroup $
–戴夫
14-10-6在7:13



$ \ begingroup $
是的,您链接到的图是内部/外部循环控制器的类似示例
$ \ endgroup $
–ryan0270
2014年10月6日12:13

$ \ begingroup $
瑞安。谢谢,但是对我没有太大帮助。我应该知道在外部控制器中放置一些PID控制器的位置。雷格斯
$ \ endgroup $
–戴夫
2014年10月8日,12:33

$ \ begingroup $
我编辑了答案以显示外循环方程
$ \ endgroup $
–ryan0270
2014年10月8日,12:47

#2 楼

我有个建议。我在px4控制器上工作了一段时间。对于位置控制,它将位置作为输入,并通过反馈(PID)产生所需的加速度。由于四轴飞行器可以生成acce。在主体Z轴上,从这个初步想法开始,您可以将所需的推力(矢量)转换为姿态命令,并使用内部回路进行姿态控制器。