I think that the actual ROS API for application manager is fairly stable, but a little undocumented. What follows is my own interpretation of how this is supposed to work, other people may feel free to correct me.
On my robot, I have a "minimal.launch" file, that is started at boot. This launch file covers the basic hardware things that I need for my machine. In my case, it starts the motor controller, laser, kinect, cameras, diagnostics, and app_manager. For reference, here is the file.
When app_manager starts, it can take an --applist argument (if you don't have it in the default location /etc/robot/apps), which is a semicolon-delimited list of locations where application lists (YAML) are stored.
An app is defined by three files:
- .app - Holds app meta-data
- .launch - App roslaunch file
- .interface - Defines how the app will connect to other apps (I'm not really clear on how this works, sorry).
The necessary files are
- App Manager Launch File Example
- App Listing File Example
- Write a .app, .interface, and .launch file for each app that you want Example
Generally, the approach I have taken is a minimal hardware setup in my *_bringup package, and then a separate repository for my *_apps. If it helps, all of my code is on the Auburn Automow Github