Walter the WaiterBot is a modular waiter robot designed for use in restaurants. With the press of a button, he can autonomously navigate to tables, deliver food, and return to the kitchen. He uses a ROS2 node network to manage tasks like localization and actuation, which also communicates with Arduinos to send motor commands and receive sensor data. He has a modular mechanical output that seamlessly powers different modules, all of which are capable of being swapped out by hand – no rewiring or wrenches required!
Why a Modular System?
A human waiter performs various different roles in a restaurant, from delivering dishes to taking orders. While a human can switch between tasks seamlessly, a robot has to be intentionally designed with each desired function in mind. Rather than try to create an all-purpose design that could handle any desired task with a single mechanical system, we opted to create an interchangeable module system, where modules for different tasks could be easily interchanged by a user. If a new function is desired, a new module could be created and swapped in. We decided to develop a tray module for this project because it is one of the most basic requirements of a waiter, and one of the most versatile.
Why ROS2?
We chose to use ROS2 for two reasons: real-time capability and modularity. ROS2’s node and message-passing system allowed us to isolate computationally heavyweight tasks from tasks that require real-time (or close) capabilities. Additionally, the modularity of the node network allowed us to seamlessly refactor a particular function of the robot without modifying any other piece of the system.
Why Localization?
We chose to implement a localization technique rather than just having Walter drive towards goals because our software team wanted experience solving real-world robotics problems. Localization is a classic challenge that any system in the real world will need to solve elegantly.
Why Arduino Microcontrollers?
We chose to use Arduino UNOs as our microcontrollers because they provided a low barrier of entry to writing firmware for both motors and sensors, while also giving us the opportunity to write complex Arduino libraries in C++. By choosing to use Arduinos, we developed high level firmware skills, and got an introduction to firmware development in C++.
Why Did We Name Him Walter?
We wanted him to have a professional and formal appearance. From the name to the bow tie, Walter looks to be a high-status waiter at a five-star restaurant – and he takes his job very seriously.