Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Штраф за отклонение от орбиты #67

Open
bamasa opened this issue Jun 22, 2018 · 3 comments
Open

Штраф за отклонение от орбиты #67

bamasa opened this issue Jun 22, 2018 · 3 comments

Comments

@bamasa
Copy link
Collaborator

bamasa commented Jun 22, 2018

@IrinaPonomareva

сейчас мы штрафуем следующим образом

  • берем разницу между параметрами орбиты в начале и в конце сессии (Кеплер)

  • умножаем на коэффициенты значимости (significance)

  • складываем все что получилось и получаем штраф (deviation)

def update_trajectory_deviation(self, significance=(0.01, 1, 1, 1, 1, 0)):
    """Update trajectory deviation from init the trajectory.

    Note:
        six osculating keplerian elements (a,e,i,W,w,M):
            a (semi-major axis): meters,
            e (eccentricity): greater than 0,
            i (inclination), W (Longitude of the ascending node): radians,
            w (Argument of periapsis), M (mean anomaly): radians.

    Args:
        significance (tuple): multipliers for orbital parameter differences.
    """
    diff = np.abs(
        np.array(self.protected.osculating_elements(self.state["epoch"])) - np.array(self.init_orbital_elements))
    deviation = np.sum(diff * np.array(significance))

        self.trajectory_deviation = deviation

Вопросы:

  • хороший ли это подход

  • какие коэфициенты значимости примерно брать

@IrinaPonomareva
Copy link
Collaborator

IrinaPonomareva commented Jul 11, 2018

  1. Возвращаясь к Issue 66, получается, что есть некий диапазон параметров орбит, внутри которого орбита считается нормальной и обратной коррекции не требует.
    Штрафовать ли аппарат, если он находится внутри этого диапазона, - не знаю. Наверно, можно начислять небольшой штраф за отклонение от серединки. Но этот штраф должен быть сравнительно небольшим. А вот если аппарат вышел из диапазона и нужен маневр для возврата в него – этот штраф должен быть сравнительно большим.

Напишу здесь свои соображения по поводу расчета маневров возврата:

  1. Думаю, что нам нужно придумать, как этот допустимый диапазон параметров орбит формально описать, и дальше реализовать такую схему: у аппарата есть некая начальная орбита и допустимый диапазон; дальше он летает и маневрирует, уклоняясь от космического мусора, после каждого маневра проверяя, что орбита все еще входит в допустимый диапазон; если после очередного маневра орбита совсем сильно отклонилась, то он делает некий общий маневр по возврату к допустимым характеристикам.

  2. А вот дальше мы приходим к пока не полностью решенной задаче маневрирования. Чтобы не лезть в дебри, предлагаю такой набор правил-допущений:
    Мы рассматриваем аппарат на некоторой случайной низкой орбите без каких-то особенностей, и допустимый диапазон у него такой:

    • [min;max] большой полуоси (т.е. для среднего радиуса орбиты);
    • [min;max] для эксцентриситета (т.е. для характеристики вытянутости орбиты);
    • [min;max] для наклонения (т.е. для угла наклона к экватору).
    • Ограничения на долготу восходящего узла я не пишу, потому что я не знаю, как этот параметр корректировать (кроме как регулировать скорость поворота плоскости орбиты из-за сплюснутости Земли – прецессии). Ограничения на аргумент перицентра не рассматриваю, потому что орбиты околокруговые и для целевых задач аппаратов должно быть не особо важно, где именно перицентр, а где апоцентр (высота у них примерно одинаковая). Ограничения на истинную аномалию (т.е. параметр, показывающий, где именно на орбите находится аппарат, - у вас он где-то именовался как «фаза») тоже не пишу, потому что чтобы ее исправить, нужно несколько маневров, получается слишком широкая задача.
      Итого мы задаем ограничения на полуось, эксцентриситет и наклонение.
  3. Если аппарат по какому-то из этих параметров вышел за границы, то:

    • Чтобы исправить полуось при нормальном эксцентриситете, мы можем в принципе дать импульс по вектору скорости на разгон/торможение где угодно, но лучше его давать в апоцентре или перицентре. Если эксцентриситет у нас меньше «номинального» (серединки [min;max] для эксцентриситета), то разгон лучше делать в перицентре, а торможение – в апоцентре (при этом орбита вытягивается и эксцентриситет увеличивается). И наоборот, если эксцентриситет у нас больше «номинального» (серединки [min;max] для эксцентриситета), то торможение лучше делать в перицентре, а разгон – в апоцентре (при этом орбита скругляется и эксцентриситет уменьшается).
    • Чтобы исправить эксцентриситет при нормальной полуоси, нужно делать пару маневров в апоцентре и перицентре. Если мы хотим увеличить эксцентриситет (вытянуть орбиту), то в перицентре мы разгоняемся, а в апоцентре тормозимся, при этом полуось в итоге не меняется, а эксцентриситет растет. Если мы хотим уменьшить эксцентриситет (скруглить орбиту), то в перицентре мы тормозимся, а в апоцентре разгоняемся, при этом полуось в итоге не меняется, а эксцентриситет уменьшается.
    • /С конкретными значениями маневров тут нужно быть внимательными, они определяются из желаемого значения эксцентриситета: [последовательность для задачи увеличения эксцентриситета] зная полуось, определяем радиус апоцентра и перицентра, дальше определяем разгонный маневр в перицентре, который позволит нам получить нужный радиус апоцентра, а после этого определяем тормозной маневр в апоцентре, который позволит нам получить нужный радиус перицентра. Формулки для эксцентриситета в принципе простые.
      Чтобы исправить наклонение, нужно делать боковой маневр, обычно его делают в точке пересечения орбиты с плоскостью экватора. Для нашего случая его можно определить просто как разность векторов: мы знаем текущий вектор скорости в этой точке и можем понять, куда должен быть направлен новый вектор скорости, чтобы плоскость новой орбиты шла под нужным углом к экватору (желаемое значение наклонения). При этом по модулю новый вектор скорости должен быть равен текущему, и наклон этого вектора к плоскости экватора должен сохраняться прежним (чтобы не испортились другие элементы орбиты). В общем, получается геометрия, которую нужно аккуратно посчитать.
      /
    • Если нам нужно корректировать одновременно полуось и эксцентриситет, то формулки действуют те же, что и при коррекции одного эксцентриситета (только в них используется желаемое значение полуоси), и получается 2 маневра.
    • Если нам нужно корректировать одновременно наклонение и что-то еще, то это удобнее всего рассматривать как отдельные группы маневров: отдельно боковые (для коррекции наклонения без порчи формы орбиты), отдельно разгоны-торможения в плоскости (для коррекции чего-там-надо-корректировать).

@bamasa
Copy link
Collaborator Author

bamasa commented Jul 12, 2018

Возвращаясь к Issue 66, получается, что есть некий диапазон параметров орбит, внутри которого орбита считается нормальной и обратной коррекции не требует.
Штрафовать ли аппарат, если он находится внутри этого диапазона, - не знаю. Наверно, можно начислять небольшой штраф за отклонение от серединки. Но этот штраф должен быть сравнительно небольшим. А вот если аппарат вышел из диапазона и нужен маневр для возврата в него – этот штраф должен быть сравнительно большим.

Сейчас перешли к пороговым величинам. Код скоро появится, а диапазон хорошо бы уточнить.

@bamasa
Copy link
Collaborator Author

bamasa commented Jul 12, 2018

немного отредактировал текст - мне тяжело было в нем ориентироваться.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants