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:
- OPTIONAL: install instructions used for
apt-get
,npm install
,pip
orrosdep
. - OPTIONAL: build instructions used to compile and link (e.g., C++ or ROS) your application.
- REQUIRED: package instructons used to organise and distribute scripts (Node.JS or Python)
Furthermore, other fields are:
- application language is required
- application name is required
- application version is required
- application keywords are optional
An example is shown below:
language: cpp
version: 0.1.0
platform:
- target: ubuntu
version: 16.04
arch: i686
api: 0.7.0
install:
- sudo apt-get install -y libboost-all-dev
build:
- mkdir build
- cd build
- cmake ..
- make
package:
- build/available_services
- config.ini
The first two lines are self-explanatory. The third entry sets the target platform (robot OS):
- a Linux/Ubuntu OS
- the 16.04 version
- which is for a 32bit (i686 CPU) architecture
Packaging
The package
instruction will run only after a build has succeeded:
- It will copy the files into the final distributable, so bear that in mind
- The distributable will retain all directories as you specify them in your
build.yaml
! (read this line again) - 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 webmaster@rapp.cloud.