Overview
The application interface is made up of a combination of 3 files. A given application is specified by a .app file. The .app file will reference a .interface file and a .launch file.
When an application is launched on a platform, only the parts explicitly listed in the .interface file are made available off-board the robot.
Files
App files
An .app file is a yaml document which contains 4 top-level keys:
description: A short description of the application
platform: The platform key for where the application is intended to run, e.g. pr2 or turtlebot
interface: The file which specifies th interface for the application specified as package/file.interface
launch: the launch file that will be run when the application is brought up
example.app
description: This is an example application platform: turtlebot launch: app_manager/example.launch interface: app_manager/example.interface
Interface File
The .interface file is a yaml document which contains 3 top-level keys: namespace, subcribed_topics, and published_topics. The value of namespace is a namespace under which all all the topics must be located. For subscribed and published topics, each key is a dictionary keyed on topic with a value of the appropropriate type.
example.interface
namespace: application subscribed_topics: foo: std_msgs/String bar: std_msgs/Int32 published_topics: baz: std_msgs/Float32
The interpretation of these topics is that they are relative to a namespace: application in this case. When launching the nodes, the app manager will perform the global remap: application:=/unique/path. To use this interface, an interfacing node will need to know the namespace where the interface is located. The value of this namespace should not be relevant to the interfacing node, as it should only subscribe/publish to topics inside the namespace.
Launch File
The launch file for the app is a standard ROS launch file.
TBD
Listing dependencies on 'capabilities' for both config matching, launching, and user confirmation (e.g. 'this app requests access to the teleop iterface.')