Giter Club home page Giter Club logo

rgs's Introduction

RGS

The RGS repository contains the main infrastructure for the uORocketry Ground Station.

About the infrastructure

The infrastructure is composed of the following components:

Database

We are using a TimescaleDB instance for the database. The database schema is defined using the Drizzle ORM and we also use Hasura to expose a GraphQL API for consuming the data.

Providers

The providers are the components that receive data from an external source (eg: The rocket or a sensor) and broadcast it to the rest of the infrastructure.

These are the hydra_provider, which receives data from the Hydra rocket and the labjack_provider, which receives data from the labjack sensors.

Frontends

The frontends are the components that allow the user to interact with the infrastructure. At the moment only being the web frontend.

How to run

There are a few things of interest that you might want to have running on your machine:

  • Docker + Docker Compose
  • The backend Database/Hasura instance which can be run with docker-compose up
  • The web frontend application. See its README for more information.
  • The hydra_provider project which can provide usefull serial/development-random-data for the web frontend. See its README for more information.
  • Labjack Provider has not been implemented yet.

Running with PM2

In addition, you can use PM2 as a process manager to run the stack. This is useful for running the ground station in case a process crashes.

  • Run pm2 start to start the processes defined in the ecosystem file.
  • See PM2 Quick Start for more information.

Note: For development purposes hydra_provider isn't included in the pm2 ecosystem file. Check its README for more information on how to run it.

Troubleshooting

Please refer to each of the following for more information.

rgs's People

Contributors

anjelikabab avatar ccm32004 avatar eilayk avatar jonapap avatar marwanmashaly1 avatar noahsprenger avatar seofernando25 avatar tofarati262 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

jo-walker

rgs's Issues

Replace old sky with cubemap

The current dynamic sky component needs to be replaced.

image

When the component is cleaned up a bug out of our control borks the application.

Add keybind support

Implement and allow user to customize their keybinds.

Straight up just copy vscode's keybind.

Eg:

[
  {
    "key": "shift+1",
    "command": "changeLayout",
    "args": { "layoutName" : "mapTracker" },
    "when": "!modalOpen"
  },
  {
    "key": "shift+k",
    "command": "nukeDatabase",
    "when": " env === 'development' "
  },
{
    "key": "`",
    "command": "openCommandPallete",
     "when": "!modalOpen"
  },
]

We can just save it on local storage now and add event listener for each combination.

Add Gizmos to the NavBall

Currently the NavBall only displays the current rotation and its not that much precise/visible

Add Gizmos that show

  • Prograde and retrograde (Velocity vector)
  • Normal and Anti-normal (Ground Normal Vector)
  • Arbitrary Target

image

Additionally have labels to the screen (preferably spread out on all corners)
Containing information such as: heading (N/S/E/W), GPS Coords/ miscellaneous positional info

Lazy Load components in the main panels page

Describe the Bug

Currently everything is being imported at load time.
Increasing the amount of transfers and amount of Javascript loaded by a lot.

It has a pretty small impact for now but it will definitely add up as we add more libraries and components.

Check this example for how to do it with the import function: https://svelte.dev/repl/6db375be880441299f7721b54434068f?version=3.38.1

How will I know if I solved it?

A: If you open the DevTools on the network tab you'll see that there is a bunch of javascript modules that get loaded at the same time.

image

They are not expected to be load on the client until they are actually used in the page.

Don't have RocketStatus be calculated by the client

Currently RocketStatus is being calculated client side in a component.
This is bad because if we have two or more components or even two people connected we would send repeated data.

A few possible altenatives are:

  • Have it be calculated in a View Collection for RocketStatus
  • Separate service for calculating those sort of metrics
  • Writable that tries to calculate that using the latest data or previous data with filters (eg: sort by altitude for max altitude)

Add a rocket map tracker component

Create a component to be used with our docking layout...

That displays:

  • The Lat/Lon position of the rocket
  • A Satellite map that automatically follows the rocket

These should be similar to the one already in the Recovery page

You may create some mock data on the store.ts file (there is already an example you can follow)

Introduce E2E tests with playwright

We are literally doing rocket science!

We need to have at least a few tests e2e to verify that RGS is accessible, that buttons, panels and most things work for quality assurance when real deal comes.

  • Add the playwright library

  • No need to add any specific tests but we would probably need a setup script to also run the ZeroMQ proxy and a mock provider

    • Have it at least check if the website load and its title is set to RGS

More info from Health tab

Out health tab currently allow us to check if a service is up or not:

image

But it doesn't quite gives us an in-depth sight on why that is.

eg:
A brief: Unreachable, Not Serving, issue with component, etc message.

It would be interesting if we could see a reason for it and optionally click on each item to see its logs in real time

Fix rocket model UP axis rotation

At the last launch site, I noticed that the rocket was incorrectly rotate by -90 degrees around the UP axis.
Might be an issue with the coordinate system, I think "north" should actually be "west".

This issue is also currently blocked by us not having any boards to verify it with.

Able to save and restore layout

We would want to have preset layout for each member of the team.

In addition, buttons to restore or add windows to the layout would be neat
(because if you delete a window by accident you're out of luck)

The best way to do it isn't quite straightforward but we could discuss

Purpose of client folder

In the root folder there is a folder called client with an auto generated .svelte-kit file.

Is there any reason for this to exist @MarwanMashaly1?
or maybe it was created by accident ๐Ÿค”

image

Add extra info on the status button

This little guy currently doesn't do anything.

image

We might want to ping the server once in a while (every 3-5 seconds) to check our ping and other things

Refactor web's components folder into a more logical manner

It's kind of whack at the moment.

Please keep Smart and Dumb components separate.

A component is considered smart if any:

  • It has a considerable amount of subcomponents
  • It has a considerable amount of JavaScript
  • It connects to the database
  • Is not "standalone" (other than using modules) (eg: Uses a store)
  • It wraps a dumb component

Here is the new intended folder style

  • src/lib/components
    • smart
      • RocketTracker
      • RocketNavBall
      • MissedMessagesGraph
      • RocketNavBall
    • dumb
      • Map (with configuration given by props)
      • NavBall
      • Timer
      • CheckboxSelect

If in doubt just have it as a smart component.
If a smart component has a few subcomponents that are also smart, group them in a folder.

Radio Status

The RFD 900+ should interject MAVLINK packets about the status of the radio. The proxy needs to handle this so we can measure the strength of the link. This can be added after the mavlink branch is merged.

Implement the hydra_provider GRPC server

hydra_provider is currently using a stub implementation for the GRPC server.

We would like to have an exposing API that allow us to:

  • Check the current running configuration of hydra_provider (health and status)
  • Change configurations (set data mode: random, serial port, idle; select a desired serial port, set baud rate, etc)

And optionally a simple UI front-end for it.

It seems that a quite big refactor would have to be made for it to work as the currently hydra_provider architecture doesn't allow it.

Create a labjack_provider

Write a new service/app that allow us to interface with LabJack.

Reach @NoahSprenger for more info

The LabJack service should:

  • Rebroadcast messages from ZMQ network
  • Receive command allowing it to be "remote controlled"

Create a dedicated component for vertical velocity

We'd like to be able to see the vertical velocity of the rocket.

The implementation and design is up to you.

I'd like to be able to:

  • Have a visual representation of the current vertical velocity
  • Have numbers displaying the current vertical velocity, if you're a math person you could even add extra things
  • [BONUS] Have some axis labels on the visualization

image

Remember, the design is up to you, there is no right or wrong way to do it.

Create a proper fake_provider

We don't quite want to rely on hydra_provider to send mock messages.

  • We require a basic input box to send a raw messages
  • BONUS: Have hydra_provider be able to read a to-be-defined Command message
  • BONUS++: Have hydra_provider be able to send the messages via radio

Improve graph axis labels

Currently they're autogenerated.
The downside of that is that there is no tooltip display or obvious way of knowing what a certain label is.

It would be nice if they were more organized and obvious.

Labjack requires root to install share folder

The install file on labjack_provider/vendor/labjack/install.sh currently requires root permissions for Labjack to work.
Context: Labjack hardcodes its logs and configurations to /usr/share/LabJack/ and unfortunately LabJack is not open source

I'd like to find a way to be able to run labjack_provider without root permissions.

Enhance the log viewer to better handle and inspect messages

The current LogView does not quite suit our needs for inspecting the messages.

  • Have a table that displays the latest ZeroMQ messages from the raw collection on the database
  • Most if not all raw values should be JSON values.
    • Add an extra inspector for when we click on JSON message (rocket message etc)
  • BONUS: Allow for searching full text search see: filters
  • BONUS: Custom inspector viewer per message type

Flight Director Tasks

Allow Flight director to:

  • set a launch point
  • set a launch time
  • set target altitude (+ see delta from target altitude)

Then:

  • Display the rocket distance from target altitude
  • Display total traveled distance from launch point (lat+lon distance)
  • Countdown time from launch time

Misc Calculations

Create or modify a component that allow us to see the:

  • Current + Max G Force
  • CUrrent + Max Velocity

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.