SOCIS 2017 Ismael Medina - poliastro/poliastro GitHub Wiki

About me

  • Name: Ismael Medina
  • LinkedIn
  • CV
  • Studies: Currently on the fourth year of the Double Degree in Mathematics and Physics at the Complutense University of Madrid
  • Languages: Spanish (native), English
  • Platforms: Linux, Windows 10
  • Age: 21

Experience

I have experience with Matlab and Python, which I’ve been using for university as well as personal projects. Though not related with astrophysics, I’m currently collaborating with the Biomathematics department doing modeling of biological systems and data analysis, which I think gives me a valuable experience in developing tools for real research and programming to solve real problems. You can also see here a personal project I carried out using Python.

Besides, my studies give me a wide range of tools and I’m used to the analytical and the numerical approach when confronted to a problem. I have the highest marks in the differential equations subjects (ordinary and partial) and in computing laboratory, and also good marks in classical mechanics (you can see my academic history here).

Proposal

The goal of my project is developing algorithms for Low thrust Maneuvers and the Mission objects. I’ve already read the MSc thesis linked in the Ideas Page and think I’ve understood the main ideas. After reading the User guide and running those examples of poliastro, I’ve begun the implementation of these low thrust algorithms from the basis of the code attached to the MSc thesis, in particular the simplest change of Combined semimajor axis and inclination change (I’ve chosen this because it was the first with numerical validation). I’ve also included an optional parameter in the cowell function so that we can get intermediate states in a low thrust propagation. These are some plots from different perspectives for the first case studied in the MSc thesis (and here you can find a .gif). Notice that the proportions are not real as we don’t have the same scale in all the axes (the orbits are circular).

Regarding the specific low thrust maneuvers I would implement, I would first get those already studied in the MSc thesis gathered in a low_thrust function, and later ponder with my mentor what additional maneuvers are more interesting to include.

I also have some ideas concerning the intermediate states: of course we could get them through numerical integration, but the high cost of this approach calls for a more efficient one. I’ve seen in the MSc thesis we have analytical expressions for the derivatives of the classical orbital elements in some cases of low thrust maneuvers, so we could simply integrate them, which (I assume) would reduce the computation cost. We could see if this is a suitable idea comparing with the numerical solution using scipy.integrate.ode.

Concerning the Mission objects, depending on the result of the ideas mentioned above, we could consider including the evolution of the parameters considered in the low thrust maneuver or directly a list of r and v at different times (for example dividing the time of flight in equal parts). An advantage of the first approach is that, due to the slow and (in some cases) monotonous behavior of the parameters, we could use simple interpolation to get a value between stored points and get a good result, while this is not possible in the case of r and v due to their oscillatory behavior and the orbits being so close, so we would have to use the propagation algorithms. We can see a visual example of this at the next figure: while on the left it is very easy to interpolate the function (this could be the evolution of the semi-major axis, which doesn't vary much in every turn), on the right we would need many more points in order to do the same, compromising the memory.

Finally, we would have to implement some methods in the Mission class (such as getting the osculating orbit at some moment, getting the total cost…) but also it would be interesting to call these low thrust routines directly from an Orbit, implementing them as methods.

In this notebook you can find the code I’ve used for the previous examples above and some ideas for the low_thrust function.

Timeline

  • Weeks 1 to 2: Review of the problem. Rereading the master thesis. Thorough reading of the bibliography. Searching for interesting cases of low thrust maneuvers apart from those of the thesis.
  • Weeks 3 to 5: Implementing the low thrust maneuvers. Checking different approaches: integration of the derivative of the parameters, straightforward cowell propagation… Gather all the control laws in a low_thrust function. It must be modular, this is, new control laws must be easy to implement. Leaving different simulations running at night, with appropriate parameters, to check the effectiveness of this code.
  • Weeks 6 to 7: Developing the Mission class and its methods.
  • Week 8 to 9: Enhancing the propagation API with the new Mission objects and the low_thrust function.
  • Week 10: Optimization of the code.
  • Week 11 to 12: Final testing and mending of final bugs. Writing the documentation.

Coding period and sidenotes

I will finish my exams on the 21th of June, but I have the rest of the Summer to devote myself to the project. Thus, my coding period would be from the 22-23th of June to the same day of September. I think I won't have any problem to speed up a bit my progress if the coding period finishes a bit earlier than that.
These days I've got familiar with poliastro and, reading the MSc thesis, I know what the problems are and have ideas about how to solve them, as you can see above. This, I think, gives me a very good starting point which will save me some time and enable me to focus almost from the beginning on the real project.