Clone this wiki locally
1. RAPP Ecosystem
RAPP provides a robot agnostic approach by introducing a middleware stack with added functionalities suitable for different kinds of robots. In this way, developers will be able to utilize a common API (RAPP Robot API) in order to access the robot’s sensors and actuators. A number of high level services and functionalities for implementing RApps are also offered by the RAPP Platform and are accessible through the RAPP Platform API. The RAPP Platform offers a cloud-based solution that lifts the underlying robotic hardware computational and storage limitations and enables advanced machine learning operations, distributed data collection and processing, as well as knowledge sharing among robots. The developed RApps are hosted in the proposed RAPP Store, which is ultimately expected to have an important effect in the robotic application market. The adoption of a common API will provide developers with the versatility needed to address people with different needs, capabilities and expectations, while simultaneously respecting their privacy and autonomy.
2. Get involved!
There are three levels of technical involvement in RAPP:
- Create robotic applications for a robot already supported by RAPP Ecosystem by using the RAPP Platform API and the RAPP Robot API
- Enrich the RAPP Platform by introducing new off-the-shelve robotic-oriented functionalities
- Support a new robot in the RAPP Ecosystem
Below, the necessary documentation, tutorials and examples for each of the involvement levels are presented.
3. Robotic Applications (RApps) development
There are three concepts involved with the creation of robotic applications:
- Create a stand-alone application to manipulate the robot
- Create an application that uses RAPP Platform web services
- Upload and distribute your application
For all the above cases you must have a robot supported by RAPP, either in its physical form or in simulation. Right now, the only consumer robot supported is NAO, by SoftBank robotics.
In order to test the created applications in your robot, specialized software must be installed first, called the Core Agent of each robot (for more information check the RAPP Architecture). You can find information on how to install this software, by following the below links:
- For NAO robot:
3.1. How to: Create stand-alone RApps
After you have installed the Core Agent in your robot, you can start creating RApps (Robotic Applications). For creating stand-alone robotic applications you only need the RAPP Robot API (C++ or Python).
3.1.1. RAPP Robot API - Python
Concerning the Python RAPP Robot API, RAPP provides a robot-agnostic API which can be found in the following link: Python RAPP Robot API.
Two full tutorials on how to create Python RApps for the NAO case follow:
- Remote application for NAO in Python: Move by speech (easy)
- In-robot application for NAO in Python: Move by speech (easy)
3.1.2. RAPP Robot API - C++
Robot-agnostic API is available also for C++ developers. Code documentation can be found in C++ API repository.
Following tutorials are prepared to guide developers through the process of creating new RApps.
- Creating new C++ Rapp - download and compile API packages, prepare new RApp template.
- Talk to me - number guessing game as an example of robot communication module.
Let me see - recognize dominant color on the image; shows how to use robot vision module and convert images back and forth between
rapp::object::pictureand OpenCV format.
3.2. How to: Create RApps that use RAPP Platform functionalities
In order to check your RApps, RAPP Platform must be installed / deployed somewhere. Below you can find several tutorials on how to install it, or instructions to use an already deployed version:
- How can I set-up the RAPP Platform in my PC?
- How do I launch the RAPP Platform?
- How can I see that everything is working properly?
- Everything is set-up and working! What now?
- I do not want to install RAPP Platform. Is there an easier way to use it?
- I do not even want to try the easier way. Do you have something up and running to test?
For manipulating robots that invoke some of the RAPP Platform functionalities, you must use two APIs: the RAPP Robot API and the RAPP Platform API. The RAPP Platform API is offered in Python, C++ and JS. The documentation for each of the three languages follows:
- Python RAPP Platform API - General information
- Python RAPP Platform API - API calls
- C++ RAPP Platform API - General information
- C++ RAPP Platform API - API calls
- JS RAPP Platform API - General information
- JS RAPP Platform API - API calls
RAPP Platform functionalities can be utilized by robots via standard web services. The service layer has been developed using HOP consisting of a web server implementation, an http/https server, and the web services developed in Hop.js framework. Web services are executed within forked server-side web workers, each of which can include more than one web services allowing concurrent execution. Currently, the RAPP Platform hosts 27 web services, allowing robot platforms to gain access to the RIC functionalities described previously. The RAPP Platform nodes are fully described below:
- RAPP Application Authentication
- RAPP Audio Processing
- RAPP Cognitive Exercise
- RAPP Caffe Wrapper
- RAPP Email
- RAPP Face Detection
- RAPP Geolocator
- RAPP Hazard Detection
- RAPP Human Detection
- RAPP Knowrob wrapper
- RAPP MySQL wrapper
- RAPP News Explorer
- RAPP Path planner
- RAPP Platform (metapackage)
- RAPP Platform Launchers
- RAPP Platform ROS Communications
- RAPP QR Detection
- RAPP Speech Detection (Google API)
- RAPP Speech Detection (Sphinx4)
- RAPP Testing Tools
- RAPP Text-to-speech using Espeak & Mbrola
- RAPP Utilities
- RAPP Weather Reporter
- RAPP Object Recognition - Under development
- RAPP Face Recognition - Under development
Some RApp full tutorials for the Python language follow:
- Remote application for NAO in Python: Detect and track QR tags (normal)
- Remote application for NAO in Python: Use ROS & TLD tracker to approach arbitrary objects (hard)
- In-robot application for NAO in Python: Create a cognitive game (hard)
Some full tutorials for the C++ language can be found here.
3.3. How to: Upload and distribute your RApps
4. RAPP Platform enrichment
In order to enrich the RAPP Platform with new functionalities, you must gain knowledge on the overall RAPP Architecture. In order to do this visit the following link: RAPP Architecture & component diagram.
Furthermore, you must be aware of the RAPP Platform multithreading policy, since RAPP Platform is meant to be deployed in the cloud. You can find more information here: RAPP Multithreading issues.
As you have seen, the front-end of the RAPP Platform are its web services. You can find more information on the Web services below:
There are various ways to contribute to RAPP Platform.
First of all, you can try our scripts and our services and if you identify any errors, please let us know by submitting an issue. We will be happy to help you out!
If you want to engage more actively, you can fork our repository into your GitHub account and fix the issue yourself. Then you can create a pull request and we will add your contribution in our code.
Finally, if you want to engage further, you can enrich the RAPP Platform with new algorithms, by creating ROS packages, as well as the corresponding HOP services and the API. Then with a pull request, we will check the code and we will merge your contributions.
In order to follow the third contribution alternative, you should take a look at the following tutorials:
- How to create a new RAPP Platform ROS node?
- How to create a HOP service for a ROS service?
- How to write the API for a HOP service?
- How to call the HOP service I created?
- How to implement an integration test?
- Create and authenticate a new RAPP User
Finally, two full-scale tutorials on how to enrich the RAPP Platfom can be found below:
- A full RAPP Platform service creation example: Simple addition (easy)
- A full RAPP Platform service creation example: Simple addition & RAPP Platform service invocation & testing (advanced)
5. Supporting new robots in the RAPP Ecosystem
In order to support new robots in the RAPP Ecosystem you must create a Core Agent. The main functionalities a Core Agent must do are:
- Communication with the Store for downloading information and RApps
- Starting / Terminating RApps
- Offering the implementation of the Robot API
It is highly suggested to take a closer look at the following publications that explain in depth the various architectural aspects of the RAPP Ecosystem, and specifically the Core Agents:
- Reconfigurable control architecture for exploratory robots
- Distributed, reconfigurable architecture for robot companions exemplified by a voice-mail application
- Towards an integrated robotics architecture for social inclusion – The RAPP paradigm
- RAPP: A Robotic-Oriented Ecosystem for Delivering Smart User Empowering Applications for Older People