Installation
Prebuilt Binaries
Binaries for common system configurations are available here.
The minot-$ROS_DISTRO-*
archives will only give you ROS specific binaries:
minot
TUI + Coordinator + ROS2 Publisher (with any-type)wind-ros2-c
Standalone ROS2 Publisher (with any-type)
Archives not specific to a ROS distribution contain builds that can be used independently.
minot
TUI + Coordinatorminot-coord
Standalone Coordinatorlibrat.*, rat.h
C libraries for Variable Sharingwind-ros*-native
ROS Publisher using roslibrust for ROS1 and ros2-client for ROS2
While the prebuilt binaries cover many common use cases, you may need to build Minot from source to tailor it to your specific needs. Building from source requires the Rust toolchain to be installed on your system.
Minot TUI
To build the Minot TUI, there are some feature flags for embedding common network participants for convenience. A detailed list of supported flags can be found in the Minot features definition.
With default settings, Minot builds with an integrated coordinator. When running the following command with no changes, you will get a minot
binary with integrated Coordinator and a minot-coord
binary, that is just a Coordinator. The standalone Coordinator is enough for sharing variables with the rat library.
Publishing custom and any-type messages
Publishing any-type messages from a Bagfile (like ros2 bag play
) needs the ROS2 C implementation to be linked to the message. When building the Rust bindings, it will link with every message in your $PATH
. So if you use custom messages, you want to build Minot after you sourced your new message.
To help you get up and running quickly, here are some popular configurations.
cargo install \
--git https://github.com/uos/minot minot \
--locked \
--features embed-ros2-c
The next version does not need any ROS1 or ROS2 installation to compile but it expects to find a node in the network if you try to query a Bagfile:
cargo install \
--git https://github.com/uos/minot minot \
--locked
Or maybe you want to publish to ROS1 and ROS2 at the same time without needing a ROS installation. Since the input is always a ROS2 Bagfile, only mapped types can be published (no any-type).
cargo install \
--git https://github.com/uos/minot minot \
--locked \
--features embed-ros-native
Standalone Coordinator
Installing Minot TUI as shown above will also build a standalone variant of the Coordinator. It is called minot-coord
in your path.
Standalone Wind Turbines (Bagfile Publishers)
Tip
You can compile the embedded publishers standalone and distribute them in your network.
For example: you could run the TUI on a Mac, connected to a Robot with a Raspberry Pi over Wi-Fi or LAN, which runs ROS1 or ROS2 and the wind nodes.
Standalone publishers live inside the wind
module. You can compile/install them to your $PATH
by changing the previous command from minot
to wind
.
With --all-features
, you'll get all binaries but you need to have ROS2 sourced.
cargo install \
--git https://github.com/uos/minot wind \
--locked \
--all-features
The following flavours are available for publishing bagfile messages when specifying the respective feature:
- wind-ros2-c (with any-type)
--feature ros2-c
- wind-ros1-native
--feature ros1-native
- wind-ros2-native
--feature ros2-native
- wind-rat
--feature ratpub
Only the C version requires a ROS2 installation at compile time.
Rats (Variable Sharing)
Nodes in the Minot network are called Rats (here is why). The functionality is shipped as a Rust and C library.
You need to build the library from source. It generates a static and shared library in the ./target/release/
folder. You will need to clone the repository first.
git clone https://github.com/uos/minot
cd minot
cargo build --package rat --release
A typical system-wide installation is to copy the libraries to your linker path. Alternatively, you may change the link path and include search paths in your build system.
sudo cp ./target/release/librat.* /usr/local/lib/
sudo mkdir -p /usr/local/include/rat/
sudo cp ./rat/rat.h /usr/local/include/rat/
Then you can use the library in your C/C++ code.
And link with -lrat
.
For using the Rust library, just add this to your dependencies in Cargo.toml
.
Ratpub (Native Publish/Subscribe)
Ratpub is only available for Rust. It uses Tokio for async I/O.
For using the library in your project, add these lines to your dependencies in Cargo.toml
.
ratpub = { version = "0.1.0-rc.2", git = "https://github.com/uos/minot" }
tokio = { version = "1", features = ["full"] }
Since you probably want to use existing ROS2 message definitions, you can also add the following crate which is auto-generated from the Jazzy release. It bundles all usual types and implements the required rkyv
traits for sending them over the Minot network.
ros2-interfaces-jazzy-rkyv = { version = "0.0.4", features = [
"std_msgs", # add more here
], git = "https://github.com/stelzo/ros2-interfaces-jazzy-rkyv.git" }
Learn more on how to use it in your Code by visiting the feature page.
Uninstall
With modern software the word "installing" is overloaded. Cargo just compiles the code and moves the finished binaries to ~/.cargo/bin
. There are no other side effects or files from Minot.
If you want to remove them with cargo, you can cargo uninstall minot
or cargo uninstall wind
and they are gone.