我正在尝试在Simulink上模拟四轴飞行器模型。我想为每个X,Y,Z和phi,theta,psi角度实现PID控制器。 PID会获取误差作为输入,并将其最小化。
对于X,Y和Z,用户输入所需的值,并根据加速度计数据计算出实际值,因此,误差为所需的设定值-实际值。

对于phi,theta和psi,实际值可能是从陀螺仪和加速度计(传感器融合)获得的,但我实际上并不知道如何计算所需的值因为用户通常感兴趣的是提供所需的位置值X,Y和Z,而不是角度值,所以用户通常会对它们的值有所了解!缺少期望值会妨碍我计算PID控制器所需的角度误差。

#1 楼

您正在尝试实现比自由度更多的PID。在四轴飞行器中,您只有4个:$ {Z,\ phi,\ theta,\ psi)$,即(Altitude,Roll,Pitch和Yaw)。



通过(http://www.draganfly.com/uav-helicopter/draganflyer-x4/features/stability.php)

有趣的是,从PID的角度来看,您确实对$ \ phi $和$ \ theta $确实具有期望的值:您希望它们都默认为零,以便四轴飞行器稳定地盘旋。 (您也可以将$ \ psi $约束为固定值,例如零,但是由于四轴飞行器是围绕Z轴对称的,因此您真正需要做的就是通过提高$ \ psi中的'D'项来防止过度旋转。 $ PID。)然后可以调整Z PID以确保您可以设置并保持所需的高度。

因此,在最简单的情况下,X和Y PID将最终位于“顶部”其他PID。

换句话说,X和Y PID的输出将(分别)变为所需的$ \ phi $和$ \ theta $角度,从而将四轴飞行器推向所需位置。 (请注意,您必须将与世界相对的所需X和Y转换为与直升机相对的X和Y,以补偿$ \ psi $。此答案有更多。)

还有更复杂的方法控制飞行器的方法,但这是最容易学习的方法之一。

评论


$ \ begingroup $
除了倾斜45度外,四轴飞行器没有足够的自由度来保持X,Y,Z位置。
$ \ endgroup $
–伊恩
2014年1月7日19:27

$ \ begingroup $
是的,它需要改变攻角来校正X和Y位置(在这种四轴飞行器中),因此,不认为它是直接的自由度。
$ \ endgroup $
–迭戈·纳西门托(Diego C Nascimento)
2014年1月7日19:33



$ \ begingroup $
为什么删除您的原始评论?
$ \ endgroup $
–伊恩
2014年1月7日19:43

$ \ begingroup $
我可以自由删除我的评论:)无论如何,它有问题,因此没有太多要补充的内容,这就是为什么我删除了它。
$ \ endgroup $
–迭戈·纳西门托(Diego C Nascimento)
2014年1月7日在20:09

$ \ begingroup $
@Ian通过将ϕ和θ的期望值设置为零,仅能保持其在水平面上的方向(四轴飞行器不会沿X和Y轴移动)。例如,如果要向前移动(沿X方向),则所需的θ值应会改变。我认为有一个方程可用于从所需位置计算所需角度。您能否解释最后一句话“(请注意,您会...”?
$ \ endgroup $
– Moayad Hani Abu Rmilah
2014年1月9日在2:58



#2 楼

将四轴飞行器的状态定义为$ \ bf {x} = \ left [\ begin {matrix} \ mathbf {p}和\ mathbf {v}&\ mathbf {r}和\ mathbf {w} \ end {matrix} \ right] ^ T $其中$ \ mathbf {p} $,$ \ mathbf {v} $,$ \ mathbf {r} $和$ \ mathbf {w} $是位置,速度,角位置和角度直升机的速度。使用PD控制的四轴飞行器的简化过渡模型为:
\ begin {align}
\ dot {\ mathbf {p}}&= \ mathbf {v} \\
\ dot { \ mathbf {v}}&= -g \ mathbf {e} _3 + \ text {exp}([\ mathbf {r}])\ mathbf {e} _3u_1 / m \\
\ dot {\ mathbf {r}}&= \ mathbf {w} + \ frac {1} {2} [\ mathbf {r}] \ mathbf {w} +(1-\ frac {|| \\ mathbf {r} ||} { 2 \ text {tan}(|| \ mathbf {r} || / 2)})\ frac {[\ mathbf {r}] ^ 2} {|| \ mathbf {r} || ^ 2} \ mathbf { w} \\
\ dot {\ mathbf {w}}&= \ begin {bmatrix} k_1(u_2-r_x)+ k_2w_x \\ k_1(u_3-r_y)+ k_2w_y \\ 0 \ end {bmatrix}
\ end {align}
其中$ \ mathbf {e} _3 = \ left [\ begin {matrix} 0&0&1 \ end {matrix} \ right] ^ T $,$ [\ mathbf {r}] $表示$ \ mathbf {r} $的歪斜对称矩阵,$ || \\ mathbf {r} || $表示$ \ mathbf {r} $,$ k_1 $和$ k_2的大小$分别代表比例增益和微分增益,控制$ \ mathbf {u} = \ left [\ begin {matrix} u_1&u_2&u_3 \ end {matrix} \ right] ^ T $由期望的总推力组成$ u_1 $,所需的侧倾角$ u_2 $,所需的d俯仰角$ u_3 $,并假定偏航保持不变。请注意,这使用了PD控制器,因为积分项I通常对于轨迹跟踪无效。

使用该模型,可以给定当前状态$ \ mathbf {x} $,以计算状态如何会改变。当然,这不会为您提供所需的所需角度位置。假设用户期望四轴飞行器到达指定的期望位置$ \ mathbf {p} = [X,Y,Z] ^ T $时将悬停,则我们需要$ \ mathbf {v} = \ mathbf {r} = \ mathbf {w} = \ left [\ begin {matrix} 0&0&0 \ end {matrix} \ right] ^ T $为最终状态。

但是,仍然不能为您提供在初始状态$ \ mathbf {x} _i $和最终状态$ \ mathbf {x} _f = \ left [\ begin {matrix} \ mathbf之间进行过渡的角度{p}和\ mathbf {v}和\ mathbf {r}和\ mathbf {w} \ end {matrix} \ right] ^ T $。为此,您需要一个更高级别的控制器来计算轨迹$ \ pi =(\ mathbf {x} [],\ mathbf {u} [],\ tau)$和$ \ mathbf {x}:[0,\ tau] \ rightarrow \ mathcal {X} $,$ \ mathbf {u}:[0,\ tau] \ rightarrow \ mathcal {U} $用于状态空间$ \ mathcal {X} $和控制空间$ \ mathcal {U} $和一些旅行时间$ \ tau $。该轨迹将在任何给定的时刻为您提供所需的角度。

不幸的是,有很多方法可以计算该轨迹。一种可能性是看我自己在这方面的工作。特别是我的论文名为Kinodynamic RRT *:具有线性动力学的机器人的渐近最优运动规划。