We used a relay to control vacuum power so that we could power them while moving laterally to clean the stairs. The relay requires an input voltage of almost 5V to be able to turn on the vacuums. The Teensy 4.1 has an output voltage of 3.3V, so we tried to use a transistor circuit to control a 5V input to the relay using the Teensy’s 3.3V output. However, instead of outputting 5V, the transistor circuit only gave 2.7V when connected to the relay. While there was not very clear documentation on the signal input to the relay, it seemed like the circuitry inside the relay was dropping the input voltage. To get around this, we connected a 1.5V AA battery in series with the relay. This increased the voltage and allowed us to logically control the vacuums.
As part of the climbing sequence, the robot had to drive forward or backward at times with only its front or back wheels. During this part of the climbing sequence, the robot was in contact with the ground on two front or back wheels and one center wheel facing sideways. With our initial lateral motor mount design, this formed a small triangle that the robot’s center of gravity could easily leave when a segment was raised or lowered. In order for the robot to move forward or backward, the center or gravity on the robot had to be within this triangle. We changed the motor mount design to shift the center wheels outward and increase the area of the triangle, so that when the center of gravity shifted, it would still be within the base. This allowed our forward and backward movement wheels to drive the robot with only 2 of the 4 wheels on the ground.
Initial lateral motor mounts
Final lateral motor mounts with increased base area
During the final system demo, the robot climbed each step completely and then vacuumed while moving laterally. This sequence only collected dust from the middle of each step as the nozzles only traversed this area. To vacuum a larger area, we changed this to a sequence where the robot places the front segment on a higher step, moves sideways to clean the lower step, places the middle segment on a higher step, and moves sideways to clean that part of the higher step. When repeated over multiple stairs, this allows us to vacuum both the front and back halves of each step instead of just a middle section.
While testing the climbing sequence on the stairs, the backward lateral wheel was initially getting stuck in a groove at the edge of each step and was not able to move forward to complete the full motion sequence as planned. We tested with higher motor power and tried to move the lateral wheels in opposite directions to twist the robot out of the groove, but neither of these actions were effective. However, when we combined these wheel movements and drove sideways while driving forward, the wheel was able to leave the groove. This step was able to get the robot out of the groove 100% of the time when we tested it for more than 10 times on different steps.
We believe that our robot is structurally strong. During our testing, we encountered multiple occasions where the robot bumped into a wall, tried to lift a pod past its limit, toppled at the edge of a step, and even jumped 2 steps down while descending, but its structure remained in tack and it was still functional. This is because we used a combination of different materials. The chassis of the robot was built using aluminum 2020Vs to protect the electronics. On the other hand, plastic gears and racks are used such that when the motor tries to drive the robot in a direction that it could not move, the gears are expected to break before the motor and the chassis are damaged.
With the limited testing time in the semester, we did not achieve a 100% success rate in climbing and descending stairs. However, our robot climbs and descends the staircase with a good success rate of approximately 80% in more than 50 tests. The most challenging part for our robot was the grooves on the edge of each step. The single-layered omni wheels driven by the lateral motors occasionally get stuck in these grooves, and which can make the robot slip when it drives out of the groove due to inertia.
Our robot is able to vacuum approximately 90% of the coffee grind. This can be seen in Figure. This is because our design allows the center pod (where the vacuum nozzles are attached) to always remain at a constant and small height from the ground. Another factor is that we implement 2 vacuums facing opposite directions for increased ground coverage and suction power.
Our robot climbs and descends the stairs quickly. Traversing each step twice to pick up more dust particles, it takes only about 2 minutes and 10 seconds to fully vacuum 3 steps.
While designing the robot, we had been concerned about whether the rack and pinion design would be able to lift the robot. After building it, we found that the system was powerful enough to do so. In addition, using a rack and pinion as opposed to a lead screw helped us climb stairs faster. Once limit switches were integrated into the lifts, they were possibly the most reliable subsystem on the robot.
The robot managed to pick up almost all of the dust its nozzles drove over, so our use of dual small hand vacuums with separate battery packs was successful.
While our omni wheel drive allowed us to easily drive laterally without too much slipping, using small single track wheels made us vulnerable to bumps in the path. If we had used larger wheels or double track wheels the robot would be more resistant to small variations in the floor.
Some of the robot’s movements forwards and backwards had to be very precise in order to be able to climb and descend the staircase without falling. This was partially because the center of the robot’s front wheels was very close to the edge of the middle segment, so when the robot, for example, drove its middle segment off a step to go down, its ending position had to be very accurate. Having more clearance would have reduced the risk of the robot falling off the stairs.
During our full system testing we realized that while the single track omni-wheels did usually manage to do the job, the lateral movement wheels would sometimes get caught in a groove at the edge of the step since they were so slim and had a narrow contact area, which then required us to make a number of software and controls adjustments to work around this issue and ultimately led to slightly reduced performance in terms of speed and reliability. In hindsight the increased thickness of the double track omni-wheels would have been worth it for the added robustness in driveability.
We unfortunately shorted and burnt out a number of our central microcontrollers during the implementation of our robot. The ‘dead’ teensy 4.1s can be seen in figure below. While we were not sure about the origin of every short, it is likely that some were caused due to accidentally touching the back of the circuit board against a conductive substance on our workbench during testing. By the end of the project we had implemented a number of safeguards to prevent this, ensuring that any time the teensy was powered the exposed parts of the circuit board were shielded by an acrylic plate, and this seemed to prevent further shorts.
‘Dead’ Teensy 4.1s
We used 5mm, fully cylindrical aluminum drive shafts for our forward lateral drive trains and our lift system. The size and material were chosen to keep costs and weight down, however we were not able to source D-shafts in this size which forced us to use cylindrical shafts. While we were able to get these to work, the softness of the aluminum shafts meant that the couplers wore away at the shaft during the large volume of testing that we conducted, leading to backlash in the drive trains as the joints became loose. This was manageable with repeated tightening of the set screws that held the shafts to the motors and wheels, but could have been avoided entirely with the use of steel D-shafts.
We selected small IR sensors as our primary means of perception outside of motor encoders. The IR sensors we chose and ordered are shown in figure 8.1.4 below. As it turns out the tiny wires attached to the sensors were extremely fragile, leading to many of the wires detaching, as well as the sensor output pins bending during testing. On top of this, the sensors themselves seemed very unreliable, and by the end of the build time we only had 1 remaining working IR sensor out of the 5 we initially started with. In hindsight, some other brand of sensor, or even just the basic HC-SR04 ultrasonic sensors would have served us better, and saved a lot of time in debugging and re-working our perception plan.
GP2Y0E03 IR distance sensor
The robot was able to vacuum the test staircase for the project but in order to enable it to climb or descend any staircase, we will have to implement front and down distance sensors and pressure sensors. We have a single front sensor and hence if the robot does not align with the stair, then there is a high possibility that it won’t perform the assigned task. To avoid this situation, it will be required to have two front sensors such that if they detect different distances from the stair, then we drive that side of the robot forward and align the robot back.
The down distance sensor helps us to detect whether the robot has reached the edge of the stair. This helps the robot descend down when kept away from the stair at any distance. After it detects that the robot has reached till the edge, we can use motor encoders to drive forward the distance after which the back segment of the robot can start moving downwards.
The pressure sensors need to be implemented at the bottom of the middle segment where it can ensure that the segment is ready to move down. Since it has most of the weight of the robot, it tends to disbalance it the most. Hence, with the help of the pressure sensor, we can ensure that the robot is just out of the stair and ready to descend down rather than relying on the motor encoders which though being highly precise lose their accuracy to be precise sometimes.
The robot was not able to move forward/backward or laterally until the non-functional wheels at that time were either just touching the ground or lifted off the ground. This was because the single track omni-wheels were not able to generate enough friction to initiate the motion of the robot. Also, at times while climbing or descending the robot would move until the wheel groove and because of this, they tried to adjust such that they are on the rolling part. This made the robot either topple off the stair or not able to climb properly.
The two problems described in the prior paragraph can be solved using double-track omni wheels. The first problem would be able to solve as the wheels would lie on a larger surface area and be able to generate enough friction and also stabilize the robot. The second problem would be solved as the double wheels are alternatively grooved. Hence, one of the two would have its rolling part on the floor and they won’t adjust and stay without rolling. This would avoid the robot tipping off the stairs.