Robot App Store Design

Vision

The robot app store (RAS) is a place to share robot applications. The RAS is also the infrastructure that supports the development, packaging, and deployment of apps.

Story: PR2 Developer

I've just gotten my PR2 to fold t-shirts. I want to share this demo with other PR2 users, so that they can make their PR2s fold t-shirts. The RAS makes this easy, with the following steps:

  • write a roslaunch file that starts the demo
    • for example: "fold-shirts.launch"
  • define the dependencies of the demo
    • for example: "ros-cturtle-pr2all plus fold-shirts.rosinstall"
    • for example: "ros-cturtle-pr2all plus fold-shirts.rosinstall"
  • write a file that describes the demo as an app: author, license, name of the launch file, dependency info, an icon, and instructions (e.g., "position the robot in front of a table full of t-shirts")
    • for example: "fold-shirts.app"
  • upload my demo, now an app, to the RAS

Story: PR2 User

I've just heard about the t-shirt folding app, and I want to run it on my PR2. The RAS makes this easy, with the following steps:

  • search for "t-shirt" at the RAS, and find the app in the results
  • click "Install" to deploy the app to my robot
    • during installation, dependencies are satisfied, and any compilation is done, automatically
  • read and follow the setup instructions (e.g., position the robot in front of a table full of t-shirts)
  • click on the icon for the t-shirt app
  • enjoy

Story: Turtlebot Developer: Independent "dance off" app

I've come with a great new "dance off" app for my Turtlebot. It works on pretty much any mobile robot with a Kinect, as long as the Kinect can see a person. The libraries for turtlebot are pretty well defined, so I just want it to take my developer tree, wrap it up, and make it available to everyone else. All I want to tell it is my launch file, and the supported robots. The packager has me confirm the packages that will be wrapped up, and tells me how large the app will be. When it comes time to select supported robots, I can select specific robot platforms. I can also select more general capability-based constraints. In the case of turtlebot, I think it will work with any mobile robot with a navigation stack and a RGB-D camera. The camera has to be either a "base" camera or a "head" camera.

Story: Turtlebot owner: Independent "dance off" app

There's this great new 'dance off' app that works on any mobile robot with a Kinect.

  • I login to the app store and it shows me the dance off app, confirming that it works on my platform. I download it and within minutes, I'm dancing the night away.

Story: Turtlebot owner: Pano app developer

I wrote this great new 'pano' app that spins a robot at a known location and generates a panorama. It's time to package this app, so I know that my app will work on any robot that is localized and also accepts twist commands to drive a mobile base. I also need a camera, in either a base or head-mounted configuration.

Story: Turtlebot owner: Pano app and extension

There's this great new 'pano' app that adds to the set of tasks that my robot knows how to do. With this new task, I can select points on a map that the robot will take panorama at. The great thing about this app is that I can mix it with other tasks. I can tell it to go to one location and take a pano, I can tell it to go to another location and do task "pickup mail", and yet another location and do task "vacuum", and when it's all done it returns to its docking station to recharge.

Story: automator

As a user, I can sequence a bunch of my tasks on a map. Below the map, a timeline estimates how long the tasks will take, and also estimates how long the battery will last.

Story: Turtlebot v2 developer: Content apps

Turtlebot v2 has a screen to display content to a user. There's an interactive storybook app that I want to write a new story for. I write the content for my new story, cueing appropriate spins, trills, and other flourishes of the robot, and then package it into the eTurtleStory format. I publish this to the eTurtleStory store, where it appears for the many Turtlebot owners to download and enjoy.

Story: Thing-o-matic developer

I wrote this great new app for the thing-o-matic that can print 3D point clouds. It cleans them up nicely and resizes them appropriate. It just needs 3D models from my robot. The great thing about the app platform is that I can associate my app with the "data explorer" for my robot. Any data that contains 3D models will have a new menu item that lets me 'print to thing-o-matic'. My app actually runs on a laptop connected to the Thing-o-matic. So does the "data explorer", which is another app I downloaded to my laptop.

Story: TV app

As a turtlebot v2 user, I can run my "TV app", which streams my TV programs to me on the v2 screen. The great thing about this app is that the robot follows me as I walk around the house, so I can continue to watch TV while watching the app. When the turtlebot starts running out of battery, a warning appears in the app that tells me that its going to recharge, unless I override it.

Story: turtlebot user

When I go to install the new "dance off" app, the app store tells me that this app needs the ability to record camera images. I thought this app just ran a scripted dancing demo, so I'm a bit suspicious. I decline the install of the app.

Story: teleop app

As a turtlebot owner, I download this new teleop app for my phone. It tells me that I also need to download the teleop app for my robot. When I install the teleop app on my robot, it gives me a code so that I can securely pair my phone with my robot. Once I have confirmed this code, my phone can take over the robot whenever I want and drive it around.

Requirements

TODO; draw from the stories

Questions

Definition

  • What is an app?
  • How is an app configured?
  • How is an app packaged?
  • What is the interface to an app?

Release

  • How does a developer release an app?

Development

  • How does a developer build and test an app?

Deployment

  • How are apps deployed?
  • Should we support multiple machines? (motivated by bldg manager)

Running

  • How does app run?
  • What are the UI options for an app?
  • If there's an off-robot UI component that needs to be installed, how does that happen?
  • Do we support multi-tasking?

Platform

  • What is the platform on which apps are defined, deployed, and run?
  • How do we handle common functional requirements, like navigation?
  • Should an app be entirely self-contained (i.e., if it needs navigation, it brings up navigation), should there be "capabilities" that can be requested/required, should there be separate apps that can be requested/required, or something else? (interacts with question about multi-tasking above)
  • How specific is the platform? Are apps expected to be portable across different robots, assuming that platform requirements are met?

Security

  • Do we deal with security at all?
  • Do we provide a way to specify and check on resource usage? What's a resource (arm, camera, base, CPU, network, etc.)?
  • Do we explicitly support closed-source apps (e.g., license-key schemes)?

Wiki: Projects/App Store (last edited 2011-01-26 07:24:24 by KenConley)