我继承了 C++ 中的飞行动力学模拟,它代表了一架带有自动驾驶仪、执行器动力学和固态 IMU 的小型无人机。
因此,它由几个模型组成,一些是连续的(飞行动力学和执行器),与 runge kutta 4 方案集成,一些是离散的(自动驾驶仪和 IMU)。我可以完全控制物理时间步长。自动驾驶仪应该以 500Hz 运行,固态 IMU 以 2000Hz 运行。
我要找到一个“正确的”时间步长值,以便在保持合理计算时间的同时最大限度地减少错误。
我尝试绘制在(16Khz)和其他模拟(500hz、1000hz、2000hz、4000hz、8000hz)下运行模型的最高频率之间的机械能差异我选择了这些频率以便模拟精确地踩到自动驾驶仪和 IMU 的“激活”。
我在由飞行动力学状态变量(速度、位置、旋转速度和欧拉角)组成的 L2 范数上做了同样的事情。
结果与我的预期大不相同:
虽然错误似乎可以接受(errMax ~ 0.3%),但我不明白为什么在 2000 / 4000hz 点附近的错误如此增加。此外,错误似乎不会随着时间步长而减少。这让我对我的方法的相关性感到非常困惑。
有谁知道在混合连续和离散状态模型的模拟中可能导致特定时间步长误差增加的任何原因?
此外,是否有任何相关的物理分析可以让人们获得准确表示模拟状态的规范(以研究所述模拟的收敛性)

