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|
|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>|
|launch||N||R||R||relative path to <.launch>|
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.
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> ...