Contributions logicielles au projet RIOT OS pour le New Space

Le but de ce projet est de réaliser, de tester et de contribuer des implémentations open-source pour le projet RIOT OS qui est un système d'exploitation open-source.

Les propositions ci-dessous seront discutées avec vous.

Outils et langages : C, Make, Eclipse CDT, Visual Studio, Carte STM32 Nucleo et ESP32.

Proposition 1 : Plateforme logiciel open-source pour nano-satellite
Le « Newspace » désigne une nouvelle approche de l’industrie spatiale, fondée sur la capacité de plus en plus courante de pouvoir envoyer des micro-satellites (aka cubesats) en orbite autour de la Terre. Le temps et le coût de développement de ces micro-satellites sont réduits grâce l'utilisation de composants sur étagère aux dimensions standard qui sont fixés dans des structures aux dimensions standards (plusieurs cubes de 10x10x10 cms).



Le CSUG (Centre Spatial Universitaire de Grenoble) a déjà en orbite 2 projets de cubesat : Amical et Thingsat. Dans le cas de Thingsat, une partie du logiciel a été développé au moyen du système d'exploitation RIOT OS spécialisés pour les systèmes embarqués à base de microcontrôleurs.

L'objectif du projet est de concevoir une plateforme d'émulation complète d'un cubesat (aka segment vol) et de son segment sol (ie la station de reception et d'émission au sol).

L'architecture d'un segment vol (cubesat) est constitué de :
 * l'Onboard Computer (OBC) qui pilote un module de communication et un module de controle de l'attitude (ADCS). Il reçoit du segment des commandes à exécuter (maintien d'une attitude, manoeuvre quand il comporte des propulseurs, envoie de commandes vers les charges utiles) et envoie des télémetries (niveau de batterie, attitude ...)
 * les charges utiles (Payload) qui executent les missions du satellite (en general, des prises de photo avec des imageurs dans plusieurs spectres de lumière).

Les communications entre l'OBC et les charges utils se font au moyen d'un bus CAN (bus industriel utilisé dans tous les véhicules terrestres)

Dans votre cas, les communications entre le segment vol et le segment sol se font en modulation LoRa 2.4GHz.

Le travail consistera à récupérer et à assembler une partie des modules logiciels et pilotes de périphériques fournis par RIOT OS (SDCard, FatFS, SUIT, LoRaWAN, Gyroscope, GPS, Bus CAN ...) ou développé par le CSUG pour la mission Thingsat (SX1280, OBC, LibCSP, ...) pour réaliser les firmwares de l'OBC et de charges utiles (générique, spécialisée à prise de photos).

La plateforme matérielle pour les tests sera:


 * Segment Vol
 * OBC : Nucleo F446RE + Shield CAN BUS + Lecteur SDCard + Real Time Clock + Module GPS + Module SX1280 LoRa 2.4 GHz + Module Gyroscope (mesure d'attitude)
 * Payload : Nucleo F446RE + Shield CAN BUS + Camera Arduino (en option)
 * Segment Sol: Nucleo F446RE ou ESP32 + Module GPS + Module SX1280 LoRa 2.4 GHz

Ce projet servira de "blueprint" open-source pour des projets de micro-satellites du CSUG et d'autres centres spatiaux universitaires français et européens.



Proposition 2 : Update Semtech LoRaMAC Node Package
RIOT supports LoRaWAN through a in the house stack [GNRC LoRaWAN] and through the [Semtech LoRaMAC] package. The later is stuck on version V4.4.1 which implements the LoRaWAN specification 1.0.2. Since then 1.1 and 1.0.4 have been releaced, including among others security updates.

RIOT current support for [Semtech LoRaMAC] package will be the starting point, updatting the package to version > V4.7.0. It can be decoupled into two stages:

- Bump [Semtech LoRaMAC] to support the LoRaWAN 1.0.4 specification - Add support for the LoRaWAN 1.1 specification - Explore and add support for FUOTA, a good starting point are Semtech Loramac examples: - https://github.com/Lora-net/LoRaMac-node/tree/master/src/apps/LoRaMac/fuota-test-01 - Add lib for [LoRaWAN App Clock Sync](https://lora-alliance.org/resource_hub/lorawan-application-layer-clock-synchronization-specification-v1-0-0/) - Add lib for LoRaWAN utilities (OTAA incremental procedure, Blind ADR ...) - Add driver for SX1302 - Add Semtech UDP Packet Forwarder (for SX1302) : requires mainly a JSON parser lib.

Proposition 3: SenML, SAUL, MQTT Integrations
The IoT, previously known as WSN (wireless sensor network) still finds many use cases in sensors networks. These usecases share a common base: need to convey a value, information of when/where the value was taken, and what that value corresponds too. Standarizing the way this is done, and doing so in a simple exntensible fashion has been done through [SenML]. SenML is defined by a data model for measurements and simple metadata about measurements and devices. It has recently been integrated into RIOT with a simple example using [SAUL](https://api.riot-os.org/group__drivers__saul.html), RIOTs sensors and actuators abstraction layer.

Popular communication protocols used in IoT include MQTT and COAP, RIOT supports both of them offering often multiple implementations. What's missing is a module integrating SAUL, SenML and different IoT communication protocols in such a way that setting up a IoT sensing application in a standarized way.

- [paho-mqtt](https://github.com/RIOT-OS/RIOT/tree/master/examples/paho-mqtt) - [SenML](https://github.com/RIOT-OS/RIOT/pull/16384) - [SAUL](https://api.riot-os.org/group__drivers__saul.html) - [COAP] - [pyaiot](https://github.com/pyaiot/pyaiot)


 * [Semtech LoRaMAC]: https://github.com/Lora-net/LoRaMac-node
 * [GNRC LoRaWAN]: https://api.riot-os.org/group__net__gnrc__lorawan.html

Proposition 4: Participe in an OpenSource Project
- Bug fixing, see [issues](https://github.com/RIOT-OS/RIOT/issues) - Update / extend existing support for inference libraries on RIOT - Add driver support: - [ ] [GNSS modules](https://github.com/RIOT-OS/RIOT/issues/17253) - [ ] [MPR121 Touch Sensor](https://github.com/RIOT-OS/RIOT/issues/17249) - [ ] [A3G425OD digital gyroscope and temperature sensor](https://github.com/RIOT-OS/RIOT/issues/17058) - [ ] [STTS751 temperature sensor](https://github.com/RIOT-OS/RIOT/issues/17054) - [ ] [LSM6DS3 6-Axis Accelerometer&Gyroscope](https://github.com/RIOT-OS/RIOT/issues/17053) - Add modules: - TLE ([Two-Line Element](https://en.wikipedia.org/wiki/Two-line_element_set) for satellite tracking and visibility window prediction for transmission) - [LibCSP](https://github.com/libcsp/libcsp) (CubeSat Protocol) over CAN Bus - LibCSP utilities - Add developement BOARD support: - [ ] [Wio Terminal](https://www.google.com/search?channel=fs&client=ubuntu&q=seeedstudio+wio+terminal) - etc ...