PaperPlane Математическая спецификация текущей модели
Назад к симулятору

Whitepapers

Эта страница фиксирует формулы, которые сейчас используются в симуляторе: геометрию планера, центр масс, локальный поток, аэродинамические коэффициенты, силы, моменты, интегрирование и диагностические метрики.

База BOO 800 mm
Профиль E387 Re 200k
Размах 0.80 m
Масса 170 g

1. Область модели

Самолет считается жестким телом. Аэродинамика считается по набору панелей: крыло, хвостовое оперение и киль. Каждая панель видит собственный локальный поток, получает свои \(C_L\), \(C_D\), \(C_m\), после чего силы и моменты суммируются на центре масс.

Это приближенная инженерная модель для малых планеров. Она не заменяет CFD, X-Plane blade element model или JSBSim FDM, но дает прозрачные формулы для отладки.

2. Константы и единицы

ВеличинаЗначениеКомментарий
\(\rho\)\(1.225\ kg/m^3\)плотность воздуха у земли
\(g\)\(9.81\ m/s^2\)ускорение свободного падения
\(\nu\)\(1.5 \cdot 10^{-5}\ m^2/s\)кинематическая вязкость воздуха
\(deg2rad\)\(\pi / 180\)перевод градусов в радианы
\(rad2deg\)\(180 / \pi\)перевод радиан в градусы

3. Геометрия крыла и оперения

Нос модели является нулевой точкой конструктора. Координаты деталей \(x_{station}\) задаются от носа назад, а в физике положение панели относительно ЦТ переводится как:

\[ r_x = x_{CG} - x_{station} \]

Площадь трапеции

\[ S = b \cdot {c_r + c_t \over 2} \]

Здесь \(b\) - полный размах, \(c_r\) - корневая хорда, \(c_t\) - концевая хорда.

Удлинение

\[ AR = {b^2 \over S} \]

Сужение и средняя аэродинамическая хорда

\[ \lambda = {c_t \over c_r} \] \[ \bar c = {2 \over 3} c_r {1 + \lambda + \lambda^2 \over 1 + \lambda} \]

Положение САХ

\[ y_{\bar c} = {b \over 2} {1 + 2\lambda \over 3(1 + \lambda)} \] \[ x_{LE,\bar c} = x_{LE} + \tan(\Lambda) y_{\bar c} \] \[ x_{AC} = x_{LE,\bar c} + 0.25\bar c \]

Панелизация

Поверхность делится по полуразмаху на сегменты. Для локальной координаты \(\eta \in [0,1]\):

\[ c(\eta) = c_r + (c_t - c_r)\eta \] \[ \Delta S = \Delta b \cdot c(\eta) \] \[ x_{LE,panel} = x - 0.25c_r - \tan(\Lambda){b \over 2}\eta \] \[ x_{AC,panel} = x_{LE,panel} + 0.25c(\eta) \]

4. Центр масс

В расчетном режиме центр масс считается как сумма моментов масс деталей:

\[ x_{CG} = {\sum_i m_i x_i \over \sum_i m_i} \]

Точки приложения масс:

\[ x_{nose} = noseMassX \] \[ x_{fuselage} = 0.48L \] \[ x_{wingMass} = x_{LE,\bar c} + 0.45\bar c \] \[ x_{tailMass} = x_{LE,\bar c,tail} + 0.45\bar c_{tail} \]

Если сумма масс деталей больше заданной массы модели, все массы деталей масштабируются:

\[ k = {m_{model} \over \sum_i m_i} \] \[ m_i' = k m_i \]

Если сумма масс деталей меньше массы модели, остаток добавляется как payload в точку носовой массы:

\[ m_{payload} = \max(0, m_{model} - \sum_i m_i) \] \[ x_{payload} = noseMassX \]

В ручном режиме ЦТ задается от передней кромки крыла:

\[ x_{CG} = x_{LE,wing} + x_{CG,fromWingLE} \]

Положение ЦТ в процентах САХ:

\[ CG_{\%MAC} = 100 {x_{CG} - x_{LE,\bar c} \over \bar c} \]

5. Статическая устойчивость

Для V-образного хвоста эффективная площадь по тангажу уменьшается через проекцию:

\[ S_{tail,pitch} = S_{tail}\cos^2(\Gamma_V) \]

Плечо хвоста и хвостовой объем:

\[ l_t = x_{tail} - x_{CG} \] \[ V_H = {S_{tail,pitch}\max(l_t, 0) \over S_{wing}\bar c} \]

Нейтральная точка в текущей упрощенной модели:

\[ x_{NP} = x_{AC,wing} + \bar c \cdot clamp(0.72V_H,\ 0,\ 0.65) \]

Статический запас:

\[ SM = 100 {x_{NP} - x_{CG} \over \bar c} \]

6. Воздушная среда

Полная скорость воздуха в точке:

\[ \vec V_{air}(x,y,z,t) = \vec V_{wind} + \vec V_{thermal}(x,y,z) + \vec V_{turb}(x,y,z,t) \] \[ \vec V_{wind} = (wind,\ 0,\ 0) \]

Термики

Для каждого термика с центром \((x_0,z_0)\), радиусом \(R\), высотой \(H\) и силой \(w_0\):

\[ d = \sqrt{(x - x_0)^2 + (z - z_0)^2} \] \[ V_{thermal,y} = \begin{cases} w_0 \cdot scale \cdot \left(1 - {d \over R}\right)^2 \left(1 - {y \over H}\right), & d < R,\ 0 \le y < H \\ 0, & otherwise \end{cases} \]

Турбулентность

\[ h_f = 0.35 + 0.65e^{-\max(y,0)/10} \] \[ A = 0.16 \cdot turb \cdot h_f \] \[ p_1 = 0.31x + 0.11y + 0.23z + 0.85t \] \[ p_2 = 0.17x - 0.19y + 0.29z + 1.20t \] \[ p_3 = 0.27x + 0.07y - 0.21z + 0.70t \] \[ \vec V_{turb} = \left( A\sin p_1 + 0.35A\sin(0.63p_2 + 1.7),\ 0.25A\sin(p_2 + 2.1),\ 0.60A\sin(p_3 - 0.8) \right) \]

Турбулентность задается как скорость воздушной массы, а не как добавочная сила. Поэтому она не должна работать как скрытая подъемная сила.

7. Кинематика и локальный угол атаки

Начальное состояние

\[ v_x(0) = v_0\cos(\theta_0) \] \[ v_y(0) = v_0\sin(\theta_0) \] \[ v_z(0) = 0 \]

Скорость точки панели

\[ \vec V_{point} = \vec V_{CG} + \vec \omega_{world} \times \vec r_{world} \] \[ \vec V_{rel,world} = \vec V_{point} - \vec V_{air} \] \[ \vec V_{rel,body} = q^{-1}\vec V_{rel,world}q \]

Базис поверхности

Для горизонтальной поверхности до диэдра:

\[ \hat f = (\cos i,\ \sin i,\ 0) \] \[ \hat n = (-\sin i,\ \cos i,\ 0) \] \[ \hat s = (0,\ 0,\ side) \]

Для вертикальной поверхности:

\[ \hat f = (\cos i,\ 0,\ \sin i) \] \[ \hat n = (-\sin i,\ 0,\ \cos i) \] \[ \hat s = (0,\ 1,\ 0) \]

Угол атаки панели

\[ V_f = \vec V_{rel,body} \cdot \hat f \] \[ V_n = \vec V_{rel,body} \cdot \hat n \] \[ \alpha = clamp\left(\arctan2(-V_n,\ V_f),\ -60^\circ,\ 60^\circ\right) \]

8. Аэродинамические коэффициенты

Табличная поляра

Для профиля E387 используется таблица \(C_L\), \(C_D\), \(C_m\). Между соседними точками применяется линейная интерполяция:

\[ t = {\alpha - \alpha_i \over \alpha_{i+1} - \alpha_i} \] \[ C(\alpha) = C_i + (C_{i+1} - C_i)t \]

За пределами таблицы применяется мягкая экстраполяция:

\[ e = |\alpha_{deg} - \alpha_{edge}| \] \[ d = clamp\left(1 - {e \over 45},\ 0.35,\ 1\right) \] \[ C_L' = dC_L \] \[ C_D' = C_D + 0.0009e^2 \] \[ C_m' = C_m - 0.0015(\alpha_{deg} - \alpha_{edge}) \]

Если табличный \(C_D\) не содержит индуктивное сопротивление:

\[ C_D = C_{D,profile} + {C_L^2 \over \pi \cdot 0.78 \cdot \max(AR, 0.8)} \]

Аналитическая модель для простых профилей

\[ \alpha_e = \alpha - \alpha_{0L} \] \[ C_{L,linear} = C_{L\alpha}\alpha_e \] \[ C_{L,stall} = clamp(C_{L\alpha}\alpha_{stall},\ -C_{L,max},\ C_{L,max}) \]

До срыва:

\[ C_L = clamp(C_{L,linear},\ -C_{L,max},\ C_{L,max}) \]

После срыва:

\[ excess = |\alpha_e| - \alpha_{stall} \] \[ d = clamp\left(1 - {excess \over 55^\circ},\ 0.42,\ 1\right) \] \[ C_L = sign(\alpha_e)|C_{L,stall}|d \]

Сопротивление и момент:

\[ C_{D,i} = {C_L^2 \over \pi \cdot 0.75 \cdot \max(AR, 0.8)} \] \[ s_d = {\max(0,\ |\alpha_e| - \alpha_{stall}) \over 35^\circ} \] \[ C_D = C_{D0} + C_{D,i} + 0.07s_d^2 \] \[ C_m = C_{m0} - 0.025\alpha_e \]

9. Силы и моменты

Динамическое давление и число Рейнольдса

\[ q = {1 \over 2}\rho V^2 \] \[ Re = {Vc \over \nu} \]

Подъемная сила и сопротивление панели

\[ L = qSC_L \] \[ D = qSC_D \]

Направление подъемной силы берется как нормаль поверхности, очищенная от компоненты вдоль потока:

\[ \hat v = {\vec V_{rel,body} \over |\vec V_{rel,body}|} \] \[ \hat l = normalize(\hat n - \hat v(\hat n \cdot \hat v)) \]

Сила в системе тела:

\[ \vec F_{body} = L\hat l - D\hat v \] \[ \vec F_{world} = q_{rot}\vec F_{body}q_{rot}^{-1} \]

Момент панели

\[ \vec M_{Cm,body} = \hat a \cdot qScC_m \] \[ \hat a = \begin{cases} (0,\ 0,\ 1), & horizontal \\ (0,\ 1,\ 0), & vertical \end{cases} \] \[ \vec \tau_{surface} = \vec r \times \vec F_{world} + \vec M_{Cm,world} \]

Суммарные сила и момент

\[ \vec F_{total} = (0,\ -mg,\ 0) + \sum_j \vec F_j \] \[ \vec \tau_{total} = \sum_j \vec \tau_j \]

Демпфирование тангажа

\[ M_q = q_{ref}S_{wing}\bar c(-0.08\omega_z) \] \[ q_{ref} = {1 \over 2}\rho V_{CG,rel}^2 \]

При отсутствии турбулентности боковые силы дополнительно приглушаются:

\[ k_{lat} = \begin{cases} 0.45, & turb > 0 \\ 0.05, & turb = 0 \end{cases} \] \[ F_z \leftarrow k_{lat}F_z,\quad \tau_x \leftarrow k_{lat}\tau_x,\quad \tau_y \leftarrow k_{lat}\tau_y \]

10. Интегратор движения

Шаг симуляции дробится до \(dt \le 0.001s\). Дальше используется явная пошаговая схема.

\[ \vec a = {\vec F_{total} \over m} \] \[ \vec v_{t+dt} = \vec v_t + \vec a dt \] \[ \vec x_{t+dt} = \vec x_t + \vec v_{t+dt}dt \]

Тензор инерции в диагональном приближении

\[ h = \max(0.18\bar c,\ 0.015) \] \[ I_x = {m(b^2 + h^2) \over 12} \] \[ I_y = {m(L^2 + h^2) \over 12} \] \[ I_z = {m(L^2 + b^2) \over 12} \]

Угловое ускорение

\[ \dot\omega_x = 0.22 \cdot clamp\left({\tau_x \over I_x},\ -60,\ 60\right) \] \[ \dot\omega_y = 0.22 \cdot clamp\left({\tau_y \over I_y},\ -60,\ 60\right) \] \[ \dot\omega_z = clamp\left({\tau_z \over I_z},\ -60,\ 60\right) \]

Обновление и демпфирование угловых скоростей:

\[ \omega_i \leftarrow clamp(\omega_i + \dot\omega_i dt,\ -8,\ 8) \] \[ \omega_x,\omega_y \leftarrow e^{-8dt}\omega_x,\ e^{-8dt}\omega_y \] \[ \omega_z \leftarrow e^{-4dt}\omega_z \]

Кватернион ориентации

\[ \dot q = q \otimes (0,\omega_x,\omega_y,\omega_z) \] \[ q_{t+dt} = normalize(q_t + 0.5\dot q dt) \]

Угол траектории:

\[ \gamma = \arctan2(v_y,\ \sqrt{v_x^2 + v_z^2}) \]

11. Диагностические метрики

\[ V = \sqrt{v_x^2 + v_y^2 + v_z^2} \]
\[ {L \over D} = {\sum_j L_j \over \sum_j D_j} \]
\[ W_S = {1000m \over 100S} \]

\(W_S\) выводится в \(g/dm^2\).

\[ V_{stall} = \sqrt{{2mg \over \rho S C_{L,max}}} \]
\[ pitch = \arctan2(f_y,\ \sqrt{f_x^2 + f_z^2}) \] \[ yaw = \arctan2(f_z,\ f_x) \]

12. Оптимизация ЦТ и хвоста

Кнопка оптимизации перебирает ручной \(x_{CG,fromWingLE}\) и угол хвоста. Целевая функция сейчас - максимальная дальность при фильтре невалидных траекторий.

\[ score = \begin{cases} x_{landing}, & valid \\ -\infty, & invalid \end{cases} \]

Траектория считается невалидной, если:

\[ \min(v_x) < 0.2 \] \[ y_{max} > h_0 + 12 \] \[ pitch_{max} - pitch_{min} > 140^\circ \]

Поиск идет в два прохода: грубая сетка \(4mm / 0.5^\circ\), затем точная сетка вокруг лучшего результата \(1mm / 0.1^\circ\).

13. Текущие ограничения

  • Нет полноценной нестационарной аэродинамики и динамического срыва.
  • Нет гибкости крыла, фюзеляжа и V-оперения.
  • Поляра E387 задана для одной области Re, интерполяции по Re пока нет.
  • Киль и V-tail сведены к простым панелям без точной интерференции.
  • Интегратор простой и малошаговый; это удобно для отладки, но не финальная FDM-схема.
  • BOO-пресет пока не валидирован по реальным логам полета.