/robonomics

Robonomics node implementation

Primary LanguageRustApache License 2.0Apache-2.0

Robonomics

Web3 Foundation Grants — Wave Two Recipient

License CI Status Release Downloads Matrix

Implementation of a https://robonomics.network node in Rust, based on the Substrate framework.

This repo contains runtimes for the Earth Parachain, Mars Parachain, and Robonomics Relay chain networks. The README provides information about installing the robonomics binary and developing on the codebase. For more specific guides, like how to be a node, see the Robonomics Wiki.

Robonomics platform includes a set of open-source packages and infrastructure for Robotics, Smart Cities and Industry 4.0 developers.

1. Try it out

2. The Robonomics Crates

Structure of Robonomics followed:

  • Robonomics Node - substrate-based blockchain node with Robonomics Network extensions.

  • Robonomics CLI - console line primitives that make framework functions runnable.

  • Robonomics IO - stream-oriented library with support general set of sensors and actuators (including virtual devices like PubSub or stdin/stdout) that makes hardware interaction easy.

  • Robonomics Protocol - network library that helps to build P2P communication in Industry 4.0 and Smart City cases.

  • Robonomics Frame - a collection of pallets suitable for Smart City and Industry 4.0 cases.

Full docs available at https://crates.robonomics.network.

3. Building from source

Ensure you have Rust and the support software installed:

curl https://sh.rustup.rs -sSf | sh
# on Windows download and run rustup-init.exe
# from https://rustup.rs instead
rustup target add wasm32-unknown-unknown --toolchain nightly
In case of error: toolchain 'nightly-x86_64-unknown-linux-gnu' is not installed
rustup toolchain install nightly

You will also need to install the following packages:

  1. Linux:

    sudo apt install cmake git clang libclang-dev
  2. Mac:

    brew install cmake pkg-config git llvm
  3. Windows (PowerShell):

    # Install LLVM
    # Download and install the Pre Build Windows binaries
    # of LLVM  from http://releases.llvm.org/download.html

Install robonomics node from git source.

cargo install --force --git https://github.com/airalab/robonomics --tag v1.0.0 robonomics-node

And then launch full node of robonomics testnet parachain.

robonomics

Or run your local development network.

robonomics --dev

3.1. Building with Nix

  1. Install Nix package manager:

    curl https://nixos.org/nix/install | sh
  2. Run in Nix shell:

    git clone --recursive https://github.com/airalab/robonomics && cd robonomics
    nix-shell --run "cargo run --release"

4. Network maintaining

Currently Robonomics is maintained by developers but anyone can support the project. Every additional full node of blockchain helps it to be more sustainable and fault tolerant. Robonomics node binaries is available in release assets or it could be build from source.

4.1. Gatekeepers updates

Launch command:

robonomics --validator --parachain-id 1000 --collator-eth-account <your_eth_address>

5. Robonomics I/O

Especially to make hardware interaction easy we introduce robonomics_io crate. This crate implements two kinds of devices: source - device that intended to read a data and sink - device that intended to write data. This approach suits the pipelines paradigm well and implemented in Robonomics CLI as io subcommand.

$ robonomics io
robonomics-io 0.25.1
Run I/O actions using Robonomics Framework.

USAGE:
    robonomics io [FLAGS] [OPTIONS] <SUBCOMMAND>

SUBCOMMANDS:
    help     Prints this message or the help of the given subcommand(s)
    read     Read information from device
    write    Write information into device

For example, the sentence that simple read value from Nova SDS011 sensor is followed.

$ robonomics io read sds011
{"timestamp":"1588090281","pm25":0.5,"pm10":1.5}

Is it also possible to combine IO actions to get something useful. Following sentence reads JSON values from a sensor and publishes it into my-sensor-data topic.

$ robonomics io read sds011 | robonomics io write pubsub my-sensor-data

6. Robotics integration

Of course, Robonomics should integrate open-source robotics, our main target is ROS-enabled robots. The node implements a few features to make robotics integration as easy as it possible.

6.1. Building with ROS feature

  1. Install ROS using instruction.

  2. Import ROS environment:

    source /opt/ros/melodic/setup.bash
  3. Build with ros feature:

    cd bin/node && cargo build --release --features ros

6.2. Examples

Available examples are in this directory.

6.2.1. Curiosity Rover under Robonomics control

Simple but yet a complete sample of Robonomics launch and datalog functions. You can find full documentation on Robonomics Wiki.