SOCIS 2017 Antonio Hidalgo - poliastro/poliastro GitHub Wiki

About me

Name: Antonio Hidalgo Galindo

Age: 21

Github: anhiga

e-mail: [email protected]

Studies: I’m finishing my Bachelor’s Degree in Aerospace Engineering at Universidad Politecnica de Valencia, and also studying a CFGS (the Spanish equivalent of Higher Vocational Training Course) in Web Application Development.

OS: Linux and Windows.

Background and skills

I have been interested in Computer Science since I was a child, and started programming with Visual Basic, making little programs and GUIs, and learning the basics of C, C++ and Java in the highschool. When I finished highschool, I decided to study Aerospace Engineering. Although I specialized in Air Navigation, and I had programming subjects, learning specific languages like Ada, I wanted to learn more about app development, so I decided to enroll in a Web Application Development CFGS, which I am currently studying.

Thanks to that dual education I have learned to use tools like Git, RDBMSs, and Unix environments, as well as languages like Java, C, C++, Matlab, Python and Ada, and markup languages.

Proposal

Currently, the only way in Poliastro to create an orbit without knowing orbital elements or position and velocity vectors is using examples and ephem modules. The first one has only four orbit examples. The second one relies on Astropy and JPL to get position and velocity vectors, and it just provides these values for Solar System Planets. This may not be a problem for people with astronomy and science skills, but it would be great if Poliastro could be used by anyone interested.

Therefore, my proposal consists of creating an API, relying on NASA Open APIs, in order to provide small-bodies orbital data, and maybe improving the ephem module with more data about Solar System Planets. Among available NASA Open APIs, there are several that could be used in order to complete this proposal. They are mainly supported by Jet Propulsion Laboratory (JPL). Center for Near Earth Object Studies (CNEOS) is part of JPL and has several tools regarding NEOs:

CNEOS Tools

They are mainly human-readable APIs, but they can give us a hint of what could be accomplish with this proposal. There is information about NEOs orbital elements, but also information about accessible Near Earth Asteroids, and tools to compute accurate ephemerides of NEOs. Regarding machine-readable data, NASA offers a NEO Web Service (NeoWs), based on the JPL data:

NeoWs

It would be easy to get NEOs information from there, in JSON format, that could be parsed in Python (and any other language) without difficulty. This service offers statistics about the total number of discovered NEOs, orbital information about every NEO, and an interesting feature that shows the NEOs that will flyby in the next days. Finally, there is another Web API, directly supported by JPL, which provides machine-readable data related to Solar System Dynamics (SSD) and CNEOS:

SSD-CNEOS API

Information about impact risk, new NEOs and close approaches could also be included in the Poliastro NEOs API.

Given that most NEOs have orbits which are not in the same plane as Solar System Planets, I think that it would be really interesting complement the NEOs API with at least a basic 3D orbit visualization module, so I plan to improve the plotting module or even creating a new plotting3d module that can be used to show NEOs or Orbit objects. There is a similar proposal in Ideas Page, but it involves using Jupyter, ipywidgets and TypeScript, and my idea is to use mplot3d, although I’m really open to discuss the 3d library issue, depending on the remaining time after finishing NEOs API.

If I accomplished these two proposals before the SOCIS coding period finished, I would really love to start a basic Web Application based in Poliastro functionalities, mainly focused in orbit visualization, although it could be later improved in order to support other features, like maneuvering. Given that the whole Poliastro project is written in Python, the Web Application would be based in Python too, probably working with a framework like Django for the back-end.

Timeline

  • Week 1: Research about Nasa Open APIs and other NEOs databases that could better fit in this project, as well as learn more deeply about Poliastro code, and discuss with my mentor about this proposal.
  • Week 2-3: Begin the development trying to accomplish the more basic feature, retrieving orbital data from the APIs given a name.
  • Week 4-5: Continue with the next features of the API: NEOs queries based on several parameters as minimum distance, next approach to Earth or any other planet, lists of NEOs matching a regular expression, impact risk...
  • Week 5-6: Finish the NEOs API, adding functionalities that can be achieved with the available Open APIs.
  • Week 7: Research about 3d libraries.
  • Week 8-9: Improve plotting module to support 3d orbit visualization, and fix and refactor possible bugs.
  • Week 10: Discuss possible Web Application based on Poliastro, and start with its development.
  • Week 11-12: Focusing in orbit visualization, keep writing the WebApp.
  • Week 13: Review with my mentor if SOCIS goals have been achieved, and hopefully deploy a basic but operating WebApp.