yandexdataschool / satellite-collision-avoidance

RL for optimal satellite collision avoidance maneuvres
25 stars 7 forks source link

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

Open bamasa opened 6 years ago

bamasa commented 6 years ago

@IrinaPonomareva

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

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 commented 6 years ago
  1. Возвращаясь к Issue 66, получается, что есть некий диапазон параметров орбит, внутри которого орбита считается нормальной и обратной коррекции не требует. Штрафовать ли аппарат, если он находится внутри этого диапазона, - не знаю. Наверно, можно начислять небольшой штраф за отклонение от серединки. Но этот штраф должен быть сравнительно небольшим. А вот если аппарат вышел из диапазона и нужен маневр для возврата в него – этот штраф должен быть сравнительно большим.

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

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

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

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

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

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

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

bamasa commented 6 years ago

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