Coder Social home page Coder Social logo

smallsatgasteam / openspa Goto Github PK

View Code? Open in Web Editor NEW
7.0 10.0 1.0 226 KB

a minimalist Space Plug-and-Play Architecture (SPA) services manager

License: MIT License

C++ 92.91% CMake 7.09%
cubesat smallsat space architecture linux spa plug-n-play networking transport

openspa's People

Contributors

ammonhepworth avatar kylehovey avatar nick-benoit14 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

wardmike

openspa's Issues

Write a median filter component

A median filter is a useful algorithm for when you need to rely on valid data points from noisy data. It is well documented in this short writeup. Nick wrote a median filter for our previous payload, but it wasn't tested very extensively and may require modifications.

The median filter should be placed in lib/components and inherit from Component

Backend TODO

  • Write the marshalling/unmarshalling to not require elevated privileges (i.e., don't change read-only memory)
  • Get a localHello/localAck dialogue working
  • Remove every instance of typedef Com. It's a little too vague, especially with multiple definitions across the projcet.

Write the aggregator component

The aggregator component needs to receive all of the data from every other sensor and aggregate it into a single string for transmission to things such as a screen, radio, or SD reader. It should be a class in lib/components and inherit from Component

Write the Boom component

This assignment will involve working with physical hardware in the GAS laboratory.

We are finally at the point in which we can start writing SPA wrappers for our physical devices! A SPA wrapper is basically a class that takes the drivers for a given sensor and arranges its functionality into something that is SPA-compliant. Essentially, it should arrange the sensor's output into SpaData messages, handle incoming messages in a meaningful way, and handle other sensor-specific logic.

The SPA wrapper should be in lib/components and inherit from Component

The Boom component will receive filtered barometric readings from the MedianFilter and commands from the radio.

This, of course, requires interfacing the device with the Beaglebone Black. Study our previous payload code to get an idea of how things will work!

(I) Make communicators functional

  • Need to research and develop more fine grained communicator tasks

  • Physical communicators, especially the local communicator need to be able to send actual SPA messages.

  • Should implement both send and listen methods, and be able to effectively handle received messages

Start developing SubnetManager logic

  • The subnet manager now can handle receiving messages. This can be seen in src/subnet_manager_driver.cpp. We now however need to add logic to deal with messages when they arrive.
    This will include:
  • Adding component List
  • Responding to messages
  • Component health checks

Write the sensor data component

This assignment will involve working with physical hardware in the GAS laboratory.

We are finally at the point in which we can start writing SPA wrappers for our physical sensors! A SPA wrapper is basically a class that takes the drivers for each sensor and arranges their functionality into something that is SPA-compliant. Essentially, it should arrange the sensors' output into SpaData messages, handle incoming messages in a meaningful way, and handle other sensor-specific logic.

The SPA wrapper should be in lib/components and inherit from Component

The SensorData component will specifically be a wrapper to handle all of our strictly data-producing components:

  • BNO055 Gyroscope
  • MCP9808 Temperature sensor
  • DS1307RTC Clock
  • CoolSat Barometer
  • TinyGPSPlus
  • uCamII Camera

This, of course, requires interfacing the sensor with the Beaglebone Black. Study errno_3's code to find the necessary libraries and see how to use each sensor!

Write the logging/radio component

This assignment will involve working with physical hardware in the GAS laboratory.

We are finally at the point in which we can start writing SPA wrappers for our physical devices! A SPA wrapper is basically a class that takes the drivers for a given sensor and arranges its functionality into something that is SPA-compliant. Essentially, it should arrange the sensor's output into SpaData messages, handle incoming messages in a meaningful way, and handle other sensor-specific logic.

The SPA wrapper should be in lib/components and inherit from Component

The logging/radio component will specifically be a SPA wrapper for the radio, SD reader, and printing to the screen. It will receive data from the SensorData component in the form of strings, and the radio will send commands to the camera in SensorData and the Boom.

This, of course, requires interfacing the devices with the Beaglebone Black. Study our previous payload code to find the necessary libraries and see how to use each one!

Implement Local Subnet Manager

  • Develop more fine grained local subnet manager tasks
  • Should contain Local communicator
  • Should be able route messages to components, and other subnet managers

Write a SPA wrapper for the barometer

This assignment will involve working with physical hardware in the GAS laboratory.

We are finally at the point in which we can start writing SPA wrappers for our physical sensors! A SPA wrapper is basically a class that takes the drivers for a given sensor and arranges its functionality into something that is SPA-compliant. Essentially, it should arrange the sensor's output into SpaData messages, handle incoming messages in a meaningful way, and handle other sensor-specific logic.

The SPA wrapper should be in lib/components and inherit from Component

This, of course, requires interfacing the sensor with the Beaglebone Black. Study our previous payload code to find the necessary libraries and see how to use each sensor!

Component Type

When components send the local hello message one of the fields is 'Component Type'. This allows a subnet manager to know if it is talking to another subnet manager, or other special component. The actual values of this field and there meanings appear not to be documented. We need to come up with a good way to list out these component types and there meanings such that they can be shared across the entire system.

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.