Please help support our team! $25 buys a motor, $50 buys a new battery, $150 adds controllers and sensors, $500 pays tournament fees, $750 upgrades our drivetrain

Iron Reign

Welcome to Iron Reign at Dallas ISD's Science and Engineering Magnet

Articles by section: engineering

Balancing and PID

20 Aug 2017

Balancing and PID By Tycho

Task: Test and improve the PID system and balance code

We're currently testing code to give Argos a balancing system so that we can demo it. This is also a test for the PID in the new REV robotics expansion hubs, which we plan on switching to for this season if reliable. Example code is below.

public void BalanceArgos(double Kp, double Ki, double Kd, double pwr, double currentAngle, double targetAngle)
 {
     //sanity check - exit balance mode if we are out of recovery range
 
 
 
     if (isBalanceMode()){ //only balance in the right mode
 
         setHeadTilt(nod);
 
         //servo steering should be locked straight ahead
         servoSteerFront.setPosition(.5);
         servoSteerBack.setPosition(0.5);
 
         //double pwr = clampMotor((roll-staticBalance)*-.05);
 
         balancePID.setOutputRange(-.5,.5);
         balancePID.setPID(Kp, Ki, Kd);
         balancePID.setSetpoint(staticBalance);
         balancePID.enable();
         balancePID.setInput(currentAngle);
         double correction = balancePID.performPID();
 
         logger.UpdateLog(Long.toString(System.nanoTime()) + ","
                 + Double.toString(balancePID.getDeltaTime()) + ","
                 + Double.toString(currentAngle) + ","
                 + Double.toString(balancePID.getError()) + ","
                 + Double.toString(balancePID.getTotalError()) + ","
                 + Double.toString(balancePID.getDeltaError()) + ","
                 + Double.toString(balancePID.getPwrP()) + ","
                 + Double.toString(balancePID.getPwrI()) + ","
                 + Double.toString(balancePID.getPwrD()) + ","
                 + Double.toString(correction));
 
         timeStamp=System.nanoTime();
         motorFront.setPower(correction);
 

REV Robot Reveal

24 Aug 2017

REV Robot Reveal By Tycho, Austin, Charlotte, Omar, Evan, and Janavi

Argos V2 - a REV Robot Reveal

This video was pulled from Argos visits to: The NSTA STEM Expo in Kissimmee FL, in the path of eclipse totality in Tennessee, and in North Texas at The Dallas Makerspace, The Southwest Center Mall, Southside on Lamar and the Frontiers of Flight Museum. We hope you find it interesting:

PID Calibration and Testing

27 Aug 2017

PID Calibration and Testing By Tycho

Task: Allow user to change PID coefficients from the controller

To allow each user to create their own settings, we're designing a way to allow the user to tune PID to their own liking from the controller. This also enables debugging for our robot.

public void PIDTune(PIDController pid, boolean pidIncrease, boolean pidDecrease, boolean magnitudeIncrease, boolean magnitudeDecrease, boolean shouldStateIncrement) {
 if (shouldStateIncrement) {
  pidTunerState = stateIncrement(pidTunerState, 0, 2, true);
 }
 if (magnitudeIncrease) {
  pidTunerMagnitude *= 10;
 }
 if (magnitudeDecrease) {
  pidTunerMagnitude /= 10;
 }
 double dir;
 if (pidIncrease) dir = 1;
 else if (pidDecrease) dir = -1;
 else if (pidDecrease) dir = -1;
 else dir = 0;
 switch (pidTunerState) {
  case 0:
   pid.setPID(pid.getP() pidTunerMagnitude * dir, pid.getI(), pid.getD());
   break;
  case 1:
   pid.setPID(pid.getP(), pid.getI() pidTunerMagnitude * dir, pid.getD());
   break;
  case 2:
   pid.setPID(pid.getP(), pid.getI(), pid.getD() pidTunerMagnitude * dir);
   break;
 }
}
public double getPidTunerMagnitude() {
 return pidTunerMagnitude;
}
public int getPidTunerState() {
 return pidTunerState;
}
public int stateIncrement(int val, int minVal, int maxVal, boolean increase) {
 if (increase) {
  if (val == maxVal) {
   return minVal;
  }
  val++;
  return val;
 } else {
  if (val == minVal) {
   return maxVal;
  }
  val--;
  return val;
 }
}

Meeting Log

09 Sep 2017

Meeting Log September 09, 2017 By Ethan, Evan, Abhi, Tycho, Austin, Karina, and Kenna

Meeting Log September 09, 2017

Today was the first meeting of the Relic Recovery season. Our main focus today was strategy, then organization and getting the robot ready for this year's challenges

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • Write blog post for Kickoff
  • Fix dates for indexPrintable
  • Blog post catchup
  • Strategy review

Software

  • Glyph recognition OpenCV
  • Aspiring programmer's code review

Build / Modelling

  • Teardown old robot
  • Design Competition - glyph grabber

Service / Outreach

  • Kickoff

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
EthanKickoff post2:002
EthanFix dates4:002
EvanDesign Competition2:004
AustinTeardown robot2:002
AustinDesign Competion4:002
TychoCode review2:004
KennaBlog review2:004
KarinaStrategy review2:004
AbhiStrategy review2:004
PeopleTask2:001
PeopleTask2:001
PeopleTask2:001
PeopleTask2:001
PeopleTask2:001
PeopleTask2:001
PeopleTask2:001
PeopleTask2:001
PeopleTask2:001
PeopleTask2:001

Intake System Competition

09 Sep 2017

Intake System Competition By Evan and Austin

Task: Compare build designs for the cryptobox intake system

The block scoring system is going to be an integral part of the competition this year, and it will have to built sturdy. It’ll have to be reliable for us to have any shot of winning any matches. So we got to brainstorming. We spent a while at the whiteboard, drawing up various mechanisms and ways to pick up blocks. One idea was the idea of a block delivering system similar to those modern vending machines that have two degree of freedom movement. We began to design the contraption so that a conveyor belt could be placed on an up and down linear slide to position the blocks just right to make the different symbols. Another person came up with the idea to use our tank treads from Geb, our competition robot from two years ago, to push the blocks up a ramp and deposit them into the cryptoboxes. Neither of us could convince the other about what was to be done, so we both split off to work on our own models. Next week we will keep working on this build off of the century.

Meeting Log

16 Sep 2017

Meeting Log September 16, 2017 By Ethan, Evan, Karina, Tycho, Austin, Charlotte, and Kenna

Meeting Log September 16, 2017

Today we had a major outreach event at Conrad HS in DISD which served around 450 people. We also planned on continuing our building competition, working on strategy, the blog, and the robot teardown.

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • Conrad post
  • About page - new members
  • Strategy

Software

  • Code review

Build / Modelling

  • Complete robot teardown
  • Finish design competition
  • Install REV hubs

Service / Outreach

  • Conrad HS volunteering

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
EthanConrad post2:002
EthanAbout page4:002
EvanDesign competition2:004
AustinRobot teardown2:001
AustinREV hubs3:001
AustinDesign competition4:002
KarinaAbout page2:002
KarinaStrategy4:002
TychoCode review2:004
CharlotteConrad post2:004

Further Design of the Intake

16 Sep 2017

Further Design of the Intake By Evan and Austin

Task: Design the grabbing systems further

The sun came out and it was back to the field. We got started right away, both of us building our designs. Since the cryptoboxes were wider than the 18 inch sizing cube, we started by designing a fold out for the conveyor belt. This was entirely proof of concept, purely to see if it was at all aplicable in the game this year. We spent an hour or two gathering parts and put together an extending conveyor belt. This device would swing down, like the arrow suggests, allowing for more space to move the blocks back in forth, giving us accuracy in rune completion. This will be later attached to linear slides, allowing for an up and down motion.

Intake Systems

17 Sep 2017

Intake Systems By Austin

Task: Work on designs for the intake system

Over the past couple of days we’ve experimented with a horizontally mounted track system that we had hoped would serve to move blocks through the entire length of the robot and into the crypto box. Immediately we noticed a few issues, the primary one being that the tread was static in terms of mounting and therefore wasn’t accepting of blocks when feed at an odd angle. To correct our feeding issue, we widened the gap between the tracks and added rubber bands in hopes of maintaining traction and adding to on demand orientation ability.

Initial tests of our second prototype went fairly well, however the design suffered from some severe drawbacks; the first was its weight and size which would limit robot mobility and take up much needed space for other components, the second issue was that keeping the treads tensioned perfectly for long periods of time was nearly impossible and they would often sag leading to loss of grip, and finally the system was still fairly unpredictable especially during intake (blocks were flung occasionally). These finding lead me to believe we may scrap the idea in consideration of time.

Aside from our track intake we’ve also been working on a gripper and slide system that shows promise.

Meeting Log

23 Sep 2017

Meeting Log September 23, 2017 By Charlotte, Kenna, Tycho, Austin, and Evan

Meeting Log September 23, 2017

We started the day by volunteering at LV Stockard MS, another DISD event. During our practice, we planned to work on robot design, blog updates, and code testing.

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • About page updates
  • Stockard blog post

Software

  • Controller mapping

Build / Modelling

  • Cryptobox grabber - competition judging
  • Install chosen grabber
  • Reposition robot hubs

Service / Outreach

  • Stockard MS DISD

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
CharlotteStockard post2:002
CharlotteCompetition judging4:002
KennaAbout page2:002
KennaCompetition judging4:002
TychoController mapping2:004
AustinCompetition judging2:002
AustinInstall grabber4:002
EvanCompetition judging2:002
EvanMove hubs4:002

Narrowing Down the Designs

23 Sep 2017

Narrowing Down the Designs By Evan and Austin

Task: Redesign our grabber systems

In an attempt to get a working lift system before the coaches meeting we will be presenting at, a linear slide has been attached to the robot, along with a pair of grabbing arms. They work surprisingly well and aren’t as complicated as my idea. Plus the importance of speed has really taken hold on me this year. We need to be as fast as possible but my contraption is slow compared to the grabber arm. I think we'll be scrapping the idea for this grabber arm bandwagon everyone seems to be hopping on. While the grabber arm allows for quick pick ups and easy placement, our idea was only bulky and unnecessary because of our use of mecanum wheels which eliminate any need for a system to go side to side. Since the grabber was rudimentary, we’ll be making improvements and new iterations. We toyed with some materials earlier on in the season, and we’ll probably be implementing that into it.

Slide Designs

24 Sep 2017

Slide Designs By Austin

Task: Figure out slide mechanism

After determining that the treaded channel was much too buggy to perfect with the time we had, we shifted attention to other scoring systems like grabbers, however before finding the right grabber we decided we needed to get the track for it completed first. We’ve had experience in the past with all sorts of rails from Tetrix kits that convert their standard channels into lifts, to the newer REV sliding rail kits which we also toyed around with in initial prototyping shenanigans.

One of our key concerns was also wear and tear, in that we have had systems slowly breakdown in the past, such as our mountain climber and catapult, since they had plastic components that broke over time, we knew that long periods of use over multiple competitions would deteriorate the plastic components of either rail sets, and other rails that used full metal parts would simply be bulky and rough to fit in snugly with our robot. After a bit more research we settled on standard steel drawer slides from home depot, mainly because they were streamline and all around sturdy. The slides also provided us with easy mounting points for our future claw and attachments.

We understood that whatever option we picked for slides would have to be easily repairable or replaceable during competition, should something go wrong. Since the drawer slide were easy to come by and needed little modification we could easily make duplicates to act as stand by and demonstration parts during competition.

These positives came to form more than enough of a reason to continue prototyping our grabber that would eventually be attached once completed to the lift, which was now mounted to the robot and used a system of spools and pullies to extended above the minimum height for scoring in the top row.

Building Competition 2017

25 Sep 2017

Building Competition 2017 By Evan and Austin

Task: Find the best robot design

The games have begun and it’s time to build. So that’s what Austin and I did. A war had been declared. Legions of the indentured collided on the battlefield. Millions were slaughtered during this new age armageddon. Austin had his army. I had mine. Two different ideas to do the same task: lift glyphs into their correct positions. A simple job but one that caused a rift in Iron Reign, an incurable rift between the forces of light and darkness.

But then I decided to stop because his design had more speed than mine and speed is more necessary this year. My idea had been a lift that could move the glyphs back and forth but I realized that it would be a little too slow for the competition. Or, another solution would have had a side to side conveyor belt that moved glyphs back and forth to arrange them in the correct order, and then push them into the slots. This movement would have been separate from the four mecanum wheels that we are using in the chasis. His idea was simpler than mine, a conveyor belt that ran through the middle of the robot to bring the glyphs to the keybox, where they could be slotted in with the side to side movement provided by the mecanum wheels. So, like an outnumbered Supreme Court judge, I decided to join the winner so I could have a say in the early design. Once he got a prototype ofhis contraption working, it was able to pick up blocks effectively but it still needs improvement. It has issues with blocks at an angle, and it has trouble slotting the blocks into the keybox, but it's a nice step toward a working block system. We are currently planning to use the mecanum wheel base we used last year but this could change anytime. We left practice with a direction and that's better than nothing.

Meeting Log

30 Sep 2017

Meeting Log September 30, 2017 By Ethan, Evan, Tycho, Austin, Kenna, Karina, Austin, and Abhi

Meeting Log September 30, 2017

Today was based around prepping for our meeting with DISD adminmistrators, getting our robots in working order, and organizing parts for the season.

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • Fix stats page
  • Strategy

Software

  • Program lift
  • Program grabber

Build / Modelling

  • Fix lift string system
  • Add lift supports

Service / Outreach

  • DISD prep

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
EthanFix stats page2:002
EthanDISD Prep4:002
EvanLift supports2:004
AustinLift string2:004
TychoProgram lift2:002
TychoProgram grabber4:002
KennaLift supports2:004
KarinaStrategy2:004
AbhiStrategy2:004

Testing Materials

30 Sep 2017

Testing Materials By Austin, Evan, and and Tycho

Task: Test Materials for V2 Gripper

Though our current gripper is working sufficiently, there are some issues we would like to improve in our second version. The mounting system is unstable and easily comes out of alignment because the rev rail keeps bending. Another issue we've encountered is the cervo pulling the grippers so that they begin to cave inwards, releasing any blocks being held at the bottom. By far the biggest problem is our intake. Our drivers have to align the robot with the block so precisely to be able to stack it that it eats a majority of our game time. However, there are some advantages, such as light weight and adjustability, to this gripper that we would like to carry over into the second version.

    We tested out a few different materials:
  • Silicone Baking Mats - The mats were a very neutral option because they didn't have any huge advantages or disadvantages (other than not adhering well). These could have been used, however, there were other better options.
  • Shelf Liner - It was far too slippery. Also, when thinking about actually making the grippers, there was no good way to put it on the grippers. Using this materials would have been too much work with little gain.
  • Baking Pan Lining (picked) - It was made out of durable rubber but was still very malleable which is a big advantage. We need the grippers to compress and 'grip' the block without causing any damage.
  • Rubber Bands on Wheels - This material was closest to our original version and, unexpectedly, carried over one of the problems. It still requires very specific orientations to pick up blocks, which would defeat the purpose of this entire task.

The purpose of this is as a part of our future grabber design, which will need to be relatively light, as our string is currently breaking under stress due to weight. The material must also have good direct shear and direct strength, as the grabber will have rotating arms that move in and out to grasp blocks. As well, we're replacing the tetrix parts with REV, as they're smaller and a little lighter, with the additional bonus of more mounting points.

Designing the Grabber Further

30 Sep 2017

Designing the Grabber Further By Evan

Task: Design the grabber design and make future plans

The grabber has been evolving. A column made of a turkey baster and a wooden dowel attached to servo has come into fruition. The first drawings and designs are coming along, and some 3D printed parts have been thought up to allow the square dowel to become a hexagon. An adapter of sorts. The grabber and lift have been outfitted with a back board to stop blocks from getting caught underneath the backing bar. The back board is just some 1/16th inch wood cut to fit. The new turkey baster columns are in the first stages, so more info on them will come as more is discovered and progress has been made. The sketches will explain these designs better.

Designing the Grabber

01 Oct 2017

Designing the Grabber By Austin

Task: Work on the grabbers more

With our single degree of freedom lift fastened to the robot we focused on the appendage that would grip to within an inch of its life any glyph we fed it. We initially toyed with simple tetrix channels to form a make shift rail that would hold axels for pivoting points, however we found tetrix to be a bit too cumbersome and decided to use rev rail instead. Using two tetrix U-brackets we built a makeshift grabber that used rubber bands and a servo to secure blocks without letting them slip through its grasp. To add extra grip to the long L-beams that formed the pincers of the claw, we added even more rubber bands, and moved on to testing.

Initial tests were very positive, the high strength servo coupled with a few rubber bands maintained enough of a grip on one or two blocks with ease, and because the entire system was mounted to a rev rail we could easily slide and size the pincers to the right distance. Feeling confident in our work we attached the grabber to the lift and attempted drive practice, which ended relatively quickly due to a surprising number of jams between the lift and glyphs.

The key issue we now faced was that as the lift returned to its home state blocks were getting stuck beneath the retracting claw causing jams. To fix this relatively simple problem we added a back plate to the claw that kept blocks from slipping to far into the robot, this was easily fashioned out of a bit of thin wood board we had lying around from the decks of other robots. The overall performance of our glyph wrangling device was astounding, so long as whoever was operating the robot was a well-trained driver.

Oh No! Dying Glyphs

02 Oct 2017

Oh No! Dying Glyphs By Abhi

Problem: Glyph Damge due to Robot Design

We were tearing up our glyphs like this because our wheels had no guard for their screws:

More specifically, we had multiple issues with damaging the glyphs. First, the exposed screws on the mechanum wheels (Fig 1) tended to cut into the glyphs as seen in the above picture. As well, you can see relatively sharp edges on the wheels where the block could also be cut, and that the blocks could be pinched by the wheels on the wheel. As well, the corners on the REV and TETRIX pieces cut into thr glyphs when they were rammed into the walls of the field (Fig 2).

Fig 1

Fig 2

V2 Hexifier and Parts

07 Oct 2017

V2 Hexifier and Parts By Tycho and Abhi

Task: Creating the Parts for V2

Today we continued our work on the second grippers. We talked about this in another post, but the gist is that we iterated through various materials to find something that would securely grip the block, without damaging it. At the beginning, that got rid of most of our options, but we tested various sprays, materials, and pressures to find the right material. The baking pan liner was the best, as it had some give without damaging the block, but had enough friction that slippage was a minor issue. So, we needed the baking pan liner to adhere to the large square dowel we chose to be the base for our grippers. In order to do this, we had to design and print a hexifier, as seen below, which makes the dowel's square shape into a hexagon. We also designed and printed square pieces to go on the top and bottom of the gripper to keep it in place.

Reflections

The new grippers are probably going to be much heavier than our previous ones. Not only because of the difference in material, but in sheer size. We may not be able to retain the lightness in V2 that we had hoped to.
We used PTC Creo for all of these parts. Abhi has some video tutorials on using Creo that can be found here and here. Soon we will start assembling our V2 grippers.

Meeting Log

07 Oct 2017

Meeting Log October 07, 2017 By Ethan, Evan, Austin, Tycho, and Charlotte

Meeting Log October 07, 2017

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • DISD post
  • Fix old post formatting
  • Stockard MS

Software

  • Begin autonomous

Build / Modelling

  • Fix robot - was dropped
  • REV hub relign 2
  • Realign square base

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
EthanDISD post2:002
EthanFix formatting4:002
EvanFix robot2:002
EvanRealign4:002
AustinFix robot2:002
AustinREV realign4:002
TychoAutonomous2:004
CharlotteStockard post2:002
CharlotteJournal review4:002

Chassis Upgrades

08 Oct 2017

Chassis Upgrades By Austin

Task: Upgrade our chassis

Because our robot at this point has merely become a collage of prototypes that we compete with, there are often subtle improvements that need to be made. Starting with the wheelbase, Abhi has written a blog about the shields we printed to protect the glyphs from the gnashing bolts of our mechanum wheels, and we also tensioned all our set screws and motor mounts to make sure that our base was preforming in terms of the speed and strength we needed. As we add components to the robot things often are shifted around as well, after tuning up the drive train we focused on realigning our REV expansion hubs and their wiring so that nothing would be in the way of critical lift or drivetrain components.

Any jettisoning bolts that have been catching components while moving, and any sharp edges have all been ground down to ensure that any motion is smooth and that there are minimal catching hazards during operation. Because of the earlier mentioned prototype state our robot was in, many of the key components laid outside of the 18 inch cubic limits and so these components we brought in and neatly fastened to the internals of the robot bearing in mind ease of access for future updates to components. This entire push for cleanliness was the result of upcoming scrimmages and practice matches that we would be participating in.

Meeting Log

14 Oct 2017

Meeting Log October 14, 2017 By Ethan, Kenna, Abhi, Austin, Janavi, Evan, Charlotte, and Tycho

Meeting Log October 14, 2017

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • Learn to blog
  • UTA post
  • Teach how to blog
  • Strategy post

Software

  • IMU testing
  • Autonomous

Build / Modelling

  • Install wheel mounts
  • Test string for lift

Service / Outreach

  • UTA volunteering

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
EthanTeach how to blog2:002
EthanFix formatting of posts4:002
KennaLearn to post2:002
KennaUTA post4:002
AbhiStrategy post2:004
AustinWheel mounts2:004
EvanString test2:004
CharlotteLearn to blog2:004
TychoIMU2:002
TychoAutonomous4:002

Grabber Code

16 Oct 2017

Grabber Code By Tycho

Task: Create a seperate class for the grabbers on the robot

Today, we created a new PickAndPlace class to isolate the code that controls the current gripper and lift system. I also added new methods to send the lift to max, min and stacking heights with manual override. It now prevents over extension or over unwinding by setting max and minumum heights. It also eliminates the problem of having to push the lift all the way down after lifting.

The code below describes the functionality of the robot. The class names should be self-explanatory as to what they do.

+package org.firstinspires.ftc.teamcode;

import com.qualcomm.robotcore.hardware.DcMotor;
import com.qualcomm.robotcore.hardware.Servo;

/**
 * Created by tycho on 10/15/2017.
 */

public class PickAndPlace {

    DcMotor motorLift = null;
    Servo servoGrip = null;

    private int liftMax = 4000;
    private int liftStack = 2500; //stacking height
    private int liftMin = 50;
    private int liftPlanck = 450; //smallest distance to increment lift by when using runToPosition

    boolean gripOpen = false;
    int gripOpenPos = 900;
    int gripClosedPos = 2110;

    public PickAndPlace(DcMotor motorLift, Servo servoGrip){
        this.motorLift = motorLift;
        this.servoGrip = servoGrip;
    }

    public void ToggleGrip (){
        if (gripOpen) {
            gripOpen = false;
            servoGrip.setPosition(ServoNormalize(gripClosedPos));
        }
        else {
            gripOpen = true;
            servoGrip.setPosition(ServoNormalize(gripOpenPos));
        }
    }


    public void stopLift(){
        motorLift.setPower(0);
    }

    public void raiseLift(){
        if(motorLift.getCurrentPosition() < liftMax) motorLift.setPower(.5);
        else motorLift.setPower(0);
    }
    public void lowerLift(){
        if(motorLift.getCurrentPosition() > liftMin) motorLift.setPower(-.5);
        else motorLift.setPower(0);
    }

    public void raiseLift2(){
        if (motorLift.getCurrentPosition() < liftMax && motorLift.getTargetPosition() < liftMax) {
            motorLift.setTargetPosition((int) Math.min(motorLift.getCurrentPosition()+ liftPlanck, liftMax));
            motorLift.setMode(DcMotor.RunMode.RUN_TO_POSITION);
            motorLift.setPower(1);
        }
    }
    public void lowerLift2() {
        if (motorLift.getCurrentPosition() > liftMin && motorLift.getTargetPosition() > liftMin) {
            motorLift.setTargetPosition((int) Math.max(motorLift.getCurrentPosition() - liftPlanck, liftMin));
            motorLift.setMode(DcMotor.RunMode.RUN_TO_POSITION);
            motorLift.setPower(.8);
        }
    }
    public void goLiftMax() {

            motorLift.setTargetPosition(liftMax);
            motorLift.setMode(DcMotor.RunMode.RUN_TO_POSITION);
            motorLift.setPower(1);

    }

    public void goLiftMin() {

        motorLift.setTargetPosition(liftMin);
        motorLift.setMode(DcMotor.RunMode.RUN_TO_POSITION);
        motorLift.setPower(1);

    }

    public void goLiftStack() {

        motorLift.setTargetPosition(liftStack);
        motorLift.setMode(DcMotor.RunMode.RUN_TO_POSITION);
        motorLift.setPower(1);

    }

    public int getMotorLiftPosition(){
        return motorLift.getCurrentPosition();
    }

    public static double ServoNormalize(int pulse){
        double normalized = (double)pulse;
        return (normalized - 750.0) / 1500.0; //convert mr servo controller pulse width to double on _0 - 1 scale
    }

}

Stopping Glyph Damage

21 Oct 2017

Stopping Glyph Damage By Abhi

Task: Stop Destroying Glyphs

Since damaging field elements is a huge no-no, we needed to fix this, we decided to create a 3-D part to protect the glyphs from our wheels

Model:

During the first attempt, I had just self taught Creo hours prior to construction. As a result, I was not very precise nor efficient in my design. Nevertheless, we recognized that there were some basic shapes we could use for construction such as a semicircle for the bottom half and two rectangles on the top part. We decided to use measurements that were estimated from a singular mechanum wheel. This culminated in the design below.

Result:

The part itself is made out of nylon as usual. Our main issue was measuring the wheel accurately to create a functional part. The two parts hampering the design was that the U-shape must be off the ground slightly, and that the shape's semi-circle would not have the full radius of the wheel. So, we iterated through various designs of the U-shape, changing the height off the ground by ~1mm each time. We also varied the radius, until we realized that we could measure the width of where the semi-circle segued into the rectangle and get the estimated diameter of the semi-circle.

Meeting Log

21 Oct 2017

Meeting Log October 21, 2017 By Ethan, Tycho, Evan, Abhi, Charlotte, and Karina

Meeting Log October 21, 2017

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • Travis blog post
  • Work on presentation

Software

  • Work on openCV integration
  • Test out RoboRealm

Build / Modelling

  • Robot drive practice
  • Learn PTC
  • Jewel thief mockup

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
EthanWork on presentation2:004
TychoTravis blog post2:001
TychoOpenCV3:002
TychoRobotRealm4:002
CharlottePTC2:004
AbhiPTC2:004
KarinaDrive practice2:004
EvanJewel thief mockup2:004

Machine Vision Goals – Part 1

22 Oct 2017

Machine Vision Goals – Part 1 By Tycho

We’ve been using machine vision for a couple of years now and have a plan to use it in Relic Rescue for a number of things. I mostly haven’t gotten to it because college application deadlines have a higher priority for me this year. But since we already have experience with color blob tracking in OpenCV and Vuforia tracking, I hope this won’t be too difficult. We have 5 different things we want to try:

VuMark decode – this is obvious since it gives us a chance to regularly get the glyph crypto bonus. From looking at the code, it seems to be a single line different from the Vuforia tracking code we’ve already got. It’s probably a good idea to signal the completed decode by flashing our lights or something like that. That will make it more obvious to judges and competitors.

Jewel Identification – most teams seem to be using the REV color sensor on the arm their jewel displacement arm. We’ll probably start out doing that too, but I’d also like to use machine vision to identify the correct jewel. Just because we can. Just looking at the arrangement, we should be able to get both the jewels and the Vuforia target in the same frame at the beginning of autonomous.

Alignment – it is not legal to extend a part of the robot outside of the 18” dimensions during match setup. So we can’t put the jewel arm out to make sure it is between the jewels. But there is nothing preventing us from using the camera to assist with alignment. We can even draw on the screen where the jewels should appear, like inside the orange box below. This will also help with Jewel ID – we won’t have to hunt for the relevant pixels – we can just compare the average hue of the two regions around the wiffle balls.

Autonomous Deposition – this is the most ambitious use for machine vision. The dividers on the crypto boxes should make pretty clear color blob regions. If we can find the center points between these regions, we should be able to code and automatically centering glyph depositing behavior.

Autonomous glyph collection – ok this is actually harder. Teams seem to spend most of their time retrieving glyphs. Most of that time seems to be spent getting the robot and the glyphs square with each other. Our drivers have a lot of trouble with this even though we have a very maneuverable mecanum drive. What if we could create a behavior that would automatically align the robot to a target glyph on approach? With our PID routines we should be able to do this pretty efficiently. The trouble is we need to figure out the glyph orientation by analyzing frames on approach. And it probably means shape analysis – something we’ve never done before. If we get to this, it won’t be until pretty late in the season. Maybe we’ll come up with a better mechanical approach to aligning glyphs with our bot and this won’t be needed.

Tools for Experimenting

Machine vision folks tend to think about image analysis as a pipeline that strings together different image processing algorithms in order to understand something about the source image or video feed. These algorithms are often things like convolution filters that isolate different parts of the image. You have to decide which stages to put into a pipeline depending on what that pipeline is meant to detect or decide. To make it easier to experiment, it’s good to use tools that let you create these pipelines and play around with them before you try to hard-code it into your robot.

I've been using a tool called ImagePlay. http://imageplay.io/ It's open source and based on OpenCV. I used it to create a pipeline that has some potential to help navigation in this year's challenge. Since ImagePlay is open source, once you have a pipeline, you can figure out the calls to it makes to opencv to construct the stages. It's based on the C++ implementation of OpenCV so we’ll have to translate that to java for Android. It has a very nice pipeline editor that supports branching. The downside is that this tool is buggy and doesn't have anywhere near the number of filters and algorithms that RoboRealm supports.

RoboRealm is what we wanted to use. We’ve been pretty closely connected with the Dallas Personal Robotics Group (DPRG) for years and Carl Ott is a member who has taught a couple of sessions on using RoboRealm to solve the club’s expert line following course. Based on his recommendation we contacted the RoboRealm folks and they gave use a 5 user commercial license. I think that’s valued at $2,500. They seemed happy to support FTC teams.

RoboRealm is much easier to experiment with and they have great documentation so now have an improved pipeline. It's going to take more work to figure out how to implement that pipeline in OpenCV because it’s not always clear what a particular stage in RoboRealm does at a low level. But this improved pipeline isn’t all that different from the ImagePlay version.

Candidate Pipeline

So here is a picture of a red cryptobox sitting against a wall with a bunch of junk in the background. This image ended up upside down, but that doesn’t matter for just experimenting. I wanted a challenging image, because I want to know early if we need to have a clean background for the cryptoboxes. If so, we might need to ask the FTA if we can put an opaque background behind the cryptoboxes:

Stage 1 – Color Filter – this selects only the reddest pixels

Stage 2 – GreyScale – Don’t need the color information anymore, this reduces the data size

Stage 3 – Flood Fill – This simplifies a region by flooding it with the average color of nearby pixels. This is the same thing when you use the posterize effect in photoshop. This also tends to remove some of the background noise.

Stage 4 – Auto Threshold – Turns the image into a B/W image with no grey values based on a thresholding algorithm that only the RoboRealm folks know.

Stage 5 – Blob Size – A blob is a set of connected pixels with a similar value. Here we are limiting the output to the 4 largest blobs, because normally there are 4 dividers visible. In this case there is an error. The small blob on the far right is classified as a divider even though it is just some other red thing in the background, because the leftmost column was mostly cut out of the frame and wasn’t lit very well. It ended up being erased by this pipeline.

Stages 6 & 7 – Moment Statistics – Moments are calculations that can help to classify parts of images. We’ve used Hu Moments since our first work with machine vision on our robot named Argos. They can calculate the center of a blob (center of gravity), its eccentricity, and its area. Here the center of gravity is the little red square at the center of each blob. Now we can calculate the midpoint between each blob to find the center of a column and use that as a navigation target if we can do all this in real-time. We may have to reduce image resolution to speed things up.

Wheel Protector Correction

24 Oct 2017

Wheel Protector Correction By Abhi

Problem: Wheel Guard Innacuracy

Refering back to the design of the wheel guard, we decided it was time to actually mount it on the robot. At first, it seemed like the part was perfect for the robot since it fit just snug with the screws on the wheel. However, upon mounting, we discovered the following:

Turns out that the part is acutely shorter than the real height of wheel relative to the horizontal axis superimposed upon the vertical plane. As a result, a second and better trial for modeling needed to be conducted. For this run, I chose to measure the dimensions directly from the robot rather than a spare wheel.

Correction:

As seen above, the corrected version of the part looks and works much better. Though there is a slight margin of error in the success of the part due to the dynamic nature of the density of the field tiles , the part should be reliable for the most part

Working on Autonomous

29 Oct 2017

Working on Autonomous By Tycho

Task: Create a temporary autonomous for the bot

We attempted to create an autonomous for our first scrimmage. It aimed to make the robot to drive forward and drive into the safe zone. However, we forgot to align the robot and it failed at the scrimmage.

Instead of talking about the code like usual, the code's main functions are well documented so that any person can understand its functions without a prior knowledge of coding.

 public void autonomous2 (){

        switch(autoState){
            case 0: //moves the robot forward .5 meters
                if (robot.driveStrafe(false, .60, .35)) {

                    robot.resetMotors(true);
                    autoState++;
                }
                    break;
            case 1: //scan jewels and decide which one to hit
                if (robot.driveForward(false, .25, .35)) {
                    autoTimer = futureTime(1f);
                    robot.resetMotors(true);
                    autoState++;
                }

                break;
            case 2: //short move to knock off jewel

                robot.glyphSystem.ToggleGrip();
                autoTimer = futureTime(1f);

                robot.resetMotors(true);
                autoState++;
                break;
            case 3: //back off of the balance stone
                if (robot.driveForward(true, .10, .35)) {
                    autoTimer = futureTime(3f);
                    robot.resetMotors(true);
                    autoState++;
                }
                break;
            case 4: //re-orient the robot
                autoState++;
                break;
            case 5: //drive to proper crypto box column based on vuforia target
                autoState++;
                break;
            case 6: // turn towards crypto box
                autoState++;
                break;
            case 7: //drive to crypto box
                autoState++;
                break;
            case 8: //deposit glyph
                autoState++;
                break;
            case 9: //back away from crypto box
                autoState++;
                break;
        }
    }

Meeting Log

03 Nov 2017

Meeting Log November 03, 2017 By Ethan, Evan, Tycho. Austin, Charlotte, Karina, Janavi, Kenna, and Abhi

Meeting Log November 03, 2017

Today is one of the last full meetings until our tournament, so we need to get everything ready for judging. This post also includes the objectives for the next week.

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • 3 posts from each member
  • DISD Scrimmage post
  • Field build post
  • Strategy\Business plan
  • Print notebook
  • Finish presentation
  • Presention practice

Software

  • Autonomous
  • Drive practice

Build / Modelling

  • Respool string
  • Robot tuneup

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
Ethan3 posts2:002
EthanFinish presentation4:002
EvanTuneup2:004
TychoAutonomous2:002
TychoDrive practice4:002
EvanDrive practice2:004
AustinDrive practice2:004
AustinTuneup2:004
JanaviWork on presentation2:004
KennaPrint notebook2:004

Gripper Construction

04 Nov 2017

Gripper Construction By Tycho

Task: Making the Gripper

Standard parts were used to create the backbone. Then, we bent some tetrix parts to connect the backbone to the servos. We used continuous rotation cervos to solve the issue mentioned earlier. This was a fairly easy build but we still have a ways to go before V2 is completed.

This gripper will be far superior to our prior designs in that it will be lighter, as we are substituting wood and rubber for metal parts, which will solve our string breakage issue. As well, we will be able to grasp objects more securely, due to the rubber's larger coefficient of friction and that the gripper arms themselves have more surface area than our original design. Finally, our gripper will be more dependable due to slightly better wire organization than before.

This helps our strategy in that it will be far easier to pick up individual blocks, and helps us achieve our goal of grabbing multiple blocks at once. The wider gripper arms will make it so that we can stack blocks on top of each other before bringing them to the CryptoBox, which makes our robot 1.5x as fast in operating time.

How to make a part in PTC Creo Parametric

04 Nov 2017

How to make a part in PTC Creo Parametric By Abhi

Problem: How to Make a Part in Creo Parametric

PTC Creo Parametric is one of the best software to 3-D model tools that we can print out. I will detail how to create a part in Creo for both our team and any other teams who need help creating a piece. For this demo, Creo Parametric Academic Edition was used along with a pre designed model of the part.

To begin the model, create a new part. Make sure you are making the part in the right dimensions since the 3-D printer needs special requirements. For the 3-D printer that Iron Reign has, we chose to make all of our dimensions in millimeters. You can change this configuration by going into File>Prepare>Model Properties >Units.

Once your program is set to go, go under Model and press Sketch. This will create the base diagram which we will raise to make our part. Once the sketch menu appears, you will have to choose a plane on which we will draw. For this sketch, we will draw from the top plane since we want to raise it from the bottom. To do so, press on the top plane and press sketch. If the view is still in an isometric format, you can change the view by pressing the button indicated in the video.

Once the sketch is set up, we need to draw two concentric circles with the right dimensions. To find the dimensions, I refer often to the premade part. Once I have made the system, I set up centerlines vertically to be able to draw better. Next, I cut off the top two parts of the circle since we will put rectangles on them.

Next, select a line chain to draw two sets of rectangles with the bottom edge fused with the half circle. At the end, you should have a U shaped part. Now, we can draw another centerline along where we want the screw holes. After doing so, we can use the circle tool to make two holes in the rectangles.

We now need to extrude this part to the right size. After pressing the extrude took, we can change the size on the arrow. After doing so, we need to place two high radius thin circles on either sides. These are placed as weight pads so that when the part prints, it doesn't curve on the printing bed.

At this point, we can do some optional things to make our part..well lets say prettier. We can use the round tool so the edges look nicer and the screws are easier to place inside. After doing so, we can use the render tool to color all the edges. At the end, you will have a complete part to print

End result:

We hope you learned from this tutorial and are able to apply this to any future parts you make!

Designing the Jewel Thief

07 Nov 2017

Designing the Jewel Thief By Evan

Task: Design a part to remove the jewel

The jewel thief, the mechanism for knocking off one of the jewels, was going to be one of the tougher parts of our bot to integrate, based on the chassis we began with. But, with a little engineering and some long thought, we came up with a few ways to implement it. First, we began with a side mount, and it was alright for the angle, but we switched our autonomous plan to begin pointing forward, presenting me with a new problem. The part we had used before would simply not work. We tried a modified version of the pusher we'd made, but it didn't fully suffice. It was impractical and would require more than a little wire extention for the servo. We finally decided that a frontwards approach should be taken from the side. Instead of a single middle forward facing prong, a two bar prong sticking from either side, meeting in the middle, and providing a platform for a potential relic placer. While not completely finished, we intend to have it done by the first qualifier, fully functional. It should allow us to knock the jewel off during autonomous effectively and efficiently, although that’s all to be seen.

Relic Recovery Strategy Part 1

07 Nov 2017

Relic Recovery Strategy Part 1 By Austin

Task: Determine building strategy for Relic Recovery

Any well-versed team understands that, depending on the competition for the year, a robot will either be modified to compete or be built from the ground up. In any case, however, a robot often starts at its chassis, and teams have multiple companies that provide solutions to the common robot chassis’ needs and specifications. To name a few: AndyMark® has its standard kits that include all the parts and electronics needed to build a very basic frame that includes a few mounting points for the rest of the robot’s components, Tetrix has its standard kit that provides all the parts for an entire robot if used properly (however, we’ve discovered drawbacks to be mentioned later), and even REV has thrown its hat in the ring with new motor and battery types to add to the highly adjustable REV rail chassis kits. For rookie teams there is no lack of options for starting your robot chassis. However, as a team gains experience they find the flaws that come with each kit and move towards creating robots that harness equal amounts of parts from all companies. Here’s what we’ve learned about each company:

AndyMark: overall, AndyMark is a great supplier for all the standard parts you’ll need, however we wouldn’t recommend buying their overall chassis kits because they can be on the pricier side and come with few replacement parts and too many unnecessary parts. Most of our gears, wheels, pulleys, motors, and batteries come from AndyMark in batches of parts that we keep on hand to prototype with or replace failing parts. This keeps us from paying for parts we don’t need and having what we do need on hand. The overall quality of their parts is high, but they do decay quicker with use, especially when running the robot at multiple competitions without proper repair time.

Tetrix: Tetrix is highly standardized in all dimensions, making the connections between parts easy to grasp for basic builders who haven’t developed a mental 3D idea of what they’re working towards. Tetrix kits don’t include electronics. However, their brackets, channels, and joints are very useful for making connections between various components of your robot, so keep plenty on hand for quick fixes and prototyping. Our biggest concern with tetrix are their designated nuts; we find that they often are shaken completely off respective bolts, which can lead to mechanical failure and penalties. To combat the issue of robots quite literally shaking themselves apart, we recommend using nyloc nuts. They have a small amount of nylon in them that grips the threads of bolts making them almost immovable without a pair of pliers.

Rev: Iron reign loves our Rev rails. The ability to have a mounting point at any incident on a bar is amazing, and often allows us to pull off the crazy designs we create. Rev has created a system that is beyond flexible, meaning that the limits of your designs have expanded. For those who want a chassis that is easily maneuverable, Rev rail is extremely light as well. While Rev is expanding into providing parts like AndyMark, we find that they are still in development but we eagerly await upgrades.

Overall, Iron Reign wanted a robot chassis that was stable, maneuverable, and modular to our needs, so this is our compromise that we’ve applied to all aspects of our robot;

- AndyMark FRC Standard Omni-Wheels: we chose these because of their dependability and maneuverability. They provide standard motion as well as strafing for fine-tuning movements in front of cryptoboxes. While we had to print custom mounts, and modify tetrix channels for the necessary axels, the wheels pared nicely with the rest of our components once mounted.
- Rev Rail: our entire upper chassis is made from interconnected Rev Rails that serve as a smooth, easily adjustable, and light support for the massive omni wheels that rest below it. The rails provide plenty of room for future expansion, and can take quite a beating (we learned this the hard way by dropping our robot off a table).
- Tetrix Channels and Brackets: these are the middle men, the parts we change to fit those awkward angles and fittings, such as the axels for our wheels. Overall never a bad idea to have extras on hand.
- Hardware: we always use standard hardware sizes, but we make sure that the corresponding components are snug fitting and streamlined to minimize unnecessary snags and sharp edges.

While these are the typical components that make an Iron Reign base, we have seen other teams get extremely creative with raw material, although this usually requires heavy machinery such as laser cutters and lathes. Overall, we are a team that uses what companies provide and modify it to fit our needs (which has worked well for the past years of competition.) For smaller start up teams we recommend a similar approach of learning each system and its advantages over the course of multiple years, and finding what you feel works best for your needs.

Adding Code Fixes to the Robot

10 Nov 2017

Adding Code Fixes to the Robot By Tycho

Task: Add code updates

These commits add said functionality:

  • Pre-game logic - joystick control
  • Fix PID settings
  • Autonomous resets motor
  • Jewel Arm functionality
  • Autonomous changes
  • Tests servos

These commits allow better QoL for our drivers, allow our robot to function more smoothly both in autonomous and during TeleOp, allows us to score the jewels, and lets us test servos.

Jewel Arm


package org.firstinspires.ftc.teamcode;

import com.qualcomm.robotcore.hardware.NormalizedColorSensor;
import com.qualcomm.robotcore.hardware.Servo;

/**
 * Created by 2938061 on 11/10/2017.
 */

public class JewelArm {

    private Servo servoJewel;
    private NormalizedColorSensor colorJewel;
    private int jewelUpPos;
    private int jewelDownPos;

    public JewelArm(Servo servoJewel, NormalizedColorSensor colorJewel, int jewelUpPos, int jewelDownPos){
        this.servoJewel = servoJewel;
        this.colorJewel = colorJewel;
        this.jewelUpPos = jewelUpPos;
        this.jewelDownPos = jewelDownPos;
    }

    public void liftArm(){
        servoJewel.setPosition(ServoNormalize(jewelUpPos));
    }
    public void lowerArm(){
        servoJewel.setPosition(ServoNormalize(jewelDownPos));
    }

    public static double ServoNormalize(int pulse){
        double normalized = (double)pulse;
        return (normalized - 750.0) / 1500.0; //convert mr servo controller pulse width to double on _0 - 1 scale
    }

}

Autonomous

		public void autonomous(){
        switch(autoState){
            case 0: //scan vuforia target and deploy jewel arm
                robot.jewel.lowerArm();
                autoTimer = futureTime(1.5f);
                if(autoTimer < System.nanoTime()) {
                    relicCase = getRelicCodex();
                    jewelMatches = robot.doesJewelMatch(isBlue);
                    autoState++;
                }
                break;
            case 1: //small turn to knock off jewel
                if ((isBlue && jewelMatches)||(!isBlue && !jewelMatches)){
                    if(robot.RotateIMU(10, .5)){
                        robot.resetMotors(true);
                    }
                }
                else{
                    if(robot.RotateIMU(350, .5)){
                        robot.resetMotors(true);
                    }
                }
                break;
            case 2: //lift jewel arm
                robot.jewel.liftArm();
                autoTimer = futureTime(1.5f);
                if(autoTimer < System.nanoTime()) {
                    jewelMatches = robot.doesJewelMatch(isBlue);
                    autoState++;
                }
            case 3: //turn parallel to the wall
                if(isBlue){
                    if(robot.RotateIMU(270, 2.0)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                else{
                    if(robot.RotateIMU(90, 2.0)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                autoState++;
                break;
            case 4: //drive off the balance stone
                if(robot.driveForward(true, .3, .5)) {
                    robot.resetMotors(true);
                    autoState++;
                }
                break;
            case 5: //re-orient robot
                if(isBlue){
                    if(robot.RotateIMU(270, 1.0)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                else{
                    if(robot.RotateIMU(90, 1.0)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                break;
            case 6: //drive to proper crypto box column based on vuforia target
                switch (relicCase) {
                    case 0:
                        if(robot.driveForward(true, .5, .35)) {
                            robot.resetMotors(true);
                            autoState++;
                        }
                        break;
                    case 1:
                        if(robot.driveForward(true, .75, .35)) {
                            robot.resetMotors(true);
                            autoState++;
                        }
                        autoState++;
                        break;
                    case 2:
                        if(robot.driveForward(true, 1.0, .35)) {
                            robot.resetMotors(true);
                            autoState++;
                        }
                        autoState++;
                        break;
                }
                break;
            case 7: //turn to crypto box
                if(isBlue){
                    if(robot.RotateIMU(315, 1.5)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                else{
                    if(robot.RotateIMU(45, 1.5)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                break;
            case 8: //deposit glyph
                if(robot.driveForward(true, 1.0, .50)) {
                    robot.resetMotors(true);
                    robot.glyphSystem.ReleaseGrip();
                    autoState++;
                }
                break;
            case 9: //back away from crypto box
                if(robot.driveForward(false, .5, .50)){
                    robot.resetMotors(true);
                    autoState++;
                }
                break;
            default:
                robot.resetMotors(true);
                autoState = 0;
                active = false;
                state = 0;
                break;
        }
    }
    public void autonomous2 (){

        switch(autoState){
            case 0: //scan vuforia target and deploy jewel arm
                robot.jewel.lowerArm();
                autoTimer = futureTime(1.5f);
                if(autoTimer < System.nanoTime()) {
                    relicCase = getRelicCodex();
                    jewelMatches = robot.doesJewelMatch(isBlue);
                    autoState++;
                }
                break;
            case 1: //small turn to knock off jewel
                if ((isBlue && jewelMatches)||(!isBlue && !jewelMatches)){
                    if(robot.RotateIMU(10, .5)){
                        robot.resetMotors(true);
                    }
                }
                else{
                    if(robot.RotateIMU(350, .5)){
                        robot.resetMotors(true);
                    }
                }
                break;
            case 2: //lift jewel arm
                robot.jewel.liftArm();
                autoTimer = futureTime(1.5f);
                if(autoTimer < System.nanoTime()) {
                    jewelMatches = robot.doesJewelMatch(isBlue);
                    autoState++;
                }
            case 3: //turn parallel to the wall
                if(isBlue){
                    if(robot.RotateIMU(270, 2.0)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                else{
                    if(robot.RotateIMU(90, 2.0)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                autoState++;
                break;
            case 4: //drive off the balance stone
                if(robot.driveForward(true, .3, .5)) {
                    robot.resetMotors(true);
                    autoState++;
                }
                break;
            case 5: //re-orient robot
                if(isBlue){
                    if(robot.RotateIMU(270, 1.0)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                else{
                    if(robot.RotateIMU(90, 1.0)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                break;
            case 6: //drive to proper crypto box column based on vuforia target
                switch (relicCase) {
                    case 0:
                        if(robot.driveStrafe(true, .00, .35)) {
                            robot.resetMotors(true);
                            autoState++;
                        }
                        break;
                    case 1:
                        if(robot.driveStrafe(true, .25, .35)) {
                            robot.resetMotors(true);
                            autoState++;
                        }
                        autoState++;
                        break;
                    case 2:
                        if(robot.driveStrafe(true, .50, .35)) {
                            robot.resetMotors(true);
                            autoState++;
                        }
                        autoState++;
                        break;
                }
                break;
            case 7: //turn to crypto box
                if(isBlue){
                    if(robot.RotateIMU(215, 1.5)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                else{
                    if(robot.RotateIMU(135, 1.5)){
                        robot.resetMotors(true);
                        autoState++;
                    }
                }
                break;
            case 8: //deposit glyph
                if(robot.driveForward(true, 1.0, .50)) {
                    robot.resetMotors(true);
                    robot.glyphSystem.ReleaseGrip();
                    autoState++;
                }
                break;
            case 9: //back away from crypto box
                if(robot.driveForward(false, .5, .50)){
                    robot.resetMotors(true);
                    autoState++;
                }
                break;
            default:
                robot.resetMotors(true);
                autoState = 0;
                active = false;
                state = 0;
                break;
        }
    }

Greenhill FTC Qualifier

11 Nov 2017

Greenhill FTC Qualifier By Ethan, Evan, Tycho, Charlotte, Austin, Abhi, Tycho, Karina, and Kenna

Task: Compete at our first FTC qualifier

So, we were absolute failures. There's no way to get around that. We got 14th place out of 14, and our presentation flopped. But, its not the end of the world, even if it may feel like it. We have another qualifier in Oklahome in one week, and we need to analyze what we did wrong so that we can improve for the next round.

  • Match 1
  • We lost, 79-93. This was our closest match, and if we had managed our time in-game more wisely, we could have won by balancing. This was our only game in the margin-of-error.
  • Match 2
  • We lost 101-131. The other alliance outperformed us in scoring glyphs, and was able to knock an additional jewel off in autonomous.
  • Match 3
  • We lost 28-65. We failed on every level, even to balance our robot. Our bot was on for about 10 seconds for the entire match.
  • Match 4
  • We lost 111-181. We scored only 3 glyphs and underperformed in autonomous.
  • Match 5
  • We lost 61-203. Our robot was not on.

We had many failures in the robot game. Our first, main failure was lack of practice. We only really dedicated ourselves to driving practice two weeks before, and we had trouble aligning the blocks throughout the day. In prior years, we had started drive practice from over a month out, so this was a major failure on our part. A second failure that wasn't our fault was that we had connection issues between the phones, and weren't able to drive in two rounds. But, because of our collective failures, we managed not to win a single game. However, we ended up with the second heighest rank points in the whole tournament (380).

Our presentation was a failure too. We hadn't practiced our presentation enough, and it seemed a bit janky at points. In addition, our engineering journal was a bit rushed, as we'd printed the night before and had some issues printing. We also didn't turn the control award in. However, one highlight of the judging is that we were able to answer questions quickly and effectively, and the judges seemed to like that. We did end up winning the Connect Award.

Reflections

This tournament was one of Iron Reign's worst. However, we must learn from that so we don't repeat our mistakes. The silver lining of this tournament is that we can't really preform any worse :).

Driving Struggles

13 Nov 2017

Driving Struggles By Abhi

Task: Drive the Robot

Today we tried to drive the robot on the practice field for the first time since the qualifier last Saturday. However, we couldn't get in very much quality drive practice because the robot kept breaking down. We decided to dig a bit deeper and found some issues.

As seen above, the first thing that was wrong was that the lift was tilted. Due to the cantilever orientation of the plank of the grabber arm mounted on the vertical axis, the structure only had one bar for support for the lift. As a result, since the construction of our robot, the rev rail of the mount had been worn out constantly up to the point where it broke. Also because of the singular rod mounting, the lift system rotated on the vertical planar axis creating a need for drivers, such as myself, to rotate into the cryptobox every time we needed to mount. This was not a good way for the robot to function and had frustrated us.

Another issue we had was that the lift system string was caught often in all the wiring of the robot. Due to the friction created between this string and all the wiring, including the jewel system, it breaks the string and also creates a safety issue. As a result, we need to fix either the wiring of the robot or the lift system altogether.

Reflections

We hope to make improvements over this week before the Oklahoma qualifier. Hopefully, we will have a more proficient robot making it easier on our drivers.

Gripper Part 2

13 Nov 2017

Gripper Part 2 By Evan

Update:

The task today was simple. We replicated the prior work with the first gripper, as stated in the prior post, so we can begin connecting them. The biggest problem was finding all the parts to make it. We are hoping we can connect and mount them in the next couple days so it will be ready for the qualifier in Oklahoma. The improvement over last post was the addition of the rubber gripping material, as found in our "Material Test" post.

Code Fixes and Readability

13 Nov 2017

Code Fixes and Readability By Tycho

Task: Make the code more readable

So, we can't include all the code changes we made today, but all of it involved cleaning up our code, removing extra functions we didn't use, refactoring, adding comments, and making it more readable for the tournament. We had almost 80k deletions and 80k additions. This marks a turning point in the readablity of our code so that less experienced team members can read it. We went through methodically and commented out each function and method for future readability, as we will have to pass the codebase on to next year's team.

Control Award

15 Nov 2017

Control Award By Janavi

Task:

Last Saturday, after our qualifier, we had a team meeting where we created a list of what we needed to do before our second qualifier this Saturday. One of the tasks was to create the control award which we were unfortunately unable to complete in time for our last competition.

Autonomous Objective:

  1. Knock off opponent's Jewel, place glyphs In correct location based on image, park in safe zone (85 pts)
  2. Park in Zone, place glyph in cryptobox (25 pts)

Autonomous B has the ability to be delayed for a certain amount of time, allowing for better coordination with alliance mates. If our partner team is more reliable, we can give them freedom to move, but still add points to our team score.

Sensors Used

  1. Phone Camera - Allows the robot to determine where to place glyphs using Vuforia, taking advantage of the wide range of data provided from the pattern detection, as well as using Open Computer Vision (OpenCV) to analyze the pattern of the image.
  2. Color Sensor - Robot selects correct jewel using the passive mode of the sensor. This feedback allows us determine whether the robot needs to move forwards or backwards so that it knocks off the opposing teams jewel
  3. Inertial Measurement Unit (IMU) - 3 Gyroscopes and Accelerometers return the robot’s heading for station keeping and straight-line driving in autonomous, while letting us orient ourselves to specific headings for proper navigation, crypt placing, and balancing
  4. Motor Encoders - Using returned motor odometry, we track how many rotations the wheels have made and convert that into meters travelled. We use this in combination with feedback from the IMU to calculate our location on the field relative to where we started.

Key Algorithms:

  1. Integrate motor odometry, the IMU gyroscope, and accelerometer with using trigonometry so the robot knows its location at all times
  2. Use Proportional/Integral/Derivative (PID) combined with IMU readouts to maintain heading. The robot corrects any differences between actual and desired heading at a power level appropriate for the difference and amount of error built up. This allows us to navigate the field accurately during autonomous.
  3. We use Vuforia to track and maintain distance from the patterns on the wall based on the robot controller phone's camera. It combines 2 machine vision libraries, trig and PID motion control.
  4. All code is non-blocking to allow multiple operations to happen at the same time. We extensively use state machines to prevent conflicts over priorities in low-level behaviors

Driver Controlled Enhancements:

  1. If the lift has been raised, movement by the jewel arm is blocked to avoid a collision
  2. The robot has a slow mode, which allows our drivers to accurately maneuver and pick up glyphs easily and accurately.
  3. The robot also has a turbo mode. This speed is activated when the bumper is pressed, allowing the driver to quickly maneuver the field.
Autonomous Field

Intake Grippers Pt2

15 Nov 2017

Intake Grippers Pt2 By Evan

Task: Attach the new intake grippers

The basters are here and in full swing. We spent a late night putting together the two intake columns. They were attached to a backing by previously, allowing to finish it by attaching the final servo and tieing it to the two columns. Since the new intake needed new code, we whipped up some code to allow us to have control. Upon doing this he realized we needed two controllers, one for movement and controlling the lift, and a second purely to work the two columns as they spun. This allowed the operator to operate the whole robot just a little easier. The new columns are set on a majority REV base, allowing for more choices in design that normal tetrix doesn’t provide. The new grabber has already been placed on the robot and seems to be working smoothly, only time will tell if it is a long term solution.

Oklahoma Qualifier Recap

18 Nov 2017

Oklahoma Qualifier Recap By Ethan, Evan, Austin, Janavi, Charlotte, Kenna, Tycho, Karina, and Abhi
Task: Compete at the Oklahoma Qualifier

Once done, our postmortem post will be here.

On Nov. 17, we went to the Oklahoma Mustang HS qualifier. Our strategy for this tournament was to attempt to qualify in multiple regions so that we have more chances to get to the South Super Regionals. For this tournament, the DISD STEM Dept. funded the tournament fees for us to attend, as well as housing for our team. We drove down there on our RV, and also fixed it up so that we could convert it into tournament mode.

For out-of-area tournaments, we have to prepare ahead of time so that we can get everything we need, since we can't really go back to get parts we forgot. So, this time, we created a packing list in order to ensure that we have everything on the RV before we leave. The complete list is below.

Tent / Pits

  • Shield
  • Main robot Cart
  • Small carts (x2)
  • Banner stand
  • Main banners (x3)
  • Aquila
  • Inspire
  • Inspire mount
  • Monitor
  • Extension cord(s)
  • Power Strip(s)

Field Elements

  • Cryptobox
  • Foam blocks
  • Jewels
  • Jewel base
  • Vuforia pattern on stick

Tools

  • Staticide
  • Shamwow
  • Threadlock
  • Red (x3), Blue (x3), Green (x3) hex keys
  • Flat heads: Large (x2), Small (x2)
  • Phillips heads: Large (x2), Small (x2)
  • Modular screwdrivers + bits (Cyan wrenches)
  • Rubber bands / Hair Ties?
  • String for pulley system
  • Container store chest of drawers
  • Chain Box
  • Tape Box
  • Glue + putty Box
  • Large pliers
  • Needlenose pliers
  • Regular Pliers
  • Power pole Box + stuff with that
  • Xacto knifes
  • Regular knifes
  • Zip ties
  • Axles
  • Drills
  • Yellow Drill (x2)
  • Drill batteries + chargers
  • Electric screwdrivers + bits
  • Plugin drill
  • Wire strippers
  • Measuring tape
  • Dremel
  • Reciprocating Dremel
  • Circular Dremel
  • Sawblade
  • Evil sandpaper
  • Battery
  • Charger
  • Hack saw
  • Hammer
  • Mallet
  • Bolt cutters
  • Lighter
  • Core power distribution Box

Parts

  • Standard nuts + bolts
  • Extrusion nuts + hex bolts
  • Prototyping wire
  • Tetrix pieces
  • U pieces
  • Plates
  • Phone cases - ZTE + SG5
  • Extrusions (Cap lift size)
  • Extrusion brackets

Electronics

  • Phones
  • All cables that we can get our hands on
  • Phone cables(new and old)
  • Coding cables        
  • OTG cables
  • Printer
  • Computers
  • Battery Box - phone
  • Joysticks
  • 9-volt batteries
  • All wrenches
  • Spare Core Power Distribution Module Box
  • M-M cable
  • M-F cable

Organization (Boxes)

  • Judging Box
  • Damaged foam block
  • Example of abs 3-D printing
  • Drawer Slide                      
  • All grabber prototypes
  • Turkey baster ones
  • Conveyer belt one
  • Current one on robot
  • Tape Box
  • Foam tape
  • Gaff tape
  • Duct tape
  • Duct tape
  • Double sided
  • More + ........
  • Glue + Putty Box
  • Battery Box
  • Batteries
  • Phone cables
  • Phone + Charging Box
  • Joystick Box
  • Powerpole Box
  • Tri-Crimp
  • Powerpoles
  • Wire stripper
  • Wire clipper
  • Needle nose
  • Container store chest of drawers
  • Chain Box
  • Spare Core Power Distribution Module Box

Before leaving, we had already encountered problems. Our RV's generator refused to turn on, which meant that we couldn't get AC, chargers, or any electrical components on board to work. So, we had to do a last-minute oil change. As well, we had trouble finding several important tool parts, such as our box of drill bits and other things. Running about an hour late, we finally left for Oklahoma. The drive took the usual 4 hours, stopping to get Schlotzky's™, and we arrived at midnight. After we were all assigned to our rooms and all, we did another runthrough of our presentation, then went to bed

We woke up by 7am the next day, and slogged our way out of bed to the Mariott™ Contentental™ Breakast™. Over breakfast, we discussed our strategies and rules for the tournaments. Some of the major points are these:

  • Unless your work requires it, stay off the RV and in the pit
  • If possible, try to talk to as many teams as possible, hand out flyers
  • When you see judges roaming the tournament, try to flag them down to talk
  • Try to get as many people as possible to see the RV
  • Do scouting ASAP

Flyer

Inspection


We didn't manage our time well for inspection. We hadn't really prepared our robot back in Dallas, nor on the way, so we had to attach the side panels and the buttons right as we arrived. As well, we had to make sure the bot fit within the sizing cube. Overall, our preparation for this section of the tournament was 4/10.

Judging/Presentation


This was our largest improvement from last tournament. This was probably the best presentation we've put on yet. As well, our engineering journal was indexed a little bit better than last time. The judges also seemed receptive to our presentation and asked in-depth questions on our robot, which was very enjoyable and signalled that we would be considered for future awards. As well, we managed to get every judge in the tournament on the RV, every single referee, and about half the teams total. So, we did well on that front. As well, our strategy of trying to talk to every judge worked well, as we were able to cover a variety of subjects, ranging from our design process, to business, to our outreach, to women in STEM.

Robot Game

Our time-management overall here was not great. We'd rush to the practice field to try and fix parts, then get immediately called back to the round. I think we almost got disqualified 3 or 4 times because of this. However, this was our most successfull tournament in the robot game ever, since this was our first time getting 1st alliance captain.
Game 1
Game 1 was one of the two games we lost this tournament. We lost by 20 points, and we managed to both knock the opposing team's jewel off, as well as not balance in the end-game. This match highlighted the problems with our autonomous' reliablility.
Game 2
In game 2, we still had autonomous problems, but won a close game due to our stacking.
Game 3
Game 3 was our best game, as we didn't experience any connection issues and got almost 200 points.
Game 4
In game 4, our robot shut down throughout the game, but despite that, we ekeed out a close victory.
Game 5
We won game 5 by about 30 points, as we stacked 2 columns, got a jewel, and balanced our bot.
At this point, we became an alliance captain and chose team 3732 Technical Difficulties to be our partner. We had connection problems throughout the next games that hampered our ability to score.
Semi-Finals 1
We won 80-100, despite connection issues.
Semi-Finals 2
We improved a little and got about 120 points as we fixed a servo between matches.
Final 1
We lost this game due to connection issues.
Final 2
This was our closest game, as we won by 2 points, since we were able to stack blocks *slightly* faster.
Final 3
We won this game by 20+ points as the opposing team failed to balance one bot.

Ceremony

The first award we won was the First Alliance Captain award, a first for our team, so we were overjoyed about that. Then, we also won 1st place Control Award, another first for our team. This was especially suprising, as our autonomous failed quite a bit throughout the tournament. Finally, we won 2nd place Inspire Award. While this is still a great accomplishment, we'd like to work on this a bit more and get 1st place next tournament in January.

Grabber Arms v3

25 Nov 2017

Grabber Arms v3 By Abhi and Karina

Task:Develop a More Efficient System

At the Oklahoma qualifier, we saw numerous teams with similar systems to that of ours. However, since we had the mobilized gripper arms to stack with auto alignment, we were able to collect glyphs easier. In spite of that, after observing other teams in action, we realized our current gripper method had the issue of not being ready by the time we got back to the cryptobox. This is because we had to turn around everytime we needed to pick up glyphs and we also needed to pick up glyphs. This leads to longer time to fill the cryptobox, something that is not good if we plan on recovering the relic later in the season. As a result, we decided to upgrade our arms to a new level: a chain based intake system.

The idea behind this system is that the grabber arms would be on a mobilized chain system, kind of like a conveyor belt. One of the reasons this is much faster than our old system is that we don't need to turn our robot around as we approach the cryptobox. We can drive forward, pick up glyphs, and as we drive backwards, we can use a toggled button on our gamepad to move the grabber arms to the back of the robot upright. As a result, by the time we get back to the cryptobox, we have the glyphs ready to place.

Another benefit of this new system is that we don't need to stack glyphs. When we drive forward to pick up glyphs, we can tilt the grabber arms forward so that even if the pre stacked glyphs look far apart, they can still be in-took with the tilted system. Also, this system can be used for intaking the relic in the future. If the chain system is placed on an elevated level on our robot, the grabber arms will be taller than the field walls. Because of this, if we pick up the relic when it is on the ground, we can place it easily.

This picture represents our current progress. We hope to complete this system soon so we can test it on the robot.

Oklahoma 2017 Post-Mortem

27 Nov 2017

Oklahoma 2017 Post-Mortem By Ethan, Evan, Tycho, Austin, Janavi, Kenna, Abhi, Charlotte, and Karina

Task: Recap what went right and wrong in Oklahoma

Even though we did very well in the Oklahoma qualifier, we still encountered several problems, that if not addressed, could lower our chances of getting to Super-Regionals. So, we had a team discussion on what to do differently in the next tournament, and what to keep constant.

Problems

Time management
Our time management was Not Good. First, we had trouble coordinating with different parts of the team, which lead to disorganization. As an example, we nearly missed judging because we had to go to inspection, then we nearly got DQ'd from several matcvhes because we kept going back to the practice field instead of queuing. So we need to clearly schedule when to go to practice field and when to not, as well as coordinate the judging, inspection, and other important events.
Referring to coach
We didn't realize that the judges were judges in the pit and one of our members refered to our coach for help, which probably hurt our chances.
Preparedness
First, on the robot side, we hadn't prepped for inspection the night before, so we had to be in a rush the day of to get ready. As well, we still hadn't made a coherent model of our robot in Creo by OK, which hurt our judging chances. And, we didn't emphasize the design process enough.
Presentation
For some reason, our robot kept glitching out *only* during the presentation, which hurt us. And even though our presentation was better than last time, we still had a lot of pauses that could've been remedied easily with more practice.
Robot Stability
While our robot worked pretty well during the first 5 rounds, once we hit the final rounds, our robot started shutting down and being hard to operate. We still don't know the reason, but we're currently diagnosing now.

To-do

  • Static-proof robot
  • Fix wiring
  • Organize journal for award
  • 3D Model
  • Expand engineering section
  • Build 2nd field
  • Shock mount robot

Gripper v4, Octopuckers

03 Dec 2017

Gripper v4, Octopuckers By Tycho and Abhi

Task: Design a new piece for intake

Version 2 of our gripper arms worked much better than our original. Due to their silicone material and trianglular shape, we definitely had more control over the glyphs than our one degree of freedom grabber arms. However, we still had issues we needed to address. When glyphs were taken in, since the silicone surface did not have much mobility and compressibility, glyphs would often fall. Due to slight changes in glyph size, the bigger glyph would determine the space between the grabbers, meaning the other glyph would be mobile despite us wanting its control. This is when we develoepd the first version of our new rotators.

The first edition of our rotatory mechanism allowed us to play with ninjaflex printing and flexibility. They were 15mm extrusions designed to stack on one another on a REV rail or similar rigid structure. Since Ninjaflex can bend, we got more grip on the glyphs. It was definetely a well designed model but had many issues. First, each fin of the fan was very thick. Though it was able to grip glyphs well alone, the system was not able to grip much better when stacked together. We decided we needed more surface area contact with glyphs during intake.

This led us to create a new model with thinner fins and thin tabs at the end. The thin flaps allowed more grip area with the glyphs allowing us to work better. Though good in theory, when we went to print out the part, we discovered our 3-D printer didn't allow printing vertically of surfaces less than 1 mm. Since this idea didn't work, we started thinking of the idea of suction cups. This led us to our current design.

The design worked very well. We decided to name them Octopuckers since they had suction cup shape and there were 8 fins to a pucker. The surfaces of the octopuckers which would contact the glyphs were large and had a large area. Since this was heavier than the bridge connecting them to the center, the branches bent easily allowing for a grippy surface which was also flexible. After testing it on a small scale, it seemed to work well so we will continue development and implement it on our next edition of the grabber arms.

REVolution Simple Dual Rail Plate

11 Dec 2017

REVolution Simple Dual Rail Plate By Tycho

Task: Power to the REVolution

The dual rail plate allows you to couple the rotation of two REVrails together. The distance between the holes should be based on how you are coupling them together. This model is designed to use GT2 5mm pulleys and a 46 gap timing belt.

REVolution Basic HingePlate

11 Dec 2017

REVolution Basic HingePlate By Tycho

Task: Power to the REVolution

This is our most used hinge plate. The 4 holes can take M3 screws to attach to a REVrail on one side at the end.

REVolution Narrow Inside Washer

20 Dec 2017

REVolution Narrow Inside Washer By Tycho

Task: Power to the REVolution

This washer is a stackable spacer that can be used to adapt standard bearings/sprockets/pulleys to thinned base plates.

REVolution Thick HingePlate

22 Dec 2017

REVolution Thick HingePlate By Tycho

Task: Power to the REVolution

This is our most used hinge plate. The 4 holes can take M3 screws to attach to a REVrail on one side at the end.

REVolution Pillow Block

22 Dec 2017

REVolution Pillow Block By Tycho

Task: Power to the REVolution

This is a standard pillow block. We had to add adhesion pads to the ends because the nylon would curl away from the print bed. But these are easily cut off with a hobby knife.

Jewel Thief

23 Dec 2017

Jewel Thief By Austin and Evan

Task: Build a Functional Jewel Thief

The jewel thief we built before *worked* but that was about it. More often than not, it failed or, even worse, knocking off the wrong jewel due to instability. And, in the Greenhill Qualifier, we lost several rounds because of a problem that could've been easily fixed. So, we had to redesign it.

The jewel thief was initially intended to be simple. It was comprised of no more than a 180 degree rotation servo and an arm with a standard rev color sensor. The arm was foldable and collapsible so that it would fit inside our robot, and as the servo turned out to its extended position the arm would open up with the help of a single bungee cord.

This plan had a few inital downfalls: first, the arms were rather large, clunky, and never really folded well into position, second the arms was heavy due to the use of tetrix bars meaning that the servo would strain, and finally the overal position of the arm was inconvenient for our autonomous programing, so we moved on completely. Rather than focusing on a single arm that could extend to reach the jewels, we decided to focus on something that would conform well to our current setup and then focus on making it long enough to reach. We realized that the outer edge of the robot was open enough to contain a V-shaped device that would rise 180 degrees over the head of our robot. The immediate perk to this was the fact that the system would be 18 inches in length. We felt no need to update which sensor we were using at the end of whatever mechanisim we finally attached, since the rev color sensor served it purpose correctly and effectively each time we had tested it in the past. Our final design was the V-shaped rim that laid flush with our robots exterior and was made from cut and bent L-bracket and was moved with two continuous rotation servos.

REVolution 15x20 Tooth Sprocket

23 Dec 2017

REVolution 15x20 Tooth Sprocket By Tycho

Task: Power to the REVolution

This is our REV0lution 20 tooth sprocket for #25 chain. This took a lot of trial and error to get right, because it was the component most sensitive to our print settings. We had to inset the tooth profile quite a bit because any extra material created by perimeter settings would cause the gaps between teeth to be too small for the chain to fully engage, and because nylon is so slippery, this would radically increase the likelihood of the chain slipping. Or you would have to make the chain super-tight and that would increase the friction at the bearing. It still requires a pretty tight chain. And it requires a lot of post-print cleanup. The lip where the lowest layers spread out on the build plate have to be trimmed with a hobby knife - all the way around. And then the chamfers at the tip of the teeth have to be rebuilt. We used a reciprocating sander to do this. Nylon is one of the hardest materials to sand effectively, but fresh 220 grit paper will eventually do the job. We only need 2 sprockets for our new Glyph System, so it was worth the effort. This would be the first component that we would recommend replacing with a regular flat aluminum sprocket if you have the means to accurately broach a 15mm square hole in it. Or switch over to timing belts entirely - the timing pulley works fine right off the print bed.

REVolution Rail End Cap

23 Dec 2017

REVolution Rail End Cap By Tycho

Task: Power to the REVolution

End caps are stops placed at the end of a REVrail. Five of the holes are for M3 bolts that can be screwed into the standard holes in the cross section of the extrusion. We highly recommend tapping these holes and then using threadlock to retain the bolts. So far we’ve only had to use a single bolt since we haven’t experienced very large forces The other 4 bolts are for attaching to a bearing on the far side of an attachment plate.

REVolution Rail Stop

25 Dec 2017

REVolution Rail Stop By Tycho

Task: Power to the REVolution

This stop can be placed anywhere on a REVrail to trap mounting plates inside bearings. They are usually used in pairs.

REVolution Custom Dual Rail Plate

26 Dec 2017

REVolution Custom Dual Rail Plate By Tycho

Task: Power to the REVolution

This shows customized version of the Dual Rail Plate. This is for our 4th generation rolling gripper system. The small ears are designed to hold a long M3 bolt that have a stack of mini ball bearings on them. These ball bearings squeeze our timing belts together, forcing them into a more oval shape, but still allowing them to glide. This reduces friction quite a bit. Otherwise we had to put a lot more tension between the pulleys to get the belt to fully engage. This plate also has grooves to attach servo pulled wires to control the plates angle one of the REVrails and it has a flange to mount our beater guards.

REVolution Narrow Bearing Washer

27 Dec 2017

REVolution Narrow Bearing Washer By Tycho

Task: Power to the REVolution

Washers can be used as spacers. They are also used to smooth out the rough top layers. Keep the bed very clean and smooth and the bottom surface of parts should be very slippery against other nylon. Put these in between the rough top bearing surface of one part (with rough surface facing rough) and the smooth bottom surface of the next part, and the friction will be substantially reduced.

REVolution Inside Washer

27 Dec 2017

REVolution Inside Washer By Tycho

Task: Power to the REVolution

This is an inside washer. It will fit entirely inside the standard plate hole. We don’t use these much, but they can be useful as spacers.

Flipper Prototype

29 Dec 2017

Flipper Prototype By Evan

Task: Build an alternate glyph-placing mechanism

The world advances on innovation. We strive to make the most efficient devices and aparati to complete jobs for us. There’s a hundred different ways to work a task, but only one will be the best at functioning in the areas of efficiency and timeliness. Just as America runs on Dunkin, advancement runs on efficiency. That’s why the robot must be outfitted with a flipper system to intake and deposit blocks. It’s the only design that will make it to the world competition, and it’s the only way that we will make it out of local competitions. I personally have taken it upon myself to develop the prototype while the majority of the team is focussed on a new grabber arm.

While our grabber arms were *good*, they weren't great. The arms currently attached to the robot, which use the turkey-pans, didn't grip as much as we hoped, and while we're designing a new version which has specialized 3-D printed arms, we can't put all our eggs in one basket. So, we decided to make the flipper system. The advantages of the flipper system as compared to the other systems is that the flipper system:

  • Does not depend on friction to hold blocks
  • We had previous issues with block slippage with the arms model, and this should fix our dependency on high-friction materials.
  • Faster
  • Our old arms depended on stacking to get more than one block, while this one wheels blocks in, reducing the time needed.
  • Less precision needed
  • Before, we had to align blocks directly with the arms to pick them up, but this can just use the wheels to intake blocks.

So far I have built a flipper and an intake system, both that function well, but have yet to get the teams’ permission to attach it directly to the robot, as it would require a lot of dismantling. Since it won’t be able to be put on before the upcoming Wylie qualifier, it’s been put on a backburner as I also throw myself at the new grabber arm. The flipper is being held in a frame I built around it but as a system is comprised of a board attached to a servo attached to a drawer slide that works as a vertical lift. The intake system is composed of two intake wheels made of the same foam tiles that make up the field floor attached to two axles that are chained to two opposite rotating gears powered by one of the new REV motors. The intake works with the flipper well and only needs some side guards. I’m half of the way through designing. It should be on the robot before any regional qualifiers we go to.

Introducing Kraken

01 Jan 2018

Introducing Kraken By Abhi and Tycho

Task:Design the robot model

We have finally completed assembly modeling Kraken, Iron Reign's Relic Recovery robot. Named after the sea creature due to the robot's OCTOPUCKERS, Kraken stands as a fierce competitor in FTC.

To the chassis, we added the glyph system mounting. We first designed a linear slide replica and constrained that to a small TETRIX U connector piece which attached to the REV rail base. On the other side of the linear slide was a TETRIX bar attached by distance and coincident contrains. Onto this, we mounted the grabber system, and assembly done with a combination of normal, distance, and coincident contrains.

As on our robot, this linear slide system is supported by a small TShaped piece with two aluminum bars. This required tangency constrains with the inside of the T piece along with angle offset to the REV rail base.

Finally, we attached the jewel thief mechanism via subassembly, We first attached servos to either side of the custom designed pentagon piece. Then, these servos were constrained to the REV rail base and partly to the phone mount bar extruding out.

All of this went over our amazing chassis design. To see more info on the chassis assembly, refer here

What's next?

We hope this chassis provides an alternate testing mechanism for sizing of our future prototypes. Another version of the chassis is underway based on changes to our robot.

Chassis Model

06 Jan 2018

Chassis Model By Abhi and Janavi

Task: Use Creo Parametric to CAD the chassis

After making significant development on our robot, we decided to model it. So far, we have developed the chassis of the robot seen below

To develop this, many types of contraints were used.

The entire model is dependent on this tetrix bar. The bar was constrainted using the Default feature since it was the base of the model. To this, the lift motor was attached as well as the battery box. These two were constrained by the Distance feature to the end of the bar.

Four REV rails were attached to the TETRIX bar. These supported the wheels and their motors. They were constrianed through the Coincident to the bottom of the tetrix bar and Distance to the side of it.

There are custom designed motor mounts constrained to th side of the REV rails using Coincident and Distance measurements. To this, there are TETRIX wheel mounts attached onto which the mechanum wheels are attached. On the outside, wheel guards were attached. The motors that drive the wheels are attached to REV motor mounts which were constrained to the underside of the REV rails. Attached to the motor is an axel which connects to a sproket to turn the wheel.

The REV hubs were the hardest to constrain in this model because they didn't have typical sides. To mount them, we used a combination of Distance, Coincident, and Angle Offset features. The final part of the model was the phone mount which was simply constrained using coincidents.

The next steps of this robot is to complete the robot model. This chassis was actually reused from last year. Due to licensing issues, we had to redevelop this model. We hope to experiment with this model to make space for the new, larger gripper arms.

Fixing the Robot Chassis

08 Jan 2018

Fixing the Robot Chassis By Austin

Task: Redesign the robot chassis, fix issues

When we designed our new grabber with the octopuckers, one of the variables we neglected was the width of the new grabber once assembled and resting. After the grabber was completed it’s width was actually greater than that of the housing bay we had built into the current drive train, so to get the grabber to fit we actually had to widen the bay. We had know from past experience that the base was never truly square, so we took this necessary widing as a chance to resquare the base and drastically improve the efficiency of our mecanum drive. We added ¾ inch to the inside base and the resquared the frame before finally bolting everything down and attempting to mount the new grabber. Because the closed grabber barely fit within the new widened bay we had to cut away portions of the frame over the front wheels to allow the octopuckers room to actuate.

The other key chassis modification needed to accommodate the new grabber system was a lift bolstering. We decided that to handle the newly doubled weight of the grabber we would share the load across two strings and convert to a double pulley system. The lift was also strengthened with newly squared and adjusted cross beams similar in length and angle to the other iteration. Because of the double pulley, we also centered the drive motor and utilized a second spool. The pulleys rest on either side of the lift system and are both being run by the same motor.

The Grabber V. Kraken

08 Jan 2018

The Grabber V. Kraken By Austin and Evan

Task: Build a new version of the grabber

One of our issues with the previous iteration of the gripper was the fact that the material that coated the actual pincers weren't even and would often lead to blocks slipping from the bottom of the gripper and falling out. Our solution to this was to retest materials and in this process we decided to try our hand at 3D printing a circular and pliable material that could be part of our new rotating pincers. We designed the OCTOPUCKERS and built the rest of the grabber around that. Because the octopuckers were designed to slide onto typical rev-rail extrusions we also had to design a new system of bearings that could house the rails with skewered octopuckers.

We developed a “revolutionary” new 3D printed rev-rail bearing system that was liked with a series of chains and pulleys that could be attached to our current lift system and not severely alter the base and drive train. Previously the grabber was actuated via a system of servos controlled by a rev hub back on the main drive train, however in this newer iteration of the grabber, we decided that all of the necessary wiring would be kept inside the grabber to eliminate tangling by mounting the rev hub on the back of the grabber. While this grabber was a major upgrade that drastically improved our glyph handling capabilities, it did in fact double the weight that our lift had to bear.

Creo Parametric, a Learning Journey

09 Jan 2018

Creo Parametric, a Learning Journey By Abhi

Task: Learn Creo Over Time

Over the course of this past season, I have been learning how to use Creo Parametric to learn 3-D modeling. Since this is Tycho's last year on the team (so far he has been our main modeler), I decided to learn from him so the modeling legacy would continue.

The first project I was tasked to design was the wheel guard on the robot. As a very early learner, I ran into many issues. For example, I used to eyeball all my dimensions. This clearly didn't work out as evidenced by my epic fail of the first form wheel guard. However, after experimenting with the constriants, I jumped all the early hurdles and learned the basics.

My first assembly project was to CAD the conveyor belt we hope to eventually mount the grippers onto. As someone who had never dealt with assemblies before, I felt like someone going through a maze. Even assembling basic parts like an axle hub to the axle, it took me 10 minutes because I struggled changing dimensions and such. This project, though very basic, seemed impossible to me. However, after working through it, I was able to become more familiar with constraints to apply to the next biggest task, the robot model.

So far this is what we have constructed of the robot chassis. After training on the conveyor system, I was able to complete the chassis easier. By doing this, I have dealt with more constraints and have been moving faster.

Next Steps

After learning a lot so far from Tycho, I hope to finish the model soon and continue growth on the model. The only thing remaining on the model is the vertical bars connecting the lift and the lift itself.

Wylie East Qualifier 2018

13 Jan 2018

Wylie East Qualifier 2018 By Ethan, Evan, Charlotte, Janavi, Karina, Tycho, Austin, Abhi, and Kenna

Task: Compete at the Wylie East Qualifier

Introduction

It was a cold and dark morning. The howling winds of a cold front rushed through the grass. Under this cover of darkness, one car after another pulled up to a house, dimly lit. A car door would open for a second, letting a child out into the cold night. Under these auspicous conditions, each child wandered into the house, only for a moment, and left again, and boarded an RV. Thus began the Wylie East Qualifier.

Inspection

We arrived at Wylie about 7:50 AM, and unloaded. Unlike previous tournaments, we had actually prepared our robot the night before. So, we were able to get in and out of inspection pretty fast, which was nice and definently reduced our stress about time management. Our only worry was that our robot was too big for the sizing cube, as we had measured the robot to be 17.96875 inches in length, leaving 1/32 of an inch. And since that is *probably* within the production error of a sizing cube, we were mildly worried. Still though, our robot barely slid in. We passed the rest of inspection with flying colors.

Unloading

We had been preparing to pack Friday, so we had all our tools ready. However, we didn't use the packing list we had previously, and we felt the effects. We forgot encoder cables, and even a flathead screwdriver. While this really didn't hurt *us*, it hurt our sister team, and we weren't as helpful with other teams when they came to us. The one pro of forgetting a lot of our stuff was that the unload was really fast, and we set up our table and got it organized in under 5 minutes.

Judging

Next up was judging. We'd neglected working on our presentation previously, as we had to prioritize even more neglected items such as drive practice. And, it was pretty obvious. We had a few stumbles, a few missed cues, and we even managed to miss a slide. Despite that, we were able to convey our team's progress and history to the judges effectively, and they seemed to be enganged and asked relevant questions. If there was one thing we could change, it would not be the prior errors, but that we took too much time in the presentation, and didn't leave enough time for questions. NOTE: A judge later told us that we should clairify information about our MXP in the presentation

Scouting

Team # Team name Autonomous Glyph Jewel Safe Zone TeleOp Glyphs Columns Rows Pattern Balance Stone Relics
3734 Imperial                      
3899 Terror Bytes YES no yes no yes 6   2 r no yes mo
7172 Technical Difficulties ys 1 with view yes yes yes 24 full full full no no
7904 HSA Dallas Robotigers no       yes 6 0 2 no don’t know no
8418 The League of Legendary yes 1 no viewfoia no yes yes   1-20000   yes yes no
8565 Technicbots yes 1 with view yes yes yes 8 2 3 no yes no
8626 Prototypes yes 1 no viewfoia yes yes yes   3/2 col 0 yes yes no
9386 Elmer & Elsie Robotics yes 1 no viewfoia yes yes yes 24 3 4 no yes no
11097 Cybersurge yes no no yes yes 4-6g yes no no yes 3 and up maybe
11339 Williams Warriors Robotics yes no no ys yes     2-4 r no no no
11341 ViBoTs                      
11366 The Smarty Party yes no yes yes yes 4-5 g wonky 3-Feb no yes not focus butr can
11425 Murphy Maverick Robotics no       yes no test 4   1 no yes no
11563 Hedrick Garage yes no yes yes yes max 6   2 yes yes no
11594 FireCats no       yes 1   1 no yes no
11629 Todoians yes 1 no viewfoia no yes yes   0 2-3 r no0 yes no
11791 Marvin the Martian                      
11793 TRICERABOTS yes no yes no yes     max 2 no yes no
12061 Long Buccaneer Engineers                      
12430 Raider Robotics yes no yes yes maybe yes 5 no 2 no yes no
12810 QuantumX yes yes yes yes yes 8 2 0 yes yes 1-2 zone
12930 ScitoboRRobotics yes no no yes yes 6 1/3/2002 no yes no could try
13376 Cyber Wolves                      
13850 Raider Robotics 2 yes   yes yes yes 8   yes no no no

Robot Game

Game 5
We won this game by a large margin -> 122-40. Our autonomomous definitely pushed us over the top here.
Game 12
We lost this game. Our teleop speed and strtegy didn't work against our team, and our partner had connection issues.
Game 15
This was a surrogate match, but we were still very happy about winning this. We performed pretty well *and* the opponent's bot shut off.
Game 20
We won this game with our largest margin, 106-12. We performed well in all aspects of the game, and we should replicate this success.
Game 26
We lost this game by our largest margin, 236-76. We were outperformed in the autonomous and teleop by large margins, and failed to get on the balance stone.
Game 32
We won this game, again by a decent margen. We did very well in the autonomous, and the other team just couldn't catch up.
Semis Game 1 & 2
We lost both these marches by good margins, we couldn't really compete with Tech. Diff's teleop with our autonomous.

Ceremony

Usually, judges come and talk to your team if you're being considered for an award, so we have at least two people at our table at all times, and we sound an alarm so that the entire team can come and answer questions. And so, we sat, and we sat, and we sat, and no judges came. But then, with just five minutes left, we were blessed with an apparition of judges. We walked into the ceremony more confident than we were, and were reasonable impressed when we won 1st-place Inspire.

Friction Coefficients of Various Materials

24 Jan 2018

Friction Coefficients of Various Materials By Ethan

Task: Test Friction Coefficients of Various Materials

Introduction:

Iron Reign has used many different materials in years past. In those years, we usually preferred materials which were more durable. We started with ABS, but while hard, it was relatively brittle. We attempted to use Filoflex and Ninjaflex, and they were more durable, but too soft. Finally, we had used nylon for the past seasons, as it was extremely durable but also was hard enough to get the job done.

However, our needs have changed. In this challenge, we have to consider not only durability, but also how well the material works with other materials. And, the most important dynamic we must consider is the interaction with the foam blocks and the gripping material, since it is the major point-scorer.

The coefficient of friction determines the power of the force in the opposite direction of motion. While friction is determined by ƒ=µn, we can ignore the normal force when using the same object repeatedly.

Procedures:

In this, we created an inclined plane that rotated around the base so that we could change its angle slowly from 0 à 90. The coefficient of friction is equal to the tan(ɵ), where ɵ is equal to the angle of slippage. We had to overcome some hurdles, most notably the higher center of gravity of a standard foam glyph, so we cut it down to one-inch of height so that it wouldn’t slip. Another way to restate the tan(ɵ) is the opposite/adjacent of the triangle formed by the incline.

We slowly increased the slope’s angle until the block slipped, then recorded the angle of slippage to calculate the coefficient of friction, µ.

Data:

Surface

Opposite Edge

Adjacent Edge

µ

Standard Polycarb

8.925

8.125

1.098

Sandpaper (120 grit)

9.5

8.25

1.152

1-layer Ninjaflex, no ridge

10.925

5.5

1.986

1-layer nylon, no ridge

10.25

6.125

1.673

Nylon ridged

6.75

10.5

0.643

Drip Silicone Sheet

6.25

8.6

0.727

Full-Thickness Ninjaflex

12.2

less than 1

Immeasurably High

Results:

We found, as we expected, that the Ninjaflex sheets have the highest coefficient of friction. The most important thing to do to further increase the coefficient of friction is increase the area of the contact. While we obviously can’t increase the surface area of the block, what we can do is increase the contact points between the sheets and the glyphs. The main way we can do this is decreasing the quality of our prints, counterintuitively. The reason for this is that the decreased quality creates little fibers that stick up from the print which create more contact points.

The meaning of the coefficient of friction is how easy it is to slide an object across a surface, and as it gets higher, it gets harder to push across the surface. When the coefficient becomes greater than 1, it becomes easier to lift the object vertically than slide it horizontally (This can be qualitatively confirmed by touching the test block). And, for the conveyor belt, we need a high coefficient of friction.

In the future, we should test multi-layered prints, as that ought to further increase the number of contact points. We also plan to impregnate the prints with fine garnet dust, which will hopefully make the sheets more abrasive, and therefore have a higher coefficient of friction.

A critique of this experiment could include that the actual type of friction in the robot game is kinetic, or rolling, not static. In this case, the friction would be higher than rolling friction but lower than kinetic. This is due to the grippers pushing the blocks in, increasing the normal force. However, most coefficients of friction are proportional, so we can extrapolate from the static friction we gained to assume that the material with the highest coefficient of static friction will also have the highest coefficient of kinetic/rolling friction. In the future, we will also test kinetic friction with a spring scale.

References:

This source serves to prove the higher coefficient of friction of Ninjaflex – our experiment varies as we leave the 3-D printing artifacts on the sheet. As well, this measures a different type of friction than ours.

https://ac.els-cdn.com/S2212827117300793/1-s2.0-S2212827117300793-main.pdf?_tid=0b998c36-02ac-11e8-bb23-00000aacb361&acdnat=1516980039_4970d0ef82d6f5d0a8bdd886b6005602

Flipper+

31 Jan 2018

Flipper+ By Evan, Abhi, and Janavi

Task: Build a new glyph scoring system

As the season wears on, the robot game looms over Iron Reign since the bot we built scores only a fifth of the world record. To lessen the gap, we continue to invest in the flipper system I contrived earlier on in the season. As of late, we’ve furthered the project by building a chassis for it to rest in. It’s a slightly modified version of the one on the current robot because we want to still keep the lovely mecanum wheel drive for that extra mobility. We’ve had one major hiccup that has slowed progress which is that the spare set of mecanum wheels we have are all too thick. It turns out there’s about a centimeter of extra wheel depthwise, and this has made us have to try and refit the chassis to accommodate the discrepancy. We're going to rearrange the frame to fit the wheels.

The first thing we did when trying to design the new chassis to go around the flipper system was to arrange the different components of the flipper onto the base where they would go in the future. We were able to secure the intake system I designed a while back to the part where it would suck up the blocks. Then we started to rearrange the supports that are used to keep the robot base square to different places around the robot where they wouldn’t interfere with the flipper and instead utilize the space that would be under the flipper board.

To give the required room the flipper needs, we’ll have to rig the motors upward, so they won’t take up space in the center of the robot. Doing this will require gearing it in a one to one ratio, then allowing those to be connected to other gears what are then chained to the larger mecanum wheels. This is a necessary part of the design because there’s not many other places we can put the motors that won’t collide with another function of the robot. Since the last competition, I’ve been assisted by numerous members such as Ahbi and Janavi in the quest for a high performing robot, and it wouldn’t be as far as it is without them. The flipper has potential, and we're going to push it towards its full.

Building a new chassis

03 Feb 2018

Building a new chassis By Karina and Janavi

Task:

Janavi and I have started to build a new chassis for Kraken 2.0., modelled after Kraken’s current chassis.

First, we had to measure the chassis of Kraken, then cut REV rails to these measurements. Lastly, we assembled the pieces to look as it does above.

With this being the first build project Janavi and I have taken the lead on, we had to have some help from the more experienced builders on our team: Evan and Austin. The most difficult task we came across was having to figure out at which angle to cut the REV rails to fit diagonally on the main frame of our new chassis. After we found this measurement, it was easy cutting the pieces using the miter saw and safety equipment and then we assemble all the REV rails with handy-dandy brackets.

Our current plan is to use this chassis as a base for our fifth generation grabber system. Going forward, we have to figure out how we are going to mount our conveyor belt onto our chassis, and then how to mount grabber arms onto the conveyor belt. We also have a new set of mecanum wheels which we are going to attach to the chassis. However, it came to our attention that they are thicker, so we will have to adjust the rails that run parallel to one another so that the wheels can fit in between.

Normally during the season the build team, the programming team and the drive team all need the robot and this can be difficult. Often times this can hinder our performance since the drive team doesn't get the practice it needs. Therefore the team decided to build a new chassis because having a second base will enable us to dedicate more time to drive practice with Kraken while simultaneously testing out new designs on what will be our second robot. Additionally, having two robots will allow to choose which robot we will take to competition based on performance.

Conveyor Belt V2

03 Feb 2018

Conveyor Belt V2 By Abhi

Task: Develop Conveyor System 2

After analyzing the lack of speed from our last competition, we decided to continue the journey of attaching the gripper arms to a conveyor belt as previously designed. To do so, we realized that we needed to utilize the REVolution system to make the grippers work better. Also, we needed two points of attachment for our robot after seeing that one didn't work with the first version of the conveyor. To figure out how to do all this, we went to our best tool: Creo Parametric.

The assembly began with an assembly of two REV rails through distance and coincident constraints. To this, we mounted two bearing holders with bearings inside on either side of the bars. Inside, the plugs holding the REV rails were attached with coincident constraints. This combined assembly was added to the final assembly and was set with a default constraint. To the inside of the plugs, REV rails were attached using coincident constraints. Next, a copy of the bearing assembly was added and attached to the REV rails attached to bearings.

For the next part of the assembly, we had to make a couple of subassemblies. First, we attached a Sprocket hub that we custom designed for the REVolution system and attached it to a 35 Sprocket from Andymark. The other end was plugged into another hub. This sub-assembly was replicated 4 times so that it could fit on all of the conveyor belt pieces. Also, we had to make a similar subassembly for the 25 sprockets since those are what our motors were designed to do.

Finally, we mounted two motors on the insides of the REV rails. The sprocket attached to this motor would connect to the REV rails so that the whole system could actuate. This was constrained using coincidence.

Next steps...

We really liked how this model turned out. By starting to build it based on the model, we realized how useful Creo is to our design process. We hope to use it again soon for determining how to mount the grabber arms to the belt system.

Control Award Updates

06 Feb 2018

Control Award Updates By Janavi

Task:

In the past few months we've made a lot of improvements and updates to our robot and code. For example, we changed our gripper system again; it now includes an internal which makes it easier to despite out collected glyphs into the cryptobox. So we have decided to update our control award submission to reflect these changes.

Autonomous Objective:

  1. Knock off opponent's Jewel, place glyphs in correct location based on image, park in safe zone (85 pts)
  2. Park in Zone, place glyph in cryptobox (25 pts)

Autonomous B has the ability to be delayed for a certain amount of time, allowing for better coordination with alliance mates. If our partner team is more reliable, we can give them freedom to move, but still add points to our team score.

Sensors Used

  1. Phone Camera - Allows robot to determine where to place glyphs using Vuforia, taking advantage of the wide range of data provided from the pattern detection, as well as using Open Computer Vision (OpenCV) to analyze the pattern of the image.
  2. Color Sensor - Robot selects correct jewel using the passive mode of the sensor. Feedback determines whether the robot needs to move forwards or backwards to knock off opposing team's jewel.
  3. Inertial Measurement Unit (IMU) - 3 Gyroscopes and Accelerometers return robot’s heading for station keeping and straight-line driving in autonomous, while orienting ourselves to specific headings for proper navigation, crypt placing, and balancing.
  4. Motor Encoders - Returned motor odometry tracks how many rotations the wheels have made and converts into meters travelled. In combination with feedback from the IMU, can calculate location on the field relative to starting point.

Key Algorithms:

  1. Integrate motor odometry, IMU gyroscope, and accelerometer with trigonometry so robot knows its location at all times.
  2. Uses Proportional/Integral/Derivative (PID) combined with IMU readouts to maintain heading, corrects any differences between actual and desired heading at power level appropriate for difference and amount of error built up. Allows us to navigate the field accurately during autonomous.
  3. Vuforia to tracks and maintains distance from patterns on wall based on robot controller phone's camera, and combines 2 machine vision libraries, trigonometry, and PID motion control.
  4. All code is non-blocking, allowing multiple operations to happen at the same time. Extensively use state machines to prevent conflicts over priorities in low-level behaviors.

Driver Controlled Enhancements:

  1. Internal Lift System is a conveyor-belt-like system that moves blocks from the bottom the grippers to the top and makes it easier for the drivers to deposit the glyphs in the cryptobox.
  2. If the lift has been raised, jewel arm movement is blocked to avoid a collision.
  3. The robot's slow mode allows our drivers to accurately maneuver around the field as well as gather glyphs easily and accurately.
  4. The robot also has a turbo mode. This speed is activated when the bumper is pressed, allowing the driver to quickly navigate the field.
Autonomous Field

Relic Recovery

07 Feb 2018

Relic Recovery By Abhi

Task:Develop a relic arm

Now that we had developed a glyph game and a stable autonomous, it has come time for Iron Reign to conquer the true challenge of the 2017-2018 competition: Relic Recovery.

After seeing that many record setting teams have built "dump truck" robots that can fill both cryptoboxes with incredible speed and accuracy, we realized that if we developed an accurate relic arm, such teams would ally with us and our alliance would be able to maximize the RR score. At the start of the season, we prototyped this project a little but in the intensive time dedicated to the grabber, the prototype was left to rust. When I picked it up again, I realized a drawer slide system would be heavy and not preferable due to its unwieldy mounting. While the discussion continues on what the release mechanism of the arm should be, we developed a CAD model of the relic arm itself, as seen above.

The primary components of the arm are a TETRIX plate and small aluminum bar. The aluminum bar is made of the same material as the Jewel Thief. This bar is attached to a servo sticking at the end of the arm which can move to close in on the relic. The red material is a rubbery material we hope to use for better traction of the relic. We are considering the same silicone material as seen on grabber arms v2

Next steps

We hope to prototype this and place it on the robot as soon as possible (maybe in time for our regional tournaments). This would make us a good alliance partner for other teams so we are working hard to making this model a reality.

Designing Grabber V. 4.5

08 Feb 2018

Designing Grabber V. 4.5 By Ethan, Evan, and Austin

Task: Build an Updated Grabber System

So, we probably won't finish both the Grabber V.5 and the Flipper designs by the North Texas Regional this Saturday, but we really need to improve our grabber system so that we have a chance of doing well in the robot game. From our last post-mortem, we decided that while our grabber performed *well*, it obviously could have been better. So, in comes our new design.

Our main problems with our last grabber were twofold. First, our internal conveyor belt did not work as well as we had hoped. The point was to deliver blocks to the upper areas of the grabber, and it wasn't really doing that. The first cause of this was that it wasn't catching the block in the first place, as we had designed the internal lift too high off the ground to catch. The second issue occured when the block happened to be in the lift system. It was supposed to stay in place due to friction, and to have friction of an effective magnitude, the normal force must be reciprocated. And, ours wasn't, as the only thing that the block was able to push off of was the rubber mesh we designed, which had a high coeffiecient of friction, but not the rigidity needed so that the normal force was reciprocated 100%. So, so solve that, we installed a backer plate behind the mesh that the block can push off of, which has a higher reciproccal force than before. A final, more minor problem was that the block weren't always staying in the lift at the top, so we designed new Octopuckers to both push them in, and damage the glyphs less.

Part 2

Our eventual intention is to do away with this system, and move on to the v5 system which carries the blocks over the robot entirely, but for now, this should do.

Last Minute Robot Fixes

09 Feb 2018

Last Minute Robot Fixes By Ethan and Evan

Task: Add last-minute design changes to the robot

It was a temperate night. The waning moon shone overhead, a blazing reminder of the continuity of time, for as the moon dipped lower in the sky, our precious little time until the tournament dripped away. Under this oppressive, singular symbol, we labored, trying to outpace the continual march of time.

Over the past week, we had worked tirelessly on the robot. In Wylie, we had used the Octopucker Gripper System, but it didn't perform to our expectations, as the internal lift didn't work. However, in this week, we fixed that issue, and designed the Gripper 4.5, which can be found here. Now, all that was left was to actually attach this new gripper.

At 9PM, things were already going downhill. Apparently, "people have to sleep" or "the team should be well rested for the tournament", so we watched our members drip out the door, one by one, until only us two were left. The task still remained - attach the gripper to the robot. From the get-go, we experienced problems, most prominently that since we had extended the height of our grabber, our phone now stuck out of the 18x18x18 sizing box. Now, we as a team already have significant experience just *barely* passing the sizing cube requirements - before this, our robot was 17.5x17.96875x17, in width, length, and height respectively - so we had certain tricks to get our robot just under it. However, this time, our phone stuck a solid inch outside of the cube, so there was no reconfiguration with the parts attached to the grabber at the time that would allow us to fix this.

So, with traditional Iron Reign ingenuity,we had to devise a solution to our problem. In the words of of the legendary Lil Darsh', "First you gotta analyze\see the problem\conceptualize so you can solve 'em". And, we must follow in the words of our elders, as all good robotics members do. So, we devised these ways to fix our phone problem:

  • Position the phone under the grabber system
  • No, vision was hampered too much in this position.
  • Position the phone on another side of the robot
  • No, this autonomous would be too slow, as the robot would have to turn to locate blocks
  • Attach the phone to a servo, which then moves off the grabber after autonomous
  • This may have been the dumbest and the most difficult solution, but it was the best for our robot
So, we set out to create a moveable phone-mounting system. First, we designed the servo.

The next issue was attaching it. We had to find a position that could view the blocks, pattern, and cryptobox from the same angle. We ended up positioning the phone right in the middle of the grabber, about here.

Next Steps:

In our postmortem, we will talk about the issues caused by these last-minute changes.

Contact Us

E-Mail: ironreignrobotics@gmail.com Website: In the address bar