Back to Home Robotouille

Robotouille

Robots are bad at planning far into the future or working around asynchronous goals. This is a benchmark to test them by making them cook

I implemented heuristics to speed up optimal solution search, designed 50+ food assets, and also built a level editor for nontechnical users to make cooking tasks.

Below is an overview of the challenges and process of designing said editor.

The Robotouille Map Editor

Representing the map

Robotouille's benchmarks are defined with Planning Domain Definition Language (PDDL). Practically, this means users must write code to build levels and tasks.

Foods are represented as groups of qualities (called predicates). For instance, raw beef is [is_beef, is_cookable] , and steak is [is_beef, is_cooked] .

After building a couple maps by hand, I found that a constraint most food items had was an identity predicate; something like is_chicken is present in recipies like chicken nuggets, cooked chicken, and grilled chicken.

My first prototype just had every valid food combo as a searchable 'tile' you could click to draw onto the map.

A state's predicates, shown in context on the grid Full food search

However, after building a couple maps by hand, I found that a constraint most food items had was an identity predicate; something like is_chicken is present in recipies like chicken nuggets, cooked chicken, and grilled chicken.

What if we grouped all food items under their 'identity' predicate, and let users click on the desired 'variaton' of that food? Semantic groupings might make the search results more glancable. I validated this with a couple interviews, and people seemed to agree.

Early model: dragging predicates onto each state of an object A cabbage platter: its states and their identity predicates

The map also needed structure. My first instinct was to let the user select items and 'paint' arbitrary layers. Geometry Dash, Aseprite, and other tile-based editors have already set the standard for this type of interaction.

Here, manual work revelated another constraint; in the exception of stacked recipies like hamburgers, we never exceeded two layers; the station food was placed on, and the food item itself.

I split the editor into 3 fixed layers: floor, stations, and food. Stacks would just be a special food object.

This also extended nicely to more complex representations of food we added later, such as 'bundles' made from multiple combined identity predicates.

A food stack, built from ordered dishes A bundle: several items combined into one composite state

Visual style

Cooking should be enjoyable, even for agents.

Below is an evolution from functional prototype to a sanitary, Ramsey-style kitchen, to the picnic team we settled on.

Grey wireframe Styled controls over a grey canvas The sanitized kitchen: blue table, white plates A burger placed on a wooden station, above the floor grid, with the three-layer panel, picnic theme
The finished picnic home screen

Process

Low-fi: enter map dimensions Mid-fi: a map in progress
Mid-fi: confirm before deleting a tile's items Hi-fi: search the item library
Hi-fi: new map screen Hi-fi: container editor, a base and its meal items
Hi-fi: home screen to new map flow Design system: buttons, icons, and colour ramps Developer handoff: selecting and placing an item, step by step