Overall Concept/ Subsystem Layout
The shingling robot has been divided into 4 main subsystems: the shingle dispenser system, the prong rail system, the nail gun system, and the locomotion system. A stack of shingles are placed in the dispenser bin. Then the shingle dispenser system sends a single shingle to the prong rail system. The prong rail system positions a shingle in a desired location. After that, the nail gun system nails the shingle to the roof. The locomotion system then moves to the next location in order to place the subsequent shingle.
The first subsystem of the mechatronic device is a dispensing system. The purpose for this system is to allow a user to take a pile of shingles and essentially “hand” them to our device in order for it to execute the final goal properly. Dispensing was a very important part of our design, so multiple designs were considered with the first prototype. One of the ideas presented was pushing one shingle off of a stack of shingles. This idea was thrown out after analyzing the roughness of a shingle. It seemed the friction between shingles would be difficult to overcome by having a roller push the top shingle. Having an arm push each shingle on a stack was also considered. This involved having an arm push the top shingle on a stack of shingles sitting on a spring-loaded plate. Once the top shingle was pushed off the stack, the spring would expand, pushing the stack higher to replace the last shingle. This idea was considered briefly, but seemed a bit complicated and less reliable than the last design. The final design had a box holding vertically stacked shingles and pushed the shingles out one by one. This design was decided to be the most easily achievable and mechanically possible. One thing about the final design that sets it apart is that every part of the robot was built by hand. Therefore, the final dispensing design was more achievable from bulk material then the other initial designs (which would have required certain spring actuated subsystems to be ordered).
In order to accurately dispense a shingle, it is crucial to ensure only one shingle is dispensed at a time. Therefore, it’s necessary to include at least one sensor that can determine whether a shingle has been successfully dispensed. Originally, the plan was to use an IR LED and IR receiver, but a simple photoresistor is cheaper, works just as well, and if the robot is operating during the day, no LED is required for the sensor to be operational.
This subsystem had to be designed so the robot is capable of placing a shingle at every required location, including the extreme, where the shingle is placed half on the roof and half off the roof. Therefore, the main challenge of this system was to move the prongs out of the robot’s footprint. The prong rail system has been introduced to serve this task. A steel rod is used as a main guide rail for the prongs to slide along, combined with a timing belt (driven by a stepper motor). After the shingle is nailed to the roof, the prongs open to release the shingle. Originally a lead screw was used for the horizontal translation of the prongs, but this required an incredible amount of power and time, leading to the design with a timing belt.
The horizontal motion of the prongs required a degree of precision and power which was perfectly suited by a stepper motor. Combined with a snap-action switch which allowed for a constant zero point reference, a stepper motor could precisely place the prongs in any desired shingle location. The prongs were also relatively light, and thus didn’t require a powerful DC motor.
The nailing subsystem allowed us to nail shingles to the roof after placing them in the correct position. The main goals in this subsystem were to have two degrees of freedom. The first is horizontal in order to place the nails in the correct locations relative to the shingle, and the second is vertical. Originally, the plan was to use a lead screw to actuate the nailgun horizontally. However, a steel rod and timing belt provided faster motion with less power compared to the first prong rail prototype that was created. The vertical motion was required in order to engage the safety mechanism located on the tip of the nailgun. Because the trigger was constantly pulled back, engaging the safety mechanism gave control over when the nailgun fires. Two degrees of freedom were deemed more beneficial than moving the entire robot over horizontally because we could not directly control slippage of the drivetrain. In addition, a lead screw was used in the vertical motion in order to prevent back-driving, as a timing belt would not have been nearly strong enough.
The horizontal motion of the nailgun didn’t require higher resolution than could be achieved through a stepper motor, and horizontal motion needed no speed control. Thus, a stepper motor was used to obtain high torque at relatively low speeds of translation. In addition, this ensured precision in the placement of the nailgun, which was the most important design requirement. The vertical translation however, would require faster speeds and less precise positioning, so a 24V DC motor with an encoder was used that could translate the nailgun quickly and then slow down when the nailgun was close to the desired position. This limited overshoot and gently pushed the nailgun against the roof, which helped to prevent stress on the system.
To increase execution speed and to avoid tilting in a way that might affect the dispensing system, we decided from the start that we would want our robot to be able to move in both x- and y-directions independently. Our first approach was to use two independent drivetrains, and to engage and disengage one of them when necessary. Ever since the beginning of the project the plan of attack siwtched which of the two would be engaged/disengaged, how this would be implemented, and whether one or both of the drivetrains would be equipped with 2 motors, allowing for rotation and correction in alignment.
The first approach for engaging/disengaging was using a long axis shaft, with a left-handed thread on one side and a right-handed thread on the other. This would rotationally engage and disengage a pair of tank treads at the sides of the robot (the threads are reversed on either side so the tank treads spin in the same direction). However, the robot began to grow heavy and threads were thought to be too expensive (which was later found to be incorrect), so this idea was dropped. The plan maintained until April was to use two pneumatically engaged wheels at the rear of the robot. On the other side of the robot (its front) would be two casters that are fixed slightly higher than the drivetrain for horizontal motion, such that when the rear wheels would engage, the resulting tilt of the robot would be placed on the casters.
In April, when most of the other subsystems were done, and with fresh experience from the machine shops, it was decided that a simpler and more robust solution for the locomotion would be possible. It would also be interesting to reduce the amount of necessary actuators. It is at that point the decision was made to use omni wheels. At first it seemed intuitive to use four of them - one in each corner, as at that point it was thought the bottom of the ramp towards the prongs would not allow for motors to be placed in the middle of each frame edge. However, statics dictates the use of three omni wheels, as the system had to be monostable - just as four-legged tables often have one leg in the air, four wheels would risk one of them being placed in the air - which would be fatal for control. Thus, two wheels were placed at an angle in the front corners so they held the most weight, with the third wheel in the middle of the back edge of the robot, parallel to the roof’s front edge in order to maintain proper balance.
Of the 3 shingling teams competing, this design was the only one to not use computer-supported vision. In hindsight, it could have been the most robust solution (assuming the roofing felt was not redesigned for better sensing). From the beginning, the plan was to use LED-equipped brightness sensors to detect the chalk lines. Although Andrew successfully built an intermediary robot that would align to a red chalk line, this idea was dropped in the very end because it proved to be unreliable on the actual robot. Other, complementary, ideas for the sensing of the robot position included using color sensors for shingle detection and encoders (for the original drivetrains). However, shingle detection was dropped due to complexity, robustness and time issues. Furthermore, encoders would not make sense on omni wheels, as they are designed to slip.
An alternative, which was investigated pretty early consisted of hacked computer mice to measure distances on the roof. Although the mice proved to lack grip sometimes, this is the method of localization used for the major part of the locomotion program. Advantages of this method are computational inexpensiveness and versatility.
We also use infrared rangefinders to detect the roof edge.
More pictures, the report and a video can be found on our website.