我试图使用PID控制器通过滚动控制飞机,

查找传递函数时遇到问题,因此我使用以下方法:-


将飞机固定在空气通道中

以固定的步骤更换用于控制侧倾的马达,并检查
因此,我将得到一个侧倾表运动度

接下来是使用Wolfram alpha或
近似神经网络推导非线性函数。


这是正确的方法还是应该尝试另一种方法?

#1 楼

您正确地认为,测量和建模是解决此问题的正确方法。

为了使PID正常运行,您需要能够对误差进行某种程度的线性转换(期望的滚动与实际的滚动)侧倾)校正力(在这种情况下,由控制面提供-副翼角度,受风速和其他因素影响)。

PID的$ k_d $项应说明平面左右滚动时的惯性,因此在测量时不必担心。

在风洞测试中,应该测量的是飞机纵轴上的扭矩,以响应空速(如果有机载传感器,则在X轴和Y轴上)和副翼角度。这将提供有关以下关系的数据:

$$
\ tau_ {actual} = f(\ theta _ {\ text {aileron}},\ text {airspeed} _x,\ text {airspeed} _y,\ text {[其他可衡量的因素]})
$$

您将要近似该函数的反函数-找到$ \ theta _ {\ text {aileron }} $赋予$ \ tau_ {desired} $。是否使用神经网络,wolfram alpha,多元回归或对物理学的了解取决于您自己。最后,您要生成以下形式的建模函数:
$$
\ theta _ {\ text {aileron}} = f(\ tau_ {desired},\ text {airspeed} _x, \ text {airspeed} _y,\ text {[其他可测量因素]})
$$

PID会给您$ \ tau_ {desired} $,而传感器会给您插入此功能的其他因素。

评论


$ \ begingroup $
您能解释更多吗?更多细节
$ \ endgroup $
–RoboMan
2014年9月28日在7:09

$ \ begingroup $
有关PID如何工作或如何编写建模函数的详细信息?
$ \ endgroup $
–伊恩
2014-09-28 13:44

$ \ begingroup $
建模功能,我对PID非常了解,我没有得到的是您上面提到的测试和预期的结果,谢谢您的宝贵时间!
$ \ endgroup $
–RoboMan
2014-09-28 13:47

$ \ begingroup $
您在最初的问题中处在正确的轨道上–您将使用神经网络或其他多元回归来查找产生所需副翼角的函数。您的实验设置和扭矩测量将根据此函数生成数据:$ \ tau_ {actual} = f(\ theta _ {\ text {aileron}},\ text {airspeed} _x,\ text {airspeed} _y等)$ 。您将近似于该函数的逆函数-给定$ \ tau_ {desired} $,找到$ \ theta _ {\ text {aileron}} $。
$ \ endgroup $
–伊恩
2014-09-29 14:38



#2 楼

我不是空气动力学方面的专家,但我想您正在使用一种副翼来获得正确的飞行角度。因此,您的设定点是横摇角(以度或类似的角度表示),输入是电动机位置(以度为单位)。您的方法仅是测量开环增益。这对您设计PID没有帮助。

现在您有了一个具有许多不同值的查找表。您可以只为目标侧倾查找电动机位置,但无法控制侧倾,因此需要测量完整的阶跃响应。

如果将电动机设置为飞机的特定位置不会立即使目标滚动。飞机将再滚动一段时间。该时间段可能很短,但是可以测量,您(作为控件设计者)有兴趣了解系统在这种动态状态下的反应。

您应该更改方法!
一种可行的解决方案(还有其他解决方案)是通过阶跃响应来识别系统。
当您将电动机从0旋转到特定速度时,您只需测量滚动随时间变化的度数即可。位置。
然后您可以继续使用mathematica或matlab

评论


$ \ begingroup $
我理解的是在换位时要特别取所有点,那空速呢?
$ \ endgroup $
–RoboMan
2014-09-28 7:10

$ \ begingroup $
空速可以被视为另一个参数(就像伊恩在回答中写的那样)。您的目标应该是取决于不同输入变量(目标角度,空速等)的系统阶跃答案。
$ \ endgroup $
– TobiasK
2014年9月29日在7:20