Beer Me, Robot
Around 5 PM on Fridays, many of us here at Willow Garage start thinking that a cold one would taste pretty good. However, we often have a few loose ends to tie up before the weekend begins in earnest. In this situation we've often thought about how perfect it would be to have the robot autonomously deliver beer. The goal of Willow Garage's third summer hackathon was to make this dream a reality. The idea of the hackathon is to start hacking Monday morning and demo on Friday afternoon, using all of the existing ROS tools and packages. Sleep is highly optional.
For this hackathon, our goal was to make beer fetching as robust and user-friendly as possible. We also wanted the robot to safely transport the beer to any office, which requires navigation with the arms tucked. For safe beer transport we designed a bar-keeper add-on to the PR2 base -- a four-holed foam block placed behind the robot's base navigation laser. Three round holes are for stowing beers during navigation, with the fourth hole storing a convenient beer opener that the robot can pick up. Equipping our standard fridge with a tilted self-stocking rack meant that the robot could service many user requests without human intervention.
The user experience begins with the Beer Me web application. In this web app, the user is presented with a menu of ice cold beers and ciders, and a pull-down menu specifying the office for delivery. Once the user hits the enticing Beer Me button, it's the robot's job to make the magic happen. The robot navigates to the fridge, identifies the door, and performs a handle detection to determine a precise grasping location to use for opening. The robot then grasps and pulls open the handle, and positions itself between the door and the fridge to make sure the door doesn't close.
The robot uses object recognition to determine which beers are in the rack, and will report back to the app if the user's selection is not available. Otherwise, it stocks the ordered beers into the foam holder, closes the door, and navigates to the indicated office. The final piece of the puzzle is the handoff. We wanted to make very sure the robot didn't commit a party foul and drop beers on the floor, so we added face detection to the handoff behavior. The robot offers a beer and waits until it detects a face in near proximity. It then looks at the closest person and will release the gripper when the beer is tugged. The robot will also offer the bottle opener and wait for it to be returned. We even got the robot to open beers itself using a standard bottle opener.
Roboticists get used to hearing: "That's pretty cool, but can it bring me a beer?". Well now the PR2 can, and it may even open the bottle for you.
- Login to post comments
Comments
Congrats...
We use live perception. We
Wowza
Ideas
Speed?
Thanks for the question
There are a number of reasons that the robot takes longer than a human to fetch a beer, but the top two are probably perception and planning. With current perception algorithms, detecting the handle on a fridge or recognizing different beers takes a lot of computational power. This, in turn, leads to the robot spending a fair amount of time sitting still while these algorithms run. Similarly, algorithms to compute plans for the arm to grasp a beer while avoiding obstacles and keeping a beer upright are also computationally intensive. We certainly want robots to be useful in the real world, and we're working hard to both speed up our code and find applications for which speed isn't a huge factor. For example, if the robot takes five times as long to clear your table after a meal, you might not care as long as you're not doing it and it gets done eventually. Speed isn't everything, but its definitely a perk... especially when there's beer involved.
Try a GPU instead of CPU
Try a GPU instead of CPU - Addition
Thanks for the suggestion. If
Thanks for the suggestion. If you check out:
http://www.ros.org/wiki/gpgpu
You'll see that there are already many in the ROS community working on GPU acceleration.
cool