2020 Competition Season

Infinite Recharge

The 2020 First Robotics Competition game was titled "Infinite Recharge". It required teams to build a robot capable of launching 7in dodgeballs known as powercells into a goal 10ft off the ground. Teams were also tasked with spinning a large disk called the color wheel and lifting themselves off the ground at the end of the match.

The video on the right gives a brief overview of the game and how it is played.


Our Robot

We designed our robot to complete almost all components of Infinite Recharge. We could shoot multiple balls into the inner goal in quick succession, and also climb at the end of the match by hooking on to the central Shield Generator Switch. The robot could also fit under the Trench Run for faster cycle times, and could pickup power cells of of the ground with an extending intake.

The video on the left is a practice run from the end of our season when the robot was fully assembled.

Prototyping

After coming up with a strategy for the game, we began by rapidly prototyping various mechanisms in order to find viable solutions to problems presented by the game


video1.mov

Single Wheel Shooter

I led the construction and testing of the shooter prototype. We began with a single wheel hooded shooter because its effective use by many teams in past FRC games. We also had an offseason robot that had a single wheel hooded shooter for 5in whiffle balls. We modified this robot by changing the compression of the shooter as well as the gear ratio and motors used to shoot the balls.

This prototype also allowed us to add a vision camera called Limelight. You can see it emitting green light in the video below. This allowed us to test tracking the reflective vision targets around the upper power port. The robot tracks the target by using a PID control loop to rotate the robot to face the target.

Ultimately we decided that a single wheel hooded shooter was satisfactory without trying other options because of their proven effectiveness in past games. Single wheel hooded shooters also induce a high amount of backspin on the ball, which results in a flatter, more consistent shot. The back spin also causes the balls to deflect downwards off of the target, reducing the chance that the balls bounce off and miss the target.

Power Cell Indexer

By far the largest challenge presented to teams in Infinite Recharge was indexing the power cells into a single path to the shooter. The reason this was so difficult was the unique material on the outside of the balls. The outside texture was smooth but incredibly sticky. So sticky that two balls touching each other could not roll down a ramp. The squishy nature of balls also cause them to become stuck in many cracks and crevices where they did not belong. I led the prototyping of many different variations of indexing methods to consistently feed a maximum of 5 loose balls into the shooter.

The first of these prototypes used the indexing mechanism already built on the whiffle ball shooter. This was a simple brush with 4 polycord spokes. While effective with 1 or 2 balls, when multiple balls touched each other they stuck together, resisting the brush. This is because the balls were required to spin opposite the brush to roll around the outside of the track, like two gears meshing together. When more than one ball touched each other, the balls behaved like a set of three meshing gears, in that they did not move at all.

The top video on the right shows this mechanism working with off-brand, smoother balls. The brush design was no where near as effective with the required brand name dodgeballs.




The next idea we tried used the same idea but with wheels on the outside of the circular track. The idea was to combat the balls getting stuck while rotating by not requiring them to rotate at all. Instead the wheels on the outside and the brush on the inside would both spin, causing the balls to simply translate around the arc with no rotation necessary.

While this prototype was effective, it was heavy, required almost all of our wheels and collars and was simply to bulky and complex to test further. After some online research, we prototyped a completely new style of indexer.




This design featured a static wall and an angled wall of rotating wheels to direct balls towards where the shooter would be. A wooden box with belts and rollers emulated the system that would feed balls into the hooded shooter. We also added idle rollers on the corners of the the delivery chute to prevent balls from getting caught on the sharp corners of the wooden box. This required a lot of clamps and a lot of people holding various components, but this indexer design proved promising in both consistency and speed. We chose to develop this design further and used it on the final robot.

video0.mov
video01112.mov
video0578259.mov
video06409587.mov

Ball Intake

Collecting balls quickly was crucial to do well in Infinite Recharge. For this reason we wanted an intake the full width of the robot. While I didn't lead construction of this prototype, I taught the other student lead in charge of this subsystem how to use AriMB's Design Spreadsheet to calculate belt center-center distances and gear ratios in order to CAD a functional part. I then laser cut the parts for the intake prototype, which you can see on the left.

The parts were mounted on the rear of the 2019 Bunnybot and we were able to drive and test the intake. We found it to be effective despite using a smooth plastic roller. The grippy nature of the power cells caused them to be lifted into the robot easily.

The design was then mounted on pneumatically actuated sliders in order to test the deployment of mechanism on the final robot. The intake had to begin inside the robot frame perimeter to start the match, and we wanted the ability to retract the intake to prevent it from getting broken by other robots.

Climber

It was difficult to prototype this mechanism because of its scale and we had not yet built a bar to climb upon. Instead we drew inspiration from other teams publishing designs. I looked extensively at the design on the right at the 1:00, which featured a virtual 4 bar mechanism which deployed two hinged frames at the same time. This is the style of mechanism that we eventually used on the final robot.

Cartoon CAD

Toward the end of prototyping, I loosely modeled all of our most promising designs onto a single robot. This allowed us to see whether our mechanisms will all fit in the package we want without getting caught up on the small details of how it will all be attached together. This visualization of what the robot will look like is incredibly important in making sure everyone understands the concept of the final robot, and makes more detailed CAD work easier later on.

Design

Digitally modeling the robot based on the prototypes

Sketch Based Workflow

For models of FRC robots which are mostly constructed out of box tubing and flat aluminum plates I tend to sketch most of the features and components in a single parent sketch and then project all the lines from this sketch for future extrusions. This means that if I need to change a portion of the design I can change it in the parent sketch at the beginning of the timeline and everything afterwards will update accordingly. This workflow has proven effective in keeping the amount of features lower for large assemblies so Fusion 360 runs smoother. However the disadvantage of this method is the sprawling complex parent sketches, which requires having a clear picture of the end result before getting started.

I chose to break up the model into a few different modules and then assemble them together in a larger file. This allowed me to do my modeling in smaller, less resource intensive files. I began with the hooded shooter, since its geometry would determine the indexer. The picture on the right shows the parent sketch of this module.

Hooded Shooter

Multiple Motor Mounts

You may have noticed the complex lines in the top left corner of the shooter sketch. This is the geometry for mounting the motors which drive the wheel. I was unsure whether the belt ratio should be 3:1 or 2:1 to achieve the wheel speed we wanted on the final shooter. The motor mounts are actually two different plates that each had mounting holes for either belt ratio configuration. I was also unsure whether we would want three or four 775pro motors to achieve the desired torque, and this system allowed us to change our motors later if necessary.

Flywheel

In its final form on the robot this flywheel was driven by 4 775pro motors on a 2:1 ratio. This resulted in an average speed of about 6000 rpm. The flywheel has four 4in Andymark 60A Stealth Wheels in the center. These provided a good balance of grippiness and durability. On the outside of these wheels on either side are two solid aluminum flywheels to add momentum to the wheels while spinning which was essential to maintaining our rpm while firing multiple balls in rapid succession. These flywheels are 3.5in in diameter and 1in wide. On the backside of the image on the right is a square plastic housing. This holds a magnetic encoder which was used to measure and set the speed of the flywheel using a PIDF control loop.



Shooter and Feeder Frame

The frame of the combined shooter and feeder is bolted onto the vertical and horizontal sections of box tubing. This frame is pocketed 0.25in thick aluminum on the bottom feeder section since it forms the majority of the structure of this module. The top shooter is pocketed 0.125in thick aluminum. The aggressive pocketing helps us reduce weight in order to meet the total limit of 125lbs. You can also see the Limelight camera mounted here. We use this camera to track the reflective targets on the field and aim the robot at the target.

Feeder

The feeder pulls balls in from the hopper and raises them up to the shooter. It does this by pulling the balls with the front most roller of omni wheels, and then raising the balls with a set of polycord belts (not shown in this image) in the back. The single BAG motor accomplishes this through a pair of belts on the outside of the frame that drive a small set of gears to change the rotation direction of the front roller. The idle vertical roller prevents balls from getting stuck along the wall upon entry into the feeder






The small internal rollers highlighted in blue were added after testing the final robot and finding that balls were scraping the sides of the pocketed plates and getting stuck. These idle rollers freely spin, reducing the friction of the collision of a ball against the wall.


Agitator

The agitator features two 4in Andymark 35A Stealth Wheels. These are driven by a BAG motor and spin inwards guiding balls towards the feeder mechanism. It is mounted at an angle in order to remain parallel to the angled floor of the hopper.

Climber

Virtual Four-Bar

We wanted our robot to fit through the tunnel known as the trench for more efficient cycle times. However climbing at the end of the match was worth a large portion of the total match. To create a short robot that could also climb, we knew we needed some sort of hook or hooks that extended from our robot. For this I designed a mechanism that utilizes a virtual four-bar to extend a pair of hooks to reach the bar.

A virtual-four bar typically uses a fixed sprocket and a secondary sprocket of the same size which is attached to a secondary arm. This way when the primary arm moves, the secondary arm remains parallel. A more in depth explanation can be found here.

Our implementation is slightly different in that our secondary sprocket has half the number of teeth of the fixed sprocket. This means that instead of remaining parallel to its original orientation, the secondary arm will rotate upwards, becoming vertical at the same time as the primary arm. Another way to think of this is that as the primary arm rotates 90 degrees, the 1:2 sprocket ratio causes the secondary arm to rotate 180 degrees relative to the primary arm.

Because the two arms are linked passively, I chose to deploy the virtual four-bar using two pneumatic pistons. Pneumatic pistons were appropriate because it took very little force to deploy the folding climber due to added surgical tubing counterbalancers. Surgical tubing was stretched around the joints of the climber in order bias the climber more towards its extended position. It's important to note that the pneumatic pistons only raised the climber, the heavy lifting needed to raise the robot was done by a winch system.

Winch System

The virtual four-bar frame is particularly lightweight and is no where near strong enough to lift the robot on its own. Its only purpose is to deploy the hook to the bar. The lifting is done by a winch which reeled in lengths of kevlar infused cord. Two separate drums (highlighted in blue) linked by a common shaft unwind the cord as the hook is deployed, and then reel in to lift the robot. Having two winch drums ensures that the tension force is equally distributed across the climbing mechanism and robot as a whole.


The gearbox for this mechanism features an additional ratchet. At the end of every match, the field management systems cuts all power to the robot. This causes a problem for a robot held up by an electric motor. Our pneumatically actuated ratchet allows us to unwind the winch to deploy the hook, and then activate the ratchet as we climb to prevent the robot from falling back down. The small pneumatic piston pushes the pawl into a custom made gear (highlighted in blue) in order to prevent backwards rotation of the shaft.

Hook

Originally the climbing system was designed to use two hooks equally spaced apart. However, during manufacturing of the climbing mechanism, I realized that dual hooks were not ideal for our situation because the bar tilts as we climb. This means that oftentimes there is a force of gravity acting sideways on the robot. This force would be almost entirely absorbed by the lightweight virtual four-bar mechanism if we used a two hook system.

I designed a new, single hook mechanism to prevent our virtual four-bar from becoming a bent mess. This hook was mounted in line with the robot's center of gravity to minimize the amount of swaying the robot would undergo. However, the hooded shooter also utilized this space. To solve this, I created a hook that folded. In the down position the hook is blocked from rotating by back of the hooded shooter. As the climber raises, the hook is released and flips upward due to the surgical tubing wrapped around it.

Intake and Wheel Spinner

Intake

While I didn't own the design of these next two subsystems like the shooter and climber, I did influence their design and they are important aspects to understanding how the robot works.

The intake is mounted on sliding rails like our prototypes, but unlike the prototypes our final design has the intake mounted at an angle. This is to allow the intake to stow within our frame perimeter and reach slightly lower than the bumper when deployed to get optimal compression on the power cells. The final intake also features a polycarbonate trough above the top roller which forms the rear wall of the hopper.

The linear sliders were custom designed by another student and printed in nylon using Multi Jet Fusion. Bearings were bolted on both sides, as well as the top and bottom. The bearings are the only contact with the aluminum box tubing, and as a result the intake glides smoothly in and out.

Wheel Spinner

To interact with the color wheel we designed the wheel spinner. It's essentially just a brushless motor and gearbox with compression wheels on top. It remains folded within the robot the majority of the match, but pops up above the robot when deployed to interact with the color wheel.



The wheel spinner is deployed via a pneumatic piston, which is critical to its success. Because pneumatics are compressible, when we drive the wheel spinner into the trench it won't receive a jarring shock and break. Instead the piston compresses and increases our pressure on the wheel



The built in encoder on the brushless motor can measure the number of rotations of the color wheel, and the color sensor mounted above the wheel spinner can sense the specific color that is active on the color wheel. The video on the right shows the wheel spinner being tested before being mounted on the robot.

video0WheelSPinner.mov

Full CAD Model

Manufacturing and Build

Sourcing, Machining and Assembling Parts

Aluminum Plates

Most of the custom aluminum plates and gussets are outsourced to the HP Model Shop for fabrication. For almost all of these parts, I arrange a dxf layout of all the parts in the most compact form I can achieve. These are then cut on HP's waterjet. The waterjet is great for producing large amounts of parts quickly, but lacks slightly in precision. For bearing holes or threaded holes, I purposely undersize the holes so they can be drilled to size later.

3D Prints

Parts that see high loads and are mission critical we send to be printed in nylon on HP's Multi Jet Fusion. This material is incredibly tough, durable and flexible. On this robot we printed the winch drums, linear sliders, various piston mounts and timing belt pulleys out of MJF nylon.

Lower load parts such as spacers are printed on standard FDM printers out of PLA. For smaller parts this is ideal since the turn around time is relatively small compared to MJF.

Part Sourcing

Based on the CAD models, we can easily know how many of each part we'll need to assemble a complete robot. For gears, gearboxes, motors, electronics, wheels and most FRC specific parts we typically order from Vex Pro, West Coast Products, or Andymark. For most of our bolts and more general hardware we order from McMaster Carr.

After ordering parts, we organize parts into separate bags for each module. That way once assembly begins all the parts necessary to complete the module are in one place. The picture on the left shows a tote of parts prepared for the climber

Assembly

Diagrams of custom aluminum tubing were printed out and given to the build sub-team. Each of these tubes were cut to length on our horizontal bandsaw and holes drilled on the drill press or mini mill.

The majority of our parts are held together with steel bolts or aluminum pop rivets. Rivets allow us to secure things quickly and will two thin materials together with great strength. They're also significantly lighter than using steel bolts. Bolts are used in places where the materials are thicker or standoffs attach to plates.

Build

Assembly and testing modules of the robot individually

Typically the drivetrain design is complete early in the season, and it is the first part of the robot assembled. Here students are riveting the drive rails together.

Here a portion of the belly pan and battery box have just been added to the drivetrain. You can see the assembled gearboxes and wheels of the robot have been added as well.

The agitator was one of the first modules of the robot to be completed, and was assembled in one night. As you can see I was quite pleased with how it turned out.

The hood of the shooter was assembled and weighed in at 8.7lbs.

The feeder and hood were then attached to complete the module.

testLaunch.mov

Testing along the way is important to making sure each module is functional before it's attached to the robot. We want to address potential issues earlier rather than later. Plus testing is fun.

Box tubing was bolted to the bottom of the shooter module, and then the box tubing was riveted on to the robot itself.

video03212.mov
video0315.mov

Once the shooter was mounted we could start doing some longer range tests. This is where we decided we needed to up the amount of shooter motors from 3 to 4 and change the belt ratio for 3:1 to 2:1.

video01321.mov

The intake was initially constructed with laser cut wood to test its functionality.

video7689.mov

Once we got the correct geometry with wooden pieces we replaced them with polycarbonate plates of the same shape.

video076.mov
video0876.mov

With the intake complete, we began testing the hopper's functionality by adding temporary pieces of corrugated plastic to get the geometry we wanted.

video07.mov

At this point most of the wiring and initial teleoperated software were finished, so we were able to test all the different parts of the ball pickup, indexing and shooting working together.

video06954.mov
video064398.mov
video05473.mov

In order to further develop our software we payed a visit to our friends Team 2471 Mean Machine who had a full size practice field. We began by tuning our limelight to automatically aim the robot. A PID loop was added and tuned to rotate the robot to face the target on a drivers command. The limelight camera is able to tell where the target is by emitting green light. The retro-reflective tape surrounding the target then reflects this light back to the camera. This way the camera gets a clear view of the target and can pick out its center.

We then had to tune the rpm of the shooter to match our spot on the field. This was done by manually setting the rpm to hit the target from various increments of distance away from the target. These points were then plotted and a parabola of best fit created to match the points. Then the robot is able to measure its distance from the target based on the size of the target in the camera. This distance is the input for the parabolic equation, which returns the optimal rpm for our location. In this way we can extrapolate the rpm needed to hit the target based simply on the camera's view of the target.

video013145435.mov

We then began implementing our autonomous programs using our newly developed motion profiling system. We had prototyped this system earlier in the season on our offseason robot, which you can see above. Essentially, motion profiling maps a PID loop for the robot angle over a Bezier curve, which allows the robot to complete complex motions with accuracy.

This software was the applied to our current robot in order to complete the autonomous program seen on the right. This was a huge breakthrough for us since we'd never had an autonomous program that could consistently preform complex movements with computer vision involved.

To be clear: In both of the videos here the robots are operating under their own control, without any inputs from the operators.

20200209_175339.mp4

You may have noticed a distinct lack of a climber in the images and videos of testing above. This was due to the hooks being reworked to only have a single hook. The above images show us placing the robot on an axle to detect its approximate center of gravity. The new hook needed to be in line with the center of gravity or the robot would end up swaying side to side.

video065432.mov
video0136514.mov

With the climber and new hook attached we could begin testing the climbing sequence. The sound of teeth skipping in the video on the right is the sound of the ratchet doing its work. Later we decided the ratchet didn't need to be engaged for the entire lifting sequence. Instead we activated the ratchet once we were within 6in of our target height.

video0987.mov
video0153.mov

On our next trip to Mean Machine's practice field we tried some climbs on the real bar, which sways. After some practice on our own we attempted a climb with Mean Machine's Practice robot, and were successful in achieving a balanced bar, aka Shield Generator Switch. Mean Machine's robot ended up very similar to ours simply by chance. While we had communicated with them occasionally throughout the season, we converged on similar climber, shooter, and intake designs purely by coincidence.

20200217_145041.mp4

We began improving the consistency of our auto routines, and speed up our first 8 ball trench auto. We also developed an auto for the left side of the field in order to make ourselves more compatible with potential partners.

video01235.mov

The robot received some final upgrades and adjustments, mostly small details that we'd been putting off. The wheel spinner was added, and the temporary hopper replaced with polycarbonate. This induced some last minute headaches since the balls stuck to the polycarbonate more so than the corrugated plastic. Eventually we got everything on the robot buttoned up and ready for our competition the next week.

In our final time on Mean Machines practice field we mainly did driver's practice. Even an elite robot is nothing without practiced drivers who can operate it in a smooth, controlled manner. We timed the drivers and simulated a real match environment. In the last few seconds of the practice drill you can see us perform a complete climb sequence.


20200223_175224.mp4

Certainly one of the highlights of our season was our combined autonomous with Mean Machine. This demonstrated just how impressive a coordinated autonomous could be. Under ideal circumstances, our combined autonomous could score 18 balls in just the first 15 seconds of the match.

Competition Season

This brings us to the end of the January through February build season. And for a lot of teams this was the end of their entire season due to the arrival of the coronavirus to the US. However, we were lucky enough to have an early week 1 competition, and were able to get a competition under our belt before everything came screeching to a halt.

Qualifications

The first day and a half of the tournament are the qualification rounds. Teams are randomly placed in 3 team alliances for each match, so a team with you one match could easily be against you another match. Winning matches and completing objectives in your matches grants you ranking points. These ranking points determine your ultimate rank at the end of qualifications, which determines your position in the draft-style alliance selection which precedes the playoffs. The following are a few matches from our qualifications:

In Qual 23, we started in the top left corner, this time with blue bumpers. We were partnered with two robots who didn't have great ball scoring, but did have solid climbing systems. Because of this, we were able to achieve a triple climb, with all three robots off the ground. This granted us an extra ranking point, and really helped boost our tournament rank.

In Qual 33 we started in the lower right corner, and were partnered with 6831, who had a fantastic low scoring robot. Combined we scored 38 power cells, which crossed the threshold which allowed us to do the first stage of the wheel spinner. You can see us successfully spin the color wheel the required number of the rotations at the end of the match, right before we climb.

In our final Qualification match, we were against Mean Machine. We had lost a close match to them earlier, and this one was just as close. We started in the bottom right in red bumpers. The match was neck and neck, with both us and Mean Machine putting up points while under heavy defense. Ultimately, we were able to complete a double climb with our alliance partners which pushed over the top for the win. This boosted us to rank number 4 heading into alliance selection.

Playoffs

At the end of qualifications, we ranked 4th. During alliance selection, we became the 3rd alliance captain and picked 4488 and 6465 to be our alliance partners. We made it through quarterfinals and semifinals fairly easily, but the finals matches were very close. We ultimately won the event after winning the last 2 of 3 matches against the number 4 seeded alliance in the finals.

Quarterfinals 4-2

This was one of our best matches with our new alliance partners. We were still working things out as an alliance, but we put up some major points this match as we were largely undefended. We start in the bottom right in red bumpers. (The video starts partway through the autonomous period).

Finals Match 3

Our last match of the competition (and although we didn't know it, our last match of the whole season) was rough, but we managed too eek out the win, largely due to the intake of 1425 breaking early on in the match. A win is a win nonetheless, and I'm very proud of our team and robot performance.

Recap Video

This video by our videographer shows some event highlights of both the robot and team members.