• Stars
    star
    327
  • Rank 128,686 (Top 3 %)
  • Language
    Haskell
  • License
    Other
  • Created over 3 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

OGMA

Ogma is a tool to facilitate the integration of safe runtime monitors into other systems. Ogma extends Copilot, a high-level runtime verification framework that generates hard real-time C99 code.

Features

  • Translating requirements defined in NASA's requirements elicitation tool FRET into corresponding monitors in Copilot.

  • Generating NASA Core Flight System applications that use Copilot for monitoring data received from the message bus.

  • Generating message handlers for NASA Core Flight System applications to make external data in structs available to a Copilot monitor.

  • Generating the glue code necessary to work with C structs in Copilot.

  • Generating Robot Operating System applications that use Copilot for monitoring data published in different topics.

  • Generating F' (FPrime) components that use Copilot for monitoring data published in different ports.

Conversion of requirements into C code
Conversion of FRET requirements into C code.

Monitoring within simulation video
Integration of monitors into larger applications (e.g., simulators).

Table of Contents

Installation

(Back to top)

Pre-requisites

(Back to top)

To install Ogma from source, users must have the tools GHC and cabal-install. At this time, we recommend GHC 8.6 and a version of cabal-install between 2.4 and 3.2. (Ogma has been tested with GHC versions up to 9.2 and cabal-install versions up to 3.6, although the installation steps may vary slightly depending on the version of cabal-install being used.)

On Debian or Ubuntu Linux, both can be installed with:

$ apt-get install ghc cabal-install

On Mac, they can be installed with:

$ brew install ghc cabal-install

Compilation

(Back to top)

Once GHC and cabal are installed, the simplest way to install Ogma is with:

$ git clone https://github.com/nasa/ogma.git
$ cd ogma
$ export PATH="$HOME/.cabal/bin/:$PATH"
$ cabal v1-install alex happy
$ cabal v1-install BNFC copilot
$ cabal v1-install ogma-*/

After that, the ogma executable will be placed in the directory $HOME/.cabal/bin/, where $HOME represents your user's home directory.

Usage

(Back to top)

The main invocation of ogma with --help lists sub-commands available:

$ ogma --help
ogma - an anything-to-Copilot application generator

Usage: ogma COMMAND
  Generate complete or partial Copilot applications from multiple languages

Available options:
  -h,--help                Show this help text

Available commands:
  structs                  Generate Copilot structs from C structs
  handlers                 Generate message handlers from C structs
  cfs                      Generate a complete cFS/Copilot application
  fprime                   Generate a complete F' monitoring component
  fret-component-spec      Generate a Copilot file from a FRET Component
                           Specification
  fret-reqs-db             Generate a Copilot file from a FRET Requirements
                           Database
  ros                      Generate a ROS 2 monitoring package

Language transformations: FRET

(Back to top)

FRET is a requirements elicitation tool created by NASA Ames Research Center. Requirements can be specified in structured natural language called FRETish, and the tool helps users understand them, validate them, and formalize them. For instructions on how to specify, analyze and export FRET requirements, see the FRET manual.


Screenshot of requirement specified inside NASA's requirements elicitation tool FRET.

Ogma can convert specifications generated by FRET into Copilot monitors. Specifically, the commands fret-component-spec and fret-reqs-db allow users to interact with the different kinds of files produced by FRET.

FRET files include properties encoded using Temporal Logic, both in SMV and in CoCoSpec, the latter of which is an extension of Lustre. Ogma uses the SMV expressions by default, but the CLI flag --cocospec can be used to select the CoCoSpec variant of requirements instead.

As an example, from the following FRET requirement:

test_component shall satisfy (input_signal <= 5)

Ogma generates the following Copilot specification:

import Copilot.Compile.C99
import Copilot.Language          hiding (prop)
import Copilot.Language.Prelude
import Copilot.Library.LTL       (next)
import Copilot.Library.MTL       hiding (since, alwaysBeen, trigger)
import Copilot.Library.PTLTL     (since, previous, alwaysBeen)
import Language.Copilot          (reify)
import Prelude                   hiding ((&&), (||), (++), not, (<=), (>=), (<), (>))

input_signal :: Stream Double
input_signal = extern "input_signal" Nothing

-- | propTestCopilot_001
--   @
--   test_component shall satisfy (input_signal <= 5)
--   @
propTestCopilot_001 :: Stream Bool
propTestCopilot_001 = ( alwaysBeen (( ( ( input_signal <= 5 ) ) )) )

-- | Complete specification. Calls the C function void  handler(); when
-- the property is violated.
spec :: Spec
spec = do
  trigger "handlerpropTestCopilot_001" (not propTestCopilot_001) []

main :: IO ()
main = reify spec >>= compile "fret"

This program can be compiled using Copilot to generate a fret.c file that includes a hard real-time C99 implementation of the monitor. The specification generated by FRET for the FRETish requirement shown above is included with the Ogma distribution, and can be tested with:

$ ogma fret-component-spec --cocospec --fret-file-name examples/fret-reqs-small.json > FretCopilot.hs
$ runhaskell FretCopilot.hs

The first step executes ogma, generating a Copilot monitor in a file called FretCopilot.hs. The second step executes the Copilot compiler, generating a C implementation fret.c and C header file fret.h.

The resulting fret.c file can be tested with the main provided in examples/fret-reqs-small-main.c, which defines a handler for Copilot to call when the property monitored is violated, and a main function that steps through the execution, providing new data for the Copilot monitor:

#include <stdio.h>

double input_signal;  // Input data made available for the monitor
void step(void);      // Copilot monitor's main entry point

void handlerpropTestCopilot_001(void) {
  printf("Monitor condition violated\n");
}

int main (int argc, char** argv) {
  int i = 0;

  input_signal = 0;

  for (i=0; i<10; i++) {
    printf("Running step %d\n", i);
    input_signal += 1;
    step();
  }
  return 0;
}

To compile both files, run gcc examples/fret-reqs-small-main.c fret.c -o main. Executing the resulting main shows that the condition is violated after a number of steps:

Running step 0
Running step 1
Running step 2
Running step 3
Running step 4
Running step 5
Monitor condition violated
Running step 6
Monitor condition violated
Running step 7
Monitor condition violated
Running step 8
Monitor condition violated
Running step 9
Monitor condition violated

Take a peek inside the intermediate files FretCopilot.hs, fret.c and fret.h to see what is being generated by Ogma and by Copilot.

The generated C code can be integrated as part of a larger application. For example, the following shows a Copilot monitor generated from a FRET file integrated in an X-Plane widget that presents information to users during a flight in the X-Plane simulator.


Screenshot of Copilot monitor generated by Ogma from FRET requirement, integrated into the X-Plane flight simulator. The widget on the right side of the screen presents information received and returned by the monitor, with a red/fire icon to signal that the monitor has been triggered (i.e., that the property has been violated).

Numeric Representations

FRET Component Specifications use the types real and int to represent different numeric variables. Copilot distinguishes between different numeric representations and supports multiple precisions, and so does the final C code generated from the Copilot specification.

To help users generate code that works as part of a larger system without modifications, Ogma includes two additional flags to map the types real and int to specific Copilot (Haskell) types. For example, the following command would generate a Copilot specification for a hypothetical numeric-example.json FRET CS file while mapping all real variables to the type Double and all integer variables to the type Int32:

$ ogma fret-component-spec --fret-file-name numeric-example.json --map-int-to Int32 --map-real-to Double

In the name of flexibility, Ogma does not sanitize the values of these variables and copies the types passed to these options verbatim to the generated Copilot code. It is the user's responsibility to ensure the types passed are valid Haskell types within the scope of the module generated. Note that Copilot supports only a limited subset of numeric types, which must be instances of the type class Typed.

Name customization

All FRET-related commands allow for customization of the target C filenames via an argument --target-file-name. For example, the following execution causes the C files produced by Copilot to be called monitor.c, monitor.h and monitor_types.h, as opposed to the default names fret.c, fret.h and fret_types.h, respectively:

$ ogma fret-component-spec --cocospec --fret-file-name examples/fret-reqs-small.json --target-file-name monitor > FretCopilot.hs
$ runhaskell FretCopilot.hs
$ ls monitor*
monitor.c  monitor.h  monitor_types.h

cFS Application Generation

NASA Core Flight System (cFS) is a flight software architecture to implement complex systems by combining multiple reusable applications that communicate to one another via a software bus. cFS has been used, among others, on spacecraft, cubesats, and drones.

Ogma includes multiple facilities to generate cFS applications. The cFS applications generated by Ogma perform three steps to connect Copilot monitors to the application:

  • Subscribe to a message in the cFS communication bus.
  • When a message of the desired kind arrives, copy the data to make it available to Copilot and call the monitor's main entry point.
  • Declare handlers that are executed when the property being monitored is violated.

When using this facility, Ogma produces a Copilot file that the user is expected to modify to implement the property to monitor. To avoid having to modify the generated C files that implement the cFS app itself, Ogma gives the ability to state what information one is interested in monitoring. If the kind of information is known to Ogma, it will automatically subscribe to the necessary messages and make it available to Copilot. Ogma provides additional flags to customize the list of known variables, so that projects can maintain their own variable databases beyond what Ogma includes by default.

cFS applications are generated using the Ogma command cfs, which receives three main arguments:

  • --app-target-dir DIR: location where the cFS application files must be stored.
  • --variable-file FILENAME: a file containing a list of variables that must be made available to the monitor.
  • --variable-db FILENAME: a file containing a database of known variables, and the message they are included with.

The following execution generates an initial cFS application for runtime monitoring using Copilot:

$ ogma cfs --variable-db examples/cfs-variable-db --variable-file examples/cfs-variables

The application generated by Ogma contains the following files:

copilot-cfs-demo/CMakeLists.txt
copilot-cfs-demo/fsw/for_build/Makefile
copilot-cfs-demo/fsw/mission_inc/copilot_cfs_perfids.h
copilot-cfs-demo/fsw/platform_inc/copilot_cfs_msgids.h
copilot-cfs-demo/fsw/src/copilot_cfs.c
copilot-cfs-demo/fsw/src/Properties.hs
copilot-cfs-demo/fsw/src/copilot_cfs_msg.h
copilot-cfs-demo/fsw/src/copilot_cfs_events.h
copilot-cfs-demo/fsw/src/copilot_cfs_version.h
copilot-cfs-demo/fsw/src/copilot_cfs.h

Users are expected to modify Properties.hs to adjust the property being monitored. Although it is possible to adjust the file copilot_cfs.c to include property violation handlers, we recommend adding them in a separate C file and modifying the compilation scripts to include that additional file. That way, invoking Ogma again will not overwrite the changes made to the cFS application.

In this particular example, the C code generated contains the following instruction to subscribe to an ICAROUS_POSITION_MID message to obtain the vehicle position:

    CFE_SB_Subscribe(ICAROUS_POSITION_MID, COPILOT_CommandPipe);

The message dispatcher included in the application detects a message of this kind and calls a dedicated subroutine:

void COPILOT_ProcessCommandPacket(void)
{
    CFE_SB_MsgId_t  MsgId;

    MsgId = CFE_SB_GetMsgId(COPILOTMsgPtr);

    switch (MsgId)
    {
        case ICAROUS_POSITION_MID:
            COPILOT_ProcessIcarousPosition();
            break;
    ...

Finally, the dedicated subroutine makes data available to the monitor and calls the main Copilot entry point step:

void COPILOT_ProcessIcarousPosition(void)
{
    position_t* msg;
    msg = (position_t*) COPILOTMsgPtr;
    position = *msg;
    step();
}

ROS Application Generation

The Robot Operating System (ROS) is a framework to build robot applications.

Ogma is able to generate ROS monitoring applications that subscribe to obtain the data needed by the monitors and report any violations. At present, support for ROS app generation is considered preliminary.

ROS applications are generated using the Ogma command ros, which receives five main arguments:

  • --app-target-dir DIR: location where the ROS application files must be stored.
  • --fret-file-name FILENAME: a file containing a FRET component specification.
  • --variable-file FILENAME: a file containing a list of variables that must be made available to the monitor.
  • --variable-db FILENAME: a file containing a database of known variables, and the topic they are included with.
  • --handlers FILENAME: a file containing a list of handlers used in the specification.

Not all arguments are mandatory. You should always provide either a FRET component specification, or both a variable file and a handlers file. If you provide a variables file or a handler file and a FRET component specification, the variables/handlers file will always take precedence, and the variables/requirements listed in the FRET component specification file will be ignored.

The following execution generates an initial ROS application for runtime monitoring using Copilot:

$ ogma ros --fret-file-name Export.json --variable-file variables --variable-db ros-variable-db --app-target-dir ros_demo

The application generated by Ogma contains the following files:

ros_demo/CMakeLists.txt
ros_demo/src/copilot_monitor.cpp
ros_demo/src/copilot_logger.cpp
ros_demo/src/.keep
ros_demo/package.xml

Current limitations

The user must place the code generated by Copilot monitors in two files, ros_demo/src/monitor.h and ros_demo/src/monitor.c. No Copilot or C code for the monitors is generated by default.

The code generated by default assumes that handlers receive no arguments. The user must modify the handlers accordingly if that is not the case.

Although the variable DB file is not mandatory, it is in practice required to monitor any requirement that uses any input data: no topic subscriptions will be generated for any variables for which a DB entry cannot be found. At present, Ogma will proceed without warnings if a variable is mentioned in a requirement or variables file but a matching entry is not found in the variable DB.

F' Component Generation

F' (FPrime) is a component-based framework for spaceflight applications.

Ogma is able to generate F' monitoring components that subscribe to obtain the data needed by the monitors and report any violations. At present, support for F' component generation is considered preliminary.

F' components are generated using the Ogma command fprime, which receives five main arguments:

  • --app-target-dir DIR: location where the F' application files must be stored.
  • --fret-file-name FILENAME: a file containing a FRET component specification.
  • --variable-file FILENAME: a file containing a list of variables that must be made available to the monitor.
  • --variable-db FILENAME: a file containing a database of known variables, and their types.
  • --handlers FILENAME: a file containing a list of handlers used in the specification.

Not all arguments are mandatory. You should always provide either a FRET component specification, or both a variable file and a handlers file. If you provide a variables file or a handler file and a FRET component specification, the variables/handlers file will always take precedence, and the variables/requirements listed in the FRET component specification file will be ignored.

The following execution generates an initial F' component for runtime monitoring using Copilot:

$ ogma fprime --fret-file-name Export.json --variable-db fprime-variable-db --app-target-dir fprime_demo

The component generated by Ogma contains the following files:

fprime_demo/CMakeLists.txt
fprime_demo/Copilot.fpp
fprime_demo/Copilot.cpp
fprime_demo/Copilot.hpp
fprime_demo/Dockerfile
fprime_demo/inline-copilot

For completion, the following execution should compile the produced monitoring component in a docker environment (assuming that the necessary Export.json, fprime-variable-db files exist, they have consistent information, etc.) using FPrime's Reference Application:

$ ogma fprime --fret-file-name Export.json --variable-db fprime-variable-db --app-target-dir fprime_demo
$ ogma fret-component-spec --fret-file-name Export.json --target-file-name copilot > Spec.hs
$ cd fprime_demo/
$ runhaskell ../Spec.hs
$ docker build -t fprime .

File formats

The format of the variables, variable DB, and handlers file are as follows.

The variables file can contain a list of variables used in a specification, one per line. For example, if we are working with a specification that uses three boolean variables called autopilot, sensorLimitsExceeded, and pullup, we can provide them to Ogma's fprime command in a file like the following:

$ cat variables
autopilot
sensorLimitsExceeded
pullup

The variables database file contains a list of known variables and their types. It does not matter if there are variables that are not used for one particular specification, FRET file, or requirement/monitor. The only thing that matters is that the variables used, and their types, be listed in the file. Continuing with the same example, we could have:

$ cat fprime-variable-db
("temperature", "uint8_t")
("autopilot", "bool")
("sensorLimitsExceeded", "bool")
("pullup", "bool")
("current_consumption", "float")

In our example, we only care about the boolean variables; it is sufficient that they be listed in the variable DB file.

Finally, the handlers file is a list of monitor handlers that the generated FPrime component should restrict to monitoring. They are listed one per line:

$ cat handlers
handlerpropREQ_001

Note that the handler name must match the one used by Copilot. Ogma transforms requirement names to ensure that they corresponding handlers are valid C identifiers. For example, the Ogma-generated monitor for a FRET requirement REQ_001 would, upon violation, call a C handler handlerpropREQ_001. The transformation only applies if you are working with FRET files and not directly with other source languages.

Current limitations

The user must place the code generated by Copilot monitors in three files, fprime_demo/src/copilot.h, fprime_demo/src/copilot_types.h and fprime_demo/src/copilot.c. No Copilot or C code for the monitors is generated by default by the fprime command.

The code generated by default assumes that handlers receive no arguments. The user must modify the handlers accordingly if that is not the case.

Struct Interface Generation

A lot of the information that must be monitored in real-world C applications is packed in structs. Copilot allows accessing specific fields of C structs, but requires additional definitions in the Copilot language to make the shape of those structs known to the compiler.

Ogma is able to generate the boilerplate code needed to work with C structs in Copilot. For example, to use the following struct as the type of an extern stream in Copilot, the user is expected to define several Copilot (Haskell) types and type class instances:

typedef struct {
   double x;
   double y;
} point;

Ogma can generate that code automatically with the structs subcommand:

$ ogma structs --header-file-name examples/point.h
data Point = Point
  { pX :: Field "x" Double
  , pY :: Field "y" Double
  }

instance Struct Point where
  typename _ = "point"
  toValues v = [ Value Double (pX v), Value Double (pY v) ]

instance Typed Point where
  typeOf = Struct (Point (Field 0) (Field 0))

By including these definitions in a Copilot file, users can now access the individual x and y fields of a Point in a stream.

Contributions

(Back to top)

The best way to contribute to Ogma is to report any issues you find via the issue tracker, and to use Ogma to build applications or in your own research and let us know about your results.

We kindly ask users not to send PRs to this project. Instead, please document the bugs you find or other suggestions as issues and we will make the necessary changes.

Acknowledgements

(Back to top)

Ogma has been created by Ivan Perez and Alwyn Goodloe.

The Ogma team would like to thank Dimitra Giannakopoulou, Anastasia Mavridou, and Thomas Pressburger, from the FRET Team at NASA Ames, for the continued input during the development of Ogma.

We would also like to thank Cesar Munoz and Swee Balachandran, for their help with the cFS backend.

X-Plane images obtained via the X-Plane 10 (Pro) flight simulator. Re-shared with permission.

License

(Back to top)

Copyright 2020-2021 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved.

See the file LICENSE.pdf for details.

More Repositories

1

openmct

A web based mission control framework.
JavaScript
11,117
star
2

fprime

F´ - A flight software and embedded systems framework
C++
10,048
star
3

NASA-3D-Resources

Here you'll find a growing collection of 3D models, textures, and images from inside NASA.
Mathematica
2,804
star
4

apod-api

Astronomy Picture of the Day API service
Python
824
star
5

astrobee

NASA Astrobee Robot Software
C++
811
star
6

earthdata-search

Earthdata Search is a web application developed by NASA EOSDIS to enable data discovery, search, comparison, visualization, and access across EOSDIS' Earth Science data holdings.
JavaScript
745
star
7

trick

Trick Simulation Environment. Trick provides a common set of simulation capabilities and utilities to build simulations automatically.
C++
685
star
8

Transform-to-Open-Science

Transformation to Open Science
639
star
9

cFS

The Core Flight System (cFS)
CMake
537
star
10

XPlaneConnect

The X-Plane Communications Toolbox is a research tool used to interact with the X-Plane flight simulator
C
536
star
11

osal

The Core Flight System (cFS) Operating System Abstraction Layer (OSAL)
C
486
star
12

api-docs

api.nasa.gov
SCSS
448
star
13

NASTRAN-95

Fortran
393
star
14

spaceapps

363
star
15

cFE

The Core Flight System (cFS) Core Flight Executive (cFE)
C
343
star
16

instructions

https://github.com/nasa/nasa.github.io/blob/master/docs/INSTRUCTIONS.md
HTML
336
star
17

World-Wind-Java

World Wind, an open source 3D interactive world viewer, was created by NASA's Learning Technologies project, and released in mid-2004. It is now developed by NASA staff and open source community developers.
C++
328
star
18

Common-Metadata-Repository

Clojure
302
star
19

VICAR

291
star
20

CFL3D

Fortran
267
star
21

Open-Source-Catalog

Contains the NASA open source software catalog for automatic deployment to code.nasa.gov
JavaScript
259
star
22

openmct-tutorial

A tutorial for OpenMCT that guides you through integrating historical and realtime telemetry.
JavaScript
242
star
23

code-nasa-gov

code.nasa.gov site leveraging the Open Source Catalog on github.com, powered by Polymer
CSS
236
star
24

eefs

EEPROM File System
C
232
star
25

cumulus

Cumulus Framework + Cumulus API
JavaScript
230
star
26

T-MATS

An open source thermodynamic modeling package completed on behalf of NASA. The Toolbox for the Modeling and Analysis of Thermodynamic Systems (T-MATS) package offers a MATLAB/Simulink toolbox that gives a developer the ability to create simulations of such thermodynamic systems as turbomachinery and gas turbines. Keywords: TMATS, Control System, Numerical Methods, Newton-Raphson, Jacobian Calculation, Propulsion, Aircraft Engine, Jet, Turbofan, Turbojet, Compressor, Turbine, Nozzle, Inlet, open source
HTML
216
star
27

isle

JavaScript
213
star
28

europa

C++
207
star
29

nasa-latex-docs

An easy and convenient package to create technical LaTeX documents.
TeX
197
star
30

pvslib

NASA PVS Library of Formal Developments
Common Lisp
186
star
31

delta

Deep Learning for Satellite Imagery
Python
184
star
32

CrisisMappingToolkit

NASA Ames Crisis Mapping Toolkit
Python
183
star
33

nos3

NASA Operational Simulator for Small Satellites
C
167
star
34

icarous

ICAROUS is a software architecture for the development of UAS applications
C
147
star
35

DERT

DERT is an open source software tool for exploring NASA's digital terrain models in 3D
Java
142
star
36

NASTRAN-93

NASTRAN is the NASA Structural Analysis System, a finite element analysis program (FEA)
Fortran
134
star
37

ow_simulator

Python
129
star
38

meshNetwork

C++
127
star
39

prog_models

The NASA Prognostic Model Package is a Python framework focused on defining and building models for prognostics (computation of remaining useful life) of engineering systems, and provides a set of prognostics models for select components developed within this framework, suitable for use in prognostics applications for these components.
122
star
40

QuIP

QuIP provides an interactive environment for computing and presenting images and image sequences, manipulating and storing arbitrary data, and general scientific computing and plotting. The current release supports unix-like operating systems (tested on Linux and Mac OSX), and Apple's iOS mobile operating system. GPU acceleration is supported with either CUDA or OpenCL. There is built-in support for psychophysical experimentation, with general-purpose staircase routines and analysis of psychometric functions.
C
118
star
41

autodoc

Create Microsoft Documents automatically using Text and Template files
106
star
42

Kodiak

Library for rigorous verification of non-linear arithmetic
C++
103
star
43

PrognosticsAlgorithmLibrary

MATLAB
103
star
44

EMIT-Data-Resources

This repository provides guides, short how-tos, and tutorials to help users access and work with data from the Earth Surface Mineral Dust Source Investigation (EMIT) mission.
HTML
102
star
45

CompDam_DGD

Fortran
99
star
46

astrobee_android

NASA Astrobee Robot Software, Android
Java
96
star
47

OpenSPIFe

The Open Scheduling and Planning Interface for Exploration (OpenSPIFe) is an integrated planning and scheduling toolkit based on hundreds of hours of expert observation, use, and refinement of state-of-the-art planning and scheduling technology for several applications within NASA.
Java
95
star
48

HDTN

High-rate Delay Tolerant Network (HDTN) Software
C++
90
star
49

PrognosticsModelLibrary

MATLAB
89
star
50

mmt

NASA's Metadata Management Tool.
Ruby
86
star
51

kepler-pipeline

Kepler Science Data Processing Pipeline
C
84
star
52

IDF

C++
80
star
53

nasapress

A WordPress theme built on the NASA Web Design Standards
PHP
79
star
54

PyTDA

Python Turbulence Detection Algorithm (PyTDA)
Jupyter Notebook
78
star
55

harmony

Application for providing services for Earth observation data in the cloud using standards-based APIs
TypeScript
74
star
56

RHEAS

Regional Hydrologic Extremes Assessment System
Python
73
star
57

astrobot

A slack bot integration with NASA data
JavaScript
73
star
58

podaacpy

A python utility library for interacting with NASA JPL's PO.DAAC
Python
73
star
59

CCDD

CFS Command and Data Dictionary Tool (CCDDT)
Java
72
star
60

SMCPy

Python module for uncertainty quantification using a parallel sequential Monte Carlo sampler
Python
71
star
61

NASA-Acronyms

JavaScript
71
star
62

PointCloudsVR

C++
68
star
63

channel-emulator

C++
66
star
64

cFS-GroundSystem

The Core Flight System (cFS) Ground System Lab Tool (cFS-GroundSystem)
Python
65
star
65

CFS-101

63
star
66

AprilNav

C++
61
star
67

common-mapping-client

CMC is a starter-kit for creating web-based mapping applications
JavaScript
60
star
68

PSP

The Core Flight System (cFS) Platform Support Package (PSP)
C
60
star
69

NASAaccess

NASAaccess is R package that can generate gridded ascii tables of climate (CIMP5) and weather data (GPM, TRMM, GLDAS) needed to drive various hydrological models (e.g., SWAT, VIC, RHESSys, ..etc)
R
60
star
70

CryptoLib

Provide a software-only solution using the CCSDS Space Data Link Security Protocol - Extended Procedures (SDLS-EP) to secure communications between a spacecraft running the core Flight System (cFS) and a ground station.
C
60
star
71

GTM_DesignSim

MATLAB
59
star
72

dictionaries

A collection of NASA "dictionaries", including thesauri, taxonomies and ontologies.
HTML
58
star
73

progpy

The NASA Prognostic Python Packages is a Python framework focused on defining and building models and algorit for prognostics (computation of remaining useful life) of engineering systems, and provides a set of models and algorithms for select components developed within this framework, suitable for use in prognostic applications.
Python
57
star
74

libSPRITE

libSPRITE is a set of libraries that have been used on several past projects including flight, technology demonstration, and simulation projects. libSPRITE provides a diverse set of functions to attempt to simplify coding and reduce code errors. For example, libSPRITE defines engineering units as types (i.e., Meters or Radians instead of double or int). It includes an engineering unit aware math library. libSPRITE includes a task scheduling system that abstracts pthreads and includes a publish subscribe data system for data routing. In addition, libSPRITE includes an optional binding to the Lua scripting language for configuring the program, setting parameters, running Lua scripts within C++ tasks and even interacting with the application during runtime.
C++
57
star
75

prog_algs

The Prognostic Algorithm Package is a python framework for model-based prognostics (computation of remaining useful life) of engineering systems, and provides a set of algorithms for state estimation and prediction, including uncertainty propagation. The algorithms take as inputs prognostic models (from NASA's Prognostics Model Package), and perform estimation and prediction functions. The library allows the rapid development of prognostics solutions for given models of components and systems. Different algorithms can be easily swapped to do comparative studies and evaluations of different algorithms to select the best for the application at hand.
57
star
76

utm-apis

The collection of APIs for NASA's UTM project in the form of OpenAPI documents.
55
star
77

cumulus-dashboard

Cumulus API Dashboard
JavaScript
55
star
78

hybridq

HybridQ is a highly extensible platform designed to provide a common framework to integrate multiple state-of-the-art techniques to simulate large scale quantum circuits on a variety of hardware. HybridQ provides tools to manipulate, develop, and extend noiseless and noisy circuits for different hardware architectures. HybridQ also supports large-scale high-performance computing (HPC) simulations, automatically balancing workload among different processor nodes and enabling the use of multiple backends to maximize parallel efficiency. Everything is then glued together by a simple and expressive language that allows seamless switching from one technique to another as well as from one hardware to the next, without the need to write lengthy translations, thus greatly simplifying the development of new hybrid algorithms and techniques.
Python
55
star
79

pretrained-microscopy-models

Python
54
star
80

GFR

GFR (Glenn Flux Reconstruction) software (LEW-19709-1) has been approved for an open source release
Fortran
54
star
81

refine

C
53
star
82

NASA-Space-Weather-Media-Viewer

Space Weather and the Sun.
52
star
83

giant

Goddard Image Analysis and Navigation Tool
Python
51
star
84

EADINLite

EADIN_Lite Network Protocol
C++
51
star
85

SingleDop

Single Doppler Retrieval Toolkit (SingleDop)
Jupyter Notebook
50
star
86

multipath-tcp-tools

C++
49
star
87

OnAIR

The On-board Artificial Intelligence Research (OnAIR) Platform is a framework that enables AI algorithms written in Python to interact with NASA's cFS. It is intended to explore research concepts in autonomous operations in a simulated environment.
Python
48
star
88

bingo

Python
48
star
89

MMM-Py

Marshall MRMS Mosaic Python Toolkit
Jupyter Notebook
48
star
90

CF

The Core Flight System (cFS) CFDP application.
C
47
star
91

ipv6_python

Python
47
star
92

MLMCPy

Python
47
star
93

TTECTrA

An open source, semi-automated, control design tool for subsonic aircraft engine simulations written in the MATLAB/Simulink environment. The Tool for Turbine Engine Closed-loop Transient Analysis provides the user a preliminary estimate of the closed-loop transient performance of an engine model.
47
star
94

WellClear

Well-Clear Boundary Models for Integration of UAS in the NAS
HTML
46
star
95

CertWare

Java
46
star
96

fpp

F Prime Prime: A modeling language for F Prime
C++
46
star
97

podaac_tools_and_services

A meta-repository which essentially lists code related to all tools and services software for NASA JPL's PO.DAAC
Python
45
star
98

cmr-stac

TypeScript
44
star
99

RtRetrievalFramework

C++
43
star
100

mplStyle

Matplotlib object oriented style system
Python
43
star