首页 新闻 会员 周边 捐助

f16自动驾驶仪脚本如何编写可以实现飞机的定点飞行,编写脚本运行后的f16一直在转圈无法控制

0
[待解决问题]

<?xml version="1.0"?>
<autopilot name="f16 Autopilot for Waypoint Navigation">
<!-- 基础自动驾驶属性 -->
<property>ap/attitude_hold</property>
<property>ap/altitude_hold</property>
<property>ap/active-waypoint</property>
<property>ap/altitude_setpoint</property>
<property>ap/heading-setpoint-select</property>
<property>ap/aileron_cmd</property>
<property>ap/heading_hold</property>
<property>ap/yaw_damper</property>

<!-- 航路点导航通道 -->
<channel name="AP Waypoint Navigation">
<!-- 选择航路点作为航向设定点 -->
<switch name="fcs/heading-setpoint-selector">
<default value="ic/psi-true-deg"/>
<test value="guidance/wp-heading-deg">
ap/heading-setpoint-select == 1
</test>
</switch>

<!-- 计算航向误差 -->  
<pure_gain name="fcs/heading-true-degrees">  
  <input>attitude/heading-true-rad</input>  
  <gain>57.2957795</gain> <!-- 将弧度转换为度 -->  
</pure_gain>  
<summer name="fcs/heading-error">  
  <input>-fcs/heading-true-degrees</input>  
  <input>fcs/heading-setpoint-selector</input>  
</summer>  
  
<!-- 修正航向误差(处理360度问题) -->  
<switch name="fcs/heading-error-bias-switch">  
  <default value="0.0"/>  
  <test value="360.0">  
    fcs/heading-error lt -180  
  </test>  
  <test value="-360.0">  
    fcs/heading-error gt 180  
  </test>  
</switch>  
<summer name="fcs/heading-corrected">  
  <input>fcs/heading-error-bias-switch</input>  
  <input>fcs/heading-error</input>  
  <clipto>  
    <min>-33</min>  
    <max>33</max>  
  </clipto>  
</summer>  
  
<!-- 将航向误差转换为控制命令 -->  
<pure_gain name="fcs/heading-command">  
  <input>fcs/heading-corrected</input>  
  <gain>0.01745</gain> <!-- 将度转换为弧度 -->  
</pure_gain>  
  
<!-- 使用PI控制器生成滚转控制命令 -->  
<pid name="fcs/heading-pi-controller">  
  <input>fcs/heading-command</input>  
  <kp>7.0</kp>  
  <ki>0.20</ki>  
  <kd>6.0</kd>
</pid>  
  
<!-- 选择滚转控制命令输出 -->  
<switch name="fcs/roll-command-selector">  
  <default value="0.0"/>  
  <test value="fcs/heading-pi-controller">  
    ap/heading_hold == 1  
  </test>  
  <output>ap/aileron_cmd</output>  
</switch>  

</channel>

<!-- 高度保持通道 -->
<channel name="AP Pitch Altitude Hold">
<!-- 计算高度误差 -->
<summer name="fcs/altitude-error">
<input>ap/altitude_setpoint</input>
<input>-position/h-sl-ft</input>
<clipto>
<min>-150</min>
<max>150</max>
</clipto>
</summer>

<!-- 使用滞后滤波器平滑高度误差 -->  
<lag_filter name="fcs/alt-error-lag">  
  <input>fcs/altitude-error</input>  
  <c1>1</c1>  
</lag_filter>  
  
<!-- 计算垂直速度命令 -->  
<fcs_function name="fcs/hdot-command">  
  <input>fcs/alt-error-lag</input>  
  <function>  
    <quotient>  
      <difference>  
        <value>45.0</value>  
        <quotient>  
          <property>position/h-sl-ft</property>  
          <value>833.33</value>  
        </quotient>  
      </difference>  
      <value>100.0</value>  
    </quotient>  
  </function>  
</fcs_function>  
  
<!-- 计算垂直速度误差 -->  
<summer name="fcs/hdot-error">  
  <input>fcs/hdot-command</input>  
  <input>-velocities/h-dot-fps</input>  
</summer>  
  
<!-- 高度保持开关 -->  
<switch name="fcs/ap-alt-hold-switch">  
  <default value="0.0"/>  
  <test value="fcs/hdot-error">  
    ap/altitude_hold == 1  
  </test>  
</switch>  
  
<!-- 使用积分器和比例增益生成俯仰控制命令 -->  
<integrator name="fcs/integral">  
  <input>fcs/ap-alt-hold-switch</input>  
  <c1>0.001</c1>  
</integrator>  
<pure_gain name="fcs/proportional">  
  <input>fcs/ap-alt-hold-switch</input>  
  <gain>0.03</gain>  
</pure_gain>  
<summer name="fcs/control-summer">  
  <input>fcs/integral</input>  
  <input>fcs/proportional</input>  
  <clipto>  
    <min>-1.0</min>  
    <max>1.0</max>  
  </clipto>  
</summer>  
<pure_gain name="fcs/elevator">  
  <input>fcs/control-summer</input>  
  <gain>-1.0</gain>  
  <output>ap/elevator_cmd</output>  
</pure_gain>  

</channel>

<!--

YAW CHANNEL

-->

<!-- Yaw Damper偏航阻尼器 -->

<channel name="Yaw Damper">
<scheduled_gain name="ap/rudder_control">
<input>aero/beta-rad</input>
<table>
<independentVar lookup="row">velocities/ve-kts</independentVar>
<tableData>
30 0.00
60 -40.00
</tableData>
</table>
<gain>ap/yaw_damper</gain>
<clipto>
<min>-1.0</min>
<max>1.0</max>
</clipto>
<output>ap/rudder_cmd</output>
</scheduled_gain>
</channel>
</autopilot>

AAAlilili的主页 AAAlilili | 菜鸟二级 | 园豆:202
提问于:2024-10-29 18:22
< >
分享
所有回答(1)
0

在分析你提供的F-16自动驾驶仪脚本时,我们可以看到它的结构和一些关键功能。确保飞机能够在定点飞行的过程中,以下是一些可能的原因以及改善建议,分析为什么飞机可能会转圈以及如何修正控制脚本。

可能原因
航向设定问题: 如果 ap/heading_hold 开关总是被激活,会导致飞机持续尝试修正航向,从而可能出现转圈的情况。请检查你的航向设定和误差修正逻辑。

PI控制器参数: 在fcs/heading-pi-controller的增益设置中,kp、ki、kd的值可能不合理,导致飞机在尝试纠正航向时反复超调,从而出现持续转动的问题。

航向选择逻辑: 可能是航向选择逻辑 (fcs/heading-setpoint-selector) 存在问题,导致飞机无法稳定在设定航向。

高度保持与航向保持的冲突: 如果高度保持和航向保持通道之间存在冲突,例如航向设定点和高度设定点不一致,会导致飞机不断调整而导致转动。

输入信号处理问题: 检查各个输入信号,确保它们在期望的范围内,并且正确反映了当前状态,没有信号噪声或干扰。

改善建议
航向设定稳定化:

调整 fcs/heading-pi-controller 的增益值,尝试降低 kp 和 kd,并且增加 ki 值,直至找到合适的控制效果。
确保 ap/heading_hold 只在特定条件下激活,比如通过高度和航向误差检查。
确保航向选择逻辑的有效性:

确保在选择航向时,ap/heading-setpoint-select 被正确设置。例如,确保它只在你希望飞机转向目标航向时激活。
增加调试和日志记录:

在代码中增加日志记录功能,输出每次计算的航向、高度以及控制指令,便于排查问题。
简单调试:

从简开始,首先确保飞机能在一个设定航向(如 0 度)飞行,并确认其航向保持的稳定性,再逐步加入更复杂的功能和逻辑。
加入死区或抗抖动设置:

在控制指令中加入小幅度的死区设置,避免由于微小的误差而造成不必要的调整。
验证各项设置:

确保所有的航路点和相关设置(例如 height setpoint 和航向 setpoint)在合理的范围之内,避免因为数据错误导致的飞行异常。
示例代码调整
保证导航逻辑和控制意图清晰。根据实际结果微调参数,确保控制系统是稳定的。以下是对航向控制部分的一个简化示例:

xml
<channel name="AP Waypoint Navigation">
<!-- 选择航路点 -->
<switch name="fcs/heading-setpoint-selector">
<default value="ic/psi-true-deg"/>
<test value="guidance/wp-heading-deg">ap/heading-setpoint-select == 1</test>
</switch>

<summer name="fcs/heading-error">  
    <input>-fcs/heading-true-degrees</input>  
    <input>fcs/heading-setpoint-selector</input>  
</summer>  

<!-- 计算和修正 -->  
<switch name="fcs/heading-error-bias-switch">  
    <default value="0.0"/>  
    <test value="360.0">fcs/heading-error lt -180</test>  
    <test value="-360.0">fcs/heading-error gt 180</test>  
</switch>  

<summer name="fcs/heading-corrected">  
    <input>fcs/heading-error-bias-switch</input>  
    <input>fcs/heading-error</input>  
    <clipto><min>-10</min><max>10</max></clipto> <!-- 增加限制 -->  
</summer>  

<!-- PI 控制 -->  
<pid name="fcs/heading-pi-controller">  
    <input>fcs/heading-corrected</input>  
    <kp>4.0</kp>  <!-- 调低增益 -->  
    <ki>0.1</ki>  
    <kd>0.5</kd>  
</pid>  

<output>ap/aileron_cmd</output>  

</channel>
总结来说,建议你再仔细检查控制参数,简化验证逻辑,确保控制系统的稳定性。通过逐步调试和微调你会找到最合适的参数设置,确保飞行器能够在预定航路上稳定飞行。

Technologyforgood | 园豆:7775 (大侠五级) | 2024-10-31 08:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册