AI-Tool Satellite Position Prediction

Within the past two decades, the number of resident space objects (RSOs - artificial objects that are in orbit around the Earth) has nearly doubled, from around 11000 objects in the year 2000 to around 19500 objects in 2019. This number is expected to rise even higher as more satellites are put into space, thanks to improvements in satellite technology and lower costs of production. On the other hand, the increase in the number of RSOs also indirectly increases the risk of collision between them. The important issue here is the reliable and accurate orbit tracking of satellites over sufficiently long periods of time.Failure to address this issue has led to incidents such as the collision between the active US Iridium-33 communication satellite, and the inactive Russian Kosmos-2251 communication satellite in February 2009. In fact, this accident increased the amount of space debris by 13%, as shown in the figure below:
The aim is to use machine learning (Tensorflow) to predict the positions of 600 satellites in orbit around the Earth. The original datasets were obtained from the International Data Analytics Olympiad 2020 (IDAO 2020) Competition, provided by the Russian Astronomical Science Centre. For demonstration purposes, we limit the prediction to the x-axis of the satellite ECEF coordinates. Similar predictions could be extended for y and z axes.
Ref: https://www.kaggle.com/idawoodjee/predict-the-positions-and-speeds-of-600-satellites

Essential pre-conditions

  • Data

      • Input: simulated x-axis of ECEF satellite positions

      • labels: actual x-axis of ECEF satellite positions

  • Hyperparameters and neural network

      • model type = RNN/Regression/LSTM

      • loss = mean absolute error

      • metric = mae

      • optimizer = Adam

Configurable options

  • Data

    • Header_flag: Enabler to allow taking several steps as one input training frame. Defaults to False

    • sliding.enable: Enable/Diable the sliding over X data with sliding win. Defaults to False

    • sliding.win: Sliding window size (number of rows). Defaults to 1

    • sliding.dup_row: which row to duplicate in case of remaining rows is less than sliding.win

    • label_adjust_cond: The math operation to be applied over the sliding window data. E.g. 'avg' -> calculate Avg(sliding.win). Options: avg, min, max. Defaults to 'avg'.

    • sliding.replace_labels: Enabler to generate new labels based on Label_adjust_cond. Defaults to False

    • round: Number of decimal digits the user would like round up the data. Defaults to 0

    • separate_data_by_col: Column index by which the data will be treated as separated chunks depending on unique values in the indicated column and this column will be ignored during training as it is the index column

  • Hyperparameters and neural network

    • lr: Learning rate

    • l2reg: L2 regularization

    • epochs: Number of training epochs

    • model_type: Neural network type

    • es_baseline: Training early stopping if val_acc < es_baseline for es_patience epochs

    • es_patience: After how many epochs to stop training if early stopping condition is true

    • build_model: Enabler to allow building a new model. If False the model will be loaded and retrained. Defaults to True

    • neu_nums: List of number of neurons per each neural network layer to build

    • loss: Training loss. Defaults to 'binary_crossentropy'

    • metrics: Training metric. Defaults to 'accuracy'