Skip to content

MatthiasKillat/iceoryx

 
 

Repository files navigation

iceoryx - an IPC middleware for POSIX-based systems

Build & Test License

Introduction

Great that you've made it to this little Eclipse project! Let's get you started by providing a quick background tour, introducing the project scope and guide you through the examples.

So first off: What is iceoryx?

Iceoryx is an inter-process communication (IPC) middleware for POSIX based operating systems. It features shared memory capabilities that allow a true zero-copy data transfer. For more information have a look at the 1000 words iceoryx introduction in the eclipse newsletter.

Originating from the automotive domain, it is crucial to transfer a huge amount of data between multiple processes to realize driver assistance systems or automated driving applications. Moreover, the same efficient communication mechanism can be applied to a broader range of use cases, e.g. in the field of robotics or game development.

It's all about the API!

Don't get too frighten of the API when strolling through the codebase. Think of iceoryx's API as a "plumbing" one ("plumbing" as defined in Git, which means low-level). We're not using the "plumbing" API ourselves, but instead a typed API. An example for a "porcelain" API would be ROS2. Others are listed in the next section.

Where is Eclipse iceoryx used?

Framework Description
ROS2 Eclipse iceoryx can be used inside the robot operating system with rmw_iceoryx
eCAL Open-source middleware from Continental AG supporting pub/sub and various message protocols
RTA-VRTE Adaptive AUTOSAR platform software framework for vehicle computer from ETAS GmbH
Cyclone DDS Performant and robust open-source DDS implementation maintained by ADLINK Technology Inc.

Supported Platforms

  • Linux
  • QNX
  • macOS (initial support - please test and report bugs)
  • Windows 10 (not yet - currently in progress)

Scope

Who can benefit of using iceoryx? What's in for those folks?

User personas

Andrew, the HAD developer Andrew is a software developer at a startup working on autonomous cars. Currently their project is using ROS, because it's easy to get the car driving. After some months, he's realizing that sending gigabytes around, leads to high runtime demands with ROS. A college mentions iceoryx during lunch, which might be interesting because it has a zero-copy mechanism and offers a ROS RMW implementation. Soon after giving iceoryx a try, Andrew is thrilled about it. He cannot only feel the runtime performance boost, but also still keep using his beloved ROS visualization tools!

Martha, the indie game developer Martha always had troubles with those silly game engines. Some are slow but free, others are fast but too expensive. It's a hard life if you're independent. When a friend who works in the automotive industry mentions he has just started using iceoryx, which offers fast shared memory communication she listens up. Iceoryx is solely passing pointers around and does avoid copies to the utmost? "I'll definitely try iceoryx in my new project and see if I can speed up the performance with my low cost engine" she thinks while wandering home at night after the meetup with her friend.

Robby, the lonely robot Robby is autonomous robot built during a research project at a university. He has a great set of features and can astonish the crowds by creating a detailed map of the university building in under an hour. However, they made him use that slow self-made IPC to communicate with his sensors because his parents wanted to get started fast. Though that makes it hard for him to react in real-time to dangerous incidents like flying coffee cups. When strolling through the interwebs on a lonely evening, he finds out about iceoryx: Free-to-use, high-performance data transfer with low runtime overhead, real-time support! Brilliant! Maybe even Robby's biggest wish for a network binding will come true, so he can stream his favorite video even faster!

Installation

iceoryx_utils and iceoryx_posh are deployed as independent cmake packages. Posh is using some functions from utils and is depending on it. You are able to build posh and utils and integrate in into existing cmake projects.

Prerequisites

Mac OS

Before installing iceoryx you need a XCode installation, git and optional an installed ncurses library for the introspection client. To install ncurses locally into your build folder follow these steps

cd iceoryx
ICEORYX_DIR=$PWD
mkdir -p build
cd build
git clone https://github.com/mirror/ncurses.git 
cd ncurses
git checkout v6.2
./configure  --prefix=$ICEORYX_DIR/build/dependencies/ --exec-prefix=$ICEORYX_DIR/build/dependencies/ --with-termlib 
make -j12
make install

If you would like to use our Cyclone DDS Gateway you have to install Cyclone DDS first, see https://github.com/eclipse-cyclonedds/cyclonedds.

Linux

Although we strive to be fully POSIX-compliant, we recommend using Ubuntu 18.04 and at least GCC 7.4.0 for development.

You will need to install the following packages: sudo apt install cmake libacl1-dev libncurses5-dev pkg-config

Additionally, there is an optional dependency to the MIT licensed cpptoml library, which is used to parse a RouDi config file for the mempool config. cpptoml

Build with CMake (all supported platforms)

NOTE: Requires CMake version 3.5 or higher.

The CMakeLists.txt from iceoryx_meta can be used to easily develop iceoryx with an IDE.

  1. Clone the repository

    git clone https://github.com/eclipse/iceoryx.git
    
  2. Generate the necessary build files

    cd iceoryx
    cmake -Bbuild -Hiceoryx_meta -DTOML_CONFIG=ON
    # when you have installed external dependencies like ncurses you have to add them
    # to your prefix path
    cmake -Bbuild -Hiceoryx_meta -DTOML_CONFIG=ON -DCMAKE_PREFIX_PATH=$(PWD)/build/dependencies/
  3. Compile the source code

    cmake --build build
    

With the following CMake switches you can add additional features

switch description
dds_gateway builds the iceoryx dds gateway using the cyclonedds dds stack, cyclonedds will be fetched and built as part of the build, see cyclonedds for details
examples builds all examples
introspection the console introspection client which requires an installed ncurses library with terminfo support
test enables module-, integration- and component-tests
TOML_CONFIG activates config file support by using toml, if this is deactivated the central broker RouDi is not being build

With the following CMake switches you can customize the iceoryx_posh build

switch description
IOX_MAX_PORT_NUMBER the maximum number of ports RouDi can distribute to the clients
IOX_MAX_INTERFACE_NUMBER the maximum number for interface ports, which are used for e.g. gateways
IOX_MAX_SUBSCRIBERS_PER_PUBLISHER the maximum number of subscriber a publisher can deliver chunks
IOX_MAX_CHUNKS_ALLOCATE_PER_SENDER the maximum number of chunks a sender can hold at a given time
IOX_MAX_HISTORY_CAPACITY_OF_CHUNK_DISTRIBUTOR the maximum number chunks available for the chunk history
IOX_MAX_CHUNKS_HELD_PER_RECEIVER the maximum number of chunks a receiver can hold at a given time

Have a look at iceoryx_posh/cmake/iceoryx_posh_deployment.cmake for the default values of this constants.

Build with the build script (only Linux and QNX)

As an alternative we provide our build-test script which we use to integrate iceoryx into our infrastructure.

  1. Clone the repository

    git clone https://github.com/eclipse/iceoryx.git
    
  2. Build everything

    cd iceoryx
    ./tools/iceoryx_build_test.sh
    

With the following arguments you can add additional features:

switch description
clean Removes the build directory and performs a clean build. If you have installed ncurses locally into your build directory you have to reinstall it first.
test Enables module-, integration- and component-tests. The Googletest-Framework will be automatically fetched from github and the test will be executed and the end of the script.

Build with colcon

Alternatively, iceoryx can be built with colcon to provide a smooth integration for ROS2 developers.

mkdir -p iceoryx_ws/src
cd $_
git clone https://github.com/eclipse/iceoryx.git
cd ..
colcon build

This build method makes the most sense in combination with rmw_iceoryx

Congrats! You've build all the necessary things to continue playing around with the examples.

Build and run in a Docker environment

If you want to avoid installing anything on your host machine but you have Docker installed, it is possible to use it to build and run iceoryx applications.

Please see the dedicated README.md for information on how to do this.

Documentation

Examples

You can find our examples here.

Innovations enabled by iceoryx

Name Description Technologies
Larry.Robotics An iceoryx demonstrator for tinker, thinker and toddler Demonstrator
iceoryx-rs Experimental Rust wrapper for iceoryx Rust
IceRay An iceoryx instrospection client written in Rust Rust

Is something missing or you've got ideas for other nifty examples? Jump right away to the next section!

Contribute

Please refer to the CONTRIBUTING.md for a quick read-up about what to consider if you want to contribute.

Planned features

Get to know the upcoming features and the project scope in PLANNED_FEATURES.md.

Maintainers

Packages

No packages published

Languages

  • C++ 96.8%
  • CMake 2.4%
  • Other 0.8%