ootk
Version:
Orbital Object Toolkit including Multiple Propagators, Initial Orbit Determination, and Maneuver Calculations.
178 lines (128 loc) • 6.11 kB
Markdown
# ootk

[](https://www.npmjs.com/package/ootk)
[](https://github.com/thkruz/ootk/issues)
[](LICENSE.MD)
> An Orbital Object Toolkit in Your Web Browser
**ootk** is a collection 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.
Most of the functionality was originally written for [KeepTrack](https://github.com/thkruz/keeptrack.space) and then
later refactored into this library for others to use.
## :wrench: Installation
Install the library with [NPM](https://www.npmjs.com/):
```bash
npm i ootk
```
### Example Usage
```ts
import { DetailedSatellite, DetailedSensor, Degrees, Kilometers, SpaceObjectType, TleLine1, TleLine2 } from "ootk";
// Using api.keeptrack.space API
fetch('https://api.keeptrack.space/v1/sat/25544')
.then((res) => res.json())
.then((satData) => {
const satellite = new DetailedSatellite({
id: satData.id,
tle1: satData.tle1 as TleLine1,
tle2: satData.tle2 as TleLine2,
});
// Get the satellite's position at the current time
const eci = satellite.eci();
// Log the satellite's position - y component only
console.log(eci.position.y);
// Access other satellite properties
console.log(satellite.inclination); // inclination in degrees
console.log(satellite.eccentricity); // eccentricity
console.log(satellite.period); // period in minutes
// Get LLA (Latitude, Longitude, Altitude)
const lla = satellite.lla();
console.log(lla); // { lat: degrees, lon: degrees, alt: kilometers }
const sensor = new DetailedSensor({
lat: 41.754785 as Degrees,
lon: -70.539151 as Degrees,
alt: 0.060966 as Kilometers,
minAz: 347 as Degrees,
maxAz: 227 as Degrees,
minEl: 3 as Degrees,
maxEl: 85 as Degrees,
minRng: 0 as Kilometers,
maxRng: 5556 as Kilometers,
name: 'Cape Cod',
type: SpaceObjectType.PHASED_ARRAY_RADAR,
});
// Assuming we have a satellite object from the previous example
const rae = sensor.rae(satellite);
// Log the azimuth from sensor to satellite
console.log(rae.az);
// Check if a satellite is in the sensor's field of view right now
const isSatInFov = sensor.isSatInFov(satellite);
console.log(isSatInFov); // true or false
// Calculate passes for a satellite (in 30 second intervals)
const passes = sensor.calculatePasses(30, satellite);
console.log(passes); // Array of pass information
// Convert sensor position to J2000 coordinates
const j2000 = sensor.toJ2000();
console.log(j2000); // J2000 object with position and velocity
});
```
## :books: Documentation
**New to OOTK?** Check out our comprehensive documentation:
- **[Getting Started Guide](./docs/getting-started.md)** - Perfect for beginners! Learn the basics with step-by-step tutorials
- **[User Guide](./docs/user-guide.md)** - Complete reference for all features and advanced capabilities
- **[Documentation Index](./docs/README.md)** - Browse all available documentation
The documentation covers:
- Installation and setup
- Satellite tracking and propagation
- Ground sensor operations and pass predictions
- Coordinate system transformations
- Orbit determination methods
- Maneuver planning
- Advanced features (force models, interpolation, covariance)
- Common use cases with complete examples
## :desktop_computer: Building
1. Install [Node.js](https://nodejs.org/) and [Node Package Manager](https://www.npmjs.com/);
2. Install all required packages with NPM by running the following command from repository's root directory:
```bash
npm install
```
3. Run the following NPM script to build everything:
```bash
npm run build
```
## :gem: 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](http://eslint.org/)
- `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
## :man_teacher: Contributing
This repo follows [Gitflow Workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow).
Before starting a work on new [pull request](https://github.com/thkruz/ootk/compare), please, checkout your feature or
bugfix branch from `develop` branch:
```bash
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:
```bash
npm test
```
Check that your code follows the rules established in eslint.rc:
```bash
npm run lint
```
## :man_scientist: 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:
- [@ezze (Dmitriy Pushkov)](https://github.com/ezze)
- [@david-rc-dayton (David RC Dayton)](https://github.com/david-rc-dayton)
- [@davidcalhoun (David Calhoun)](https://github.com/davidcalhoun)
- [@shashwatak (Shashwat Kandadai)](https://github.com/shashwatak)
- [@brandon-rhodes (Brandon Rhodes)](https://github.com/brandon-rhodes)
- [@mourner (Volodymyr Agafonkin)](https://github.com/mourner)
- [@Hypnos (Robert Gester)](https://github.com/Hypnos3)
## :balance_scale: License
I have placed the code under the [AGPL License](LICENSE.md) in order to ensure that good ideas can be shared and that
the code is open for everyone to use. [Learn more here](https://www.gnu.org/philosophy/philosophy.html).