With such a complicated project of autonomously localizing on a roof surface and accurately shingling asphalt tiles, we aimed to simplify our mechatronic system as much as possible. What our robot ultimately boiled down to is a relatively simple and minimal system consisting of actuators to manipulate a shingle in 4 degrees of freedom: x, y, z, and theta. This design was decided for a number of reasons and constraints, as not only are additional actuators/DOF expensive, but add to the mechanical complexity of the mechatronic system itself. Two wheels at the base of the robot provide locomotion and move it along the x-y plane and provide rotation. A lead screw driven rail system manipulates the shingle in the y-axis by moving the entire z-axis containing the the suction cup and nail gun subsystems. Lastly a pneumatic cylinder lifts and manipulates the shingle in the z-axis.
Team Members and Responsibility:
James Wahawisan: Team Leader (Hardware Assembly)
Kee Young Lee: Subordinate (Software Architecture)
Bryan Bleda: Subordinate (Mechanical Assembly)
Ben Gilman: Subordinate (Systems Overview)
As shown in the image, the breakdown of the system is quite simple: a robot base, rail system that carries the shingle off the robot, and a z-axis rail to lower the shingle and nail it to the roof. This modular construction is what allowed our team members to work independently on individual subsystems thus making the most of the limited schedule. Each subsystem was tested individually for functionality before integrating it onto the final robot, from the localization of the base to the actuation of the pneumatically controlled z-axis.
As shown in the system architecture, the overall robot revolves around the Arduino Mega to oversee control of each individual system. The netbook identifies the position of the chalk line using the webcam and OpenCV library calls to then signal via serial to the Arduino to adjust the positioning of the robot by signaling via PWM to the motor controllers. In another control loop the Arduino pulls certain lines high and low to actuate the relays to move the y-axis rail in to or away from the robot. These relays turn on and off the power drill which is then commanded off when the y-axis cart hits the limit switches which are positioned such that the suction cup is either over the shingle stack or roof surface. Lastly the suction cup system is controlled via digital solenoid valves which turn on based on when the robot needs to lift or release the shingles. The robot is made aware of the shingles using a vacuum sensor which detects when a seal has been made between the shingle and the suction cup lip.
The software architecture is made up of 15 distinct states which are looped through from shingle to shingle. A detailed description of certain states is listed below:
Position Correction: netbook captures frame from webcam. detects chalk line using hue segmentation. if intersection of the line with the left and right edge of the image are at different heights, the robot is rotated, so rotate the base in small increments until chalk line is centered.
Orient Base to Next Location: timing-based robot locomotion to the next location. Arduino sends sequence of PWM drive commands to motor drivers.
Lower Pneumatic Cylinder: Arduino uses solenoid valve 1 to turn off air to cylinder.
Turn Suction On: Arduino uses solenoid valve 2 to turn on air to suction cup.
Raise Pneumatic Cylinder: Arduino uses solenoid valve 1 to turn on air to cylinder.
Move Arm Out: Arduino turns on the hand drill (actuated via relays), sets outer direction, and pulses until the outer limit switch is pressed by the y-cart.
Turn Suction Off: Arduino uses solenoid valve 2 to turn off air to suction up.
Drive to 1st Nail Location: Arduino re-positions base to 1inch away from left edge of shingle.
Nail: Arduino lowers cylinder (and attached nail gun subsystem), and nail gun trigger actuated via servo.
Drive to 2nd Nail Location: Arduino re-positions base to 1inch away from right edge of shingle.
Move Arm In: Arduino turns on the hand drill (actuated via relays), sets inner direction, and pulses until the inner limit switch is pressed by the y-cart.