SOCIS 2017 Ideas Page - poliastro/poliastro GitHub Wiki

Interactive Porkchop Plots

Suggested Mentor(s): Juan Luis Cano

Difficulty: Beginner

Astronomy knowledge needed: Lambert problem

Programming skills: Python, JavaScript/TypeScript

Description

"A porkchop plot is a graphical interplanetary mission planning tool that depicts as a contour plot the required energy as a function of departure date and arrival date." [Source]. They are extremely useful to visualize the launch opportunities for an interplanetary mission.

Porkchop Plot

This functionality is still missing from poliastro, although it should be easy to implement.

Expected Outcomes

At the end of this project, a simple API to produce porkchop plots using poliastro would be available. The following tasks will have to be completed:

  1. Gather enough validation cases to test the output of the implementation against. This can be found in websites or, more appropriately, in academic articles.
  2. Implement the algorithm itself, which will make use of planetary ephemerides and the solution of the Lambert problem. If several branches or multiple revolutions are possible, make a decision based on the cases gathered before.
  3. Explore parallelism opportunities using multiprocessing, joblib, numba, Dask, GPUs... To accelerate the algorithm. The problem is embarrassingly parallel.

And one extra task that would be highly desirable:

  • Create and easily installable app, be it a desktop or web app that can be accessible from the Internet. Native code or web technologies might be needed for this.

A successful proposal will demonstrate that the applicant has done some previous research to understand the pieces involved in the algorithm and present tasks and timeline for the its completion.


Interactive Orbit Visualization in 3D

Suggested Mentor(s): Juan Luis Cano

Difficulty: Intermediate

Astronomy knowledge needed: Conic orbits

Programming skills: JavaScript/TypeScript, Python

Description

While, on a first approximation, all orbital motion in the Solar System happens within a plane, this is by no means true for dwarf planets like Pluto, other bodies or spacecraft that perform out-of-plane flybys or orbital maneuvers. Ordinary 2D plots can still convey meaningful information but can lack perspective and interactivity.

Mars Science Laboratory trajectory

On the other hand, 3D visualization in Python has no clear champion and there are several competing libraries with conflicting requirements and several degrees of activity. This issue in the OpenDreamKit project is a good summary of the state of the art, and this poliastro issue highlights our own research efforts.

Expected Outcomes

At the end of this project, a custom Jupyter widget would be available which, using ipywidgets and TypeScript (or JavaScript) to leverage some existing client-side graphical libraries, provides a simple API to produce three-dimensional plots of orbits, similar to what is already available for 2D in poliastro.

Some of the tasks that would have to be completed are:

  1. Evaluate existing 3D JavaScript libraries and select the most useful one.
  2. Create a Jupyter widget using ipywidgets and TypeScript (or JavaScript) that can plot interactive 3D line plots in the notebook interface, with the ability to rotate the perspective and show legends or tooltips.
  3. Provide a Python API that takes poliastro Orbit objects and plots the corresponding osculating orbits using the previously created widget.

And two extra tasks that might require refactoring and that would be highly appreciated:

  • Provide a way to plot only part of the orbit.
  • Refactor the plotting code so it is more testable and easier to switch from 2D to 3D.

See 1 and 2 for more information.

A successful proposal will demonstrate that the applicant has understood the current state of the plotting code and present tasks and timeline for the its completion.


Low-thrust Maneuvers and Mission objects

Suggested Mentor(s): Juan Luis Cano

Difficulty: Advanced

Astronomy knowledge needed: Perturbed two-body equations

Programming skills: Python

Description

There are several kind of space maneuvers (active changes in the orbit of the spacecraft by use of on board propellant) that can be modeled as instantaneous changes in velocity (ΔV) and that are already implemented in poliastro. The other kind of maneuvers, which can be considered as continuous thrust maneuvers, are too long to be modeled as instantaneous and have to be studied as a perturbing term in the two-body equations.

There are already propagation functions in poliastro that accept a perturbing term, but there is no user-friendly API to perform an orbit raising or an inclination change with some desired parameters and compute the ΔV cost, even under the assumption of constant thrust and no mass change in the spacecraft. Initial work of implementing those maneuvers can be found in this final MSc thesis.

On the other hand, Orbit objects in poliastro have served well so far because only impulsive maneuvers have been implemented. However, if we consider propagating an object under the action of a continuous thrust maneuvers, we might need to build a different kind of objects (let us call them Mission objects) that store the full history of position and velocity with respect to an attractor and that can retrieve a osculating orbit in the form of an Orbit at any point in time.

Expected Outcomes

At the end of this project, there should be a user-friendly API to perform certain specific changes in orbit by means of low-thrust maneuvers and operating on poliastro objects, and also some sort of object that stores intermediate states and is able to retrieve osculating orbits. This project is challenging, and might require deep changes to some parts of the library. Some steps that might be completed are:

  1. Understand the algorithms present in this final MSc thesis, how do they interact with poliastro and optionally accelerate and polish them.
  2. Create a user-friendly API that receives an starting Orbit and generates a parametrized control law to perform a specific change in orbit.
  3. Create some sort of object (for example Mission object) that can store intermediate states between an initial and a final time and retrieve the osculating Orbit at any point in time. This can be tested first using Keplerian orbits.
  4. Use the previously created Mission object combined with the new continuous thrust maneuvers to enhance the propagation API and allow it to return the history of the trajectory, not only the final state.

A successful proposal will demonstrate that the applicant has understood the challenges of this project and present tasks and timeline for the its completion.