Rapp infers rocon_app or robot_app used in Robotics in Concert. This is a meta data installed and executed through Rapp Manager. It is designed to allow higher level controllers to employ a system which provides the demanded public interface regardless of its platform. Rapps are classified as Implementation/Virtual and Ancestor/Child according to the presence of platform-dependent parameters(e.g launch) and Rapp inheritance.
The detailed parameter specifications described in Rapp Parameters.
The following table describes the characteristics of each rapp types and requirements
Field | Virtual Rapp | Implementation Rapp | Type | |
---|---|---|---|---|
Ancestor | Ancestor | Child | ||
display | R | R | O i | str |
description | R | R | O i | str |
icon | O | O | O i | relative path to <png, jpg, jpeg> |
public_interface | O | O | N i | relative path to <.interface> |
public_parameters | O | O | N i | relative path to <.parameters> |
compatibility | N | R | R | Rocon URI |
launch | N | R | R | relative path to <.launch> |
parent_name | N | N | R | <package>/<rapp_name> |
required_capabilities | N | O | O | dict(details below) |
The notion of Capabilities in ROS is that there exists a higher level interface for most “capabilities” that robots posses. The format follows the Capability Interface Specification.
- name: <capability interface name>
interface:
topics:
requires:
<interface topic>: <rapp topic>
provides:
<interface topic>: <rapp topic>
services:
requires:
<interface service>: <rapp service>
provides:
<interface service>: <rapp service>
actions:
requires:
<interface action>: <rapp action>
provides:
<interface action>: <rapp action>
If the following two are present, it is a rapp implementation. Otherwise it is a virtual rapp.
If it is a rapp impementation, the following three parameters are optional
Inheritance may involve multiple rapps if rapps are chained. Parent is a rapp where child inherits from. A child can at the same time be a parent, if anoter child inherits from it. A Parent not inheriting from another Child/Parent is a Ancestor.
child -> parent/child -> parent/child -> parent(ancestor)
If the following is present, it is a child rapp. Otherwise it is an ancestor rapp.
Note
Separation of virtual and implementation rapp is introduced to simplify rapp composition and maximize portability among various platforms. Virtual Child is dropped because all rapp design choices are satisfiable with the other three.
Chirp - Virtual Ancestor Rapp
# rocon_apps/chirp
display: Chirp
description: Make an audible "chirp" sound.
icon: chirp_bubble_icon.png
public_interface: chirp.interface
public_parameters: chirp.parameters
Chirp - Implementation Child Rapp
# turtlebot_apps/chirp
description: Make a "moo" sound.
launch: chirp.launch
compatibility: rocon:/turtlebot
parent_name: rocon_apps/chirp
Kobuki Random Walker - Capability Enabled Rapp
# kobuki_apps/random_walker
display: Random Walker
description: Makes Kobuki wander off and explorer the world
compatibility: rocon:/kobuki|turtlebot2
launch: random_walker.launch.xml
public_interface: random_walker.interface
icon: random_walker.png
required_capabilities:
- name: std_capabilities/DifferentialMobileBase
interface:
topics:
requires:
'/cmd_vel': 'kobuki_random_walker_controller/commands/velocity'
provides: []
- name: kobuki_capabilities/KobukiLED1
interface:
topics:
requires:
'/kobuki_led1': 'kobuki_random_walker_controller/commands/led1'
provides: []
- name: kobuki_capabilities/KobukiLED2
interface:
topics:
requires:
'/kobuki_led2': 'kobuki_random_walker_controller/commands/led2'
provides: []
Rapp is exported via package.xml. Indexer searches for rocon_app in export tag to collect all available rapps.
...
<export>
<rocon_app>RELATIVE_PATH_IN_PACKAGE</rocon_app>
<!--<rocon_app>apps/chirp/chirp.rapp</rocon_app>-->
</export>
...