Apollo

High-Level Project Summary

We are developing simple-to-use yet powerful and feature-rich International Space Station (ISS) tracking system based on the equation of orbital mechanics, and estimation algorithms. The ISS has made it possible for the human being to have an active ongoing presence in the space, which scientists see exceptionally helpful to closely study micro-gravity effects on the astronauts, different plants, and bacteria. So, developing such system serves as great chance for people to get a sense of what is going on with the ISS world. The system implements some features like, sun-tracking solar panels, browsing past and future orbits, changes to ISS, and recent research activities.

Detailed Project Description

The core of the project is the idea of tracking the ISS whether live, future or past trajectory. To be able to browse the past and future coordinates of the ISS, an orbit propagator had to be implemented. The notion of orbit propagator is quite simple and can be further defined at any given time. In fact, Orbit propagation is the determination of both position and velocity vectors at any instant of time given some initial conditions. 


So, we begin by querying the live state vector of the ISS or any other point in time depending on the time we want to browse the coordinates, so that point serves as the zero for our system. The crucial step after that is the conversion of that state vector to Keplerian elements why is that?! As the orbits of most satellites are not circular, so we cannot simply compute the trajectory; however, the majority of orbits are elliptic and inclined to the equatorial plane, this means we have to define a new framework for a better description of the satellite motion in its orbit around earth. The reference frame we are using is Earth-centered Inertial (ECI), which means that the center of the earth is fixed at the origin, the x-axis is pointing towards the vernal equinox, the z-axis points to the north pole (rotation axis), and finally, the y-axis is the cross product of x and z axes. Keplerian elements or orbital elements are a bunch of angles and vectors describing how the orbit is placed relative to the equatorial plane, which is the reference plane in this frame of reference. The orbital elements are:

 - eccentricity vector - directed from apoapsis to periapsis and its magnitude is related to the shape of the conic (orbit).

 - semi-major axis - distance from apoapsis to periapsis

 - angular momentum- the cross product of position and velocity vector.

 - inclination - the angle between the equatorial plane and orbital plane

 - line of nodes vector - the vector formed by the intersection of equatorial plane and orbital plane.

 - Right Ascension of Ascending Node - the angle between x-axis and line of nodes vector

 - Argument of periapsis - the angle between eccentricity vector and line of nodes vector.

 - True anomaly at time t0 - defines the position of the body in the orbit at t0.

 These orbital elements are computed in terms of position and velocity vectors once the class Propagator is instantiated. Then we compute the true anomaly at the given time by computing Kepler’s equation of mean anomaly and eccentric anomaly and we convert back to position and velocity vectors through a closed form solution. That is how the propagator works in nutshell. However, we might encounter slight deviations in the output from the real sensory data from NASA API. One way to solve this is Unscented Kalman filter 

 

As mentioned, our propagator exploits the fundamental equations of orbital mechanics to provide a continuous prediction of the orbital state vector.


But to provide real-time tracking capabilities, a recursive state estimation algorithm was used to incorporate sensory data from NASA's Open Data Portal.

The portal provides the best estimates of the ISS location and we have used it to develop a data fusion algorithm that estimates the current best estimate of the orbital state vector between our propagator and the portal's data.


The algorithm used was the Unscented Kalman Filter (UKF) algorithm. The UKF is a derivative-free instantiation of the Bayes optimal filter for recursive Bayesian state estimation for linear/linearized models and assumed Additive White Gaussian Noise (AWGN)


The UKF is derivative-free in the sense that it does not rely on a Taylor expansion of the nonlinear model. Consequently, there is no explicit need to compute any Jacobians or Hessians of our model's state transition matrix. Rather, it relies on a stochastic form of linearization and the Unscented Transform

The derivative-free nature of the UKF provides better numerical stability and robustness against any kind of the discontinuity.


All of the previous attempts to build a nearly perfect and error-free back-end can not be more useful than an organized and to-the-point web application, which, in turn, displays the data in a creative and engaging manner. We have implemented sun-tracking solar panels. This was a quite challenging task as there were many conversions from the heliocentric reference frame to geocentric RF to ISS point of view besides heavy computations in projection matrices to adjust the panels to a new normal vector. In addition, we have implemented a smooth and simple timeline to display both coordinates of the ISS with some improvements that took place during this period of time aside from the research projects and mad experiments! To provide a straightforward trouble-free experience, we had to optimize the web application rendering method. An intelligible algorithm, frustum culling, had been implemented to save wasted computational resources by rendering only the parts that fall into the field of view of the camera. 


One feature, which is so important but so hard to implement, is simulating the space debris with a novel algorithm to avoid collisions with the ISS. 


Throughout the project, we have used Python as the main back-end language to implement the propagator, Kalman filter, and solar tracking module. Python is fast in prototyping, interfacing, and putting things together. On the front-end side, React.js and Three.js with Fiber core. React is a great open-source js library for single-page apps based on virtual dom.  

Space Agency Data

We relied on NASA datasets to get the state-vector of the ISS both in the past and the current ones. In addition, we have used accurate 3d-models of ISS provided by NASA 3d-models website.

Hackathon Journey

Originally, we chose the challenge as it involves a handful amount of mathematical, analytical, and even creative thinking. In the beginning, we divided the project into small chunks (modules), so that everyone can efficiently focus on his part. At the same time, we had a fun time collaborating and solving problems together following the process of thinking mathematically and computationally to provide the most convenient experience to the user. Our process of coming over the challenge was merely brilliant, we began by listing the features we wanted to implement, then we search literature and tutorials for a better understanding and to solidify the idea. After that, we would list possible solutions, implement what is possible, and finally try to refine and optimize the solution as possible to remain stick to the standards. I would thank my team members for their excellent collaboration and cheerful, stress-mixed moments. 

References

Data:

  • ISS Trajectory Data - https://spotthestation.nasa.gov/trajectory_data.cfm
  • ISS 3d-Model https://solarsystem.nasa.gov/resources/2378/international-space-station-3d-model/
  • Periodic series https://github.com/ctdk/vsop87


Resources:


  • Astronomical Algorithms (book)
  • An Introduction to Mission Design for Geostationary Satellites. (book)
  • A Precise Algorithm for Computing Sun Position on a Satellite, Journal of Aerospace Technology and Management. (journal paper)
  • A Fast Prediction Algorithm of Satellite Passes, Journal of Guidance, Control, and Dynamics.(journal paper)


Tools:

  • Python 
  • numpy /matplotlib
  • Javascript
  • React.js
  • Three.js
  • VS code
  • Manim

Tags

orbital mechanics, state estimation, web app, orbit determination