2023-05-18 IMACs Revamp Meeting

  • purpose is to discuss how we want to do ground station v2

    • requirements

    • language/framework

  • Requirements

    • modularize datatelem and gui so its easier to debug

      • testable units: data-telem, GUI, and ZP Telemetry Manager

    • Mavlink/drop in replacement for COTS

      • QGroundControl

      • Mission Planner

      • https://mavlink.io/en/

    • Easy to distribute/set up

      • Single line/click install

      • Should just work!

    • Runs on Windows or Linux

    • display map with GPS markers

    • Well documented

    • Can run without internet connection

    • Connect to COM port

    • Connect to network address

  • Nice To have

    • Runs on MacOS

    • on the fly UI changes

      • moving components around and stuff

      • draggable widgets

    • ability to choose which USB/COM port has the telem link

Model

  • Client-Server Interrupt

    • Server:

      • Deserializes input data from USB COM or network address

      • Converts data into to format client will understand (application layer)

      • Wrap data and send packet on exit port (rest of OSI layers)

    • Client:

      • Connects to localhost server port and unwraps data from packet

      • GUI update on callback from received data?

  • Client-Server Poll

    • Server:

      • Same as above but server will wait for client to ask for data

    • Client:

      • Same as above but will periodically ask the client for data

  • Monolith

    • Does everything from start to end

    • Multithreading/multiprocessing

Client Framework ideas

  • Wails

  • Flutter

    • https://flutter.dev/multi-platform/desktop

    • Good community and support

    • Strongly typed

    • Single language

      • No CSS, HTML, JavaScript combo

    • Good centralized documentation

    • Built in linter and formatter

      • Dart fmr?

    • Multiplatform development

    • Supports cross-compilation

    • Has debugger

  • Javascript frameworks

    • Easy to write in

    • Lots of documentation

    • Around for a long time

    • Huge community and support

    • Spaghetti code

    • Lots of linters to choose from

    • Industry prevalent: Résumé and co-op

  • Kotlin?

    • In beta?

Server languages:

  • Go

    • Good community and support

    • Statically typed

    • Good centralized documentation

    • Built in linter

    • Multiplatform development

    • Support cross-compilation

    • Has debugger

  • Java

    • JVM required

  • Rust

    • Meh community and support

    • Statically typed

      • Guaranteed correctness

    • Meh documentation (have to find a library)

    • Linter???

    • Multiplatform development

    • Compilation???

    • Has debugger

  • Python

    • Dynamically typed

    • Everyone hates this

    • Context: We did this for the 2022-2023 competition and ran into many issues. Deduced that this is not the right tool to use and debugging is a huge pain.

  • C++

    • NO

    • We would run into a lot of issues bc there is not a lot of support to do the functions required by the server

    •  

  •  

 

Implementation

Action items

  • Get information on how LTE telemetry works (Internet? Network interface? USB?)

  • Find out whether client and server can be packaged together in CI

    • That isn’t just building them separately and then putting them in a zip with a script that runs the server and then the client (which is fine)

  • Single repository or separate repositories?

  • Is the client-server model necessary?