All Projects → mbertschler → Dragon Iss Docking Autopilot

mbertschler / Dragon Iss Docking Autopilot

Licence: mit
Autopilot in Go for docking the SpaceX Dragon capsule in the simulator

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Dragon Iss Docking Autopilot

Front-end-tutorial
🐼 最全的资源教程-前端涉及的所有知识体系,并在 Nice Front-end Tutorial 持续更新;
Stars: ✭ 1,655 (+499.64%)
Mutual labels:  webassembly
ESPressIoT
This project covers somewhat advances features for an espresso machine controller.
Stars: ✭ 31 (-88.77%)
Mutual labels:  controller
Service Level Operator
Manage application's SLI and SLO's easily with the application lifecycle inside a Kubernetes cluster
Stars: ✭ 260 (-5.8%)
Mutual labels:  controller
k8s-trigger-controller
External controller that trigger Kubernetes Deployments on ConfigMap or Secret changes
Stars: ✭ 47 (-82.97%)
Mutual labels:  controller
unity-gameplay-framework
A gameplay framework to simplify Unity development.
Stars: ✭ 30 (-89.13%)
Mutual labels:  controller
Riscv Rust
RISC-V processor emulator written in Rust+WASM
Stars: ✭ 253 (-8.33%)
Mutual labels:  webassembly
Binaryen
Binaryen for Swift
Stars: ✭ 15 (-94.57%)
Mutual labels:  webassembly
Wasm Git
GIT for nodejs and the browser using https://libgit2.org compiled to WebAssembly with https://emscripten.org
Stars: ✭ 261 (-5.43%)
Mutual labels:  webassembly
node-wasm-trace
Instruments wasm files and traces execution
Stars: ✭ 24 (-91.3%)
Mutual labels:  webassembly
Vmsg
🎵 Library for creating voice messages
Stars: ✭ 257 (-6.88%)
Mutual labels:  webassembly
rust-browser-game
Bloat-Free Browser Game in Rust (rustc-only challenge)
Stars: ✭ 20 (-92.75%)
Mutual labels:  webassembly
AMLeaksFinder
A small tool for automatically detecting the [controller, view memory leak] in the project. 一款用于自动检测项目中【控制器内存泄漏,View 内存泄漏】的小工具,支持 ObjC,Swift。
Stars: ✭ 89 (-67.75%)
Mutual labels:  controller
Azure Key Vault To Kubernetes
Azure Key Vault to Kubernetes (akv2k8s for short) makes it simple and secure to use Azure Key Vault secrets, keys and certificates in Kubernetes.
Stars: ✭ 253 (-8.33%)
Mutual labels:  controller
wgpu-rust-renderer
A tiny WebGPU renderer written in Rust
Stars: ✭ 81 (-70.65%)
Mutual labels:  webassembly
Wargo
Easy Rust to WebAssembly
Stars: ✭ 260 (-5.8%)
Mutual labels:  webassembly
loadbalancer-controller
Kubernetes loadbalancer controller to provision ingress controller dynamically
Stars: ✭ 93 (-66.3%)
Mutual labels:  controller
wasm-arrays
A couple of helper functions to make WebAssembly array parameters easy to use
Stars: ✭ 33 (-88.04%)
Mutual labels:  webassembly
Dunglasactionbundle
Symfony controllers, redesigned
Stars: ✭ 269 (-2.54%)
Mutual labels:  controller
Octopus
Security Analysis tool for WebAssembly module (wasm) and Blockchain Smart Contracts (BTC/ETH/NEO/EOS)
Stars: ✭ 261 (-5.43%)
Mutual labels:  webassembly
Cone
Cone Programming Language
Stars: ✭ 257 (-6.88%)
Mutual labels:  webassembly

Dragon ISS Docking Autopilot in Go

Autopilot written in Go and executed as WebAssembly for docking the SpaceX Dragon capsule in the official simulator.

Screencast of the autopilot in action

Autopilot during docking

Why

I never used Go and WebAssembly together before. This seemed like a nice and small excercise and I also got to refresh controller algorithms.

Using this autopilot

  • Compile the autopilot and serve the files.
go run ./cmd/autopilot-server
  • Open the SpaceX ISS docking simulator: https://iss-sim.spacex.com
  • Open the developer console of your browser (eg. right click > Inspect in Chrome)
  • Paste the following code into the console to load the autopilot:
const s = document.createElement("script");
s.setAttribute("src", "http://localhost:8000/loader.js?t="+ new Date().getTime());
document.body.appendChild(s);

If you want to make modifications to autopilot.go, restart the autopilot-server, refresh the simulator page and paste the above JavaScript code into the console again.

Controller algorithm

The main controller algorithm is the correct() method in autopilot.go. At first the current rate is calculated using the previous time and offset and dampened over some cycles DampingCycles.

Then a correction factor Correction is used to calculate the target rate. This target rate is limited based on the offset and RateFactor but kept between RateMin and RateMax.

The difference between target and current rate is then added to a clicks accumulator. Full clicks are then subtracted from the accumulator and returned from the function.

Play around with the ios configuration to get different controller behavior.

Contributing

If you improved this autopilot or added a new feature, don't hesitate to open a PR. I'm looking forward to see what you will do with it.


Built by @mbertschler

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].