Merge pull request 'typos and design chapter fixes' (#291) from book-design-update into main
Reviewed-on: #291
This commit was merged in pull request #291.
This commit is contained in:
@@ -9,5 +9,5 @@
|
|||||||
|
|
||||||
Refer to new sections in the system view page:
|
Refer to new sections in the system view page:
|
||||||
|
|
||||||
- [Fault, Detection, Isolation and Recovery (FDIR)](./fdir.md)
|
- [Fault Detection, Isolation and Recovery (FDIR)](./fdir.md)
|
||||||
- and the [mode tree](./mode-tree.md)
|
- and the [mode tree](./mode-tree.md)
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
# Communication with sat-rs based software
|
# Communication with sat-rs based software
|
||||||
|
|
||||||
Communication is a vital topic for remote system which are usually not (directly)
|
Communication is a vital topic for remote systems which are usually not (directly)
|
||||||
connected to the internet and only have 1-2 communication links during nominal operation. However,
|
connected to the internet and only have 1-2 communication links during nominal operation. However,
|
||||||
most of these systems have internet access during development cycle. There are various standards
|
most of these systems have internet access during the development cycle. There are various standards
|
||||||
provided by CCSDS and ECSS which can be useful to determine how to communicate with the satellite
|
provided by CCSDS which can be useful to determine how to communicate with the satellite
|
||||||
and the primary On-Board Software.
|
and the primary On-Board Software.
|
||||||
|
|
||||||
Most communication with space systems is usually packet based. For example, the CCSDS space
|
Most communication with space systems is usually packet based. For example, the CCSDS space
|
||||||
@@ -15,7 +15,7 @@ provides some support for the [CCSDS space packet protocol](https://ccsds.org/Pu
|
|||||||
1. [UDP TMTC Server](https://docs.rs/satrs/latest/satrs/hal/std/udp_server/index.html).
|
1. [UDP TMTC Server](https://docs.rs/satrs/latest/satrs/hal/std/udp_server/index.html).
|
||||||
UDP is already packet based which makes it an excellent fit for exchanging space packets.
|
UDP is already packet based which makes it an excellent fit for exchanging space packets.
|
||||||
2. [TCP TMTC Server Components](https://docs.rs/satrs/latest/satrs/hal/std/tcp_server/index.html).
|
2. [TCP TMTC Server Components](https://docs.rs/satrs/latest/satrs/hal/std/tcp_server/index.html).
|
||||||
TCP is a stream based protocol, so the library provides building blocks to parse telemetry
|
TCP is a stream based protocol, so the library provides building blocks to parse telecommands
|
||||||
from an arbitrary bytestream. Two concrete implementations are provided:
|
from an arbitrary bytestream. Two concrete implementations are provided:
|
||||||
- [TCP spacepackets server](https://docs.rs/satrs/latest/satrs/hal/std/tcp_server/struct.TcpSpacepacketsServer.html)
|
- [TCP spacepackets server](https://docs.rs/satrs/latest/satrs/hal/std/tcp_server/struct.TcpSpacepacketsServer.html)
|
||||||
to parse tightly packed CCSDS Spacepackets.
|
to parse tightly packed CCSDS Spacepackets.
|
||||||
@@ -26,8 +26,8 @@ provides some support for the [CCSDS space packet protocol](https://ccsds.org/Pu
|
|||||||
# Working with telemetry and telecommands (TMTC)
|
# Working with telemetry and telecommands (TMTC)
|
||||||
|
|
||||||
The commands sent to a space system are commonly called telecommands (TC) while the data received
|
The commands sent to a space system are commonly called telecommands (TC) while the data received
|
||||||
from it are called telemetry (TM). One way to model the packet handling is to introduce the concept
|
from it are called telemetry (TM). One way to model the packet handling, which can be applied to most
|
||||||
of a TC source and a TM sink can be applied to most satellites. The TM sink is the one entity where
|
satellites, is to introduce the concept of a TC source and a TM sink. The TM sink is the one entity where
|
||||||
all generated telemetry arrives in real-time. The most important task of the TM sink usually is to
|
all generated telemetry arrives in real-time. The most important task of the TM sink usually is to
|
||||||
send all arriving telemetry to the ground segment of a satellite mission immediately.
|
send all arriving telemetry to the ground segment of a satellite mission immediately.
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ Another important task might be to store all arriving telemetry persistently. Th
|
|||||||
important for space systems which do not have permanent contact like low-earth-orbit (LEO)
|
important for space systems which do not have permanent contact like low-earth-orbit (LEO)
|
||||||
satellites.
|
satellites.
|
||||||
|
|
||||||
The diagram below shows one concrete example of how this could look like.
|
The diagram below shows one concrete example of what this could look like.
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
@@ -51,7 +51,7 @@ The most important task of a TC source is to deliver the telecommands to the cor
|
|||||||
For component oriented software using message passing, this usually includes demultiplexing
|
For component oriented software using message passing, this usually includes demultiplexing
|
||||||
to determine where a command needs to be sent.
|
to determine where a command needs to be sent.
|
||||||
|
|
||||||
The diagram below shows one concrete example of how this could look like.
|
The diagram below shows one concrete example of what this could look like.
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
@@ -64,7 +64,7 @@ flowchart LR
|
|||||||
```
|
```
|
||||||
|
|
||||||
Using a generic concept of a TC source and a TM sink as part of the software design simplifies
|
Using a generic concept of a TC source and a TM sink as part of the software design simplifies
|
||||||
the flexibility of the TMTC infrastructure: Newly added TM generators and TC receiver only have to
|
the flexibility of the TMTC infrastructure: Newly added TM generators and TC receivers only have to
|
||||||
forward their generated or received packets to those handler objects.
|
forward their generated or received packets to those handler objects.
|
||||||
|
|
||||||
# Packet format
|
# Packet format
|
||||||
@@ -80,16 +80,16 @@ This is a protocol which already provides us with some useful fields:
|
|||||||
multiplexing
|
multiplexing
|
||||||
- Basic sequence counter which can be used to determine missed packets
|
- Basic sequence counter which can be used to determine missed packets
|
||||||
|
|
||||||
However, how does the actual payload that we want to send to or from the satellite actually look
|
However, what does the actual payload that we want to send to or from the satellite actually look
|
||||||
like? We recommend a payload format which is created with the excellent [`serde`](https://serde.rs/)
|
like? We recommend a payload format which is created with the excellent [`serde`](https://serde.rs/)
|
||||||
library. The [TMTC modelling](./tmtc-modelling.md) chapter provides more information.
|
library. The [TMTC modelling](./tmtc-modelling.md) chapter provides more information.
|
||||||
|
|
||||||
# Low-level protocols and the bridge to the communcation subsystem
|
# Low-level protocols and the bridge to the communication subsystem
|
||||||
|
|
||||||
Many satellite systems usually use the lower levels of the OSI layer in addition to the application
|
Many satellite systems usually use the lower levels of the OSI layer in addition to the application
|
||||||
layer. This oftentimes requires special hardware like dedicated FPGAs to handle forward error
|
layer. This oftentimes requires special hardware like dedicated FPGAs to handle forward error
|
||||||
correction fast enough. `sat-rs`
|
correction fast enough. `sat-rs`
|
||||||
might provide components to handle standard like the Unified Space Data Link Standard (USLP) in
|
might provide components to handle standards like the Unified Space Data Link Protocol (USLP) in
|
||||||
software but most of the time the handling of communication is performed through custom
|
software but most of the time the handling of communication is performed through custom
|
||||||
software and hardware. Still, connecting this custom software and hardware to `sat-rs` can mostly
|
software and hardware. Still, connecting this custom software and hardware to `sat-rs` can mostly
|
||||||
be done by using the concept of TC sources and TM sinks mentioned previously.
|
be done by using the concept of TC sources and TM sinks mentioned previously.
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ Software for space systems oftentimes has different requirements than the softwa
|
|||||||
systems or servers. Currently, most space systems are considered embedded systems.
|
systems or servers. Currently, most space systems are considered embedded systems.
|
||||||
|
|
||||||
For these systems, the computation power and the available memory are important resources
|
For these systems, the computation power and the available memory are important resources
|
||||||
which are also constrained. This might make completeley heap based memory management schemes which
|
which are also constrained. This might make completely heap based memory management schemes which
|
||||||
are oftentimes used on host and server based systems unfeasable. Still, completely forbidding
|
are oftentimes used on host and server based systems infeasible. Still, completely forbidding
|
||||||
heap allocations might make software development unnecessarilly difficult, especially in a
|
heap allocations might make software development unnecessarily difficult, especially in a
|
||||||
time where the OBSW might be running on Linux based systems with hundreds of MBs of RAM.
|
time where the OBSW might be running on Linux based systems with hundreds of MBs of RAM.
|
||||||
|
|
||||||
A useful pattern commonly used in space systems is to limit heap allocations to program
|
A useful pattern commonly used in space systems is to limit heap allocations to program
|
||||||
initialization time and avoid frequent run-time allocations. This prevents issues like
|
initialization time and avoid frequent run-time allocations. This prevents issues like
|
||||||
running out of memory (something even Rust can not protect from) or heap fragmentation on systems
|
running out of memory (something even Rust can not protect from) or heap fragmentation on systems
|
||||||
without a MMU.
|
without an MMU.
|
||||||
|
|
||||||
# Using an embedded allocator
|
# Using an embedded allocator
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ which allows run-time tracking of the memory usage.
|
|||||||
|
|
||||||
# Using pre-allocated pool structures
|
# Using pre-allocated pool structures
|
||||||
|
|
||||||
A candidate for heap allocations is the TMTC and handling. TC, TMs and IPC data are all
|
A candidate for heap allocations is the TMTC handling. TC, TMs and IPC data are all
|
||||||
candidates where the data size might vary greatly. The regular solution for host systems
|
candidates where the data size might vary greatly. The regular solution for host systems
|
||||||
might be to send around this data as a `Vec<u8>` until it is dropped. `sat-rs` provides
|
might be to send around this data as a `Vec<u8>` until it is dropped. `sat-rs` provides
|
||||||
another solution to avoid run-time allocations by offering pre-allocated static
|
another solution to avoid run-time allocations by offering pre-allocated static
|
||||||
@@ -33,8 +33,8 @@ For example, a very small telecommand (TC) pool might look like this:
|
|||||||
|
|
||||||
The core of the pool abstractions is the
|
The core of the pool abstractions is the
|
||||||
[PoolProvider trait](https://docs.rs/satrs/latest/satrs/pool/trait.PoolProvider.html).
|
[PoolProvider trait](https://docs.rs/satrs/latest/satrs/pool/trait.PoolProvider.html).
|
||||||
This trait specifies the general API a pool structure should have without making assumption
|
This trait specifies the general API a pool structure should have without making assumptions
|
||||||
of how the data is stored.
|
about how the data is stored.
|
||||||
|
|
||||||
This trait is implemented by a static memory pool implementation.
|
This trait is implemented by a static memory pool implementation.
|
||||||
The code to generate this static pool would look like this:
|
The code to generate this static pool would look like this:
|
||||||
|
|||||||
+20
-15
@@ -2,37 +2,43 @@
|
|||||||
|
|
||||||
Satellites and space systems in general are complex systems with a wide range of requirements for
|
Satellites and space systems in general are complex systems with a wide range of requirements for
|
||||||
both the hardware and the software. Consequently, the general design of the library is centered
|
both the hardware and the software. Consequently, the general design of the library is centered
|
||||||
around many light-weight components which try to impose as few restrictions as possible on how to
|
around many light-weight components and a toolbox principle where you assemble everything
|
||||||
solve certain problems.
|
you need instead of plugging something into a larger framework. This approach allows the largest
|
||||||
|
amount of flexibility, including the operating system and platform choice. For example, `sat-rs`
|
||||||
|
can be used both in `async` and regular synchronous platforms.
|
||||||
|
|
||||||
There are still a lot of common patterns and architectures across these systems where guidance
|
There are still a lot of common patterns and architectures across these systems where guidance
|
||||||
of how to solve a problem and a common structure would still be extremely useful to avoid pitfalls
|
of how to solve a problem and a common structure would still be extremely useful to avoid pitfalls
|
||||||
which were already solved and to avoid boilerplate code. This library tries to provide this
|
which were already solved and to avoid boilerplate code. This library tries to provide this
|
||||||
structure and guidance the following way:
|
structure and guidance the following way:
|
||||||
|
|
||||||
1. Providing this book which explains the architecture and design patterns in respect to common
|
1. Providing this book which explains the architecture and design patterns with respect to common
|
||||||
issues and requirements of space systems.
|
issues and requirements of space systems.
|
||||||
2. Providing an example application. Space systems still commonly have large monolithic
|
2. Providing an example application. Space systems still commonly have large monolithic
|
||||||
primary On-Board Softwares, so the choice was made to provide one example software which
|
primary On-Board Software, so the choice was made to provide one example software which
|
||||||
contains the various features provided by sat-rs.
|
contains the various features provided by sat-rs.
|
||||||
3. Providing a good test suite. This includes both unittests and integration tests. The integration
|
3. Providing a good test suite. This includes both unit tests and integration tests. The integration
|
||||||
tests can also serve as smaller usage examples than the large `satrs-example` application.
|
tests can also serve as smaller usage examples than the large `satrs-example` application.
|
||||||
|
|
||||||
This library has special support for standards used in the space industry. This especially
|
This library has special support for standards used in the space industry. The recommended
|
||||||
includes standards provided by Consultative Committee for Space Data Systems (CCSDS) and European
|
standards are provided by the Consultative Committee for Space Data Systems (CCSDS):
|
||||||
Cooperation for Space Standardization (ECSS). It does not enforce using any of those standards,
|
|
||||||
but it is always recommended to use some sort of standard for interoperability.
|
- The CCSDS Space Packet Protocol as the basic packet format for telecommands and telemetry.
|
||||||
|
- The CCSDS File Delivery Protocol (CFDP) for file transfers.
|
||||||
|
|
||||||
|
The library does not enforce using any of those standards, but it is always recommended to use
|
||||||
|
some sort of standard for interoperability.
|
||||||
|
|
||||||
A lot of the modules and design considerations are based on the Flight Software Framework (FSFW).
|
A lot of the modules and design considerations are based on the Flight Software Framework (FSFW).
|
||||||
The FSFW has its own [documentation](https://documentation.irs.uni-stuttgart.de/fsfw/), which
|
The FSFW has its own [documentation](https://documentation.irs.uni-stuttgart.de/fsfw/), which
|
||||||
will be referred to when applicable. The FSFW was developed over a period of 10 years for the
|
will be referred to when applicable. The FSFW was developed over a period of 10 years for the
|
||||||
Flying Laptop Project by the University of Stuttgart with Airbus Defence and Space GmbH.
|
Flying Laptop Project by the University of Stuttgart with Airbus Defence and Space GmbH.
|
||||||
It has flight heritage through the 2 mssions [FLP](https://www.irs.uni-stuttgart.de/en/research/satellitetechnology-and-instruments/smallsatelliteprogram/flying-laptop/)
|
It has flight heritage through the 2 missions [FLP](https://www.irs.uni-stuttgart.de/en/research/satellitetechnology-and-instruments/smallsatelliteprogram/flying-laptop/)
|
||||||
and [EIVE](https://www.irs.uni-stuttgart.de/en/research/satellitetechnology-and-instruments/smallsatelliteprogram/EIVE/).
|
and [EIVE](https://www.irs.uni-stuttgart.de/en/research/satellitetechnology-and-instruments/smallsatelliteprogram/EIVE/).
|
||||||
Therefore, a lot of the design concepts were ported more or less unchanged to the `sat-rs`
|
Therefore, a lot of the design concepts were ported more or less unchanged to the `sat-rs`
|
||||||
library.
|
library.
|
||||||
FLP is a medium-size small satellite with a higher budget and longer development time than EIVE,
|
FLP is a medium-size small satellite with a higher budget and longer development time than EIVE,
|
||||||
which allowed to build a highly reliable system while EIVE is a smaller 6U+ cubesat which had a
|
which allowed building a highly reliable system while EIVE is a smaller 6U+ cubesat which had a
|
||||||
shorter development cycle and was built using cheaper COTS components. This library also tries
|
shorter development cycle and was built using cheaper COTS components. This library also tries
|
||||||
to accumulate the knowledge of developing the OBSW and operating the satellite for both these
|
to accumulate the knowledge of developing the OBSW and operating the satellite for both these
|
||||||
different systems and provide a solution for a wider range of small satellite systems.
|
different systems and provide a solution for a wider range of small satellite systems.
|
||||||
@@ -42,16 +48,15 @@ engineering to provide a reliable and robust basis for space On-Board Software.
|
|||||||
of using the Rust programming language was made for the following reasons:
|
of using the Rust programming language was made for the following reasons:
|
||||||
|
|
||||||
1. Rust has safety guarantees which are a perfect fit for space systems which generally have high
|
1. Rust has safety guarantees which are a perfect fit for space systems which generally have high
|
||||||
robustness and reliablity guarantees.
|
robustness and reliability guarantees.
|
||||||
2. Rust is suitable for embedded systems. It can also be run on smaller embedded systems like the
|
2. Rust is suitable for embedded systems. It can also be run on smaller embedded systems like the
|
||||||
STM32 which have also become common in the space sector. All space systems are embedded systems,
|
STM32 which have also become common in the space sector. All space systems are embedded systems,
|
||||||
which makes using large languages like Python challenging even for OBCs with more performance.
|
which makes using large languages like Python challenging even for OBCs with more performance.
|
||||||
3. Rust has support for linking C APIs through its excellent FFI support. This is especially
|
3. Rust has support for linking C APIs through its excellent FFI support. This is especially
|
||||||
important because many vendor provided libaries are still C based.
|
important because many vendor provided libraries are still C based.
|
||||||
4. Modern tooling like a package managers and various development helper, which can further reduce
|
4. Modern tooling like a package manager and various development helpers, which can further reduce
|
||||||
development cycles for space systems. `cargo` provides tools like auto-formatters and linters
|
development cycles for space systems. `cargo` provides tools like auto-formatters and linters
|
||||||
which can immediately ensure a high software quality throughout each development cycle.
|
which can immediately ensure a high software quality throughout each development cycle.
|
||||||
5. A large ecosystem with excellent libraries which also leverages the excellent tooling provided
|
5. A large ecosystem with excellent libraries which also leverages the excellent tooling provided
|
||||||
previously. Integrating these libraries is a lot easier compared to languages like C/C++ where
|
previously. Integrating these libraries is a lot easier compared to languages like C/C++ where
|
||||||
there is still no standardized way to use packages.
|
there is still no standardized way to use packages.
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Events
|
# Events
|
||||||
|
|
||||||
Events are an important mechanism used for remote systems to monitor unexpected
|
Events are an important mechanism used for remote systems to monitor unexpected
|
||||||
or expected anomalies and events occuring on these systems.
|
or expected anomalies and events occurring on these systems.
|
||||||
They can improve the observability of a system significantly and provide a
|
They can improve the observability of a system significantly and provide a
|
||||||
"paper trail" of what is happening or has happened on a satellite where regular
|
"paper trail" of what is happening or has happened on a satellite where regular
|
||||||
housekeeping packets might not be sufficient. They can also be used for fault
|
housekeeping packets might not be sufficient. They can also be used for fault
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ The most important components of the TMTC infrastructure include the following c
|
|||||||
|
|
||||||
- A TC source component which demultiplexes and routes telecommands based on parameters like
|
- A TC source component which demultiplexes and routes telecommands based on parameters like
|
||||||
packet APID and a target ID which is part of the packet payload.
|
packet APID and a target ID which is part of the packet payload.
|
||||||
- A TM sink sink component which is the target of all sent telemetry and sends it to downlink
|
- A TM sink component which is the target of all sent telemetry and sends it to downlink
|
||||||
handlers like the UDP and TCP server.
|
handlers like the UDP and TCP server.
|
||||||
|
|
||||||
You can read the [Communications chapter](./communication.md) for more
|
You can read the [Communications chapter](./communication.md) for more
|
||||||
@@ -114,7 +114,7 @@ client and any connected TCP client.
|
|||||||
|
|
||||||
### Application Group
|
### Application Group
|
||||||
|
|
||||||
The application group contain some components you might also find in a real satellite software.
|
The application group contains some components you might also find in a real satellite software.
|
||||||
This includes an AOCS stack with various device handlers and system level objects.
|
This includes an AOCS stack with various device handlers and system level objects.
|
||||||
|
|
||||||
### Shared components and functional interfaces
|
### Shared components and functional interfaces
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
# Fault Detecion, Isolation And Recovery (FDIR)
|
# Fault Detection, Isolation And Recovery (FDIR)
|
||||||
|
|||||||
@@ -8,21 +8,21 @@ An example for this could be temperature or attitude data. Data like this is com
|
|||||||
referred to as housekeeping data, and is usually one of the most important and most resource heavy
|
referred to as housekeeping data, and is usually one of the most important and most resource heavy
|
||||||
data sources received from a satellite.
|
data sources received from a satellite.
|
||||||
|
|
||||||
First, we are going to list some assumption and requirements about Housekeeping (HK) data:
|
First, we are going to list some assumptions and requirements about Housekeeping (HK) data:
|
||||||
|
|
||||||
1. HK data is generated periodically by various system components throughout the
|
1. HK data is generated periodically by various system components throughout the
|
||||||
systems.
|
system.
|
||||||
2. An autonomous and periodic sampling of that HK data to be stored and sent to Ground is generally
|
2. An autonomous and periodic sampling of that HK data to be stored and sent to Ground is generally
|
||||||
required. A minimum interface consists of requesting a one-shot sample of HK, enabling and
|
required. A minimum interface consists of requesting a one-shot sample of HK, enabling and
|
||||||
disabling the periodic autonomous generation of samples and modifying the collection interval
|
disabling the periodic autonomous generation of samples and modifying the collection interval
|
||||||
of the periodic autonomous generation.
|
of the periodic autonomous generation.
|
||||||
3. HK data often needs to be shared to other software components. For example, a thermal controller
|
3. HK data often needs to be shared with other software components. For example, a thermal controller
|
||||||
wants to read the data samples of all sensor components.
|
wants to read the data samples of all sensor components.
|
||||||
|
|
||||||
## Modelling our data
|
## Modelling our data
|
||||||
|
|
||||||
Generally, it makes sense to model the data with Rust data structures for various reasons. For
|
Generally, it makes sense to model the data with Rust data structures for various reasons. For
|
||||||
example, the sensor data received from a 3-axis magnetometer might me modelled like this:
|
example, the sensor data received from a 3-axis magnetometer might be modelled like this:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#[derive(Debug, Copy, Clone, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, Copy, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
@@ -93,7 +93,7 @@ Sometimes, you need to share the generated data as well. Furthermore, it might m
|
|||||||
decouple the HK generation from the data acquisition and only return the latest snapshot
|
decouple the HK generation from the data acquisition and only return the latest snapshot
|
||||||
of the data. In this case, you can put the `MgmData` inside an appropriate lock structure for your
|
of the data. In this case, you can put the `MgmData` inside an appropriate lock structure for your
|
||||||
platform/runtime to share it safely with other software components. For example, in a `std` system,
|
platform/runtime to share it safely with other software components. For example, in a `std` system,
|
||||||
you might simply use an `Arc<Mutex<MgmData>>` or a `Arc<RwLock<MgmData>>` for this.
|
you might simply use an `Arc<Mutex<MgmData>>` or an `Arc<RwLock<MgmData>>` for this.
|
||||||
|
|
||||||
Now, you can update that shared data structure when acquiring new data, and other software objects
|
Now, you can update that shared data structure when acquiring new data, and other software objects
|
||||||
or the HK generation routine can safely read from it.
|
or the HK generation routine can safely read from it.
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ The sat-rs book
|
|||||||
This book is the primary information resource for the [sat-rs library](https://egit.irs.uni-stuttgart.de/rust/sat-rs)
|
This book is the primary information resource for the [sat-rs library](https://egit.irs.uni-stuttgart.de/rust/sat-rs)
|
||||||
in addition to the regular API documentation. It contains the following resources:
|
in addition to the regular API documentation. It contains the following resources:
|
||||||
|
|
||||||
1. Architecture informations and consideration which would exceeds the scope of the regular API.
|
1. Architecture information and considerations which would exceed the scope of the regular API.
|
||||||
2. General information on how to build on-board Software and how `sat-rs` can help to fulfill
|
2. General information on how to build on-board software and how `sat-rs` can help to fulfill
|
||||||
the unique requirements of writing software for remote systems.
|
the unique requirements of writing software for remote systems.
|
||||||
|
|
||||||
# Introduction
|
# Introduction
|
||||||
@@ -20,7 +20,7 @@ through the 2 missions [FLP](https://www.irs.uni-stuttgart.de/en/research/satell
|
|||||||
and [EIVE](https://www.irs.uni-stuttgart.de/en/research/satellitetechnology-and-instruments/smallsatelliteprogram/EIVE/).
|
and [EIVE](https://www.irs.uni-stuttgart.de/en/research/satellitetechnology-and-instruments/smallsatelliteprogram/EIVE/).
|
||||||
|
|
||||||
However, `sat-rs` has a significantly reduced scope compared to those frameworks. Rust provides
|
However, `sat-rs` has a significantly reduced scope compared to those frameworks. Rust provides
|
||||||
a great ecosystem and a powerful standard library which reduced the need of large and complex
|
a great ecosystem and a powerful standard library which reduces the need for large and complex
|
||||||
frameworks.
|
frameworks.
|
||||||
|
|
||||||
# Getting started with the example
|
# Getting started with the example
|
||||||
@@ -28,7 +28,7 @@ frameworks.
|
|||||||
The [`satrs-example`](https://egit.irs.uni-stuttgart.de/rust/sat-rs/src/branch/main/satrs-example)
|
The [`satrs-example`](https://egit.irs.uni-stuttgart.de/rust/sat-rs/src/branch/main/satrs-example)
|
||||||
provides various practical usage examples of the `sat-rs` framework. If you are more interested in
|
provides various practical usage examples of the `sat-rs` framework. If you are more interested in
|
||||||
the practical application of `sat-rs` inside an application, it is recommended to have a look at
|
the practical application of `sat-rs` inside an application, it is recommended to have a look at
|
||||||
the example application. The [`satrs-minisim`](https://egit.irs.uni-stuttgart.de/rust/sat-rs/src/branch/main/satrs-minisim)
|
the example application. The [`satrs-minisim`](https://egit.irs.uni-stuttgart.de/rust/sat-rs/src/branch/main/satrs-example/minisim)
|
||||||
application complements the example application and can be used to simulate some physical devices
|
application complements the example application and can be used to simulate some physical devices
|
||||||
for the `satrs-example` device handlers.
|
for the `satrs-example` device handlers.
|
||||||
|
|
||||||
@@ -44,5 +44,5 @@ Currently this library has the following flight heritage:
|
|||||||
of the experiment [here](https://egit.irs.uni-stuttgart.de/rust/ops-sat-rs).
|
of the experiment [here](https://egit.irs.uni-stuttgart.de/rust/ops-sat-rs).
|
||||||
- Development and use of a sat-rs-based [demonstration on-board software](https://egit.irs.uni-stuttgart.de/rust/eurosim-obsw)
|
- Development and use of a sat-rs-based [demonstration on-board software](https://egit.irs.uni-stuttgart.de/rust/eurosim-obsw)
|
||||||
alongside a Flight System Simulator in the context of a
|
alongside a Flight System Simulator in the context of a
|
||||||
[Bachelors Thesis](https://www.researchgate.net/publication/380785984_Design_and_Development_of_a_Hardware-in-the-Loop_EuroSim_Demonstrator)
|
[Bachelor's thesis](https://www.researchgate.net/publication/380785984_Design_and_Development_of_a_Hardware-in-the-Loop_EuroSim_Demonstrator)
|
||||||
at [Airbus Netherlands](https://www.airbusdefenceandspacenetherlands.nl/).
|
at [Airbus Netherlands](https://www.airbusdefenceandspacenetherlands.nl/).
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ system reasoning for both system operators and OBSW developers. They also provid
|
|||||||
the behaviour of a component and also provide observability of a system. A few examples of how to
|
the behaviour of a component and also provide observability of a system. A few examples of how to
|
||||||
model the mode of different components within a space system with modes will be given.
|
model the mode of different components within a space system with modes will be given.
|
||||||
|
|
||||||
## Pyhsical device component with modes
|
## Physical device component with modes
|
||||||
|
|
||||||
The following simple mode scheme with the following three mode
|
The following simple mode scheme with the following three modes
|
||||||
|
|
||||||
- `OFF`
|
- `OFF`
|
||||||
- `ON`
|
- `ON`
|
||||||
@@ -18,10 +18,10 @@ sensors.
|
|||||||
|
|
||||||
1. `OFF` means that a device is physically switched off, and the corresponding software component
|
1. `OFF` means that a device is physically switched off, and the corresponding software component
|
||||||
does not poll the device regularly.
|
does not poll the device regularly.
|
||||||
2. `ON` means that a device is pyhsically switched on, but the device is not polled perically.
|
2. `ON` means that a device is physically switched on, but the device is not polled periodically.
|
||||||
3. `NORMAL` means that a device is powered on and polled periodically.
|
3. `NORMAL` means that a device is powered on and polled periodically.
|
||||||
|
|
||||||
If a devices is `OFF`, the device handler will deny commands which include physical communication
|
If a device is `OFF`, the device handler will deny commands which include physical communication
|
||||||
with the connected devices. In `NORMAL` mode, it will autonomously perform periodic polling
|
with the connected devices. In `NORMAL` mode, it will autonomously perform periodic polling
|
||||||
of a connected physical device in addition to handling remote commands by the operator.
|
of a connected physical device in addition to handling remote commands by the operator.
|
||||||
Using these three basic modes, there are two important transitions which need to be taken care of
|
Using these three basic modes, there are two important transitions which need to be taken care of
|
||||||
@@ -92,8 +92,8 @@ use-cases:
|
|||||||
2. `FAULTY` means that a component does not work properly. This might also impact other system
|
2. `FAULTY` means that a component does not work properly. This might also impact other system
|
||||||
components, so the passivation and isolation of that component is desirable for FDIR purposes.
|
components, so the passivation and isolation of that component is desirable for FDIR purposes.
|
||||||
3. `NEEDS RECOVERY` is used to attempt a recovery of a component. For example, a simple sensor
|
3. `NEEDS RECOVERY` is used to attempt a recovery of a component. For example, a simple sensor
|
||||||
could be power-cycled if there were multiple communication issues in the last time.
|
could be power-cycled if there were multiple communication issues recently.
|
||||||
4. `EXTERNAL CONTROL` is used to isolate an individual component from the rest of the system. For
|
4. `EXTERNAL CONTROL` is used to isolate an individual component from the rest of the system. For
|
||||||
example, on operator might be interested in testing a component in isolation, and the interference
|
example, an operator might be interested in testing a component in isolation, and the interference
|
||||||
of the system is not desired. In that case, the `EXTERNAL CONTROL` health state might be used
|
of the system is not desired. In that case, the `EXTERNAL CONTROL` health state might be used
|
||||||
to prevent mode commands from the system while allowing external mode commands.
|
to prevent mode commands from the system while allowing external mode commands.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Flight software built with `sat-rs` is generally structured into three layers.
|
|||||||
The application layer stays largely the same across missions and targets. The system / platform
|
The application layer stays largely the same across missions and targets. The system / platform
|
||||||
layer is where the target environment determines which concrete crates and mechanisms are used.
|
layer is where the target environment determines which concrete crates and mechanisms are used.
|
||||||
|
|
||||||
The book has specified chapters for some of the topics:
|
The book has dedicated chapters for some of the topics:
|
||||||
|
|
||||||
- [TMTC handling and Serialization](./tmtc-modelling.md)
|
- [TMTC handling and Serialization](./tmtc-modelling.md)
|
||||||
- [Events](./events.md)
|
- [Events](./events.md)
|
||||||
@@ -36,7 +36,7 @@ small set of additional crates.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
The application layer uses `sat-rs` together with `spacepackets` for CCSDS/ECSS packet handling
|
The application layer uses `sat-rs` together with `spacepackets` for CCSDS packet handling
|
||||||
and `cfdp` for file transfer. The platform layer relies on `std` for tasks, IPC, memory, time and
|
and `cfdp` for file transfer. The platform layer relies on `std` for tasks, IPC, memory, time and
|
||||||
filesystem access, `serde` and `postcard` for serialization and `log`/`fern` for logging. Hardware
|
filesystem access, `serde` and `postcard` for serialization and `log`/`fern` for logging. Hardware
|
||||||
access typically goes through Linux mechanisms like `uio`.
|
access typically goes through Linux mechanisms like `uio`.
|
||||||
@@ -49,7 +49,7 @@ different, even though the application layer stays the same.
|
|||||||

|

|
||||||
|
|
||||||
Here the platform layer is built around an async-centric executor, either
|
Here the platform layer is built around an async-centric executor, either
|
||||||
[Embassy](https://embassy.dev/) or [RTICv2](https://rtic.rs/). `alloc`-based crates like
|
[Embassy](https://embassy.dev/) or [RTICv2](https://rtic.rs/). `no_std` crates like
|
||||||
`heapless` and `embedded-alloc` replace `std` collections and allocation, `defmt` replaces `log`
|
`heapless` and `embedded-alloc` replace `std` collections and allocation, `defmt` replaces `log`
|
||||||
for logging and hardware access goes through a board support package (BSP), a hardware
|
for logging and hardware access goes through a board support package (BSP), a hardware
|
||||||
abstraction layer (HAL) and a peripheral access crate (PAC) instead of the OS.
|
abstraction layer (HAL) and a peripheral access crate (PAC) instead of the OS.
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ structures, fits perfectly into the data-driven approach that Rust programs tend
|
|||||||
allows us to use the excellent type system.
|
allows us to use the excellent type system.
|
||||||
|
|
||||||
The Rust ecosystem provides the [`serde`](https://serde.rs/) library for this task. The library
|
The Rust ecosystem provides the [`serde`](https://serde.rs/) library for this task. The library
|
||||||
makes it trivial to add serialization support to custom datastructures by providing a
|
makes it trivial to add serialization support to custom data structures by providing a
|
||||||
[`derive`](https://serde.rs/derive.html) macro. In almost all cases, you can just add this derive
|
[`derive`](https://serde.rs/derive.html) macro. In almost all cases, you can just add this derive
|
||||||
macro to a data structure to make it serializable with any `serde` compatible serializer.
|
macro to a data structure to make it serializable with any `serde` compatible serializer.
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ these requirements and also works well for embedded systems.
|
|||||||
|
|
||||||
Using a serializer library like `serde` allows us to do some interesting things. For example,
|
Using a serializer library like `serde` allows us to do some interesting things. For example,
|
||||||
let's assume you have a `Camera` object in software that you want to send some commands to.
|
let's assume you have a `Camera` object in software that you want to send some commands to.
|
||||||
This object should have the following capability:
|
This object should have the following capabilities:
|
||||||
|
|
||||||
- Process a ping command
|
- Process a ping command
|
||||||
- Capture an image
|
- Capture an image
|
||||||
@@ -69,16 +69,16 @@ to generate the byte representation of a `CameraRequest`, which is then sent as
|
|||||||
inside a CCSDS space packet. On the on-board software side, you can use
|
inside a CCSDS space packet. On the on-board software side, you can use
|
||||||
[`postcard::from_bytes`](https://docs.rs/postcard/latest/postcard/fn.from_bytes.html) to deserialize
|
[`postcard::from_bytes`](https://docs.rs/postcard/latest/postcard/fn.from_bytes.html) to deserialize
|
||||||
the `CameraRequest` from the raw payload bytes. In both cases, you do not need to hand-write
|
the `CameraRequest` from the raw payload bytes. In both cases, you do not need to hand-write
|
||||||
the serialization and de-serialization code anymore. The only trade-off is that you need a Rust
|
the serialization and deserialization code anymore. The only trade-off is that you need a Rust
|
||||||
conversion layer if you want to create your telecommands in another language like Python.
|
conversion layer if you want to create your telecommands in another language like Python.
|
||||||
|
|
||||||
Using Rust structures like this also has other advantages. Once you have the `CameraRequest`
|
Using Rust structures like this also has other advantages. Once you have the `CameraRequest`
|
||||||
structure, you can `match` on it to cover **all** commands that the device handler needs to cover.
|
structure, you can `match` on it to cover **all** commands that the device handler needs to cover.
|
||||||
If you add a new field, you have to handle the new field variant as well and you can not forget
|
If you add a new variant, you have to handle it as well and you can not forget to handle a
|
||||||
to handle a variant.
|
variant.
|
||||||
|
|
||||||
One trade-off to keep in mind is that a Rust `enum` will always have the size of its largest variant
|
One trade-off to keep in mind is that a Rust `enum` will always have the size of its largest variant
|
||||||
in memory. If you need to send large payload to and from the on-board software, you can also
|
in memory. If you need to send large payloads to and from the on-board software, you can also
|
||||||
add this data as a secondary data blob behind the primary `serde` payload, and still send something
|
add this data as a secondary data blob behind the primary `serde` payload, and still send something
|
||||||
like small metadata as part of the payload. `postcard` can tell you the size of the deserialized
|
like small metadata as part of the payload. `postcard` can tell you the size of the deserialized
|
||||||
payload which helps with determining the size of any additional payload data.
|
payload which helps with determining the size of any additional payload data.
|
||||||
|
|||||||
Reference in New Issue
Block a user