Building Robot Apps

In order to offer an agnostic and adaptive way of building apps for robots, we do not enforce a programming language, or a specific SDK. Instead it is entirely up to you (the developer) to decide which language you will use, which libraries, frameworks or robots you will target and which version of those dependencies you will use.

Because with great power comes great responsibility, we cannot check your build process, instead we can only monitor it, and provide the result back to you should it fail to build. Furthermore, because applications are build by using git repositories, any open-source application build here, comes without any warantee or implied suitability.

build configuration file

At the root of your project directory (your git repository) you should place a file called build.yaml. If this file is not found the build process will be aborted. For example, your repository foo should look like this:

├── foo/
    ├── CMakeLists.txt
    ├── build.yaml
    ├── src/
    |   ├── main.cpp
    |   └── bar.cpp
    └── inc/
        ├── bar.hpp
        └── foo.hpp

The above structure is up to you to decide. The example above serves as a reference point for a c++ project. Creating a ROS project will look slightly different, since a catkin workspace is used:

├── foo/
    ├── build.yaml
    └── src/
        ├── CMakeLists.txt
        └── package/
             ├── CMakeLists.txt
             ├── package.xml
             └── src/
                 ├── foo.hpp
                 ├── foo.cpp
                 ├── bar.hpp
                 └── bar.cpp

Similarly, a Python or Node.JS project may look different to the ones above. The important bit is to remember to add a valid build.yaml file in the root of the project.

YAML configuration

The build.yaml syntax is very similar to the one used by Travis CI, with a similar notion:

  1. OPTIONAL: install instructions used for apt-get, npm install, pip or rosdep.
  2. OPTIONAL: build instructions used to compile and link (e.g., C++ or ROS) your application.
  3. REQUIRED: package instructons used to organise and distribute scripts (Node.JS or Python)

Furthermore, other fields are:

  1. application language is required
  2. application name is required
  3. application version is required
  4. application keywords are optional

An example is shown below:

language: cpp
version: 0.1.0

    - target: ubuntu
      version: 16.04
      arch: i686

api: 0.7.0

    - sudo apt-get install -y libboost-all-dev

    - mkdir build
    - cd build
    - cmake ..
    - make

    - build/available_services
    - config.ini

The first two lines are self-explanatory. The third entry sets the target platform (robot OS):

  1. a Linux/Ubuntu OS
  2. the 16.04 version
  3. which is for a 32bit (i686 CPU) architecture


The package instruction will run only after a build has succeeded:

  1. It will copy the files into the final distributable, so bear that in mind
  2. The distributable will retain all directories as you specify them in your build.yaml! (read this line again)
  3. Any file not specified, will not be packaged.

Furthermore, you should only package binaries, libraries or configuration files, and not source code, unless you have written a Python or Node.JS application.

Supported Platforms

Currently we do support:

OS Distro Version Robot Tools Arch
Linux Ubuntu 14.04 NA gcc 4.8, ros indigo, node 0.6.7, RAPP 0.6.1 i686
Linux Ubuntu 14.10 NA gcc 4.9, ros jade, node 0.7.0, RAPP 0.7.1 i686
Linux Ubuntu 16.04 NA gcc 5.4, ros kinetic, node 0.7.0, RAPP 0.7.1 i686

Currently we do not support:

OS Distro Version Robot Tools Arch
Linux Ubuntu 14.04 NA NA amd64
Linux Ubuntu 14.10 NA NA amd64
Linux Ubuntu 16.04 NA NA amd64
Linux L4TS R21.5 NVIDIA TK1 NA armv7
Linux Debian 8.0 PiBorg NA armv6
Linux Debian 8.0 Lego EV3 NA armv5

The above list is under consideration, and should soon be supported for building apps on those platforms and robots.

If you feel that we absolutely, positively, necessarily must support a specific platform or robot, drop us an email