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
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
Monolith, will not use
Flutter
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
server
get bytes from USB or network
use MAVLink library to convert bytes to structs
extract useful data into a JSON
send JSON through socket
client
an event comes in
you process the data in a callback
update the gui
update the sensor data/map
send a notification widget to the user (if its like one off)
Logging
SQL database
Text file (this is very much the way to go)
Testing
Python
update existing testing scripts to use MAVLink instead of LCM
mission planner simulation https://ardupilot.org/planner/docs/mission-planner-simulation.html
unit testing
for web, https://blog.postman.com/postman-supports-websocket-apis/
send test data as JSON through the websocket and view the GUI update
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?