Produced by: Auburn University's 3i Space Dynamics Research Laboratory and The Aerospace Corporation
Authors: Eirik Mulder ([email protected]), Dhathri H. Somavarapu ([email protected]), Davide Guzzetti ([email protected])
Released under Apache 2.0 License
The ConstellationDesigner toolkit is a virtual reality application designed to assist mission designers with the preliminary exploration and design of periodic orbits, transfers, and spacecraft constellations.
The software simulates the CR3BP model of cislunar space and allows the user to place and manipulate "patch points", which are state vectors in the CR3BP space (paired position and velocity values). Using these patch points, along with realtime propagation of trajectories in the model, a user can design both periodic orbits and point-point, point-orbit, orbit-orbit, or orbit-point transfers.
For constellation design, the application supports the specification of a coverage grid in 2D or 3D, and the design of a set of periodic orbits and satellite numbers for these orbits. An optimizer can be used to find a local optimum for satellite phasings between these orbits, to maximize or minimize certain coverage metrics.
Tutorial videos for the application can be found at the following links:
- Intro and Menus: https://youtu.be/dxWz-yj4bkQ
- Mode Switching: https://youtu.be/pmJvyJpLmsk
- Periodic Orbit Design: https://youtu.be/6KBK5tGMrc4
- Transfers: https://youtu.be/N2TTbyIxJwI
- Constellations: https://youtu.be/2XWeVTjf__A
The original purpose of publishing this software toolkit is to gather feedback and solicit feature requests. We make no guarantee of updates based on feedback, however, depending on availability we may attempt to implement some requests.
This tool relies on an unmodified version of CasAdi (https://web.casadi.org/).
Andersson, J. A. E., Gillis, J., Horn, G., Rawlings, J. B., and Diehl, M., “CasADi – A Software Framework for Nonlinear Optimization and Optimal Control,” Mathematical Programming Computation, Vol. 11, No. 1, 2019, pp. 1–36. https://doi.org/10.1007/s12532-018-0139-4
Required Operating System: Windows 10 or 11
Required Hardware: VR system supporting OpenXR
- HTC Vive Pro 1/2 or Cosmos
- USB 3.0 Port on the PC
- DisplayPort 1.2 or higher port on your graphics card
- Power outlet
- SteamVR / Vive Software running on PC
- Meta Quest 1, 2, or 3
- USB 3.0 port on the PC
- Valve Index
- USB 3.0 port on the PC
- DisplayPort 1.2 or higher on the graphics card
- Power outlet
- SteamVR running on PC
Hardware Specifications:
The application requires a modern system capable of running a VR headset at sufficient framerate (ideally > 90 fps) with relatively intensive 3D graphics. Application testing was primarily performed on a set of computers using NVIDIA RTX 4080/4090 graphics cards along with Intel I9 / Radeon 7950x CPUs. The application is capable of running on lower-end hardware, however FPS and resolution may be impacted.
Before installing, an OpenXR runtime is required. A standard runtime for headsets like the VIVE Pro or Valve Index is SteamVR, which can be installed from: SteamVR Link. Oculus and Vive also provide their own OpenXR runtimes.
To install the application, download it and extract the folder. The executable will be contained inside the folder: ConstellationDesigner.exe
To start using the application, start your VR headset, controllers, and connection software on the PC (SteamVR, oculus, etc.). Then, launch the executable file from inside the application folder (ConstellationDesigner.exe
).
Windows will likely produce a warning "Windows protected your PC" because the publisher is unrecognized. You can select "Run Anyway" to start the application.
When the application starts up, you should be able to put the headset on and look around. The CR3BP system should be visible in the scene.
There will be a ray connected to your right hand, and a menu displayed that shows your current Workspace Folder. The Workspace Folder is the location in your filesystem where data from the application is saved, along with the target for exports and imports. By default, this is set to the persistent application path, typically in C:/Users/<username>/AppData/LocalLow/3iSpaceDynamics/ConstellationDesigner
. This is usually a fine path to store things, but depending on computer configuration a different folder can be selected.
To change the folder, use the trigger on your right controller to select the "File Selector" button (blue), and then remove the headset and select the desired folder on your computer. Once you are happy with the workspace setting, select "Start Application" with your controller (righthand trigger).
There are several primary controller mapping supported by the application. All supported controllers have a trigger, which is used throughout the application for selection and triggering actions. All supported controllers also have a squeeze-based grip, which allows for activation of controller delay.
VR controllers for the VIVE Pro series use a large trackpad in the center of the controller, with a menu button above. VR controllers for Oculus, the Valve Index, and others use an A and a B button, along with a joystick.
In this document, the "Primary Button" will be used to refer to clicking the trackpad or the A button, depending on the controller used. The "Secondary Button" will be used to refer to the menu button or B button, depending on the controller. "Trigger" refers to the trigger on the front of the controller, and "Grip" refers to the squeeze-activated grip on the underside.
When the guide refers to "holding down" a control, it means to press the button and continue pressing it for the duration of an action (typically holding the trigger down to move an object).
When the guide refers to "long pressing" a control, it means to hold the button down for more than 0.4 seconds and then release. The completion of the hold action will be marked with haptic feedback (vibration of the controller) and a visual queue indicating the action has been performed.
The basic actions for interacting with the application are the menu, tool-switcher, selection, and right-clicking.
The scene menu can be opened at any time using the Secondary Button. A second press will close the menu again. When the menu is opened, your right hand controller will have a ray, and can be pointed at the menu to interact with widgets. Clicking the Trigger will select items in the menu.
The tool switcher can be opened by long pressing the Primary Button. This will open a menu around your controller of different tools. If you move your right-hand controller into one of the tool buttons, it will highlight in blue. When an object is highlighted, the Trigger can be used to select it.
Many interactable objects exist in the scene, which are indicated by a blue highlight when you move your controller over them. This means they can be interacted with using the Trigger. Some objects also have an attached hidden menu, which can be opened with a "right click" (clicking the Primary Button) (do not long-press it).
One of the core workflows in the app is the design of periodic orbits. A spacecraft's "state" at any point in time can be described as a vector containing it's position and velocity. A periodic orbit is a trajectory which after some amount of time repeats its state, thus forming a loop. The Orbit design tool is focused on the identification of such orbits in the Circular Restricted 3-Body Problem. To activate the orbit tool, open the tool switcher using a long press of the Primary Button, move your controller to highlight the Orbit Tool, and use the Trigger to select it.
Once in the Orbit Tool, the Trigger can be pressed again to place a Patch Point. A Patch Point is a physical object representing a spacecraft's state (e.g. position and velocity). The position is represented as a sphere, and the velocity is represented as a line and arrow head attached to the position. To manipulate the Patch Point, move your controller to highlight either the position or velocity (the arrowhead), and then hold the trigger down while moving your controller.
When manipulating patch points, make sure the object you want to grab is highlighted in blue prior to pressing the Trigger. If it is not, the trigger will instead place an additional patch point. These additional patch points can be deleted by hovering over the position sphere, using a Right Click action (click the Primary Button quickly), and then selecting the small trash can using the Trigger.
Each Patch Point displays a trajectory prediction line, which is a propagation of system dynamics from the initial state of the patch point. To design a periodic orbit, the goal is to manipulate the position and velocity such that the line returns to the original position with the original velocity.
The trajectory prediction line will change color to green once you have a good approximation of a periodic orbit. At this point, find the orbit control panel (somewhere in the center of the prediction line), and select the rocket icon using the Trigger. After a period, this will produce an optimized orbit, which will be purple. This orbit can then be deleted or saved using the orbit control panel.
There are two primary menus in the scene that can be accessed via a right-click action (e.g., pressing the Primary Button while an object is highlighted).
The first right-click menu is accessible on the position sphere for any patch point, and contains a number of patch-point specific configuration settings. Available settings include the propagation time (which can be set with a slider or a button to set it to a multiple of the system period), a trash button to delete the patch point, and an option to change the type of propagation between the RK4 and RK45 algorithm. The patch point can also be set to propagate in reverse (to aid in matching with the previous point), and to align with the ending velocity of the previous point in the orbit. There is also a display of the precise coordinates of the point, which can be selected for precise entry using a keypad.
The second right-click menu is available on the velocity arrow-head for any patch point. This menu contains a precise velocity entry tool, and sliders which allow for very precise movement of the arrow.
The application level menu can be opened and closed using the Secondary Button. When the menu is open, it appears in front of the user, and the user is given an interaction ray on their right hand. By aiming the ray at the menu and using the Trigger interaction, the menu can be manipulated.
On the left side of the menu there are a number of tabs, which contain different configuration settings. The following sections break down the available configuration options in each tab.
The height menu options allows for adjustment of the scene height, to adapt to taller or shorter users. The height should be adjusted to allow for comfortable manipulation of controls in the desired trajectory design region. The number itself can be highlighted and clicked to open a keypad for more precise adjustment.
The log display dropdown allows the user to choose whether logging information is displayed above the scene menu.
The recording mode dropdown lets the user select a larger display size for orbits and other scene objects, to improve the visibility of recordings.
The reset button allows for the scene to be reset (all orbits deleted and menus closed). The exit button closes the application.
The save orbits and load orbits buttons provide a facility for saving and loading optimized orbits. Pressing the save orbits button saves the current set of dynamic (optimized) orbits, which are shown in purple, to a folder inside the workspace folder / dynamic_orbits
. Load orbits allows the user to select between the folders present and select one, loading all contained orbits.
In the controls tab, the controler sensitivity setting configures the amount of delay present when the controller grip is held.
Since velocities are displayed as arrows, some degree of scaling factor must be applied to map between a velocity value and a distance. In the purely proportional scaling (linear scaling) mode, this value is effectively a timespan, and the arrow length is the distance an object moving at the selected velocity would move in that time.
For convenience, there are two other scaling schemes available, Sqrt (square-root) and Logarithmic, which both try to decrease the difficulty of managing very large velocities and very small velocities simultaneously.
For manipulating a low-velocity orbit (e.g., a Lyapunov), it is useful to increase the velocity scaling factor, and for resonant orbits with high velocities, an alternate scaling scheme can be selected.
A spatial grid is used for estimating coverage of satellite constellations. The grid menu contains options for grid configuration. The grid center option allows the center of the spatial grid to be anchored on an object in the scene. The grid type, size, and density allow for configuration of the number of points, shape, and size of the point cloud. The point size is focused on improving user visibility by either making the display points larger or smaller.
Once a set of orbits has been created and optimized, satellites can be distributed among the orbits using the satellite amount selectors attached to each orbit.
Then, the constellation optimizer can be executed. For the constellation optimizer to work, a grid needs to have been set up, and at least one orbit with satellites assigned to it needs to exist.
The settings for the constellation optimizer include the basic configuration: propagation time, timesteps, and sensor range. The propagation time controls how long the constellation designer propagates the satellite configuration to estimate coverage (higher will take longer but be more accurate over a longer period). The number of timesteps changes the propagation resolution (higher takes longer but will be more precise). Sensor range represents the coverage definition (a point within the defined sensor range of a satellite will be considered covered).
The weights settings include coverage, gap length, and # gaps, which can be positively or negatively weighted. Positive weights tell the optimizer to maximize the value, whereas negative weights are the inverse. E.g., a positively weighted gap length tells the optimizer to maximize the average length of coverage gaps for the constellation. You can use a combination of weights depending on the design criteria. The option to evenly space satellites bypasses the optimizer and just returns an immediate result with evenly spaced satellites. This gives a good benchmark for a minimal effort solution.
Saved orbits and solutions, along with intermediate files (inputs and outputs of the optimizer) are all stored in the filesystem at the Workspace Folder, which is displayed on application startup.