The app_manager is a node that runs on the robot and starts and stops applications. It also interacts with the ROS exchange to download and install applications.
To create the list of applications and launch files, the app_manager reads from *.installed files to find the names of applications, which it then reads from *.app files. Where the *installed files are located depends on the configuration of the app_manager. Generally, there are three directories: mock_apps, the exchange/installed and local_apps. mock_apps is usually contained within the robot specific packages that launch app manager and contains apps that cannot be added or removed. The exchange/installed directory is stored in the ROS_HOME on a given robot and consists of a list of applications downloaded from the ROS Exchange. Lastly, the local_apps directory is a list of applications created for testing apps during development.
Once the app manager has a list of all installed apps, it finds more detailed information about the apps from the *.app files. The *.app files are located inside packages, and are automatically found by the app_manager. The *.app files define which launch file, icon file, and interface file are used by the application, as well as the clients for different devices. You can learn more about app files on the ApplicationsPlatform/AppFileSpec.
Applications themselves consist largely of a launch file as well as a .app file. The launch file must be self-contained in that it starts all nodes needed for the application to run (excluding those started by the robot platform). In addition, the launch file may be preempted at any time to stop the application. If all the nodes in the application file exit, then the application is considered to have terminated.
In order to be used by the ROS Exchange, the application files must be stored in released stacks. If multiple applications share a stack, they will all be installed and removed as a unit.
App Chooser & Application Clients
The app chooser runs on the client and connects to the robot over ROS. The app chooser is the first program the user sees when they begin interaction with the robot. Generally the app chooser allows the user to start and stop applications and offers access to the ROS exchange to install and uninstall applications. The app chooser also displays the currently running state of all applications. The app chooser is also responsible for allowing the user to manage robot state with the control URL. The app chooser is also responsible for launching the application clients.
The application clients are programs on the client that access the applications with ROS. The application clients are passed a set of key-value pairs defined in the .app file. Currently, we recommend using these parameters to specify topic names and remappings. In the future, we hope to specify this in a cleaner way. Application clients are responsible for monitoring the app_manager topics to see if their application has terminated and report to the user that this has occurred. Lastly, application clients must be able to tolerate being started before all the nodes in their application have started.
The control URL is a URL that allows the app chooser to start and stop the applications platform on the robot. It is accessed by the app chooser over HTTP GET. See the Control URL Spec for more details.
The ROS Exchange is a server for HTTP GET requests that serves YAML files to tell the app_manager where applications are located. Currently, each robot has its own ROS Exchange. The primary ROS Exchange YAML file contains a list of applications with three parameters: name, display name, and debian package. The ROS Exchange also contains a file folder for each package mentioned in the name list, with a YAML file for each application. The application YAML files currently contain three items: a detailed text description a URL for the icon of the application, and a format for the icon.