Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
Building native ROS packages
Description: This tutorial show how to build native ROS nodes using the Android NDKKeywords: android native NDK
Tutorial Level: BEGINNER
Next Tutorial: Testing the sample application using a Native Activity android_ndk/Tutorials/Building The Example Applications using the Binary Distribution
Contents
Building native ROS packages
Prerequisites
Installing dependencies
$ sudo apt-get update $ sudo apt-get install curl git
Installing latest version of Docker
Ubuntu:
(Taken from https://docs.docker.com/installation/ubuntulinux/#ubuntu-trusty-1404-lts-64-bit)
Install using the available script from docker.
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
To verify that everything has worked as expected:
$ sudo docker run -i -t ubuntu /bin/bash
Which should download the Ubuntu image, and then start bash in a container.
Then you should get something like this:
root@20dd792aa8e9:/#
This means that everything is OK, close the docker container:
root@20dd792aa8e9:/# exit
And we're ready to go!
Cloning the roscpp_android repository
This repository contains the scripts to build the container and do the cross-compilation of the ROS libraries. Create a folder and clone the repository inside it.
$ mkdir ~/ros-android-ndk $ cd ~/ros-android-ndk $ git clone https://github.com/ekumenlabs/roscpp_android.git $ cd roscpp_android
Building the container and cross-compiling
The script can generate two different types of output. The raw mode and the portable one:
raw mode is intended to be used during porting new libraries to Android. It uses symbolic links to generate the Android NDK module, which saves space.
portable copies all the required files to the Android NDK module and creates a .tar.gz with it. This file is intended to be used when distributing pre compiled ROS Android libraries.
By default, when running:
$ ./do_docker.sh
will generate an output directory in the current directory, and build it in raw mode. To change the output path:
$ ./do_docker.sh --raw /output/path
To generate a portable binary in output/roscpp_android_ndk.tar.gz,
$ ./do_docker.sh --portable
You can also use '--delete-image' to remove the docker image and start building it again, or '--delete-tmp' to delete the content of /var/lib/docker/tmp in order to save space on your machine
Now you can go grab something to drink, this takes some time.
What does do_docker.sh do?
The script first creates a docker container based on Ubuntu 14.04 and install all the Ubuntu dependencies, then it fetches all the library dependencies and the ROS packages specified in the ndk.rosinstall file. Lastly, it cross-compiles the libraries and runs ´catkin_make´ to build the ROS packages.
Verifying the cross-compilation
If everything went well you should see the following banner
summary of what just happened: target/ was used to build static libraries for ros software include/ contains headers lib/ contains static libraries roscpp_android_ndk/ is a NDK sub-project that can be imported into an NDK app sample_app/ is an example of such an app, a native activity sample_app/bin/sample_app-debug.apk is the built apk
This means that all the ROS packages have been correctly built. Congratulations!