Skip to content

thkruz/ootk

Repository files navigation

ootk

build Size Release Issues Coverage License

An Orbital Object Toolkit in Your Web Browser

ootk is a modular collection of small libraries for doing math related to orbital objects written in TypeScript. ootk was developed to simplify the math and let you focus on using the results.

📘 Table of Contents

🔧 Installation

Install the library with NPM:

npm i ootk

📡 Usage

Loading the Library

Common.js (Node.js)

let Ootk = require('ootk.js');
...
const satrec = Ootk.Sgp4.createSatrec(line1, line2, 'wgs72', 'i');
import * as Ootk from 'ootk.es.js';
...
const satrec = Ootk.Sgp4.createSatrec(line1, line2, 'wgs72', 'i');

Script tag

Include dist/ootk.js as a script in your html:

<script src="path/to/dist/ootk.js"></script>

Ootk object will be available in global scope:

var satrec = Ootk.Sgp4.createSatrec(line1, line2, 'wgs72', 'i');

Propagating a TLE

const satrec = Ootk.Sgp4.createSatrec(line1, line2);
const state = Ootk.Sgp4.propagate(satrec, time);
console.log(state.position); // [x, y, z]
console.log(state.velocity); // [vx, vy, vz]

Creating a Satellite

const sat = new Ootk.Sat({ name: 'Test', tle1, tle2 });
console.log(sat.intlDes); // International Designator
console.log(sat.epochYear); // Epoch Year
console.log(sat.epochDay); // Epoch Day
console.log(sat.meanMoDev1); // Mean Motion Deviation 1
console.log(sat.meanMoDev2); // Mean Motion Deviation 2
console.log(sat.bstar); // Bstar (Drag Coefficient)
console.log(sat.inclination); // inclination in degrees
console.log(sat.raan); // right ascension of the ascending node in degrees
console.log(sat.eccentricity); // eccentricity
console.log(sat.argOfPerigee); // argument of perigee in degrees
console.log(sat.meanAnomaly); // mean anomaly in degrees
console.log(sat.meanMotion); // mean motion in revolutions per day
console.log(sat.period); // period in seconds
console.log(sat.apogee); // apogee in kilometers
console.log(sat.perigee); // perigee in kilometers

sat.propagate(time); // Propagate the satellite to the given time
sat.getLla(); // Get the satellite's position in latitude, longitude, altitude at its current time
sat.getEci(time); // Get the satellite's position in Earth-Centered Inertial coordinates at the given time without changing its state
sat.getRae(sensor, time); // Get position in range, aziimuth, elevation relative to a sensor object at the given time without changing its state

Creating a Sensor

const sensor = new Ootk.Sensor({ name: 'Test', lat: lat, lon: lon, alt: alt });
sensor.setTime(time); // Set the sensor's time to the given time
sensor.getRae(sat); // Get satellite position in range, aziimuth, elevation at the sensor's current time
sensor.getRae(sat, time); // Get position in range, aziimuth, elevation relative to a satellite object at the given time without changing its state

🖥️ Building

The source code is organized as Common.js modules and uses ES6 syntax. To build the library:

  1. Install Node.js and Node Package Manager;

  2. Install all required packages with NPM by running the following command from repository's root directory:

    npm install
  3. Run the following NPM script to build everything:

    npm run build

💎 NPM Scripts

  • build compiles TypeScript into ES6 Modules and combines them into a single file in the dist directory.
  • lint lints source code located in src directory with ESLint
  • lint:fix lints tests located in src directory with ESLint and attempts to auto-fix errors
  • lint:test lints tests located in test directory with ESLint
  • test runs jest to verify code remains functional
  • test:coverage generates lcov report to view code coverage

👨‍🏫 Contributing

This repo follows Gitflow Workflow.

Before starting a work on new pull request, please, checkout your feature or bugfix branch from develop branch:

git checkout develop
git fetch origin
git merge origin/develop
git checkout -b my-feature

Make sure that your changes don't break the existing code by running:

npm test

Check that your code follows the rules established in eslint.rc:

npm run lint

👨‍🔬 Contributors

This whole project is an example of standing on the shoulder's of giants. None of it would have been possible without the previous work of the following:

⚖️ License

Due to the expanding scope of this project, I have placed the code under the AGPL License in order to ensure that good ideas can be shared and that the code is open for everyone to use.