System Description
Our system design, utilizes six driven wheels and a single elevator mechanism in the rear. The lateral wheels are positioned perpendicular to the front and elevator wheels. When the elevator is completely recessed, in what we call “lateral mode”, the driven elevator wheels and front wheels have no contact with the ground. This allows the lateral wheels to drive the robot along the stair length. When the elevator extends approximately three inches, the entire body is tilted and prevents lateral wheel contact with the ground, and forces the front wheels to make contact with that forward tilt. The front and back elevator wheels can then drive movement in the direction perpendicular to the lateral direction. The chassis is made of a miniature aluminum extrusion, sized 10mmx10mm. The base is made of 1/8 inch acrylic. The entire robot weighed in at 6.83 pounds due to this conservative material use. See this video for a demonstration of our final mechanism.
Stair Climbing Subsystem
The elevator design shows that the two back elevator wheels can completely avoid contact with the ground when the elevator is entirely recessed. Each of these wheels was driven by a 7V DC motor with a 1:20 gear ratio. Since these wheels only operate simultaneously with the front wheels, making the use of these underpowered motors possible for driving a rather large mobile robot.
The entire elevator, which is thirteen inches in length, is driven by a laser-cut acrylic rack and resin printed spur gear. The acrylic rack was fabricated with a 1.25mm pitch, while the resin printed spur gear was fabricated with a 2.0mm pitch. After trial and error, we found that this difference compensated for the difference in material and fabrication methods to optimally maintain tooth contact, despite the difference in size. The acrylic rack also consisted of three separate 1/8 inch acrylic sheets adhered together to increase rigidity and tooth contact.
The front wheels are driven over a belt drive with motors positioned further back on the robot chassis. This important feature allows us to modify the center of gravity to be closer to the elevator in the back. This feature was implemented early on in the design process, because it required iteration to have a functioning elevator mechanism capable of tilting lifting this robot. This belt drive was tensioned through a 1-DOF slot on the front motor mount, and a graphite lubricated passive belt tensioner. The front wheels naturally protrude past the front of the aluminum chassis, while also maintaining a distance of about 5 mm off the ground when the elevator is completely recessed. This allows for the lateral wheels to have sole contact with the ground for smooth side-to-side movement. This was accomplished by fabricating precise 3D-printed mounts.
The front wheels play an equally integral part in the stair climbing process as the elevator itself. The elevator pushes from the back with its driven wheels, and presses the front wheels against the front of the stair. To ascend, the front wheel maintains traction with the front stair panel and pushes itself up using shear force while the elevator itself extends simultaneously. While we did not accomplish this action in our final demos, the transition between states of lateral and lifting mechanisms using the elevator was successful. We believe the main limiting factor was the lack of traction between the front wheels and the stair itself.
Lateral Mobility and Vacuuming Subsystem
The lateral movement subsystem was much more simple to design and fabricate. It consists of two 7V DC motors attached to high traction rubber wheels. To provide stability and a third point of contact, a nylon caster ball was placed on the other side of the chassis. This lateral movement proved to be reliable, and was able to drive nearly perfectly straight.
The vacuum system only operated while the robot was in lateral movement mode. This is because the robot could not vacuum unless completely flush with the stair length, to optimize suction. Since our robot was built to stay moving on two perpendicular axes with minimal turning along the stair, our vacuum design consisted of tubing which protruded from both sides of the robot. This would allow us to collect dirt from all corners of each stair without the need to rotate. This also allowed us to avoid traditional robot vacuum cleaner mechanics such as sweeper arms connected to extra motors. We did not have time to fabricate the tubing or removable bin in our final design, but the blower fan was fully operational. The blower fan we acquired was rated at 47 cubic feet per minute, while the highest end Roomba is currently rated at 22 CFM.
Sensing Subsystem
The sensors included in the final design only consisted of six HC-SR04 ultrasonic distance sensors placed around the robot. These are sufficient in localizing the robot, because the staircase is a very controlled environment that does not require advanced imaging or path planning to operate on. We would have preferred to use time of flight sensors, as they are optimized for the short ranges we want to measure, but our microcontroller did not support the use of two of them at a time. We placed two sensors each on the front, facing forward, and back, facing downwards, of the robot to allow for angular measurement relative to the floor or front stair if needed, although this was not utilized in the final control of the robot. We also placed a distance sensor on either side of the robot chassis to detect the stair edge, allowing the robot to potentially operate on a stair of any length. These sensors required 3D-printed mounts that we designed, due to the miniature extrusion being limited in standardized accessory choice.
Software Flow
To make the process as simple and robust as possible, we implemented a state machine system. First, as the robot Initializes, it will use the front distance sensors to establish if it is at the Top or Bottom of a staircase. From there, it will follow one of two distinct paths, either climbing up or down stairs. Within each path, the robot will circulate between traversing a stair, vacuuming, and checking if the end has been reached. Once it has determined the end is reached, an Idle state will be reached where the system is reset and the cleaning job is complete. There are four states within the code: Initialize, Top, Bottom, and Idle. However, the robot will only occupy three within one cycle of cleaning. This code is linked on the website, but a manually calibrated path was used during the system demo due to the mechanical limitations of the robot.
Final Video