Splinter 2 was our internal code name for the evolution of my table cleaning project (Splinter 1). From its predecessor, I inherited the notion of posing a manipulation task in some functional form (a "clutter cost"), but moved to a more mature approach for how to solve it. Rather than using a neural-network and hoping for the best, I took a new approach with more theoretical guarantees. The intuition was simple: if a full policy over low-level actions is too difficult, then try a one-shot plan on higher-level actions. By providing the robot with a very small "basis-set" of actions for pushing tabletop objects, I was able to use standard planning methods to compose them into sequences for solving arbitrary tasks.
The primary contribution of this work was in recognizing the relationship between the planning algorithm and the optimization problem. Since I wanted the robot to discover plans which lead to optimal tabletop configurations, I needed an algorithm which would explore the cost space quickly and coarsely at first, and then more finely given time. That is, I wanted to explore deeply without strong bias at first, and become progressively greedier over time. Clearly A* is not an appropriate choice, since it reduces to breadth-first-search under a flat heuristic, and BFS would concentrate its effort near the starting state. The solution I chose was to use Rapidly-Exploring Random Trees (RRT), modified to search over action primitives. Putting this together with my cost-based task model led to a planning that was both general-purpose (a task is just a cost function), as well as robust: compared to other methods which decouple the planning and optimization problems, my approach guarantees that all discovered states are reachable, since I'm exploring the cost landscape using the actual actions the robot can use for the task.
I published this project at Humanoids 2010 in Nashville, and was very fortunate to receive a best paper award.