Showing posts with label Shingling Robot. Show all posts
Showing posts with label Shingling Robot. Show all posts

Saturday, May 12, 2012

Team B - Shing-a-ling



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.



Dispensing

Mechanics

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).


Sensing

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.

Positioning

Mechanics

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.


Sensing

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.

Nailing


Mechanics

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.

Sensing

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.

Robot Locomotion

Mechanics

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.

Sensing

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.

Friday, May 11, 2012

Team A - Team JABS


1. Main Design Concept


Team JABS designed our shingling robot to be able to attach shingles to all sides and corners of the roof and to fit inside of a 2x2 square as detailed in the specifications given.  Our robot contained four primary subsystems: drive system, vision system, shingle manipulator, and peeling.  As seen in the complete CAD Model in Figure 1, the motors, batteries and electronics were all contained on the robot to ensure the robot was fully autonomous and not tethered.   Each of the components was designed to be inside of the robot and were laser cut for easy mounting.  The electronics board, batteries and laptop had parts made to mount it directly to the robot.  Each of the sensors had a mount that would allow for easy attachment – the digital IR sensors had tight fit made for that sensor and the limit switches were mounted with 4-40 screws.  The nail gun – by far the biggest element of our robot – was mounted in the dead center of the robot to drive over the shingle when it was placed and nail in the correct spot given.  

Figure 1 - Photo of Team JABS' Shingling Robot

We also based a lot of our design concepts on budget constraints.  Our custom-made motor controllers were based on a 5 dollar part and a CNC machined PCB , and could still handle the high current motors we were using.   Many of our motors were found in RoboClub in order to “reuse” parts.  We also found additional motor controllers in scrap bins and repaired them to decrease the cost of this robot.  The batteries were taken from the nail gun and scavenged from RoboClub. We also attempted to keep everything simple and fast to manufacture.  All the gears and structural components were cut from acrylic on the laser cutter for cost constraints.  Each of the components were created in CAD to ensure they all fit together properly.  The robot was then assembled using machine screws to ensure that everything would fit together nicely.




2. Team Member Responsibilities


  • Jon Boerner was primarily responsible for the shingler’s vision systems and code.  Jon also assisted with fabrication and CAD, as necessary.
  • Andrew Burks was primarily responsible for mechanical design; he also created the working CAD model of the robot and performed significant assembly work.
  • Ben Streeter was primarily responsible for mechanical design, took lead on fabrication, and assisted with assembly.
  • Samantha Tan was primarily responsible for the electrical hardware systems on the robot and the assorted sensing mechanisms.  



3. Labeled pictures of the overall system with description

Figure 2 below shows the primary subsystems of our robot: the two peeler wheels, one of the two elevators, the nail gun, and the drive modules.  At the top of the robot, the peeler wheels remove a single shingle from the top of the shingle stack and slide it into an elevated side roller.  The side rollers, moved by rack and pinion in a vertical slot, are controlled by limit switches – they can either be in the elevated or lowered position.  Once the side roller is in the lowered position, the robot drives forward and the side roller slides the shingle under the drive wheels simultaneously.  Once the robot is at the correct position on the roof, the nail gun delivers a nail, the robot drives farther forward, and the nail gun delivers a second nail.  The operation then starts over again.  The block diagram in Figure 4 highlights how these systems work together. 


Figure 2 - Photograph with Significant Subsystems


Figure 3 - CAD Rendering


Figure 4 - Functional Block Diagram


4. Pictures and descriptions of the subsystems

Drive System

The drive subsystem will move the entire robot about the roof. Figure 5 shows an image of the CAD model of this subsystem. Items of importance in this subsystem are the caster wheels that allow the robot to rotate while maintaining balance, the drive wheel that is another Roomba drive wheel, and the last caster wheel which prevents the robot from falling off the roof when it is hanging over the edge. The caster wheels are designed in such a way that the drive wheel always maintains contact with the roof regardless of some caster wheels being on a shingle while others are not.

Figure 5 - Drive Subsystem

Vision System

Figure 6 shows the results of the vision system used on our robot. The system is capable of finding the side edge of an already placed shingle, the side edge of a shingle being placed, the top edge of a shingle being placed, and the red line where the shingles should be placed. The side edges are used by the system to detect when the shingle being placed is in position horizontally. The top edge is used to orient and position the shingle correctly with respect to the red line. With one webcam on each side of the system, the robot is able to shingle in either direction.
Figure 6 - Results of the Vision System Used for the Robot

Peeler

The peeler subsystem is at the very top of the robot, and is shown in Figure 7.  It consists of two Roomba wheel modules rigidly attached to a vertical slider.  The wheels push the top shingle on the shingle stack to one side of the robot or the other.  Once a shingle has been pushed off of the stack, gravity kicks in and pulls the Roomba wheels down onto the next shingle.

Figure 7 - CAD of the Peeler Subsystem

Elevator

There are two degrees of freedom in the elevator subsystem, shown in Figure 8.  The first degree of freedom allows the entire system to slide up and down the side of the robot.  This is accomplished by gearing a DC gearmotor to a pair of pinion gears nested between a pair of rack gears.  The rack gears are fixed to the robots frame, so when the counter-rotating set of pinions begins to turn they force the elevator up and down the robot.

The second degree of freedom on the side elevators are a set of rubber rollers.  A small DC gearmotor connected to an encoder is geared to a pair of rubber rollers.  These rollers grip the shingle and pull it out the side of the robot.  The encoders are used to determine how much of the shingle is in the rollers.  An IR sensor is used to detect the initial presence of a shingle and zero the encoders.
Figure 8 - Diagram of the Rollers and Elevator

5. Video of the system in action

Included below is a link to our team's summary video:

Thursday, May 10, 2012

Team D - Roofilin

Main Design Concept:
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.

Completed Prototype


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)

Overall System:

System Breakdown
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. 

Subsystems:
System Architecture

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.

Software Architecture

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: 

System Start: system stalls while waiting for “go” in Arduino serial monitor.
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.



Video: