Spacecraft Operations Analysis Package
OpenSOAP is a simulator for spacecraft in LEO, with a bent for early mission design, CONOPs exploration, and technical budget analysis. When you run it, it looks like this:
The following dynamical properties are simulated:
- orbit
- attitude
- onboard power
- onboard data
- onboard operating mode (e.g. charging, science, etc.)
None of the modeled dynamics are state-of-the-art fidelity, but they are good for first-order designs.
You will need an installation of Julia.
Clone the repository into a nice place on your computer, go into the directory, and launch the Julia REPL:
$ git clone https://github.com/thanasipantazides/OpenSOAP.git
$ cd OpenSOAP
$ julia --project=.From the REPL, hit the ] key to go into the package manager. Your prompt should change, and you should run instantiate to install required packages.
julia> ]
(OpenSOAP) pkg> instantiateYou can hit backspace to get back to the julia> prompt from the package prompt.
To launch the interactive orbit viewer, use the example called both.jl:
julia> include("examples/both.jl")This will probably precompile for a while. This happens the first time you run something from a new REPL session, but subsequent runs are much faster. Once that's done, run the main function:
julia> main()You should see a display like the one further up this page. Press the h key for a help menu:
| Key | Action |
|---|---|
h |
show help |
v |
verbose |
q |
quit |
e |
change earth texture |
f |
show/hide Body frame |
l |
show/hide labels |
p |
change camera projection |
k |
perturb attitude (check control) |
spacebar |
play/pause |
left/right |
slower/faster |
To exit, press q in the viewer. Maybe also ctrl-C in the REPL.
A mode is an operational state of the spacecraft. The power consumption is determined by mode. Some modes have higher priority than others. A mode may have constraints which must be satisfied to run it. A mode may have one or more targets to look at. The rules are:
- A mode can run if any of its
targets are visible. - A mode can run if all of its
constraints are satisfied.
A target is a position or reference direction for the spacecraft to look at. Maybe it is a groundstation. Maybe it is the sun. Maybe it is something else. Maybe it comes with some metadata.
A constraint is a restriction of mode based on spacecraft position. This is used to enforce things like `only
As it stands now, the waters are muddy: I use constrain the usage of the B-field pointing mode, but there are no explicit constraints on groundstation communication, that info is rolled into the groundstation visibility cone. So the interface is not very pure. But I hope to change that.
