I think the best approach would be to follow the example of turtlebot for now.
In the turtlebot system, there is a "minimal.launch" file that can be brought up as a service at system boot. The UID/GID is set to "turtlebot" at the launch.
You can find the upstart script in the Turtlebot Repository
Minimal is the least amount of hardware that you need running in order for the robot to function. It is basically the common functionality for any application that you would need to run on the robot.
In the example of turtlebot, this includes:
- Loading the URDF file and other parameters
- Starting the App manager
- Starting state_publisher, diagnostics, and diagnostic_aggregator
From here, you can launch additional apps as necessary.
EDIT: I would like to add that taking your robot from the construction/testing phase to a more research-oriented phase should probably also involve starting to use app_manager and diagnostics.