SkillAgentSearch skills...

Ephemeris Explorer

A simulator of gravitationally bound systems.

Install / Use

npx skills add Canleskis/ephemeris-explorer

Installs into whichever agent you are using.

About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<div align="center"> <picture> <source srcset="logo_title_dark.png" media="(prefers-color-scheme: dark)"> <img src="logo_title_light.png" alt="title logo" width="500px"> </picture> </div>

 

<div align="center"> <img src="ephemeris-explorer-preview.gif" alt="preview gif" width="100%"> </div>

 

Download here

Ephemeris Explorer aims to be a multi-purpose interactive simulation of gravitationally bound systems, be it stellar systems, planetary systems or satellite systems. It uses concepts from various research to generate accurate[^1] trajectories of celestial bodies and presents them in an interactive manner using the Bevy Engine and egui.

[^1]: The accuracy of the current implementation is limited by the fact that the acceleration computation does not take into account general relativity and all bodies are considered to be spheres with an homogeneous mass distribution.

Simulations are achieved by separating objects into two categories: massive objects (celestial bodies) that affect other objects and massless objects (spacecrafts) that do not. This separation allows for the prediction of the trajectory of massless objects to be decoupled from the actual simulation of a system and other massless objects. The trajectory of massive objects is computed first for a given time span, which allows for their evaluation at any time in that span. The trajectory of massless objects can then be computed in that time span quickly and accurately.

Epemeris Explorer is still in early development. The scope of the project is simply to provide a tool for experimenting with gravitationally bound systems with no significant scientific intent, at least not in the current state. As such, the project is open-source and contributions are welcome.

Main features

Camera Controls

The camera can be moved using the WASD keys, Q and E for roll, as well as Space and Left Control to move up and down. The up and down arrow keys allow to change the FOV. The mouse can be used for pitch and yaw when the left mouse button is held down.
You can also use orbit controls around the followed body by holding the right mouse button.

Hierarchical View

The left panel provides a hierarchical view of the celestial bodies within the current system. Clicking the allows setting the reference frame of the camera. You can toggle trajectory plotting using the button.
Clicking a body's name or a body in the viewport selects it and allows you to read information about the body and configure plotting.
Spacecrafts are dynamically moved in the hierarchy depending on which body's sphere of influence they are in.

Body Information

When a body is selected, information about the current state of the body is displayed. You can also configure the plotting of the body's trajectory. Changing the Reference of the body changes some of the displayed information and changes the reference frame of the body's trajectory.
If the body is a ship, you can also export it and its flight plan to a file and delete it from the current system.

Flight Planning

Allows to add manoeuvres to ships. Manoeuvres are defined by a start epoch, a duration and an acceleration in a reference frame. Using the same window that displays body information, you can add, remove and edit manoeuvres. When a manoeuvre is changed, the trajectory of the ship is recomputed asynchronously. If the flight plan is shorter than the current prediction bounds, the ship will freeze at the end of its trajectory.

Prediction Planner

Allows to extend the ephemerides forward or backward in time independently and asynchronously by selecting start and end epochs. You can pause and cancel ongoing predictions. By default, predictions will auto-extend when the current time approaches the prediction bounds.

Trajectory Picking

You can hover over or click on the trajectories to display information about the body at that point in time as well as adding manoeuvres for ships. Multiple points might be selected when picking a trajectory if the points are close together and belong to the same body.

Time Controls

Allows to change the speed of the simulation, pause it or set the epoch.

Spawning Ships

Allows to spawn ships in the system. Ships are defined by a name as well as a position and velocity within a reference frame. You can also import a ship and its flight plan from a file.

Exporting a System

Allows to export the current state of the system to a file, selecting which bodies are included.

Loading a System

Allows loading a system from a directory. The directory should contain three files: ephemeris.json for the ephemerides configuration, a skybox.png, and a state.json for the initial state of the system, which should be formatted as follows:

{
    "name": "System name",
    "epoch": "2000-01-01 00:00:00 TAI",
    "bodies": [
        {
            "name": "Name",
            "mu": 100.0,
            "position": [1.0, -2.0, 2.0],
            "velocity": [3.0, -2.0, 1.0]
        }
    ]
}

Prediction Debug

Displays information about each trajectory such as their bounds or their size. Useful when creating a system.

Technical overview of the ephemeris generation

Generating accurate ephemerides for a given system requires the configuration of the following:

  • A starting epoch, for which the state vectors of the bodies in the system are provided, as well as their gravitational parameters. This data is loaded with the state.json file.
  • A time step or delta time dt, and an error tolerance which controls how closely the generated trajectory must match the underlying numerical integration. This is loaded from the ephemeris.json file.

The initial state is used as the starting point for the generation of the ephemerides. Each body's trajectory is built as a QuinticHermiteSpline: at every integration step, a QuinticHermite sample is taken from the position, velocity, and acceleration produced and added to the current segment. As long as the accumulated samples stay within tolerance, the segment keeps growing; once they don't, the last valid sample closes off that polynomial and seeds the start of the next one.

Goals

Short term

  • [x] Implement multiple types of integrators appropriate for different problems (symplectic, linear multistep, Runge-Kutta-Nystrom, etc.).
  • [x] Evaluation of accuracy of solar system simulations versus data from JPL and other sources.
  • [x] Improve UI/UX related to trajectory plotting for spacecrafts. Display more information such as closest approach, SOI changes, etc.

Medium term

  • [x] Automatic selection of interpolation polynomial parameters.
  • [ ] Hierarchical system simulations (model planetary systems as barycenters before simulating satellites f.e.).
  • [ ] Spherical harmonics gravity models for celestial bodies.
  • [ ] More ways to manoeuvre spacecrafts (brachistochrone, recurring manoeuvres, etc.).

Long term

  • [ ] Plots and graphs for visualizing data.
  • [ ] Import and export data from and to other software (NAIF kernels, TLEs, etc.).
  • [ ] Evaluation of accuracy of spacecraft orbit propagation versus real data.
  • [ ] Add more models for spacecraft orbit propagation (simplified perturbations models, radiation pressure, atmospheres, etc.).

Stretch

  • [ ] Better visuals (improved UI, atmospheres, better shadows, 3D models, planetary rings, etc.).
  • [ ] Automated mission design tools.
  • [ ] Take general relativity into account.

Related Skills

View on GitHub
GitHub Stars207
CategoryDevelopment
Updated21h ago
Forks5

Languages

Rust

Security Score

100/100

Audited on Aug 7, 2026

No findings