Introduction
Lodestar is a lightweight C++11 framework for rapidly prototyping and deploying real-time control systems.
On this page
Lodestar aims to be a framework that provides directly executable code, unlike most modeling and simulation-centric toolboxes, which have not been tailored for use in real-time applications. At the same time, Lodestar also allows for code generation when performance is particularly important. It comes built-in with many compile-time checks that cover most common typos and bugs (i.e., matrix-vector dimensions mismatch, connecting inputs to inputs, etc.).
To this end, Lodestar adopts a function block description of systems, where
each Block
provides a pure function (i.e., one that only alters its internal state). Each of these block may have
any number of inputs, parameters, and outputs. The resulting functional block diagrams can easily be extended with new
user-defined block types, without incurring overhead.
Parameters
+-----------------------------------------+
Inputs --->| Block : f(Input, Parameters) -> Outputs |---> Outputs
+-----------------------------------------+
Features
- Automatic resolution of circular data-dependencies (algebraic loops).
- Transparent compile-time error checking, as well as run-time checks prior to executing code.
- Easy extensibility with a simple yet powerful
Block
API based on template metaprogramming. - Clean C++ code generation with predetermined function execution order, as well as resolved data-dependencies.
- Zero-overhead abstraction using templated classes; it does not matter if you have a thousand inputs, or just one.
- Out-of-the-box networking support, with efficient serialization.
- Automatic direct encryption and decryption of messages for enhanced security using state-of-the-art elliptic curve algorithms.
Getting Started
Dependencies
- CMake
- A C++11-compliant compiler
- GiNaC (optional, for resolving algebraic loops)
- nng (optional, for networking)
Building
Simply clone the repository and build using CMake.
If you just want to grab a static library, run cmake ..
instead of a debug build.
Installing/disabling dependencies
You can install the dependencies as follows:
- On Ubuntu (Debian):
sudo apt-get install libginac-dev libcln-dev libnng-dev
- On macOS:
brew install ginac nng
You can disable GiNaC and NNG using the -DWITH_GINAC=OFF -DWITH_NNG=OFF
flags when running the cmake
command:
cmake .. -DCMAKE_BUILD_TYPE=Debug -DWITH_GINAC=OFF -DWITH_NNG=OFF
git clone https://github.com/helkebir/Lodestar
cd Lodestar
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug
make
sudo make install
You can find some demos in the examples/
folder, as well as unit tests of different components in the tests/
folder.