Iron Reign

Welcome to Iron Reign

Iron Reign @ Science and Engineering Magnet

Team 6832 Members:

  • Dylan Chorley
  • Evan Daane
  • Trace Hamada
  • Ethan Helfman
  • Alisa Lin
  • Omar Ramirez
  • Caitlin Rogers
  • Jayesh Sharma
  • Darshan Patel
  • Maximillian Virani
  • Tycho Virani

Articles by section: engineering

Argos the Chromovore

29 Jun 2015
Argos the Chromovore By Max and Tycho

Task: Get some pre-season experience with Android controlled robots

We've been experimenting with Android controlled robots while we wait for our ModernRobotics modules. Argos is a chromovore - it seeks an identified color using OpenCV4Android machine vision processing. It tries to maintain a given distance from the colored object and follow it around. It's built using the IOIO-OTG for low level interface with the motor control electronics. The ZTE Speed phone is mounted on pan/tilt hardware from ServoCity and Actobotics. The chassis is a MaxStone 1/5 scale rock crawler by Exceed RC.

Reflections

We are starting to learn a bit about using Android devices for controlling robotics. There seems to be a lot of potential here, but we are mostly finding that we have more and more to learn. Machine vision is not easy, and we don't even know if it will be useful in next season's challenge. We are also learning about the location and orientation APIs. Unfortunately it seems the ZTE Speed doesn't have an actual gyro in it, so we'll have to continue using an external gyro for heading management.

We don't plan to publish (meaning document and support) the source code. Our code is just a hack forcing two projects into one - plus you really want to build it from scratch to get a good idea of what is going on. It's pretty much a blend of the ColorBlobDetector sample that comes with OpenCV4Android, and the IOIOSimpleApp present in the IOIO Github project. Use the gradle branch for compatibility with Android Studio. But if you want to look at our implementation you can find it here.

Overview of new hardware and software

08 Aug 2015
Overview of new hardware and software By Max,Tycho,Lin,Alisa,Ethan,Trace

Task: Getting a first glimpse at the new motors and controllers with Imperial robotics

We continued our meeting at the Dallas Makerspace after the GitHub tutorial. We unpackaged the new motors and motor controllers for the first time and took out the phones to scan the hardware configuration. We added Anderson Power poles to some of the motors. Lin taught Alisa and Ethan how to crimp wires and attach the power poles.

Reflections

Scanning the hardware configuration was very troublesome for us and the connections looked like a rat's nest and it was hard how it was going to fit together in a tidy bundle.

Back To Creo

29 Aug 2015
Back To Creo By Tycho

Task: Create preliminary designs for a new robot using a new build platform

Today I started making new designs for a competition robot based on extrusions and the new software platform.

Reflections

I decided to make two different possible designs, one based on our robot that we had used for the past few years with 1 regular wheel on each side in between two omni wheels, and another based on our sister team's newer platform, which had one standard wheel on each corner. After a few hours of work and no saving, creo crashed and I lost all of my work. Moral of the story : save your work more often.

Field Navigation Speculation

05 Sep 2015
Field Navigation Speculation By Max

Task: Determine necessities of this year's field navigation code



Today was our very first meet of the year, and as such, not too much got done other than planning and experimentation. For the greater part of the meeting, I worked on concepts for an overhauled field navigation system (Mostly for autonomous, but possibly for tele-op as well). This would include the robot knowing where it is on the field when it starts, the field's and its own dimensions, the locations of potential obstacles, and even an approximation of how far the robot may have deviated from its planned path. The best bet so far is to make locations based on a Cartesian plane (like most graphs), with one corner of the field being the origin (0,0) and the other points being established based off of it. The picture above shows an estimated list of variables as required for the robot (as well as field dimensions). This is likely a minimum, as there will definitely be a rather complex system needed to show obstacles, including linking together groups of points and making sure that both the points themselves as well as the lines between them are avoided, but without making every obstacle point attach to one another in a spiderweb of confusion.

Reflections

Although most of the team has taken several Java classes at school, this will undoubtedly be a challenge to develop. Since we also have a new physical system to work with, the development of the field control system will be time-consuming work. Regardless, with the new navigation challenge of having the field pre-loaded with debris every time, the development of the system will almost undoubtedly save time in the future that we would have spent on last year's process of fixing our autonomous by running it 5 times to work out tiny changes to single lines of code at a time, only to find more problems caused by the change. Since we know this alternative to the system all too well, At least incentives won't be a problem in getting started.

Designing Drive Trains

07 Sep 2015
Designing Drive Trains By Tycho

Task: Create preliminary designs for a new robot using a new build platform

After we got the new mechanum wheels, I had to start thinking about a new design that would be able to use them.

Reflections

Not much progress was done on the design based on the mecanum wheels, but I remade part of the design based on our old robot from previous years. We will build one robot based on our proven omniwheel-drivewheel-omniwheel nacelle design, only using the REV extrusion building system being sold by Andymark. We will build a second robot using mecanum wheels. The plan is to see which robot works better and that will become our competition robot and the other will become our sparring partner. We think that our classic design will be better at pushing and resisting being pushed around. We also know it is very capable of accurate turning. But the mecanum robot will have more freedom of movement. Which should work better is probably dependent on what the challenge looks like when they release it. But we are also new to mecanum and probably won't have a rock solid implementation figured out right away.

Meeting After Game Reveal

13 Sep 2015
Meeting After Game Reveal By Dylan, Darshan, Alisa, Ethan, Evan, Lin, Tycho, Max, Trace

Task: Discuss robot design

Now that the game has been released, we as a group discussed the different amount of points per each possible game strategy that would give us the most ample amount of points during the given time limit. We also discussed the different ideas on the tracks and wheels that are possible for our design. The arm attachment was discussed for the grabbing of the highest mount of the mountain which would give us the most points.

Reflections

In the future, we will probably test the different ideas we have brainstormed and discover which of these will probably be most efficient for us in our competition that will give us the lightest and most applicable design. In the following weeks, we will have obtained the color sensor and field pieces or items to practice with. This will lead us to reflect even more about what we have done today and what we have done in the weeks before.

Tank Drive Model

19 Sep 2015
Tank Drive Model By Tycho

Task: Design a new build platform more suited to this year's challenge

Since the robot game for this year came out about a week ago, we were thinking about which kind of drive system would work best for the challenge, which mostly involves climbing. Some of the concept we came up with were rocker bogies, rubber-banded tires and a tank drive with treads. Since we already had the preliminary design started for a tank drive, I started modeling that.

Reflections

Throughout the early build of the tank drive's right nacelle, I used Creo to assist in the design of the robot, using the software to see how parts could fit together, and how they couldn't. For example, we were hoping to add an extra idler wheel into the tank drive between the motors, I found out through Creo that there was just barely not enough space to fit it.
I also came up with a way to connect both halves of the robot for when we build the left side of our tank drive, and modelled what that would look like when complete.

I hate tread inserts

19 Sep 2015
I Hate Tread Inserts By Omar

Task: Insert grips into alternating treads to boost traction of driving system

I am so done with these treads. For the past three hours I have worked to soak the treads and tread inserts in dish soap. *takes deep breath* The process is painstakingly slow and also literally painful. The process itself seems simple but after soaking both pieces the insert must be pushed in with a considerable amount of force. This is not user friendly and is not what the company who produces the inserts advertised as "ease of use". This process will be finished in a few meetings because it's ow and slow.

Reflections

This tread insert reallllly needs to be effective given the trouble I've gone through. We don't think the Tetrix treads will be able to get up the mountain without this extra bit of grip. But if they still don't help - huuugge waste of time. At this rate it's averaging about 4 minutes per tread. And we have 100 rubber inserts across both tracks. Will do some tests with just one track when the motors are fully installed so we can decide whether to invest the time in the other track.

Update:

[Time Passes] We probably need a complete track drive (both nacelles) to properly test their ability to climb over the churros, so thought more about the problem and came up with some improvements. First we decided to use a lot more water to make it easier to get the slippery solution into the crevices of the inserts. We found a 10 to 1 mixture of water to dish soap was still very slippery.

We then decided to try controlling the temperature to shrink the rubber inserts and expand the treads. So we chilled some solution with ice and heated the other in the microwave. We are not sure if the chilled solution shrank the rubber, but it did make it much stiffer, making the initial push into the tread easier. The more important improvement was the heated solution - it definitely increased the gap temporarily, making it easier to slide the insert in. The hotter the better. We kept reheating to the point of discomfort because the tracks soaked up a lot of heat very quickly.

We also improved our technique. The chilled treads still go in only part way when pushing them into the hot tread. The rubber insert starts warming up quickly and the heat makes them even more squishy - so you can't push them in. But you can pull them in with very pointy needle-nose pliers. You have to get the pliers between tread and the insert - digging in pretty agressively. The inserts can take a surpising amount of abuse. We didn't tear a single one of them. It also helped that we had assembled the tracks before and weren't trying to do this with individual treads. One more piece of advice - pull the insert away from you so you don't stab yourself when you lose your grip.

Now the process went much faster. In a kind of assembly line, we can get one insert done every 30 seconds:

  • add an insert to the chilled solution while taking the previsously chilled one out
  • remove the track from the heated solution
  • shake the solution out
  • insert the cold tread from the far side toward you
  • dig under the rubber with the pliers
  • grab and pull the insert fully in as fast as you can
  • Repeat

We managed an 8x increase in assembly speed and will be able to mount both tracks at our next meet.

Post Kickoff

19 Sep 2015
Post Kickoff By Jayesh, Omar, Lin, Ethan, Alisa, Evan, Max, Tycho

Task: Build FTC field and begin tank tread mirror side

After the 2015 kickoff, Iron Reign conducted a meeting to construct our game field and also construct our mirror side for the tank treads. Taking turns on placing the grips on our treads, we managed to get a good portion of the grips placed as well. Construction of the field also commenced and the majority of the field is finished, providing an important recource for us in testing the robot for competition.

Reflections

Field materials like the ramp gave us difficulty in assembling them because of confusions such as where to thread each screw. Watching the building videos on Andy Mark's website let us know how to solve most of these nuances. With the mirror side of the tank thread just about done, we can also start building on the main chassis and start discussing our main scoring mechanism.

Building the 2015 Field

19 Sep 2015
Building the 2015 Field By Evan, Dylan, Alisa, Trace, Ethan

Task: Cleaning and building the Field

Today we were charged with the task of building the FTC field. There was one problem. The tent we were setting it up in was in a state of decay. We cleaned out the area to make space while others put together the field. It was changed comletely from when it started. When cleaning we discovered many cool things like cassettes and floppy disks. The mat of the field was a little old but we're going to replace it once we get to the fine tuning of the robot. All in all it was a productice day.

Reflections:

We continued our journey and improved the team in a fun and appropriate way. The building of the field contributed to team bonding. Next week, we should be able to start practicing on the field.

sad robot

Building the Field - Part III

03 Oct 2015
Building the Field: Part III By Ethan, Trace, Alisa, and Evan

Task: Building the field for the third week in a row!

Today, for the third time, we worked on setting up the field. We finished the mountains and the climber setup. We made several mistakes along the way. Firstly, we screwed the mountain climber mounts in wrong, not one or two times, but three times. Then, we realized that the mountains couldn't even fit inside the tent and the wooden boundaries. So, we had to dissasemble it, rotate each board 45 degrees, and reassemble it. After everything was put back together, we tested the robot on the mountain. It was unable to climb the first section, and then, it failed miserably.

We have to go back to the drawing board on our robot design.

Reflections

Today, we learned we still have a long way to go with the robot. Tomorrow, we should be able to finish the field and start testing on the mats.

Circle Time

10 Oct 2015
Circle Time By Jayesh, Ethan, Omar, Darshan, Evan

Task:Discuss multiple possible solutions to climb steep incline on field

We held a team meeting outside on the field discussing multiple possible solutions to the problem of the robot ascending to the top of the ramp. While we are already able to climb the ramp, the robot strafes significantly as it climbs above each rung on the ramp. This can be accounted for during the driver-controlled period, but the strafing can't be accounted for during autonomous, unless we have each side of the robot respond to the other's actions.

Reflections

Having each side account for each other allows for error corrections and also greatly improves the strafing in the robot. Possible solutions included the use of two ultrasonic sensors on the bottom of the robot that detect the distance from the ground. As a side passes over a rung, the distance value changes and the other side adjusts until it reaches the same value. The use of an IMU (Inertial Measurement Unit) to detect differences between each side also fixes the strafing, but the IMU would detect the robot moving as one unit, compared to splitting the robot in half using the ultrasonic sensors. The difference between the two solutions is in efficiency and we will explore these and other options to ensure most success in the autonomous period.

Driving up the mountain - test 2

10 Oct 2015
Driving up the mountain - test 2 By Lin, Darshan, Jayesh, Omar, Max, Tycho, Evan

Task: Test how the condition of the mountain changes robot performance

After last week's fail we decided that we should change a couple of variables of the environment. The first and easiest to fix being the condition and cleanliness of the mountain ramp. Having dust on the ramp would severely lessen the friction holding the robot in place, so we wiped it down with glass cleaner and started up the robot.

Reflections

Since the chassis is still in design flux, we went up the ramp both ways. Both were able to get onto the low zone and held their place when motors turned off. This was already a success in comparison to last week's practice. However, when attempting the mid zone, the orientation of the robot made a difference. When we drove up heavy side first, the robot was unable to go up the first bar. When we put the heavy motor controllers and batteries at the back and went up, the robot made it past the bar, but lost its balance soon after. We can't rely on the balance as attachments will definitely change the weight and center of mass.

After watching the robot fail going up battery side first, we believed that the battery holder was getting caught on the bar. after a closer look we saw that the plates that the batteries were resting on were just low enough and stcking out enough to get caught. if given a push then the robot kept driving up without any problem. This also meant that going down was impossible after driving up in the other orientation. The battery mount would just catch in that direction The battery mount was temporary anyways and after the strategy meeting (Jayesh's post) a new controller setup was started.

Arrangement and Rearrangement of Motor Controllers

10 Oct 2015
Arrangement and Rearrangement of Motor Controllers By Omar, Darshan

Task: Find better configuration of motor/servo controllers and power distribution module on the robot

Today, we tried to figure out the best possible way to stick all the motor controllers and the PDM together to minimize the amount of space they take up on the robot. Fitting the finished product into the gap on the back end of our robot would also be a bonus. We had previously thought of one way of doing it: When placed on the robot, this arrangement fit well and did not take up that much vertical space. However, the wires connecting everything were packed up inside and were ungainly, so we took it apart and started over. The next arrangement we came up with was this: (INSERT PICTURE HERE LATER) This one takes very little vertical space, but no longer fits inside the robot and is quite long.

Reflections

We will continue experimenting with these different configurations, since our robot is nowhere near its final form. We might even have to disassemble the entire thing quite a few times in order to get it as good as it'll get for the competition. After further testing the current arrangement of the motor controllers and PDM, we'll decide whether we need to change it up again. Better arrangement will make debugging on the robot during code testing much easier, while also increasing overall organization of the apparati on the robot. To other teams looking into wire management, we suggest to choose an easy-to-reach system that can be easy to adjust to allow for accurate debugging. The system we use fits these guidlines and should be a good baseline for other times hoping to achieve the same type of system.

Gyro-IMU Case

11 Oct 2015
IMU Case By Tycho

Task: Make a 3D Printable case for the Adafruit BNO055 IMU

We're used to having gyros to help maintain heading, but we've never been fans of the Hitechnic gyro sensor. Now we have more options and the BNO055 looks pretty good. But our testing has been off robot so far and we need a way to securely attach the sensor to our robot which bounces around like crazy when climbing the mountains. So in PTC Creo, I'm designing a 3D printable case for this sensor that we can share with other teams. I decided to build a model of the sensor first, so I could play with it in an assembly with other tetrix parts while designing the case. The goal is to have a case that bolts securely to Tetrix channels, doesn't need special screws to hold the sensor in place, is strong enough and is easy to print with no overhangs.

Reflections

The design I came up with is pretty simple - it's a box with a lid that clamps over the sensor and makes an air gap for the sensor components to sit in:

My first test print shows some issues:

  • The standoffs are not perfectly centered under the holes in the board. In one direction it was probably a measurement error. In the other direction I must have made a mistake with a centerline reference when I mirrored the holes on the sensor model.
  • For the same reason, the sensor is not centered in the air gap.
  • The pins on the standoffs took too much filing to get to the right size. I need to make them smaller or turn them into cones or get rid of them and just leave a hole for tiny screws.
  • It only has bolt holes for the Tetrix pattern (compatible with extrusions). Should probably add holes for the Actobotics pattern as well.
  • The bolt holes should be bigger so they don't have to be drilled out to proper size. They were sized correctly in the model but most 3D printers tend to spread filament into the gaps.
  • Should add some kind of strain relief for the sensor wires going back to the DCIM.
  • Fully enclosed, heating could be a problem. Might require venting the air gap or making room for a heat sink.

So while I was able to mount the sensor in the test print by breaking two standoffs and demo that at least it securely holds the sensor to a channel, I'm improving the design and should have an STL we can share with other teams by next week. I'll add an update to this post when it's ready.

Gyro-IMU Case V2

19 Oct 2015
IMU Case V2 By Tycho

Task: Improve our 3D Printable case for the Adafruit BNO055 IMU

Last week I designed a case for our IMU sensor in Creo and wrote up how it could be improved. I've fixed most of those issues and we are ready to share the results. There is one version with Tetrix hole spacing and another that works for Actobotics channels. Either can be used with aluminum extrusions though you might have to drill out the mounting holes depending on your bolt size.

You can download the STLs. The Creo models are available on request - just ask in the disqus below.

Reflections

My first write-up showed a number of issues. Here's how those issues were addressed:

  • There were measurement errors. I guess I need to work on my caliper skills. This time I found a diagram of the board's designed dimensions that removed these errors.
  • I did make errors by not properly using centerlines for mirroring features in my sketches. Cleaned that up.
  • I made the pins on the standoffs smaller to reduce the time needed to clean them up for a proper fit. Now a minute of filing top layer sloppiness makes for a nice snap-on fit. The sensor presses right into place. We tried it with two different IMUs. This is optimized for our Ekocycle Cube, so might not be the right solution for other printers.
  • Added a separate set of print files for Actobotics mounting.
  • The bolt holes were widened so we don't have to drill them out for 6/32 bolts.
  • Added a strain relief column for the sensor wires going back to the DCIM. The column contains a groove to secure a ziptie.
  • We don't have good data on whether heat build up could become a problem.
  • This design is meant to be mounted to the underside of a structural beam if you want the sensor to maintain its standard notion of "up". You can always change that definition in code if you need to mount it with the wires coming out the top.

We hope this design proves useful and please let us know if you can think of any improvements.


Before Scrimmage basic tests

07 Nov 2015
Before Scrimmage basic tests By Lin, Tycho, Omar, Max, Darshan

Task: make sure the robot can run

There's a scrimmage next Saturday that we may or may not be going to based on Dallasisd technicalities with our team. Our goals for today were to get a basic autonomous going to dump climbers and maybe some mountain climbing tests. However, the controller apps needed to be updated and we got a lot of errors when connecting.

Reflections

If the controller gives an error mentioning "USB UART" apparently the only fix is to completely restart the robot controller phone :0 It took us maybe 20 minutes to restart everything, but the robot is moving around. It feels like we have to do this at least every other practice.

Rocker Boogie Tank

07 Nov 2015
Rocker Boogie Tank By Trace

Task: Design and build a basic rocker boogie tank

A few weeks back, I designed a new chassis. It was a combination of the rocker bogey and a tank to make the rocker boogie tank! With the advantage of sturdiness from a tank and the ability to adjust to surfaces from the rocker boogie. This combination is unstoppable!!!

Reflections

The task proved to be easy (just added tank treads to a rocker boogie) but worked. After I tested the prototype on a number of surfaces, it was able to move with ease.

Autonomous Code Part 1

08 Nov 2015
Coding for Autonomous Pilot Program By Tycho and Dylan

Task: Program Pilot Code

Our task was to begin programming for our first version of the Pilot class of the robot using other classes for our angle, position, and controller that we created. The controller class known as PID controller used part of the controller set given to us from the repository but was recalibrated to be in terms of time and independent of all else. This we need to integrate in our pilot class which we will use to tie all programs together for our autonomous program.

Reflections

We still have a long way to go for our program and how we are going to use methods from the private class for the PID controller. We have a few ideas we should follow up on as well as test with our robot. With so many variables we need to make sure that we can have the ability to name each differently but also describe what each variable is describing. In reflection, we have done many of the methods for our pilot program and only need to add a few more so that the variables describing values of other classes changes when necessary. The main parts of the particular pilot program version one are complete and we should be done with the rest of our program next week.

Addition of Beater Bar to Robot

08 Nov 2015
Addition of Beater Bar to Robot By Omar, Ethan, Darshan, Lin

Task: Fix and alter robot to include sliding beater bar

Since the robot's last run, several fixes and adjustments had to be made in order to make the robot operational again. All we had to do was tighten a couple of bolts, so it wasn't that big of a deal. We'll probably have to do a quick check from now on to make sure nothing's falling off. Afterward, we set to using the same beater bar we used last year (the first version, at least) on our new robot to sweep up blocks/balls. The small plates on the front of each of the sides are meant to guide the beater bar's sliding off the robot when being deployed.

Next, we added sliding platforms on which the beater bar is attached so that we can deploy them. [INSERT PICTURE HERE] The mechanism slides back and forth, with the beater bar sliding off the chassis and dropping down to the appropriate height. No motors to run it have been connected yet.

Reflections:

This beater bar is the first step on our way to adding everything necessary to the robot's chassis to allow it to compete. It was somewhat difficult getting all the bolts to line up since we're using some parts from a different building system. With a scrimmage next week on Saturday, hopefully we can slap some motors on it to get it moving by then.

Writing Pose

09 Nov 2015
Writing Pose By Max and Eliot

Task: Create a rough draft of the code for the Pose class

Starting just a few weeks into the competition year, we thought up ideas for a system of classes to allow the robot to navigate to a location on the field on its own, including the Pose class, which we would use to keep tabs on where the robot was on the field at any particular time. With this, it would be possible to make a system where we could simply give a set of coordinates to a function in the code and the robot would work out a route on its own. This has limited use beyond the autonomous phase, but nevertheless would be useful in premade routines (such as automatically ascending the mountains at the press of a button in the End Phase). This code would also be recyclable for next year; two components would change - the specs for the robot and the locations of the obstacles - but unless the entire game takes a drastic turn next year, all of the rest of the code should apply just as it will this year.

In any case, we have been working on a skeleton for a few weeks, and Pose now has some functionality. In our amazing list of features, we have:

  • More variables than the human mind can perceive without flinching at the thought of perceiving so many variables
  • Memory of location, speed, angle, dimensions, and more
  • Three different constructor functions, two of which will likely never be used
  • Read and write functions, because of reasons
  • An update function for telling the class what we're doing
  • Odometry and trigonometry and Euler angles, oh my
  • Being almost useless until we make the partner classes that use Pose's info to navigate

double displacement = (((double)(ticksRight - ticksRightPrev)/ticksPerMeterRight) + ((double)(ticksLeft - ticksLeftPrev)/ticksPerMeterLeft))/2.0;
poseSpeed = displacement / (double)(currentTime - this.timeStamp)*1000000; //meters per second when ticks per meter is calibrated
timeStamp = currentTime;
ticksRightPrev = ticksRight;
ticksLeftPrev = ticksLeft;
double poseHeadingRad = Math.toRadians(poseHeading);
poseX += displacement * Math.cos(poseHeadingRad);
poseY += displacement * Math.sin(poseHeadingRad);

Reflections

Since the robot itself isn't fully built (or fully designed, for that matter) we won't be able to fully finish the Pose code very soon, as the class relies on knowing the robot's dimensions, having access to sensors, etc. We can still improve on what we have now and code for what we plan to have on the finished robot, but final testing won't be possible for a while. We also have yet to tackle the two biggest challenges for the multi-class concept. The first of these will be figuring out a way to tell the robot where static obstacles (field elements) are in a way that human beings can understand. The second will be finding out how to get the robot to use what we've given it and actually figure out directions on its own; I can forsee problems with trying to account for errors like the robot stalling because it thinks it's in a wall, trying to take overly complicated routes, etc.

As it stands, the clearest path of action is to work on a way to model the field and obstacles, and then update Pose with robot specs once the design is finalized. Afterwards, we will use Pose and our obstacle-mapping code to design the navigator class. We are, however, keeping in mind that the tele-op code is as incomplete as the robot is. Coding the tele-op isn't as hard as this amalgamate of classes due to the fact that the tele-op only needs to be updated whenever we add a motor, and even then only a few lines of code are added at a time. Chances are, we work on Pose and its companion classes most of the time, and just make quick changes to the tele-op whenever necessary.

Starting up our Autonomous Code

14 Nov 2015
Starting up our Autonomous Code by Jayesh, Tycho, Max

Task: Get started on autonomous coding

We spent some of the time at the scrimmage today starting up our autonomous code in android studio. The main basis of our coding was put around climbing the ramp, which is our main function of our robot without the rest of the hardware in place. The main point of the code was put around PID and Pose, as PID helped give us our position on the field and Pose helped in giving our heading.

Reflections

The coding differences between this year and last year are mostly in the mainframe of the code. While there are similarities in the defintions of motors and variables in hard coded movement, the new use of Pose completely replaces the use gyro functions such as GoYonderGyro and GyroTurn. Also, with the new interface comes the differences between basic C language and Javascript. We plan to explore these similarities and differences further as we continue to improve both our Autonomous and user-controlled code.

Beater Bar Launch Mechanism

21 Nov 2015
Beater Bar Launch Mechanism by Omar, Darshan, Evan, Max

Task: Design deployment mechanism for beater bar

Similarly to last year, the beater bar on our robot needs to be deployed in order to stay within the size limit. Using motors would make the robot heavier, and potentially too heavy to go up the ramp anymore. Bungee cords are something that we've always resorted to in order to save weight, so we decided to use them once again. By tying them to the back of the beater bar sliders and wrapping them around the robot to create more tension, we managed to make a crossbow-like mechanism that launches the beater bar forward. Small stand-offs were also used to make sure the beater bar doesn't rotate backwards.

Reflections

As you can see from the video, the launcher actually works pretty well. There are a couple of problems with it though. Firstly, the force required to pull the beater bar back to the correct position is is very large, and might not be practical. Secondly, the knots we made, although certified by Boy Scout knot-master Evan, might undo themselves during competition. Thirdly, the beater bar might break due to it repeatedly smacking on the end of the track. Although we're probably going to redo the entire thing eventually, it's a good start towards making similar mechanisms, such as our idea for how we're going to hang on the cliff. We may decide on a design where the launch is done by motors rather than potential energy, but that will be a decision to make later.

Bumper Shields

22 Nov 2015
Bumper Shields By Ethan and Evan

Task: To create bumper shields for the robot.

We needed to create bumper shields because the debris on the field interfered with the tread. We had a prototype on the left,
Evan and I cut the bumper shields out of polycarbonate with two made for the front and two for the back. To do this, we were trained how to use a bandsaw. We cut them down so that they will be moveable.

Reflections

Evan and I will attach the bumpers, and expect them to work well against debris. We do still need to test it on the ramp. The robot's previous state without bumper shields was too gradually damaging to the robot, especially to the things on the very edges of the robot. Now that we have the shields in place we have relatively safety from debris on the field causing damage to the robot.

Driving That Robot

22 Nov 2015
Driving That Robot By Evan, Darshan

Task: To try out the robot in a competition setting

Last weekend Darshan and I tried to drive the robot in a small scrimmage with eight other teams. Even though we hit a few bumps along the competition we were able see how the robot drove and handled. We also saw what we could do easily and what was hard for us. Among the bumps was an incident involving a tread falling off the track because we hit a block at a bad angle. The other bump that happened in the second round was when our robot turned itself off because one of the chains got near the power switch and rubbed it the other way. The things we learned were that there is a small delay between the command and the controller and what we could do on the field. At our stage we can push blocks and get up on the midway zone. We also were able to hit the first lever and make one guy drop. We still have a way to go but with what we know now, we can solve our problems with the system.

Reflections

During the scrimmage we hit a few easily fixable bumps. We are already working on side shields to protect the treads and a bit of something to space out the distance to add space between the chain and the power switch. We are slowly progressing ad should have these issues fixed within the next few practices. As we continue to add new attactchments and overall increase the capabilities of our robot, we also need to increase our driving practice. This will help us perfect our strategy for competition and give us a better chance to win.

Autonomous Code

22 Nov 2015
Autonomous Coding By Dylan and Tycho

Task: Updating and Working on Autonomous Code

Today we continued working on the code involved for the first ten seconds of motion in the tournament known as autonomous. In this period we hope to reach the other side of the field towards the Res-Q beacon to dump our figures from the beginning and then trying to go as high as we can up the mountain. We coded this using our IronDem and the Pose classes to calculate the range and angle of our current location. We are using switch statements to accomplish this and have coded for much of the autonomous period now.

Reflections

The main problem we have run into in our coding is readability and understanding the code thoroughly when we write it. Making simple careless errors must be found easily in this code like semicolons and mispelled variables. Otherwise, we still need to test the autonomous code and make sure that it works correctly. Next week, we plan to finish autonomous and test it completely. After autonomous we plan to start reviewing and coding navigation and the non autonomous code.

Hell On Reels

28 Nov 2015
Hell On Reels By Max

Task: Make a prototype grappling hook of doom.

As the point values make clear, managing to get the robot to hang on the end of the "cliff" is likely worth the effort. As such, we've worked on making a strange grappling-hook type contraption to pull the robot up. This first version works rather like a crossbow. A telescoping fishing pole has its largest loop hooked up to a long "bolt" which extends beyond the pole to a bungee cord tied to a pair of arms on the sides of the fishing pole. A 3D-printed grip is attatched to the bolt, and allows it to socket into the bungee cord and be pulled back by a person. When pulled back and released, the bolt pushes the telescoping portion of the fishing pole, causing it to extend.


Reflections

This part is by no means complete yet. There are 3 main issues to tackle before this can be considered finished. First is a trigger. As of yet, the bolt fires as soon as it is released, so we need a mechanism to hold the bungee taught until the robot is ready and in position to release it. The second issue is making a hook. The telescoping portion of the fishing pole hasn't been modified much yet, but we will need to put a hook of sorts on the tip of the pole. Instead of a more cliche three-pointed hook, the most likely solution for us will be something more like a carabiner, so that we can extend the hook directly towards the churro on the cliff and the hook will clasp around it with a spring-loaded bar. The third and final problem will be closing the gap. We have made a way to propel the pole up to the cliff, but we haven't made a way to pull the robot along after it. To solve this, we will probably just use a cable and a winch, like what is commonly on a fishing pole in the first place. This will likely involve tying one end of a string or fishing line to the hook, and then wrapping the other end around a spool on a DC motor mounted on the main chassis of the robot, so that reeling in the line will cause the telescoping fishing pole to collapse back down to its compacted length.

Prototyping the ramp for the intake system

28 Nov 2015
Prototyping the ramp for the intake system By Jayesh, Omar, Ethan, Evan

Task: Make a physical prototype to plan out the next step in our ball/block intake system

We held a post-Thanksgiving meet to focus on the mechanical side of our robot, as we had been devoting a majority of our time to software and other such things. The problem we faced with our beater bar being installed on two sliding extrusions is that we had to have an incline adjusted to going up two levels and not just one like we had last year. Using an old soda box, we were able to make a flat, tin rectangle and experimented in angle and material until we found a comfortable range for the intake ramp. We will make a more permanent ramp, most likely out of a polycarbonate sheet, soon, now that we have our measurements.

Reflections

Using a prototype before making our actual materials helps us to minimize error as we improve our robot. This simplistic design of a ramp allowed us to experiment and adjust our design until we had reached a desirable range. Our idea for our more permanent final design is to use two pieces, similar to the polycarbonate we use for our border walls, and have it elevate with our beater bar. The bottom piece will be only connected to the base and the top piece. With the flexibility of this plastic, we can make our desired curve and incline for our balls to travel up the intake system. Our next step, after finalizing our design for the ramp, is to make our collection device for the balls/blocks and make that available for us to obtain more points on the way up the ramp. This brings us closer to our eventual goal of scoring as we go up the ramp.

Why we should measure twice, and cut once

29 Nov 2015
Why we should measure twice, and cut once By Ethan, Evan

Task: To redo our bumpers

"Measure nonce, cut twice," is Iron Reign's unofficial slogan, as hidden in our html.

the image's spelling is entirely on purpose

We especially learned the error of cutting hastily today, as we errored in the production of our bumpers.

Evan and I spent multiple practices on working on the front and back bumpers. We easily took ten hours cutting them into their perfect shape. However, after we had placed the bumpers, we found a very unfortunate error; our perfect, hand-crafted bumpers both set us outside the size limit, interfering with our treads and motors.

Reflections

In summary, we should remember to measure before we cut. Before making any apparatus in the future, we need to make sure to measure and calculate the size of what we are placing on the robot. This will both ensure our design works as expected, and our valuable time isn't wasted.

Design and prototype a churro latch mechanism

06 Dec 2015
Design and prototype a churro latch mechanism By Lin, Darshan

Task: Design an alternative churro climber mechanism

Currently Max and Tycho are working on a beater bar 3D part that is stiff enough to pull in blocks, and will hopefully double as a churro catcher when spinning. However, since the parts take 4 hours per set to print, and are harder to rapid-fire test and change and tweak relative to some other options we're going for other options till they're tested. The churro catchers help us to secure holding up the ramp but we are thinking of a similar design we can make with the parts we have.

Reflections


For testing purposes, the stiff flexible part is a very large ziptie, and we're using steel wire as the hook. A motor rotates the axle, extending and pulling back on the hook. The motor is driving the axle with chain and sprockets. The angle allows the wire to go over the churro initially and then hook when pulled back. The angle is changing and we believe that as we develop the idea we will need a one way latch that flips over easily, as there is some trouble with the initial push.

Slide Trigger

13 Dec 2015
Slide Trigger By Max

Task: Model a part that lets us hold back the slide with a trigger to release it

The beater bar mechanism was put on a slide so that we could restrain it until some point during the match, but we had yet to actually build a restraint and trigger to serve this purpose until now. Since the mechanism would likely include rubbing pieces and need customized parts, we chose to model and 3D print the part in nylon to minimize friction and allow for easy customization. The first version (seen below in PTC Creo) consists of 3 printed nylon parts, one being a restraint and the two others (the same model, printed twice) acting as the trigger, pushing up the restraint when pulled back by a string (or something similar) and allowing the slide to move forward.

Reflections

The mechanism generally works well, but the trigger will occasionally fail to push the restraint far enough for the slide to break free. This will need fixing at some point in the future with a new version for the trigger.

General Improvements

19 Dec 2015
General Improvements By Jayesh, Omar, Darshan, Max, Lin

Task: Perfect and improve multiple of our main characteristics of our robot

Iron Reign held its first Christmas break parade today and we decided to focus our time on making multiple small improvements, rather than adding one big part on our robot. Omar, Darshan, and I spent our time on rewiring and fixing our side motors. We found that one side was greatly lagging behind the other, so we tested to see which motor was failing, and rewiring the system fixed our driving system. We also cut out a long piece of Balsa wood to have a platform for our robot to making testing and machanical debugs easier. Needing space for our Churro catchers, we also cut holes in our front bumpers. Trace made a new moving cart for us that is much larger and sturdier. What's even more impress is that he made it without instruction (which he found later were right in front of him).

Reflections

We've spent a good amount of the last few practices on our big ideas, so before we move on to our next big part, taking time to perfect what we have is necessary to ensure that nothing breaks and throws off everything on the robot. Doing these small improvements helps prevent us from doing a lot less work in the future. The cuts in the front actually give us a form of a door flap that we can optimize for future use in our Churro Catchers. Cutting the platforms for the robot gave some trouble, due to the thickness of the wood and the need for us to make two triangular shaped holes for our motors.

Improving the Catcher Design

20 Dec 2015
Improving the Catcher Design By Dylan, Darshan, Omar, Jayesh, Evan, Alisa

Task: Add Improvements to the Catcher Design

Today our team worked on improving the methods of capturing and holding blocks and balls. Our first design involving zip ties had major difficulties including that it had little strength to pull objects in. For this reason, we redesigned the beater bar using a 3-D printer that had stronger materials to capture materials along with frictionless tape which did not cause the blocks to become stuck. Through our tests we can see that the blocks can go up the ramp from the beater bars we created and can easily be stored in our designed holder trough.

Reflections

Our catcher as a whole is only about half way finished. Our beater bars work well yet our holder trough has not been fully added to the robot meaning the blocks being launched up the ramp have yet to be slowed and contained. Once they are, and we add these to the motors our catcher prototype will be mostly complete and only the finer details of making sure the beater bar does not disrupt the ramp or nearby screws on the robot will be needed.

Prototyping the Trough

22 Dec 2015
Prototyping the Trough By Jayesh, Omar, Darshan

Task: Prototype the trough using materials such as cardboard to give us a baseline

'

The team had a meet before the busy Christmas period to focus on the main part of of our scoring mechanism: the trough. We discussed possible courses that would be easiest for us to score points and code at the same time. We went through multiple ideas of how the trough would work. One idea was to have our trough consist of rotatable base to account for both balls and blocks. However, as in the top scoring box of the ramp, blocks are the most effiecient way of scoring. Based on that, we decided to make our design to only hold blocks and able to dispense accidently aquired balls. Our final decision was on a rectangular prism with an elevated back side to serve as a kind of backboard for projectiles thrown by our beater bar. The smaller opposite faces will serve as flaps to open or close to dispense blocks to their respective crates.


Reflections

With our final ideas in mind, we went through our supply of boxes and found one that best fit our idea. Then, using a sheet of cardboard we figured out the actual measurments we needed for the trough and cut out the best model possible. With our model finished we can get started on actually making the trough and designing the systen needed to score our blocks. An early idea is to have a pulley system that can be exchangable depending on the side we are on. For example, if we are on the blue alliance, our pulley system will be right dependent and vice versa. We will have to also make code respective to both sides and switch out before our next match. Now with the prototype done, we can simply recreate the trough using better materials and begin construction of the pulley system.

Churro Hook

24 Dec 2015
Churro Hook By Max

Task: Model a part to help the robot climb the churros on the mountains

Most of the big-value items in terms of points have to do with the mountains, so climbing mechanisms are a must have. Since the tank treads have problems scaling the churros on the middle and upper mountains, we need another way to pull the robot higher. Our solution was to put hooks on the ends of long, heavy-duty cable ties that we could extend and retract using a DC motor. We decided to make the hook a 3D printed part so that we could fold it and store it inside the robot until first deployed. We ended up making three different versions (all are below, as they appear in PTC Creo) as problems showed up with the first and second version.

Reflections

The final version of the churro hook works well, and with two hooks mounted on one motor (geared down for extra torque), the robot is able to reliably pull its own weight up the ramp after hooking on to a churro. Unfortunately, the axle that controls the movement of the hooks gets in the way of the trigger for the slide mechanism, so a remake of the trigger model is due some time in the near future.

Optimizing the Churro Catcher

27 Dec 2015
Optimizing the Churro Catcher By Jayesh, Omar, Darshan

Task: Improve and fix our Churro Catcher + finalize design for trough

The team met up on Sunday and we focused our meeting on finalizing our trough design and making our churro catchers usable. Beginning with our trough prototype, we put in an angled metal piece to the main box compartment and shortened the height of the box. This height was specific to the height of the blocks, allowing us to shave off blocks that become stacked upon those that we've already collected and allow us to stay under the five-object limit during the match. After testing the perfected design, we moved onto testing the churro catchers. We found that we needed alignments along the ridges of the metal beams that carry the catchers to make sure the catchers actually extended past the robot. Past that, we found that the beam holding the motor controlling the in/out motion of the catchers was causing the beam to bend inwards. This caused the two gears to progressively bend the drive chain between the two and stalling the entire system. We fixed this problem by making a mechanical stop by rotating the motor and placing to larger gears with a 3:1 ratio.

Reflections

With our model for the trough finalized, we can begin construction of the actual trough with much more sturdy material. Our design, which includes the bottom semi-ramp, will most likely be a cut T-shaped container that is directly connected to the ramp. This design allows the blocks we pick up to go on a singular path to our container and minimize the chance of the blocks getting stuck on one of our side beams. We plan to place small spacers throughout the upward path of the ramp to prevent these posibilities. We figured out the reason our catchers weren't working at first was because the motor wasn't initialized in the hardware map on the robot controller phone. Figuring out the mechanical error, the churros now run purely on a gear based system and doesn't use a drive chain anymore. Now the main objective is to place our actual trough and the robot and finish up this year's scoring system.

Improvements to Churro Catcher and Ramp

29 Dec 2015
Improvements to Churro Catcher and Ramp By Jayesh, Lin, Omar

Task: Make improvements to Churro Catcher and Ramp and make blog more accessible

Iron Reign held our first of two meetings before the New Year season to concentrate on improving our main designs to ensure they worked as expected. Starting with our Churro Catcher, we found that as the motor moved the two arms down, the tension in the two churro climbers was two low to actually push out the latches forward from the robot. We built two small metal segments that ensured the two long strips didn't get pushed out and that tension transferred to the lower part of the wire, fixing the problem and pushing out the strips to the desired range. Relating to the intake system, we found that as the blocks were pushed up the ramp, on rare occasion, they would become stuck on the side beams of the robot. Realizing this, we cut out small cardboard pieces and inclined them on the ramp, covering the side beams and they acted as guides to the offending blocks, pushing them back on to their desired course.

Reflections

Our usual strategy of designing our main aspects of the robot, and then spending time to perfect them saves us a lot of future time wasted. Once we finished up the ramp and churro systems, we immediately set to figuring out what was wrong with each system. Finding the errors, in this case the blocks falling on the side and the incorrect spread of tension in the strips, we can add or take away certain things to perfect our design. With these two scoring mechanisms done, we now need to concentrate on distributing our weight on the robot and ensuring our churro catchers can actually help us climb the field ramp. With our first qualifiers fast apporaching, we need to concentrate on what we can do well and make those things secure in our strategy.

Climber Restraint

30 Dec 2015
Climber Restraint By Max

Task: Model a part to keep the churro climber cable ties on path

As we continued to work on the churro climber mechanism today, we decided that the cable ties bowing out would be a big issue that needed fixing. By making a small guide piece, we could ensure that the cable tie actually extends from the front of the robot instead of flopping around like overcooked spaghetti on the other side. So, I've made a rather simple model that can be bolted over the cable tie and on to the extrusions of the sliding mechanism.

Reflections

It works well; after running some tests, it seems to have resolved the issue entirely, and the cable ties reliably extend from the front of the robot. The movement of the sliding mechanism doesn't affect the ties in any bad way, which is a nice plus.

Slide Lock

30 Dec 2015
Slide Lock By Max

Task: Model a part to keep the slide from going too far forward

Since we mounted the beater bars on a slide, we have been keeping them from going too far and falling off their rails either by obstructing them with a couple of bolts or with a bent piece of steel wire, but neither method is fool proof. The wire can get bent out of shape as the slide moves forward and collides with it, and the bolts can fall out or damage the metal of the slide itself as they collide. To solve this, we decided to make a 3D printed part to serve as a lock. This went through several iterations in design (all can be seen below) before we were satisfied, and we printed out two copies of the final version in nylon so that they would be strong, but still a bit flexible so that we could pry them up and remove the whole slide mechanism for maintenance if need be.

Reflections

The parts serve their purpose well. The only issue with the version we are using is that the thickness of the beam connecting the hook and the attachment point is so thick that prying up the pieces is more difficult than originally intended, but it is still possible and further revisions to the part will likely be too time-consuming for their benefits to oughtweigh those of putting the same time into programming the robot's autonomous routines.

Rebuilding the Churro Climber System

30 Dec 2015
Rebuilding the Churro Climber System By Omar, Darshan, Max

Task: Fix bending axle on churro climber permanently

After further testing of the churro climbers, we noticed that the axle the gear is rotating on had been bent severely due to the strain on it of the arms pulling. If we left the axle as it was, it might wreck something else later and become unusable, so we tried to figure out a way of creating something that served the same function as the axle but wouldn't bend as easily. We decided on using long, slender aluminum tubes that Max put together with the gear that drives the arms forward and backward. They will most likely retain their integrity, but one flaw with them is that if they do fail, they will fail much more catastrophically than the axle would have, and would be much more difficult to replace. We're riding on our confidence that they'll hold throughout the strain.
We also 3D-printed and installed a couple of things (Max-designed): first, small guides that the arms can move through so that they push forward and pull back the way we want them to; and second, longer pieces that hold the beater bar back while it's waiting to be released.
As a small quality-of-life improvement, we have added a couple of pieces of cardboard to the sides of the beater bar today to block game elements from getting stuck in the empty spaces that are there.

Reflections

After further testing, we found that the axle actually did crack at a weak point it had. It's been fixed and hopefully the same thing doesn't happen again since we fixed its weak point. With our first competition approaching, this new mechanism is a very good step towards the completion of our robot, but we still have a lot to do. We might not have even needed to replace what we had had we given it a few more supports, but this is overall a better design anyway and was worth the time. Little improvements are also nice whenever they can be made. Our design of the supporting churro axle caused it to not hold up to the tension the churro catchers, which caused it to gradually bend inwards. This new design rids us of that problem, as the tension is now spread throughout the axle rather than at one point.

Prototyping and Making the Flipper

02 Jan 2016
Prototyping and Making the Flipper By Jayesh, Omar, Darshan

Task: Design an apparatus to deposit the climbers in the beacon bucket.

One of the methods to score in this year's competition is depositing the two climbers in the bucket behind the beacon. This being relatively simple, we decided to concentrate this practice on creating something to get us these easy points. We discussed possible ways to deposit the climbers and came up with a design that used some of the scoring mechanism we already had on our robot. The idea was to have a long thin, box-shaped platform to hold our two climbers and have it held down by bungie cords. Using the spinning motion of our churro catchers, we would release the cords holding down the platform and thus releasing the potential energy created from the cords. This would cause our boxes to incline down and the climbers to slide down into the bucket.

Reflections

After finishing our thoughts on the design, we first measured out the minimum space required to hold our two climbers. Then, we added a little extra to each of our dimensions to allow for error in the down motion of the climbers. First making a prototype made our of cardboard, this allowed us to test if our idea actually worked. Then, with the errors fixed using our prototype, we made our actual platform using the prototype as a base model out of plastic. Then we attached our metal platform to hold it over our top center beam and shaved off the top edge of the platform to keep it under the size limt. Now we have relatively easy points in the form of our climber depositing system, which will help us in our competition.

Slide Trigger (Revisited)

03 Jan 2016
Slide Trigger (Revisited) By Max

Task: Remodel the slide trigger mechanism to compensate for mechanical problems

Reflections

Starting Color Blob Detection

05 Jan 2016
Starting Color Blob Detection By Omar, Max, Tycho

Task: Implement color blob detection on the robot for detecting beacons

Even though this was very long overdue, we now have a way to turn towards a certain color similar to what Argos does. What we're basically doing is calculating the angle that the robot is off-center of the blob it's tracking, and letting it correct for the error and straighten up with our PID code that's already in place. Right now, it doesn't actually move backwards and forwards, only turn on its axis, but we can soon get it moving around following colors. --NEEDS VIDEO HERE--

Reflections

This year's competition gives teams that can detect the colors of the beacon a huge amount of points, which includes dumping the climbers in the baskets and pressing the buttons. It's very important for us to be able to do this if we hope to be successful in our first tournament that's less than two weeks away. With the ablity to now direct our robot towards the colors, we can have more overall points during autonomous and tele op.

Functions of our controller

09 Jan 2016
Functions of our controller By Alisa, Ethan, Trace

Task: Listing out the functions of our game controller

In order to find a button for our argos mode drive, we made a rough draft of our game controller listing the functions of each button. For example, the 'X' button is for the churo climb, the 'A' button is for our beater to stop, etc. We had about 5 unused buttons so in the end, we decided on using the top left button for argos mode drive. Now that we have all our function per button lsited out, it will be a lot easier to use this diagram for reference if we ever need to add another function or forget what a button does.

Reflections

From now on, we should well-document everything about our robot, as we had to look in the code to actually see what our controller layout is. As well, we really, really need to let our drivers practice because they should have known the buttons as well.

Tape Measure Attachment

13 Jan 2016
Cliff Hanger - Tape measure based climber By Trace and Max

Task: Creating an attachment to climb the mountain


We have recently been working on a new approach to climbing the mountain. Our strategy so far was to have one system customized for climbing the mid and upper mountain (Churro Climber), and a separate system for climbing the cliff (Crossbow Grapple). The Churro climber system was beginning to work but it was floppy and we were thinking about stiffening the nylon extensions with measuring tape material. The Crossbow Grapple was working by hand, but we still hadn't mounted it to the robot and hadn't figured out how to rig it with a winch and servo trigger.

Then while researching grapples we stumbled on robots using tape measures as self-supporting winches. Brilliant! Many FRC robots have used this type of solution where it goes back at least as far as 2010:

And FTC teams are using the idea this season. We were inspired by how well team 6081 does this

This approach lets us simplify from two separate systems into one system that is much more compact. It also lets us switch to climbing the mountain in the opposite direction than we had been, which can extend the reach of our debris trough and maybe let us deposit in the highest debris container. It also seems like this approach could be more durable than what we what we've been working on.

Our design is composed of a tape measure and motors to pull or release with a hook at the end to grab the churros and upper bar. Team 6081 posted about their design, but we wanted a lighter version so we tried direct drive and Max designed a new 3D printed spool without a retracting spring in it. We bored large holes through the sides to allow motor hubs to stick out. We had to saw off a corner of the original case because it was limiting its own rotation to the elevation angles we needed. Then we drilled more holes in the case to attach the servo linkage that controls the elevation angle. Max designed a custom hook to go on the end and printed it.

Reflections

In our first test, the tape measure broke (because we over-retracted it). It also has a problem where the tape extends out through the hole we made in the case when the tape is physically prevented from pushing outward. But if you avoid these situations, the tape measure seems very successful and was able to pull the robot all the way up the mountain. We plan to use this in our competition this week (yay!!).

This system is very important and will help deliver many points in the near future. In contrast to our previous pair of climbing systems, this is very practical and will be easier to use for the driver and it will work most if not 100% of the time. I hope this will be just as helpful to everyone else too.

Conveyor belt

21 Jan 2016
Conveyor belt By Jayesh, Max, and Darshan

Task: Create continuous method of scoring blocks

Since we have a semi-reliable form of going up the ramp (which we are working on to make closer to 100% efficiency), a priority for our team robot-wise is to establish an effective method of scoring blocks. We've designed a preliminary model with our old plastic trough that uses a conveyor belt made of fabric and foam sewn together that we tried to use before but decided not to. The foamy material proved perfect to drag the blocks. Basically the beater bar drives blocks into the trough, which flips up due to rubber bands and a servo.. The blocks drop into the bottom (before on the top since it hadn't been flipped) conveyor belt portion and turn another servo to move the belt to make the blocks head towards whichever side we wish to score in.

Reflections

As we are aiming for the 80 points in hanging off the top bar, we wanted to ensure that we score as many points as possible to make our victory more assured. The conveyor belt, similar to our system from last year (except horizontal), gives us a continuous scoring mechanism as we ascend the ramp. We hope to test the utilization of both our conveyor belt and our (new) climber system before the new week begins and get some driver practice in before next Saturday. Our scoring system should help us win more games, especially with the hang and blocks in place.

It's a Bloodbath

23 Jan 2016
It's a Bloodbath By Ethan, Alisa, Max, Darshan, Jayesh, and Tycho

Task: To dye all our nylon parts red

Today, we took every single 3D-printed part off our robot to dye them. We used RIT clothes dye, which worked because our parts are nylon. The purpose of dying all our 3D-printed parts red was so that they would stand out from Tetrix parts while demonstrating the robot. It was a bloodbath. The color was the color of the Nile during the Plagues of Egypt. It seemed as if we were in the bible. But, like the Israelites, we prevailed, and came out with really cool red parts.


Reflections

Last season, all of the parts on our robot that were 3D-printed were orange, which made us very noticable and memorable. We didn't have anything like that this year, so dyeing all the parts red will hopefully help the judges and other teams remember us at future competition(s). Red is also darker than orange, which means we're more serious. Grr.

The Double-Wide Experiment

23 Jan 2016
The Double-Wide Experiment By Jayesh, Max, Dylan, and Evan

Task: Strengthen our tape-measure climber against folding and sideways forces

Our tape measure is constantly under stress, which usually isn't a big problem if the driver is positioned with a straight 90 degree angle, but when twisted can result in cracks.

While our tape-measure design worked decently at our competition last week, with multiple mid zone scores and one high zone score, we are going to need more consistency to be a valuable ally in our matches. At competition we saw the tape fold multiple times, requiring a new retract/extend cycle that wasted time and often required reposositioning heroics from our driver. Mostly this was due to the hasty replacement of the dead servo that controlled the tape's elevation. The replacement didn't line up with the previous one and might have had a different programmed response range. As a result the preset angles were all wrong and it took us a few matches to reprogram usable elevation angles. In the mean-time drivers had to jockey the robot into weird positions that challenged the stability of the tape. So we'll fix the problem with better servo maintenance, but in the mean-time we thought that maybe we could also stabilize the tape by adding a buddy. Thus the double-wide (slit) experiment.

Now we have two custom printed tape spools on a shared axis. Max designed a new 3-D printed case to hold both. The case floats on the axis and rotating the case is what sets the elevation of the tapes. Since our design does not use the original spools of the tape measures with their counter-springs, our tapes naturally want to extend out of the case. This simplifies our design so that we don't have to push the tape out with a drive wheel, but it also increases the power needed to retract the tapes. Now with two tapes there is even more resistance to retracting the tape even when the robot is not lifting. So we switched from two regular Neverest motors to two 60:1 versions with increased torque. With two tapes, there is also less strain on each. Ripping tape was another competition experience that we want to minimize.

Reflections

A consequence we didn't predict is how much weight the second tape adds. When testing the new design we discovered that this extra weight adds considerable force against the servo that controls elevation - particularly when the tape is extended out to the 3 feet or so that we need to disengage from the last churro prior to coming back down the mountain. We need a way to counter this extra weight and relieve the servo of the burden. Probably more elastic materials.

We also discovered that the servo linkage point on the custom case needs to be moved to give a better range of articulation based on where the servo is mounted. Max has already made the design improvements and we are printing a new case overnight. It takes our printer 11 hours to print both halves of this case design.

We are hoping that all this effort leads to a reliable 80-point hang for next week's competition. We are trying to make our control scheme as easy to interpret by our driver as possible, so we are implementing a mountain mode that should simplify things. Now, we need to focus on our conveyer belt system to score blocks as well as climb the ramp.

Pushing my Buttons

28 Jan 2016
Pushing my Buttons By Ethan and Max

Task: To build a button-pusher for the beacon

Today, we realized that the tape-measure attachment that's supposed to push the buttons on the beacon could have multiple functions instead So, we designed an attachment to the tape measure that can push any buttons, including people's. Max designed it in PTC and then printed it. We have yet to actually test it on the robot, but it works in-hand.

Reflections

This is just our first design, and it has not been tested much. We feel that we should redesign the spikes to be deeper in the next version, and also not as densely packed. Further testing will reveal what the next step needs to be.

Fixing Up Our Climber and Trough Attachments

13 Feb 2016
Fixing Up Our Climber and Trough Attachments By Jayesh, Max, and Omar

Task: Replace servo on CliffHanger with a motor

At both competitions we've been to so far, we've noticed that the servo that controls the cliff hanger's elevation often stresses and heats up due to the strain being put on it, especially near the end of the match. It has already scorched quite a few of our fingers. To remedy this, we decided to replace it with a full-blown NeveRest 60 motor so that there's no worries of blowing it out. Additionally, we've also done some readjusting to our trough mechanism.

Reflections

The new motor will take away a lot of the problems we've been having with the cliff hanger being inconsistent. We won't have to worry about taking the robot off of the field as quickly as possible after a match to prevent killing the servo now. The motor is also plenty strong enough to turn the tape measure even with it extended. Although we'll have to tune the motor to turn to the correct angles again like we did with the servo, it'll be worthwhile since we won't ever have to replace it and re-tune.

Hoverboards and PID

09 Apr 2016
Hoverboards and PID By Lin, Omar, Darshan, Tycho, and Max

Task: Continue with the Hoverboard and tweak PID

After the long weekend last week, today was a reasonably relaxed practice. We decided that we could work on anything, as long we stayed focused. The two main foci were the -Robot on a Hoverboard- and fine tuning our PID for autonomous.

Reflections

We experimented with balancing the robot more evenly on the hoverboard to keep it on a straight path and then getting creative with the controls to speed it up. We found that we could effectively rocket it forward by extending and angling the cliff climber while flipping the block dispenser forward at the same time. While it was easy to send the robot forward, there was little we could do to recover outside of just pushing it back by hand. This created a game of hot potato as we passed the robot around from person to person, but was ended rather abruptly when it careened into the table.

If we're going to get our autonomous functional for UIL then we need to fix our PID. We used the parts of the current autonomous demo to check the straight line gyro drive, and went from barely correcting, to crazy oscillations, to a good level in between. This took a decent amount of tweaking for K-proportional, and when we felt we were straddling the line between too much and too little correction we messed around with K-Derivative to be better prepared. After the initial gyro guided line the robot is programmed to do a 45 degree turn towards the beacon, and then fine tune its angle using color blob. The color blob detection seemed to track the selected color accurately, outlining the area in neon green, but for some reason didn't turn to aim at it. If anything it turned away from the beacon. We found a mistake in our error calculation, where leftover error wasn't properly cleared before the guided turn, that we believe caused at least some of the odd turning behavior.

Making a Ports Map

28 May 2016
Making a Ports Map By Omar and Jayesh

Task: Create a list of motors/servos and what ports they're connected to

Very often, when we disconnect a motor or servo (maybe on accident), we forget what port we got it from. This even happened to us today when we unplugged the servo that lifts the trough. Because of this hassle, we decided to write out a list of all the motors and servos on our robot and what port they're connected to so we can refer back to it if we ever forget where we took something from again.

Reflections

This didn't take us much time at all and was easy to do, so we might want to make a lot more of things like these in the future to keep ourselves organized. Organization is definitely something we need to work on for this next competitive year, and even small things like these help out with that.

New tread material test

11 Jun 2016
New tread material test By Lin, Tycho, Max, and Evan

Task: Initial tests for new tread material

The standard Tetrix treads and tread inserts aren't nearly as sturdy as we would like. When they snap it's a real effort to put back together stretched over the idlers, and the inserts peel apart, bringing our traction down. The new material is a rubber conveyor belt material from Andymark, and the underside track chain is 3D printed in nylon to mesh with the track drive gears. Outside: high strength high traction rubber Inside: 3D printed nylon to mesh with gears

Reflections

We first glue the nylon sections to the treads, laying them out flat so that some of the nylon hangs over one end and let them set overnight. The next day we bend it into a loop and glue the overlapping nylon and rubber together, and then let that set overnight. This isn't strong enough alone, so we ended up using the awl (used previously in Cascade Effect's game) to stitch at the boundary between two nylon strips, sort of like a thread staple.

Initial tests showed that this design was a huge step up from the tetrix treads, and we're working to make another to complete the pair. One downside is that this design is a much thicker design, and rubs on the underside of other parts that weren't previously a problem.

2016-2017 Robot

15 Oct 2016
2016-2017 Robot By Ethan, Omar, Jayesh, Evan, Tycho, and Max

Task: To build the robot for the 2016-2017 season

As much as we love our robot from last season, Geb, we need a robot that is better able to fit the season's challenges. Our needs for this year are:

  • Manuverable and fast
  • Able to play defensively
  • Can support attachments such as an intake system
For manuverability, we decided to use mecanum wheels.

The cool thing about these wheels is that they enable you to strafe side to side, instead of turning. However, they do require different coding than our normal wheels.


To play defensively against other robots, our robot must be decently sized without falling into the same trap of last year, where are robot barely fit into the sizing limits, and in one tournament, did not at all. As well, it must be heavy enough to not be pushed out of the way by other robots, especially due to our strategy this year (blog post on that later).

Finally, our robot must support attachments. Currently, we are considering a launcher, and intake system, a circulation system, and a yoga ball-lifter. And, to accommodate all of these attachments, our basic frame is a re-enforced square frame.

Experimenting with a Mecanum wheel chassis! #ftcrobotics #omgrobots

A photo posted by Iron Reign Robotics FTC (@team6832) on


However, we are still experiencing problems, such as our chain falling off due to the supports moving toward each other. As well, we probably need to find a better place to put our motor controller and battery.

Reflections

We need to get our robot effectively finished within the next month if we are to go to the Arkansas tournament. As well, we need to add supports to our robot to stop the chain issue. Within the next two weeks, we should have made one or two attachments.

Programming our New Robot

15 Oct 2016
Programming our New Robot By Tycho, Lin, Ethan, and Jayesh

Task: Program our new mecanum wheel driving platform

Now that our new robot has been built with a mecanum wheel platform, we can start write our drive code and figure out how to make our robot preform three basic motions: forwards and backwards, side-to-side and to rotate. We decided that, in order to get the best understanding of our robot, how it moves and our code, that we would try to write our drive code through trial and error. However, we did reference some guides written by other various FTC and FRC teams if we got stuck on something and needed to figure out where to start in solving the problem.

Reflections

In order to drive our mecanum wheels properly, we need to first discuss how each wheel is placed on the robot, and also how each wheel needs to move in respect to the others in order move in a certain direction. Each wheel has small rollers that point 45 degrees off of the larger wheel itself. In order to properly set up mecanum wheels, the rollers on each wheel have to point towards the center of the robot.

This is important, because if these wheels are not pointing in the proper direction, then the rollers will begin to fight against each other, causing strange driving patterns that aren't very useful. We learned this the hard way, because when reconstructing the wheel mounts, the positions of two wheels on robot were flipped, causing the robot to drive in circles when we tried to drive sideways.

The main reason we decided to go with mecanum wheels is because they open so many different ways to navigate the field. Robots that properly use mecanum wheels can not only go forwards, backwards and turn, but they can also make a robot move side to side. These three types of movement can be mixed with each other to do even cooler things like move in diagonals or even strafe, which is when a robot moves in an arc while moving sideways. Of course, we cannot use mecanum wheels to their full potential if we do not first understand the first three basic types of movement. Driving forwards and backwards is pretty simple, and it's the same as any other robot; all of the wheels have to move in the same direction. Turning also remains unchanged from other platforms; the left side of the robot has to move one way, and the right side of the robot has to move the other.

However, moving side to side is not really intuitive compared to the others. In order to move side to side, the wheels on either side have to move opposite of each other. For example, if I wanted to, from a top-down perspective, drive to the right, the wheels on the left side of the robot would have to drive away from each other, while the wheels on the right side of the robot would have to drive towards each other. The rollers start spinning away from the center and to the right on the left side of the robot, or towards the center and to the right for the right side of the robot. The forwards and backwards components of the wheels and the rollers cancel each other out, and the robot moves to the right.

Need for ZTE Speed - The Movie - The Game

22 Oct 2016
Need for ZTE Speed - The Movie - The Game By Max

Task: Make a case for the ZTE Speed controlling the robot

While we are still in the early stages of design and it's not wise to make a permanent decision about where the robot's controlling phone will be, we can't let it float freely around the robot like a brain in a jar for much longer or it'll start getting caught in the developing systems. Normally, we could solve this easily by drilling a few holes in an off-the-shelf phone case and bolting it to the robot, but both the robot's design and the phone's code are constantly changing, so this would be far too permanent. We decided that the best way to house the phone would be a custom-made case with plenty of bolt holes to make it easily mountable and removable as well as a front which can be taken off at any time so we can take out the phone to reprogram it without driving ourselves insane.

I decided to make the case a pair of 3D-printed parts: a sturdy base made of t-glase which can be bolted to the robot and can easily socket the phone, and a flexible nylon cover plate which is kept in place by tabs which wrap around the base component but can be pulled out of the way when the phone needs to be put in or taken out.

Reflections

It took a few iterations before we printed the pieces, but the system as a whole is working smoothly. The phone is easy to replace and so far we haven't seen the cover come off once while the robot was driving. The only forseeable issue is with the tabs. Although they are flexible enough for our purposes, they are thin enough that they can be broken if bent too far. Since the face plates don't take too long to print and the 3 tabs left over after one breaks are still entirely capable of holding the phone in anyways, this shouldn't be too much of an issue, but it's still something to keep in mind for the future.

Launching Mechanisms

26 Oct 2016
Launching Mechanisms By Ethan

Task: To build a launching mechanism for the particles

For the 2016-2017 season, particle scoring is really important. During autonomous, balls that are launched into the center vortex earn 15 points each, and balls that are launched into the center vortex earn 5 points. If done quickly enough, the particle scoring can negate most of the advantages another team has - just 8 particles scored during the driver-controlled period is equivalent to scoring all 4 beacons. With a good scoring mechanism, the only thing that your team must contend with is the other team scoring autonomous beacons and/or moving the cap ball off of the field.

So, we must seriously consider all of our launching options. We narrowed our options down quickly:

  • Slingshot - Easy to make, but wouldn't hold up
  • Air launcher/Pneumatics - With our team, bad idea waiting to happen
  • Crossbow - Dangerous, but accurate.
  • Flywheel launcher - Accurate, requires least maintenance, but huge battery load
  • Catapult - Less accurate, but simple and powerful
Of these options, we narrowed it down to the Flywheel and Catapult

Flywheel

Above is an example of a fully functional flywheel. The pros of that design are that it is efficient, accurate, and requires little upkeep. On the other hand, it needs at least 2 motors unless someone is willing to do gear witchcraft. As well, two extra motors will drain the battery (bigly), as we learned from last year's mountain climber. Finally, it can take up quite a bit of space on the robot and weigh it down a lot.
Also, my initial model of it did not function well.

Catapult

We had trouble deciding on a catapult design. Initially, we were considering a more complicated flipper design, but after seeing our sister team's struggle with their design, we decided on a simpler, bungee cord design. The pros of this design are accuracy, simplicity, and strength, but the cons are that it isn't *as* accurate and that the elastic band will need to be replaced.

The coolest thing about this design is that it can be simulated before I change anything, using a catapult simulator. A sample of our catapult can be found here.

Reflections

This add-on is the first of many that we must make to prepare for competition. Next, on the build list, we need to create a capping attachment and intake system. In the future, we should probably speed up our development process if we are to head to the Arkansas regional tournament.

Ready the Artillery

29 Oct 2016
Ready the Artillery By Max

Task: Design a bowl for our upcoming catapult system

We've been experimenting with catapult systems for a little while now, but we're still sorely lacking one of the core ingredients of any catapult system: the ability to throw things. I mean, technically we're lacking the ability to hold what we're trying to throw, but it's the same effect.

In any case, it's an issue we have to deal with, and our solution is good ol' nylon. I went through a few designs for a bowl to hold balls, and the one we're using is pretty much a semicircular shell with a handle which mounts to the arm of the catapult and plenty of holes to lower the weight while keeping it sturdy.

(herecomedatbowl.jpg)

Reflections

The bowl is a great fit for the ball and doesn't seem to interfere with the strength of the catapult, but there are still two issues which we can't address yet.

Firstly, we haven't gotten a loading mechanism planned out yet. We can make the catapult as strong and reliable as we want, but beyond the first ball we're allowed to load for autonomous, it won't do us any good until the robot can actually take balls from the floor and load them into the bowl. That might not seem very pertinent to the design of the bowl, but since it's the only physical interface between the loading mechanism and the catapult, it'll be the first thing to change if the two don't fit together on the first try.

The second issue is just that cleaning out the printed model is an utter pain. Again, this is no reason to change the model right now (and it probably won't be one later on, either), but since we're likely to have at least one more version in order to solve whatever issues we encounter while developing the loading mechanism, there's at least a 90% chance that another catapult bowl will need to have its support structure gouged out over the course of an hour. I just feel sorry for the poor bugger who has to do it.

Yeah, it's probably gonna be me.

Launching Mechanisms Pt. 2

31 Oct 2016
Launching Mechanisms Pt. 2 By Ethan

Task: To improve upon launching mechanism designs

Catapult

First and foremost, we now have one completely functional, terrifying, catapult. The motor mechanism is cannibalized from our sister team's attempt at a catapult, which broke apart on testing.


Flywheel
So, while we don't have a functional flywheel as of yet, we have done the math in order to get it up and working on the first try.

For reference, we need to launch the ball ~1 meter, the frequency of the motor is 2.53 s^-1, and the radius of our gear is 2.65cm.
velocityfinal^2 = velocityinitial^2 + 2*acceleration*change in y
velocityfinal = sqrt(2*9.8m/s^2*1m)
velocityfinal = sqrt(19.6m^2/s^2)
velocityfinal = 4.427 m/s

actual final velocity = 4.427 * 1.25 = 5.534m/s
actual final velocity = 2*pi*radius*frequency
(5.534m/s)/(2*pi*2.53s^-1) = .348m

gear ratio = gear1radius/gear2radius = 2.65/.348 = 1:7.615
However, for simplicity, our needed gear ratio is 1:8.

Reflections

We should advance in building our attachments - if we go to Arkansas, we have <6 practices to go. And, from now on, we need to do the math behind them so we know we're doing them right.

The Robot is a Nautilus Now

02 Nov 2016
The Robot is a Nautilus Now By Max

Task: Make a conveyor shaft to guide particles to the catapult

We’ve thoroughly proven that the tread of rubber bands is an effective method of ball collection, but as of yet it can only move the balls along the ground. We’ll need a way to move them upwards to the catapult bowl’s level. While we could use another motor to push the particles up and over the belt, it could get caught and we’d rather not take up another motor port. We decided to instead make a semicircular tube to guide the balls, with no motors of its own, but instead simply keeping each ball in contact with the center belt as it turns around to move back to the front of the robot.

After measuring how large the tube would have to be to house the ball, it was clear that it couldn’t be printed in one part (not that I would have if I could - the infill would be a nightmare to remove), so instead I made a model for a segment of it which can be printed several times and then bolted together at a few built-in sockets. Each segment accounts for 30 degrees of the 180-degree arc we plan to build. A segment can be seen below.

Reflections

The model prints well, connects easily, and sockets the particles perfectly, but it lacks the friction required to keep them from spinning in place instead of moving up the tube. We were able to solve this by applying a stripe of memory foam to the inside of the tube with double-sided tape.

Parasyte

06 Nov 2016
Parasyte By Jayesh, Omar, Darshan, Lin, and Max

Task: Design a collector for the balls

We've spent the last few practies creating a ball collector. The idea was to have our track with the gripping rubber bands reach from the bottom of the robot to our 3D designed ramp. The path would guide the balls to a higher position on our robot to the launching mechanism. We needed to adjust the correct orientation of the support beams guiding the balls, needing to drill new holes and adjust beam lengths.

Reflections

There have been a lot of adjustments we have had to made to the this tread-based system. Starting from an eyeball test of the length, we had to eventuall lengthen the whole tread to fit the whole system. With our length being about finalized, and our entire path about done, We are about ready to attach our launching mechanism and start adjusting the scoring mechanism.

Mecanum Driving

13 Nov 2016
Mecanum Driving By Tycho

Task: Code driving under mecanum wheels

Today, I wrote the whole code for controlling our mecanum wheels. It is entirely fron scratch, and works perfectly right off the bat. This code allows us to strafe, move backwards and forwards, and rotate, in one method.

Reflections

We still have a lot of coding to do, as we're currently working on a particle-launching system. As well, we need to consider autonomous soon.

Intake System Improvements

21 Nov 2016
Intake System Improvements By Lin and Janavi

Task: Replace rubber bands with smaller versions and add wider intake area

New intake area is wider than before


At the Scrimmage we noticed that the rubber bands would get tangled as they rubbed against the underside of the catapult bowl, and so didn't reach as far down at the bottom. We untangled them before each match but decided to test out the smaller ones when we had the chance at practice. We were planning on adding a wider area for intake with some circles of treads and rubber bands, but with the long rubber bands they just got completely tangled in each other. So this practice we replaced the long rubber bands with the shorter versions and looked at differences

Reflections

It took a little while to physically pull out and replace each band, but the rubber bands we use are stiff enough that they can be pulled thin enough to slip in without getting twisted up. The single conveyor with the smaller rubber bands wasn't any noticeably worse than the same conveyor with longer ones, and our load rate stayed pretty much the same. We then added the smaller side brushes/spinners on that axle. Originally the longer rubber bands tangled up and threatened to break the belt, but this made it easier for Tycho and Omar to score. The added wheels on the axle make the intake area almost as large as the robot, stretching from wheel to wheel.

Catapult Unfixes

22 Nov 2016
Catapult Unfixes By Ethan

Task: To bring the catapult within size limits and improve it

What Actually Happened: Abject failures

So, the original catapult, when not stuck, performed pretty well at the scrimmage. However, since we opted not to measure our robot at the scrimmage, we didn't realize that our robot was not within the FTC size limits. When measured after the fact, it was 18x19x20 in x, y, and z axes respectively, due to the catapult's position on the robot. To rectify this, we decided to cut the catapult down, and add a new ball-scoop while we were at it.

So, we cut down the catapult arm, and that's where the critical error occurred. I forgot how a lever lever-ed, and completely removed the pull-down part of the lever. And, since I didn't check it afterwards, I continued to make modifications, cutting down the top to 18 inches, and reattching it to the robot. Also, these modifications prevented testing of the robot.

And finally, in the moment of truth, the robot failed to work.

Reflections

In the future, I should probably have someone check on my work to make sure I'm not fouling everything up. As well, I probably should try to not make modifications the week before the tournament.

Autonomous Setup Options

23 Nov 2016
Autonomous Setup Options By Tycho

Task: Create a basic autonomous

Autonomous is one of the things that we tend to be weak on every year, and this year, we really want to get to super-regionals. So, to start off this year's autonomous, we first mapped out a potential path for the robot on the field. We then followed up with programming, using our previous methods like driveForward and driveCrab. So now, we have a basic autonomous program in which we can push the cap ball and attempt to shoot the vortex.

Reflections

We still have a long way to go in working on our autonomous - we need to be more accurate in shooting the vortex, we would like to hit the beacons, and we want to get parking points as well.

Catapult Upgrades

23 Nov 2016
Catapult Upgrades By Max

Get Nostradamus on the horn, there’s a new prophet in town.

Task: Imbue the catapult bowl with infinite power

As I predicted in the article about the first version of the catapult bowl, it’s gonna need a rework. There’s enough room for the catapult system and the conveyor system to fit together on the robot, but the lip of the bowl is too high for a ball to roll into the slot. This is a tough issue to solve: we’ll have to slice a chunk out of the hemisphere of the bowl, but doing so will make a bunch of sharp corners in the area of the catapult which is closest to the rubber bands, and the potential repercussions of the belt and catapult getting snagged on each other in the middle of a competition are catastrophic. I’ve solved the problem as best I could with a very generous rounding over of the points left over after removing the section of the bowl which is blocking the balls.

Reflections

This has solved our problems in interfacing the two systems, but I’m a bit concerned that taking so much material out of the outer end of the bowl may affect the flight path of the particles by providing less resistance to the centrifugal momentum of the ball as it accelerates. We won’t go back to the original bowl based on that knowledge, but it’s still an important detail to keep in mind as we consider our options for scoring points.

Final Catapult

27 Nov 2016
Final Catapult By Ethan, Evan, Omar, and Jayesh

Task: Finish up the catapult before Arkansas

Today marks six days until Doomsday (AKA Little Home, Arkansas), so we needed to finalize everything. For the catapult, Jayesh and Omar fixed my catapult "fixes". However, with the new fixes, the catapult was more powerful, and required recalibration. To adjust to the new fixes, we removed the old stop-mechanism, and replaced it with a wooden one that stops it on the 2nd level of the robot.

As a result of these changes, the arc of the catapult is more horizontal while preserving the height of the launch. This actually gives us a slight advantage in where we can fire the balls from. The only downside of the new design is that it tends a bit to the left.

Reflections

The catapult is good for this tournament, but we need to pursue alternate designs, such as the flywheel in the future. We should also make better prototypes to test.

Combining TeleOp and Autonomous

01 Dec 2016
Combining TeleOp and Autonomous By Tycho

Task: Combine TeleOp and Autonomous code

Today, I combined the autonomous and teleop so that we can demo both more easily. As well, during testing, we now can switch between them seamlessly so that our testing is power. The most important part of this code is that we can configure the autonomous before we launch - telling the robot how many balls we have, how many to shoot, what side the robot is on, and other pertinent options.

Reflections

We still need more code and fixes - our robot keeps having random errors while launching. As well, we have intermittent lag.

Time to Skip Version 9

10 Dec 2016
Time to Skip Version 9 By Max

Task: Make some changes to the catapult bowl

The apocalypse is at hand.

Chaos reigns as the world is thrown into peril; whole nations are thrown into anarchy by the second; and the superpowers of the world, once bitter enemies, have no choice but to band together as a horrid product of our own hubris, a threat more devastating than any which mankind has ever before seen, appears to put a grisly end to humanity:

The catapult bowl is too floppy.

Cut to black. Text appears: VERSION 8.

So, we got a problem. And as the guy who does the bulk of the 3D modeling around here, I’ll be fixing it. In case you didn’t gather what that problem is from the intro sequence, the catapult bowl is a bit too flexible for our liking, which is causing a bit of inaccuracy. To remedy this, I’ve added some simple buttress-type structures to the underside of the bowl to put some more support on the thin section where it seems to be flexing the most.

Reflections

The supports are just what the bowl needed. It’s flexing far less, and there’s been a noticeable increase in the accuracy of the catapult since it’s been added. All in all, this was a box-office blockbuster.

See VERSION 8 starring Adam Sandler as Catapult Bowl this summer in DVD and IMAX.

Beginning the build for the Cap Ball Trapper

24 Dec 2016
Beginning the build for the Cap Ball Trapper By Jayesh and Omar

Task: Give Deadshot flexibility in end game scoring by designing Cap ball launcher

One of the issues we saw in Arkansas was in the lack of flexibility we had in terms of the end game. We efficiently scored balls and beacons, but when our teammate for a specific match could do the same, we lost possible points scored. This led us to conclude that a Cap Ball Trapper, would be necessary for the sole purpose of flexibility. We focused on an extrusion-based system, based on a set from AndyMark. We've rigged up a pair of basic stairway systems, which will form the main lifting mechanism for the Cap Balls, now we have to figure out where to place them.

We followed the Youtube video above to figure out how everything was put together initially, and then expanded from there.

Reflections

The idea of flexibility is a luxury we can consider due to the progress made for the Arkansas competition. The idea is in scoring the maximum amount of points, regardless of the capabilities of our respective partners. The rigs themselves (although they do need some end covers so they don't fall apart) work fine, but we need to figure how it's going to fit into the general scheme of our robot. We have concluded that the rig will require two motors (we're at our limit; hooray traditions). The main goal in finishing this system is in figuring out both its deployment and placement.

Fixing Faulty Encoder

26 Dec 2016
Fixing Faulty Encoder By Tycho and Jayesh

Task: Fix a faulty encoder on our robot

This shows a test of our encoder issues. It might have been a month ago that we noticed a strange behavior in our autonomous code when the robot was moving forward at low speed. It would curve to the right when we were telling it to go straight. We probably would have noticed the problem earlier if we had any kind of subtlety in our driving. But we didn't, partly because the problem goes away when driving at full speed. We did suspect that the problem was in the encoder feedback of the front left drive wheel. In this video you can see how it ramps up to full speed much faster than the other motors. Here we are driving the robot with encoder PID active. But when driving backward, the motor/wheel behaves properly. This indicated to us that one channel of the encoder was working normally while the other was skipping ticks. But the problem could be in the encoder, the encoder cable or the motor controller. Since our motors take some time to change out and we were heading off to the Arkansas State Championship, we decided to simply turn off PID control. The problem goes away when we are simply driving the motors with open loop power levels - proving that the encoder is the culprit and that motor imbalance was not an issue. The problem with just turning of PID control is that we were still getting bad odometry since our method of calculating distance traveled is based on averaging the encoders across the four motors. So we had to adjust our target distances in autonomous based on trial and error instead of proper calculations.

Here we are trying to identify the source of our encoder issues. We swapped the encoder cable and and ports on the motor controller, but the problem stayed with the front left motor. That told us that it was the motor's encoder that was the issue. We confirmed through telemetry that the encoder was giving no ticks when driving forward, but worked fine in the reverse. So we replaced the whole motor and this time it sped up faster than the other motors in both directions. That really mystified us for a bit. Turns out the substitute motor had an encoder that was dead on both channels. What were the odds of that? We'd simply pulled a motor from our inventory and assumed it would be OK. But it must have been one we hadn't needed to be encoder controlled. We finally found a third motor, this time tested its encoder before throwing on the robot, and all is well now. We can now drive the robot under PID control and it drives as expected at various power levels. We need to re-calibrate our blended travel distances with the working encoder, but feel much better about our performance. We can even reliably use run to position commands if we want, though our navigation code doesn't require that.

This just shows the proper behavior of the robot after our encoder troubles were resolved:

Mapping Out Autonomous

30 Dec 2016
Mapping Out Autonomous By Janavi, Tycho, Omar, Evan, and Darshan

Task: Mapping Out Autonomous

To tell the robot how far to move forward we had to calculate our motors RPM. We did this by telling the robot move to 10 rotations forward and calculating how far it travelled. After he RPM we created a model field upon which we designed a set path for the robot during autonomous. One path for red and then one for blue. Both of these paths allowed the robot to shoot two balls and then push the beacon buttons.After testing this we realised that our alliance partner may be better or worse than us at shooting the balls. So we created a method that allowed us to push a,b, or x to change the number of times the catapult fired.

Reflections

We are constantly working to improve the design our Autonomous. Before this, while our autonomous may have worked. It didn't allow us to collaborate with our alliances to create the best path, stopping us from earning the most points possible. Now with these changes we can work together with our alliance partners to complement each others strengths and weaknesses, helping us earn more points. This will also encourage us to scout around and interact with other teams before and in-between the matches, letting us create a even more detailed scouting sheet.

Cap Ball Lift

12 Jan 2017
Cap Ball Lift By Omar, Jayesh, Darshan, Evan, and Max

Task: Build a lift to try cap-ball scoring

Although we're confident in our robot's ability to shoot balls and press beacon buttons, we decided that in order to be competitive, we should try to score the cap ball. The lift would have to be strong enough to lift the surprisingly heavy ball, but also not take up too much space. Our robot, as like every year, is very close to the 18 inch size limit in all directions, so we needed to think of a volume-saving method of mounting the lift. After considering several methods and remembering other lift mechanisms that we'd seen at previous competitions, we decided to use a series of sliding extrusions. It's a common design and not up to our usual standard of flair, but it's relatively small, flexible in terms of mounting, and only requires one more motor, bringing our total up to seven. We first visualized how we'd mount the lift:


(We went with a mix of both)

Using a YouTube video guide, we were able to assemble two columns of four extrusions each that slide up when pulled by a tough string, which is wound around a spool connected to the new motor. It is mounted on top of the robot rather than on a side because we had the most clearance in the vertical direction. It then rotates forward and stands in the correct position, the motor rotating with it. After several rounds of testing, we decided to use a faster motor, and it proved to be successful in speeding up the lift's ascent.

Reflections

Although it won't be ready for our qualifier, we've made very solid progress on this lift. There are several problems which still need to be tackled. First, we need to figure out what we're going to use to actually grab the cap ball. The lift is useless without it, and even if we use some simple pieces of wood and a servo, there needs to be something there. Second, there is a large space between the rotation point of the lift and the ground, which means that it must somehow reach down in order to wrap around whatever claws we devise around the ball.

Motor Controller Mounts

12 Jan 2017
Motor Controller Mounts By Ethan, Darshan, Max, and Tycho

Task: Prevent static shocks to our robot

Throughout the year, we've dealt with static issues with our robot, as shown here and here. And, now that we've pretty much gotten autonomous and the lift out of the way, the static was our only remaining issue.

To prevent the static shocks, we needed to isolate the motor controllers and other parts from the metal section of the frame. This was achieved by adding a polycarbonate shield on each side, and mounting the corresponding motor controllers. However, we had to partially remove the swinging arms that we created in the last post in order to mount the siding. We plan to add LEDs on each side of the robot to give the robot some "bling".

Reflections

The polycarbonate siding in conjunction with staticide should give us a huge advantage in the robot game for the Jan. 14 tournament. As well, it may net us some design points, as it is a solution to a problem that many FTC teams suffer from.

Introducing the New Particle Accelerator

22 Jan 2017
Introducing the New Particle Accelerator By Max

I was going to make a Windows 10 joke but then we stopped using the catapult at version 8.

Task: Design a flywheel for a new system replacing the catapult

So while our catapult was good, we needed something better. It frequently missed and had other issues due to it being dependent on elastic bands that can lose tension over time. It would occasionally miss balls from areas it would usually be able to shoot from. As well, it was just a little dangerous with the metal arm snapping up and down.

At the beginning of the year, we had toyed with the idea of using a flywheel on our robot, inspired by videos such as this, as well as other competing teams at our Wylie and Ellis Davis Field house qualifiers. So, finally, we decided to create a flywheel launcher.

We tested numerous versions of this flywheel. We printed out the same design with three different materials, high density nylon covered in foam tape, high density ninjaflex with 35% infill, and low density ninjaflex with 20% infill. We decided on the last one, as it accelerated the ball the fastest without slipping. We also designed a particle guidance system so that the balls would be more accurate in making the vortex shots.

<infomercial>

Introducing: The Iron Reign Particle Accelerator 1.0

This beautiful piece of machinery is a particle accelerator, which has a huge, ninjaflex, 20% infill flywheel to take all of the particles off the field, and jettison them to the moon (and back down into the vortex). We've revamped our intake system so that we can control the balls going into the accelerator. All of its important parts are designed and 3D-printed by Iron Reign. It is quite literally the best attachment we've ever designed for our robot, and probably could launch people into space faster than NASA can at the moment.

</infomercial>

Reflections

We still need some finetuning in our code for the flywheel, as our autonomous isn't designed for it yet. As well, we'll probably run into some unexpected issue at the tournament, like we always do.

Return to Machine Vision

29 Jan 2017
Return to Machine Vision By Tycho

Task: Prepare to reintegrate machine vision

A year and a half ago while the new Android-based platform was still in pre-launch, we were the first team to share a machine vision testbed on the FTC Forums. That color-blog tracker was implemented with OpenCV on Android, but with a different low-level control system and robotics framework. Then we integrated OpenCV into our implementation of ftc_app, which was in turn based on the great work of rgatkinson's team supporting Swerve Robotics. Our main game repo for FIRST RESQ was also open sourced and we gained a lot of experience using it. But we had many issues that prevented full usage of the capability. There were problems with the whole control system that created extremely variable loop times which really challenged our custom PID implementation. On top of that, we found that in many tournaments the beacons were not working, or the lighting was too bright and our camera was being flooded by the white shell of the beacons. That made it an unreliable solution.

So this year we switched to the modern robotics color sensor as a slightly more reliable method of detecting the current color while up close. This also gave us the ability to add color sensors to both sides of the robot so we no longer have to turn around when on the blue alliance. And we found we had good-enough navigation based on calibrated odometry so that we could get into position without color tracking.

But now we need to go ahead and try to re-integrate our previous machine vision code and see if we can improve on the situation. We also need to at least try out the Vuforia object tracking capabilities, even though we've set that as a lower priority because we know that specular reflections are likely to be a problem under varying lighting conditions at different competition spaces. We've noticed this problem at a couple of spaces due to the marker placement behind the planar polycarb of the border walls. So we don't actually plan to rely on this as a primary means of navigation and positioning, but we should try it out and see how robust it might be.

We still want to use machine vision to possibly track beacons and particles. We are hoping to track particles to create an autonomous behavior that triggers during teleop so that a particle near the front of our particle collector can be automatically approached and pulled in without operator intervention. This should help since picking up particles on the far side of the robot from the drivers is very difficult because of blocked sight lines. We want to use color tracking to make sure we don't pick up opposing alliance particles.

Research / References

I checked out Vuforia and there is no ability to track based on color. So we need to use OpenCV again, but when Vuforia is present it also locks up access to the camera. Fortunately there is now a way to get a frame from Vuforia and reformat the image data for OpenCV's use.

I plan another post to document the actual steps we went through. Stay tuned. If Vuforia proves troublesome, we might revert to getting our image from a camera preview just like last year. Though that would mean messing around with the Android manifest and the layouts in the main FtcRobotController folder.

Fly Wheel 2 - Fly Harder

08 Feb 2017
Fly Wheel 2 - Fly Harder By Max

Task: Create a backer rail to guide the particle as it fires

Our work on the flywheel design has been an effective proof of concept, and now we need to work it in to the rest of the robot. However, just like with the catapult, there’s a couple issues to iron out before all the pieces can start moving in a way that doesn’t make the robot implode.

Most notably to the 3D modeler in me, I fear that our current rails which we use to guide the ball as it is sped along by the flywheel might get caught on the rubber bands of the belt which collects the balls. Both ends of the rail have sharp angles which can easily catch on the bands, and it doesn’t really help that the flexible nylon of the rails means that a rubber band that is particularly stubborn in releasing it could turn our launching system back into a catapult of sorts again.

The fix was quite simple: I used Creo to take out the piece of the rail which ran the greatest risk of being caught, and got rid of some extra bolt holes too since I happened to be in the neighborhood.

Reflections

Not much to report on this one. We’ve printed and tested the model with no catches, and it also seems that the changes to the rail have had no effect on the speed or accuracy with which we can fire the ball. Overall, this one was a simple success.

Building the Fly Wheel Launcher

10 Feb 2017
Building the Fly Wheel Launcher By Jayesh, Omar, Darshan, Evan, Tycho, and Max

Task: Create a particle launcher with a higher scoring rate

The first particle launcher we saw by another FTC team was actually a crude flywheel and rail design back in October where the rail was a cut up PVC elbow. Back then we considered a number of different designs including impact launchers, catapults, flywheel + rail systems and dual flywheel shooters like our sister team built. We decided to go with a catapult design because Max had experience with catapults and knew that they could create very repeatable trajectories.

Our catapult has achieved those reliable trajectories. We operated it with a choo-choo mechanism that allowed us to fire and re-cock without having to change direction, so that made reloading easier and faster that it might otherwise be. It accurately scored, with consistent ballistic trajectories, however, the system had problems with ball loading when our 3D printed catapult bowl kept failing due to layer separation. As a result we had a lot of misfires and had to replace our bowl often. So our moderate cycle rate and our misfires meant we actually scored only about 4 balls during our average teleop phase. As the season progressed it became increasingly clear that we would have to radically improve our center vortex game and that was driven home when Technical Difficulties and Technibots crushed us with their world record score in the finals match at our first qualfier.

So we decided to move on to a flywheel-based design, knowing that we would likely be sacrificing some accuracy for a much greater cycle rate. We knew that dual flywheels tended to have even greater issues with accuracy due to their extremely short contact period and the chance that one or both wheels would hit a slot in the wiffle ball. We saw direct proof of this as our sister team, Imperial Robotics, struggled to get their dual-flywheel design to work consistently. And Ethan had attempted to build one very early in the season, but never really go it working. So we decided to design with a single wheel with a semicircular ball guide or rail. Max created a custom 3D design for both the flywheel and for the rails. The rails were printed in nylon, our preferred structural plastic. He printed three different flywheels for testing. One was in nylon meant to be covered with foam for compliance. The other two were printed in Ninjaflex (urethane) at different infill densities. The foam on the nylon version shredded at the RPMs we were using. We probably could have found a better adhesion solution, but found that the low-density Ninjaflex version worked beautifully and has stood up to extensive testing.

Reflections

The continuous improvement of designs is a constant focus we adhere to. Previously we'd gone through two major revisions of our catapult system, with a whole bunch of minor modifications, and that system got us qualified for the North Texas Regionals. We saw the pros and cons, and eventually saw fit to change the system to score more points in the long run. We are now able to score around 75% of the balls we shoot. The key is in how quickly we shoot now. Before we would have to collect balls, turn the robot around, load a singular ball into the scoop, and shoot. Now, we can shoot 4-5 balls right after another without turning around. This will allow us a much greater center vortex scoring rate as we aim to be one of the top teams at Regionals.

Backups and Shields

21 Feb 2017
Backups and Shields By Lin, Omar, Max, and Tycho

Task: Build a backup flywheel track and remount side shields

Previously, our side shields were zip-tied through 4 bolt holes on tetrix pieces per side, and we had taken one off to reach our drive system. When putting it back on to fine tune autonomous we took the time to cut out space for a wrench and bolt it on. The holes were already the correct size, we just had to line them up with the mounting position.

Omar spent a good amount of time inspecting our current track in order to replicate it accurately. Unfortunately, it took him a few tries to get it. We want to have a second copy available in competition if we get hit around too hard or something snaps. One weakness of our previous catapult design was that the bowl broke in a way we couldn't repair, andwe don't want to be in that situation again.

Reflections

While It was easy to mount one side of a shield, the other proved to be difficult. The pre-existing drill holes almost lined up, zip ties had enough give, but the bolts definitely didn't. We had to widen the area but it's much more secure now. When we got it to workon the left shield, we clipped the ties holding the right side up and did the same thing

Vuforia

18 Mar 2017
Vuforia By Janavi and Tycho

Task: Use Vuforia to enhance autonomous

We use Vuforia and Open CV vision to autonomously drive our robot to the beacon and then click the button corresponding to our team's colour. We started this by getting the robot the recognize the image below the beacon and keep it within its line of vision. Vuforia is used by the phone's camera to inspect it's surroundings, and to locate target images. When images are located, Vuforia is able to determine the position and orientation of the image relative to the camera.

To start setting up our robots vision, we watched Team 3491 FixIt's videos on Vuforia to help us understand how to set it up. After finishing the code for following the image, we went to go test it out. We found out that we had accidentally coded the robot to follow the picture by moving up and down, as we had coded the phone for portrait mode instead of landscape. After fixing that, we tested out the robot and it ended up attacking Tycho by running at him and the image at full speed. Apparently, we had accidentally told the robot to go much farther than it was supposed to go by placing a parenthesis in the wrong spot. We tested the code one more time, only this time I held the picture while standing on top of the chair. Luckily the robot worked this time and was able to follow the image both ways.

Reflections

We would like to explore the uses of Vuforia+OpenCV. We are considering using it to determine particle color as well as using it to view the images beneath the beacons.

OpenCV

18 Mar 2017
OpenCV By Ethan and Tycho

Task: Implement OpenCV in autonomous

Last year, we had some experience with OpenCV to press the beacons, and this year we decided to do the same. We use OpenCV to find the color we are looking for on the beacon in conjunction with Vuforia. First, it detects the search pattern in the view with vuforia, then isolates that area and finds the side of the beacon with the correct color. Our code is based off of FTC team 3491, Fixit.

In a previous post, we talked about OpenCV and Vuforia research, as well as how we plan to use it in the robot game. And now, I am happy to say, we have implemented it partially in our autonomous. We can now figure out what side a specified color is on the beacon using our new phones, the Galaxy S5. (Side note - do not update them to Android Lolipop if you want to use OpenCV, it will not work.)

Reflections

In the future, we would like to implement OpenCV so that we can detect the color of a particle during autonomous and pick it up to shoot it. However, we probably don't have time to program it before Super Regionals.

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.

Meeting Log

09 Dec 2017
Meeting Log December 09, 2017 By Ethan, Evan, Tycho, Austin, Janavi, Charlotte, and Abhi

Meeting Log December 09, 2017

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • Write post-mortem
  • Update past MeetLogs

Build / Modelling

  • 3D-model
  • Work on robot flipper

Service / Outreach

  • Build 2nd field

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
EvanFlipper2:004
AustinFlipper2:004
Abhi3D Model2:004
EthanPost Mortem2:002
EthanField4:002
JanaviField2:004
CharlotteField2:004
TychoField2:004
KarinaField2:004

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.

Meeting Log

06 Jan 2018
Meeting Log January 06, 2018 By Ethan, Evan, Charlotte, Kenna, Tycho, Austin, Abhi, Karina, and Janavi

Meeting Log January 06, 2018

So, today's the last Saturday before the Wylie Qualifier, and we're pretty unprepared. We're a little behind on our blog posts by about a week, we still haven't added our octopucker attachment, and we need to finish our 3D model of our robot.

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • Spring Cleaning Post
  • Code Improvement
  • SEM Tournament Post
  • Flipper Post
  • Octopucker Post
  • 3D Model Post
  • Proofread
  • Fix presentation

Software

  • Fix autonomous jewel code

Build / Modelling

  • Finish 3D model
  • Attach octopucker grabber
  • Work on flipper

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
EthanReview Posts2:004
EveryonePresention2:001
EvanWork on octopuckers2:004
AustinFix wiring issues2:004
CharlotteFix Presentation2:004
EthanFix presentation2:002
KennaProofread posts2:004
TychoWork on auto code2:004
Abhi3D model2:004
Karina3D model2:004

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

Meeting Log

27 Jan 2018
Meeting Log January 27, 2018 By Ethan, Karina, Charlotte, Abhi, Tycho, Austin, Kenna, Evan, and Janavi

Meeting Log January 27, 2018

We are very behind on updating our engineering journal and discussing our performance in Wylie. This was the main focus of the day.

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • STEM Expo Post
  • Chassis Post
  • Driving Post
  • Wylie Postmortem
  • Create poster

Build / Modelling

  • Work on new chassis
  • Attempt to update gripper

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
EthanWork on poster2:004
CharlotteDriving2:004
JanaviWork on chassis2:004
KarinaDriving2:004
TychoDriving2:004
EvanGripper update2:004
KennaWork on chassis2:004
Abhi3D Model2:004
AustinGripper update2:004

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.

Meeting Log

03 Feb 2018
Meeting Log February 03, 2018 By Ethan, Kenna, Charlotte, Karina, Janavi, Evan, Tycho, Abhi, and Austin

Meeting Log February 03, 2018

This is the last Saturday meeting before the tournament. We have to finish bringing the engineering journal up to date, as well as work on the presentation.

Today's Meet Objectives

Organization / Documentation / Competition Prep

  • Review Journal
  • Update blog posts
  • Finish poster

Build / Modelling

  • Update 3D Model

Today's Work Log

Team MembersTaskStart TimeDuration
AllPlanning Meeting2:10pm.25
AllFinish past-due blog posts2:004

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.

Intake Stars

18 Feb 2018
Intake Stars By Tycho

Task: Improve the functionality of the gripper

Our grabber is good, but it isn't achieving 100% of the potential it could. One thing we're doing is creating the Grabber V.5 previously blogged about, but we also want to increase the speed of the grabber in other ways, in order to get every single bit of performance out of our robot, since we want to really impress at Supers. So, we designed star-grabbers. The purpose of these are twofold. First, the unique star design we made allows the gripper to fish single blocks out of a pile of blocks so that we no longer have to fully align ourselves with blocks, which reduces the time we spend retrieving blocks. As well, these grab blocks more securely.

Next Steps:

The next step is to mount the modified grabber system with the stars on the newer Kraken chassis.

Grabber V5. Diagrams and Pictures

19 Feb 2018
Grabber V5. Diagrams and Pictures By Austin

Task: Implement the new grabber system and record how it works

So, we've been talking about our new gripper system for a while - we've made prior 3D models and started it, hoping that we'd have it done by the Oklahoma Regional, since that was sort of a low stakes tournament for us. Unfortunately, we didn't get it just in time, so we had to go back to the basic Kraken model of our robot. We really don't want to repeat this mistake again, so we're doing a last-minute drive towards adding V5 to the robot.

First we had to build a new base, in case we had to suddenly revert back to the old bot. We've detailed that in the Building a Chassis post. Next, we had to make the design. We wanted something with more versatility than the static up-down gripper system, and looked at the flipper that our sister team had designed for inspiration. However, we didn't want to give up the whole design process that we'd used for the gripper. We decided on a comprimise, a gripper-flipper system that would intake blocks on either side of the robot, but then had the capability to flip over the entire robot and deposit blocks.

First, we made a model in Creo to see how we would get the gripper to be mobile over the entireity of the robot. This system continued to use the REVolution system that we'd previously designed. Described, the design was a gripepr system hooked to two chains which in turn moved the gripper system from one side to another. The default configuration is to let the gripper rest on top of the rotation system in order to relive stress on the chains.

Next Steps:

Next, we need to hook all of this up onto the robot and test them - we don't have much time, so we've got to act fast.

Designing our Wheel Mounts

20 Feb 2018
Designing our Wheel Mounts By Tycho

Recall the discussion and design strategy regarding our wheel mounts

The side shield design process involved much thought and discussion. We have experienced difficulty with the wheel mounts we have been using, which are the ones from last year. These are made of a composite of nylon and aluminum, but they are too thick and consume a lot of space on our already large robot. Also, the our new Mecanum wheels are thicker than before, so it was about time that we use a thinner material that is just as strong. We decided to use 1/8th inch thick 6061-T6 aluminum plate. We then designed the mounts in such a way that the axles of both of the wheels on a side are joined to increase the stiffness of our robot.

In the beginning of the season, we noticed that the Mecanum wheels would damage glyphs, so we designed shields to protect that from occuring. In this design we also had to protect against glyph damage, so the lower circular areas cover the Mecanums, and there is an indent in the bottom between the two wheels so the mounts don’t get in the way of parking on the balancing stones. Additionally, the middle region is thinner so we can move the mounting regions of the robot inward if need be due to sizing restraints or if we change intake design.

Beyond mounting the wheels, we decided to extend the design into the upper region of our robot as attachment support for the relic arm that we are currently building. In this upper region, we decided to incorporate a unique design based on the name we chose for our robot earlier in the season, “Kraken.” The choice of this name came from the “octopluckers” we designed and use in our intake system. Often, teams will make circular or triangular cutouts to remove weight for the robot, but to remain consistent with a design motif, the cutouts we made show silhouettes of tentacles, like a Kraken.

Making our design a reality

Now that we have a completed design, we intend to schedule a meeting with Advanced Waterjet Cutting to discuss the possibility of them cutting out our design for us. We have incorporated tolerance for a waterjet machine so after sending our design to them they can put it right on one of their machines. Hopefully we can also share our robot and our Mobile Learning Lab with them.

Revolution Flyer

22 Feb 2018
Revolution Flyer By Tycho

Task: Create a flyer for our Revolution system

We've talked to REV before about our unique REVolution system that we've detailed in other posts, but for those who are unaware, its a system that we've personally designed to turn REV extrusions into axles, which enable us to have more flexibility in design. But now, we've designed a flyer to get people on board with the system.







Relic Arm V2

22 Feb 2018
Relic Arm V2 By Abhi and Christian

Task: Revise Relic Arm

As were continuing development of the relic arm, we realized we needed to make several modifications. That resulted in the following design.

This demonstrates the latest version of the relic recovery arm. You may be saying "WOaH that doesn't fit in sizing cube!" Good news: The servo in the middle folds out the second part of the arm to that the entire mechanism fits in the sizing cube but can extend to reach over the field perimeter to zone three.

One modification we made from the previous version is the grabber itself, pictured below

We realized that the long TETRIX plate from before wasn't exactly the most efficient tool as a grabber. Though we will eventually design a claw for the relic, we temporarily decided to use two small aluminum pieces.

One final new addition we made was the servo on which all of this lies on.

We added a servo mounted upwards in the last stage of the arm. This makes the arm swing out from the top of the robot, allowing for a rotating degree of freedom when perfecting the relic placement.

Next Steps:

As stated previously, we will need to design the relic claw. Doing this will allow us to get better grip of the relic.

Relic Arm Design

24 Feb 2018
Relic Arm Design By Ethan, Abhi, and Shaggy

Task: Design and implement a new Relic Arm mechanism

At the North Texas regionals, we realized that if we really want to go further in the robot game, we need to significantly improve. Part of this is designing the new grabber-flipper system detailed in a later post, but another good way to score points is to score the Relic. So, we designed v1 of the Relic Arms, as detailed in this post.

However, designing a model and designing a real-life part are much different. First, we didn't have the Tetrix piece needed for a backing plate, and it is easier to say you can attach unrelated materials than actually doing it. As well, having a single 18-inch deploying arm would test the size limits more than we already do.

In comes Relic Arm V.2. This version is twice as long as the previous version so that we can score in the third zone for 40 points. As well, we have an updated relic-grabber that uses the silicone sheet from our Grabber V.2, so we can grip the relic more securely. Finally, we have a new mounting point on the robot that allows us to extend even farther than before.

Next Steps:

We now need to build and attach this design before Supers, in less than a week.

Polycarb Deformation

27 Feb 2018
Polycarb Deformation By Ethan

Task: Find a constant for polycarb deformation

Recently, we've been having an issue with our gripper in that the shielding for the sides of the intake have been bending torsionally, so that they deform and interfere with our glyph take-up. So, we created a lab to find the torque required to cause this deformation.

We cut a length of polycarb with a similar width but different length to test this (thickness 3/32 of an inch), hooking it into a vertical vice. Then, we attached a vice grip of length 8.75 inches to the side, then attached various weights to the vice until the polycarb deformed.

Under a ten-pound weight, the polycarb finally deformed. Using calculations, we can determine:

d = length of moment arm = 8.75 in = .22225 m
x = 0 degrees
F = 10 lbs = 44.482 N
Torque = Fdsin(x) = 9.886 N*m
Since torque to create deformation is roughly inversely proportional to the length of any object in a single dimension (keeping thickness and width constant): L' = expiremental length = 4.5 in
L = actual length = 14.5 in
T' = T(L'/L) = 3.068 N*m

This amount of torque isn't hard to generate at all, which explains why our gripper shields bend so easy. To prevent this, we must reenforce the shields with something with a higher resistance to deformation, such as thin metal strips.

Next Steps:

We're going back and recording many of our robot's constants so that we can be better able to predict how our robot functions in various situations. This is the first of many posts.

Progress of the Octopuckers Over Time

02 Mar 2018
Progress of the Octopuckers Over Time By Ethan and Tycho

Task: Chart the progress of the octopuckers over time


This design was too rigid, we overlooked the fact that triangles tend to be the strongest shape, and therefore this octopucker wasn't as compliant as we wanted, damaging the blocks.

This design was really good, and we used it for 3-4 tournaments. Our initial design of these wouldn't damage the blocks significantly at the levels we used, but at extraordinary conditions they would gouge the blocks, and under normal conditions they would leave superficial scratches.

This design was really bad. They would catch on each other and get stuck on themselves, and as a result wouldn't pick up blocks. However, they did not damage the blocks in any conditions. We never brought these to tournament.

This was a step in the right direction. They didn't grip the blocks that well, but they worked and didn't get stuck on each other or jam.

This is the design we're currently using. It's impossible to damage the blocks with them, and with the slightly larger cylinders, they grip the block really well. We're going to use these going into the South Super Regionals.

These aren't octopuckers, but they deserve an honorable mention. We're using these intake stars at the bottom of the grabbers to securely grip the glyphs before fully loading them into the grabber system. As well, these have the added bonus of slightly increasing the speed at which we can take in blocks.

The Kraken Awakes

04 Mar 2018
The Kraken Awakes By Abhi

Task: Develop a new robot model

After continual development and adding the fifth grabber, it became time to make a new model.

With some sick upgrades, Kraken has become reborn just in time for Super-Regionals. With some new mechanisms and constraints, we developed a better and more efficient robot.

Gripper v5 was added to the chassis via 4 small REV rails which could keep the grippers attached to the conveyor belt. These were constrained using coincidents.

The relic arm was constrained onto the model using a REV rail on the side of the robot. Though the arm may look longer than in the 18 inches, the current picture demonstrates it at its extended distance.

And last but certainly not least, we added cool new side shields. Cut from AWC, the shields will replace our current wheel mounts and wheel guards to create a protective metal layer and look awesome on the field.

Next Steps:

At this point, we have everything on the robot. However, we need to figure out what to do with the jewel arm before we go to Athens. That will take time to develop and place onto the robot. Upon completion, we can complete the robot model.

South Super Regionals Day One, 2018

08 Mar 2018
South Super Regionals Day One, 2018 By Ethan, Evan, Kenna, Charlotte, Austin, Karina, Janavi, Abhi, Tycho, Justin, and Christian

Task: Set up and present at SSR 2018

A placid stillness hung over the dark, cold room. The early sun flashed through the pale window curtains, ineffective against the onslaught of light. Outside, birds started to chirp and sing, starting off the new day. All over the city, teams were waking up, walking to the Classic Center (the Thunderdome of Robotics), to see their fate, either as champions of the last ever Super Regionals, or to go home defeated and never again see the light of Dean Kamen and his vision. However, through all of this movement and energy, this hotel room stayed quiet. Slowly, a beeping slowly grew more loud, blaring its morning call throughout the room until no one could deny its existence. In spite of the warm and soft Holiday Inn™ beds calling their users back to slumber, the team members had to wake, under the threat of death by coach. Thus started the journey of Iron Reign's 2018 Supers.

The Pits (Setup and presence)

This day marked the first official day of the 2018 South Super Regionals, the last one ever being held. With FIRST moving to the Qualifier-Reigional-Worlds system, we wanted to make a good impression and show off, and thats exactly what we did. First, we overdesigned a robot that impressed judges and looked nice to other teams, as well as making sure we had little goodies to hand out. But, we really worked on our pit presence, to make ourselves really known to other teams. We made posters detailing Iron Reign's season and hung them up; we brought LEDs and lights to give our tent that good old rustic Roman Feeling™; we had business cards to hand out; we went around and talked to other teams and took pictures of their robots. All of this served to make it feel as if Iron Reign was really *there*. While this eventually proved ineffectual to get picked, this still was a good strategy - it got us noticed - and we will feel its effects at Worlds. We still could've done more with the pit setup though, it would've helped to find a place for posters and the like beforehand, and we ran into some placement issues of our robot and award carts that irritated the safety officials. But, overall, 9/10 would do again. (We will)

Judging

Our judging didn't go that well. Our presentation was fine, we still had breaks and pauses like usual, and we got the majority of information across, but we didn't deliver on important information correctly. Our energy was a little low, we had a power outage while going over our outreach which distracted the judges, and on top of that, the judges' paradigms were a little closer to the engineering side of things. Now, this isn't necessarily a bad thing - having a skewed mindset makes a judge more likely to defend for some awards - but for an outreach-heavy team like ours, we were at a disadvantage for the Connect and Motivate awards. In the questioning, we only had one connect-related question, with the rest on Innovate and Design, so we knew we probably wouldn't be up for our usual awards from the get-go, which is a shame as we've gotten the Connect Award at every level of competition this year.

That was the end of the night, so like all Good and Responsible Teams™, we went to bed early and got enough sleep to be rested for the next day /s.

South Super Regionals Day Two, 2018

09 Mar 2018
South Super Regionals Day Two, 2018 By Ethan, Evan, Kenna, Charlotte, Austin, Karina, Janavi, Abhi, Tycho, Justin, and Christian

Task: Complete the first day of competition at SSR

After finishing judging and setup, all we had left to do was the entire robot game. Knowing this, we stayed until 12, tattooing pictures of Minions™ on each other. Thus, we were perfectly prepared for the tournament the next day.

Match 5
We won this match, 207-256. We mainly won due to the autonomous, our partner and ourselves scored 170 points and the other side couldn't catch up.
Match 16
We lost this match, 236-297. We suffered as a result of having a broken relic arm and not focusing on the end game. We really need a relic arm for Worlds.
Match 23
We lost this game, 412-105. We were up against two of the top ten teams in the tournament and we couldn't compete on any level. We didn't even get the balancing stone point because our robot turned off on the field.
Match 29
We won this game, 285-351. While we were outclassed in TeleOp, our combined autonomii were able to overcome that and give us a win.
Match 38
We lost this game, 109-286. We were outclassed on every level, and it didn't help that our robot was unresponsive. This was a wake up call for our team to improve.
Match 49
We lost this match, 572-221. This wasn't even close and was a huge disappointment.
Match 56
We lost this match, 196-374. Again, we underperformed in every aspect of the game and ended our day with a 2-5 record.

Besides our subpar performance in the robot game, we were also interviewed by a team of judges that we guessed were responsible for the Innovate or Design awards. They asked a little more in-depth questions than what we were used to, but we were able to answer them effectively and demonstrate our engineering process. The judges were reasonably impressed by our robot - our design was fairly uncommon - and it made us canidates for the Innovate award by our estimation.

Janavi, Karina, Abhi, and Tycho stayed up to work on driving and autonomous to prepare for the final day while the rest of us slept so that we would be restful and awake for the next day.

South Super Regionals Day Three, 2018

10 Mar 2018
South Super Regionals Day Three, 2018 By Ethan, Evan, Kenna, Charlotte, Austin, Karina, Janavi, Abhi, Tycho, Justin, and Christian

Task: Finish SSR and attend awards ceremony

It was the final day. Tumbleweeds drifted over the land, rolling and turning through the abandoned Athens streets. Over the horizon, a dust cloud rose, brown and shifting and twisting, speckled with the detritus of an abandoned city, flashing and siezing, lighting up the city through its inky blackness, devoid of all light. Under these auspices, with the flashing lights of the looming cloud highlighting every crack, every pore of our grim, stone-cold faces, we trekked through these dark streets, against the cold, whipping winds blowing in, through the debris and detritus of the lost, fallen FTC teams that succumbed to the biting winds and the shooting lightning. Through these harrowing conditions, we perservered and arrived at the fabled Classic Center, the home of all southern FTC teams' dreams, and their doom.

We started out with our 2-5-0 record, so we didn't have a great outlook on alliance selection or for the tournament in general. However, through our discussion the night before, we decided to give our newer team members a shot at driving and working on the robot. So, Justin and Karina became the main drivers for the day, since we didn't have much to lose.

Match 70
We lost this match, 379-267. Even though we lost, we did way better than expected, so this is still a win in our hearts. Had we executed our autonomous correctly, we could've won this match, or at least gotten closer and impressed more people.
Match 78
We won this match, 388-348. It definitely helped that we were partnered with the top team in our division, but it was certainly a morale booster overall. This ended the SSR with a 3-6 record.

With the fresh feeling of defeat in our hearts, as we didn't stand a chance of actually getting picked, we went to a nice italian restruant and talked about potential plans while eating good food. If you ever have the chance, eat at Depalmas Italian Cafe.

We walked back to the tournament, bellies full of prosciutto and cheese, reasonably not confident for our chances to advance to worlds. So, we sat in the stands, waiting, hoping that our names would be called (except for the Promote Award, ours is kind of embarrassing). As we slowly slipped into deep slumber, we heard a but a whisper from the announcer, "And the 2nd place Innovate Award goes to............Team 6832 Iron Reign!". And so, we advanced to Worlds, and rode off into the sunset.

Kraken LED Installation

10 Mar 2018
Kraken LED Installation By Ethan, Austin, Evan, and Abhi

Task: Install LEDs on our robot

This has been a low-priority task for the robot throughout the season. We wanted to be able to a) look cool and b) signal team color and problems with the robot with LEDs. And, at Supers, we just happened to have access to a Fender switch, servo, and a roll of LEDs, so in our downtime we decided to take advantage of it. If we knew we weren't going to win, we could at least make our robot look cool.

The installation was relatively simple. We attached a servo to a Fender switch so that we could automatically toggle between colors, and rewired our servos to accomidate that. We threaded the LEDs above the wheels so that we could have a nice backlit effect on our robot.

Next Steps:

Next, we need to code the appropriate signalling for the colors and the servo to move the switch.

Kraken LED Modes

12 Mar 2018
Kraken LED Modes By Tycho and Janavi

Task: Attach and Code LEDs

We added LED's to Kraken's base. After that, we coded the lights to change color depending on which mode we are in. Though a small addition, it helps take stress off of our drivers. By glancing at the robot, they can immediately tell what mode we're in and can adjust accordingly. It also keeps us from making an crucial mistakes like activating our autonomous for blue alliance when we're on red.

  • Cyan - End-game mode, changes control scheme to support relic arm control. Resets forward direction so drivers can think of relic gripper as forward. Enables automatic balancing mode.
  • Magenta - Glyph-scoring mode for higher rows. Reverses which way motors are and slows down motors.
  • Blue/Red = Blue or red depending on alliance. Regular driver mode, collects glyphs for lower columns.
Here is Kraken in end-game mode:

Which Cipher?

13 Mar 2018
Which Cipher? By Abhi

Task: Find which cipher works best

By this stage of Relic Recovery, we have finally discovered an efficient strategy for the glyph game. At this point, it is important to get consistent driver practice. While doing so, it is important to think of the cipher patterns. Seeing that world records are being set by teams who can double cipher efficiently, it is important that we can complete ciphers at Worlds. But which pattern should we choose? At first glance, all the ciphers seem just as hard (or easy) to do. However, after some analysis, we found some will work better for our team than others.

Based on our current design, the bird cipher is the easiest to complete for drivers. This is because of the pick up pattern of our grippers. For each column, each pair of glyphs can be picked up with the same color order. For example, if we start with a gray glyph during autonomous and put it into the center column, after placing a brown one on top in teleop, we can pick up another gray then brown. Then, when we go to the left column, we pick up brown then gray for first two rows then brown gray again. This makes it easy on our drivers to remember which glyph colors to pick up.

The next easiest cipher is the snake cipher. Though this may conventionally seem hard since mirror snakes are not allowed, it is easy for us because we have the ability to pick up stacks. We would start the same way as the bird in the center column and then pick up pre-stacked same color glyphs.

Finally, we have the frog. The frog is the hardest to do because though the first two rows are the same as the bird, the final two rows have flipped pickup of glyphs. This can cause a high chance of error for our drivers. This is why we will try to stray away from this cipher but can do it if necessary.

General Advice:

Though we focus on specific ciphers, we can setup our cryptobox to allow multiple ciphers. The best thing to do is setting up the center column in a 1221 pattern (each number represents either gray or brown). This sets us up to do either a bird or frog cipher, our two favorite ciphers to do. If this isn't possible or if we are focusing on rows, we have to set them up with an alternating glyph pattern, like the frog and bird bottom two rows. This allows us to set up the cipher for our alliance partner if they choose to complete both cryptoboxes.

Gripper Physics Diagrams

15 Mar 2018
Gripper Physics Diagrams By Ethan

Task: Describe the physics of the gripper

We always struggle a little with describing our robot to the judges. So, this post will be the third in a series of posts describing the physics of our robot (four if you count the coefficients of friction). First, we have the free body diagrams of the gripper.

Next, to further describe this, we created an expiriment in which we determined the maximum force one octopucker can apply. We took a traditional octopucker and rotated it so that the arms of the pucker would barely impact the sides of the scale. From that, we applied force until the octopucker moved to the next arm. We then averaged the forces recorded to determine the maximum force an octopucker arm can apply.

Under these circumstances, we recorded an average maximum of 4.125 oz of force, which translates to 1.147 N. This translates to an increase in the normal force of +6.882 N. This, in turn, increases the frictional force of the internal lift by fk=uN, where u is the coefficient of friction of the internal lift to the glyph. fk=1.96*6.882=13.489N. So, the simple creation of modified intake octopuckers allowed us to increase the frictional force by +13.489N, which allows our internal lift system to operate.

Force exerted by the octopuckers vs time

Next Steps

On Saturday, we will continue this series of posts, finding the series of constants in infopost #2.

Field Oriented Control

16 Mar 2018
Field Oriented Control By Abhi

Task: Implement a drive system depending on field perspective

We are always looking for ways to make it easier to drive. One way to do that is to modify our code such that no matter where the front of the robot is, moving the joystick in a certain direction will move the entire robot in that direction. This allows our drivers to only think about the field and align with the cryptobox easier. I knew that some FRC teams used libraries developed by WPLIB to implement this sort of drive. Reading their code, I figured out how to implement field-oriented drive in our codebase.

The code began by getting the joystick axis readings. This data then needed to be processed to account for the heading of the robot. This needed a special method depicted below.

Some math needed to be done for the angle. This is no easy feat so I will explain it in case if any other teams want to use this code. The first thing we need to do is the find the sine and cosine of the heading. This allows us to find the power to the x-axis and the y-axis respective to the angle.

Now that the trig is done, we needed to apply these values to the joystick axes. In this method, x represented the forward direction and y represented the strafing direction. That is why, when we look at out[0] which would tell the output forward direction, it considers the joystick's y direction and modifies it with the x-direction so that the joysticks get converted to their respective axes. This applies to the strafing direction as well.

Going back to the original method, the directions output from the method are applied to the actual powers of the motors. Before this happens, in case if any dimensions are over 1.0 (the max speed), they need to be scaled down to to 1. This is what the normalize and clampMotors methods do. Therefore, in the end, the code allows drivers to control the bot respective to the field.

Next Steps:

Now the drive team just needs to test the code out and see what happens.

Engineering the Flag Holder

17 Mar 2018
Engineering the Flag Holder By Abhi

Task: Find a place to put the flag

When we went to Super Regionals, we forgot about where to put our flag with the new design. That led us to strapping a zip tie to a side shield, ruining the aluminum aesthetic. We decided we need a specially designed part to put our flag in since duct tape didn't look nice (we're classy like that). I embarked on a mission to create a 3-D printed part for it. That led to the part you see above, which has worked very well. It didn't always look that nice though. The part endured a very special process, one that Iron Reign has used for years and has carried us through the hard times. If you guessed the engineering process, you are correct.

This was the first iteration of the flag holder. The reason it looks so circular was that it was originally going to stick into the Relic arm so that when it extended, the flag would go with it. I built it around those specifications. However, when I went to print it, I realized that there was no good way to print it without supports (nylon doesn't clean very easily for big supports). I also saw that the holder wasn't modular enough to encompass different flags and had to be mounted only one way. I threw this design in the trash and started over.

Inspired by REV's pillow blocks, I decided to make something similar to that. I wanted the part to be able to mount in different ways in case if robot design modifications were required. That led me to the the design above. It worked much better than the previous design. However, the holes for the flag weren't big enough to fit even a pencil. This is a problem because we don't know how flags will be at worlds. I went back into Creo to make a new design.

As many other people have said, third time is the charm. After enlarging the flag circles and making overall dimension modifications to fit this change, the holder ended up accomplishing both tasks I need it to do. It was big enough to fit a pin with some wiggle room and actually held the flag as seen the first picture. We will use this at worlds and possibly hand them out to teams like us at Supers who are using zip-tie holders.

Motor Constants and Future Plans

20 Mar 2018
Motor Constants and Future Plans By Ethan

Task: Find constants for the motors for future calculations

In order to better predict how our robot will work, we first need to find a few constants to do calculations. Luckily, our school has an engineering class, so many of us have the skillset to do these calculations.

The base data we needed was:

NeverRest 40s:
&tab;160 rpm\16.755 rad/sec
&tab;369 oz-in\2.6057 Nm

NeverRest 60s:
&tab;105 rpm\10.996 rad/sec
&tab;593 oz-in\4.188 Nm

REV Servos:
&tab;.14 s/60°\7.143 rpm\.748 rad/sec
&tab;187.8 oz-in\1.326 Nm

Next Steps:

We are going to record these variables using the calculations or by video analysis next:

  • Mass of robot
  • Acceleration curve
  • Max speed
  • Max turning speed
  • Center of gravity
  • Chain speed on gripper-flipper mechanism and drivetrain
  • Gear ratios of gripper and drivetrain
  • Bungee elasticity under various conditions
  • Torque of various motors on the robot

Business Plan Updates

22 Mar 2018
Business Plan Updates By Ethan

Task: Update the Business/Strategic Plan

See the first and second posts here.

Cumulative Updates as of 3/22/2018


MXP

To make Iron Reign’s history entirely clear, we built the RV last year. We do not claim any credit for the actual construction of the RV; however, the goal of this year was to make our Mobile Learning Lab run year round, make it sustainable, and expand the programs to more communities around the nation. We have done all of this.

BigThought, our programmatic sponsor for the Mobile Learning Lab, is helping educators and professionals in five cities across America create their own programs like the ones we run.

Business and Funding

This year, we went further in finding local businesses by looking up relevant companies that can directly benefit Iron Reign as mentors and sponsors. So far, one company has come to our aid: Advanced Waterjet Cutting. We contacted them over phone and asked about an initial meeting to see if they would sponsor us for creating side-shields and other specialty parts. They agreed immediately and we created a mentor partnership that assists us in materials research and design.
Recently, we have designed our own 3D-printed-parts kit, called REVolution. Our intention was to convert a normal REV bar, as seen on our robot, into a usable driveshaft for design flexibility. Upon finishing, we went to the REV headquarters and presented our design to them. We also have shared the basic designs on Thingiverse so that any interested FTC or FRC team can print them out and use it themselves. Note: The main REVolution discussion is in the building section.

Building

Iron Reign’s pinnacle of design and building so far this year is our REVolution system. We were sick of stripping set screws and twisting axles, and wanted something dependable that also was reusable. Thus came the REVolution system, the purpose of which was to turn REV extrusions into driveshafts so that we could have a solid base and more adaptability in our robot. To these ends, we created a library of parts: mounts, bearing holders, and connectors so that we could use extrusions to do almost anything on our robot. Attached in our engineering journal is a complete list of parts with names, descriptions, and pictures.

Design Process

Later, we further improved upon the grabber design, attaching it to a conveyor belt so that we could move glyphs all across our robot in order to score higher, using our REVolution system. This is the most ambitious use of our REVolution system yet, and we strongly encourage the reading judges to view it at the pits.

You can download the full plan here.

Iron Reign Engineering Journal Summary

22 Mar 2018
Iron Reign Engineering Journal Summary By Ethan

Task: Write a summary page for the engineering journal

The generic engineering journal rubric given to teams by FIRST heavily recomends having a season-summary intro page at the front of the journal. As well, every winning example journal includes the summary. So, we figured out that it might be a good idea to actually make one.

Summary

Iron Reign has been a FIRST team, in one form or another, for eight years. In prior seasons, we have gone to South Super-Regionals and won the North Texas Inspire Award.

We often participate in outreach events. Last year, we fully renovated an old 90’s RV to turn it into a mobile workshop for low income neighborhoods. We now drive the RV all over the Dallas Metroplex in order to reach kids who normally wouldn’t have access to STEM programs, in hopes of inspiring them to go into STEM one day. We have also presented on the national stage in hopes of spreading our RV program to other cities. We recently travelled to the National Science Teachers’ Association Convention in Florida so that we could represent our school as well as inspire educators in other areas to adopt our ideas.

We program our robot in Java, using the Android Studio IDE. We have integrated Vuforia and OpenCV to use our phone’s camera for computer vision to identify the field patterns. OpenCV was an Intel computer vision technology that recently spun off into its own company, and Vuforia is a PTC-owned augmented reality library.

We use a variety of parts in our robot design. For example, in past years we have used a combination of AndyMark and Tetrix parts, using AndyMark materials for our drivetrain, and Tetrix for the rest. However, we are increasingly integrating REV parts into our design, as they let us be more flexible and pull off tougher designs. We also have switched from using the basic power distribution module to using the REV PDM and two expansion hubs.

In our engineering process, we use the Kaizen process, which means that we continually improve each individual part of our robot. We also have design competitions, in which two or more team members each create a part made to solve the same issue. When we were designing our cryptobox grabber, we started with a design competition. Evan built an arm-grab system for the cryptobox grabber, and Austin created a conveyor belt to grab cryptoboxes. Through testing, we determined that the grabbers were more efficient and reliable at picking up blocks than the conveyor belt. As well, the arm-grabber was more compact than the conveyor belt, which was unstable and unwieldy. Then, as we used the arm-grabber, we realized that it still needed work, as the grabber missed some blocks and the driver had to be extremely accurate. So, we designed a new rotating grabber, with soft spikes to hold blocks better, to grab blocks quickly and grab more than one at a time, then one with 3-D printed arms. Afterwards, we decided this wasn’t efficient enough and created a new system with an octopucker design, then mounted the new gripper to a 270° conveyor so that we could move glyphs around the robot with enhanced speed.

We also utilize 3D printed parts throughout our robot. We design parts using PTC Creo, and can print parts in a variety of materials, including nylon, ABS, Filoflex, and Ninjaflex. Usually, we opt to use nylon, as it is flexible enough as not to break under stress, but is strong enough to handle our needs during the game without breaking. Printed parts on our robot enable us to create more flexible designs and circumvent issues that pop up. For example, originally, our robot’s mecanum wheel would damage blocks when hitting them, so we had to design wheel guards to protect both our robot and field elements. We iterated through multiple designs, eventually settling on a u-shape that covered our wheels while not affecting mobility. Then, we changed the height until the part wouldn’t cut into the mats while turning.

More specifically, we have created a personalized library of parts called REVolution for REV extrusions to turn them into driveshafts. We have had great success with these and have shared them with other teams to spread our parts. Refer to our additional handout and presentation for a more in-depth idea of what these do. This is the best part of all of Iron Reign’s designs this season, and we think it is very useful and important.

This year has been an extremely successful year for our team as far a business goes. Normally, we receive FIRST sponsorships, and other minor sponsorships to cover tournament fees. However, this year, we have received sponsorships from a variety of sources. First, in building our RV, we received money from BigThought, a Dallas nonprofit, to run our RV, as well as money from a Dallas initiative called Dallas City of Learning. We also received a grant from Best Buy for 4 onboard 3D printers and 20+ laptops to educate on. Then, we received $3000 of REV parts, two practice fields, and a sponsorship from our school district in exchange for hosting a qualifier and running a DISD scrimmage. We also partnered with AWC to cut our side shields out of aluminum.

Our strategic + business plan is on the next page, and then our Tables of Contents follows, with exceptional posts that we would like you to read highlighted.

Download the pdf here.

Lab Planning

28 Mar 2018
Lab Planning By Ethan

Task: Design labs to find more physical properties of our robot

Lab #1: Batteries

Procedure

  1. Obtain a fully charged REV battery - should say ~13V on our battery charger
  2. Record the voltage upon being plugged in to the robot
  3. Start a timer at the same time as drivers practice starts - this should be intensive practice
  4. When done driving, stop the timer and record the final voltage

Data

Vi Vf Runtime(t) ΔV
Run 1
Run 2
Run 3

After recording the voltages, we will calculate ΔV=(vf-vi)/t for each run, hopefully totalling 10 runs so that we can safely use statistical analysis to calculate standard deviation and outliers for each battery. The purpose of this is to find our best batteries for use in competition as well as set a baseline for future batteries.

Lab #2: Videoanalysis

Procedure

  1. Record videos of the robot accelerating to full speed and rotating at full speed
  2. Put the videos into LoggerPro
  3. Perform videoanalysis, finding the acceleration curve, max linear speed, and max angular speed

Data

Vmax Wmax Amax

Next Steps

We will perform these labs on Saturday; as well, we will find the gear ratio numbers.

Controller Mapping

02 Apr 2018
Controller Mapping By Janavi

Task: Map the controller layout

At this point, we are training the next generation of the drivers on our team, and since we have so many buttons with so many different functions it can often become difficult for the new drivers to determine which button does what, so Karina and I created a map of the controller. By doing this, we not only assist others in determining what button they need to press to do what, but also help the coders in understanding the wants and needs of the drivers. This is because often times when we are coding we will set any function to any available button, just to test if it works. But oftentimes we don't change the button value after that and then there are either far too many buttons for the driver to easily control the robot, or the buttons are too far apart for easy access. Now, after creating this map the drivers were able to sit down together with the coders and map out the most effective controller in their minds together.

Next Steps:

We have planned that now as a part of our post-mortem discussion as well as discussion what could have been done to improve the robots functions as pertaining to code. We will also sit down and take out the controller map and determine if any of the buttons can be switched for easy driver control. This will not only lead to better, more efficient driving but will also lead to better communication between groups.

Elastics Testing

02 Apr 2018
Elastics Testing By Ethan

Task: Test wear and tear on our robot's bungees

This is the fifth or so article in our series on robotics testing. Today's spotlight will be on the constants of our robot's bungees, and how they're affected by various wear and tear. So, we took three bungees from the same set as the ones on our robot, and placed them in various places: stretched outside, stretched inside, and a control sitting in the robot room. The purpose of this is to see whether or not our bungees merit periodic replacements.

Procedure

  1. Cut three identical elastics
  2. Leaving one unstretched inside, place the other two stretched inside and outside
  3. Attach your chosen bungee to a 10 lb weight
  4. Positioning your hand 8 cm from the knot, pull upwards, recording this inital position as xi
  5. When the weight barely moves off of the ground, measure the knot-hand distance and record it as xf
  6. Using these values, calculate the elasticity constant for each bungee

Data

Run x-initial (m) x-final (m) Δx (m)
Normal .08 m .151 m .071 m
Inside .08 m .155 m .075 m
Outside .08 m .162 m .082 m

Calculations

W = 10 lbs = 44.482 N
x1 = .071 m, x2 = .075 m, x3 = .082 m
ΣF = Fsp - W = 0
Fsp = W
kx = W
k = W/x
k = 44.482/x
k1 = 626.51 N/m, k2 = 593.09 N/m, k3 = 542.46 N/m

Calulated Data

Run Elastic Constant (N/m)
Normal 626.51 N/m
Inside 593.09 N/m
Outside 542.46 N/m

Analysis

Assuming a standard deviation of 5%, we can perform a one-sample t-test to see if our results are statistically significant. We will test the inside/outside values against the contol.
Mean = 626.51 N/m
SD = 31.32
N = 3
α = .05
Ho: There is no significant difference between the unstretched band's elasticity and the stretched bands inside or outside Ha: There is a significant difference between either the band left unstretched and the bands left stretched inside or outside

For the elastic left inside, we found a p=.2058. For those not accustomed to statistics, this means that there is a ~20% chance that our results come from chance. This is too high of a probability to say whether or not to say that staying inside affects the elasticity of a band.

For the elastic left outside, we found a probability p=.0433. This means that there is a 4.33% probability that these results come from chance. For most journals, the minimum p-value, or α, is .05 = 5%. Thus, we can safely say that elastics left outside can be damaged and will not work on the same level as the untouched bands.

Conclusion

Given that we only found a statistically significant result for the band left outside, we cannot safely conclude much. That being said, these results suggest that we should replace bands before Worlds, as we leave our robot outside, but covered. As well, even with a 20% probability that there isn't a difference for the inside bands, it is still uncomfortable to say that there is absolutely no correlation. For these reasons, we suggest regular switching of the elastics on the robot.

Importance of Documentation

03 Apr 2018
Importance of Documentation By Abhi and Tycho

Task: Explain commits

As explained in a previous post, we were having many issues with git commits and fixing our errors in it. After a lot of the merging conflicts, we had to fix all the commits without exactly knowing what was being changed in the code. Part of the reason this was so hard was our lack of good naming conventions. Though we always try to make a title and good description for all posts, this doesn't always happen. This is precisely why it is important to check in all changes at every session with good descriptions. Someone had to spend their time mechanically trying to do merge conflicts without understanding the intent behind the code. So it took them longer, they may have made mistakes, an issue fixed by good documentation in the first place.

This post is dedicated to explaining some of the errors and what the commits true intentions were.

Stuff:

That one is mostly about code for the 3rd servo in the gripper open/close methods. It created the servo in pose and added code for it in GlyphSystem2.

4a6b7dbfff573a72bfee2f7e481654cb6c26b6b2:

This was for tuning the field oriented code to work. There were some errors with arrays in the way power was fed to the motors (null pointer exception) so I (Abhi) had to fix that. Also, I made some touch up edits with formatting in the methods. After all this, Tycho made (may have edited existing) a method in Pose for Viewforia demo. Minor changes were made to account for this.

c8ffc8592cd1583e3b71c39ba5106d48da887c66:

First part was all Argos edits at the museum to make it functional and fine tune some measurements. Second part involved the conveyor belt flipper. Tycho made changes to the dpad up and down to return to the home position rather than carry out complete motion (not sure if this carried over in all the commit mess but it was done theoretically). Driver practice will have to confirm changes.

Next Steps

Don't name things badly so this doesn't happen.

Build Kraken 2

07 Apr 2018
Build Kraken 2 By Janavi and Kenna

Task: Build a Pushbot (Kraken 2)

Building. It seems so simple but alas I was wrong, so wrong. During our post mortem, when we discussed our roles on the road to worlds, Kenna and I volunteered for building a pushbot. We both wanted to get more experience in building and thought this would be a perfect way to becoming well-versed in building. Our task was to create a drive base that, when placed on the field, would emulate a real robot on the field allowing our drivers to get more realistic practice. Our design for the pushbot imitates an earlier version of Kraken, just with side shields.

  1. To cut the pieces for the drivetrain, we needed to get trained for using the miter saw. Austin showed us and Abhi how to properly use one.
  2. After cutting the tetrix pieces, we followed an earlier design to create a square upon which we attached the wheels.
  3. We printed 3D custom motor mounts to mount the motor on. Often times the real motor mounts are very expensive, so we decided to used a CAD model. Now unbeknownst to both of us, we attached these lovely lads backwards. We did not realize our mistake until all motors and chains were already on the robot.
  4. The next step was to find the lazer cut side shields, which work as our wheel mounts. On our last robot we created custom 3D mounts for the mecanum wheels but these proved to be large, bulky, and limiting in terms of building space. So this year we designed side-shields that would hold the wheel in place while maximizing the 18 by 18 by 18 space we have. After searching for the shields for about 3 hours, we finally found them and placed them on the robot. Putting the wheels on after that was a breeze.
  5. Kenna and I set out the look for motors, sprockets, and motor collars. Sadly neither of us knew that both axle and motor collars existed and, after searching for so long, we had to go back and begin our search anew for motor collars. Finally, we were able to locate the required supplies and set to attaching the motors to the drive train.
  6. Finally, it was time to put on the chains connecting the wheels and motors. We learned how to find and remove the masterlink, as well as how to put the whole thing back together. For a short period of time, we flew into a panic because we couldn't find the masterlinks we had put aside, but soon we found them and put them onto the robot.

New Skills Learned:
  • Miter Saw
  • Handheld Drills
  • Chain Assembly
  • Trial and error is key

Next Steps: Finish and Code Chassis

Once we put the finishing touches on the chassis physically, we can begin coding it. Expect a new post on how we code it soon! Both of us are relatively new to coding robots so this should be interesting.

Upgrading Kraken

09 Apr 2018
Upgrading Kraken By Abhi

Task: Update CAD model

With FIRST Champs right around the corner, we needed to update our CAD model to match our current Kraken. After all, Kraken can't be lackin' any features. I decided to reopen Creo and make some modifications.

One of the most important things I needed to put on was the Relic arm. After planning on it for the whole season, we finally finished it recently. I made a quick CAD model for it in a separate assembly. The servo horn with a custom made circular disk for holding spool was attached via co-incident constraints. The linear slide system was represented with coinciding a set of REV rails to do this job. The elbow joint with actual grabber was done previously in another assembly. Once I finished the Relic arm assembly, I constrained it to the Robot model using coincident and distance constrains. I also made a small modification to the existing Jewel arm to account for the alignment on our actual robot. I used angle offset for this.

Next Steps:

Present this model to anyone who is interested in the specifics of our robot!

Autonomous Updates, Multi-glyph

10 Apr 2018
Autonomous Updates, Multi-glyph By Abhi

Task: Score extra autonomous glyphs

At super regionals, we saw all the good teams having multi glyph autonomi. In fact, Viperbots Hydra, the winning alliance captain, had a 3 glyph autonomous. I believed Iron Reign could get some of this 100 point autonomous action so I sat down to create a 2 glyph autonomous. We now have 3 autonomi, one of which is multiglyph.

I made a new methods called autonomous3(). For the starting settings (like driving off balancing stone and jewel points), I copied code from our existing autonomous program. After that, I realized that 10 seconds of the autonomous period had already been used by the time the robot had driven off the stone. That led me to think about ways to optimize autonomous after that point. I realized that if the gripper deployed as the robot was aligning itself with the balancing stone, it would save a lot of time. I also sped up the drive train speeds to lead to maximum efficiency. I had many runs of the fix though.

First time through, I ran the code and nothing happened. I realized that I forgot to call the actual state machine in the main loop. Dumb mistake, quick fix.

Second run: The robot drove off the balancing stone properly and was ready to pick up extra glyphs. Unfortunately, I flipped the motor directions to the robot rammed into the cryptobox instead of driving into glyph pit. Another quick fix.

Third run: The robot drove off stone and into glyph pit. However, it went almost into the Blue zone (I was testing from red side). Also, the robot would rotate while in the glyph pit, causing glyphs to get under the wiring and pull stuff out. I had to rewire a couple things then I went back to coding.

Fourth run: The robot drove off stone and into pit and collected one more glyph. The issue was that once the glyph was collected, the bot kept driving forward because I forgot to check the speeds again.

Fifth run: All the initial motions worked. However, I realized that the robot didn't strafe off as far as I needed it to reach the glyph pit. I added about .3 meters to the robot distance and tested again.

Sixth run: I don't know if anyone says 6th time is the charm but it was definitely a successful one for me. The robot did everything correctly and placed the glyph in the cryptobox. The only issue I had was that the robot kept backing away and ramming the cryptobox during end of auto. I fixed this easily by adding another autoState++ to the code.

Before I made the fix after the 6th run, I decided to take a wonderful video of the robot moving. It is linked below.

Next Steps:

Everything is ready to go to do a multiglyph autonomous. However, the robot doesn't score by the codex for the correct column. I need to implement that with IMU angles before Champs.

Robot Video Analysis

10 Apr 2018
Robot Video Analysis By Charlotte

Task: Determine the acceleration and max velocity experimentally

To find the acceleration and maximum velocity of our robot we decided to use a method we have learned in our physics class at school: video analysis with Logger Pro. The procedure is like so: Take a video of the robot head on with a still camera. In the video, in the same frame of movement as the robot, hold a known measuring device (ruler/meter stick). Insert the video into Logger Pro, use the ruler tool to set the distance of the measuring device you used to its length and use the point tool to place a point on the same part of the robot (like the front wheel) for every frame. You can see the collection of points in the image below:

Logger Pro automatically makes a displacement and velocity graph for X and Y. We are interested in the X direction unless your robot is flying. To make an acceleration graph, create a new calculated column that takes the derivative of the X velocity graph. Both graphs are shown below:

Finally it is time to analyze our data. To find max velocity: use the stats tool on the point where the velocity is done increasing and has become constant. To find the acceleration: in this case the acceleration is not constant, so we are looking to find the average acceleration in the beginning when the robot is speeding up from rest by using the stats tool again on the portion of the acceleration graph that occurs at the same time as the velocity initially increases, right before it becomes constant. These were our results:

Max Velocity: 1.67 m/s | Average Acceleration: 2.58 m/s^2

We did this video analysis in order to better understand our robot. We will use this information when we are making code changes to the robot in these last days before Worlds.

Next Steps:

We have made determined many aspects of our robot experientially, the coefficient of friction of our internal lift, etc. In the future we will use these skills to find out more abour our robot.

Relic Arm

12 Apr 2018
Relic Arm By Karina and Evan

Task: To have a working relic arm in time for Worlds

For weeks now, Team 6832 has been working hard to have a functional relic arm designed and mounted on the robot. We feel that it is absolutely necessary to be able to complete relic recovery at Worlds if we do not want to be crushed by the competition. Well, fear not, our relic arm is here!

Now, as you probably already know if you have seen our robot, Kraken is big and heavy. There’s not much space left to fit much of anything before different parts of the robot start interfering with each other. There is very little clearance left vertically and from the front to the back of the robot before we exceeded the 18 by 18 inch size limit.

Due to this, there was a bit of hesitance when it came to mounting the darn thing because it had seemed at first as if we would have to cut our beautiful side shields to be able to fit the relic arm onto the robot. However, we found a way around this.

First, I will briefly explain the design. There are two major components to the relic arm: the linear slide system and then the final metal bar that the “hand” of the relic arm is mounted on. The linear slide of the relic arm provides most of the extension length to the robot, and is what gets the “hand” across the walls of the field. A servo on the end of the linear slide system extends the final length of the arm, the part which grasps the relic. We felt that having this part at the end of the arm would give us more control when grabbing the relic, and help make it easier to balance the relic in endgame.

Anyway, because the final extension of the robot attached via a servo, this creates a distance between the two major components of the arm, which allowed us to fit the side shield in between the two. We still had to drill holes in the side shield, sadly, but this was much better than the alternative. We did not mount the arm directly by the slide system, of course. Instead, we attached another REV rail to the bottom of the slide system using double brackets, which created extra space for the side shield to fit in between the two components of the arm. Also, surprisingly enough, when we tested the grabber system, we found that despite the tight fit, the relic arm did not get in its way of the octopuckers when flipping upward or downward.

Where will we go from here?

Just because we finally have a relic arm does not mean we are done working on it. From now until Worlds, we will continue improving our relic recovery and tweaking the design of the arm along the way. We will have to fit time in for completing the challenge, but we have faith in our drive team!

REVolution on Thingiverse

13 Apr 2018
REVolution on Thingiverse By Abhi

Task: Publish REVolution Parts

Tired of slipping set screws? Want a rigid drive shaft as long or tall as your robot? Have a bunch of REV Rail lying around? Have we got a solution for you...

Turn your REV Rail into a beater-bar, a drive shaft or a heavy duty hinge with our Spintastic Axializer System … The REVolution System

Iron reign has developed these parts over the course of this season and they have served as essential pieces of our robot. Now you don't have to worry about snapping axles and those darn set screws. Choose your attachment plate, your internal pieces, and assemble them together! With this system, you robot can be efficient and flashy.

The parts are avaliable at

https://www.thingiverse.com/thing:2859442

If you need help with part assembly or printing, please contact us and we will be glad to help. Tutorial videos are in the process of being made. Details about the parts are listed below

Autonomous Updates, Multiglyph Part 2

15 Apr 2018
Autonomous Updates, Multiglyph Part 2 By Abhi, Karina, and Tycho

Task: Develop multiglyph for far Stone

We had a functional autonomous for the balacing stone close to the audience. However, chances are that our alliance partner would want that same stone since they could get more glyphs during autonomous. This meant that we needed a multiglyph autonomous for the far balancing stone. We went on an adventure to make this happen.

We programmed the robot to drive off the balancing stone and deploy the grippers as this occurred. To ensure the robot was off the stone before deploy, we utilized the roll sensor in the REV hub to determine whether the angle the robot was at was flat on the ground. This made our autonomous account for the error we could have on the balancing stone in terms of placement in the forward backward direction respective to the field. Next, we used an IMU turn into the glyph pit to increase our chances of picking up a second glyph. Then, we backed away and turned parallel to the cryptobox. The following motion was to travel to the field perimeter for a long period of time so that the robot will be pushing the field perimeter. This was done to correct any wrong angles and make grippers perpendicular to field wall. Then the robot backs up and scores the glyphs. Here is a video of it working:

Next Steps

Now we are speeding auto up and correcting IMU angles.

REV Rail Deformation and Faults of Design

15 Apr 2018
REV Rail Deformation and Faults of Design By Karina, Austin, and Abhi

Task: Analyze Source of Gripper break

As you can see from the video above, the REV rail twisted when the gripper rotated. Due to the high torque caused by intaking glyphs (4.02 Nm), the rails were required to turn very quickly. When we were designing the gripper, we didn't consider the friction among the nylon parts. Before we noticed the rails twisting, we heard squeaking noises (now we know its because of the high friction). The twisting led to the much slower grippers and a twisted frame.

To fix the issue, we needed to create less friction in the REVolution parts. We don't have enough time to remove the grippers and switch out the parts so we just used Teflon powder to lube the REVolution parts. It wasn't necessary to switch out the REV rail because since the twisting occurred uniformly. After testing the grippers again, the grabber moved properly.

Next Steps:

In order to not replicate the same issue, we must switch out the REVolution parts frequently. Even after Championships, we have Texas UIL so we can fix the gripper by then. Next year, we hope to use REVolution for our drive train, so we must be extremely careful with the parts.

Finishing the Chassis

29 Apr 2018
Finishing the Chassis By Kenna and Janavi

Task: Build a Chassis

We have been working on this chassis for over 3+. In out last post, we had thought the wheels were ready to go. However, various parts, such as wheel mounts, had been put on backwards or were unusable so we had to do everything over again.
Now that the robot has wheels, we started on attaching the REV expansion hub and battery. The chassis is square, but has an asymmetrical structure of tetrix bars. Attaching the battery was the simple part since previous version of the robot had a 3D-printed battery holder that would be screwed on. There was no way to effectively place the expansion hub on the tetrix rails. Instead, we attached a thin plank of wood to two parallel bars, drilled a couple holes, and screwed the hub on.
Overall, it is a very no-frills chassis. We had to cut most of the side shields off because they were becoming more of an obstruction than an aid.

Next Steps

Though the physical robot has been built, it has no code. Both of us will be learning how to program a basic pushbot.

UIL 2018

18 May 2018
UIL 2018 By Abhi, Karina, Evan, Janavi, Austin, Justin, and Shaggy

Task: Attend the 2018 UIL Robotics Competition

Background

For those who don't know, UIL Robotics is the premier state robotics competition for Texas. Iron Reign has been a beta-testing partner since its inception, and this year was the event's first year as a full-fledged program.

To participate in UIL, a team must win at a Regional level, and have a good overall showing. This year, since we got 2nd Inspire at Regionals and 3rd Inspire at Oklahoma Regionals, we were a shoo-in for an invitation. Being a state event, the DISD STEM Dept. supported us through transportation, food, and lodging along with other DISD teams such as Mechanicats.

The Night Before

As with all Iron Reign tournaments, we stayed up way longer than we should have. But, unlike other times, we had a purpose: to help fellow teams.

We assisted the other DISD team, Mechanicats with programming and driver practice. In particular, they didn't have a working autonomous to begin with. But, with our half-field and glut of programmers, we helped them create a basic autonomous for the next day. As well, we collaborated on their TeleOp to make it more driver-friendly.

The Day Of

We walked into the tournament, tired, but excited for the last tournament of the season, led by our two robots, Kraken and C.A.R.T. BOT. Kraken is our Relic Recovery robot; a tank on wheels with specially cut aluminum sideplates and our proprietary REVolution system. So, it got plenty of looks. Then, we also brought the newest addition to the Iron Reign family: CART BOT. CART BOT is the automated corpse of our robot cart. For the past month, we've been tearing it down, replacing its wheels, motorizing it, adding a power source, and so much more. It tops out at 20 MPH and can carry 300 lbs. without blinking an eye. Naturally, we thought UIL was the perfect place to bring it out.

Since UIL is the last tournament of the season and has no real consequences, we use it as a trial field for next year's changes. First, we had Evan lead our pit crew team as practice for next year. As well, we used the competition to practice driving for next year as well as improve our scouting strategies after worlds.

One of the best things about UIL is the ability to really interact with other Texas-area teams that we normally wouldn't see until Supers. A lot of the teams came over to see our robot, which is kind of understandable because it's probably the best robot we'll ever build. But, we had a surprising number of teams come up to talk to us about our Engineering Journal, including people who had already seen our journal online and wanted to talk about it to us in person (Vitruvian Voltage).

Robot Performance

Even though we enjoy UIL, it's never our best competition of the year. Some of this is due to exhaustion; we tend to run out of steam by then, but it can also be attributed to that UIL is a robot-game intensive event, and Iron Reign tends to focus more on awards. So, we tend to comparatively underperform as compared to a theoretical Iron Reign stand in.

We started off the day in a bad place, as one of the chains on the robot snapped for the first time in the season. However, we still managed to win the match as we were carried by our partner. But, we managed to do decently in the next four matches. This wasn't entirely due to luck, it was just that we had more competition experience than some of the other teams due to Worlds, and were able to perform more effectively.

Luckily, our scouting paid off, and we were chosen as the first pick of the #1 alliance. We won our first final match, but then lost the next two due to unreliability.

The UIL Difference

Unlike FTC, UIL puts much less of an emphasis on judging. First, there aren't any presentations: everything is done at the pit. In addition, UIL judges are FRC first, and FTC second, so they weren't aware of many differences between the two. Finally, the awards mean nothing.

Next Steps

This was the last competition of the season, so now Iron Reign will go into Funding, Outreach, and Recruitment mode for a while for the next season, but keep track of our blog to see what we'll do next. Relic Recovery '17-'18, signing off.

Swerve Drive Experiment

02 Jun 2018
Swerve Drive Experiment By Abhi

Task: Consider a Swerve Drive base

Last season, we saw many robots that utilized a swerve drive rather than the mecanum drive for omnidirectional movement. To further expand Iron Reign's repertoire of drive bases, I wanted to further investigate this chassis. Swerve was considered as an alternative to swerve because of its increased speed in addition to the maneuverability of the drive base to allow for quick scoring due to its use of traction wheels at pivot angles. Before we could consider making a prototype, we investigated several other examples.

Among the examples considered was the PRINT swerve for FTC by team 9773. After reading their detailed assembly instructions, I moved away from their design for many reasons. First, the final cost of the drive train was very expensive; we did not have a very high budget despite help from our sponsors. If this drive train was not functional or if the chassis didn't make sense to use in Rover Ruckus, we would have almost no money for an alternate drive train. Also, they parts used by 9773 involved X-rail rather than extrusion rail from REV. This would cause problems in the future as we would need to redesign the REVolution system for X-rail.

Another example was from team 9048 which appeared to be more feasible. Because they used REV rail and many 3D printed parts, this was a more feasible prototype. Because they didn't have a parts list, we had the find the rough estimate of cost from the REV and Andymark websites. Upon further analysis, we realized that the cost, though cheaper than the chassis of 9773, would still be a considerable chunk of our budget.

At this point it was evident most swerve drives being used are very expensive. Wary of making this investment, I worked with our sister team 3734 to create a budget swerve with materials around the house. A basic sketch is listed below.

Next Steps

Scavenge for parts in the house and Robodojo to make swerve modules.

Swerve Drive Prototype

09 Jun 2018
Swerve Drive Prototype By Abhi and Christian

Task: Build a Swerve Drive base

Over the past week, I worked with Christian and another member of Imperial to prototype a drive train. Due to the limited resources. we decided to use Tetrix parts since we had an abundance of those. We decided to make the swerve such that a servo would turn a swerve module and the motors would be attached directly to the wheels.

Immediately we noticed it was very feeble. The servos were working very hard to turn the heavy module and the motors had trouble staying aligned. Also, programming the chassis was also a challenge. After experimenting further, the base even broke. This was a moment of realization. Not only was swerve expensive and complicated, we also would need to replace a module really quickly at competition which needed more resources and an immaculate design. With all these considerations, I ultimately decided that swerve wasn't worth it to use as a drive chassis at this time.

Next Steps

Consider and prototype other chassis designs until Rover Ruckus begins.

Big Wheel Ideas

23 Jun 2018
Big Wheel Ideas By Janavi

Task: Create a Unique Chassis

This summer, we're working on creating unique chassis that are outside of our comfort zone. Often we choose safe bases - opting for ones that we have tried in the past and know work. But, taking the opportunity to explore unique bases allows us to see their performance. One of our ideas is for a two-wheeled robot, with two large wheels and one, smaller, non-motorized omniwheel. We think that this 2-wheeled robot would be a good opportunity for Iron Reign, as we know that our robot has to be lighter than the Relic Recovery robot and a non-mecanum drive would be much lighter. Here is a drawing of what we plan the chassis to look like:

To make this chassis the most efficient based on what we currently know about the competition (light weight robot needed) we are planning to do different tests and calculations to determine the proper motor-gear ratio needed and the wheel locations to properly balance the robot. We also need to perform tests to determine the best material to use for the robot. In the past we've used REV rails for the majority of our structure but due to the weight limit on our robot we plan to minimize metal in our design rather opting for materials that are just as functional but weight less.

Next Steps

Perform calculations comparing different motors as well as different wheel ratios to determine the optimal ratios

Position Tracking

18 Jul 2018
Position Tracking By Abhi

Task: Design a way to track the robot's location

During Relic Recovery season, we had many problems with our autonomous due to slippage in the mecanum wheels and our need to align to the balancing stone, both of which created high error in our encoder feedback. To address this recurring issue, we searched for an alternative way to identify our position on the field. Upon researching online and discussing with other teams, we discovered an alternative tracker sensor with unpowered omni wheels. This tracker may be used during Rover Ruckus or beyond depending on what our chassis will be.

We designed the tracker by building a small right angular REV rail assembly. On this, we attached 2 omni wheels at 90 degrees to one another and added axle encoders. The omni wheels were not driven because we simply wanted them to glide along the floor and read the encoder values of the movements. This method of tracking is commonly referred to as "dead wheel tracking". Since the omnis will always be touching the ground, any movement will be sensed in them and prevents changes in readings due to defense or drive wheel slippage.

To test the concept, we attached the apparatus to ARGOS. With some upgrades to the ARGOS code by using the IMU and omni wheels, we added some basic trigonometry to the code to accurately track the position. The omni setup was relatively accurate and may be used for future projects and robots.

Next Steps

Now that we have a prototype to track position without using too many resources, we need to test it on an actual FTC chassis. Depending on whether or not there is terrain in Rover Ruckus, the use of this system will change. Until then, we can still experiment with this and develop a useful multipurpose sensor.

Chassis Flyer

22 Jul 2018
Chassis Flyer By Ethan

Kraken

This is Iron Reign’s world-championship robot from last season. The basic rundown is this:

  • Weight - 42 lbs
  • Size - 18x17.8x17.5 inches
  • Drive - Mecanum
  • Main parts kit - REV

Iron Reign uses two design processes in conjunction with each other to create efficient and reliable parts: iterative, continual improvement and competitive design.

An example of these design processes working in conjunction is the process of designing our cryptobox intake system. One person had the idea to build an arm-style grabber seen on many current competition robots. His design, however, included shorter arms for space’s sake and a more compact lift system than normal. The second person decided to build a unique conveyor-belt system which used friction to hold blocks in space and move them vertically. Through the competition, we determined that the prior design was more efficient and took up less space than the latter, so we settled on his design, adding in a linear slide for lifting at the end of the process. Then, Kaizen comes in. Through firsthand experience in scrimmages, we learned that the grabber system isn’t as reliable as we thought when first testing. So, we have designed a new grabber system that moves like the arms did previously, but also rotate with soft spikes attached to hold blocks with friction better without damaging them.

As this soft-spike system ceased to perform to our expectations, we looked to other mechanisms to pick up and deliver blocks effectively. We created a new grabber that still used the rotating systems of the soft-spike, but instead, we used custom 3D printed “octopuckers” which had a much tighter grip on the glyphs. As well, inside the gripper, we created a custom “lift” made out of NinjaFlex so that the blocks could be moved up and down internally in the gripper, eliminating our need for stacking.

Later, we further improved upon the grabber design, attaching it to a conveyor belt so that we could move glyphs all across our robot in order to score higher, using our REVolution system. This is the most ambitious use of our REVolution system yet, and we strongly encourage the reading judges to view it at the pits.

BigWheel

The main purpose of this robot is to see if larger wheels will give us an advantage in the competition. Right now, we’re guessing that the competition field will have debris, and we hope that the large wheels will perform better in this environment.

  • Size: ~18x18 in
  • Wheels - 8in large, regular omni wheels in front
  • Part System: Custom parts

Garchomp

For skill development we have newer builders replicating the chassis portion of our competition robot (Kraken). This one will not be weighed down by the additional upper structure of the competition robot and so should be a closer comparison in weight class to most of the other chassis designs under consideration here. Garchomp has a simplistic design and is nothing more than mechanums, rev rails, motors, sprockets, wires, and a rev hub. The large mechanums are held together using side plates from the 2017-18 competition season. These are geared up to neverest 40:1 motors.

  • Size: ~18x18 in
  • Wheels: Mechanum
  • Part System: REV
  • Motors: Neverest 40:1

Summer Chassis Project - July Meeting

22 Jul 2018
Summer Chassis Project - July Meeting By Kenna, Ethan, Charlotte, Karina, Shaggy, and Abhi

Task: Compare & Collaborate on Chassis

At Big Thought's offices in downtown Dallas, three teams met. Technicbots (Team 8565), EFFoRT (Team 8114), Schim Robotics (12900), and Iron Reign are all part of the North Texas Chassis Project. The goal is for each team to create any number of chassis and improve their building skills by learning from the other teams.

The meeting began with an overview of all teams' progress. Each team presented their thought process and execution when creating each bot and discussed why/how everything was done. At the end, we all reviewed the rule changes for the 2018-19 season. Once all questions had been asked and answered, testing began.

Austin Lui of Technicbots gets their chassis ready for testing.

Using leftover tiles from last season, we set up a small field in Big Thought's blue room. Technicbots provided a ramp to do enhanced testing with. All teams plan on testing:

  • Forward speed
  • 3 second turn
  • Up/Down ramp
  • Balancing stone
  • Weight-pulling
  • Straight line drift
  • 90/180° turn offset

Connor Mihelic of EFFoRT adds some finishing touches.

We know from Google Analytics that our website has about 200 visitors a month but we rarely meet the people who read and use our blog posts. Today, we got to meet the mentors of Team 12900 from a middle school in Plano, TX. When they and their students were starting out as a team, they utilized our tutorials and journal. Apparently their teams members are avid followers of our team, which was very meaningful to hear. Some non-FTC friends visited as well and were introduced to cartbot.


Terri and Grant Richards of Schim Robotics.

Next Steps

Using what we learned from the other teams, we will begin to improve all of our chassis. Most of them are at varying levels of completion so now we want to concentrate on getting all of them to the same level of functionality. Garchomp is, notably, the most behind so he will be getting the most attention from here on out.

Replay Autonomous

28 Jul 2018
Replay Autonomous By Arjun

Task: Design a program to record and replay a driver run

One of the difficulties in writing an autonomous program is the long development cycle. We have to unplug the robot controller, plug it into a computer, make a few changes to the code, recompile and download the code, and then retest our program. All this must be done over and over again, until the autonomous is perfected. Each autonomous takes ~4 hours to write and tune. Over the entire season, we spend over 40 hours working on autonomous programs.

One possible solution for this is to record a driver running through the autonomous, and then replay it. I used this solution on my previous robotics team. Since we had no access to a field, we had to write our entire autonomous at a competition. After some brainstorming, we decided to write a program to record our driver as he ran through our autonomous routine and then execute it during a match. It worked very well, and got us a few extra points each match.

Using this program, writing an autonomous program is reduced to a matter of minutes. We just need to run through our autonomous routine a few times until we're happy with it, and then take the data from the console and paste it into our program. Then we recompile the program and run it.

There are two parts to our replay program. One part (a Tele-op Opmode) records the driver's motions and outputs it into the Android console. The next part (an Autonomous Opmode) reads in that data, and turns it into a working autonomous program.

Next Steps

Our current replay program requires one recompilation. While it is very quick, one possible next step is to save the autonomous data straight into the phone's internal memory, so that we do not have to recompile the program. This could further reduce the time required to create an autonomous.

One more next step could be a way to easily edit the autonomous. The output data is just a big list of numbers, and it is very difficult to edit it. If we need to tune the autonomous due to wear and tear on the robot, it is difficult to do so without rerecording. If we can figure out a mechanism for editing the generated autonomous, we can further reduce the time we spend creating autonomous programs.

Adjusting Garchomp's Chains

18 Aug 2018
Adjusting Garchomp's Chains By Janavi and Kenna

Task: Build the Chassis

In our last post, we thought that we had finished Garchomp. However, as we came back to the next practice, we realized that Garchomp's chains were incorrectly linked.

So, we started to diagnose the problem. We noticed that the old REV rails we were using had dents in them, which caused the motors to shift, therefore causing the chains to come off the gears.

To amend this problem, we decided to replace the REV rails ensuring that the motors would not shift during movement. To accomplish this we:

  • First, we loosened all of the screws on the current bar, carefully slid it out, and replaced it with new bars
  • Then we fixing all of the chains and confirming that each of them were individually working
  • we re-attached all of the cables to the robot
  • Ran a stress-tester program and hung the robot on a hook to allow us to properly observe the wheels
Due to our tests we discovered that our wheels were running at different speeds, meaning that our robot constantly moved in circles. After checking that the motors were working, we discovered that it was our encoder cables that were plugged in wrong. After that, Garchomp began to run smoothly.

Next Steps

We will run more stress tests on our robot and make sure that it is up to par with our past robots.

BigWheel CAD

21 Aug 2018
BigWheel CAD By Ethan

Task: Create a mockup for BigWheel

We've been working on a design for the chassis workshop for quite a while now. We already presented it at the first meeting, and now we need to work on the other components of our presentation: the weight testing, torque calculations, speed testing, and finally, a chassis model. To do the last one, we made a simple model in PTC Creo.

Bigwheel Presentation

03 Sep 2018
Bigwheel Presentation By Arjun and Karina

Task: Present about Garchomp

As a new freshman on Iron Reign, I took on the responsibility of a robot we called Bigwheel. Karina and I worked on getting the robot into something that could be put through load tests, meaning tightening the chain, fixing misaligned sprockets, and getting the wiring together. We participated in the Chassis Presentation workshop hosted by technicbots for teams all around the North Texas region to work on one or more chassis, perform various tests with them and then present their findings. We presented our chassis Bigwheel, which is driven by 2 large 8-inch wheels, with a pair of 2 free-spinning Omni wheels in the back. This can be seen in the presentation below:

To create our chassis we used 2 8-inch wheels, each driven by 2 Neverrest 60 motors. There are also two free-spinning omni wheels in the back. The robot uses REV rails and plexiglass for it's main body.

Our first test is the 5-second distance test. Our robot had a lot of torque due to the Neverrest 60 motors, so it moved slower than other robots, but was unaffected by the additional 30lbs weight.

Our second test is the 3-second turn test. Again, some other robots could turn better faster than us. However, due to having no proper mechanism for restraining our weights, along with other mysterious problems such as battery disconnections that only happened during this test, we were unable to try this test with load, however we presume that due to the torque, the results should be similar to those without load. Our center of rotation is also off due to only the front two wheels being powered. As such, the back of the robot makes a wide arc as it turns.

Our next few test results are unremarkable.

Our robot had a lot of sideways drift, mostly due to bad build quality. If we intend to use it during the season, we will try to fix this.

Overall, our chassis performed well under load, but could use a little speed boost. If we want to further develop it, we plan to use Neverrest 20s with more torque on our external gear ratio, so we can get more speed out of it.

Garchomp Presentation

03 Sep 2018
Garchomp Presentation By Janavi and Kenna

Task: Present in the Inviational Presentation Series

Today, we participated in the Chassis Presentation workshop for teams all around the North Texas region; the project was to design robots and perform various tests with them, then present findings. We presented our chassis, Garchomp, a mechanum wheel chassis as can be seen in the slide photos below.

Presentation

To create our chassis we used 4 never rest 40 motors one for each wheel and the structure of the chassis was created by using tetrix rails. We connected the wheels to the motors by using a 1:1 gear ratio. While there are many benefits to using a gear ratio for your wheels be forewarned that if your wheels are not perfectly aligned attaching your chains to mechanum wheels will become a living nightmare as can be seen in our previous posts.

One of the reasons that attaching the chains was so difficult for us was because we discovered that because we had used wooden sides instead of the aluminum sides that Kraken used our wheels became misaligned to the two different types of wood used for the sides.

While our robot is not able to do a 360 degree turn as fast as some other robots presented today it is able to hold a considerable amount of speed while moving at a constant speed.

Since this chassis was designed for last years competition it is able to consistently drive onto the balancing stone

Post Kickoff Meeting

08 Sep 2018
Post Kickoff Meeting September 08, 2018 By Karina, Charlotte, Ethan, Evan, Kenna, and Abhi

Meeting Log September 08, 2018

Today Iron Reign attended the FTC 2018-2019 season kickoff at Williams High School. After the event, we gathered back at our coach's house to talk about how we might approach this season's challenge. We welcomed prospect team members as well. They joined us in reviewing the reveal video and the games manuals.

Today's Meet Objectives

We wanted to have an understanding of the game design so that we could start going over robot designs. To do this we:

  • Watched the reveal video
  • Skimmed through game manual 1 and the preview of game manual 2

Until we receive the field elements, we will have to plan and strategize using the resources listed above.

Because we also had new possible team members over, we set expectations for this year. Actively recording our progress and blogging for the engineering journal was heavily stressed. We recognize the importance of having a good engineering journal and how it can help us advance. Our coach's house, the place where we have our meetings, is also cleaner than it has been in a long time after an intense cleaning session. Having an organized space maximizes efficiency, especially with the a larger team. Therefore, we expect for all team members to clean up after themselves and maintain the organization.

Before we could discuss robot build ideas, we talked strategy. Parking in the crater and the landing zones will undoubtedly be easy to do. Since we know that designing a way for our robot to be able to lift itself onto the lander will be a more interesting challenge and will score us the most points, we will prioritize working on prototypes mechanisms for this task. Finding a way to gently lower down form the lander may be difficult. We will have to consider ways to not damage the robot, wiring, etc. We also agreed that it would make the most sense to have one mechanism that latches onto the hook on the lander, grabs gold and silver elements from the crater, and places these elements into the columns.

Other topics we talked about include drive trains, problems with trying to create a mechanism that grab both the silver balls and gold blocks, as well as how we would be able to grab them out of the crater without going over the edge of the crater and getting stuck.

Also, in previous seasons, we have had strong autonomous game, and so we decided to make the tasks in autonomous another top priority. We had our coders start discussing the field path for autonomous. Unfortunately, we will not be able to launch our team marker into the team depot.

After the end of last season, a storm passed through and turned over shelves, trashing the robo-dojo. Some of our team members cleaned up the tent this afternoon. While it may not seem very important at the moment, this will be very helpful later in the season once we get our field elements for this year's challenge and want to set the field up. While cleaning, they also uncovered old, rusted metal tools and and pieces, which we will now be able to repair and save for future use.

Besides helping with cleaning the tent, the new members showed a lot of interest in the game as well. They were eager to start building, and actually started creating prototype mechanisms for picking up the silver and gold elements.

Today's Work Log

Team MembersTaskStart TimeDuration
KarinaWorking on blog2:004 hrs
AbhiAutonomous planning2:004 hrs
EvanRobot brainstorming2:004 hrs
CharlotteRobot brainstorming2:004 hrs
EthanWorking on blog2:004 hrs
KennaCleaning tent2:004 hrs

Rover Ruckus Brainstorming & Initial Thoughts

08 Sep 2018
Rover Ruckus Brainstorming & Initial Thoughts By Ethan, Charlotte, Kenna, Evan, Abhi, Arjun, Karina, and Justin

Task: Come up with ideas for the 2018-19 season

So, today was the first meeting in the Rover Ruckus season! On top of that, we had our first round of new recruits (20!). So, it was an extremely hectic session, but we came up with a lot of new ideas.

Building

  • A One-way Intake System

  • This suggestion uses a plastic flap to "trap" game elements inside it, similar to the lid of a soda cup. You can put marbles through the straw-hole, but you can't easily get them back out.
  • Crater Bracing
  • In the past, we've had center-of-balance issues with our robot. To counteract this, we plan to attach shaped braces to our robot such that it can hold on to the walls and not tip over.
  • Extendable Arm + Silicone Grip

  • This one is simple - a linear slide arm attached to a motor so that it can pick up game elements and rotate. We fear, however, that many teams will adopt this strategy, so we probably won't do it. One unique part of our design would be the silicone grips, so that the "claws" can firmly grasp the silver and gold.
  • Binder-ring Hanger

  • When we did Res-Q, we dropped our robot more times than we'd like to admit. To prevent that, we're designing an interlocking mechanism that the robot can use to hang. It'll have an indent and a corresponding recess that resists lateral force by nature of the indent, but can be opened easily.
  • Passive Intake
  • Inspired by a few FRC Stronghold intake systems, we designed a passive intake. Attached to a weak spring, it would have the ability to move over game elements before falling back down to capture them. The benefit of this design is that we wouldn't have to use an extra motor for intake, but we risk controlling more than two elements at the same time.
  • Mechanum
  • Mechanum is our Ol' Faithful. We've used it for the past three years, so we're loath to abandon it for this year. It's still a good idea for this year, but strafing isn't as important, and we may need to emphasize speed instead. Plus, we're not exactly sure how to get over the crater walls with Mechanum.
  • Tape Measure
  • In Res-Q, we used a tape-measure system to pull our robot up, and we believe that we could do the same again this year. One issue is that our tape measure system is ridiculously heavy (~5 lbs) and with the new weight limits, this may not be ideal.
  • Mining
  • We're currently thinking of a "mining mechanism" that can score two glyphs at a time extremely quickly in exchange for not being able to climb. It'll involve a conveyor belt and a set of linear slides such that the objects in the crater can automatically be transferred to either the low-scoring zone or the higher one.

Journal

This year, we may switch to weekly summaries instead of meeting logs so that our journal is more reasonable for judges to read. In particular, we were inspired by team Nonstandard Deviation, which has an amazing engineering journal that we recommend the readers to check out.

Programming

Luckily, this year seems to have a more-easily programmed autonomous. We're working on some autonomous diagrams that we'll release in the next couple weeks. Aside from that, we have such a developed code base that we don't really need to update it any further.

Next Steps

We're going to prototype these ideas in the coming weeks and develop our thoughts more thoroughly.

Testing Intakes

09 Sep 2018
Testing Intakes By Ethan and Evan

Task: Design a prototype intake system

In our first practice, we brainstormed some intake and other robot ideas. To begin testing, we created a simple prototype of a one-way intake system. First, we attached two rubber bands to a length of wide PVC pipe. This worked pretty well, but the bands gave way a little too easily.

For our next prototype, we attached a piece of cardboard with slits to a cup approximately the size of a cube or block. It operates similarly to a soda cup lid with a straw hole. An object can go in, but the corners of the hole spring back so that it can't escape.

Next Steps

We probably won't go with this design - we'd have issues separating the different kinds of game elements, and it may be too slow to feasibly use. But, its a first step and we'll see what happens.

Rover Ruckus Strategy

10 Sep 2018
Rover Ruckus Strategy By Ethan, Kenna, Charlotte, Evan, Abhi, Justin, Karina, and Aaron

Task: Determine the best Rover Ruckus strategies

Challenge Game Timing Points Level of Difficulty (1 - 3 [hard]) Priority Idea
Landing Autonomous 30 2 Medium Latch attached to linear slides that allows us to descend rapidly
Claiming Autonomous 15 1 High Autonomous, easy as bumping into wall
Parking Autonomous 10 1 High Autonomous, just need to move
Sampling Autonomous 25 2 Medium Autonomous, OpenCV solution as in similar years
Latching End Game 50 3 High 3D-printed latch attached to linear slide strong enough to lift robot
Robot in Crater End Game 15/25 1 High Driving
Mining [Depot] Tele-Op 2 per item 1 High Rolling intake into box, then conveyor belt into the depot
Mining [Cargo] Tele-Op 5 per item 2 High Long linear-slide arm that reaches the two feet into the lander with an intake/deposit on the end

Choosing Drive Train

12 Sep 2018
Choosing Drive Train By Janavi

Task: Analyze the game

In our last post, we created a chart where we listed each task asked based on point value and the level of difficulty, separated by autonomous and teleop. Our goal is to find a drive train that will allow us to build a robot to accomplish all of these tasks efficiently and consistently, but this matrix will allow us to determine what to focus on first.

Drivetrain Comparison

This summer we created a variety of drivetrains for a summer chassis project hosted in coordination with other teams from the North Texas region. We have compiled a list of the drivetrains and the criteria we need to consider for Rover Ruckus.

What do we need to look at in a Drivetrain?

  • Light
  • Sturdy
  • Easily Maneuverable
  • Fast
  • Low center of mass to avoid tipping
  • Reliability

Comparison

Eliminated? Reason for Elimination Pros Cons
Miniature Mechanum Drive NO N/A
  • Omni-Directional
  • Fast turning
  • Easy to design
  • Experience with
  • Driving/Building
  • light
Uneven power
Big Wheel NO N/A Unique Design We have less experience
Larger Mechanum Drive YES Need light robot; may use mini mechanum chassis instead Familiar Design Too heavy for this years competition
Swerve YES Difficult design, Many motors and servos, we have less experience Easier to maintain at high speed Unfamiliar and difficult to design and maintain
8-wheel Drive YES Many wheels, Difficult of maneuver, no omni directional movement 100% power forward Difficult to maneuver
Holonomic Drive YES Less push power in all directions; hard to integrate into robot Easy to turn and maneuver Hard to design; hard to integrate into base; Only 50% power in all directions

Selecting Wheels

12 Sep 2018
Selecting Wheels By Janavi

Objective: Determine the type of wheel that best suits the chassis

In the Choosing Drive Train E-16 we decided that we will use the chassis BigWheel. We know that our wheels need to be light weight but we need to determine the size of the wheel that will keep our robot far away enough from the ground for us to provide enough clearance to allow us to climb over the crater rim. But, if we choose wheels with a large radius we risk raising the center of mass.

Pros Cons
Ironton 12in. Solid Rubber Spoked Poly Wheel
  • light
  • durable
  • Large Turns
  • Extremely Large
Ironton 16in. Solid Rubber Spoked Poly Wheel
  • light
  • durable
  • Raise center of mass
  • Extremely Large
  • To prevent tipping we now have a much shorter distance to correct imbalance
Ironton 8in. Solid Rubber Spoked Poly Wheel
  • light
  • durable
  • Not large enough to significantly move the center of mass

Brainstorming Two

15 Sep 2018
Brainstorming Two By Evan, Abhi, and Janavi

Task: Have a 2nd brainstorming session

We had another brainstorming session today, which allowed us to break down into some new building tasks.

Intake System 3 - TSA Bag Scanner

This part of our robot is inspired by the bag-scanning machine in TSA lines, more specifically the part at the end with the spinning tubes. The basic design would be like a section of that track that flips over the top of the robot into the crater to intake field elements.

Intake System 4 - Big Clamp

This one is self-explanatory. Its a clamp, that when forced over a block or a cube, picks it up. It's not that accurate, but it's a good practice idea.

Lift 2 - Thruster

We want to make lifting our robot easy, and we're thinking of a slightly different way to do it. For our new lift idea, we're installing a vertical linear slide that forces the robot upwards so that we can reach the lander.

Next Steps

We're working on building these prototypes, and will create blog posts in the future detailing them.

Meeting Log

15 Sep 2018
Meeting Log September 15, 2018 By Charlotte, Karina, Kenna, Janavi, Evan, Abhi, Justin, and Ethan

Meeting Log September 15, 2018

Today Austin, an Iron Reign alumni, visited us from A&M! :)

Today's Meet Objectives

As our brainstorming and discussion continues, we are putting our ideas into action and making various prototypes and designs. We will continue to work with our new recruits and let them participate in a meaningful way with our building and in getting ready for competition.

Today's Meet Log

  • Further brainstorming and discussion
  • Taking some inspiration from 30 hr robot reveal videos, we have continued the brainstorming for this year's robot. Our main subjects of discussion are our intake and lift, and some ideas that were thrown around were a conveyor belt-like intake and a lift that utilizes a linear slide which lifts the robot chassis. The details of our brainstorming session can be found at (E-19, Brainstorming Two - Enter the Void).
  • Prototyping and linear slides
  • Today, Abhi worked on a hook for hanging off the rover at first with Styrofoam, and then began a 3D model. Evan started working with our new linear slides (see the picture below); we expect to use linear slides a lot this year, with reaching into the craters and hooking onto the rover. We pre-drilled some holes into these new slides using an optical punch and a drill. Janavi worked with a different linear slide kit, this kit is lighter than our new kit, which is helpful, but it is very delicate and requires precision to put together.
    Evan looking through an optical punch
    Evan with a linear slide
  • Field setup
  • Many of our new recruits returned today and have continued to be active. During the week, we received the field parts, so we had them help us put it together so that they can be familiar with the field design and with certain power tools. They also helped with various devices we worked on, like the linear slides, etc.
    Field assembly progress from our new recruits.
  • Chassis testing
  • We plan to use the chassis we built this summer for preliminary autonomous testing. Janavi and Kenna got Garchomp up and running today and added a better and more secure phone holder so we can run autonomous.
  • Vision and autonomous
  • We began exploring in Open CV so that we can have a visual tool to find the minerals; the algorithms we are exploring can be used for both autonomous and tele-op. We had a discussion on our goals for vision this year, which can be found at (E-20, Vision Discussion). We also began mapping our autonomous paths to act as guides to our coders.
    Open CV progress

Today's Member Work Log

Team MembersTaskStart TimeDuration
KarinaRobot build and team marker design2:004 hrs
AbhiOpen CV2:004 hrs
EvanPrototyping2:004 hrs
CharlotteBlog and brainstorming2:004 hrs
EthanWorking on blog2:004 hrs
KennaRobot build2:004 hrs
JustinField assembly2:004 hrs
JanaviPrototyping2:004 hrs

Vision Discussion

15 Sep 2018
Vision Discussion By Arjun and Abhi

Task: Consider potential vision approaches for sampling

Part of this year’s game requires us to be able to detect the location of minerals on the field. The main use for this is in sampling. During autonomous, we need to move only the gold mineral, without touching the silver minerals in order to earn points for sampling. There are a few ways we could be able to detect the location of the gold mineral.

First, we could possibly use OpenCV to run transformations on the image that the camera sees. We would have to design an OpenCV pipeline which identifies yellow blobs, filters out those that aren’t minerals, and finds the centers of the blobs which are minerals. This is most likely the approach that many teams will use. The benefit of this approach is that it will be easy enough to write. However, it may not work in different lighting conditions that were not tested during the designing of the OpenCV pipeline.

Another approach is to use Convolutional Neural Networks (CNNs) to identify the location of the gold mineral. Convolutional Neural Networks are a class of machine learning algorithms that “learn” to find patterns in images by looking at large amounts of samples. In order to develop a CNN to identify minerals, we must take lots of photos of the sampling arrangement in different arrangements (and lighting conditions), and then manually label them. Then, the algorithm will “learn” how to differentiate gold minerals from other objects on the field. A CNN should be able to work in many different lighting conditions, however, it is also more difficult to write.

Next Steps

As of now, Iron Reign is going to attempt both methods of classification and compare their performance.

CNN Training

22 Sep 2018
CNN Training By Arjun and Abhi

Task: Capture training data for a Convolutional Neural Network

In order to train a Convolutional Neural Network, we need a whole bunch of training images. So we got out into the field, and took 125 photos of the sampling setup in different positions and angles. Our next step is to label the gold minerals in all of these photos, so that we can train a Convolutional Neural Network to label the gold minerals by learning from the patterns of the training data.

Next Steps

Next, we will go through and designate gold minerals. In addition, we must create a program to process these.

Chassis Brainstorming

22 Sep 2018
Chassis Brainstorming By Ethan and Evan

Task: Brainstorm chassis designs

At the moment, we've used the same chassis base for three years, a basic mechanum base with large wheels. However, we don't really want to do the same this year. At the time, it was impressive, and not many teams used mechanum wheels, but now, its a little overdone.

Thus, we have BigWheel. We used this as a practice design, but we ended up really liking it. It starts off with two large rubber wheels, approx. eight inches in diameter, mounted at the back and sides of the robot. Then, we have two geared-up motors attached to the motors for extra torque and power. In the front, we have a single omniwheel that allows our robot to turn well.

Proposed Additions

First, we need to add an intake system. For this, we're considering a tension-loaded carwash that can spring out over the crater wall. It'll pull elements in and sort them through our intake using our separator, which we will detail in a later post. Then, the robot will drive over to the lander and lift itself up. Since the main segment of the robot is based off of two wheels, we're attaching a telescoping slide that pushes off of the ground at the opposite end and pivots the front of the robot upwards. Then, the intake will launch upwards, depositing the elements in the launcher.

Next Steps

We need to create a proof-of-concept for this idea, and we'd like to create a 3D model before we go further.

Meeting Log

22 Sep 2018
Meeting Log September 22, 2018 By Charlotte, Janavi, Evan, Abhi, Justin, Ethan, Arjun, Karina, and Kenna

Meeting Log September 22, 2018

Home Depot Trip!

Today's Meet Objectives

As we are starting to make more serious strides in our robot and strategy, we wish to start passing down knowledge to our new recruits. Today, we are going to continue prototyping with grabbers and various linear slide kits and we need to discuss strategy and organization for this season.

Today's Meet Log

  • Robot strategy discussion
  • Today we have discussed more about what we want our strategy to look like. An option we are heavily considering is having a non-moving robot, in the sense that our robot is stationary and all game actions are performed using extensions from the robot, using linear slides, etc. We have discussed what game rules we need to consider, like what "parking" consists of during autonomous. For further information, see (E-34, Another Design Bites the Dust).
  • Chassis brainstorming
  • We discussed the chassis design we plan to use this season, and we decided experiment with the BigWheel chassis we build this summer. For more details on this discussion, see (E-23, Chassis Brainstorming).
  • Sorter prototyping
  • We have continued prototyping various grabbing mechanisms with sorting ability, one passive and one active sorter. The passive version we modeled in Creo and printed before practice, and the active was modeled using Legos! Our new recruits have been helping us prototype also, as we have been making a version 2 for the active model.
    Passive model
    Active model
  • New chop saw!
  • Some of the materials we are working with require power tools that we don't have or were damaged by rain. One of the linear slide kits we are working with is stainless steel, which requires a chop saw which we didn't have. We made a trip to Home Depot and bought one.
    Chopsaw in action

  • Finishing field assembly
  • Our new recruits finished up the field today. They ran into some problems along the way, including difficulty with putting on the top part of the lander, improper placement of the wing nuts, alignment of the lander in the foam tiles, and more but were able to overcome these difficulties and yielding a field for practice.
    Our freshman recruits!
  • Linear slide assembly
  • Evan and Janavi finished assembling the linear slides they were working on last week. As we build a chassis (or a wheel-less chassis) we are going to try both types to see how the weight, strength, friction, string tension, and other factors affect our gameplay. A side-by-side comparison of our linear slides cam be found at (E-61, Selecting Linear Slides)

    Battle of the Slides
  • Team marker
  • Karina narrowed down the ideas for a marker and she, with Kenna, has began building it. More about our marker can be found at (E-33, Team Marker Fun).
  • Open CV and our CNN
  • While we are waiting to begin code, we are testing many algorithms in Open CV, so we can accurately and consistently detect field minerals. These algorithms consider shape and color to map points to predict the location of the minerals. While developing Open CV, we have begun the development of a Convolutional Neural Network. Detail of our CNN training can be found at (E-22, CNN Training).
  • Location sensor
  • Today, Justin worked on making the location sensor (our fail-safe in case our encoders fail) smaller and more lightweight to help us meet with this year's size requirements (something we have had trouble with in the past).
  • Chassis testing
  • We tested the different chassis we build this summer on the field to see how they interact with the terrain (aka the crater). We found that Big Wheel was too long and didn't go over the crater at all unless it was backwards and got a running start. Garchomp (with Mechanums) went over the craters fine.

Today's Member Work Log

Team MembersTaskStart TimeDuration
KarinaRobot build and team marker design2:004 hrs
AbhiOpen CV and build2:004 hrs
EvanBuild2:004 hrs
CharlotteBlog and brainstorming2:004 hrs
EthanWorking on blog2:004 hrs
KennaRobot build2:004 hrs
JustinBuild and field assembly2:004 hrs
JanaviBuild2:004 hrs
ArjunCode and blog2:004 hrs

Autonomous Path Planning

26 Sep 2018
Autonomous Path Planning By Abhi

Task: Map Autonomous paths

With the high point potential available in this year's autonomous it is essential to create autonomous paths right now. This year's auto is more complicated due to potential collisions with alliance partners in addition to an unknown period of time spend delatching from the lander. To address both these concerns, I developed 4 autonomous paths we will investigate with to use during competition.

When making auto paths, there are some things to consider. One, the field is the exact same for both red and blue alliance, meaning we don't need to rewrite the code to act on the other side of the field. Second, we have to account for our alliance partner's autonomous if they have one and need to adapt to their path so we don't crash them. Third, we have to avoid the other alliance's bots to avoid penalties. There are no explicit boundaries this year for auto but if we somehow interrupt the opponent's auto we get heavily penalized. Now, with these in mind, lets look at these paths.

This path plan is the simplest of all autonomi. I assume that our alliance partner has an autonomous and our robot only takes care of half the functions. It starts with a simple detaching from the lander, sampling the proper mineral, deploying the team marker, and parking in the crater. The reason I chose the opposite crater instead of the one on our nearside was that it was shorter distance and less chance to mess with our alliance partner. The issue with this plan is that it may interfere with the opponent's autonomous but if we drive strategically hugging the wall, we shouldn't have issues.

This path is also a "simple" path but is obviously complicated. The issue is that the team marker depot is not on the same side as the lander, forcing us to drive all the way down and back to park in the crater. I could also change this one to go to the opposite crater but that may interfere with our alliance partner's code.

This is one of the autonomi that assumes our alliance partners don't have an autonomous and is built for multi-functionality. The time restriction makes this autonomous unlikely but it is still nice to plan out a path for it.

This is also one of the autonomi that assumes our alliance partners don't have an autonomous. This is the simpler one of the methods but still has the same restrictions

Next Steps

Although its great to think these paths will actually work out in the end, we might need to change them a lot. With potential collisions with alliance partners and opponents, we might need a drop down menu of sorts on the driver station that can let us put together a lot of different pieces so we can pick and choose the auto plan. Maybe we could even draw out the path in init. All this is only at the speculation stage right now.

Hanging Hook Prototype

26 Sep 2018
Hanging Hook Prototype By Abhi, Ethan, Justin, and Janavi

Task: Design a hook for pulling the robot on the lander

To get a head-start on latching and delatching from the lander during autonomous, we got a head start and made some hook prototypes. If your robot can just do these two things, you can score 80 points. When making this hook, it needs to be modular enough to not require much accuracy but also needs to be strong enough to hold 42 pounds. This hook works just that way.

We designed this hook to have a slanted top to glide the robot into position if we aren't in the right place, making it very modular. In addition, we 3D printed this hook with ~80% infill in nylon after designing in PTC Creo. First, we tested it by hanging ~20 lbs of material off of it for one minute. This worked, but a little too well. While the nylon piece remained undamaged, the metal bracket it was supported by bent at a ninety degree angle. So, we had to pursue further testing.

For our next test, we plan to hang a mass outside for a week. Dallas weather has been extreme lately, with a lot of rain, humidity, and heat. This will be the ultimate stress test; if one of our pieces can survive the outdoors, it can survive just about anything.

Next Steps

We're probably going to have to reprint this to be a bit more fitting for our robot, but its a good start and it works great so far.

Meeting Log

28 Sep 2018
Meeting Log September 28, 2018 By Charlotte, Karina, Kenna, Janavi, Evan, Abhi, Justin, Ethan, and Arjun

Meeting Log September 28, 2018

Coding lessons with new recruits

Today's Meet Objectives

Since our overflow of new recruits, we have opened up two other teams 15373 and 15375, which Iron Reign will mentor and lead along with our mentorship of 3732 Imperial Robotics, who has also received new recruits. Today we plan to continue integrating them into FTC; we will begin teaching them the different expectations of an FTC team, including hard and soft skills such as coding and presenting to a panel of judges. In Iron Reign, we are going to continue prototyping various mechanisms we have designed. Also, we are going to get started with coding and autonomous.

Today's Meet Log

  • Mentoring
  • This week, we had even more recruits join us today, so we decided to run through our Worlds presentation from last year to teach them about the judging process and our engineering process. We set their expectations for what competition day looks like, and what they need to focus on and maintain throughout the season, such as the engineering journal and outreach. We had a long discussion about subteams and we are going to let the recruits explore these subteams and decide for themselves what parts of FTC they wish to pursue.
    Presentation to recruits.
  • Linear slides
  • Janavi continued working with linear slides, which we installed on a bare chassis as well as the hook Abhi designed and printed. Near the end of practice we tested the slide and we found that it worked pretty well but we need additional tests before we can determine whether it will ba a viable option for our robot. To see more information on our linear slides, see (E-,).
  • Secret project
  • Evan worked on a secret project, details will be written about in future blog posts. See (E-34, Another Design Bites the Dust).
  • Team marker
  • Karina continued to work on our team marker. Last time we decided on the design we want to use, and she had put the idea into reality today.
    Ducky incarcerated
  • Modeling
  • Justin 3D modeled and printed wheel mounts for churros and hex shafts.
    Justin modeling
  • Replay autonomous and code mentoring
  • Over the summer, we worked on a new replay autonomous system where rather than coding an autonomous, testing it, then fixing it, we drive the robot in our intended path and that path is automatically recorded in the code. This year, we don't think that system will work, with the heavy emphasis on computer vision and the unreliable positioning of the robot after it drops off the hook on the rover. Also, today we worked with the recruits that demonstrated interest in coding. Abhi gave them a lesson and let them create their very first autonomous program by themselves (but with his guidance of course).

    Today's Member Work Log

    Team MembersTaskStart TimeDuration
    KarinaTeam marker build2:004 hrs
    AbhiCoding and teaching2:004 hrs
    EvanRobot build2:004 hrs
    CharlotteBlog and organization2:004 hrs
    EthanWorking on blog2:004 hrs
    KennaRobot build2:004 hrs
    Justin3D Modeling2:004 hrs
    JanaviRobot build2:004 hrs

BigWheel Chassis

29 Sep 2018
BigWheel Chassis By Evan

Task: Work on a possible chassis

We've been toying around with the idea of using BigWheel, our Summer Chassis Research Project bot, in this year's competition with a few modifications. The idea for this robot is that it has a collection system that extends into the crater, and folds up on top of the robot. It reaches in with the collection arm, and grabs the blocks/glyphs, drives backwards and flips vertically using the drive wheels as a point of rotation. Here’s a basic sketch of what that looks like.

The way this will be achieved is with a spring loaded lever connected to the omni wheel that makes up the holy trinity of wheels. So far I have pieced together the arm that reaches into the pit, which is powered by two NeverRest 60s and geared in a two to one ratio to significantly increase the torque. Between the two arm I plan for a horizontal beater bar to intake blocks and a slide attached to a servo to separate blocks and balls based on their size. The idea is to have a way of sorting based off of the physical shape rather than by digital sensing means. The more that can be done purely off the shape of the elements, the better.

Next Steps

Next week, the team will have to make some serious progress since there will be more hands to build. My hope is that the lever will come about soon, even if in its most infant stage, and that some semblance of a functioning robot can be game tested in the next few weeks, just in time for a scrimmage and potentially an early qualifier.

CNN Training Program

29 Sep 2018
CNN Training Program By Arjun and Abhi

Task: Designing a program to label training data for our Convolutional Neural Network

In order to use the captured training data, we need to label it by identifying the location of the gold mineral in it. We also need to normalize it by resizing the training images to a constant size, (320x240 pixels). While we could do this by hand, it would be a pain to do so. We would have to resize each individual picture, and then identify the coordinates of the center of the gold mineral, then create a file to store the resized image and coordinates.

Instead of doing this, we decided to write a program to do this for us. That way, we could just click on the gold mineral on the screen, and the program would do the resizing and coordinate-finding for us. Thus, the process of labeling the images will be much easier.

Throughout the weekend, I worked on this program. The end result is shown above.

Next Steps

Now that the program has been developed, we need to actually use it to label the training images we have. Then, we can train the Convolutional Neural Network.

Intake Sorter

29 Sep 2018
Intake Sorter By Abhi

Task: Design a sorter for the balls and blocks

To increase the efficiency of our robot, we looked into ways to passively sort minerals during intake and deposit. It is important to sort because it requires less precision under driver control allowing a faster and more efficient robot. Though bulky, we designed an initial design to sort the minerals.

When this piece is mounted and both blocks and balls are run over it, the balls run down the top and don't fall in the collector, but the blocks fall in the holes. We modeled this design in PTC Creo, then printed it in ABS.

Next Steps

This design works but is large so we're going to have to find a smaller and simpler way to sort game pieces. In the future, we're going to minimize this and probably move to a smaller sorting mechanism.

Designing Wheel Mounts

29 Sep 2018
Designing Wheel Mounts By Justin

Task: Create wheel mounts for our Mini-Mecanum chassis

Today, we modeled two possible designs for mini-mecanum wheel mounts. The purpose of the mounts is to hold a churro or hex shaft in place to mount mecanum wheels to. The first design was a 6cm by 6cm square with rounded edges that was 5mm thick. A hexagon was removed from the center to hold the churro that supports the mecanum wheel. This design, when printed on low infill, allowed the churro to rotate when enough force was applied. We modeled this design off of the wheel mounts on Kraken and Garchomp; the only differences are the size and material. Because we will be 3D printing these mounts, material efficiency is very important. This mount design used a lot of material to make a prototype, meaning a finished stable mount would need even more material to prevent the churro or hex shaft from slipping.

Taking these problems into account, we designed a different way to mount the wheels. The new version can mount underneath a REV Rail and hold the shaft or churro perpendicular to the rail. This design uses much less infill than the previous one because of how small the mount is, and because the REV Rail also acts as support to prevent the churro or shaft from spinning. The mount also allows the mini-mecanum wheels to be mounted as close to the frame as possible, which can help make the robot more compact. This design will allow us to easily mount mini-mecanums to our frame, while using minimal filament and taking up very little space.


Next Steps

We need to build the full mini-mecanum robot to judge whether these designs will fully work.

Designing the Corn Cob Aligner

05 Oct 2018
Designing the Corn Cob Aligner By Ethan and Abhi

Task: Design an aligner for the beater bar intake

The ice cube tray is 9 holes wide and each hole is 16.50mm wide and long. Using these measurements, we created an aligner that would cause the ice cube tray to roll into a cylinder.

We're designing an intake that will allow the robot to intake particles, and this is a major portion. This will allow us to increase the amount of friction put on the particles, allowing for a more secure grip.

However, this system has issues. First, we wanted the edges to still be mildly compliant, and this wheel filled out the edge rows to full depth, making them a little too tough. Plus, they made the silicone height too variable, so that we couldn't solely pick up the balls. So, we designed a second aligner with shorter spokes so that the edges would be fully compliant while still being held securely.

Next Steps

We need to finish up the corn-cob beater bar, but after that we'll be able to start testing.

Corn-Cob Intake

06 Oct 2018
Corn-Cob Intake By Ethan and Abhi

Task: Design an intake system unique for balls

Right now, we're working on a static-deposit system. The first part of this system is having an intake mechanism that passively differentiates the balls and cubes, reducing complexity of other parts of the design. Thus, we created the corn-cob intake.

First, we bought ice-cube trays. We wanted a compliant material that would grip the particles and be able to send them into a larger delivery mechanism.

Then, we designed a wheel which' spokes would fit into the holes on an ice cube tray, allowing the tray to stay static while still being compliant in a cylindrical shape. Then, we can put axle hubs through the center of the wheel, allowing us to mount the wheels on a hexagonal shaft. Then, we can mount a sprocket on that, allowing the bar to be rotated for intake. This bar is mounted at the height of the balls, not blocks, so we can passively sort the minerals in-action.

Next Steps

We need to mount this on our robot and design a way to deliver the field elements. We're also going to go into more detail on the ice cube mounts in a later blog post.

Team Marker Fun

06 Oct 2018
Team Marker Fun By Karina

Task: Create the Team Marker

Last week, we decided to take up the task of creating the team marker, a simple project that would surely be overlooked, but can score a significant amount of points. We wanted the marker to be meaningful to the Iron Reign, but also follow the team marker rules. To start, we made a list of ideas:

Last season, Ducky (as seen in idea #4) brought Iron Reign good luck whenever the drivers squeezed them, and so we knew that we wanted to incorporate Ducky into whatever the final product would be. Some team members suggested fusing together multiple rubber duckies to fit the dimensions in the rule book. I had a better idea. I thought, "Why not put Ducky in a box?" However, trapping Ducky in a box would prevent us from ever squishing Ducky again (as long as they are trapped in the box). But then an even better idea came up: "Why not put Ducky in a cage?" And so we got to work making a cage for Ducky, one that we could release them from or reach in to whenever we need a squish for good luck.

We cut two pieces of 3.5 inch x 3.5 inch polycarb to serve as the ceiling and floor of the cage. Then we used 8 standoffs, in pairs of two at each corner of the cage, to serve as the bars. To not waste anymore standoffs, we used zipties as the cage bars. Additionally, the flexibility of the zipties allow us to squeeze Ducky out of the cage from in between the bars. In the end, Ducky looked like the most happy prisoner we've ever seen:

Next Steps

With the team marker built, we need to test how well it does its job (staying in one piece for the duration of a match hopefully). It's survived many nights now in the our coach's house, which is no small feat, with all the children running about and constantly misplacing things. Once we have an intake system working for the minerals, we will need to test how compatible it is with Ducky in a Cage. Lastly, we need to decorate Ducky's cage, including our team's number (6832).

Another Design Bites the Dust

06 Oct 2018
Another Design Bites the Dust By Ethan

Task: Discuss a new rule change

At one point, we were thinking about creating a "mining facility" robot that stays static within the crater and delivers the blocks into the mining depot. In our eyes, it was legal as it would hold as many blocks as possible inside the crater but only deliver two at a time outside. It would be super-efficient as we would be able to stay within the crater, and not need to move.

However, fate has struck. Earlier this week, we received this message:

The rule limiting control/possession limits of minerals has been updated to indicate that robots may _temporarily_ hold more than 2 minerals in the crater, but must shed any excess over prior to performing any other gameplay activities (which would include scoring).
says that "Robots In a Crater are not eligible to Score Minerals". Per the definitions of "In" and "Crater", if _any_ portion of a Robot is in the vertical area above the crater (extending from the field walls to the outside edge of the Crater Rim), then scoring a Mineral results in a Major Penalty.
says that Robots may not obstruct another Robot's path of travel in the area between the Lander and a Crater for more than 5 seconds.

This means that we couldn't do a static mining facility as we cannot score within the crater. Since we'd have a portion of the robot always in the crater, the existence of our robot would be a major penalty.

Next Steps

So, we need to rethink our robot. We still want to create a semi-static robot, but we need to redesign the intake portion.

Labelling Minerals - CNN

06 Oct 2018
Labelling Minerals - CNN By Arjun and Abhi

Task: Label training images to train a Neural Network

Now that we have software to make labeling the training data easier, we have to actually use it to label the training images. Abhi and I split up our training data into two halves, and we each labeled one half. Then, when we had completed the labeling, we recombined the images. The images we labeled are publicly available at https://github.com/arjvik/RoverRuckusTrainingData.

Next Steps

We need to actually write a Convolutional Neural Network using the training data we collected.

Meeting Log

06 Oct 2018
Meeting Log October 06, 2018 By Charlotte, Kenna, Janavi, Ethan, and Arjun

Meeting Log October 06, 2018

Code Testing with Arjun

Today's Meet Objectives

We set up some tables with FTC Starter Kits for our new recruits so we can give them an introduction to building with REV parts. We want to continue research & design and build for Iron Reign. There is a scrimmage coming up in a few weeks, so we want to have a working chassis by then.

Today's Meet Log

  • Chassis build
  • Kenna and Janavi worked on a chassis. We hope to mount the linear slides we completed last time onto this chassis and hopefully use it for our first scrimmage. We had a frame for the chassis done last time, and this time we added motors and one of four wheels. Hopefully, the chassis will be complete by next week and then we can run some test to determine whether or not it will be a viable chassis for competition use. If we deem that it is worthy, there are a few problems we need to fix before competition day. Notably, the chassis doesn't fit within the sizing cube, as it measures 17 in x 18 and 1/16th in. Our chassis decision process can be found at (E-16, Choosing Drive Train).

    Kenna with the chassis frame (pre-motored)

    Kenna and Janavi installing the motors
  • Engineering journal discussion
  • We discussed what we want to improve in our engineering notebook this year. In previous years, one of our greatest weaknesses has been the lack of mathematical analysis in our blog posts, so this year we are going to focus on doing more parts testing and incorporate statistics and physics from those tests into our blog posts.
  • Intake prototyping and design
  • Ethan has been working on prototyping with grabbers. Abhi designed and printed parts to mount our "corn on the cob" material, and Ethan put it together and made a small frame to put it on so we can test it. To see more about the intake aligner, see (E-31, Designing the Corn Cob Aligner). To see more about "corn on the cob," see (E-32, Corn-Cob Intake).

    Ethan working on the blog

    Ethan with the "corn on the cob"
  • Gantt Chart
  • Today, I made some real progress on our team "Gantt" chart. We hope to utilize such a chart in order to improve team organization and structure. Hopefully, this will prevent certain subteams from falling behind and we will not be rushed right before competitions as that has happened a lot historically.
  • Code testing and CNN training
  • Once he updated the FTC app, Arjun he tested our code with the new update on Kraken, our robot from last year. He also took 72 pictures of the minerals for training of a convolutional neural network. He began compiling those images and will work on the neural network in the coming weeks. See more about our CNN training process in (E-21, CNN Training)

Today's Member Work Log

Team MembersTaskStart TimeDuration
CharlotteBlog and organization2:004 hrs
EthanWorking on blog2:004 hrs
KennaRobot build2:004 hrs
JanaviRobot build2:004 hrs
ArjunCode updates2:004 hrs

Upgrading to FTC SDK version 4.0

06 Oct 2018
Upgrading to FTC SDK version 4.0 By Arjun

Task: Upgrade our code to the latest version of the FTC SDK

FTC recently released version 4.0 of their SDK, with initial support for external cameras, better PIDF motor control, improved wireless connectivity, new sensors, and other general improvements. Our code was based on last year's SDK version 3.7, so we needed to merge the new SDK with our repository.

The merge was slightly difficult, as there were some issues with the Gradle build system. However, after a little fiddling with the configuration, as well as fixing some errors in the internal code we changed, we were able to successfully merge the new SDK.

After the merge, we tested that our code still worked on Kraken, last year's competition robot. It ran with no problems.

Mining Base 2.0

07 Oct 2018
Mining Base 2.0 By Ethan

Task: Rethink our static robot idea

So, our dream this year is to create a static robot. Last week, we found out about a rule change that would prevent our mining robot from staying within the crater. Naturally, we found a way around this, leading us to the Mining Base 2.0.

The robot will be fixed under the lander's hooks, and have a horizontal and vertical linear slide attached to it. The horizontal linear slide would reach over the crater walls and pick up the silver balls, and shoot them up towards the lander. On the lander, our vertical linear slide would create a backboard that would allow the balls to fall into the lander. This wouldn't violate the rules as we wouldn't be in the crater. And, it would give us the benefit of having an extremely high-scoring robot.

Next Steps

We need to start on the designs of this robot, but to do this, we first need to create a working chassis.

BigWheel+

13 Oct 2018
BigWheel+ By Evan

Task: Continue work on BigWheel

BigWheel has gone through a few major changes. First and foremost, it now has a flipper arm, AKA Superman. Since the robot itself is the lift mechanism, we had to put a lot of work into Superman's design. Right now it is a 10 inch REV rail attached to two 125-tooth gears for redundancy, with a custom 3D printed mount housing an pair of omniwheels on the other end. On the motors, we have two 15-tooth gears, resulting in a 3:25 gear ratio. This gives us a ridiculous amount of torque that lifts the robot up smoothly. On top of the flipper, we’ve added extra supports on the arm mounts, as when we went to the Hendricks scrimmage, we found that the two sides were out of alignment, and one was bending more forward than the other, making the arm bend unevenly to one side and throwing the whole robot out of alignment.

The next step is to strengthen the arm itself, as the two sides have a tendency to want to do their own things, mainly the side with the intake motor mounted to it. Since the supports have been put in though, Bigwheel has been functioning much better, and the arm no longer flops to one side. General wire management has also taken place, as we'd dealt with wires getting stuck in the gears.

Next Steps

Bigwheel was built on a bit of a shabby base, mostly being made of a piece of polycarb and some aluminum bars, and not giving much in terms of change. We’ve cut here and there, drilled a few holes, unattached and re-attached a couple of things, but in all it’s a very stiff robot, and doesn’t lend itself to fluidity of design. That’s why we plan on making a second version of this base, hopefully with thinner polycarb and more secure sides that have been welded together but can be removed more easily. The exact design is still being modeled, but we have a direction to jump off from, and I believe we can make that leap to a better robot.

Developing a CNN

13 Oct 2018
Developing a CNN By Arjun and Abhi

Task: Begin developing a Convolutional Neural Network using TensorFlow and Python

Now that we have gathered and labeled our training data, we began writing our Convolutional Neural Network. Since Abhi had used Python and TensorFlow to write a neural network in the past during his visit to MIT over the summer, we decided to do the same now.

After running our model, however, we noticed that it was not very accurate. Though we knew that was due to a bad choice of layer structure or hyperparameters, we were not able to determine the exact cause. (Hyperparameters are special parameters that need to be just right for the neural network to do well. If they are off, the neural network will not work well.) We fiddled with many of the hyperparameters and layer structure options, but were unable to fix the inaccuracy levels.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
model = Sequential()
model.add(Conv2D(64, activation="relu", input_shape=(n_rows, n_cols, 1), kernel_size=(3,3)))
model.add(Conv2D(32, activation="relu", kernel_size=(3,3)))
model.add(MaxPooling2D(pool_size=(8, 8), padding="same"))
model.add(Conv2D(8, activation="tanh", kernel_size=(3,3)))
model.add(MaxPooling2D(pool_size=(8, 8), padding="same"))
model.add(Conv2D(4, activation="relu", kernel_size=(3,3)))
model.add(Conv2D(4, activation="tanh", kernel_size=(1,1)))
model.add(Flatten())
model.add(Dense(2, activation="linear"))
model.summary()

Next Steps

We have not fully given up, though. We plan to keep attempting to improve the accuracy of our neural network model.

Meeting Log

13 Oct 2018
Meeting Log October 13, 2018 By Charlotte, Janavi, Ethan, Arjun, Abhi, Justin, and Karina

Meeting Log October 13, 2018

Sumo bots at SEM STEM Spark

Today's Meet Objectives

Today we are taking part in a massive outreach event to teach STEM to girls all over North Dallas: SEM STEM Spark. However, we do have competitions/scrimmages coming up really soon, so we wish to get some substantial building done. See more about the event at (T-22, SEM STEM Spark).

Today's Meet Log

  • Chassis build
  • We scrapped the chassis we worked on last meeting because of it lack of mounting points and poor assembly. Janavi started with just some extrusion rails and mounted some motors and wheels for a new new chassis. Hopefully we will have a working chassis by the time of the scrimmage.
  • CNN Training
  • Arjun continued to work on a convolution neural network, which, once the network is complete, we will compare with Open CV. We have used Open CV for our computer vision algorithms for a couple of years, but we are now looking into other options to see if CNN will be a more accurate method of differentiating between field elements. A summary of our vision decisions can be found at (E-81, Vision Summary)
  • SEM STEM Spark outreach
  • Besides working on the chassis and a CNN, most of us taught and shared our passion for STEM at the event. The event was 10 hours long, so it was a long haul, but we had a really great time and the girls did too.

    Today's Member Work Log

    Team MembersTaskStart TimeDuration
    CharlotteOutreach8:0010 hrs
    EthanOutreach8:0010 hrs
    JanaviBuild8:0010 hrs
    ArjunConvolution Neural Network8:0010 hrs
    AbhiOutreach8:0010 hrs
    KarinaOutreach8:0010 hrs
    JustinOutreach8:0010 hrs

    Mini Mecanum Chassis

    19 Oct 2018
    Mini Mecanum Chassis By Janavi and Justin

    Task:

    Over the summer, we designed many robots for the North Texas Chassis Project, including one based off of last year's Worlds robot, Kraken. The robot chassis had 6" mechanums. But, based on what we know about this years challenge we have decided that this chassis does not utilize the 18-inch cube effectively.

    We have chosen to design a chassis that is similar in function to Kraken, but smaller in size with 4" mecanum wheels.

    Our plan is to design a low-lying 6" x 6" robot, a marked difference from the usual 18". However, this new design means that many of our 3D printed parts are unusable on this robot; for example, our former wheel mounts are much too large for the new robot and wheels, as well as their corresponding axles.

    These bearings are hexagonal, requiring a new wheel mount design.

    Justin first designed the axle plate below to solve this, but it raised the robot off the ground quite a bit, risking debris becoming stuck under the bot. As well, it was flimsy - it was mounted too far from the robot. We went back to the drawing board and brainstormed various methods we could use to attach the axle the frame in a more secure way; we found that we use a pillow block design would save space, while also having a lower-lying robot. This design worked out beautifully, leading to the design we are currently using.

    The axles and wheels aren’t the only new thing about our robot: we've switched to NeverRest 20s in lieu of our normal 40s and 60s. This is another reason that we wanted to create such a minute robot. The gear ratio combined with the size will make this robot a speed demon on the field and allows us to dart between the minerals and the depositing location quickly.

    Next Steps

    In the upcoming weeks we will continue to tinker with this chassis design by adding a linear side and our gathering mechanism, and hopefully, we will be able to demonstrate it at the scrimmage next week.

    Rewriting CNN

    20 Oct 2018
    Rewriting CNN By Arjun and Abhi

    Task: Begin rewriting the Convolutional Neural Network using Java and DL4J

    While we were using Python and TensorFlow to train our convolutional neural network, we decided to attempt writing this in Java, as the code for our robot is entirely in Java, and before we can use our neural network, it must be written in Java.

    We also decided to try using DL4J, a competing library to TensorFlow, to write our neural network, to determine if it was easier to write a neural network using DL4J or TensorFlow. We found that both DL4J and TensorFlow were similarly easy to use, and while each had a different style, code written using both were equally easy to read and maintain.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    java
    		//Download dataset
    		DataDownloader downloader = new DataDownloader();
    		File rootDir = downloader.downloadFilesFromGit("https://github.com/arjvik/RoverRuckusTrainingData.git", "data/RoverRuckusTrainingData", "TrainingData");
    		
    		//Read in dataset
    		DataSetIterator iterator = new CustomDataSetIterator(rootDir, 1);
    		
    		//Normalization
    		DataNormalization scaler = new ImagePreProcessingScaler(0, 1);
    		scaler.fit(iterator);
    		iterator.setPreProcessor(scaler);
    		
    		//Read in test dataset
    		DataSetIterator testIterator = new CustomDataSetIterator(new File(rootDir, "Test"), 1);
    			
    		//Test Normalization
    		DataNormalization testScaler = new ImagePreProcessingScaler(0, 1);
    		testScaler.fit(testIterator);
    		testIterator.setPreProcessor(testScaler);
    		
    		//Layer Configuration
    		MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
    				.seed(SEED)
    				.l2(0.005)
    				.weightInit(WeightInit.XAVIER)
    				.list()
    				.layer(0, new ConvolutionLayer.Builder()
    						.nIn(1)
    						.kernelSize(3, 3)
    						.stride(1, 1)
    						.activation(Activation.RELU)
    						.build())
    				.layer(1, new ConvolutionLayer.Builder()
    						.nIn(1)
    						.kernelSize(3, 3)
    						.stride(1, 1)
    						.activation(Activation.RELU)
    						.build())
    				/* ...more layer code... */
    				.build();
    

    Next Steps

    We still need to attempt to to fix the inaccuracy in the predictions made by our neural network.

    Intake Update

    20 Oct 2018
    Intake Update By Ethan, Abhi, Justin, and Kenna

    Task: Update the intake for the new robot size

    We created the corn-cob intake a few weeks ago. Unfortunately, it was a little too big for the Minichassis, so we had to downsize. So, we designed Intake Two. Continuing our history of using kitchen materials to create robot parts, we attached two silicone oven mitts to a beater bar equipped with Iron Reign's REVolution system. Then, we attached a REV Core Hex Motor to the design, then added a 2:1 gear ratio to increase the speed, as the motor wasn't exactly what we wanted.

    Then, we attached our new passive sorting system. Instead of being the old, bulky sorting system, the new system is just three side-by-side bars spaces 68mm apart with tilted wings to move blocks upwards. The 68mm number is important - the size of a gold block. This allows the balls to be struck and fly upwards into the intake while sliding the blocks through the system.

    Next Steps

    We need to attach this to the robot to test intake. The most likely way this'll be done is through a pivot over the walls of the crater from the top of the robot.

    Meeting Log

    20 Oct 2018
    Meeting Log October 20, 2018 By Charlotte, Kenna, Janavi, Ethan, Arjun, Justin, and Abhi

    Meeting Log October 20, 2018

    Juggling the minerals

    Today's Meet Objectives

    Our first scrimmage is next weekend, so we need to complete our chassis and some sort of intake system. Every member needs to take on their own portion of the robot so we can divide and conquer to end today's meeting with a working robot.

    Today's Meet Log

  • Mini-Mech chassis build
  • Finally, we have a chassis. We used small mechanum wheels and a small rectangular frame which is very unusual for Iron Reign with our history of 18 in x 18 in robots. The chassis that Janavi build last weekend during the outreach event was a square, but we needed to make it rectangular to make room for motors. See more on mini-mech at (E-42, Mini Mechanum Chassis).
  • Linear slide build
  • Janavi and Justin worked on the linear slides that Janavi has been working on for a few weeks. Before, we had tested and mounted the slide to an existing chassis, but there were some improvements to be made. They changed the length of the linear slide from using 18 in rails to 12 in rails and added stops so that the slide don't slide out of each other. They also strung the slides so that they can extend and retract depending on the direction of rotation of the wheels.

    Janavi, Justin, and some slides
  • Code mentorship
  • Arjun worked with a few members from Iron Star and Iron Core so that they could start programs for the robots they have been working on. A few weeks ago, Abhi gave them an introduction to coding, but Arjun helped them from the very beginning of making a new project and writing their first lines of code. Iron Reign has been utilizing GitHub for many years and we have found it very helpful, so we helped the other teams set up their own GitHub repositories and taught them how to use it.

    Arjun and the phone mount

    Teaching freshmen GitHub
  • Intake system build
  • Ethan and Abhi worked on our intake system. We are using silicone mats for kitchen counters to launch field elements into our intake system. The minerals then are filtered through 3 bars, each space by 68 mm so that balls roll over and cubes fall in. They completed the intake mechanism, but their greatest challenge is fine tuning the sorting bars and finding a way to mount it onto the chassis. Eventually, we wish to make the system pivotable, but for now we mounted it to the chassis so that it is stationary. Details about this intake system can be found at (E-44, Intake Update).

    Intake mechanism with red silicon mats

    Today's Member Work Log

    Team MembersTaskStart TimeDuration
    CharlotteBlog and organization2:004 hrs
    EthanWorking on blog and intake build2:004 hrs
    KennaRobot build2:004 hrs
    JanaviLinear slide and chassis build2:004 hrs
    ArjunBuild and mentoring2:004 hrs
    KarinaRobot Build2:004 hrs
    AbhiIntake Build2:004 hrs

    Off-Schedule Meeting Log

    23 Oct 2018
    Off-Schedule Meeting Log October-2 23-2, 2018-2 to October 23, 2018 By Ethan, Karina, Charlotte, Kenna, Arjun, and Evan

    Meeting Log October 21 to October 23, 2018

    Iron Reign will be attending a scrimmage on Saturday, but to attend a scrimmage, you usually have to have a working robot. As of Saturday, we did not. So, a few of our members elected to come in on Saturday to do some last minute robot additions.

    Sunday Tasks

    • Attached lift
    • We've had a linear slide that we've been meaning to hook up to the robot for awhile, and we finally did it Saturday. We mounted it to the front of the robot, as it was the easiest access point, then mounted a motor and pulley on the side to extend it. It worked - and then it didn't - as it tangled itself inside the motor, necessitating a redesign.
      Then we realized a more pressing issue. Since torque is equal to force * arm length (T=FR), and the force on our robot is only the force due to gravity (F=mg), we had a torque on the lift equal to T=mgR. Then, as the lift was mounted at the very end, the torque on the arm was at its absolute maximum. And, while we're confident in our building ability, we're not that confident. So, we realized that we'd have to move the lift closer to the middle to minimize torque.
    • Finished intake
    • On Saturday, we worked on the red-silicone intake system, but there were still issues. We used too-long screws to mount the motor that cut into the sprocket, we mounted the fins a little to far out so that the silicone was running into them and losing energy, and we didn't have a way to mount it. First, we replaced the 15mm M3 screws with 8mm ones, ensuring that there would be no further collision. Then, we removed the beams the fins were mounted on and replaced them with a simple crossbar the we directly mounted the fins to. That way, we could adjust all of the fins at once instead of individually cutting each beam.
    • Second stage
    • Our robot is a little on the small side for Iron Reign. To mitigate that, we planned to add a second stage to the robot for support and to hold components like the second REV hub. So, we started on that, cutting the standoffs, and attaching one side completely so that we could use it as a proto-phone-mount.

    Monday Tasks

    • Moved lift
    • To minimize torque, we moved the lift to the center of the robot. Now, this won't eliminate the torque - one side of the robot is much heavier than the other, but it makes it much more manageable.
    • Mounted intake
    • To have a functional robot, we have to have an intake *on the robot*. We had an intake, but it certainly wasn't anywhere close to being on the robot. So, we mounted a Core Hex Motor to the inside of our robot, attached a gear to our robot then bolted a second gear to our intake. Then, we attached the gear to a churro rail mounted on the robot and moved the motor to where the gears coincided. Originally, we planned to use a 30->90 gear system for a 1:3 gear ratio for a calculated 9.6 Newton-meters of torque, but this systed wouldn't fit within the size constraints, so we had to settle for a 1:1 ratio at 3.2 N*m.
    • Mounted 2nd arm
    • On our other robot, Bigwheel, we mounted the 2nd arm for a future beater bar. Unlike most of our robots, this one is mostly off-the-shelf, with some additional Textrix parts and a REV hub.

    Tuesday Tasks

    • Finished 2nd stage
    • To be able to support our additional motors, we had to add a second REV hub. And, to do that, we had to finish the 2nd stage. This wasn't that difficult, all we had to do was attach a standard piece of REV extrusion to the remaining standoffs, then add a REV hub mount, then mount the actual hub.
    • Reinforced lift
    • Our lift is a little bit wobbly laterally, so we took steps to fix this. We attached a small piece of REV rail to the second stage from the lift to minimize wobbling. This still needs to be worked on, as the rail isn't mounted well, but we'll burn that bridge when we get to it.
    • Strung lift
    • Since our lift needs to extend and retract reliably, we have to use a double-pulley system. So, we strung upwards normally, but then attached another string to a higher up pulley that could pull the whole system back down.
    • Replaced lift motor
    • Our old pulley-motor was an AndyMark Neverrest 60. Now, we have nothing against these motors, but we wanted something that would be easier to connect to the REV hub. So, we replaced it with a HD Hex Motor with a 40:1 gearbox. This actually increased the torque by a negligible amount (from 4.186 N*m to 4.2 N*m), and was a more convenient change.
    • Added scoring box
    • Originally, we cut a box template out of polycarb that was the exact size of two silver particles. Unfortunately, we couldn't find a heat gun, so we had to go back to cardboard.
    • Added intake bar
    • We added the corn-cob intake from a few weeks ago onto this robot so that it can get both blocks and balls from over the crater wall.

    Now, in theory, we have a competition-ready robot.

    Before

    After

    Next Steps

    We still need to program our robot and fix any gremlins that pop up; this will happen at the Friday meet.

    DISD Scrimmage at Hedrick MS

    27 Oct 2018
    DISD Scrimmage at Hedrick MS By Charlotte, Janavi, Ethan, Evan, Justin, Karina, and Abhi

    Task: Compete at the Hedrick MS DISD Scrimmage

    Today, Iron Reign competed in the DISD scrimmage at Hedrick Middle School. This was the first scrimmage of the year, so experienced teams and rookie teams alike struggled to get a working robot on the field. We go to this scrimmage every year, and it helps us gage just how much needs to be done to have a qualifier-ready robot. This year, that is a lot. We actually had two robots relatively pieced together, a main chassis and a backup, but we didn't account for many different problems that rendered them inoperable. In the case of the backup robot, the linear slide fell apart easily and was threaded so that it could only extend, and not retract. In the case of the actual robot, most of our problems stemmed from the intake system. Since we built it so recently, we were never able to write any code until in the final few days of preparation. We weren't able to debug the code and it has caused many complications in our robot. Our drive train also had many issues which we have been trying to fix and fine tune.

    Due to these many issues, we did not compete for most of our matches. We spent a lot of time working on our bots and talking to other teams about their progress and plans for the season, as well as see all of the interesting ideas they have put together in fruition in a game setting. In the match we did compete in, we did very badly due to driver error and mechanical errors in the drive train.

    BigWheel Arm

    02 Nov 2018
    BigWheel Arm By Evan

    Task: Design an arm for BigWheel

    Bigwheel’s intake arm is one of the most important parts of the robot. Since our scrimmage, we have learned how to make this arm much more efficient, starting with some supports. The original intake arm was made of two scrap Tetrix rails. The result of this was that the two sides of the arm would be out of sync, creating a twist in the arm that caused it to move oddly. Thus, it has been stabilized with cross beam REV rails.

    The next upgrade on the arm is going to be the box to hold the minerals. Right now it’s just a cardboard prototype and we need to move to the next version. After a bit of debate, we decided to craft it out of polycarb. The reason polycarb was not our immediate solution is because it’s unfortunately quite heavy, and instead the first thing we came to think of was thin plywood and duct tape. Thin slices of plywood would be taped together to create a fabric like box that still had form. This idea still lent itself to breakage, and we next went to a design using a thin plastic sheet, the same kind of plastic that is used inside milk cartons. The only issue is that it’s super weak and doesn’t form well, so we would have to build a frame for it, much like the plywood and tape.

    Next Steps

    Right now we’re toying around with the idea of an arm that not only flips out but also extends using a gear and tooth track made from Tetrix parts of days gone by. The reason for this is to gain a little extra height that we were lacking before in the robot and a little more flexibility when we grab minerals from the crater. To do this I had to take apart the arm from our first ever FTC robot, and use the toothed track and gear plus the extra long tetrix bars to create the slides. So far the slides are surprisingly smooth and we have high hopes for the future of the arm.

    Meeting Log

    03 Nov 2018
    Meeting Log November 03, 2018 By Ethan, Charlotte, Evan, Janavi, Kenna, Karina, Justin, Arjun, Abhi, and Bhanaviya

    Meeting Log November 03, 2018

    Today's Meet Objectives

    So, we have one week before our first tournament. This isn't great. As you can see on our last blog post, we didn't do amazingly at the scrimmage. So, we have a lot of work to do.

    Today's Meet Log

    First and foremost, we have to work on our presentation. So, we did an hour-long presentation runthrough to ensure all team members had the content down.

    Also necessary for a good tournament is the journal. We've had a consistent 10-20 post backlog since the season started, and we've finally started cutting into it. At my current count, we're down to 7 posts left. So, we're making considerable progress on this front. Ethan already finished our strategic plan earlier this week, so all we have left is to write the blurbs and retag our posts, something we'll do on Monday.

    Finally, in order to compete, we have to have a robot. Now, we have a robot, but it isn't really working. So, Evan and Karina worked on mounting an intake system, as well as reinforcing the center lever. This will ensure that the robot can actually score by the tournament.

    On the code side, Abhi found the coefficients for PID so that he can start autonomous. As well, he started merging SDK 4.2 with our 15k-line base of legacy code so that we can take advantage of TensorFlow. On that note, we discovered that SDK 4.2 comes with mineral detection out of the box with TensorFlow - something that we've been working on since kickoff.

    Finally, we have some good news. Iron Reign has official adopted its first new member of the season: Bhanaviya Venkat. Stay tuned for her first blog post later this week.

    Today's Work Log

    Team MembersTaskStart TimeDuration
    EthanPresentation\Journal2:004 hrs
    CharlotteBlog Backlog2:004 hrs
    KennaBlog Backlog2:004 hrs
    JanaviBigWheel Arm2:004 hrs
    ArjunBlog Backlog2:004 hrs
    KarinaBigWheel2:004 hrs
    AbhiAutonomous2:004 hrs
    EvanBlog Backlog2:004 hrs
    Justin3D Modelling2:004 hrs
    BhanviyaOnboarding2:004 hrs

    Pose BigWheel

    03 Nov 2018
    Pose BigWheel By Abhi

    Task: New Pose for Big Wheel robot

    Historically, Iron Reign has used a class called "Pose" to control all the hardware mapping of our robot instead of putting it directly into our opmodes. This has created cleaner code and smoother integration with our crazy functions. However, we used the same Pose for the past two years since both had an almost identical drive base. Since there wasn't a viable differential drive Pose in the past, I made a new one using inspiration from the mecanum one. Pose will be used from this point onwards in our code to setup.

    We start with initializing everything including PID constants and all our motors/sensors. I will skip all this for this post since this is repetitive in all team code.

    In the init, I made the hardware mapping for the motors we have on BigWheel right now. Other functions will come in later.

    Here is where a lot of the work happens. This is what allows our robot to move accurately using IMU and encoder values.

    There are a lot of other methods beyond these but there is just a lot of technical math behind them with trigonometry. I won't bore you with the details but our code is open source so you can find the necessary help if you just look at our github!

    Torque Calculations

    03 Nov 2018
    Torque Calculations By Karina

    Task: Calculate the torque needed to lift chassis

    After seeing how well the robots that could latch onto the lander performed at the scrimmage, Iron Reign knew that we had to be able to score these points. We originally tried lifting with a linear slide system on MiniMech, but it was not strong or sturdy enough for the small chassis, and would definitely not be a functional system on BigWheel in time for competition. And so we thought why not use this opportunity to *flex* on the other teams with an alternative design? An idea was born.

    We decided we would latch onto the lander using the same arm used for intake, and then pivot the main body of BigWheel up off of the ground about an "elbow joint", much like how humans do bicep curls. To do so, our motors would need to have enough torque to be able to lift the loaded chassis off the ground once the arm hooked onto the latch. First, we measured the mass of BigWheel. Then we found where the center of mass was located. The distance from the pivot point to the center of mass became our lever arm, also known as the radius.

    Calculating torque required knowing the forces acting on BigWheel at its center of mass. In this case, there was only the force due to gravity (F = mg). Before we could plug BigWheel's mass into the equation, we converted to units of kilograms (kg), and then used the value to find the newtons of force that would oppose the upward motion:

    Finally, we plugged the force and radius into the torque equation:

    Next Steps

    The next step is to test which gear train will output this torque value based on the motors used and the gear ratio.

    Linear Slide Lift

    04 Nov 2018
    Linear Slide Lift By Janavi

    Task: Design a lift for MiniChassis

    For extension both into the crater and lifting our robot up to the crater we have decided test a linear slide system. We plan to utilize linear slide system for both vertical and horizontal extension on MiniMech.

    Horizontal Extension Goals

    • Long Enough to reach Crater from distance
    • We need to determine how many stages we need

    Vertical Extension Goals

    • Long Enough to reach lander
    • Strong enough to support robot weight

    When designing a lift we need to determine the optimal gear ratio to allow our lift system to lift the robot but still do it relatively fast. Realistically looking at the aluminum parts we are using we plan for the robot to be around 35 lbs. We also know that the lander is 22 inches above the ground and we plan for the linear slide to extend to 14 inches off the ground This would mean that the point of rotation for our hook mechanism would be 22 inches - 14 inches = 7 inches below the latch on the lander.

    We plan to use REV 40:1 motors that have 594.7 oz*in. Now using these calculations we can determine our needed gear ratio.

    This gear ratio of 6.6 means that for our robot we need a motor to gear ratio that needs around seven rotations of the motor to provide one rotation of the hook.

    We knew the max weight of the robot would be around 20 pounds since the total weight of all the parts in the kit is less than 20 pounds. The point of rotation for the hook would be around 5.5 inches below the lander latch. This is because the bottom of the hook is around 22 inches above the ground and the point of rotation will be around 16.5 inches off the ground so that we can account for space for a gear while staying within the 18 inch box. Below is the torque calculation.

    Next Steps

    RIP CNN

    04 Nov 2018
    RIP CNN By Abhi

    Task: Farewell Iron Reign's CNN

    FTC released new code to support Tensorflow and automatically detect minerals with the model they trained. Unfortunately, all of our CNN work was undercut by this update. The silver lining is that we have done enough research into how CNN's work and it will allow us to understand the mind of the FTC app better. In addition, we may retrain this model if we feel it doesn't work well. But now, it is time to bid farewell to our CNN.

    Next Steps

    From this point, we will further analyze the CNN to determine its ability to detect the minerals. At the same time, we will also look into OpenCV detection.

    BigWheel Upgrades

    05 Nov 2018
    BigWheel Upgrades By Evan

    Task: Get BigWheel ready for the tournament

    Today, we built mounts to attach both types of intake to the rack; the rack-and-pinion corncob intake and the red-flapped intake. We also created a new way of mounting the arm to the chassis. The idea is that since it’s attached to the rack and pinion track, it reaches high enough for the robot to put the minerals in the lander. We made the arm with a 12-86 gear ratio. Our next plan is to create the mount, minimizing the size of the arm.

    The final addition is a tail for the robot to be able to stop itself from flipping backwards, something that is a very real danger of the design. It will probably be made of polycarb with aluminum or steel support on either side, just in case the polycarb is not enough to support the push of the robot. Part of this process will involve some code tuning so that the robot stops itself, but the tail is necessary as a preventative measure.

    Next Steps

    There’s still a lot of stuff we will have to do to prepare the robot physically for the competition this Saturday, but I believe it will get done.

    Conrad Qualifier

    10 Nov 2018
    Conrad Qualifier By Ethan, Charlotte, Karina, Janavi, Bhanaviya, Abhi, Arjun, Evan, and Justin

    Task: Compete at the N. TX Conrad Qualifier

    Right off of a mortifying experience at the Hendricks MS Scrimmage, in which we got the worst score at the tournament (and in the one match we did participate in, our robot broke) we walked in on shaky ground. In the week leading up to the tournament, Iron Reign worked hard, with 35 commits to the blog, and countless changes to our robot.

    Inspection

    Our robot fit well inside the sizing cube. However, we were warned for our rats' nest of wiring at the base of our robot, as well as the fact that our metal-frame base had sharp corners.

    Presentation

    We walked in, and started off out strong. Half of a good presentation is the energy, and we had more energy than some of our other presentations last year. Unfortunately, that energy petered out as we stuttered and tripped over ourselves. We got our information across, but not as well as we should have, and we didn't have enough time for questioning.

    Robot Game

    We didn't really have a working robot, but we tried our best. Unfortunately, our best wasn't great.

    Match 1

    We lost, 33-135. We deployed the wrong autonomous and couldn't drive - a total wash.

    Match 6

    We lost, 15-70. Our robot's linear slide seized up, bringing our robot outside of sizing limits, so we had to sit out the match as we hacksawed through our intake.

    Match 11

    We lost, 47-122. Our autonomous worked! (but our team marker didn't deploy).

    Match 13

    We lost, 65-196. Our robot didn't work, we just drove ourselves around aimlessly.

    Match 15

    We lost, 10-167. This time, none of our robots worked!

    In summary, a disappointing result.

    After-Judging and Awards Ceremony

    While we thought we hadn't done well in judging, we were quickly rebuffed. A good measure of judging success is if the judges come back to talk to you, and this was no exception. We had five separate groups of judges come up to us and ask us about *every* component of our team, from business, to volunteering, to code, to design. While we thought we hadn't done well in judging, we were quickly rebuffed. A good measure of judging success is if the judges come back to talk to you, and this was no exception. We had five separate groups of judges come up to us and ask us about *every* component of our team, from business, to volunteering, to code, to design.

    In the ceremony, every single member of SEM Robotics waited. Iron Star had been the 4th alliance captain; Iron Core had demonstrated gracious professionalism; Iron Reign had multiple in-depth discussions with judges; Imperial had an exceptional journal. We watched each team get nominated for awards, but only that, and fall short. In particular, Iron Reign was nominated for every award but Innovate. Then came Inspire. We heard two names echo off as nominations; neither of them SEM Robotics teams. Finally, a speech flew across the arena as Iron Reign stood for their Inspire Award.

    Next Steps

    Even though we won Inspire, we have a long way to go. We are going to compete at at least one more tournament, and don't want to completely embarrass ourselves.

    Code Post-Mortem after Conrad Qualifier

    10 Nov 2018
    Code Post-Mortem after Conrad Qualifier By Arjun and Abhi

    Task: Analyze code failure at Conrad Qualifier

    Iron Reign has been working hard on our robot, but despite that, we did not perform well owing to our autonomous performance.

    Our autonomous plan was fairly simple: perform sampling, deploy the team marker, then drive to the crater to park. We planned to use the built-in TensorFlow object detection for our sampling, and thus assumed that our autonomous would be fairly easy.

    On Thursday, I worked on writing a class to help us detect the location of the gold mineral using the built-in TensorFlow object detection. While testing this class, I noticed that it produced an error rather than outputting the location of the gold mineral. This error was not diagnosed until the morning of the competition.

    On Friday, Abhi worked on writing code for the driving part of the autonomous. He wrote three different autonomous routines, one for each position of the gold mineral. His code did not select the routine to use yet, leaving it open for us to connect to the TensorFlow class to determine which position the gold mineral was.

    On Saturday, the morning of the competition, we debugged the TensorFlow class that was written earlier and determined the cause of the error. We had misused the API for the TensorFlow object detection, and after we corrected that, our code didn't spit out an error anymore. Then, we realized that TensorFlow only worked at certain camera positions and angles. We then had to adjust the position of our robot on the field, so that we could.

    Our code failure was mostly due to the fact that we only started working on our autonomous two days before the competition. Next time, we plan to make our autonomous an integral part of our robot, and focus on it much earlier.

    Next Steps:

    We spend more time focusing on code and autonomous, to ensure that we enter our next competition with a fully working autonomous.

    Materials Testing Planning

    16 Nov 2018
    Materials Testing Planning By Ethan

    Task: Design a lab to test nylon properties

    So, Iron Reign is used to using off-the-shelf materials on our robot: silicone oven gloves, ice cube trays, nylon 3D-printed parts, and more. But, we've never actually done a thorough investigation on the durability and efficacy of these parts. Because of this, we've had some high-profile failures: our silicone blocks breaking on contact with beacons in RES-Q, our nylon sprockets wearing down in Relic Recovery, our gears grinding down in Rover Ruckus. So, we're going to do an investigation of various materials to find their on-robot properties.

    Nylon Testing

    A majority of the 3D-printed parts on BigWheel are nylon - we find it to be stronger than any other material save ABS, but much less prone to shattering. Still, we still deal with a substantial amount of wear, and we want to find the conditions under which damage happens.

    So, to start, we are printing a 4.5" x 1.5" block with a thickness of 4mm with an infill of 60% out of nylon. We chose these values as our average part is about 4mm thick, and our high-strength nylon pieces are about 60% infill. Then, we are going to test it under a variety on conditions meant to simulate stressful operation. As well, we're going to measure other values such as coefficient of friction using angle calculations.

    Silicone Testing

    Similarly, we use the silicone oven mitts on our intake; we find that they grip the particles pretty well. The main thing that we want to test is the amount of energy they have while rotating and then the amount of energy they lose upon collision. We plan to test this through video-analysis. In addition, we wish to test the coefficient of friction of the mitts to see if a better material can be found.

    Next Steps

    We are going to perform these labs so that we can compare the constants we receive to commonly accepted constants to test our accuracy.

    Conrad Qualifier Post Mortem - Short Term

    17 Nov 2018
    Conrad Qualifier Post Mortem - Short Term By Ethan, Bhanaviya, Janavi, Charlotte, Kenna, Arjun, Justin, Janavi, Karina, and Abhi

    Task: Analyze what went wrong at Conrad

    Iron Reign didn't necessarily have the best time at Conrad. As shown in last week's tournament post, the day had its ups and downs. Even though it was a successful tournament overall, there's much that we could do better.

    Problems:

    The Robot

    First, the robot didn't perform well. So, we're beginning our analysis from the mindset that everything must be changed.

    • The Intake
    • The intake itself had a multitude of problems. First and foremost, we actually didn't have a way to contain the particles from the intake. Being that Rover Ruckus' primary way of scoring is by depositing the particles into the lander, this was a pretty big oversight. To solve this, we plan to add a catcher at the bottom of the intake using this template.

      As well, our linear slide locked up in the middle of the tournament, preventing our intake from extending. Now, we have latches that keep the intake from retracting without human assistance.

    • Superman Arm
    • This impressed the judges a lot and was one of the more reliable parts of our robot. However, there were still issues. First and foremost, the arm became misaligned so that the gears began to grind during the judging presentation. This was an easy fix - we just adjusted a set screw - but we need a more rigorous solution. Right now, we're considering metal gears instead.

    The Presentation\Judging

    We didn't have much practice with our presentation. Some of the more major issues were slide order (~5 second gaps between people talking, stuttering due to unfamiliarity with content, and energy (a majority of the members present had held an all-nighter so we weren't really awake).

    We plan to revamp our presentation, adding to the story of BigWheel's development. Plus, we'll have all of our members in the next presentation, which'll be a major help. We need to do more practice, but that's a given.

    Another thing that we fell short on was the Innovate Award (the only award that we weren't mentioned for). A good portion of this is that the Innovate Award rubric emphasizes that the robot needs to work; ours really didn't. However, we need to take a retrospective look at our mechanism insofar that we need to show our difference between us and other robots.

    Programming

    Despite our all-nighter and prior large codebase, we were pretty short on workable code. So, while our driving worked, not much else did. We had an theoretical autonomous, but it remained only that.

    Next, we need to work on our Pose class (the one that determines the position of the robot on the field). From there, we need to add autonomous enhancements, allowing us to drive a little better. The most efficient use of our time could be put toward raising our robot to score and latch, as well as TensorFlow recognition of the minerals.

    Meeting Log

    17 Nov 2018
    Meeting Log November 17, 2018 By Charlotte, Karina, Kenna, Janavi, Evan, Justin, Ethan, Arjun, Bhanaviya, and Abhi

    Meeting Log November 17, 2018

    Evan working on the robot!

    Today's Meet Objectives

    We are going to discuss multiple facets of our team (presentation, engineering journal, organization, etc) with alumni Jayesh and Lin. What we hope to gain out of our conversation is an outside perspective. In addition to this conversation we wish to continue in our reflection of the tournament last weekend and preparation for our next tournament.

    Today's Meet Log

    • Organization
    • Karina and Janavi spent a large portion of practice organizing all of our parts and tools. They organized our drawers, carts, and tent. Organization has historically been a weak spot for Iron Reign, so this year we really want to crack down on that problem, as discussed in (T-13, Organization!).
    • Superman arm and wire organization
    • Evan, Kenna, Janavi, and Karina were all making improvements on our robot, notably working on problems we found at the tournament last week. These problems mostly dealt with wire organization and our superman arm. Analysis on why the superman arm broke can be found at (E-63, Code Issues Break the Superman Arm). More about how we fixed these issues can be found at (E-65, Arm Repairs).
    • Blogging mentoring
    • Also, Bhanaviya is learning to make blog posts. We showed her our blog post guides and answered any questions she had. Expect to hear from her soon.
    • Alumni Meeting and Feedback
    • The main focus of today's meeting was speaking to our alumni Jayesh and Lin who are both in their sophomore of college. They were both founding members of Iron Reign, they were in their senior year the first time we went to supers. More details on this meeting and our post-mortem can be found at (T-27, Conrad Qualifier Post Mortem - Short Term).
    • Presentation feedback
    • First we discussed our presentation lacked energy and enthusiasm, which is a common problem in our presentations. We have great enthusiasm for our work and progress, but we have trouble expressing it on early morning competition days. This could also be improved by lots and lots of practice, so we don't ever have to focus on our memorization, rather focusing on the expression of our passion for robotics.
    • Engineering journal feedback
    • Also, they provided insight on our engineering journal, which they said needs more cohesiveness between posts. This takes the form of adding links to older blog posts that reference future ones after we have written them.
    • Mentorship feedback
    • Finally, we discussed the new teams we have started, Iron Core and Iron Star, and asked for their advice on how to approach mentoring the new recruits. They told us that rather than waiting for them to seek us out, we need to seek them out, as many of the recruits don't have the confidence to approach us, since many of our team members are upperclassmen. We want to let them know that Iron Reign is here to help them in any way possible and to make our workspace one of collaboration and the transfer of ideas through the teams and grade levels.

    Today's Member Work Log

    Team MembersTaskStart TimeDuration
    KarinaOrganization and Build2:004 hrs
    AbhiConversation2:004 hrs
    EvanRobot build2:004 hrs
    CharlotteBlog and organization2:004 hrs
    EthanWorking on blog2:004 hrs
    KennaRobot build2:004 hrs
    Justin3D Modeling2:004 hrs
    JanaviOrganization and build2:004 hrs
    BhanaviyaLearning to Blog2:004 hrs

    Chassis Mark Two Planning

    20 Nov 2018
    Chassis Mark Two Planning By Ethan

    Task: Plan a new BigWheel chassis

    Our next tournament is a while away, in about two months. So, we have a little bit of time to redesign. And, our current chassis has plenty of faults.

    Our original BigWheel base.

    First and foremost, our chassis was built for a testing competition, not to be a full fledged competition robot. As such, it's a little lacking in features that would be normal on such a robot such as mounting points for other components, durability, and free space. So, we need a redesign that allows for greater modularity and functionality.

    We're starting from the ground up; our current base is a square metal frame with a polycarb bottom. While this is a good start, it has some issues: the base seems to be a little wobbly due to the polycarb, there's only one level of construction, so our motor mounts, REV hubs, and supports compete for space, and we have to add all the counting points ourselves.

    The main way to prevent the wobbliness is by replacing the polycarb with something sturdier, as well as not having everything simply bolted together. Thus, we're going to dive headfirst into the next step - welding. We plan to cut a base out of aluminum as well as four side plates to create a dish-like shape. Then, we plan to TIG weld these plates together (TIG welding uses a tungsten electrode in contact with two separate metal plates in combination with a filler metal that melts and joins the two plates together).

    Basic design for the newest version of BigWheel.

    Next Steps

    We plan to cut the aluminium next week, and TIG weld the pieces together the week after that. We're beginning to train a few of our members on TIG welding and we already have some of the safety equipment to do so.

    Conrad Qualifier Post Mortem - Long Term

    20 Nov 2018
    Conrad Qualifier Post Mortem - Long Term By Ethan

    What could have gone better?

    This is a document for analyzing what we can do better, not just what went wrong at the Conrad qualifier. The format of this will be in issue > solution format.

    Prep

    • Lack of tools and parts
      • Pack tools the week before - involves better organization overall
      • Bring failsafes & extra parts - prevents costly errors
    • Little presentation practice
      • Cut down powerpoint - optimally 8 minutes
      • More practice - seamless transition
      • Order - we need to tell a story
    • Journal prep
      • Same issue - we need to organize the journal to tell a story
      • Lack of images - backdate images in blog posts
      • Lack of diagrams - explanatory
      • Lack of continuity - link posts together to show how components of team have changed
      • Need to write real control award

    Programming

    • Autonomous
      • No autonomous - need to have functional autonomous
    • TeleOp
      • Robot easily breaks - need to create presets to prevent

    Build

    • Lift
      • Lift linear slide broke - need to redesign with new linear slides
    • Intake
      • Intake did not actually move - need to reattach motors

    Other

    • Presentation
      • Map slides to articles in journal
      • Review judging rubrics

    Friction Coefficient and Energy

    01 Dec 2018
    Friction Coefficient and Energy By Ethan

    Task: Measure the coefficient of friction of our oven mitt intake

    We want to measure various constants of materials on our robot. Earlier this season, we found that a nylon-mitt collision on our intake sapped the rotational energy of our intake. But, that was just a build error, easily fixable. But now, we plan to measure the energy lost from particle-mitt collisions, and the first part of this is to find the coefficient of friction of the silicone mitts.

    To measure the coefficient of friction, we first had to simplify an equation to determine what values to measure.

    From these calculations, we determined that the only factor to measure to determine the coefficient of friction between blocks and the mitts is the angle of incline. Therefore, we created a simple device to measure the angle at which slippage begins to occur.

    The angle was about 27 degrees, so the coefficient of friction is equal to arctan(27)=0.44. This is a pretty good coefficient of friction, meaning that the intake is very efficient in bringing the particles in, but it also means that the intake loses more energy on collision.

    Next Steps

    We need to measure further constants such as stretch and wear of nylon. To do so, we're printing a simple testing nylon block.

    Meeting Log

    01 Dec 2018
    Meeting Log December 01, 2018 By Charlotte, Ethan, Kenna, Evan, Abhi, Justin, and Bhanaviya

    Meeting Log December 01, 2018

    Today's Meet Objectives

    We plan to prepare for a few events coming up, the tournament we are going to host at Townview and our presentation to the Dallas Personal Robotics Group. As well, we plan to continue building our robot and improve on the superman arm in preparation for our next competition in January.

    Today's Meet Log

    • Hosting a qualifier
    • The Townview qualifier is coming up in just a few weeks, and we are starting to make preparations. Ethan is making a wrap for Cart Bot that emulates an ambulance, so we can stock the cart with tools and drive it around to help teams during the competition.

      Ethan designing
    • Robot materials testing
    • This year, we want to continue our materials testing in order to ensure our robot is efficient. Here is Ethan performing one of these tests, measuring the friction of different materials we might use for an intake system. Further information on the tests can be found at (E-59, Friction Coefficient and Energy).

      Materials friction testing

    • Model updates
    • Justin kept working on the 3D model, which is essential to complete as we are trying to improve the various systems on our robot, especially the Superman arm and other complicated mechanisms.
    • Blog training
    • A universal responsibility for Iron Reign members is writing blog posts. We taught Bhanaviya how to use GitHub and Notepad ++ so that she can write her own blog posts and post them to the blog.
    • DPRG prep
    • Abhi is preparing a demo in preparation for our meeting with the Dallas Personal Robotics Group (DPRG). We are going to show off our robot's computer vision capabilities and the strides we have made to train our own neural network. We expect to receive a lot of specific questions about this. Our presentation will be an hour long. To see how our presentation went, read (T-31, Presenting to the DPRG).

      Today's Work Log

      Team MembersTaskStart TimeDuration
      AbhiCode2:004
      EthanBlog & Testing2:004
      EvanBuild2:004
      CharlotteBlog2:004
      BhanaviyaBlog2:004
      KarinaBuild2:004
      JustinModelling2:004
      KennaSocial Media2:004

    Selecting Lift System

    01 Dec 2018
    Selecting Lift System By Janavi

    Objective: Determine the type of lift system will allow us to delatch and reach the lander

    In our past post Choosing Drive Train we decided that we will use the chassis BigWheel. After deciding the base we need to now think about the lift system that we want to use to allow us to both deposit into the lander and latch onto it. Evan and I have been experimenting with linear slides to use for our lift. I have been working on a REV linear slide lift system as referenced in the post "Linear Slide Lift". Evan has been working on a separate ball bearing linear slide. As well as these two options we are looking into past linear slides and ones that we have seen teams use in past challenges. We need to determine which of the linear slides works best based on the game requirements this season

    Linear slides needs according to game
    • Lift and lower robot from latch on lander
    • Extend out to Crater from distance to collect minerals
    • Extend out vertically to lander to deposit minerals

    What we want our linear slide to have
    • Light Weight
    • Bidirectional (Able to collect from crater and deposit)
    • Speed
    • Sturdy
    • Easy to fix and maintain in case of emergency
    • Small in size
    • Extend out to around 5 ft in height

    Linear Slide Options
    • Ball Bearing Lift
      • Heavy
      • Smooth
      • Reliable
      • Never used the before
    • Drawer Slides
      • Heavy
      • Low cost
      • Unwieldy
      • Familiar as we used them last year
    • REV Linear Slides
      • Light Weight
      • Not very reliable
      • Familiar

    Next Steps

    We need to select the best linear lift system for our chassis based on the requirements we set above.

    Linear Nylon Strength Test

    02 Dec 2018
    Linear Nylon Strength Test By Ethan

    Task: Measure linear nylon wear

    We've had some issues with our nylon sprockets, mainly through excessive wear and tear. So, we want to test what circumstances cause what deformation.

    Linear Deformation

    This one was simple. We printed this block with 60% infill (the highest infill we tend to use), measured its length (3.75") and hung one end from our deck. On the other end, we inserted a bar and attached 180 lbs of mass to it, then we measured its new length (3.8"). Thus, the constant of deformation is [weight]/[change in length] = 650 kg/cm. This demonstrates that linear transformation isn't Iron Reign's issue, as the highest possible weight put on any nylon piece on our robot is ~27 lbs/12.25kg.

    However, there is other damage. After testing, we found internal damage in the nylon from where it was hanging.

    Next Steps

    Next, we need to test the rotational damage that nylon incurs through friction. We plan to design a simple rotational sprocket and run it on a motor for a set amount of time and measure the wear to determine wear per unit time.

    Code Issues Break the Superman Arm

    02 Dec 2018
    Code Issues Break the Superman Arm By Abhi

    Task: Analyze the code issues that led to our robot breaking

    After constant use, our robot's Superman arm broke. At this point, it is important to analyze our failures. This error was not because of a build issue but rather a code and driver control issue.

    When testing, we always heard the gears grinding some times and we thought it wasn't an issue. There were instances like once when we accidentally made the robot stand up under a table. Other times, the robot would press the arm down into the foam and keep pushing when it couldn't really keep going, leading to grinding.

    Not only did the arm break but also the Superman mechanism. This broke mainly because we didn't set proper ranges of motion of the arm and the gears would grind when there was interference. Because of the damage, we can't use the existing gears.

    Next Steps

    We intend to gang up the gears and make the mesh stronger to fix the build side of things. In the code, I already added the software limits to motion so we don't have those problems anymore.

    Arm Repairs

    06 Dec 2018
    Arm Repairs By Evan and Abhi

    Task: Fix elbow and Superman

    This is a follow up to Post E-64, Code Issues Break the Superman Arm. We made some hustles and got them fixed. We reinforced Superman by ganging up multiple gears (as seen above) and repeated a similar process with the elbow arms. Hopefully this will make BigWheel more secure, especially with software limits in the code.

    Rotational Nylon Wear Test

    07 Dec 2018
    Rotational Nylon Wear Test By Ethan

    Task: Test the amount of wear on a moving nylon part over time

    After our last tournament, we noticed several 3D-printed sprockets that had worn down significantly. So, we wanted to measure how much wear one of our nylon sprockets takes per second.

    First, we printed out a model of one of the REV sprockets, using the STEP file here. We printed it with ~45% infill, our average for sprockets and other parts. Then, we attached a REV Core motor to an extrusion, then mounted the nylon sprocket on the other side. Then, we measured the length on one of the teeth. We ran the motor for 1:05:45, and then measured the length afterwards.

    So, the tooth length before was 5.3mm, and after, it was 5.23mm, for a difference of 0.07mm. Then, we ran the system for 1:05:45. This results in a wear rate of 1.77*10^5 mm/sec. So, given that we use our robot for about an hour, cumulatively, in a tournament, 0.0638mm, or 1.2% of the sprocket. This is enough to be noticeable under loose-chain conditions and indicates that we should keep extra sprockets at tournaments so that we can do a quick replacement if needed.

    Next Steps

    We plan to perform more materials testing in the future; in particular, we'd like to determine the wear rate of the regular REV sprockets as well, but this requires a more rigorous experiment.

    DPRG Vision Presentation

    08 Dec 2018
    DPRG Vision Presentation By Arjun and Abhi

    Task: Present to the Dallas Personal Robotics Group about computer vision

    We presented to the DPRG about our computer vision, touching on subjects including OpenCV, Vuforia, TensorFlow, and training our own Convolutional Neural Network. Everyone we presented to was very interested in our work, and they asked us many questions. We also received quite a few suggestions on ways we could improve the performance of our vision solutions. The presentation can be seen below.

    Next Steps

    We plan to research what they suggested, such as retraining our neural networks and reusing our old training images.

    Selecting Intake System

    20 Dec 2018
    Selecting Intake System By Janavi

    Objective: Determine the type of intake system that will allow us to efficiently obtain and deposit minerals within the lander

    In our post "Selecting Lift System" we decided that the linear slide system that we will use is the MGN12H rails also referenced to as the Ball-Bearing slides. These slides while heavy provide the smoothest option. now that we have chosen the Lift system we need to determine the intake system that will allow us to take in two minerals and deposit them in the most efficient way possible. Throughout this season already we have been experimenting with different types of intake systems as seen in posts like "Pool noodle intake" and "Selective Intake" and "Scoring Mechanism"

    Intake System needs according to game
    • Collect only two minerals
    • Sort between silver and gold minerals

    What we want our linear slide to have
    • Light Weight
    • Speed of intake mechanism
    • Sturdy
    • Easy to fix and maintain in case of emergency
    • Small in size

    Passive Deposit vs Passive Intake

    Pros Cons
    Passive Deposit Faster intake Could be unreliable if not positioned correctly
    Passive Intake More accurate Harder to intake and therefore we score less

    Intake Mechanism Material / Shape

    Pros Cons
    Ice Cube Tray Compliant and smooth Not a far reach
    Surgical Tubing Farther reach Possibility of missing minerals due to sporadic behavior of surgical tubing
    Pot holder Brings in minerals Not far reach and too compliant
    Octopuckers ( from last year's season ) Experience with using material Too stiff and not far enough reach

    End of TIG Welding

    21 Dec 2018
    End of TIG Welding By Evan

    Task: Detail TIG welding plans and why they failed

    At the beginning of the season, we saw that our robot base was not as well crafted as we originally thought it to be. While we have worked to correct it over the season, it’s still not what we wish to see in a functional robot, and we came up with the idea of making the frame from light aluminum instead of the polycarb, and fix it with TIG welding.

    It seemed like a good idea at the time, but there were many other problems on the robot more important than a new base. So we pushed the TIG plan to the side, in lieu of correcting other issues like the lift and the intake. While we won’t completely throw the idea out, it will be a while before we begin to start the project. Also hindering us is the amperage output of the home, which is too low to run the TIG welder off of. Until we get additional amperage to the house, our plans will be on hold but not forgotten.

    BigWheel Arm Locks

    22 Dec 2018
    BigWheel Arm Locks By Evan

    Task: Create locks to keep BigWheel's intake arms in an extended position

    An important part of this year's challenge is scoring minerals in the lander. Additionally, our upright elbow cannot raise the scoring mechanism to the lip of the lander alone. Thus, we had to create a way to get those additional inches to score.

    First, we tried a REV linear slide design. This worked, but barely. It repeatedly got stuck, at one point even needing to be sawed apart at a tournament due to its inoperability. So, we switched to a new brand of linear slides, the MGN12H with 12mm steel rails. But, since we were no longer using REV, we needed a new design to keep the arms in the extended position.

    The new design relies on gravity. When the robot is on the lander in the hanging position, it will stay within the sizing cube. However, as it descends, the linear slides will glide upward, staying attached to the lander until the robot contacts the mat. And, as the slide finishes moving, it will move over a triangular piece of polycarb such that it is easy for the slide to move up, but near impossible to reverse its direction. This will ensure that the robot's arm stays extended.

    Next Steps

    We need to reattach the mounting point for hanging in order for this system to work.

    Scoring Mechanism

    22 Dec 2018
    Scoring Mechanism By Janavi and Abhi

    Task: Create a way to hold minerals

    We now have a lift and an intake system, but we're missing a way to hold onto and deposit the minerals after intake. To achieve this, we created a prototype.

    We wanted to create a box-like shape that can be attached to a moving axle to hold the minerals when lowered. When the lift is up in the air, the axle can rotate to lower the box and let the minerals fall into the depot. We tested out multiple designs but we ended up having to nix that as there was no way to get the minerals out of the box once they were in.

    Our second design was a sloped shape: just steep enough to hold onto the balls but not so steep that the balls couldn’t escape. To create this shape, we decided to have a rectangle attached to an axle able to hold the minerals when down and deposit the minerals when spun. We created multiple variations with different sizes as can be seen in the drawing below. We eventually settled on was design B, a square that was 155 cm by 155 cm.

    We decided to not use design A as it was simply too large and continuously hit against the edge of the rail. We progressed to a smaller size of 155 mm by 155 mm (design B) that worked well. We attempted another design of two separate backs as two separate channels for the minerals (Design C). However, we decided this wasn't a very good design because there was an increased chance of the ball getting stuck in between the channels, causing either a penalty or a decrease in the number of balls we can control.

    After creating the back of our holder, we realized that we needed to elevate it off the back of the rails at an angle. It was the only way to hold the balls and allow them to come down a ramp when the axle is spun. We decided that the best way to achieve this was through two wing-like triangles on the side that we could bend to ensure the minerals couldn’t escape out the side. We went through multiple designs as can be seen below

    At first, we attempted to attach two right angle triangles with 155mm acting as a leg of the triangle. We varied this design by increasing the angle of the slope so that the balls would be held at an angle that allows them to not slip. But, after creating this design out of cardboard and attaching it to the axle, we saw that the sharp angle interfered with the beater bar. To amend this, we changed the triangle attached to the end of the rectangle to have the 155 mm side be the hypotenuse of the triangle. Again, we varied the design in the steepness of the triangle. Through this, we determined that a slope of around 30 degrees was the best design.

    After finalizing our design, creating it out of cardboard, and attaching it to our robot, we cut the piece out of polycarb. We bent the side triangle using heat and drilled in the holes to attach the axle with.

    Next Steps

    Although this design works well, we want to continue to change and improve upon it. For example, the next way we can improve the design is by changing the way that the polycarb is attached to the axle through a 3-D printed attachment.

    Meeting Log

    22 Dec 2018
    Meeting Log December 22, 2018 By Charlotte, Ethan, Janavi, Bhanaviya, Evan, Arjun, and Abhi

    Meeting Log December 22, 2018

    Today's Meet Objectives

    Our goals for today include a battery box, repair and improvement of our intake system, and organization.

    Today's Meet Log

    • Intake redesign
    • On the robot, we are resizing the intake system as a whole so that it folds in completely and fits within the 18 by 18 sizing requirement. Our biggest focus today was on our intake system, notably building a system that deposits the minerals. We plan to create the system out of polycarb, but first we are prototyping with cardboard. There are two versions we have prototyped so far, as you can see below.

      Version 1: too wide and the triangle flaps were improperly cut so the edges interfere with the intake

      Version 2: fixes problems above, with the hypotenuse of the triangular flaps on the main part of the carrier
    • Tournament organization
    • Ethan made a battery box out of an orange REV starter kit and sawed some wood to fit snuggly in order to have some dividers. Finally we drilled a hole in the side for the power strip cord.
    • Neural network training
    • Arjun is working on our neural network for which we need to capture more training data. He is creating a program that will have the robot take pictures & capture the data we need as it drives. We had a bare-bones autonomous for the qualifier, so over the break we want to revamp our autonomous so that we can incorporate the neural network we are training more effectively. To see more about our vision training, see (E-28, CNN Training Program).

      Today's Member Work Log

      Team MembersTaskStart TimeDuration
      ArjunNeural network data collection2:001
      JanaviPrototyping2:001
      BhanaviyaPrototyping2:001
      EthanBlog2:001
      EvanBuild & Prototyping2:001
      CharlotteBlog2:001
      AbhiPrototyping2:001

    Creating Side-Latches

    26 Dec 2018
    Creating Side-Latches By Evan

    Task: Allow the robot's arms to stand on their own

    The issue with the lift is that many of the pieces that need to be made require specificity that’s hard to obtain using aluminum parts, so we chose polycarb. The key to making these specialized parts is a small butane torch held at just the right distance. Run the torch back and forth across the part where you want to bend, in the pattern of the bend you’re trying to achieve, watching closely for the first air pocket. Once you’ve spotted it, bend it. For tight, right angle bends, press the piece of polycarb against a hard surface until the right angle is achieved. If there’s an issue in your bend, simply heat it up again. This, however, weakens the piece so try not to do it on pieces that need to bare a load. We had to bend a complex piece, and while, it doesn’t look super complex in the picture, it had very precise requirements so that everything could slide together in unison. The part we made went in between the two linear slides on the arms to the 3d printed latch we created, and worked very smoothly. While polycarb is not the best at retaining strength over distance, it’s worked well in this instance.

    Next Steps:

    The next stage for this will be to make these brackets out of steel once we have access to the forge. This will result in a new, stronger version, which will hopefully eliminate a potential point of failure in our current robot.

    Meeting Log - Dec. 19, 2018

    29 Dec 2018
    Meeting Log - Dec. 19, 2018 December 29, 2018 By Ethan, Evan, Janavi, Karina, Abhi, and Arjun

    Meeting Log December 29, 2018

    Hello and welcome to the Iron Reign Holiday meet. We've got a few meet objectives today, namely:

    • Autonomous
    • BigWheel Side Plates
    • PowerPoint Revisions
    • Blog Post Backlog
    • Tent Cleanup
    These aren't all super-top priorities for us, but they all need to get done. And, as we're working with a skeleton crew, we might as well.

    So, first, Janavi, Abhi, and Ethan cleaned the tent, preparing it for autonomous testing. To do so, they got some freshmen to take up their robot parts as they cleaned and organized the field. We were missing a surprising number of tiles, so we had to replace them. As well, the recent rain had weakened the wood lying underneath. We're not going to do anything to fix this right now, but we really should.

    Next, we did PowerPoint revisions. Our presentations have always run over the 15 minute time limit, and we really need to fix it. As well, we want to change our presentation order such that we start off with the weakest award (motivate) and end on a strong note. We deleted about 5 slides, added 1, updated the Townview Tournament slide, and fixed some typos. We figure that this'll cut down our time and streamline the process.

    In the meantime, Ethan updated old blog posts and fixed broken images on the blog. Some examples of this are the Superman Arm's breakage, the old shields, Friction Test, and Battery Box posts. This took a significant amount of time.

    Finally, we had to cut new shields for the robot arms. These prevent the arms from moving back downward, allowing our robot to score in the lander. Evan measured these and melted them today, and plans to cut them next practice.

    Refactoring Vision Code

    29 Dec 2018
    Refactoring Vision Code By Arjun

    Task: Refactor Vision Code

    Iron Reign has been working on multiple vision pipelines, including TensorFlow, OpenCV, and a home-grown Convolutional Neural Network. Until now, all our code assumed that we only used TensorFlow, and we wanted to be able to switch out vision implementations quickly. As such, we decided to abstract away the actual vision pipeline used, which allows us to be able to choose between vision implementations at runtime.

    We did this by creating a java interface, VisionProvider, seen below. We then made our TensorFlowIntegration class (our code for detecting mineral positions using TensorFlow) implement VisionProvider.

    Next, we changed our opmode to use the new VisionProvider interface. We added code to allow us to switch vision implementations using the left button on the dpad.

    Our code for VisionProvider is shown below.

    1
    2
    3
    4
    5
    6
    public interface VisionProvider {
        public void initializeVision(HardwareMap hardwareMap, Telemetry telemetry);
        public void shutdownVision();
        public GoldPos detect();
    }
    ```
    

    These methods are implemented in the integration classes.
    Our new code for TensorflowIntegration is shown below:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    public class TensorflowIntegration implements VisionProvider {
        private static final String TFOD_MODEL_ASSET = "RoverRuckus.tflite";
        private static final String LABEL_GOLD_MINERAL = "Gold Mineral";
        private static final String LABEL_SILVER_MINERAL = "Silver Mineral";
    
        private List<Recognition> cacheRecognitions = null;
      
        /**
         * {@link #vuforia} is the variable we will use to store our instance of the Vuforia
         * localization engine.
         */
        private VuforiaLocalizer vuforia;
        /**
         * {@link #tfod} is the variable we will use to store our instance of the Tensor Flow Object
         * Detection engine.
         */
        public TFObjectDetector tfod;
    
        /**
         * Initialize the Vuforia localization engine.
         */
        public void initVuforia() {
            /*
             * Configure Vuforia by creating a Parameter object, and passing it to the Vuforia engine.
             */
            VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters();
            parameters.vuforiaLicenseKey = RC.VUFORIA_LICENSE_KEY;
            ;
            parameters.cameraDirection = CameraDirection.FRONT;
            //  Instantiate the Vuforia engine
            vuforia = ClassFactory.getInstance().createVuforia(parameters);
        }
    
        /**
         * Initialize the Tensor Flow Object Detection engine.
         */
        private void initTfod(HardwareMap hardwareMap) {
            int tfodMonitorViewId = hardwareMap.appContext.getResources().getIdentifier(
                    "tfodMonitorViewId", "id", hardwareMap.appContext.getPackageName());
            TFObjectDetector.Parameters tfodParameters = new TFObjectDetector.Parameters(tfodMonitorViewId);
            tfod = ClassFactory.getInstance().createTFObjectDetector(tfodParameters, vuforia);
            tfod.loadModelFromAsset(TFOD_MODEL_ASSET, LABEL_GOLD_MINERAL, LABEL_SILVER_MINERAL);
        }
    
        @Override
        public void initializeVision(HardwareMap hardwareMap, Telemetry telemetry) {
            initVuforia();
    
            if (ClassFactory.getInstance().canCreateTFObjectDetector()) {
                initTfod(hardwareMap);
            } else {
                telemetry.addData("Sorry!", "This device is not compatible with TFOD");
            }
    
            if (tfod != null) {
                tfod.activate();
            }
        }
    
        @Override
        public void shutdownVision() {
            if (tfod != null) {
                tfod.shutdown();
            }
        }
    
        @Override
        public GoldPos detect() {
            List<Recognition> updatedRecognitions = tfod.getUpdatedRecognitions();
            if (updatedRecognitions != null) {
                cacheRecognitions = updatedRecognitions;
            }
            if (cacheRecognitions.size() == 3) {
                int goldMineralX = -1;
                int silverMineral1X = -1;
                int silverMineral2X = -1;
                for (Recognition recognition : cacheRecognitions) {
                    if (recognition.getLabel().equals(LABEL_GOLD_MINERAL)) {
                        goldMineralX = (int) recognition.getLeft();
                    } else if (silverMineral1X == -1) {
                        silverMineral1X = (int) recognition.getLeft();
                    } else {
                        silverMineral2X = (int) recognition.getLeft();
                    }
                }
                if (goldMineralX != -1 && silverMineral1X != -1 && silverMineral2X != -1)
                    if (goldMineralX < silverMineral1X && goldMineralX < silverMineral2X) {
                        return GoldPos.LEFT;
                    } else if (goldMineralX > silverMineral1X && goldMineralX > silverMineral2X) {
                        return GoldPos.RIGHT;
                    } else {
                        return GoldPos.MIDDLE;
                    }
            }
            return GoldPos.NONE_FOUND;
    
        }
    
    }
    

    Next Steps

    We need to implement detection using OpenCV, and make our class conform to VisionProvider, so that we can easily swap it out for TensorflowIntegration.

    We also need to do the same using our Convolutional Neural Network.

    Finally, it might be beneficial to have a dummy implementation that always “detects” the gold as being in the middle, so that if we know that all our vision implementations are failing, we can use this dummy one to prevent our autonomous from failing.

    OpenCV Support

    31 Dec 2018
    OpenCV Support By Arjun

    Task: Add OpenCV support to vision pipeline

    We recently refactored our vision code to allow us to easily swap out vision implementations. We had already implemented TensorFlow, but we hadn't implemented code for using OpenCV instead of TensorFlow. Using the GRIP pipeline we designed earlier, we wrote a class called OpenCVIntegration, which implements VisionProvider. This new class allows us to use OpenCV instead of TensorFlow for our vision implementation.
    Our code for OpenCVIntegration is shown below.

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    public class OpenCVIntegration implements VisionProvider {
    
        private VuforiaLocalizer vuforia;
        private Queue<VuforiaLocalizer.CloseableFrame> q;
        private int state = -3;
        private Mat mat;
        private List<MatOfPoint> contours;
        private Point lowest;
    
        private void initVuforia() {
            VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters();
            parameters.vuforiaLicenseKey = RC.VUFORIA_LICENSE_KEY;
            parameters.cameraDirection = VuforiaLocalizer.CameraDirection.FRONT;
            vuforia = ClassFactory.getInstance().createVuforia(parameters);
        }
    
        public void initializeVision(HardwareMap hardwareMap, Telemetry telemetry) {
            initVuforia();
            q = vuforia.getFrameQueue();
            state = -2;
    
        }
    
        public void shutdownVision() {}
    
        public GoldPos detect() {
            if (state == -2) {
                if (q.isEmpty())
                    return GoldPos.HOLD_STATE;
                VuforiaLocalizer.CloseableFrame frame = q.poll();
                Image img = VisionUtils.getImageFromFrame(frame, PIXEL_FORMAT.RGB565);
                Bitmap bm = Bitmap.createBitmap(img.getWidth(), img.getHeight(), Bitmap.Config.RGB_565);
                bm.copyPixelsFromBuffer(img.getPixels());
                mat = VisionUtils.bitmapToMat(bm, CvType.CV_8UC3);
            } else if (state == -1) {
                RoverRuckusGripPipeline pipeline = new RoverRuckusGripPipeline();
                pipeline.process(mat);
                contours = pipeline.filterContoursOutput();
            } else if (state == 0) {
                if (contours.size() == 0)
                    return GoldPos.NONE_FOUND;
                lowest = centroidish(contours.get(0));
            } else if (state < contours.size()) {
                Point centroid = centroidish(contours.get(state));
                if (lowest.y > centroid.y)
                    lowest = centroid;
            } else if (state == contours.size()) {
                if (lowest.x < 320d / 3)
                    return GoldPos.LEFT;
                else if (lowest.x < 640d / 3)
                    return GoldPos.MIDDLE;
                else
                    return GoldPos.RIGHT;
            } else {
                return GoldPos.ERROR2;
            }
            state++;
            return GoldPos.HOLD_STATE;
        }
    
        private static Point centroidish(MatOfPoint matOfPoint) {
            Rect br = Imgproc.boundingRect(matOfPoint);
            return new Point(br.x + br.width/2,br.y + br.height/2);
        }
    }public class OpenCVIntegration implements VisionProvider {
    
        private VuforiaLocalizer vuforia;
        private Queue<VuforiaLocalizer.CloseableFrame> q;
        private int state = -3;
        private Mat mat;
        private List<MatOfPoint> contours;
        private Point lowest;
    
        private void initVuforia() {
            VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters();
            parameters.vuforiaLicenseKey = RC.VUFORIA_LICENSE_KEY;
            parameters.cameraDirection = VuforiaLocalizer.CameraDirection.FRONT;
            vuforia = ClassFactory.getInstance().createVuforia(parameters);
        }
    
        public void initializeVision(HardwareMap hardwareMap, Telemetry telemetry) {
            initVuforia();
            q = vuforia.getFrameQueue();
            state = -2;
    
        }
    
        public void shutdownVision() {}
    
        public GoldPos detect() {
            if (state == -2) {
                if (q.isEmpty())
                    return GoldPos.HOLD_STATE;
                VuforiaLocalizer.CloseableFrame frame = q.poll();
                Image img = VisionUtils.getImageFromFrame(frame, PIXEL_FORMAT.RGB565);
                Bitmap bm = Bitmap.createBitmap(img.getWidth(), img.getHeight(), Bitmap.Config.RGB_565);
                bm.copyPixelsFromBuffer(img.getPixels());
                mat = VisionUtils.bitmapToMat(bm, CvType.CV_8UC3);
            } else if (state == -1) {
                RoverRuckusGripPipeline pipeline = new RoverRuckusGripPipeline();
                pipeline.process(mat);
                contours = pipeline.filterContoursOutput();
            } else if (state == 0) {
                if (contours.size() == 0)
                    return GoldPos.NONE_FOUND;
                lowest = centroidish(contours.get(0));
            } else if (state < contours.size()) {
                Point centroid = centroidish(contours.get(state));
                if (lowest.y > centroid.y)
                    lowest = centroid;
            } else if (state == contours.size()) {
                if (lowest.x < 320d / 3)
                    return GoldPos.LEFT;
                else if (lowest.x < 640d / 3)
                    return GoldPos.MIDDLE;
                else
                    return GoldPos.RIGHT;
            } else {
                return GoldPos.ERROR2;
            }
            state++;
            return GoldPos.HOLD_STATE;
        }
    
        private static Point centroidish(MatOfPoint matOfPoint) {
            Rect br = Imgproc.boundingRect(matOfPoint);
            return new Point(br.x + br.width/2,br.y + br.height/2);
        }
    }
    

    Off-Schedule Meeting Log, Winter Edition

    03 Jan 2019
    Off-Schedule Meeting Log, Winter Edition January 03, 2019 By Ethan, Evan, Karina, Abhi, and Arjun

    Meeting Log (Week of)January 03, 2019

    We have quite a few tasks this week, including:

    • Latch design

    • We've had an idea for a latch for a while. We started with the simple hook pictured below, but it was just that, a start. We want to move on to bigger and better things. So, we designed a new version, displayed below the hook.

      This version uses two of the above gears to form the latch. Then, as the robot shifts, the latch becomes undone, allowing the robot to gently fall upon the ground.
    • Latch attachment

    • So, just having a design isn't enough, it actually has to be implemented. So, Evan cut some attachment points that also function as linear slide stoppers as detailed in our last post.

      Then, we attached the latching system to the attachment posts on each side, mounting the latching system as seen here.

    • Fixing superman and wheels

    • While Karina was testing our robot, BigWheel suddenly began to lose friction, stranding itself in the middle of the field. It would only operate if more weight was put upon it. We haven't determined the reason yet; it could be that the temperature caused some strange material effect, but the new linear slides could also have shifted the weight distribution of the robot away from the main wheels. In addition, the Superman arm failed to work. We've narrowed it down to a code issue, but beyond that, we're scratching our heads.


      Karina putting weight on the robot

    • End\Beginning of year review

    • Iron Reign has a tradition of reviewing the performance of the past year; this year I chose to begin it using numbers. I went back in the archives and used the stats page to count contributions from team members. This post can be found here.
    • TensorFlow & OpenCV testing

    • We still need to fully implement gold/silver particle detection, as well as the rest of our autonomous. To begin on this long, arduous process, Abhi and Arjun worked from home to begin vision integration. At the current point, the program detects gold most of the time. We are experiencing a bug in that the telemetry isn't detected.

    Debug OpenCV Errors

    03 Jan 2019
    Debug OpenCV Errors By Arjun

    Task: Use black magic to fix errors in our code

    We implemented OpenCV support in our code, but we hadn’t tested it until now. Upon testing, we realized it didn't work.

    The first problem we found was that Vuforia wasn’t reading in our frames. The queue which holds Vuforia frames was always empty. After making lots of small changes, we realized that this was due to not initializing our Vuforia correctly. After fixing this, we got a new error.

    The error message changed, meaning that we fixed one problem, but there was another problem hiding behind it. The new error we found was that our code was unable to access the native OpenCV libraries, namely it could not link to libopencv_java320.so. Unfortunately, we could not debug this any further.

    Next Steps

    We need to continue debugging this problem and find the root cause of it.

    Auto Paths

    04 Jan 2019
    Auto Paths By Abhi

    Task: Map and code auto for depot side start

    Today, we implemented our first autonomous path. Since we we still didn't have a complete vision software, we made these manually so we can integrate vision without issues. Here are videos of all of the paths. For the sake of debugging the bot stops after turning towards the crater but in reality it will drive and park in the far crater. These paths will help us score highly during autonomous.

    Center

    Left

    Right

    Next Steps

    We will get vision integrated into the paths.

    Modeling Slide Barriers

    04 Jan 2019
    Modeling Slide Barriers By Kenna

    Task: Create barriers to prevent the linear slide from falling

    Recently, we added polycarb barriers to our linear slide system. They were created as a temporary measure by bending the polycarb with a blow torch and are less exact than we would like.

    I originally tried to overlap 3 rectangles, and Creo didn't register it as an enclosed shape and wouldn't extrude. For any geometric shapes you want to extrude, constructed lines in sketch mode make it much easier. They ensure that everything is perpendicular, but also that your shape will still enclose so you can extrude it. Armed with constructed lines, Our models printed in roughly 30 minutes using nylon on a Taz printer.

    Next Steps

    Though nylon has its many uses, it's still not as strong as polycarb. We're looking into whether or not the printed version will withstand the slide system. Perhaps, we may need to pursue a different material or a more exact method of creating polycarb barriers. Any posts continuing this thread will be linked here.

    Meeting Log

    05 Jan 2019
    Meeting Log By Bhanaviya, Charlotte, Kenna, Evan, Arjun, Ethan, Janavi, Karina, Austin, Lin, Jayesh, and Omar
    Meeting Log January 05, 2019 Today's Meet Objectives

    Today's goals include lowering the latch on Superman so that it becomes more hook-friendly, taking a team picture, and re-assigning presentation slides.

    Today's Meet Log

    • Fix latch system
    • On the robot, Evan lowered the latch system so that the system would be compatible for the hanging task. After the latch system was lowered, bolts on both sides of the lift system had to be moved so that they would align with one another. See more latch updates at (E-82, Latch Model).
    • Add vision functionality to autonomous
    • In terms of code, Arjun is working on using internal Tensorflow Object Detection code to grab frames for the autonomous to avoid any bugs in the custom code he has written so far. Additionally, he is working on ensuring accuracy in the output of the OpenCV pipeline so that it will consistently sample correctly.
    • Presentation feedback from judges
    • With the alums as our judges, we did a thorough presentation run-through. A critique that persisted from our "judges" was that we weren't as enthusiastic as we could have been. So, we decided that a better way to convey our energy was by finding out a way in which we stood out from other competing teams. One way for us to stand out was the back-and-forth debate between Karina and Evan on Mini Mech vs Big Wheel. Since that interaction effectively conveyed both the iterative nature of Iron Reign's engineering process as well as our team's quirks as a whole. In the future we are going to do many run-throughs to make the presentation informative and crisp.
    • Team picture
    • And last but not least, we took a suitable team picture for our journal - this one encompassing both current and old members of the team.

    Issues with Driving

    05 Jan 2019
    Issues with Driving By Karina

    Task: Get ready for Regionals

    Regionals is coming up, and there are some driving issues that need to be addressed. Going back to November, one notable issue we had at the Conrad qualifier was the lack of friction between Bigwheel's wheels and the field tiles. There was not enough weight resting on the wheels, which made it hard to move suddenly.

    Since then many changes have been made to Bigwheel in terms of the lift. For starters, we switched out the REV extrusion linear slide for the MGN12H linear slide. We have also added more components to intake and carry minerals. These steps have fixed the previous issue if we keep the lift at a position not exceeding ~70 degrees while moving, but having added a lot of weight to the end of the slide makes rotating around the elbow joint of Bigwheel problematic. As you can see below, Bigwheel's chassis is not heavy enough to stay grounded when deploying the arm (and so I had to step on the back end of Bigwheel like a fool).

    Another issue I encountered during driver practice was trying to deposit minerals in the lander. By "having issues" I mean I couldn't. Superman broke as soon as I tried going into the up position, and this mechanism was intended to raise Bigwheel enough so that is would reach the lander. Regardless of Superman's condition, the container for the minerals was still loose and not attached to the servo. Consequently, I could not rotate the lift past the vertical without dropping the minerals I had collected.

    Next Steps

    To run a full practice match, Superman and the container will need to be fixed, as well as the weight issue. Meanwhile, I will practice getting minerals out of the crater.

    Latch Model

    06 Jan 2019
    Latch Model By Abhi and Justin

    Task: Model and print the Latch

    Early in the season, we made a hook, Although it was durable, it required a higher amount of precision than we would have liked to have, especially in the rushed last seconds of the endgame. As a result, we designed a latch that is completely 3D printed and placed it on the robot.

    This is the general model of it fit together (excluding left panel). The panels in the front are there to guide the latch into place when extending upwards from the ground.

    This wheel represents what actually does the latching. When sliding upwards, there are two wheels that twirl in opposite directions and slot into the lander bracket. We attached a smaller piece to this to tension with a rubber band allowing us to move up into the bracket but not back down.

    Next Steps

    We actually mounted this onto the robot and it seems to hold its own weight. However, the mounting was done very weirdly so we need to find a definite place for this system before we use it in auto or end game.

    Vision Summary

    06 Jan 2019
    Vision Summary By Arjun and Abhi

    Task: Reflect on our vision development

    One of our priorities this season was our autonomous, as a perfect autonomous could score us a considerable amount of points. A large portion of these points come from sampling, so that was one of our main focuses within autonomous. Throughout the season, we developed a few different approaches to sampling.

    Early on in the season, we began experimenting with using a Convolutional Neural Network to detect the location of the gold mineral. A Convolutional Neural Network, or CNN, is a machine learning algorithm that uses multiple layers which "vote" on what the output should be based on the output of previous layers. We developed a tool to label training images for use in training a CNN, publicly available at https://github.com/arjvik/MineralLabler. We then began training a CNN with the training data we labeled. However, our CNN was unable to reach a high accuracy level, despite us spending lots of time tuning it. A large part of this came to our lack of training data. We haven't given up on it, though, and we hope to improve this approach in the coming weeks.

    We then turned to other alternatives. At this time, the built-in TensorFlow Object Detection code was released in the FTC SDK. We tried out TensorFlow, but we were unable to use it reliably. Our testing revealed that the detection provided by TensorFlow was not always able to detect the location of the gold mineral. We attempted to modify some of the parameters, however, since only the trained model was provided to us by FIRST, we were unable to increase its accuracy. We are currently looking to see if we can detect the sampling order even if we only detect some of the sampling minerals. We still have code to use TensorFlow on our robot, but it is only one of a few different vision backends available for selection during runtime.

    Another alternative vision framework we tried was OpenCV. OpenCV is a collection of vision processing algorithms which can be combined to form powerful pipelines. OpenCV pipelines perform sequential transformations on their input image, until it ends up in a desired form, such as a set of contours or boundaries of all minerals detected in the image. We developed an OpenCV pipeline to find the center of the gold mineral given an image of the sampling order. To create our pipeline, we used a tool called GRIP, which allows us to visualize and tune our pipeline. However, since we have found that bad lighting conditions greatly influence the quality of detection, we hope to add LED lights to the top of our phone mount so we can get consistent lighting on the field, hopefully further increasing our performance in dark field conditions.

    Since we wanted to be able to switch easily between these vision backends, we decided to write a modular framework which allows us to swap out vision implementations with ease. As such, we are now able to choose which vision backend we would like to use during the match, with just a single button press. Because of this, we can also work in parallel on all of the vision backends.

    Another abstraction we made was the ability to switch between different viewpoints, or cameras. This allows us to decide at runtime which viewpoint we wish to use, either the front/back camera of the phone, or external webcam. Of course, while there is no good reason to change this during competition (hopefully by then the placement of the phone and webcam on the robot will be finalized), it is extremely useful during the development of the robot, because we don't have everything about our robot finalized.

      Summary of what we have done:
    • Designed a convolutional neural network to perform sampling.
    • Tested out the provided TensorFlow model for sampling.
    • Developed an OpenCV pipeline to perform sampling.
    • Created a framework to switch between different Vision Providers at runtime.
    • Created a framework to switch between different camera viewpoints at runtime.

    Next Steps

    We would like to continue improving on and testing our vision software so that we can reliably sample during our autonomous.

    Minor Code Change

    11 Jan 2019
    Minor Code Change By Karina

    Task: Save Bigwheel from self destruction

    The other day, when running through Bigwheel's controls, we came across an error in the code. The motors on the elbow did not have min and max values for its range of motion, causing the gears to grind in non-optimal conditions. Needless to say, Iron Reign has gone through a few gears already. Adding stops in the code was simple enough:

    Testing the code revealed immediate success. we went through the full range of motion and no further grinding occurred.

    Next Steps

    Going forward, we will continue to debug code through drive practice.

    Meeting Log

    12 Jan 2019
    Meeting Log January 12, 2019 By Charlotte, Kenna, Karina, Evan, Justin, Abhi, Ethan, Arjun, and Janavi

    Meeting Log January 12, 2019

    Today's Meet Objectives

    Today our goals include presentation practice, autonomous testing and fine tuning, and build changes from the newest update of the latch to replacing our REV rails with carbon fiber tubing.

    Presentation practice

    Today's Meet Log

    • Presentation practice
    • With the competition a week away, we are practicing our presentation frequently. Last time we presented, we were a bit all over the place; we talked over each other and stuttered quite a bit. This practice is to minimize these mistakes and finish our presentation in an appropriate amount of time, so we can answer questions.
    • Latch update
    • We finished up the design and print for version 2 of the latch system, and Janavi assembled it. The 2nd version changes the stopping mechanism; the bearings are now in the mount rather than in the actual sprockets. More details on this version of the latch can be found at (E-93, Latch Updates).

      Janavi & the latch
    • Lift redesign
    • Evan and Karina worked on reattaching/realigning the belt drive for the lift. It would go off in unintended angles, the process went smoothly except for the fact that we are going to need to tighen the zip ties by replacing them frequently. See more on the belt drive at (E-87, Belt Drive).
    • Carbon fiber redesign
    • The REV rails for our intake system are quite heavy, so we are building a new intake with its old components and carbon fiber tubing instead of REV rails. Justin designed and started a print for a perpendicular mounting bracket for the carbon fiber tubes.

      Justin modelling
    • Mineral storage
    • To add to the new intake system, Evan is making a new box to store minerals out of polycarb.
    • Autonomous and vision
    • Arjun tested and fine-tuned our computer vision. This vision uses Open CV, taking inspiration from the published pipeline and Doge CV. The vision is working well, so he is integrating it into the autonomous program that Abhi created. Karina and Arjun have been working diligently to test this autonomous so that it is in working condition for the next competition.
    • Side shield design
    • Ethan began the design for side shields, which we are planning to cut out using a laser cutter that is stored in our school's engineering classroom. To see more on the design process of the side shields, see (E-87, Designing Side Shields).

    Today's Member Work Log

    Team MembersTaskStart TimeDuration
    CharlotteBlog2:004
    JanaviBuild2:004
    EthanBlog2:004
    Evan/td>Build2:004
    AbhiCode & Testing2:004
    ArjunCode & Testing2:004
    KarinaBuild & Testing2:004
    JustinModelling2:004
    KennaProofreading2:004

    Code Updates

    13 Jan 2019
    Code Updates By Abhi and Arjun

    Task: Detail last-minute code changes to autonomous

    It is almost time for competition and with that comes a super duper autonomous. For the past couple of weeks and today, we focused on making our depot side work consistently. Because our robot wasn't fully built, we couldn't do auto-delatching. Today, we integrated our vision pipelines into the auto and tested all the paths with vision. They seemed to work at home base but the field we have isn't built to exact specifications.

    Next Steps

    At Wylie, we will have to tune auto paths to adjust from our field's discrepancies.

    Belt Drive

    14 Jan 2019
    Belt Drive By Evan and Karina

    Task: Install a belt lift on our robot for depositing

    The most recent addition to BigWheel has been the addition of a belt drive lift on either side of the linear slides. We chose a belt lift over a string and pulley lift because it is a much more secure, closed system, and doesn’t require stringing. For these reasons, we switched to belt drive. While more complicated to build, it requires no spool, only tension, no knots, and is super smooth in its motion. Our current design relies on the same time of belt drive used on 3D printers, something that we as a team are familiar with. The issues that come with using a belt drive lift include a more complicated setup and a more difficult time to repair in the pit, a lower ability to bear weight due to slippage of the teeth, and difficulties in tensioning.

    Next Steps

    So far the belt drive has experienced a bit of slippage, but with the intake redesign we are just about to start on, it should have a better time lifting the intake.

    Designing Side Shields

    14 Jan 2019
    Designing Side Shields By Ethan

    Task: Create side shields for BigWheel

    Iron Reign has access to an Epilog Mini laser-cutter through our school, so we decided to use it to create side shields to protect our robot during defensive play, display our team numbers, and prevent wire entanglement

    We created our original design in Illustrator. The canvas size was 12"x18", ensuring that our design stayed within the size limits. Then, we found the side height of our robot's wheel hubs (1.3") for later use. The original design, above, was inspired by 1960s teardrop campers.

    The Epilog Mini is a CO2 laser cutter, which means that it can cut acrylic, cardboard, and wood. We don't keep our robot at school, which meant that we had to make a test cut at school. We had a variety of issues, our first print cut way too small, about 8.5"x11" when it should've been 17"x8". Our next cut caught on fire, burning in the machine as I tried to put it out without water. Our final test was successful, producing the cutout below.

    But, when fit to the robot, issues became apparent. It was barely scraping the size limit, and while it fit over the wheel mounts, it failed to match the shape of the wheel. And, the shield grazed the ground, meaning that any rotation from the Superman arm would damage it or the arm. So, we created a second, smaller design and cut it using wood, resulting in a final design.

    Selective Intake

    17 Jan 2019
    Selective Intake By Evan

    Task: Design a new sorting mechanism for gold and silver particles

    The differentiation between the different shapes of minerals has been something we’ve been thinking about since day one. At the time we designed a box that allowed us to sort out blocks and balls by size, but weren't able to implement it. Our original selective intake only accepted balls so we only have to go to the one loading area, but our new design allows us to deliver both blocks and balls to their respected containers. It wasn’t implemented earlier because the robot just wasn’t tall enough. With our new belt drive, It’s possible to do.

    This we decrease the difficulty of TeleOp for the drivers by increasing the speed of deposit while decreasing accuracy needed. The selective intake also has a door built into it, which holds back the minerals until we’re ready to deposit. Gravity does the rest of the work, letting the balls fall down into a brachistochrone, and letting the cubes fall through.

    The other thing that we wanted to do was to have this process be almost completely mechanical, taking more stress off the drivers. The gate is released when a lever is pushed in and translated to a quicker motion with a pair of gears at a 2:1 ratio allowing for an easy deposit. The frame of the intake is made out of polycarb, bent with the sheet bender and cut into the correct form with the bandsaw.

    The intake also uses our ice cube design from earlier in the season. It is compliant and with its new 3D-printed supports (Ninjaflex, 20% infill), it will be much more effective than the previous intake. This time, instead of stapling the thing together, we are sewing it shut, which should hopefully negate any problems the previous version had, such as coming apart where the two sides met. The intake will be offset a little from the ice tray intake to allow for as much grabbing action as possible.

    Next Steps

    Now we must allow the drive team as much time to practice with it as possible.

    Pool Noodle Intake

    18 Jan 2019
    Pool Noodle Intake By Evan

    Task: Design a quick intake for the robot before competition

    The night before our final qualifier, we decided that the intake system on the robot was not up to our standards. To fix this issue, we poked some holes in a pool noodle, and put surgical tubing through it. While this was a quick and semi effective fix, it did have some problems, mostly due to the rushed nature of its construction. The tubing slid back and forth, and the noodle itself was slightly offset from the depositing box, causing it to be a little off. It could only be remedied by taping all the surgical tubing together, allowing it to grip the minerals better and allow for a smoother intake. The other big issue with this version of the intake was that the depositing mechanism was imprecise and required very accurate driver control and a little bit of luck.

    Next Steps

    This isn't a permanent solution, but we need to have something simple so that we can intake the gold and silver particles at the tournament. We plan to replace this with the actual corn on the cob intake after the competition.

    Wylie East Qualifier 2019

    19 Jan 2019
    Wylie East Qualifier 2019 By Ethan, Charlotte, Janavi, Evan, Abhi, Arjun, Karina, and Justin

    Task: Compete at Wylie East

    Wylie East was Iron Reign's second qualifier of the year. Having qualified at the first one, we planned to use the tournament as an opportunity to practice the presentation and driver practice, as well as check up on other teams' progress. We didn't have a working robot going in - we had found that our latch was one-time-use only the night before, we had recently swapped intakes due to weight, and our autonomous was non-existent.

    Judging

    Unlike last tournament, we had actually done presentation practice, cleaned out the judging box, and revamped the presentation. We were missing a member, but we had already reassigned their slides well in advance so that people would practice them.

    And, our practice paid off. We had pretty seamless transitions, we had a good energy that the judges enjoyed, and our robot demo went really well. We got our content across, and even better, we finished way under 15 minutes so that the judges could ask us questions (even though they didn't have many to ask).

    Later, we had one group of judges come up to greet us. They mainly asked about our robot and its various functions and design choices. Our robot wasn't there, so we had to rely on old prototypes.

    Inspection

    Our robot passed field and robot inspection with flying colors and no reprimands, probably the first time that this has ever happened for Iron Reign.

    Robot Game

    Like above, we really didn't have a perfectly working robot. But, we performed much better than past tournaments due to improvements.

    Match 1

    For the first time in Iron Reign history, we tied, 211-211. Our autonomous sampled and we parked, and we were able to latch in the endgame, so it was a pretty good match all around.

    Match 2

    We lost the next match, 134-85. Our partner's robot shut down, so we couldn't keep up with the opponent. Our auto worked though, as well as latching.

    Match 3

    We lost this match, 102-237. This time, our autonomous didn't work, as our team marker fell off and knocked us off our path.

    Match 4

    We lost, 123-139. Again, our autonomous workde fine, everything else just failed.

    Match 5

    We lost, 122-154. Everything was going smoothly, but our alliance was blown out of the water during particle scoring.

    After Judging and Awards

    We weren't picked for an alliance, so we had to wait for awards. And, we ended with three awards: 1st Connect, 2nd Innovate, and 2nd Motivate. We were ineligible for Inspire due to our prior performance, but we don't believe we would have won it - the head judge stated that this was the closest tournament to regionals that we would get, so there was plenty of tough competition.

    After the awards ceremony, we came up to the fields to help clean and talk to referees. There, we were told something that we enjoyed; one of the refs told us that Iron Reign was one of the nicest and most graciously professional teams they had dealt with this season. We really liked to hear that, and it meant a lot. Also, we were told by another observer that we needed to make what our robot did more clear in the presentation, a point that we'll expand upon in the post-mortem.

    Next Steps

    See post-mortem.

    Competition Day Code

    19 Jan 2019
    Competition Day Code By Abhi and Arjun

    Task: Update our code

    While at the Wylie quaiifier, we had to make many changes because our robot broke the night before.

    First thing that happened was that the belt code was added. Previously, we had relied on gravity and the polycarb locks we had on the slides but we quickly realized that the slides needed to articulate in order to preserve Superman. As a result, we added the belts into our collector class and used the encoders to power them.

    Next, we added manual overrides for all functions of our robot. Simply due to lack of time, we didn't add any presets and we focused on making the robot functional enough for competition. During competition, Karina was able to latch during endgame with purely the manual overrides.

    Finally, we did auto path tuning. We ended up using an OpenCV pipeline and we were accurately able to detect the gold mineral at all times. However, our practice field wasn't setup to the exact specifications needed so we spent the majority the day at the Wylie practice field tuning depot side auto (by the end of the day it worked almost perfectly every time.

    Next Steps

    We were lucky to have qualified early in the season we could make room for mistakes such as this. However, it will be hard to sustain this, so we must implement build freezes in the future.

    Meeting Log

    26 Jan 2019
    Meeting Log January 26, 2019 By Charlotte, Kenna, Ethan, Justin, Arjun, Abhi, and Bhanaviya

    Meeting Log January 26, 2019

    Today's Meet Objectives

    We are going to use our experience from last week to guide our improvement until Regionals. Today we are going to discuss what these improvements exactly entail and outline a timeline for when we need to accomplish these improvements in order to allow adequate time to dedicate to autonomous code and drivers' practice.

    Today's Meet Log

    • Robot repairs
    • There were some problems with our motors: one of the axle hubs is stripped. Though we attempted to replace the axle hubs, Iron Star and Iron Core took brought most of the tools that we need to their competition.

      Karina and the robot
    • Code updates
    • We did a lot of last minute code changes during the competition. Abhi and Arjun cleaned it up and removed legacy code. Autosetup in autonomous, autonomous that works for all sides of the lander, was ditched a long time ago as it was not reliable by the time we needed to test before competition. Now that we have some time before regionals, we are bringing autosetup back. We are taking all of the code we made from scratch during the competition and integrating it into autosetup, which we hope to have ready soon to start driving practice as soon as possible.

      Coders
    • Robot model changes
    • Justin worked on the robot model. We've made lots of changes on the robot in the past month, so besides the changes that we tested on our model, it needed a couple of updates; the upgraded deposit and reinforced Superman arm. The finished robot model for BigWheel can be found at (E-107, Bigwheel Model).

    • Blog updates
    • Ethan worked on the Wylie post and the postmortem, which can be found at (T-38, Wylie East Postmortem).

    Today's Work Log

    Team MembersTaskStart TimeDuration
    AllPlanning Meeting2:10pm.25
    CharlotteTask2:004
    KennaTask2:004
    JanaviTask2:004
    EthanTask2:004
    AbhiTask2:004
    ArjunTask2:004
    JustinTask2:004

    Wylie East Postmortem

    26 Jan 2019
    Wylie East Postmortem By Ethan, Janavi, Charlotte, Karina, Abhi, Justin, Kenna, Arjun, and Bhanaviya

    Task: Analyze what went wrong at Wylie

    We performed well at Wylie, comparatively speaking. But, there's always room for improvement.

    Problems:

    The Robot & Code

    • Latch
    • So our first major issue was the latch. We had put together the latch the week before the tournament and tested it the night before, finding that the bearings fell out of the nylon backing under the pressure of lifting the robot. Effectively, this meant that we could only use the latch once per match as we had to reset the bearings after each use. So, we're pursuing two avenues to fix this: cut the latch in aluminum or completely redesign the latch.
    • Presets & Limits
    • Another issue that occurred was that the robot kept on injuring itself. It repeatedly overextended the Superman arm, causing its gears to disengage and strip. The same happened for the intake elbow - we didn't have limits set in so it would move too much and break. And with the belt arms, we stretched the belts out because we didn't have limits created.
    • TeleOp Helplessness
    • Another issue was that our robot didn't function well between autonomous and endgame. Our intake was recently created, and as a result, we felt it better to not attempt to score minerals. We're working on a new intake for this, some combination of our old corn-cob intake but without the Tetrix pieces that made it so heavy.

    Preparation, Presenation & Judging

    • Prep
    • We didn't pack for this tournament and as a result, we didn't have any nuts or bolts, a pretty big oversight. From now on we plan to set up boxes to bring for the week before.
    • Practice
    • Our presentation was better this time. Still, we didn't get enough practice. There were a few long pauses between people and we skipped a couple of slides. The only way to fix lack of practice is more practice.
    • Energy
    • We always need energy, it's what draws people in and gets judges to remember our presentation. Currently, we do a mini-debate within the presentation over our design choices but we plan to improve this and make it more point-by-point. In the same vein, we need to be louder.

    Pit Conduct & Misc

    • Prep Scouting Sheet
    • We need to make a scouting sheet for the tournament ahead of time with past performance. As well, we need to make a second sheet prefilled with team names for the day of. This would just reduce the amount of time spent to prepare at the tournament and transfer it to weeks-before prep.
    • Focus in pits
    • A consistent issue for Iron Reign is focus. People'll do their homework and things that aren't necessarily related to robotics in the pits and we need to stop; it always looks better to be focused when judges come around. We're still thinking of ideas to stop this.

    Latch Updates

    26 Jan 2019
    Latch Updates By Justin, Abhi, and Ben

    Task: Update the latch

    Our first attempt at a latch was made out of flat metal L brackets that would slide into the hook, but they slid off under any stress. We decided to make a latch with a ratchet and sprocket system. The easiest way to accomplish this was to 3d print it. There are two sprockets and the lander hook will slide in between them. This causes the sprockets to rotate and then lock, allowing the latch to support the weight of the robot. To disengage, the driver just needs to move the ratchet up and over the hook. The picture of the model shows our change in design because the right sprocket is mounted to a bearing in mount, while the left side has the bearing in the sprocket.

    The purpose of our new latch is to increase the speed of latching. The latch requires one direction of motion to fully engage it, making it perfect for autonomous. The latch also has room for error because the funnel shape of the fron plates guides the hook into the sprockets.

    Issues

  • bearings pop out under stress(fixed by moving bearings from sprocket mount to sprockets)
  • whole subsystem bends under stress(fixed by mounting the latch to aluminum instead of polycarb)
  • difficulty turning ratchet(fixed by trimming pieces)
  • Still not strong enough to support weight of robot in a match
  • Hard to get close enough to lander to engage ratchet
  • Next Steps

    We need to either strengthen our current design or find a better alternative.

    Road to Regionals

    27 Jan 2019
    Road to Regionals By Ethan

    Task: Consider what needs to be done before regionals

    Engineering Notebook:

    • Fix old posts, add calculations and reasons why
      • Intake posts
    • Backdate prototypes
      • Latch System
      • Superman - how we figure out what height to raise it
      • Which wheels we used based on friction
      • Which motors and why ( gear ratios and speed)
      • Gear ratio of superman
      • Linear slide vs new slides - how they work differently
      • Belt system
      •  
    • Fix timeline
    • Update posters
    • Write posts about last minute things
      • Belts
      • Autonomous
      • Latch = bad
      • Tournament
      • Post mortem
    • Create a research-like poster with all of iron reigns calculations on it
    • Create a robot manual using 3D model renders
      • Torque values, what it does, all that stuff

    Build:

    • Aluminum latch
      • Create 3D model
      • Cut at makerspace
    • Intake redesign
      • Mount red intake onto carbon fiber
      • Attach to robot
    • Front “block”
      • Create 3D model
      • Machine out of aluminum
    • Side shields
      • Fix some design problems
        • Remove points
        • Add flourishes
      • Recut with thicker acrylic
      • Mount LEDs underneath
    • Update 3D model
      • Add motors, gears
      • Update intake

    Code:

    • Auto path for crater side
      • Vision after path is complete
    • Auto path for depot side double-sample
      • Vision after path is complete
    • Auto path for crater side double-sample
      • Vision after path is complete
    • Find presets for Superman and elbow
    • Endgame mode creation
      • openCV detection of latch
      • Auto-latching and delatching
    • Autoscore during teleop

    Other:

    • Driver practice
    • Make project management charts accessible
    • Print posters
    • Make banner
    • Print banner
    • Ensure we have tent parts
    • Tent design
      • Check amount of space
      • Trophy display
      • Fairy lights
      • Organization + tool cart
    • Hats
    • Scouting Sheet
    • Tokens
      • Create design in illustrator
      • Test design
      • Cut many
    • Are we bringing things to handout?
      • Tokens to hand out ( laser cut)
      • Business Cards

     

    Superman Calculations

    28 Jan 2019
    Superman Calculations By Ethan

    Task: Calculate torque and other values of the Superman arm on our robot

    We want to have our robot completely replicable through the journal. So, we found it necessary to include the power calculations of various subsystems on our robot.

    Superman Arm

    The Superman arm uses two REV Core Hex motors to lift the robot upward, outputting a base 125 RPM and 6.4 Newton-meters of torque. Then, we have 15-tooth gears attached to the motors, which in turn connect to 125-tooth gears for a gear ratio of 10.4:1. Using the torque calculation WheelT=MotorT*(output/input), we find that the total torque exerted downward by the arm is 66.6 N*m.

    Then, given that the arm is .304 meters long, the upwards force produced by the Superman arm is 20.29968 Newtons. The robot itself weighs about 20 pounds, or 89 Newtons. But, since the robot is moving around its center axis, we can neglect the lower half of the robot that touches the ground with the wheels, reducing our load to 44.5 Newtons. Then, taking the integral of force with respect to the radius measured from the Superman arm, we integrate the equation force=(force at top/radius to top)*radius=292.763r. Using the limits defined by the distance to the edge of the robot (0 to .152 meters), the downward torque created by gravity is 3.38 N*m. Modeling the robot as a single point, we get this diagram.

    But, the robot doesn't always operate at optimal load. For example, when the robot is at maximum extension, there are about 60N of load above the center arm and the center arm itself is extended 18 inches, or .4572 meters. Performing the same integral as before with the new limits (0, .4572+.152=.6092), we find that the maximum possible downward torque exerted on the arm is 54.33 N*m, resulting in a net torque of 12.7 N*m upward. Superman can still raise the robot upward, but much slower and with a much greater probability of gear slippage. At these torque levels, the plastic teeth of the gears slip if they're not perfectly aligned.

    Given that the gears are composed of Acetal (Delrin/POM), that the area of one tooth is (.00104 meters * .011 meters = 0.00001144 m^2), that the arm produces 66.6 N*m * .152 m = 10.12 Newtons of force, and the Delrin/POM deformation chart, we can find that the pressure on *one* tooth of the gear is P=F/A=10.12/.00001144=884615.38 Pascals or .88461538 MPa. And, consulting the Delrin/POM deformation chart below, using the long-term line for an hour of use, we retrieve a stress of ~.5%, meaning that the teeth of the gears deform by .5% per hour of use. This alone explains our gear slippage under high loads; as the pressure on a tooth increases, they cause more deformation, which in turn results less area contact between the teeth of the gears, which results in more stress, causing a negative feedback loop.

    However, this alone doesn't explain the stripping of the gears - the gears would only deform by .0572 uM; more analysis is required. When we inspected the superman gears more closely, we found that the gears barely interlocked - maybe 1% of the gears were touching. When we go back to the pressure equation, we find that this increases the pressure on each tooth to 88 MPa. Under the short-term compression curve below, we find the strain is about 5%, or 10x the strain. This results in a deformation of about 5uM, but the contact area itself is only 104 uM, so under these loads it causes an appreciable effect.

    This leads us to the natural conclusion to solve this issue - the gears must be held tighter to increase the contact area and decrease stripping. To do this, we're starting to design a gear holder, which will be detailed soon.

    Gearkeepers

    29 Jan 2019
    Gearkeepers By Jose and Evan

    Task: Create and install gearkeepers to reduce slippage

    We need to install gearkeepers on the Superman arm to prevent gear skippage which damages gears over time. We designed a simple rectangle in PTC Creo and cut holes to fit bearings, 3D-printed them, and attached them.

    Now it was time to test for gear skippage. Unfortunately, we had one or two gear skips with every attempt of rotating the wheel mount. We tried using string to see if tensioning the gear holders would work but that also failed.

    We went back to the drawing board and checked for a sizing error. To calculate this we take the module of the gear and multiply it by the amount of teeth the gear has, then dividing by two to get the gear's radius. We do this for both gears and add them together. The module of the REV plastic gears is 0.75. This resulted to be (15×0.75/2)+(125×0.75/2) or 52.5 mm. And the original gear holders were 53 mm long, a slight error but at least we found the reason for error. We also noticed that there was some give in the plastic inserts for the REV bearings so we decided to tighten it down to 52mm.

    We changed the length of the inside of the gear holders from 53mm to 52mm and 3D printed them. This resulted in a complete fit where the gears were firmly engaged.

    Next Steps

    This is good for now but in the future, we need to watch the nylon of the gearkeepers for wear and tear as well as stretching - even a millimeter will allow the gears to slip.

    Intake Omnis

    29 Jan 2019
    Intake Omnis By Ben

    Task: Add omnidirectional wheels to intake arm

    We need to add omniwheels to the intake arm to allow the arm to rest on the ground, while still maintaining the necessary height for collecting the minerals. If the height is too low, the minerals wouldn't be able to move through the intake. If the intake was too high, it wouldn't be able to grip onto the minerals and pull them through. We decided to use omnidirectional wheels as they would allow us to drive forward and backwards with the arm extended.Our first challenge was finding space on the intake arm to attach the wheels. We had a few options:

    • Attach the wheels parallel to the arm
    • To do this, we would have to have a "u" shaped component, which we could mount off of a threaded extrusion, then attach that to the servo mount.
    • Mount the wheel perpendicular to the arm
    • This would give the same degree of maneuverability. To attach this, we would have to use an elbow bracket and attach that to an extrusion at a 90° angle.
    Both of these present a similar challenge, leaving enough room for the intake to function properly. With about 2.5in. to work with, we mounted the wheel perpendicular with a 1.75 in. extrusion. We threaded the extrusion and used an elbow bracket to mount the wheel; this ensures the strength of the wheel. This left about 0.5in. between the wheel and the "corn on the cob" intake.

    Image of wheel attached to intake arm

    Next Steps

    Our next steps are to perform testing on the wheels to determine if they are durable and low enough, and improve the performance of the robot. One issue that may arise is rubbing against the gears, as they may shift over prolonged usage, along with twisting of the extrusion.

    Mechanical Depositing

    01 Feb 2019
    Mechanical Depositing By Evan

    Task: Create a mechanical deposit for our selective deposit

    To relieve driver stress, we decided to put a mechanical release mechanism that would drop the minerals into the passive sorter to then further deposit them. The lever that activated the release mechanism was made of thick wire attached to a small gearbox that reversed the direction of rotation for the release gate. The lever activated the gearbox when it was pushed into the side of the lander. This created some issues that ultimately killed the mechanical release, such as a balance of tension that would never work out. We had to balance the tension of the rubber bands with the weight of the minerals while also accounting for the fact that the lever had to be pushed without our entire passive sorter being pushed beyond 180 degrees up and down.

    Because of the difficulty in implementing this, we instead switched over to a servo which now powers the release gate. While short-lived, it was a good test of the limits of our intake system, and we will be improving on it in the coming days.

    Next Steps

    We need to attach a servo to the intake with a correct mounting position to allow at-will depositing. We plan to do this with a inward-mounted servo which will then be connected to the REV hub through a wire protector, allowing us to place a servo high on the robot without worrying about the wires getting stuck in the gears and cut like before.

    Latch V.3.5 Assembly

    01 Feb 2019
    Latch V.3.5 Assembly By Ben

    Task: Assemble the V.3.5 latch and attach to the robot

    We assembled the fourth version of the latch today. Some of the improvements on this latch include using bigger bearings and thrust bearings inside. This latch is designed to be stronger and more reliable. After cleaning the parts and trimming some edges, we assembled the pieces. Upon assembly, we discovered an issue: the gears required a different amount of pressure to catch the lock. If left untreated, it could result in the robot falling off the hook. We determined the root of this problem was that the locking mechanism on the right gear was shorter than the left. To fix this, we trimmed a few millimeters off the piece that provides tension on the left gear to match that of the right gear.

    Latch attached to polycarbonate brackets.

    Next Steps

    We will need to perform various tests on the latch to determine if the height is correct, if the latch can support the robot, ease of latching and unlatching, and consistency. We plan to test our robot this Saturday at the DISD STEM Expo, which will provide an opportunity to practice latching.

    Fixing Mineral Dropper Components

    02 Feb 2019
    Fixing Mineral Dropper Components By Jose and Evan

    Task: Fix any issues with the mineral dropper

    At the STEM expo we saw a clear issue with the mineral dropper: it is very poorly geared and doesn't deposit minerals well. A quick look at the gear configuration revealed that the gears were attached in a poor manner such that there was a lot of gear skippage. To remedy this, we attached a gear-box to the dropper to keep the gears interlocked.

    The way the mineral dropper works is by having a wire attached to the shaft that turns the release be pushed when the robot hits the lander. The wire is attached with a portion of a gear custom cut for the job.

    We need to upgrade to a thicker wire for more reliable shaft rotations. After doing so we needed a different wire holder and we chose a REV wheel. After cutting it and drilling bigger holes to accommodate the new wire we needed to attach it all to the shaft for the mineral release.

    Next Steps

    We need to finish bending the wire and test its ability to open the mineral release when contacting the lander.

    Meeting Log

    02 Feb 2019
    Meeting Log February 02, 2019 By Charlotte, Kenna, Ethan, Bhanaviya, Jose, Ben, Evan, and Janavi

    Meeting Log February 02, 2019

    Bhanaviya working on the blog

    Today's Meet Objectives

    The DISD STEM Expo took place today. While incredibly rewarding, the experience was tiring, so only a few members made it back for the meeting that took place afterwards. This log will include our objectives and accomplishments from the meetings we held throughout the week after school which include build changes to the depositor, some calculations for analysis various parts of the robot, and preparation for our pit setup at regionals.

    Today's Meet Log

    • Design posters
    • To display this year's accomplishments, we plan to create posters for the pit. The research poster will include a few projects we have done this year including our friction tests, materials test, and torque/gear ratios calculations as well as calculations for the elbow, wheels, and other vital parts on our robot. We will also have outreach posters and a timeline of our robot design. Janavi has been designing these posters based on the journal entries we have made about the tests.

      Ethan and the research poster
    • Design passively-sorting deposit
    • Evan has been working on a mechanical depositor for minerals in the lander. We want to utilize a mechanical part to remove burden from the driver, who also has to worry about alignment with the lander as well as control of the arm. This also removes burden from our coders, who have many goals to accomplish before we will be ready for regionals. Once the initial depositor was built, we did some tests during the STEM Expo, as we had a field set up outside the MXP to show off our robots to all of the kids coming through the booth. The depositor, unfortunately, did not perform very well. The biggest problem stemmed from the elastics that enabled it to be entirely mechanical. If the elastics are too tight, it would not bend enough to let the minerals fall out of the little trap door. If the elastics are too loose, the trap door won't be sturdy enough to hold the minerals in before depositing. We are looking for other options now, and we are most likely going to opt for replacing the elastics with a driver-controlled servo. This will put more of a burden on the drivers unless the coders find the time to program sensors for depositing. Either way, we need more driving practice which we hope to accomplish in the next two weeks before regionals.

    Today's Work Log

    Team MembersTaskStart TimeDuration
    CharlotteTask4:004
    KennaTask4:004
    EthanTask4:004
    BhanaviyaTask4:004
    BenTask4:004
    JoseTask4:004
    EvanTask4:004
    JanaviTask4:004

    Code Updates

    02 Feb 2019
    Code Updates By Abhi

    Task: DISD STEM EXPO

    The picture above is a representation of our work today. After making sure all the manual drive controls were working, Karina found the positions she preferred for intake, deposit, and latch. Taking these encoder values from telemetry, we created new methods for the robot to run to those positions. As a result, the robot was very functional. We could latch onto the lander in 10 seconds (a much faster endgame than we had ever done).

    Next Steps

    The code is still a little messy so we will have to do further testing before any competition.

    Drive Testing at STEM Expo

    02 Feb 2019
    Drive Testing at STEM Expo By Ben and Abhi

    Task: Test robot performance at the STEM Expo to inspire younger kids and practice

    An FLL team gathered around Iron Reign’s robot

    We had the privilege of being a vendor and representing SEM at DISD's STEM Expo this weekend. Thousands of people cycled throughout our area during the day, so we had the opportunity to show off our robot to many people. Some of these people include FLL and VEX IQ teams, along with Best Buy volunteers. Our goal was to get kids excited about STEM and robotics, along with getting some robot practice in. We will be trying out the new latch, new presets, and prospective drivers.

    As soon as we started driving, we noticed a few issues. One of these being the belt drive repeatedly slipping. This may be a result of the belt loosening, the drive gear accelerating too quickly, heavy intake arm, or the preset causes the drive gear to keep operating, even when the arm is fully extended. We also struggled with keeping the intake box out of the way and prevent it from twisting around the “corn on the cob” intake. We will solve this by fastening the rubber band that was supposed to keep it in place. This; however, wasn’t our only intake problem. Once 2 minerals had been grabbed, they would usually fall out the intake box after lifting the arm. The intake box would turn vertical, making it easier for the minerals to shift out. This was especially an issue when trying to deposit the minerals, we would make several sudden movements, causing the arm to swing and minerals to fall out. A possible solution to this is adding a barrier between the floor of the intake box and the top of the box. This would allow for more freedom, as we could move faster without worry of losing minerals.

    Demonstrating intake arm for FLL kids

    Next Steps

    It will take a lot more practice to master latching and collecting, and even general driving. We will need to code better presets and either design a better collection box, or fix the existing one. Drivers will also have to be selected, which we will do by running several trials for each member and determining who is best at latching, scoring, and control.

    Latch 2.0 - Forged in Flame

    06 Feb 2019
    Latch 2.0 - Forged in Flame By Evan

    Task: Design a new latch for hanging

    Our latching system is too complicated to use quickly; it requires too much reliance on driver control and becomes jammed. So, we forged an iron hook to replace it. We started by taking an 8mm iron rod and placing it into the forge that we have, heating it up and bending it into shape over the course of an hour. We made a wire model for the hook, and then slowly and patiently formed the hook out of the rod. Then, to make an easy-to-drill connection point, we heated a section up until it was white hot and then used a punch to create a flat part that we then drilled into afterward.

    To create a mount, we took a length of steel and used an oxy-acetylene torch to heat up the areas we wanted to bend. Once this was done, we went about attaching the hook to the mount. We did this by finding the center of the mount, drilling it out, and pushing a bolt through it, surrounding all sides with washers. We then mounted a servo next to the hook and attached it with a piece of wire, which was secured to the hook by two notches cut out of either side of the tail of the hook. Later, after finding the wire to be too flimsy, we attached the two together with a strip of polycarb. It works well, allowing us to mount and dismount much easier than we would have hoped for with our last latch. While the last latch was purely passive and required no electrical components, this one gives us much more control in how we latch and delatch.

    Meeting Log

    09 Feb 2019
    Meeting Log By Charlotte, Evan, Ethan, Kenna, Karina, Abhi, Arjun, Ben, Jose, Janavi, and Bhanaviya
    Meeting Log February 09, 2019

    Today's Meet Objectives

    Today we participated at a scrimmage held at Woodrow Wilson High School. This was a fantastic opportunity to get some driver practice in real, timed games and adjust for issues.

    Today's Meet Log

    • Hook implementation
    • Since we have made a few changes to the robot, such as adding a servo to our previously mechanical output mechanism, we evaluated how well they worked. We wired the servo and fixed the wiring from the arm that got tangled in the motor using a wire router to take control of this issue. As well, we began auto tuning for the new hook.

      Fire from the forge from crafting the hook

      The burning metal being bent into our hook
    • Driver practice
    • When we weren't making changes on the robot, we were practicing driving. Some difficulties we faced included getting stuck in the crater because of our arm and the disconnection of our hook from the servo horn due to our attachment with zipties. When we got back to the house, we began changes to fix these issues by creating a replacement for the zipties out of polycarb and working on presets to improve the balance of the robot.

    Autonomous Non-Blocking State Machines

    09 Feb 2019
    Autonomous Non-Blocking State Machines By Arjun

    Task: Design a state machine class to make autonomous easier

    In the past our autonomous routines were tedious and difficult to change. Adding one step to the beginning of an autonomous would require changing the indexes of every single step afterwards, which could take a long time depending on the size of the routine. In addition, simple typos could go undetected, and cause lots of problems. Finally, there was so much repetitive code, making our routines over 400 lines long.

    In order to remedy this, we decided to create a state machine class that takes care of the repetitive parts of our autonomous code. We created a StateMachine class, which allows us to build autonomous routines as sequences of "states", or individual steps. This new state machine system makes autonomous routines much easier to code and tune, as well as removing the possibility for small bugs. We also were able to shorten our code by converting it to the new system, reducing each routine from over 400 lines to approximately 30 lines.

    Internally, StateMachine uses instances of the functional interface State (or some of its subclasses, SingleState for states that only need to be run once, TimedState, for states that are run on a timer, or MineralState, for states that do different things depending on the sampling order). Using a functional interface lets us use lambdas, which further reduce the length of our code. When it is executed, the state machine takes the current state and runs it. If the state is finished, the current state index (stored in a class called Stage) is incremented, and a state switch action is run, which stops all motors.

    Here is an autonomous routine which has been converted to the new system:

    private StateMachine auto_depotSample = getStateMachine(autoStage)
                .addNestedStateMachine(auto_setup) //common states to all autonomous
                .addMineralState(mineralStateProvider, //turn to mineral, depending on mineral
                        () -> robot.rotateIMU(39, TURN_TIME), //turn left
                        () -> true, //don't turn if mineral is in the middle
                        () -> robot.rotateIMU(321, TURN_TIME)) //turn right
                .addMineralState(mineralStateProvider, //move to mineral
                        () -> robot.driveForward(true, .604, DRIVE_POWER), //move more on the sides
                        () -> robot.driveForward(true, .47, DRIVE_POWER), //move less in the middle
                        () -> robot.driveForward(true, .604, DRIVE_POWER))
                .addMineralState(mineralStateProvider, //turn to depot
                        () -> robot.rotateIMU(345, TURN_TIME),
                        () -> true,
                        () -> robot.rotateIMU(15, TURN_TIME))
                .addMineralState(mineralStateProvider, //move to depot
                        () -> robot.driveForward(true, .880, DRIVE_POWER),
                        () -> robot.driveForward(true, .762, DRIVE_POWER),
                        () -> robot.driveForward(true, .890, DRIVE_POWER))
                .addTimedState(4, //turn on intake for 4 seconds
                        () -> robot.collector.eject(),
                        () -> robot.collector.stopIntake())
                .build();
    

    Bigwheel Model

    10 Feb 2019
    Bigwheel Model By Justin

    Task: Design and update the Bigwheel Model

    We are updating our bigwheel model to represent our current robot. We had a model of just the chassis from the chassis study, so we are currently adding all of the changes we made throughout the season.

    Completed Changes

  • Added current intake
  • Added sorting system
  • Modeled the linear slide lift
  • Modeled superman arm
  • Future Changes

    The lift has been changed recently so the model needs to be updated. The main problem with this is that the new slides are not standard parts, so there are no accurate CAD files. This means we have to custom model our new slides to maintain accuracy with our model. The motor placement on the chassis needs to be fixed because we the measurements were estimates. There are many small 3d printed parts that need to be added to the robot, as well as our new ratchet latch.

    Next Steps

    We need to work on future changes and get our model up to date with our robot so we can start conceptualizing new subsystems.

    BigWheel Upgrades

    10 Feb 2019
    BigWheel Upgrades By Evan

    Task: Fix some issues on BigWheel before the build freeze

    We made more secure way of activating our hook, so we switched our piece of wire attaching the servo to the hook with a much stronger and less likely to bend strip of polycarb, which greatly improved the reliability of the hook.

    As well, we limited the back and forth motion of our slides at their attaching points. I achieved this by inserting a small piece of drywall sandpaper in between the stages of the slides. Hopefully, the added friction will create a stronger hold between the stages fo the slide.

    Next, we ground down a bolt to more securely attach the servo horn to the servo since it’s a REV hex shaft to servo adapter and the bolts we had didn’t fit inside well enough. Once that was done, we changed the ratio between the belt drive pulleys, going from a 1:1 (36 teeth to 36 teeth) to a 5:3 (60 teeth to 36 teeth) by increasing the size of the pulley at the motor. This should increase the quickness of our lift and hopefully let us squeeze a few more mineral pick up and depositing cycles in.

    Next Steps

    It's time to turn the robot over to the coders and drivers, so there won't be many changes after this,

    Pulley Spacers

    13 Feb 2019
    Pulley Spacers By Ethan

    Task: Design and implement pulley spacers to prevent belt interference

    We had an issue where the belts that allowed our arm to slide upward were misaligned, resulting in the belts frequently slipping. We narrowed the slippage down to a single point, at this pulley.

    We had to create a new spacer to keep that section of the belt inline with the rest. As usual, we took measurements and replicated them in Creo. It had to be about 3.5 centimeters long, the same width of the metal plate. The depth of the indentation to attach to the linear slide is about 0.75 centimeters and the diameter of the M3 holes 3 millimeters. With these measurements, we designed the piece and printed it in 60% infill nylon, strong enough to withstand the weight of the linear slides. This is what version one looks like:

    However, this version's holes were too far down, allowing the toothed sections of the belts to interact and jam. So, we decreased the height of the bottom pulley-holes so that the middle section of the belt would slider higher up, preventing interference. This resulted in the final version seen at the top of the article.

    Next Steps

    We still have to fully test these spacers, but we can't do a full test until we fix the gears supporting the elbows, which will be detailed in another post.

    Control Mapping

    14 Feb 2019
    Control Mapping By Bhanaviya, Abhi, Ben, and Karina

    Task: Map and test controls

    With regionals being a week away, the robot needs to be in drive testing phase. So, we started out by mapping out controls as depicted above.

    Upon testing the controls, we realized that when the robot went into Superman-mode, it collapsed due to the lopsided structure of the base since the presets were not as accurate as they could be. The robot had trouble trying to find the right position when attempting to deposit and intake minerals.

    After we found a preset for the intake mechanism, we had to test it out to ensure that the arm extended far enough to sample. Our second task was ensuring that the robot could go into superman while still moving forward. To do this, we had to find the position which allowed the smaller wheel at the base of the robot to move forward while the robot was in motion.

    Next Steps

    We plan to revisit the robot's balancing issue in the next meet and find the accurate presets to fix the problem.

    Robot Issues - Gear Grinding

    14 Feb 2019
    Robot Issues - Gear Grinding By Ethan

    Task: Analyze the issues with the elbow arm of our robot

    The elbow arm of the robot is what allows us to rotate the arm of our robot - the linear slides what hold the intake. Recently, while doing some drive testing, we found that the elbow wasn't acting as it should. When we took a closer look at it, we realized that the metal gears had started to destroy each other.

    Before installing new gears and just having the same thing happen again, we wanted to analyze why this was happening. Remembering that pressure is equal to force divided by area, we noticed that the gears weren't fully interlocking, reducing the area for force to act on. And, the teeth of these gears are minuscule things, so the pressure on each one is immense, even more so with the full torque of the extended linear slide behind them. And, while these aluminum gears may not bend that well, under these immense pressures, they sure can break since hardness and brittleness trade off. And, even then, with high pressure and frequent use, they can still easily grind down, resulting in this scene:

    But, that's not all. When we tried to run the elbow, we realized that the motor shaft themselves were out of alignment. This is hard to capture in a single picture, but this manifested itself as a sort of wobble when the motor was repeatedly run. With full, non-ground gears, this would probably be fine, but the moving shaft reduced the area of interaction between gears, contributing to the gear-dust all over our robot. Finally, as the gears were reduced to almost nothing, this wobble made it so the gears wouldn't interact at all.

    The solution to this is complicated, as we only have one set of spare gears. If we had more, we would be able to replace them as needed, but currently, we couldn't guarantee that they wouldn't give out at regionals. First, we need to replace the motors, as any wobbliness reduces the area of interaction between gears, which increases the pressure on the teeth accordingly. Then, we need to create gearkeepers to hold the gears to maximum contact. We've created gearkeepers before under the same circumstances for the arm that lifts our robot up (we had a similar gear-stripping scenario), but this may not be enough alone. First, we use metal gears on the elbow, which have smaller teeth area-wise than the plastic ones elsewhere. Plus, the gearkeeper design below doesn't compensate for any later wobbliness that may occur and may wear out itself, as its essentially a nylon strap between two shafts. So, we need to design a gearkeeper that doesn't only attach from shaft to shaft but shaft-shaft-robot, as this would prevent the pesky wobbliness and decrease tooth pressure as much as possible.

    Next Steps

    We've forwarded this analysis to the modeling team, who will produce a print later this week so that we can bring our robot back up to snuff.

    Research Poster

    15 Feb 2019
    Research Poster By Janavi and Ethan

    Task:Create a Poster amalgamating all of our math

    Throughout this season our team has completed various calculations from the torque of our robotics arm, to the speed of the wheels. Since these calculations are spread throughout our journal, we decided to amalgamate them into a single poster that is easy for us to refer to. In this poster we have calculations for

    • Torque/ Gear Ratios
      • Intake Arm Torque
        • (Robot Manual)
      • Wheel Gear Ratios and Speed Calculations
        • (E-132, Intake Speed )
        • (E-52, Linear Slide Lift)
      • Elbow Torque and Gear Ratios
        • (Robot Manual)
      • Superman Torque and Gear Ratios
        • (E-95,Superman Calculations)
      • Superman Gear Material Calculations
        • (E-95,Superman Calculations)
    • Friction Tests
      • (E-59,Friction Coefficient and Energy)
      • Coefficient of Friction of Silicone Intake
        • (E-59,Friction Coefficient and Energy)
    • Material Testing
      • Linear Deformities with Nylon
        • (E-62,Linear Nylon Strength Test)
      • Linear Deformities with ABS
      • Linear Deformities with PLA

    Elbow Rebuild

    16 Feb 2019
    Elbow Rebuild By Ethan, Jose, Karina, and Ben

    Task: Rebuild the elbow after total gear annihilation

    In a previous post, we detailed the extent to which we had stripped our gears - they were missing teeth in several places and the black anodization layer had completely stripped away. So, we had to replace them. The first order of action was to design gearkeepers for them. We've designed gearkeepers before, for the Superman arm, but these have different requirements. They must connect the gears on both elbow driver and slave, but also must mount to the robot itself to prevent the motor shaft from wobbling, which had previously caused major issues. We came up with this design, printing it out in 60% infill nylon.

    The next thing to do was replace the actual gears. To do so, we had to dismantle the entire elbow and replace the gears and shaft collars. This alone took about two hours per side. We added the new gears, ensuring that they were in alignment, and printed a circular part to mount the top of the gears to the linear slide so that the entire system would rotate when the gears were turned. Then, we remounted the belts and aligned them. After, we attached the new gearkeepers, ensuring that the gears interlocked perfectly.

    Next Steps

    So far, we haven't experienced issues with the new elbow, but we're getting our hands on a new set of gears to be safe. We expect this system to continue to work for the Regional tournament, and are performing drive practice to ensure this.

    Meeting Log

    16 Feb 2019
    Meeting Log February 16, 2019 By Ethan, Janavi, Kenna, Justin, Bhanaviya, Ben, Abhi, and Arjun

    Meeting Log February 16, 2019

    So, its the last week before Regionals, so we have a lot of work to do, from robot work to presentation.

  • Linear slide arm repairs
  • We started off the day with working on the elbow for the arm. For the past week, we've been dealing with the gears on the elbow stripping. So, we replaced the gears on both sides, threadlocked the motors so that the shafts wouldn't wobble, and installed upgraded triangular gearkeepers so that that that that the gears would fully interlock, preventing the gears stripping. This process took about 90 minutes per side, taking up time we needed for autonomous. But, our build freeze has persisted - we haven't added anything else. In the same vein, Justin worked on the 3D model, integrating the corncob into the design.

  • Blog updates
  • We're also trying to finalize our journal, so we're finishing up posts. Janavi was working on a post about the research poster; Arjun was working on computer vision posts; Abhi was updating code posts. Ethan was going through and retagging posts so that the table of contents is accurate, fixing the posters we're printing, and updating presentation photos. Janavi and Kenna were also working on the handouts for Regionals.

  • Driver practice
  • Since Karina isn't here, we're letting Ben practice driving. We're consistently getting 2-3 cycles in the lander with him as opposed to Karina's 4-5, but practice will help. He's not all there yet, he crashed the robot somehow, but its a start. We're also working on autonomous delatch and tuning as he drives using telemetry data.

    Today's Work Log

    Team MembersTaskStart TimeDuration
    AllPlanning Meeting2:10pm.25
    EthanEdit blog posts and update posters2:004
    EthanFix robot gears12:002
    Justin3D Model2:004
    BhanaviyaComputer Setup2:001
    KennaDesign handouts2:004
    JanaviBlog posts2:004
    BenReplace gears2:004
    AbhiRobot tuning2:004
    ArjunControl Award2:004

    Latch Designs - A Retrospective

    19 Feb 2019
    Latch Designs - A Retrospective By Ethan

    Task: Analyze past successes and failures in our latching system

    Version 1

    The first version of the latch worked decently. We started out with the idea of a one-way, passive latch. This idea involved mounting smaller bearings and gears between them, with a spring-like nylon piece that moved only when downward pressure was placed upon the gears. This design was only fully realized before the Wylie Qualifying tournament, and only tested the night before. We found that the bearings popped out under pressure necessitating a reset after every match and meaning that we could only latch once per match. We opted for the endgame latch, as it was more reliable. But, this cut the amount of points we could receive immensely. After the tournament, we decided to do a full redesign.

    Version 2

    The second version's changes were simple. We redesigned the nylon "spring" and made it thicker and more prominent. This made it so the latching gears were more firm than before, which in turn allowed more weight to be put on them. However, the issue with the gears was still present; as the load on the latch increased, the nylon would bend more and more, allowing the bearings to fall out so that the latch would jam in place. This version was quickly scrapped.

    Version 3

    At this point, we were sick of the bearings popping out. So, we widened the holes immensely to fit larger bearings which in turn had larger holes allowing for bolts to be run through. This was overkill, but it ensured that no slippage would occur during normal robot usage. Again, we also thickened the nylon "springs" so that the gears would stay in place without significant upward force.

    We realized, that while technically impressive, the latch as we knew it had to go. It worked, but it was too time-costly to justify using, as the driver had to precisely line up the bot next to the lander to use it, taking about 20 seconds. In addition, it was difficult to code as it required several intricate simultaneous robot operations: the lift needed to descend at the exact same moment Superman needed to rotate, all while the elbow rotated the robot 90 degrees. In summary, it was an overly burdensome task. So, we threw away all that work, these past two months of labor in favor of a simpler option.

    Version 4 - the Hook

    We decided that it was time to go back to the drawing board. In time periods, it was approximately a jump from the current era to the Iron Age. So, we designed appropriately. We designed a stainless steel hook, first making one out of prototyping wire. Then, we heated up the forge, adding plenty of coke, and set to work. We chose a stainless steel rod, 8mm in diameter and warmed it to red hot, beating out the initial design. We let the initial rod air cool so that it would be soft enough to drill through, creating the mounting point for the robot. Then, we reheated it to its critical point (when it loses its magnetic properties) and quickly quenched it to reharden it. But, simply quenching it makes the steel too brittle to use in competition, so we finished up the hook by tempering it, using an oxy-acetyline torch on it until the surface became matte. Finally, we had the hook seen above. After all that work, we'd gone with the simplest option because sometimes, it is the best.

    Off-Schedule Meeting Log - Week before Regionals

    19 Feb 2019
    Off-Schedule Meeting Log - Week before Regionals February 19, 2019 By Ethan, Evan, Jose, Charlotte, Karina, and Justin

    Meeting Log February 19, 2019

    It's the week before Regionals, so the house is a flurry of activity - all hands are on deck for every possible facet of the team.

    Monday

    The week started out with three projects. Justin worked on the robot model, taking measurements for the intake and putting the assembly together for six hours, completing the model. Just as he left, Ethan started the editorial review. The goal of the review was to develop a more cohesive journal, a journal that could easily be flipped through. The list of tasks created from this session are below. In addition to this, Ethan worked on making an LED hat for the tournament.

    Editorial Review Listing

    • Unbury $150k grant post, make title "major grant to fund replacement of vehicle" + fix receiving + remove last sentence
    • Add Ben, Jose headshots to organization slide
    • Replace townview qualifier photo
    • Add Microsoft section to stem expo post
    • Add motivate tag, remove connect from drive testing at stem expo
    • Remove all motivate from connect table of contents
    • Bold totals in the iron reign grants post
    • Fix pulley spacers image
    • Fix broken image last meetinglog
    • Remove connect posts from motivate table
    • Add to stem spark post
    • Post summary of motivate and connect 2x
    • Add letters to presentation tabs to indicate award
    • Change decisions to priorities in presentation
    • Remove center photo collector system in presentation
    • Delete slide 38 with wordcloud in presentation
    • Remove what we need help with slide
    • Make text bigger on Connect summary slide, add totals in title in red
    • Update journal summary
    • Make a latch retrospective post
    • Post about rebuilding elbow
    • Fix Woodrow Code blog post
    • Add articulation and drive enhancement posts
    • Make post about bearings in linear slide

    Tuesday

    • Battery Mount
    • Evan worked on a battery mount for the robot. While drive testing, we had found that the battery and camera would fall out under extreme conditions, so we decided to create a new one. Evan cut battery "corners" out of polycarb and mounted them together, ensuring that the battery would stay static in every match.
    • Editorial Review 2
    • Ethan wrote new posts on the history of the latch, the rebuilding of the elbow, connect and motivate summaries, and fixed the above issues from the editorial review. In addition, we rewrote the summary, as we found that it would be heavily considered in Regional judging. Charlotte uploaded old meeting logs.
    • Driver Practice
    • Karina, Justin, and Jose practiced driving the robot. We discovered that the robot latches extremely well with the new hook and that the autonomous delatch works. We also tested the articulation, or poses, of our robot. The only issue that popped up was when the robot moves into deposit mode, it tips toward the side with linear slides, but Karina discovered that if she drives the robot forward at the same time, she can ram the robot into the correct position. Karina got to 4-5 cycles per match with the new updates. This practice was a way to test the strength of our robt - we've had our robot break under stressful situations previously - and this time nothing broke. The biggest issue was that a servo wire on our intake came unplugged, but even with that, our robot still worked.
    • Model Articulation
    • Justin took the last measurements for the model of our robot, then started to take pictures of the articulations we made in the code.
    • Hat
    • We finished the light-up LED hat.

    Wednesday

    • Driver Practice and Autonomous
    • Karina and Abhi worked on the robot. Karina gave advice for improving our robot's articulations to Abhi, who proceeded to fix the code for better driver practice. Abhi also worked on delatch in autonomous, reversing the autonomous driver enhancement code and taking data from Karina's testing. We discovered one new issue with our robot, that the gearkeepers for Superman pop out of alignment after about 100 uses. All we need to do is realign them, and they'll be back to full functionality.
    • Control Award
    • Arjun continued writing the Control Award submission, adding in the new articulations and poses of the driver enhancements. Janavi created state diagrams for the code to add to the submission.

    Big Wheel Articulations

    20 Feb 2019
    Big Wheel Articulations By Abhi

    Task: Summary of all Big Wheel movements

    In our motion, our robot shifts multiple major subsystems (the elbow and Superman) that make it difficult to keep the robot from tipping. Therefore, through driver practice, we determined the 5 major deployment modes that would make it easier for the driver to transition from mode to mode. Each articulation is necessary to maintain the robot's center of gravity as its mode of operation shifts.

    The position seen above is called "safe drive". During normal match play, our drivers can go to this position to navigate the field quickly and with the arm out of the way.

    When the driver control period starts, we normally navigate to the crater then enter the intake position shown above. From this position, we can safely pick up minerals from the crater.

    From the intake position, the robot goes to safe drive to fix the weight balance then goes to the deposit position shown above. The arm can still extend upwards above the lander and our automatic sorter can place the minerals appropriately.

    During the end game, we enter a latchable position where our hook can easily slide into the latch. After hooked on, our robot can slightly lift itself off the ground to hook.

    At the beginning of the match, we can completely close the arm and superman to fit in sizing cube and latch on the lander.

    As you can see, there is a lot of articulations that need to work together during the course of the match. By putting this info in a state machine, we can easily toggle between articulations. Refer to our code snippets for more details.

    Next Steps

    At this point, we have 4 cycles in 1 minute 30 seconds. By adding some upgrades to the articulations using our new distance sensors, we hope to speed this up even more.

    Up-to-Date Bigwheel Model

    21 Feb 2019
    Up-to-Date Bigwheel Model By Justin

    Task: Finish the Bigwheel model

    Updating the Bigwheel model to the robot’s current configuration was a challenge. The new linear slides are not standard parts, so we had to model them from scratch. There was some cleaning up that was needed on the drivetrain of the model. This was mainly attaching floating motors to motor mounts and axles to bearings. These were mainly cosmetic changes, but they help define the purpose of the different parts of the drivetrain. We also updated the intake assembly to our current ice cube tray intake. The structure of the intake was easy to model but the ice cube tray gave us some trouble with its unique shape and pattern. The ratchet latching system was a failure, so a new hook model was needed. The main issue with this was that we custom forged our new hook, so there was some difficulty in getting the model to accurately represent the capabilities of the hook. Another challenge was the mineral storage system. This is made from polycarb pieces and has many unique pieces, so arranging the pieces to accurately show the flow of minerals was difficult.

    In addition to updating the model, we also learned how to show the different movements of the robot with the model. Mechanical constraints were added to allow certain parts to slide or rotate. The one problem we had with this was that there were no limitations to how far something could slide or rotate, so many parts of the model would disconnect and be left floating. After some research, a solution was found. Zero points were created for each moving part and minimum and maximum movement limits were added. Some parts that now can move on the robot are the wheels, superman arm, hook, and linear slides. This allows us to not only show the movement of the robot, but also the limitations of its parts, which can help us visualize new solutions to our remaining problems.

    Next Steps

    Our next step is to wait for more build changes, so we can keep updating the model. Another addition we might make is making stress maps of the robot in different configurations to see where parts might fail. This has been an ongoing challenge of keeping the model accurate when the robot gets updated or rebuilt, and now we finally have a finished model and ready robot for regionals.

    Wylie Regionals 2019

    23 Feb 2019
    Wylie Regionals 2019 By Ethan, Charlotte, Evan, Kenna, Karina, Abhi, Arjun, Bhanaviya, Ben, Justin, Jose, and Janavi

    Task: Compete at the North Texas Regional Tournament

    Preparation

    Unlike other tournaments, we started packing before morning. We packed as if we were going out of state, bringing a bandsaw, all-new charging box, every replacement part imaginable, and a printer which would ultimately come in handy later. We relied on a packing list created by Janavi, detailed below.

    Because of this, we got to Wylie on time, turned in our notebooks, had the team rosters printed out, and were able to start right away.

    Inspection

    Breaking our all-season streak, we failed our first inspection, cited for our unruly cable management. So, we made a hasty retreat back to the pits and zip-tied the cables together and rethreaded our intake servo wires through the cable guards, then brought it back to inspection. We passed, but we were warned about possible size issues with the team marker. But, looking at RG02, we realized that it wasn't a major concern.

    Judging

    The main issue this time was not speed or knowledge but simple enthusiasm - it just felt off and a little uncharismatic. However, we received three separate pit visits for what we believer were Motivate, Connect, and Innovate. In particular, we were able to get the Motivate judges out to see the MXP and talk about expanding the program while keeping it sustainable. The Innovate judges focused on the Superman mechanism, as it's fairly unique, and we fielded questions about the design process. In Connect, we also talked about the MXP and its $150k grant largely because of our efforts.

    Robot Game

    Match 1(Q3)
    For the first time in the Rover Ruckus season, we won a game. Both us and Corem Deo had almost perfect auto and Corem Deo got plenty of mineral cycles into the lander. Unfortunately, BigWheel tipped over during end game so we couldn't latch. However it did not affect the match results significantly.

    Match 2(Q9)
    Unfortunately, we lost. Both our autos failed in some way and BigWheel ended autonomous with one wheel in the crater, wasting us 30 seconds during teleop just to get out. Also, most of our mineral cycles failed and we couldn't latch during end game and had to partially park in the crater.

    Match 3(Q15)
    To our surprise, we won. We were against Elmer and Elsie, who were seeded 1st before this match. We had a perfect auto this match while the other side had some issues with their's. During teleop we had some pretty successful mineral cycles and both robots hung onto the lander with the other side only having one hang and one robot partially parked.

    Match 4(Q26)
    We didn't expect to pull a third win but we did. Our auto also failed a little again but it didn't cost us any time during teleop like last time. We also had some very successful mineral cycles this time, but when attempting to hang BigWheel tipped when going into its preset position for hanging, even so, it didn't affect match results.

    Match 5(Q33)
    Once again we didn't expect a fourth win, but it happened. Before this match we wanted to test our autonomous with the Lamar Vikings to check if the robots would collide during autonomous, but due to mechanical issues on their side this was delayed and we had to queue without doing so. Indeed, our robots collided in the depot causing us to miss out on 75 points. During teleop one robot on the other side disconnected but on our side two of our servos disconnected, the mineral gate and the hook, so we couldn't score minerals or latch so we played some minor defense and partially parked in the crater.

    Match 6(Q36)
    Our luck ran out in this match as we lost. This was a very tight match against TechicBots, the first seed. Both sides ended autonomous 150-150. The mineral game was also tight, the lead switched between both sides many times as minerals were scored but the other side took the lead once BigWheel tipped over. We couldn't hang once again and both our opponents kept scoring, leading to our loss.

    For the first time this season, we were selected for Semis as the first pick of the third alliance.

    Match 1
    We lost. Our autonomous failed as well as teleop while the other side continuously scored minerals into the lander. And yet again we couldn't hang due to tipping.

    Match 2
    We lost again. We began a timeout due to technical issues with the phones and ultimately had to give up and leave BigWheel to sit idle on the field for two minutes and thirty seconds while the Lamar Vikings attempted to win without us.

    Awards Ceremony

    By the time the ceremony started, most of us had been up for 13+ hours, so we were all a little under the weather. We first received the Motivate award! It's always nice to have your efforts recognized and this was no exception. The Motivate award means a lot to us - it's what we got last year at Worlds. Then, we heard, "3rd place Inspire Award goes to...team 6832 Iron Reign!" And the SEM section went wild. We advanced!

    Next Steps

    The post-mortem will be in a later post. See y'all at Worlds!

    Meeting Log

    02 Mar 2019
    Meeting Log March 02, 2019 By Charlotte, Ethan, Evan, Justin, Karina, Janavi, Jose, Ben, Abhi, and Bhanaviya

    Meeting Log March 02, 2019

    Today's Meet Objectives

    Since we qualified for worlds, we are using today as an opportunity to start our Road to Worlds, as the discussions we have today will shape our progress for the next 8 weeks. We plan to start today with a post-mortem discussion regarding our previous competition, and then we will proceed to evaluate our strengths and shortcomings throughout the post-mortem. These lessons will shape our Road to Worlds document, a guide that outlines our major objectives within every subteam of Iron Reign.

    Today's Work Log

    • 15 minute cleaning/organization session
    • Planning session
    • Post-mortem
    • A post-mortem follows every major competition we attend, so that we can put into words and learn from our successes and failures in a constructive environment. We spent most of our meeting today reflecting on last week's regional competition with topics including robot performance, pit conduct, and preparation, and our detailed post-mortem can be found at (E-118, North Texas Regional Postmortem).
      Skype call with Jayesh
    • Presentation post-mortem
    • We discussed (on a Skype call) our presentation with one of our alumni, Jayesh, who gave us guidance and feedback based on a video we took of our presentation at regionals so that we can improve our presentation in the coming weeks.
    • Road to Worlds
    • Following our post-mortem discussion, we booted up our road to worlds doc and began our discussion as to how we will accomplish everything we need to in 8 weeks. Our Road to Worlds document will help increase focus and productivity so we don't lag behind in our progess. See our Road to Worlds at (E-119, Road to Worlds 2019).
    • Further planning
    • If we are going to accomplish what we set out to, it is going to require immense commitment and higher-level planning. We need to decide how we are going to spend spring break, and with a Doodle poll that indicates participation for the next two weeks, we can plan accordingly. We may not have many builders, so hopefully we can do drive practice.
    Team MembersTaskStart TimeDuration
    AllOrganization and Planning2:00pm.33
    AllPost-mortem & Road to Worlds2:20pm3.66

    North Texas Regional Postmortem

    02 Mar 2019
    North Texas Regional Postmortem By Ethan, Charlotte, Abhi, Janavi, Evan, Ben, Jose, Justin, Karina, Bhanaviya, and Arjun

    Task: Analyze what went wrong at North Texas Regionals

    We performed really well at Regionals; we actually won our first game of the season and ended 4-2 and were selected for an alliance. But, we still didn't do everything right. We were on the verge of not being chosen for Inspire, and we can't risk the same at Worlds.

    Problems:

    The Robot & Code

    • Auto & Setup
    • To begin, we had issues with preparing our robot, particularly that we didn't have enough practice setting it up for autonomous. As well, we didn't have a way to verify that the setup was correct.
    • Initial Code
    • We had high pings at the tournament, so we plan to reduce our telemetry to two lines. As well, our control scheme was too complicated, and we need to simplify it.
    • TeleOp
    • The robot kept tipping because of the complicated management of three systems. When in motion, angular momentum is conserved, making it hard to manage the robot and keep it upright. As well, we couldn't see the minerals in the intake.
    • Build
    • Again, we couldn't see the minerals in the intake. As well, the carbon fiber intake rod broke along with the battery and phone mount. These all necessitate redesigns. Finally, our wiring was out of hand.

    Pit Interviews

    • MXP was not set up for Motivate judges
    • Missed groups of judges looking for our robot several times
    • Didn't let judges leave when they wanted to - kept on talking

    Pre-tournament Preparation

    • Presentation
    • We hadn't practiced the robot demos; our IMU demo worked but the latch demo didn't. As well, we hadn't done a runthrough before handing out items from our presentation box. So, more thorough presentation practice is needed.
    • Engineering Journal
    • The team as a whole needs to focus on getting their blog posts in on time. It's hard to prepare the journal when not all posts needed for it are present. As well, we forgot to print the cover sheet for the control award.

    Pit Setup & Conduct

    • Ugly Pit
    • Our signs were disorganized and not easy to view, and our pit in general was a mess. We didn't have handouts, and our activities were off-topic.
    • MXP Setup
    • Even though the MXP is a centerpiece of our presentation, we left it wrecked after we unloaded all of our materials and making it too dirty for a tour.
    • Team Members
    • A few team members were not actively participating at the tournament, giving a bad impression for the judges.

    Road to Worlds Document

    02 Mar 2019
    Road to Worlds Document By Ethan, Charlotte, Evan, Karina, Janavi, Jose, Ben, Justin, Arjun, Abhi, and Bhanaviya

    Task: Consider what we need to do in the coming months

    ROAD TO WORLDS - What we need to do

     

    OVERALL:

    • New social media manager (Janavi/Ben) and photographer (Ethan, Paul, and Charlotte)

     

    ENGINEERING JOURNAL: - Charlotte, Ethan, & all freshmen

     

    • Big one - freshmen get to start doing a lot more

     

    • Engineering section revamp
      • Decide on major subsystems to focus on
        • Make summary pages and guides for judges to find relevant articles
      • Code section
        • Finalize state diagram
          • Label diagram to refer to the following print out of different parts of the code
        • Create plan to print out classes
        • Monthly summaries
      • Meeting Logs
        • Include meeting planning sessions at the beginning of every log
          • Start doing planning sessions!
        • Create monthly summaries
      • Biweekly Doodle Polls
        • record of supposed attendance rather than word of mouth
      • Design and format revamping
        • Start doing actual descriptions for blog commits
        • More bullet points to be more technical
        • Award highlights [Ethan][Done]

    Page numbers [Ethan][Done]

        • Awards on indexPrintable [Ethan][Done]
      • Irrelevant/distracting content
        • Packing list
        • Need a miscellaneous section
          • content
      • Details and dimensions
        • Could you build robot with our journal?
        • CAD models
        • More technical language, it is readable but not technical currently
    • Outreach
      • More about the impact and personal connections
      • What went wrong
      • Make content more concise and make it convey our message better



    ENGINEERING TEAM:

     

    • Making a new robot - All build team (Karina & Jose over spring break)

     

      • Need to organize motors (used, etc)
      • Test harness for motors (summer project)
    • Re-do wiring -Janavi and Abhi
    • Elbow joint needs to be redone (is at a slight angle) - Justin/Ben
      • 3D print as a prototype
        • Cut out of aluminum
      • Needs to be higher up and pushed forward
      • More serviceable
        • Can’t plug in servos
    • Sorter -Evan, Karina, and Justin
      • Sorter redesign
    • Intake -Evan, Karina, Abhi, Jose
      • Take video of performance to gauge how issues are happening and how we can fix
      • Subteam to tackle intake issues
    • Superman -Evan and Ben
      • Widen superman wheel
    • Lift
      • Transfer police (1:1 to 3:4)
      • Larger drive pulley
        • Mount motors differently to make room
    • Chassis -Karina and a freshman
      • Protection for LED strips
      • Battery mount
      • Phone mount
      • Camera mount
      • New 20:1 motors
      • Idler sprocket to take up slack in chain (caused by small sprocket driving large one)
    • CAD Model



    CODE TEAM: -Abhi and Arjun

    • add an autorecover function to our robot for when it tips over
      • it happened twice and we couldn’t recover fast enough to climb
    • something in the update loop to maintain balance
      • we were supposed to do this for regionals but we forgot to do it and we faced the consequences
    • fix IMU corrections such that we can align to field wall instead of me eyeballing a parallel position
    • use distance sensors to do wall following and crater detection
    • auto paths need to be expanded such that we can avoid alliance partners and have enough flexibility to pick and choose what path needs to be followed
      • In both auto paths, can facilitate double sampling
    • Tuning with PID (tuning constants)
    • Autonomous optimization



    DRIVE TEAM:

    • Driving Logs
      • everytime there is driving practice, a driver will fill out a log that records overall record time, record time for that day, number of cycles for each run, and other helpful stats to track the progress of driving practice
    • actual driving practice lol
    • Multiple drive teams

     

    COMPETITION PREP:

    • Pit setup
      • Clean up tent and make sure we have everything to put it together
      • Activities
        • Robotics related
      • Find nuts and bolts based on the online list
    • Helping other teams
    • Posters
    • Need a handout
    • Conduct in pits - need to be focused
    • MXP or no?
    • Spring break - who is here and what can we accomplish
    • Scouting

     

    Code Refactor

    08 Mar 2019
    Code Refactor By Abhi and Arjun

    Task: Code cleanup and season analysis

    At this point in the season, we have time to clean up our code before development for code. This is important to do now so that the code remains understandable as we make many changes for worlds.

    There aren't any new features that were added during these commits. In total, there were 12 files changed, 149 additions, and 253 deletions.

    Here is a brief graph of our commit history over the past season. As you can see, there was a spike during this code refactor.

    Here is a graph of additions and deletions over the course of the season. There was also another spike during this time as we made changes.

    Next Steps

    Hopefully this cleanup will help us on our journey to worlds.

    Issues with Driving

    08 Mar 2019
    Issues with Driving By Cooper, Jose, BenB, Bhanaviya, Karina, and Justin

    Task: Widen Superman's wheels and plan the new robot

    Since we just qualified, we have a lot to do. On the list for tonight, between the 6 of us, we have:

  • Teaching Cooper how to write a blog post
  • Work on the model of the new robot
  • Widen the superman wheel
  • Start the bill of materials'
  • Ben and Karina worked on widening the Superman wheels by adding 2 omniwheels on either side of a newly cut shaft. This will help stabilize the robot when moving into the extended position, along with preventing falls in the future. We hope this will make it easier to drive the robot and make it more reliable. As well, we began to make the Bill of Materials for the new robot.

    Bhanaviya trained Cooper how to write and upload a blog post. Justin worked on the model for the new robot.

    Next Steps

    Next, we will work building the worlds robot.

    Off-Schedule Meeting Log - Spring Break

    08 Mar 2019
    Off-Schedule Meeting Log - Spring Break March 08, 2019 By Charlotte, Cooper, Karina, Bhanaviya, BenO, Abhi, Janavi, Jose, Aaron, and Arjun

    Meeting Log March 08, 2019

    Friday
    • Widen Superman
    • Cooper and Ben O widened our Superman wheel from one omni wheel to two. This will improve our robots ability to turn and balance, as just one wheel would dig into the foam tiles due to a smaller surface area and make it more difficult for the robot to turn. Having two wheels increases this surface area, making driving easier.
    • Bill of Materials
    • Karina and Bhanaviya started a bill of materials, which lists each part of our robot and where they are from. The purpose of this bill is to make it easier for the builders to build our second robot as they can easily access the source of each part. See the bill of materials at (E-131, Bill of Materials).
    • Learning to blog
    • Cooper learned to use the blog, and because he worked on the journal on his old team, hopes to apply these skills extensively in the future.
      Tuesday
    • Reverse articulations
    • Abhi and Ben O worked on reverse articulations, which allows the robot to position itself in ways that makes mineral collection more efficient. See more on reverse articulations at (E-139, Reverse Articulations).
    • Drive practice
    • Karina got in some driver practice, which is going to be increasingly important as we get closer to UIL and Worlds.
      Wednesday
    • New VEX motors
    • Jose and Aaron opened up and started testing new VEX 393 motors. We are considering these motors because they are technically counted as servos and could help our intake perform more efficiently. See more at (E-124, VEX 393 Motor Testing).
    • Wiring
    • The freshmen got experience with soldering. They did some wire gender changes for our servo power injector.
    • Email Diversity Director
    • Janavi drafted an email to the diversity director at Worlds to get information about bringing the MXP to Worlds. We would like to share our outreach pursuits to other teams at Worlds as an example of a Motivate team.
      Thursday
    • Elbow model
    • Justin worked on the elbow redesign, which we are modeling to combine many intricate parts on our current robot to one, more serviceable and sturdy part on the robot. We finished the model and began its print. See more at (E-136, New Elbow).
    • Intake prototyping
    • As we are in the process of redesigning our intake to be more efficient for worlds, we are making many prototypes. Since we are planning to design the new robot where the elbow can flip in both ways for intaking, we need an intake that works when flipped both ways. Aaron prototyped an intake mechanism that rotates while keeping the sorter oriented correctly as proof of concept.
    • Finalize and send email to Diversity Director at Worlds about MXP
    • Friday
    • Work on robot model
    • Balancing adjustments
    • With our new reverse articulations, Abhi and Ben O have been tuning the PID constants in our code to improve our robot's balance, as each articulation has its own center of gravity.
    • Restock polycarbonate

    Localization

    09 Mar 2019
    Localization By Ben

    Localization

    A feature that is essential to many advanced autonomous sequences is the ability to know the robots absolute location (x position, y position, heading). For our localization, we determine the robots position relative to the fields coordinate frame. To track our position, we use encoders (to determine displacement) and a gyro (to determine heading).

    Our robots translational velocity can be determined by seeing how our encoder counts change over time. Heading velocity is simply how our angle changes in time. Thus, our actual velocity can be represented by the following equation.

    Integrating that to find our position yields

    Using this new equation, can obtain the robots updated x and y coordinates.

    VEX 393 Motor Testing

    13 Mar 2019
    VEX 393 Motor Testing By Jose, Cooper, Aaron, and Janavi

    Task: Test VEX Motor 393 as a faster servo for intake

    We need to speed up our intake to spend less time in the crater collecting minerals. We can accomplish this using VEX 393 Motors with high speed gears integrated, these motors are great since they count as servos, not motors. In terms of progress, this is what we did:

    • Tested VEX Motor 393 with servo cable on BigWheel
    • Resoldered XT-30 for servo power injector cable
    • Built new cable for servo power injector
    • Did research on VEX Motor 393 Controller to find out how it works
    • Replaced gears of VEX Motor 393 with high speed gears
    • Researched how to troubleshoot VEX Motor Controllers
    We are having issues implementing these motors onto BigWheel and our troubleshooting efforts did not suffice our needs.

    Next Steps

    We need to plan how to replace the servos on the intake with the VEX 393 Motors and test their functionality.

    Balancing Robot

    15 Mar 2019
    Balancing Robot By Abhi and Ben

    Initial Work on Balancing Robot

    Since our robot has two wheels and a long arm, we decided to take on an interesting problem: balancing our robot on two wheels as do modern hoverboards and Segways. Though the problem had already been solved by others, we tried our own approach.

    We first tried a PID control loop approach as we had traditionally been accustomed to that model for our autonomous and such. However, this served as a large challenge as lag in loop times didn't give us the sensitivity that was necessary. However, we tried to optimize this model.

    Next time we will continue fine tuning the gains, and use a graph plotting our current pitch versus the desired pitch to determine how we should tweak the gains to smoothly reach the setpoint. Another factor we need to account for is the varying loop times, and multiply these loop times into a pid calculations to ensure consistency. In addition, we may try to implement state space control to control this balancing instead of PID.

    Meeting Log

    16 Mar 2019
    Meeting Log March 16, 2019 By Charlotte, Janavi, Aaron, Ethan, Justin, Bhanaviya, Beno, Abhi, and Karina

    Meeting Log March 16, 2019

    Today's Meet Objectives

    Agenda

    Objective Summary

    Our main objectives for today are to gather and assemble the parts and subsystems needed to construct our new robot as well as continue the improvement of our robot's balance programmatically.

    Today's Work Log

    • Beginning of new robot build
    • Aaron and Justin began working on our new competition robot. Justin designed and cut a polycarb base and Aaron assembled the elbow piece and both wheels. The polycarb base will be the structure of the robot, connecting all of the subsystems together.
    • PID Tuning and Reverse Articulations
    • Abhi and Ben O have been tuning PID gains for autonomous and the presentation of our robot. Today, we focused on balancing our robot while the intake is fully expanded and the chassis is vertical without superman. This task is extremely complex considering the tiny balancing point and the height of the center of mass when the robot is extended in such a way. Also, since adjustments to our elbow, we are in the process of creating new reverse articulations. These allow the elbow to bend in the opposite direction as before to remove burden on our drivers.
      Abhi balancing robot before PID adjustments
    • Bill of Materials
    • Bhanaviya and Karina continued to work on a bill of materials, which can be found at (E-131, Bill of Materials). This is a continuation of progress made during spring break, and such a record will make it easier to build our second robot, as builders will have easy access to each part we need and where to aquire such an item.
    • BigWheel cutaways
    • Ethan made some cutaways using PTC Creo and Autodesk and our robot model, which required him to convert the file to .dxf in a certain articulation and then into an Illustrator file. This will allow us to better illustrate and document the design of the robot.
      Cutaway of BigWheel in Illustrator
    • Intake analysis
    • Karina took some videos of our intake system to analyze its efficiency. Notably, we want to measure the time it takes a mineral to travel through our corn-on-the-cob intake and thus determine the lag that occurs in this process. This will guide our redesign of our intake mechanism. In the next week we will perform this analysis, which can be found at (E-132, Intake Speed).

    Today's Member Work Log

    Team MembersTaskStart TimeDuration
    AllPlanning Meeting2:10pm.25
    AbhiPID tuning and articulations2:004
    Ben OPID tuning and articulations2:004
    EthanCutaways of BigWheel model2:004
    AaronSubsystem assemblies for new robot2:004
    CharlottePlanning and blog2:004
    BhanaviyaBill of materials2:004
    KarinaBill of Materials and intake analysis2:004
    JanaviBlog2:004
    JustinPolycarb base measurements and cut2:004

    Balancing Robot Updates

    16 Mar 2019
    Balancing Robot Updates By Abhi and Ben

    Updates on Balancing Robot

    Today we managed to get our robot to balance for 30 seconds after spending about an hour tuning the PID gains. We made significant progress, but there is a flaw in our algorithm that needs to be addressed. At the moment, we have a fixed pitch that we want the robot to balance at but due to the weight distribution of the robot, forcing it to balance at some fixed setpoint will not work well and will cause it to continually oscillate around that pitch instead of maintaining it.

    To address this issue, there are a number of solutions. As mentioned in the past post, one approach is to use state space control. Though it may present a more accurate approach, it is computationally intensive and is more difficult to implement. Another solution is to set the elbow to run to a vertical angle rather than having that value preset. For this, we would need another IMU sensor on the arm and this also adds another variable to consider in our algorithm.

    To learn more about this problem, we looked into this paper developed by Harvard and MIT that used Lagrangian mechanics relate the variables combined with state space control. Lagrangian mechanics allows you to represent the physics of the robot in terms of energy rather than Newtonian forces. The main equation, the Lagrangian, is given as follows:

    To actually represent the lagrangian in terms of our problem, there is a set of differential equations which can be fed into the state space control equation. For the sake of this post, I will not list it here but refer to the paper given for more info.

    Next Steps:

    This problem will be on hold until we finish the necessary code for our robot but we have a lot of new information we can use to solve the problem.

    New Robot Base - Icarus

    19 Mar 2019
    New Robot Base - Icarus By Evan, Justin, Aaron, and Ethan

    Task: Build the base for the new robot

    Since BigWheel was never intended to be a competition robot, we decided to build an entire new robot based off of it. This means that the base plate of the robot is going to have to be the most accurate part of the robot since everything after that has to be built upon it. To do this, we started out by measuring the base of our original robot, then squaring the whole thing out, making sure it was uniform across the base, down to 1/32". The inner slot that houses the superman lever was done down to 1/16" because it’s precision was not as important; it houses the Superman arm's wheels.

    We cut and trimmed the basic platform using the table saw and clipped some of the thinner excess polycarb off with flush cutters. Once the base was cut to size, we moved onto the bends. The bends were measured exactly where they are on the outside of the current robot. To make precise cuts, we took a trip to the Dallas Makerspace. There, we used the sheet bender to bend our 1/8" polycarbonate which makes up the base, into shape. The walls of the base are then going to be connected to square aluminum piping that has been ripped in half to create the outer wall.

    The task of holding the sides together will be done by two 3D printed parts that will house the LED strip that goes around the outside of the robot (used to communicate to the driver which mode we are in). This base will be much more precise than our previous chassis, making it more reliable as well. Finally, the new base will have more mounting points than before, allowing for greater modularity. The old robot will be a sparring partner for driver practice. The level of craftsmanship that has gone into this baseplate is industrial grade, we have done something comparable in precision and accuracy to any product meant to be mass produced. We can only hope that our final robot works as well as it's intended.

    Next Steps

    To have a fully supported base, we need to add the framing brackets and the wheels before it can be considered a wrap on the base section of the robot.

    Finishing Icarus' Base

    20 Mar 2019
    Finishing Icarus' Base By Evan, Aaron, and Ethan

    Task: Perform the final steps to complete Icarus' base

    Since we finished the polycarb base, our robot went through some major changes. We last left our robot in the post-bend stage, just a piece of polycarbonate. The first thing we did was to square the whole robot with side brackets. These cleanly ripped aluminum C channel side brackets now serve as the highly accurate frame of our robot, which has been measured down the millimeter for the highest level of precision yet.

    After creating the side brackets, it was time to give them the right holes in all the right places. The holes for the rod we use as our drive shaft were drilled in the side brackets, exactly the same on either side, as were the holes for the points of attachment on either side of the robot, connecting the base to the brackets. The front bracket was cut to size and placed on the robot after the REV rail we use as an attachment point for the elbow joint was placed. Then we put the 3D printed brackets onto the REV rails that make up the back end of the frame of the robot, running the bar that became the axle for the wheels. If you want to see just how far we’ve come, you can look back at the article that Arjun and Karina wrote about building the first version of the robot over the summer. The amount of improvement is large and part of the journey. Everything on the robot is done for a reason, be it stability, weight, or efficiency. This time around we’ve significantly reduced the number of extra things on the robot, and simplified it as much as we possibly can.

    Next Steps

    The next step is going to be told in an upcoming article that will describe the process of building the arm mount. If this robot is going to be on the field and compete, it needs the elbow joint to be constructed, so that’s next on the evolution of the new robot.

    Meeting Log

    20 Mar 2019
    Meeting Log March 20, 2019 By Bhanaviya, Karina, Evan, and Justin

    Meeting Log March 20, 2019

    Today's Meet Objectives

    Objective Summary

    We plan to build the base of the chassis for the new robot, mainly by aligning the new REV rails with the polycarb base build last meeting.

    Today's Work Log

    • Layout the base of the new chassis
    • Karina, Justin and Evan measured and cut out rails for the new robot. Designing a new layout was a matter of deciding the REV Hub placement so that it did not interfere with the elbow motion. Since the chassis base holds all the subsystems together, it needs to be laid out such that all the rail and bolt alignments are able to support the structure of the robot.
    • Mark and drill holes for new corners and rev rails
    • Justin worked on creating new corner pieces for the new chassis. These were larger and more rounded in order to create a stabler base. Additionally, they had more holes drilled into them in order to be compatible for the c-channel. The holes also serve as a means for supporting the LED Strip. Karina and Evan also drilled the new REV rails so that they would align with the new chassis.

    • Replace gear sprockets
    • In order to switch from 60 to 1 standard gear boxes to 20 to 1 orbital motors, we replaced the gear sprockets with larger ones. This is because the new motors are much more robust and as such it would be ideal to employ the use of larger gear sprockets capable of supporting the motors' weight.

    Today's Work Log

    < tr>
    Team Members Task Start Time DurationAll Planning Meeting 5:15 .15
    Karina Drilling REV rails and base layout 5:30 3
    Evan Drilling REV rails and base layout 5:30 3
    Justin Create new corner pieces 5:30 3
    Bhanaviya Replace gear sprockets and Meeting Log 5:30 3

    Meeting Log

    22 Mar 2019
    Meeting Log March 22, 2019 By Bhanaviya, Janavi, Abhi, Arjun, Ben O, Paul, Ben B, and Cooper

    Meeting Log March 22, 2019

    Today's Meet Objectives

    Agenda

    Objective Summary

    Over the course of today’s meet, we plan to create new axle pieces for the big wheels of the new robot, calculate torque for Superman, improve articulations, and create a reveal video for Mini Mech.

    Today's Work Log

    • Create new axle-holders
    • Cooper and Ben B worked on creating new axle for the big wheels of the new chassis. Since we replaced gear keepers last meet, we will need to have axle pieces that can support the weight of the new gear keepers and the wheel. Ben worked on soldering the pieces while Cooper helped ensure that the pieces had enough room to be mounted on the chassis.
    • Improve articulations
    • Abhi, Arjun and Ben O worked on merging all of the Pull Requests that they have made over the past few weeks, ensuring that they work together with each other and the existing code base. They also refactored our Articulation code to make it easier to use and understand. Additionally, they added support for State Space Controllers. State Space Controllers are advanced control loops which perform complex linear algebra over input matrices to find outputs. These can be used to make our articulations more efficient, as well as help with balancing on two wheels.
    • Calculate torque for Big Wheel 2.0
    • Janavi worked on calculating torque for the different subsystems of the new robot. Since Superman has had some balancing issues in the past, calculating torque and understanding its degrees of freedom will enable us to ensure that its center of gravity is stable. She also calculated the torque for the lift to ensure that the linear slides don’t extend too far out and cause the robot to tip over.
    • Create a reveal video for mini-mech
    • Paul created a reveal video for Mini-Mech. Since Mini-Mech played an essential role in us choosing our wheels and chassis design, it was only ideal to acknowledge its existence with a reveal video of its own. This video will also come in handy when attempting to see just how out iterative our design process has been.

    Today's Work Log

    Team Members Task Start Time Duration
    All Planning Meeting 5:15 .15
    Janavi Calculate torque for new design 5:30 3
    Bhanaviya Meeting Log 5:30 3
    Abhi Improve articulations 5:30 3
    Arjun Improve articulations 5:30 3
    Ben O Improve articulations 5:30 3
    Cooper Create new axle-holders 5:30 3
    Ben B Create new axle-holders 5:30 3
    Paul Create mini-mech reveal video 5:30 3

    Bill of Materials

    23 Mar 2019
    Bill of Materials By Bhanaviya and Karina

    Task: Create a list of parts needed for the new robot

    To determine all the materials we need for the new robot, Karina and I started a Bill of Materials. To do this, we first analyzed Big Wheel sub-system by sub-system. We determined the parts used for each sub-system and placed it into a spreadsheet. Upon doing this, we needed to get each part's exact measurements so that we could save time when trying to cut the new parts. Additionally, we needed the quantity of each part as well as which manufacturer it was from. This was critical because at the end of the day, the task was to build a better version of Big Wheel but using, more or less, the same parts.

    Intake Speed

    23 Mar 2019
    Intake Speed By Karina

    Task: Analyze efficiency of our intake system

    A big part of our redesign is improving our intake system. To see where some of the errors may lie, we took detailed videos of our robot intaking silver and gold minerals from a side view, one mineral at a time. We measured the time between when the intake first made contact with the mineral, and when the mineral was directly underneath the rotating icecube tray, and therefore in our control, using LoggerPro video analysis.

    Silver Minerals
    TrialΔt (s)
    10.733
    20.466
    31.233
    41.934
    50.766
    60.634
    70.600
    80.466
    92.133
    100.700
    Gold Minerals
    TrialΔt (s)
    10.234
    20.532
    30.300
    40.533
    50.533
    60.300
    71.433
    80.567
    90.800
    100.433

    On average, silver mineral intake took 0.967s and gold mineral intake took 0.567s, meaning our intake was more efficient at gold mineral intake. Looking at Big Wheel intake frame by frame revealed faults in our intake. Intaking gold minerals went smoothly. For silver minerals, however, the slack in the ice cube tray resulted in it losing its grip on the mineral multiple times before the mineral was firmly grasped. This is likely the result of frictional forces struggling to overcome the elastic force of the flexible icecube tray pushing outwards. In trial 4, for example, our intake lost its grip on the mineral 4 times before it could be considered in our control.

    Next Steps: Redesign Intake Mechanism

    We are assembling a subteam of builders to take on the challenge of designing a new intake system. Some issues we'll have to address include:

    • The slack in the center of the corn-on-the-cob intake

    • The silver minerals slipping on the sorter
    • We'll have to have what changes will be made to our current design. (E-147, Intake Update)

    Meeting Log

    23 Mar 2019
    Meeting Log March 23, 2019 By Charlotte, Ethan, Bhanaviya, Karina, Jose, Justin, BenB, BenO, Arjun, Cooper, Paul, Abhi, Janavi, and Aaron

    Meeting Log March 23, 2019

    Today's Meet Objectives

    Agenda

    Objective Summary

    Today, our main goal is to finish the chassis of our new robot, as well as identifying and fixing the error in our code that stops the OP mode that lets the intake extend into the crater.

    Today's Work Log

    • New robot chassis build
    • Justin, Ben B, and Jose installed the axle mounts (which have finished printing and being welded) and the second wheel). We installed the drive motors, fully assembled, and put together the drive change. Our chassis is complete except for the Superman arm, as those parts we started printing today. The print broke because the printer was on the wrong setting, rather than setting a base, the print pulled up. The new print should be finished in time to do the assembly of superman during the week.
      Chassis before installation of drive motors
      Ben B cutting the main drive shaft
    • Sorter assembly for old BigWheel
    • In order to do drive practice with our old robot, Aaron and Cooper did some fixes to the intake for it to be functional again. While this is not the sorter we will use on our new BigWheel, so we can get some much-needed drive practice next week.
      Cooper with the sorter pre-assembly
    • Identify and fix code error
    • The code team has been trying to identify a code error since yesterday so that they can continue fine-tuning autonomous and the robot won't malfunction while deploying in the crater. We also need this part of the code to work for drive practice that we hope to get next week. After some thorough searching, they found the error to stem from a missing break function that was supposed to occur between the case for deploying and for reverse driving.
      Arjun looking for the error
    • Robot manual and team summary
    • Ethan worked on the robot manual, which is a brief but incredibly detailed guide of the subsystems on our robot. This will be put in our journal for the judges to read. We also updated the team summary to make it more concise so it is more easily digestible for the judges. Finally, we made a fold out for our journal to show the judges our outreach in a succinct manner.

    Today's Member Work Log

    Team MembersTaskStart TimeDuration
    AllPlanning Meeting2:10pm.25
    NameTask2:004

    New Elbow

    23 Mar 2019
    New Elbow By Justin

    Task: Design an elbow for bigwheel that we can 3d print

    To speed up the build process of the new robot, we made a 3D printable part of the elbow joint. The design simplifies the complex assembly of the elbow mounting point and makes it a single printable part. The old elbow contains many different parts that would need to be spaced precisely in order for the gears to mesh properly, while the new print allows us to stay consistent with our measurements when building the new robot. The part contains motor mounting holes, as well as a socket to support the weight of the motor. There is also a place to put the bearing that the lift system rotates on.

    This had to be spaced properly so we calculated the exact distance by using the number of teeth and module of the gear to find the diameter. The part also has two places to attach it to a REV rail, which allows us to secure the elbow to the chassis. The spacing between the bottom REV rail socket and the bearing hole is spaced so that the gear that aligns with the bearing is flush with the front plane of the robot to stay within 18 inches. The new bearing hole is also higher up than the hole on the old robot, which gives us more extension when intaking or depositing minerals.

    Next Steps

    We need to attach the new mounts and test how the new height of the elbow mounting point affects our balance and latching.

    Constructing Icarus' Elbow

    24 Mar 2019
    Constructing Icarus' Elbow By Evan, Aaron, and Ethan

    Task: Build the elbow for intake

    In the last Icarus' blog post, it was just getting the basic flat, support frame of the robot. The next step in the construction of Icarus' is the elbow joint that holds the intake. This time around, we simplified everything significantly as compared to BigWheel, reducing the excessive aluminum parts to two 3D printed parts. We attached these to the REV rail that runs across the front of the robot with two smaller REV rail parts we custom cut to fit the size of the 3D part. Then, we inserted the motors that each of them requires. Here we are using the same REV HD motors we used for our elbow on the last robot since they worked quite well. After inserting these, we went about supporting the elbow frame, which was done with two REV rails attached to the robot from the top of the 3D printed piece.

    These were attached at a 30-degree angle and anchored to the robot behind the two drive motors we use for the wheels. Once both of these were secured, we began assembling the arm. The arm itself has remained mostly the same, consisting of two linear slides on either side for a grand total of four, extra smooth slides. We drilled out the correct holes on all of the arm pieces, created four custom metal parts for the slides, which took a while on the bandsaw, and then assembled the bottom slide of the arm. Three holes were drilled out in four REV 86 toothed gears, which work as the mounting point of the linear slides. Once these were attached, we attached all the other necessary parts for the arm and life on the elbow joint’s 6mm hex axle that protrudes from a ½ inch hex axle set on two bearing with ½ inch hex inlay for an insanely smooth rotation. After all the necessary hardware was set in place, we put a redesigned version of our 3D printed gear keepers on to keep the distance between the motor shaft and the rotating shaft the same, and the gears firmly interlocked. During the time frame of this article, the new superman lifting lever was put into place.

    Next Steps

    The next step in the saga of the robot is the hook and the new intake, which will be seen in upcoming articles. As well, if the robot is to score at worlds, we need to construct the arm lift for the intake and then the intake itself, which will be redesigned and improved. Also, some wiring would be nice.

    Icarus' Superman Arm

    25 Mar 2019
    Icarus' Superman Arm By Evan, Aaron, and Ethan

    Task: Design and install a lifting arm for Icarus

    At the same time as the elbow joint was being done (which can be found in the article "Constructing Icarus' Elbow”) the Superman lift was being installed in the back half of the robot. The old superman system was difficult to install, but we designed it to be slightly easier. Mounting brackets were already pre-set in the robot so we didn’t have to disassemble half of the robot to be able to set screws into the extrusion rail. Bearings were inserted into the brackets, and the process of sliding all of the needed parts onto the rails began. First was the outside shaft collar, which holds the 6mm hex shafts in place. Then was the first interior shaft collar, which kept the internals in place. Then the first of the gearkeepers was put on, followed by a spacer meant to separate the gearkeeper’s bearing from being popped out by the gears on the Superman arm. Then came the actual Superman arm, which is one centimeter longer than our original arm, hopefully allowing more lift.

    It’s made of three 125 toothed gears from REV, with the center one’s ridges drilled out, a REV rail sized chunk sawed to insert our actual lever bar, and 3D printed spacers separating each of the gears around the outside which have all been bolted together. On the end of the bar is a 3D printed holder for the four omni-wheels we’ve positioned there, which are all set with bearings for smooth motion. Once this was slotted onto the 6mm hex rail we added one more spacer, the other gearkeeper, then the final interior shaft collar. It was put through the other bearing and bracket on the other side and finally closed off with a lost final shaft collar on the outside.

    After we got the arm in, we moved on to the driving 6mm hex shaft. Since this one was a lot longer and was hard to fit into the space provided, it was aligned in a way that it could slip through the slots of the wheels as we pushed it into place. We first put a REV core hex motor and a shaft collar that would work as the outside clamp. Then we put it into the bearing on the bracket and pushed it through. A shaft collar was placed, and then we attached the other end of the gearkeepers on. It was tight like we wanted it to be, but it didn’t make our builder lives easy. We put on a spacer to keep it in line with the Superman arm and then we put on the drive gears, three 15 tooth gears with the center one's sides cut off to mimic the Superman gears on the other side. After we put that in, we put another spacer and then the other side’s gearkeeper. This is where the struggle came. Since the gearkeepers keep the gears together exactly the distance from the center of the radius of the 15 toothed gear to the center of the 125 toothed gear, it was a very tricky squeeze to get it attached. After we managed to get it one, we put another shaft collar on and put it through the bearing on the other side. We slid on one last shaft collar on the outside, and ended the shaft with another REV core hex motor. That capped the entire subsystem off, and all that’s left is it to be wired.

    This system differentiates us from other teams - our robot is able to deposit through a lever arm that rotates the robot itself, adding an additional degree of sophistication and mobility to the robot.

    Next Steps

    The subsystem needs to be completely wired and tested before it's approved for the final robot.

    Meeting Log

    28 Mar 2019
    Meeting Log March 28, 2019 By Cooper and Evan

    Meeting Log March 28, 2019

    Today's Meet Objectives

    Objective Summary

    Fix camera mount, attach lift motors, make custom cables for the drive motors, and forge the hook

    Today's Work Log

    • Fix camera mount on BigWheel
    • We've had a problem for while where the camera on BigWheel gets loose, and falls out. Cooper decided that a clamp, like the one we had before, just better executed. Cut out of a spare piece of 4 mm Polycarb, and tightened by a m3 screw, it holds the camera in place without even the slightest wiggle. This will help keep our vision more consistent.
    • Mounting elbow motor
    • Evan in the time being mounted the lift elbow motors on Icarus. This means we can start to make the arms.
    • Make custom Cables for Icarus drive motors
    • Cooper worked on cutting down the motor cables of the Andy mark motors used for driving. This will help keep clutter down from how bad it was on BigWheel
    • Forging new hook
    • Evan and Cooper worked on forging a new hook. It took two iterations, as the first became brittle and snapped, but the second one was fine. This new hook will go on Icarus, and will allow us to practice sooner

    Icarus Code Support

    29 Mar 2019
    Icarus Code Support By Abhi

    Task: Implement dual robot code

    With the birth of Icarus came a new job for the programmers: supporting both Bigwheel and Icarus. We needed the code to work both ways because new logic could be developed on bigwheel while the builders completed Icarus.

    This was done by simply creating an Enum for the robot type and feeding it into PoseBigWheel initialization. This value was fed into all the subsystems so they could be initialized properly. During init, we could now select the robot type and test with it. The change to the init loop is shown below.

    Next Steps

    After testing, it appears that our logic is functional for now. Coders can now further devlop our base without Icarus.

    Reverse Articulations

    29 Mar 2019
    Reverse Articulations By Abhi

    Task: Summary of Icarus Movements

    In post E-116, I showed all the big wheel articulations. As we shifted our robot to Icarus, we decided to change to a new set of articulations as they would work better to maintain the center of gravity of our robot. Once again, we made 5 major deployment modes. Each articulation is necessary to maintain the robot's center of gravity as its mode of operation shifts.

    The position seen above is called "safe drive". During normal match play, our drivers can go to this position to navigate the field quickly and with the arm out of the way. In addition, we use this articulation as we approach the lander to deposit.

    When the driver control period starts, we normally navigate to the crater then enter the intake position shown above. From this position, we can safely pick up minerals from the crater. Note that there are two articulations shown here. These show the intake position both contracted and extended during intake.

    During the end game, we enter a latchable position where our hook can easily slide into the latch. After hooked on, our robot can slightly lift itself off the ground to hook. This is the same articulation as before.

    At the beginning of the match, we can completely close the arm and superman to fit in sizing cube and latch on the lander. This is the same articulation as before.

    These articulations were integrated into our control loop just as before. This allowed smooth integration

    Next Steps

    As the final build of Icarus is completed, we can test these articulations and their implications.

    Center of Gravity calculations

    30 Mar 2019
    Center of Gravity calculations By Arjun

    Task: Determine equations to find robot Center of Gravity

    Because our robot tends to tip over often, we decided to start working on a dynamic anti-tip algorithm. In order to do so, we needed to be able to find the center of gravity of the robot. We did this by modeling the robot as 5 separate components, finding the center of gravity of each, and then using that to find the overall center of gravity. This will allow us to better understand when our robot is tipping programmatically.

    The five components we modeled the robot as are the main chassis, the arm, the intake, superman, and the wheels. We then assumed that each of these components had an even weight distribution, and found their individual centers of gravity. Finally, we took the weighted average of the individual centers of gravity in the ratio of the weights of each of the components.

    By having equations to find the center of gravity of our robot, we can continuously find it programmatically. Because of this, we can take corrective action to prevent tipping earlier than we would be able to by just looking at the IMU angle of our robot.

    Next Steps

    We now need to implement these equations in the code for our robot, so we can actually use them.

    Icarus' Arms

    31 Mar 2019
    Icarus' Arms By Evan, Aaron, and Ethan

    Task: Install intake arms

    Since the last post, in which we installed the Superman Arm, we've installed the second stage of the linear lift and the belt drive that accompanies it. We began by drilling two holes in the linear slides that were exactly the space between the holes on the carriages for the linear slides using a drilling template we printed on the Tazbot printer. We did this to two of our linear slides, and then attached them. We realized that they were too long and sticking out of the 18x18x18 sizing box, so we detached them and cut off a centimeter from the top and ground off the edges. They were reattached successfully, and the 3D mounts for the belt system were installed at the same time since they use the same point of attachment as the linear slides.

    Those custom pieces that were mentioned in the Joint Operation article were now utilized, attaching to the top of the first linear slide and to the carriage of the second linear slide. These parts are used for the attachment of the pulley bearings that the belt drive relies on to function. We installed these pieces rather easily but struggled on some of the tighter fits that were done to reduce wiggling in the arms, a problem that the last robot had. The next thing we added was the physical belt which drives our lift. The belt was tied off on the final carriage on the second linear slide on either side. The next step was to create the mounting for the motors that would drive the lift. To do this we set up a REV rail under each of the elbow motors, and then topped it off with another rev rail that we connected to the elbow frame supports that run from the front to the back of the robot. Then we mounted the motors, two Orbital 20 andymark motors, which at first didn't fit. The issue was that there was no way to mount them close enough for a belt to be put in place with the current gear keepers we had on the robot. They were attached, and then the motors were mounted, and the belts were put on. The lift has the same ratio as last time, which is further explored in the article Bigwheel Upgrades. The whole system is much more cleaned up and simplified, and generally looks a lot better.

    Next Steps

    The next challenge for us is going to be making the hook, attaching said hook, and redesigning the intake in time for effective driver practice.

    Connecting the Hook to a Servo

    01 Apr 2019
    Connecting the Hook to a Servo By Karina

    Task: Connect the hook to a servo

    When attaching the hook to the servo, it was very important that the configuration gave the hook its widest possible range of motion. The open position needed to as far back retracted as possible for an easier lander dismount, and the closed position had to be closed enough so that our robot would not fall off the lander in competition.

    The hook was forged prior to its attachment, of course, so the mechanism had to account for the overextension of the end opposite the hook past the horizontal. To solve this problem, a L-bracket was mounted onto the end of the hook.

    The closed position was easier. The servo rotated approximately 180 degrees (its full range of motion being from 899 to 2100) into the closed position.

    Next Steps: Intake

    Now that the hook system is completed, all that's left is to test it and then mount the intake.

    Wiring Icarus

    01 Apr 2019
    Wiring Icarus By Jose, Abhi, Evan, and Aaron

    Task: Wire Icarus to be functional and move utilizing code

    With the construction of Icarus nearing completion we need to start connecting wires from the motors and servos to the REV Expansion Hubs before it becomes impossible to do so.

    • As soon as the expansion hub were placed on the chassis, servo wire extenders were connected before anything blocked us from doing so
    • We used custom sized wires to avoid a mess of wires that were way too long
    • We connected all the motors and servos in the same configuration as we had on BigWheel to keep everything consistent and make coding Icarus easier

    Despite our preemptive measure we encountered several problems when testing Icarus using tele-op control:

    • The polarities on the wires were reversed and this couldn't be fixed in code as the encoder values would be affected by this
    • There was a lot more lag than usual on Icarus, this affected the intake arm as its movement is time-based
    • The speed of the wheels were a lot faster now that we are using a different gear ratio and motor, however unlike the other problems, this can be fixed in code

    Next Steps

    We need to reverse the polarities on all the motor cables and try the fix the lag and speed issue with code.

    Intake Flappers

    04 Apr 2019
    Intake Flappers By Jose, Evan, and Abhi

    Task: Design and test intake flappers to speed up mineral intake

    Due to our new intake articulation involving the superman wheel the ice cube tray intake is slightly too elevated to intake minerals. To fix this we designed small flappers out of ninja flex(the Iron Reign way) to help the intake reach further. Tests prove this intake to be quicker than the ice cube tray alone and it should suffice for the UIL State championship tommorow.

    Next Steps

    We will compete at UIL and see if the new intake works

    UIL 2019

    06 Apr 2019
    UIL 2019 By Ethan, Charlotte, Evan, Janavi, Beno, Benb, Bhanaviya, Abhi, Arjun, Jose, Aaron, Paul, Cooper, and Justin

    Task: Compete at the Texas State Championship

    Today, we competed at the Texas State Championship, UIL Robotics, Division 5A-6A. We finished our robot earlier this week, so this served as a testing ground for our new robot and code.

    Judging and Awards

    There is no presentation at UIL - the judges appear at the pit ad-hoc to ask questions. And, there are no real awards. In this case, we talked to the judges, and they enjoyed our robot, but they happened to watch the game where our robot failed to move due to the gears breaking, so we were not under consideration for any awards.

    Talking to BAE Systems

    Usually at UIl there is a special aisle dedicated to visiting colleges and companies who support FTC teams and want to watch the competition. This time one of the visiting compaines was BAE Systems. Janavi went and talked to one of their employees who was able to connect her to the Dallas team. We plan to contact them to learn more about how they use the conecpts we are learning their jobs. We also hope to be able to give them our presentation and a run down of our robot and its capabilites.

    Code/Robot/Robot Game

    As the robot was freshly built, we didn't have much coded before the tournament. The night before, we did some basic tuning and created an autonomous, but not much. This coding is detailed in an earlier post. Despite this, the autonomous performed reasonably well - we could reliably delatch and sample - our issues came up in scoring the team marker as we failed to consider that the team marker wouldn't fit in the redesigned intake.

    The tournament also served as a stress test for Icarus. Two major issues cropped up: the belt system and the Superman arm. First, the belt system itself worked well - Icarus' arm extended quickly, but it repeatedly got caught on the lander's edge, detensioning the belt and requiring constant maintenance. Second, the gears on the Superman arm were stripped as we attempted to escape the crater in our first match. The stripping itself isn't surprising - Superman applies pressure on the gears' teeth on the order of mega-Pascals, but the quickness of stripping implies that the gears of Icarus do not fit together as well as BigWheel. So far, we plan to redesign the Superman arm with metal gears to reduce the stripping.

    Game 1
    We won. Our autonomous worked perfectly, but we overshot the crater while parking and got stuck (this was due to underestimating the speed of the 20's on our robot). Thus, we were completely stuck during teleOp, but our partner carried us.
    Game 2
    We lost. When we put the robot on the field, we realized that Superman's gears had stripped, but it was too late to change them out. So, we were stranded in the middle of autonomous and couldn't move beyond that.
    Game 3
    We lost. We hadn't fully repaired Superman, so we were again stranded on the field.
    Game 4
    We lost. We set up an untested autonomous, creating a point deficit we couldn't recover from.
    Game 5
    We won. Superman was fixed and our autonomous worked allowing us to pull ahead by 20 points and win the match.

    Next Steps

    These will be detailed in the UIL post-mortem.

    Code updates at UIL

    06 Apr 2019
    Code updates at UIL By Arjun, Abhi, and Ben O

    Task: Update code to get ready for UIL

    It's competition time again, and with that means updating our code. We have made quite a few changes to our robot in the past few weeks, and so we needed to update our code to reflect those changes.

    Unfortunately, because the robot build was completed very late, we did not have much time to code. That meant that we not only needed to stay at the UIL event center until the minute it closed to use their practice field (we were literally the last team in the FTC pits), we also needed to pull a late-nighter and stay up from 11 pm to 4 am coding.

    One of our main priorities was autonomous. We decided early on to focus on our crater-side autonomous, because in our experience, most teams who only had one autonomous chose depot-side because it was easier to code.

    Unfortunately, we were quite wrong about that. We were forced to run our untested depot-side auto multiple times throughout the course of the day, and it caused us many headaches. Because of it, we missampled, got stuck in the crater, and tipped over in some of our matches where we were forced to run depot-side. Towards the end of the competition, we tried to quickly hack together a better depot-side autonomous, but we ran out of time to do so.

    Some of the changes we made to our crater-side auto were:

    • Updating to use our new reverse articulations
    • Moving vision detection during the de-latch sequence
    • Speeding up our autonomous by replacing driving with belt extensions
    • Sampling using the belt extensions instead of driving to prevent accidental missamples
    • Using PID for all turns to improve accuracy

    We also made some enhancements to teleop. We added a system to correct the elbow angle in accordance to the belt extensions so that we don't fall over during intake when drivers adjust the belts. We also performed more tuning to our articulations to make them easier to use.

    Finally, we added support for the LEDs to the code. After attaching the Blinkin LED controller late Friday night, we included LED color changes in the code. We use them to signal to drivers what mode we are in, and to indicate when our robot is ready to go.

    UIL 2019 Postmortem

    07 Apr 2019
    UIL 2019 Postmortem By Ethan, Charlotte, Evan, Janavi, Beno, Benb, Bhanaviya, Abhi, Arjun, Jose, Aaron, Paul, Cooper, and Justin

    Task: Reflect on what we did correctly and incorrectly at UIL

    Pit & Packing & Roles

    • Pack more robot parts - didn't have enough to repair Superman arm
    • Pack more tools - needed soldering iron to repair voltmeter
    • Better organizational system - we couldn't find tools easily
    • Need handouts - see tokens post
    • Need team visibility - get shirts for freshmen, get people in stands
    • Need responsibility for clean pit - messy pit made robots repairs much harder
    • Need preassigned roles for team members on game day - reduce confusion
    • Need better scouting system - use Google Forms and live scouting

    Robot & Game

    • Need to repair Superman arm - gears stripped in match; will replace with metal gears
    • Need to install linear slide belt protector - belts got stuck on lander
    • Intake needs to be clear - remove friction tape
    • Need to reduce sorter bar in intake - reduces visibility
    • Need driver practice - reduce simple errors
    • Need auto setup practice - reduce simple errors
    • Need new team marker - old one did not fit in intake

    Code

    • Need to enhance lights system for teleOp - better driver knowledge
    • Need to calibrate anti-tipping method - not adapted for Icarus
    • Need to slow crater-side auto - prevent crater parking mishaps
    • Need to calibrate depot-side auto - options when working with other teams
    • Need to find Superman-linear slide equation - easier articulations
    • Need to simplify controls - automate intake, deposit for driver accessibility

    New Superman Arm

    07 Apr 2019
    New Superman Arm By Ethan and Evan

    Task: Redesign the Superman arm to be more robust for Worlds

    In posts E-116, we found that we were putting pressure on the individual teeth of the Superman gears on the order of mPa. We designed gearkeepers to ensure that the gears would interlock and reduce pressure, and these worked for awhile. However, under tournament pressures at UIL, the teeth on the smaller gears broke entirely - between the teeth that composed the gearing-up portion, at the beginning we had 45. At the end, we had 15 teeth.

    This necessitated a total redesign. Upon coming back from UIL, we created a new version of Superman with metal Tetrix gears with a 3:1 ratio - the aluminum Tetrix uses has proven much tougher in the past. To compensate for the reduction in gear ratio, we removed the old Core Hex Motors and replaced them an NeverRest+BaneBots 104:1 motor+gearbox combination. Coming off the bat, the NeverRest outputs .17 N*m, and with the gearbox, it outputs .17*104=17.68 N*m. With the 3:1 gear ratio, it outputs 53 N*m, matching the previous Superman arm while increasing tooth durability.

    This new Superman arm will allow us to rotate the entire body of our robot around the axis of its wheels, allowing us to reach the lander without difficulty and ensure redundancy on the robot. The Superman arm is the centerpiece of our robot; it allows us to utilize Balancing, Center of Gravity Calculations, and Articulations in a truly innovative way.

    Next Steps

    We need to test the arm to make sure no additional stripping occurs.

    Intake Update

    08 Apr 2019
    Intake Update By Ethan

    Task: Custom design an intake to improve intake times

    In testing, we found that the intake didn't perform adequately - the balls would slide back out in the inverse articulations. So, we designed attachments for the corn-cob intake out of ninjaflex, figuring that small tabs would hold the minerals in better. It failed - they were too compliant - but we found it was much easier to intake minerals than before due to the high coefficient of friction.

    So, we decided that the corncob base was the issue. We designed a circle with the diameter of the previous corncob aligners and attached thicker tabs on the outside, creating the stl seen above. When tested, this was much less compliant than the previous beater bar, which served to make intake easier. In addition, the combination of reinforced tabs and ninjaflex prevented the minerals from falling out of the intake through increased coefficient of friction.

    Next Steps

    We plan to reattach this to the robot to do driver practice.

    Machining Gears for Superman

    08 Apr 2019
    Machining Gears for Superman By Ethan and Justin

    Task: Machine replacement gears for Superman

    Shortly after creating the new Tetrix gear system, we got a response from one of the CNC shops we'd reached out to, offering to machine the 15 and 125-tooth REV gears from the STEP files. So, we took the Superman system off of our old robot, BigWheel, and sent some of the broken 15-tooth gears from UIL.

    In response, the shop sent us the new gears the next day, with added modifications for mounting the gears onto REV extrusion. These gears will make the arm much stronger, making it more robust and able to withstand the shear pressure on the teeth.

    Next Steps

    We need to mount the gears and test them to ensure stability.

    Ninja Flex Intake V2

    09 Apr 2019
    Ninja Flex Intake V2 By Jose, BenB, Karina, Evan, Abhi, Ethan, Charlotte, and Aaron

    Task: Design, implement, and test a newer version of the ninja flex intake

    The new ninja flex intake is good, but it has room for improvement. One issue is that it is too big and minerals have some problems entering the intake tray, Another issue is that the spacing of intake gears is too much and cuases minerals to be intaked slower. We fixed this by using smaller intake gears and using six of them instead of five. After replacing them we could test the new and improved intake. Results showed a much faster intake speed with an average intake time of 1-2 seconds. This was a major improvement and most likely the intake's final iteration.

    Next Steps

    Now with a finished intake we can drive test to see its functionality in a real match.

    Final Gantt Chart

    10 Apr 2019
    Final Gantt Chart By think

    Task: Update the Gantt Chart

    Earlier in the year, we posted an early version of the Gantt chart as seen in (T-17, Project Management). Since then, the chart has seen many changes, which can be seen below:

    See finished Gantt chart at front of notebook in pocket.

    Since the last update, we have added a few groups, notably research and development. The Gantt chart, along with other higher-level planning is completely foreign to the team, so it has been a journey to accomplish this progress. This year was a test of the concept, so next year we will work to improve on this concept and expand its use from strictly the project manager to the whole team. Expect to see another Gantt chart next year that is more fleshed out, detailed, and accurate.

    Control Hub First Impressions

    10 Apr 2019
    Control Hub First Impressions By Arjun and Abhi

    Task: Test the REV Control Hub ahead of the REV trial

    Iron Reign was recently selected to attend a REV Control Hub trial along with select other teams in the region. We wanted to do this so that we could get a good look at the control system that FTC would likely be switching to in the near future, as well as get another chance to test our robot in tournament conditions before Worlds.

    We received our Control Hub a few days ago, and today we started testing it. We noticed that while the control hub seemed to use the same exterior as the First Global control hubs, it seems to be different on the inside. For example, in the port labeled Micro USB, there was a USB C connector. We are glad that REV listened to us teams and made this change, as switching to USB C means that there will be less wear and tear on the port. The other ports included are a Mini USB port (we don't know what it is for), an HDMI port should we ever need to view the screen of the Control Hub, and two USB ports, presumably for Webcams and other accessories. The inclusion of 2 USB ports means that a USB Hub is no longer needed. One port appears to be USB 2.0, while the other appears to be USB 3.0.

    Getting started with programming it was quite easy. We tested using Android Studio, but both OnBot Java and Blocks should be able to work fine as we were able to access the programming webpage. We just plugged the battery in to the Control Hub, and then connected it to a computer via the provided USB C cable. The Control Hub immediately showed up in ADB. (Of course, if you forget to plug in the battery like we did at first, you won't be able to program it.)

    REV provided us with a separate SDK to use to program the Control Hub. Unfortunately, we are not allowed to redistribute it. We did note however, that much of the visible internals look the same. We performed a diff between the original ftc_app's FtcRobotControllerActivity.java and the one in the new Control Hub SDK, and saw nothing notable except for mentions of permissions such as Read/Write External Storage Devices, and Access Camera. These permissions look reminiscent of standard Android permissions, and is likely accounting for the fact that you can't accept permissions on a device without a screen.

    While testing it, we didn't have time to copy over our entire codebase, so we made a quick OpMode that moved one wheel of one of our old robots. Because the provided SDK is almost identical to ftc_app, no changes were needed to the existing sample OpModes. We successfully tested our OpMode, proving that it works fine with the new system.

    Pairing the DS phone to the Control Hub was very quick with no hurdles, just requiring us to select "Control Hub" as the pairing method, and connect to the hub's Wifi network. We were told that for the purposes of this test, the WiFi password was "password". This worked, but we hope that REV changes this in the future, as this means that other malicious teams can connect to our Control Hub too.

    We also tested ADB Wireless Debugging. We connected to the Control Hub Wifi through our laptop, and then made it listen for ADB connections over the network via adb tcpip 5555. However, since the Control Hub doesn't use Wifi Direct, we were unable to connect to it via adb connect 192.168.49.1:5555. The reason for this is that the ip address 192.168.49.1 is used mainly by devices for Wifi Direct. We saw that our Control Hub used 192.168.43.1 instead (using the ip route command on Linux, or ipconfig if you are on Windows). We aren't sure if the address 192.168.43.1 is the same for all Control Hubs, or if it is different per control hub. After finding this ip address, we connected via adb connect 192.168.43.1:5555. ADB worked as expected following that command.

    Next Steps

    Overall, our testing was a success. We hope to perform further testing before we attend the REV test on Saturday. We would like to test using Webcams, OpenCV, libraries such as FtcDashboard, and more.

    We will be posting a form where you can let us know about things you would like us to test. Stay tuned for that!

    Auto Paths, Updated

    12 Apr 2019
    Auto Paths, Updated By Abhi

    Task: Reflect and develop auto paths

    It has been a very long time since we have reconsidered our auto paths. Between my last post and now, we have made numerous changes to both the hardware and the articulations. As a result, we should rethink the paths we used and optimize them for scoring. After testing multiple paths and observing other teams, I identified 3 auto paths we will try to perfect for championships.

    These two paths represent crater side auto. Earlier in the season, I drew one of the paths to do double sampling. However, because of the time necessary for our delatch sequence, I determined we simply don't have the time necessary to double sample. The left path above is a safe auto path that we had tested many times and used at UIL. However, it doesn't allow us to score the sampled mineral into the lander which would give us 5 extra points during auto. That's why we created a theoretical path seen on the right side that would deposit the team marker before sampling. This allows us to score the sampling mineral rather than just pushing it.

    This is the depot path I was thinking about. Though it looks very similar to the past auto path, there are some notable differences. After the robot delatches from the lander, the lift will simply extend into the depot rather than driving into it. This allows us to extend back and pick up the sampling mineral and score it. Then the robot can turn to the crater and park.

    Next Steps

    One of the crater paths is already coded. Our first priority is to get the depot auto functional for worlds. If we have time still remaining, we can try to do the second crater path.

    Meeting Log

    08 Jun 2019
    Meeting Log June 08, 2019 By Bhanaviya, Jose, Paul, Aaron, Ben, Evan, Trey, and Justin

    Meeting Log June 08, 2019

    Task: Prepare for the 2019-2020 Skystone season

    Today kicked off our first meeting for the new Skystone season. Since the actual challenge for this year hasn't been released, the most we can do is to speculate what the new challenge might pose, and what we can do to prepare for it.

    Recruitment

    With most of our upperclassmen graduating, the SEM Robotics program needs more members. As the varsity team in our program, we will be responsible for spreading the word about out program in our school - The School of Science and Engineering. This includes making posters, finding a suitable room to host an interest meeting, and planning a presentation to explain the commitments that come with being a part of a FIRST Tech Challenge Team.

    Prototyping leg-drive

    Just like Relic Recovery, we suspect that this year's game will be a stacking game (especially considering the fact that the phrase 'Together we RISE' was stressed in the teaser that was shown at the World Championship last season). A stacking game requires a relatively tall robot (by robot standards anyway), and a tall robot means a leg drive. Leg drive is an idea we've joked around with but summer is also the best possible time to test any impractical ideas. So, Aaron, Trey, Justin and Evan experimented with the leg drive system by prototyping leg propulsion with polycarb "legs". The polycarb pieces were drilled to form a rectangular shape which would extend and contract to propel the drive forwards. After creating the polycarb structures, they implemented rev rails and gears to "rev up" the leg drive system. It's still a prototype for now but it could be implemented into a chassis soon to test if the leg drive system can actually be made into a functioning model.

    Experimenting with grippers

    A good stacking bot also needs reliable grippers. Given our team's track record for exploring multiple build ideas at once, we figured that the new season would have us testing and innovating a good number of gripper systems. Fittingly, Jose and Ben tried out two different kinds of gripper systems. Jose prototyped a parallel gripper bar system. He used polycarb pieces to create the prototype. Two smaller vertical pieces of polycarb were attached onto a horizontal, larger strip to create the parallel gripper system. Ben implemented a loop gripper system onto a small base chassis with 2 omnis and 2 REV wheels. The loop gripper operates when the REV motor spins the gear sprocket attached to a carbon-fibre rod which causes the ziptied-loop to expand and contract accordingly.

    3D-Modelling and CAD Design

    Paul modeled a standard REV for leg drive. This past season, we have used this kind of bracket repeatedly - as such we decided to model it in the case that we choose to incorporate it in our design for the upcoming season. In the case we do decide to experiment with multiple drive trains and gripper systems once the new challenge is revealed, having stock of 3D printed parts would allow us to test out multiple ideas even if we don't have the actual part with us.

    Next Steps

    We've designed 3 prototypes over the course of today's meet so this gives us plenty to test over the next upcoming meetings. However, we are participating in several outreach events over the next few weeks so finding time for testing will be tricky. But if our speculations for a stacking game are correct, we think our build season has gotten off to a good start so far.

    Meeting Log

    08 Jun 2019
    Meeting Log June 08, 2019 By Bhanaviya, Jose, Anisha, Paul, Shawn, Trey, Justin, Aaron, Ben, Mahesh, and Cooper

    Talking Heads: Summary June 08, 2019

    Task: Prepare for the 2020-2021 Game Reveal season

    Today kicked off our first meeting for the new Ultimate Goal season. Since the actual challenge for this year hasn't been released, the most we can do is to speculate what the new challenge might pose, and what we can do to prepare for it.

    Recruitment

    As most of our members have moved on to our Junior year, our team is now primarily upperclassmen-led. This means that within 2 years, we will need to recruit enough members to keep the team sustainable after our graduation. Unfortunately, due to the current pandemic, we will need to ensure that the Iron Reign program has the funding needed to maintain 3 teams in addition to ours. At the moment, our focus has been on keeping our own team viable over the virtual season, and this may mean that we will have to cut back on our recruitment and pick it back up closer to our senior year on the team.

    Outreach

    In an earlier post, we went over the plans for a new mobile learning lab. To clarify, the Mobile Tech xPansion program is owned by Big Thought, a non profit organization dedicated to education, but its outreach events are executed by Team 6832 Iron Reign. During these events, our team travels to low-income areas around the Dallas community with little access to STEM education, and teaches younger students about robotics and CAD to improve their interests in STEM which can sometimes be hard to discover without the access to a strong STEM-based education. Recently, Big Thought approved the plans for funding and expanding this program and our coach was able to purchase a new vehicle for the second, improved version of this Mobile Learning Lab. However, due to the ongoing pandemic, the plans for this vehicle have been put on temporary hold since most of our outreach events happen over the summer. As the count for COVID-19 cases in Dallas has been relatively high, there is no safe way for our team to interact with younger students and teach them hands-on robotics. As such, we will be placing our MXP outreach program on hold until the pandemic has improved (which will be, hopefully, soon).

    3D-Modelling and CAD Design

    Jose has been working on modelling various robot designs in anticipation of the upcoming season. The first is a kiwi drive, with a triangular chassis with 4 omni-directional wheels on each side of the chassis which enables movement in any direction using only three motors. The render of the robot itself is built using custom and goBilda motors. Another design was for an Inspirenc CAD Challenge, which resembled our Superman design from two seasons ago, but with a more rectangular chassis. All of these designs created over the summer will be within their own separate entry - this is merely a summary of our summer progress. Since we don't yet know what the challenge this year will look like, nor how much we would be able to meet in-person in light of COVID19, we plan on starting our build efforts with CAD designs to streamline the engineering process with an online reference in hand.

    Next Steps

    One of the hardest things about this year's season will be trying to cover all our usual grounds virtually since the number of team members who can show up to in-person practices has been severly limited. In the meanwhile, we plan on using our Discord group to map out the skeleton of our new season - journal and CAD will, for the most part, progress business as usual but we'll need to rely on CAD and our planning calls much more heavily to go through with build, code, and outreach. We plan to keep up our pace as a World-class team as best as we can over quarantine, as uncertain as our plans for this season may seem.

    Leg Drive Prototype

    15 Jun 2019
    Leg Drive Prototype By Jose

    Task: Prototype a Leg Drive for next year's (possible) stacking game

    Although most teams go for a traditional chassis, a different type may be needed for next season as speculations suggest a stacking game. A leg drive would be an apt idea to test out for such a game For this chassis, two motors spin their respective "leg" attached to a gear. The point is move the robot using the rotation of the legs rather than wheels. To test, I coded the leg bot using the basic Linear Op-Mode program. There were issues with the motors disconnecting when hitting the ground as their wires physically disconnected. To solve this I took more REV extrusions and attached them perpendicular to the legs, adding space between the ground and the motor. Despite this the leg bot still proves to be unstable.

    Next Steps

    There is a chance we'll have to scrap the design and start with a different one. Leg drive is an interesting idea but actually working with it will probably not be feasible in the near future, especially if the game is a stacking game, since those rely on speed.

    Fixing Mini-Mech

    23 Aug 2019
    Fixing Mini-Mech By Cooper

    Task: Fix Mini-Mech in time for the Skystone reveal

    In two weeks, Iron Reign is planning on building a robot in 2 days, based on the 2019-2020 Skystone Reveal Video. We've never really built a robot in that short span of a time, so we realized that preparing a suitable chassis ahead of time will make the challenge a lot easier as it gives us time to focus on specific subsystems and code. As such, I worked on fixing up Mini Mech, as it is a possible candidate for our robot in a weekend, due to its small size and maneuverability. Mini-Mech was our 4-wheeled, mecanum-drive,summer chassis project from the Rover Ruckus season, and it has consistently served as a solid prototype to test the early stages of our build and code. I started by testing the drive motors, and then tightening them down, since were really loose.

    Then, I worked on adding a control hub to the chassis. Since Iron Reign was one of the teams who took part in REV's beta test for the control hubs last season, and because we are one of the pilot teams for the REV Control Hub in the North-Texas Region, using a control hub on our first robot of the season will help set us up for our first qualifier, during which we hope to use a control hub.

    Next Steps

    With MiniMech fixed, we now have at least one chassis design to build our Robot in 2 Days off of.

    RIP Big Wheel

    01 Sep 2019
    RIP Big Wheel By Paul, Aaron, and Trey

    Task: Tear down BigWheel and harvest parts

    Big Wheel, Iron Reign’s first iteration of our Worlds competition robot Icarus, had been sitting outside in the tent for months and we needed parts for new robots - specifically for our Robot in 2 Days robot. Once the season reveal is released, Iron Reign plans to build a working robot within the weekend of the release. The need for parts was a pressing concern, so it was time for us to part with one of our oldest friends, BigWheel (Icarus, our worlds robot, was off the table because of sentimental value). So we went ahead and scrapped Big Wheel, taking the most important, valuable parts off first, like the bearing slides and arms, then we moved onto the chassis. We worked to break the robot down into parts that we could use on other bots, for this year’s challenge.

    We were able to get a lot of very useful parts off of big wheel, as most of the parts used on big wheel are the same parts that were used on Icarus, and this years challenge makes heavy use of the vertical reach and collapsibility of Icarus, and it makes sense to assume that many of the parts that were used on Icarus will come in handy this year. We hope to implement some of these parts to our Robot in 2 Days robot once the season reveal video is released.

    Modelling a Points System

    07 Sep 2019
    Modelling a Points System By Bhanaviya and Karina

    Task: Model a points system for the Skystone Challenge

    A couple hours ago, Iron Reign attended the reveal for the 2019-2020 FTC game - SKYSTONE. Since we intend to build a robot within the frame of this weekend, a points system will allow us to identify what specific parts of the challenge we'd need to solve first. It will also serve as a calculating tool for when we begin drive-testing.

    The points system identifies every aspect of the autonomous, tele-op, and endgame respectively. By plugging in values for each aspect, we will be able to see how many points we will score in total within the frame of one round. Essentially, it is a scoring system but will prove useful for when we start looking for build and code specifics on our robot. It will also allow us to more effectively document our drive-testing, something which we are notorious for neglecting in the past.

    Next Steps

    Once we have a working prototype, we will begin using the points system during drive practice. Since our Robot in 2 Days bot won't by any means be our final design in the weeks leading up to out first qualifier, the points system will come in handy when planning out multiple robot designs. It will serve as an effective tool to help us prioritize our engineering decisions.

    Aaron’s Super Cool Gripper That Works 100% Of The Time

    07 Sep 2019
    Aaron’s Super Cool Gripper That Works 100% Of The Time By Aaron

    Task: Prototyping a rolling gripper

    During the 2 day robot challenge, one of the gripper designs that we built on the first day was Aaron’s Super Cool Gripper That Works 100% Of The Time. While it did work most of the time, it was a bit too bulky to be implemented effectively in the two day period we had.

    The way it worked is by using the flexibility of the ninja flex rollers that we designed last year to slip over the stones, then because of the rubbery ninja flex material, griped on to the stone. Each roller was attached to a servo, allowing us to deposit the stone and rotate it into the orientation we desired.

    Next Steps

    Although the design isn’t near ready to be implemented, it did experiment with the idea of being able to rotate the stone while depositing. Not only that, but it was hinged at the very center on two axis of rotation, allowing for auto stabilization.

    Wheel Gripper

    07 Sep 2019
    Wheel Gripper By Jose and Trey

    Task: Design an intake for the stones based on wheels

    Initial Design: Rolling Intake

    The first idea we came up with for gripper designs during our Robot in 2 Days (Ri2D) challenge was a rolling intake with the wheels coming from the top and spinning to intake the stone. Since the wheels needed to spin they were placed on shafts which required two extrusions since the pillow bracket for them needs to be threaded on the ends of them to make this design compact.This design was rejected since we want to use the minimal amount of servos as possible and we came up with a more compact design that requires only one servo instead of two(one for each wheel).

    Final Design: Gripper Wheels

    This design involves two wheels attached to extrusions, one is idle and can't pivot while the other can be rotated in place by a servo. Once its grip was tested we saw that the wheels spinning was a problem. To fix this, the wheels where attached directly onto the extrusions this time and to enhance their grip, a rubber band was added to default the wheels' position as closed. A servo was added to the end of the main extrusion with a servo horn and polycarb beam to rotate the non-idle wheel back to release the stone in its grip. Finally, since drivers aren't perfect, a stabilizer made out of polycarb was placed in the middle of the gripper so it will always move towards the middle of the stones, in between the stubs. At first this was off by 90 degrees, but this was fixed shortly after.

    Next Steps

    We will have to implement this onto the Ri2D bot and run tests to compare this gripper against our others.

    Robot in Two Days - Day One

    07 Sep 2019
    Robot in Two Days - Day One By Karina, Bhanaviya, Aaron, Jose, Ben, Trey, Cooper, Sam, Sterling, Beau, Mahesh, and Shawn

    Task: Build prototype subsystems that pick up the stone elements

    This season Iron Reign decided to take on the robot-in-two-days challenge. Given that our team had never done this before, and we are primarily a team of underclassmen, we knew we would have to be organized in our efforts and that we would probably reuse old chassis.

    First thing right after the kickoff, the team convened back at our meeting spot to brainstorm ideas for robot designs which you can see above. Among the ideas we discussed was a "cupbot" of sorts, a lot like the designs seen for last years' challenge, except it would be shaped after the tops of the stones. This idea didn't pan out, however, because it would only be able to pick up the stones in the upright orientation, which is not something we can count on. We also had a sub-team prototype a parallel gripper, but it was an unsuccessful build in that it could not actually pick up stones. We did proceed further into the building phase with two designs for a gripper system: a rack-and-pinion gripper and a rolling gripper. One sub-team started on the rack-and-pinion gripper project, while another sub-team started on the rolling gripper project, both of which have separate articles which you can read about in our blog.

    Besides the gripper systems, we also discussed what kind of drive train we wanted to use this year. When we were at the kickoff, we noticed that Icarus's chassis was ideal for moving underneath the skybridges, and so we considered using this chassis for our robot in two days challenge. We also had the MiniMech chassis available for reuse. In the end, we proceeded with the mini mech chassis, which a subteam tuned on day one of the two day build, since it would be easier to add a gripper to the next day, and this earlier in the season, we were prioritizing gripper speed, not traveling speed between the two areas of the field.

    All work and no play? Of course not! Here at Iron Reign we like to have safe and wholesome fun as we work, which we had the opportunity to do when we caught an ice-cream truck driving around the neighborhood. Look at us having such a chill time!

    Next Steps

    To finish the challenge tomorrow, we will complete our gripper builds, choose our best design, and then mount it onto the mini mecanum chassis.

    Rack and Pinion Gripper

    07 Sep 2019
    Rack and Pinion Gripper By Cooper and Aaron

    Task: Build a gripper system for the 2019-2020 Skystone Challenge

    The rack-and-pinion gripper system is one of the 4 gripper systems we built this weekend for our Robot in 2 Days project. Since we’ve never used a rack-and-pinion system before, we realized that it would be a creative idea to start off the new season. Going for simplicity, we made a box such that we could fit 2 racks going in opposite directions, having the pinion in the middle. We constructed the racks with standard rev rails attached to the box with a rev standard linear slide piece and attached tetrix rack gears on the opposite side with double sided tape. Then the pinon was a rev standard gear attached to a rail on the back. The plan was such that when the pinion was turned the two grippers will move outwards and inwards to grasp the stones.

    After that, the actual grippers went through 2 iterations. The first was a straight, flat bladed polycarb sheet attached to the rack. We tried this, but it turned out that did not provide enough friction. The second iteration was a slight variation, where we bent the arms and added rubber foam to the end. This saw some success.

    Next Steps

    Overall, the system was very solid and worked reliably, and could be used in conjunction with a gimbal to make a well performing arm, but that didn't save it. For our weekend build, the rack-and-pinion is too incompatible with our chassis to be implemented in time - but as FrankenDroid (our new robot!) is not the final iteration of our competition robot, the rack-and-pinion gripper system will act as a prototype for any changes we choose to make to our gripper system as the season progresses.

    Parallel Gripper

    08 Sep 2019
    Parallel Gripper By Ben

    Task: Prototype a parallel gripper

    While there are many different solutions and gripper designs, one of the most common is the parallel gripper. The purpose of a parallel gripper is to grip objects, in our case stones, parallel to the object instead of at an angle. Since this was a rational idea to start off with, this was one of the gripper designs we experimented with in the duration of our Robot in 2 Days challenge.

    A parallel gripper would allow us to grip the stones more effectively, as it would grip with more surface area. Theoretically, these grippers work by having 4 bars/connectors which are all the same length. When they close, they close parallel.

    After building the gripper, we tested it with the stones. While it did an okay job at gripping, due to the fact that we didn't use any gripping material, it slipped a few times. Another issue we encountered was that it would be difficult to flip a stone if needed, which is a task other designs could perform.

    Next Steps

    If we decide to pursue the parallel gripper system, we would have to figure out a way to flip a stone so we could stack it, along with improving the grip.

    Ri2D Code

    08 Sep 2019
    Ri2D Code By Jose

    Task: Code a Basic TeleOp Code for the Ri2D bot using pre-existing classes and methods

    As the Ri2D bot nears completion, the need for TeleOp code becomes apparent to actually make it move. Since this robot is based of from MiniMech, a previous chassis design for Rover Rockus, the code was simply inserted into its existing class. To allow its subsystems to move and hold their position when they are not, methods for it to pose were used from the code for Icarus, our Rover Rockus robot. Most of the `PoseBigWheel` class wont be used for this robot, but that's fine since that is as simple as not using the methods not needed, done. The constructor for the `PoseBigWheel` class needed to be modified since there are different motors and servos used, this was easy as we just needed to remove anything we didn't need. Again, most stuff here won't be used, but as long as we don't delete any PIVs we should be fine.

    Once the code for robot posing is made to match the Ri2D bot, we need to implement it. To do this an instance of this class was instantiated in the `MiniMech` class. With that, we can now use methods of the `Crane` class(the one with robot posing) in the `MiniMech` class.

    Now it's time to use these methods from the `Crane` class. Since the elbow and slides are the same from Icarus we can apply these methods directly. These were simple if statements to detects a button press and set the appropriate motor moving using the posing code from the `Crane` class. Instead of using basic `setMotor` commands to get the motors going, pre-coded methods were used, we can now keep the motors in the position where they are placed in the same amount of complexity and with no previous knowledge of how to code robot poseing.

    Finally, we have to code the servos. Since the `Crane` class comes with code for two servos we can advantage of it since the Ri2D bot has only two servos. Although the code for this is a lot simpler since robot posing isn't required here, it is still nice to have values for the open and closed positions stored in a PIV in the `Crane` class if we ever have to change them later. A simple toggle feature was used so one button sets the servo to an open position when closed and vice versa.

    Next Steps

    We could on some robot articulations later on, but a basic TeleOp program is good for now.

    Robot in 2 Days - Day Two

    08 Sep 2019
    Robot in 2 Days - Day Two By Bhanaviya, Aaron, Cooper, Jose, Ben, and Paul

    Task: Finish Robot in 2 Days

    Since the reveal was released yesterday, Iron Reign embarked on a project to build a skystone-specific robot in 2 days. Yesterday was a planning ground, during which we began prototyping 4 robot grippers, and 2 chassis designs. With less than 24 hours to complete our robot, we started today off by getting build-specific decisions out of the way, so that we could narrow in on one robot design to code and work on.

    Of course, we couldn't settle on a decision without first finishing all 4 of our gripper designs. At the end, we had one gripper system that incorporated nylon gears, one that used regular wheels, one that used a rack-and-pinion system, and one that was a parallel gripper system. We decided to settle on the one using standard wheels that pivot to grip onto a skystone. While we haven't yet decided if this will be the same design we will work with in time for our first qualifier, it is a stable system for a robot in two days.

    As far as the chassis was concerned, we stuck to using Mini-Mech, our summer chassis project from the previous year. Since we added a control hub to Mini-Mech earlier in the week, all that had to be done was incorporate the gripper system onto its chassis, and program it to at the very least move and grip onto skystones. This was a lot of work that needed to be accomplished in 4 hours, but as full-fledged members of the Building A Robot The Night Before A Competition Club, working on a small time frame was nothing new to us. In the span of one practice, we finished implementing a working gripper system to Mini-Mech and coded it to move, grab and stack a skystone on the foundation top. We christened our creation FrankenDroid as a testament to this year's Star Wars-based theme and the fact that the robot was made from harvesting parts from our last years' robots, Big Wheel and Icarus.

    Next Steps

    While FrankenDroid's movements are far from being smooth, it is a start. Robot in 2 Days started off as a fun challenge for us - we did not expect to accomplish as much progress as we did in such a short span of time. As of now, we don't plan on using FrankenDroid as our competition robot - but it will be useful for drive-testing, and will serve as a prototype for any future iterations.

    Robot in 2 Days Grippers Comparison

    09 Sep 2019
    Robot in 2 Days Grippers Comparison By Jose and Bhanaviya

    Task: Analyze all our grippers from the Robot in 2 Days challenge

    During the making of our Ri2D we prototyped and designed several gripper designs to collect stones. These designs varied in the method of manipulating the stone, how many servos they required and how compact they are. All of these gripper designs have their own post describing them in detail, but this article summarizes all of these grippers as a way to help us with future gripper designs.

    1) Wheel Intake

    This idea was though of but never built since the design was to have wheels at about ground level to spin and therefore intake the block, the problem being that this would disrupt the other blocks in the quarry since it intaked the block from its short side.

    2) Wheel Gripper

    This design was to use wheels as grip since they have good friction, one set of wheels is stationary and the other set can open and close via a servo. Not compact, but required only one servo and had great grip on the stone. This was ultimately the design we ended up using in our final Robot in 2 Days bot, Frankendroid,since it was efficient in maneuvering and controlling stones and served as a good design for a quick, 2 days old robot.

    3) Aaron's Super Cool Gripper That Works 100% of The Time

    This design used 3-D printed wheels made of ninja flex that spun to intake the block, like the wheel gripper just not in a set position and it grabbed stones from above. This design was huge and required two servos as well as not having much grip.

    4) Rack and Pinion Gripper

    This design involved a rack and pinion closing some polycarbonate sheets to grip the stone. The polycarb sheets had foam for grip, but this was still not enough to even lift the stone, so an actual motor would be required.

    5) Parallel Gripper

    This design was to use a parallel grabber with some material for grip as an alternative to the rack and pinion design. Unfortunately, the parallel grabber wasn’t built correctly thus not parallel.

    Next Steps

    With all of our gripper designs from the Robot in 2 Days Challenge documented, we can now analyze how best we can improve these designs for future gripper iterations, as well as the potential of these designs to be combined to create an entirely new design. Currently, we are leaning towards using the gripper with Ninjaflex gears, which is the 3rd design in this article, once we've fine-tuned Frankendroid's design. We think a rolling intake will work well on our robot so this design is consistent with our idea to use the wheel gripper at present.

    Test Driving New Robot

    14 Sep 2019
    Test Driving New Robot By Ben, Jose, and Trey

    Task: Test the "Robot in 2 Days" robot

    Today we were able to drive test our "robot in 2 days" robot. We used our robot from the previous season, Icarus, as our alliance partner. Jose and Trey drove several matches. They were able to score around 40 points consistently. This was a relatively high number considering Icarus was only used as a push bot (it hasn't been adapted to this season's challenge). Jose was able to stack the Stones with precision and accuracy. Because of this, he was also able to do it efficiently. We determined the height of the arm was perfect for the robot, but it could use some finer tuning and adjustments. The hook, which was used to move the foundation, worked well too. One issue we encountered was the loosening of a chain on the front right wheel. Even though it was a simple fix, it did cost several points, as the robot was more challenging to control.

    We were also able to test our robot with our sister team's (Iron Core) robot. Their robot was essentially a push bot too, but provided different challenges for our driver. The core bot was smaller, yet harder to maneuver, especially for newer drivers. This resulted in a loss of points and difficulty operating smoothly. Eventually, both drivers figured it out and were able to score 25-30 points consistently.

    Iron Reign's robot stacks a Skystone while Iron Core's robot pushes a Stone.

    Next Steps

    We will continue to test our robot and fine-tune the arm, chassis, and intake design based on performance. We will also monitor the wheels to ensure they remain adequately attached, to avoid them loosening again.

    P.A.U.L

    21 Sep 2019
    P.A.U.L By Aaron

    Task: Design a new intake system

    The Pivoting Accelerated User-friendly Locker

    After the end of the two day robot build, we had come up with two main gripper designs. One was consistent, however heavy and large, (Wheel Gripper) and one was lighter but wasn’t quite as versatile or controllable (Aaron's Super Cool gripper That Worked 100% of the Time). P.A.U.L (Pivoting Accelerated User-friendly Locker) is the best of both worlds. It’s made out of polycarb so it’s light and somewhat flexible, and its easily controlled by a servo.

    P.A.U.L was originally designed with a hole in the top where a servo could push a small polycarb rod straight down, pushing the stone out of the grasp of P.A.U.L. This might have worked, however we decided that it would most likely be more efficient and easily controllable if we switched to some sort of pivoting mechanism where one side of Paul could be controlled by a servo. The way that works is by fixing one side to an axle that is attached to a gear. That gear is then controlled by the servo on top of P.A.U.L.

    Next steps:

    In the future we plan to test different gear ratios, that way we could figure out the perfect ratio of torque to speed. We want a good amount of torque that way we can grip the stones tightly and securely so they don’t fall out while being jostled around on the field, however in this years challenge speed is going to be very important.

    Skystone Gripper Version 2

    24 Sep 2019
    Skystone Gripper Version 2 By Justin

    Task: Design an Intake Wheel

    The older iteration of the gripper wheel

    Last season, we designed a ninjaflex gripper for Icarus, our World championship robot. This season, we are experimenting with different intake designs. One of our intake designs is Aaron's Super Cool Gripper, which uses the ninjaflex gripper wheels we designed. The problem with this system is that the wheels are very large, and increase the total size of the intake system. In order to shrink the size of the intake, we need to design smaller wheels that will still be able to grip to the side of the stones. We also combined the design of this gripper with the Pivoting Accelerated User-Friendly Locker (P.A.U.L) so the new intake design uses the new gears on the combination of the existing gripper designs.

    Our design consists of a central hub with 8 short flaps attached around it. The design uses similar flaps to last season's design, but there is no ring to support them and the length is much shorter. The width was 2mm, with the circles at the end being 4mm in diameter. When we printed this design the flaps were not stiff enough to maintain grip on the stones. In our second iteration of the gripper wheel we increased the width of the flaps to 3mm, keeping the circle diameters 4mm. We did this to create stronger flaps that would provide more force against the sides of the stones. In addition to this, we also added curves on the edge between the flaps and the central hub to provide more support to the flaps. These two changes made the flaps much stiffer, so now there is much less force required to maintain grip on the stones.

    The newer version of the gripper wheel

    Next steps:

    We need to test this design on an actual intake system. We have a design that currently has last seasons gripper wheels on it. We need to swap the old grippers with our new design, and adjust the size of the gripper to accommodate the smaller wheels.

    TomBot CAD

    28 Sep 2019
    TomBot CAD By Ben

    Task: Design a concept for a circular chassis

    Concept of circular chassis

    A challenge we face this year is running into other robots. Last year, it was possible to easily get around other robots; however, this year it will be difficult to get around other robots, as there will be a lot more cross traffic in the building zone.

    Our solution to this is designing a circular chassis. This will allow us to brush other robots without getting caught. With this, we would be able to move quicker and accurately. We will construct a 17.5in circular chassis. It will be driven by 2 8-in wheels (ironton 8in. Solid Rubber Spoked Poly Wheel) with 2 sets of 4-60mm omni-directional wheels on the front and back of the robot for stabilization.

    Next Steps

    Our next steps are to begin construction of the circular chassis, which has now been named TomBot, after our coach's cat - Tom the Cat. We will begin construction of TomBot by creating a circular template, which will be 17.5in in diameter. We will then trace that shape onto a polycarbonate sheet and cut it out.

    Fixing the Mechanum Chassis

    05 Oct 2019
    Fixing the Mechanum Chassis By Cooper

    Task: Fix the old mecanum chassis from last year

    Tonight, I worked on fixing the Iron Star robot from last year, since its a viable option for replacement of a chassis if there was ever a problem with ours at a competition. First we needed to strip it down to its bare form and take off the mecanum wheels. After that we took off the Tetrix axle holding blocks, as they were to thick and tall, and we printed out the holders from the minimech robot. We had to cut new axles since the ones that were used were very scarred. from there, the motors were removed and replaced with 20:1 planetary-geared REV motors. Then I attached the mecanum wheels back on.

    Next Steps

    In the future we need to attach the other set of mecanum wheels and add chains to the motors and the wheels. After that, we need to add on the general purpose mounting bracket that we are talking about making so that we can hot swap the subsystems on the fly.

    Gripper Testing

    10 Oct 2019
    Gripper Testing By Paul and Justin

    Task: Test block gripper

    Here is us testing the gripper we designed to pick up the blocks in this years SkyStone challenge. This gripper combines the Pivoting Accelerated User-Friendly Locker, P.A.U.L, one of our earlier gripper designs, and Aaron's Super Cool Gripper, a design from our Robot in 2 Days Challenge. It has a backplate similar to that of P.A.U.L's but instead of polycarb flaps, it utilizes the smaller Ninjaflex gears (a smaller version of the gears on Aaron's Super Cool Gripper) that Justin modeled so it is essentially a combination of our best design ideas so far. It doesn't have a name yet so it will be called P.A.U.L Version 2. It was mostly effective in picking up the blocks, however we need more structural rigidity to ensure that the blocks don't rotate while being picked up.

    Next Steps

    Next steps include reinforcing the gripper frame, and mounting it to our prototyping robot. We also need to cut off the excess rev rail, to reduce weight and make it a little less bulky.

    Autonomous and TomBot Robot

    11 Oct 2019
    Autonomous and TomBot Robot By Karina, Jose, and Bhanaviya

    Task: Autonomous coding and TomBot progress

    DISD students have been blessed with a long weekend, which we plan to take full advantage of as our first scrimmage is closing in. Just as we started to test drive Frankendroid, we began to notice some faults with the robot. Lots of these were common errors, which can likely be attributed to the fact that we sped through the building of Frankendroid very quickly. For one, we left off a lot of pulleys on our belt and pulley system, which left the entire thing very loose and in need of tensioning. We also had an issue of bearings slipping out of their sockets for the gripper's elbow attachment. We promptly made sure that the axle and belt systems were set up properly.

    So far, much of the team's focus has been on building a robot, and we're just now getting around to coding. So besides tuning up Frankendroid, we took a look at our autonomous program. To start, we drew an auto path (version 1). Then, considering Iron Reign already has a large code base from all its years doing FTC, we copied the pre-existing minimech code to start the code for Frankendroid. In terms of the drive train, Frankendroid is pretty standard with four mecanums in a rectangular shape, and so the hardware map was the same. We had some null pointer exceptions due to calls to nonexistent motors, sensors, etc. Additionally, the motor behaviors were not working such that doing the controls to move forward and backwards actually made the robot strafe, and strafing commands made the robot rotate. All of this was fixed in code. Afterwards, we calibrated

    Lastly, we did build work on our work-in-progress TomBot. From wheel to wheel, the span was too great to fit within the polycarb frame we had previously cut. Everything (wheels, motors, extrusions) had to moved closer together on the main axle, and then centered. The two center extrusions intended to be a point of attachment to the polycarb frame extended past the perimeter of the frame, and so these had to shortened with a hacksaw.

    Next steps:

    Our code team is now gearing up for an intensive two weeks of writing and fine tuning code for the robot. Drivers will take this opportunity to practice driving and become familiar with controlling Frankendroid.

    FrankenDroid - TPM Calibration

    11 Oct 2019
    FrankenDroid - TPM Calibration By Jose, Cooper, and Bhanaviya

    Task: Calibrate FrankenDriod's Ticks Per Meter in preparation of programming autonomous

    Today we worked on the calibration of FrankenDriod's TPM. This is used to accurately and precisely move during autonomous by having a conversion factor between a given distance and the unit ticks, which is used in the code. This was done by commanding FrankenDroid to move forward 2000 ticks. Of course this wasn't a meter, but the distance it did travel(in centimeters) was divided by 100 and multiplied by 2000(estimate used above) to get the approximate TPM. After a few times of getting the number of ticks perfect, we got it exact to the centimeter. This was also done for strafing and with that we now have an exact TPM that can be used when programming autonomous.

    Next Steps

    Now for the fun part, actually programming auto paths. These will be planned out and coded at a later date.

    Beginning Auto Stone

    12 Oct 2019
    Beginning Auto Stone By Cooper and Karina

    Task: Design an intake for the stones based on wheels

    Initial Design: Rolling Intake

    We've been trying to get our start on autonomous today. We are still using FrankenDroid (our R12D mecanum drive test bot) because our competition bot is taking longer than we wanted. We just started coding, so we are just trying to learn how to use the statemachine class that Arjun wrote last year. We wanted to make a skeleton of a navigation routine that would pick up and deposit two skystones, although we ran into 3 different notable issues.

    Problem #1 - tuning Crane presets

    We needed to create some presets for repeatable positions for our crane subystem. Since we output all of that to telemetry constantly, it was easy to position the crane manually and see what the encoder positions were. We were mostly focusing on the elbow joints position, since the extension won't come into play until we are stacking taller towers. The positions we need for auto are:

    • BridgeTransit - the angle the arm needs to be to fit under the low skybridge
    • StoneClear - the angle that positions the gripper to safely just pass over an upright stone
    • StoneGrab - the angle that places the intake roller on the skystone to begin the grab

    Problem #2 - learning the statemachine builder

    I've never used lambda expressions before, so that was a bit of a learning curve. But once I got the syntax down, it was pretty easy to get the series of needed moves into the statemachine builder. The sequence comes from our auto planning post. The code has embedded comments to explain what we are trying to do:


    Problem #3 - REV IMU flipped?

    This was the hard one. We lost the last 1.5 hours of practice trying to figure this out, so we didn't get around to actually picking up any stones. We figured that our framework code couldn't have this wrong because it's based on last year's code and the team has been using imu-based navigation since before Karina started. So we thought it must be right and we just didn't know how to use it.

    The problem started with our turn navigation. We have a method called rotateIMU for in-place turns which just takes a target angle and a time limit. But the robot was turning the wrong way. We'd put in a 90 degree target value expecting it to rotate clockwise looking down at it, but it would turn counter clockwise and then it would oscillate wildly. Which at least looked like it found a target value. It just looked like very badly tuned PID overshoot and since we hadn't done PID tuning for this robot yet, we decided to start with that. That was a mistake. We ended up damping the P constant down so much until it had the tiniest effect and the oscillation never went away.

    We have another method built into our demo code called maintainHeading. Just what it sounds like, this lets us put the robot on a rotating lazy susan and it will use the imu to maintain it's current heading by rotating counter to the turntable. When we played with this it became clear the robot was anti-correcting. So we looked more closely at our imu outputs and yes, they were "backwards." Turning to the left increased the imu yaw when we expected turning to the right would do that.

    We have offset routines that help us with relative turns so we suspected the problem was in there. however, we traced it all the way back to the raw outputs from the imuAngles and found nothing. The REV Control Hub is acting like the imu module is installed upside down. We also have an Expansion Hub on the robot and that behaves the same way. This actually triggered a big debate about navigation standards between our mentors and they might write about that separately. So in the end, we went with the interpretation that the imu is flipped. Therefore, the correction was clear-- either to change our bias for clockwise therefore increasing in our relative turns, or to flip the imu output. We decided to flip the imu output and the fix was as simple as inserting the "360-" to this line of code:

    poseHeading = wrapAngle(360-imuAngles.firstAngle, offsetHeading);

    So the oscillation turned out to be at 180 degrees to the target angle. That's because the robot was anti-correcting but still able to know it wasn't near the target angle. At 180 it flips which direction it thinks it should turn for the shortest path to zero error, but the error was at its maximum, so the oscillation was violent. Once we got the heading flipped correctly, everything started working and the PID control is much better with the original constants. Now we could start making progress again.

    Though, the irony here is that we might end up mounting one of our REV hubs upside down on our competition robot. In which case we'll have to flip that imu back.

    Next Steps

    1)Articulating the Crane- We want to turn our Crane presets into proper articulations. Last year we built a complicated articulation engine that controlled that robot's many degrees of freedom. We have much simpler designs this year and don't really need a complicated articulation engine. But it has some nice benefits like set and forget target positions so the robot can be doing multiple things simultaneously from inside a step-by-step state machine. Plus since it is so much simpler this year and we have examples, the engine should be easier to code.

    2)Optimization- Our first pass at auto takes 28 seconds and that's with only 1.5 skystone runs and not even picking the first skystone up or placing it. And no foundation move or end run to the bridge. And no vision. We have a long way to go. But we are also doing this serially right now and we can recover some time when we get our crane operating in parallel with navigation. We're also running a .8 speed so can gain a bit there.

    3)Vision- We've played with both the tensor flow and vuforia samples and they work fairly well. Since we get great positioning feedback from vuforia we'll probably start with that for auto skystone retrieval.

    4)Behaviors- we want to make picking up stones an automatic low level behavior that works in auto and teleop. The robot should be able to automatically detect when it is over a stone and try to pick it up. We may want more than just vision to help with this. Possibly distance sensors as well.

    5)Wall detection- It probably makes sense to use distance sensors to detect distance to the wall and to stones. Our dead reckoning will need to be corrected as we get it up to maximum speed.

    Auto Path 1

    12 Oct 2019
    Auto Path 1 By Karina and Jose

    Task: Lay out our robot's path for autonomous

    To kick off our autonomous programming, Iron Reign created our first version autonomous path plan. We begin, like all robots, in the the loading stone, its back to the field wall and with our intake arm upwards. We approach the line-up of stones and deploy the arm to its intake state over the last stone. At the same time, we have the wheels of the gripper rotating for a few seconds. The, we back up directly. Using IMU, our robot rotates 90 degrees, and then crosses underneath the skybridge to the building zone. About 1 foot past the end of the foundation closest to the bridges, we rotate again to the right and then deposit our stone. Afterwards, we retract the intake arm, back up, and then park underneath the skybridge.

    Next steps: Improving autonomous by testing

    The autonomous we have now is very simple, but this is only our first version. There are multiple steps that can be taken to increase the amount of points we score during autonomous.

    In testing, I've noticed that (depending on how successfully we initialize our robot) the stone we pick up during autonomous sometimes drags on the ground. This creates a resistive force that is not healthy of our intake arm, which is mounted on the robot by a singular axle. To fix this, we can add code to slightly raise the arm before we began moving.

    Eventually, when multiple teams on an alliance have an autonomous program, our own path will need to account for possible collisions. It will be strategic to have multiple autonomous paths, where one retrieves stones and places them on the foundation, while the other robot positions itself to push/drag the foundation to the depot.

    Also, our autonomous path is geared toward being precise, but going forward into the season, we will need to intake and place more stones if we want to be competitive. As well, we will need to use robot vision to identify the skystone, and transport that stone to the foundation, since this earns more points.

    TomBot Progress

    12 Oct 2019
    TomBot Progress By Karina, Justin, and Trey

    Task: Start assembling the TomBot chassis

    Today we made some progress on our round robot. We moved the rev rails and big wheels on the Bigwheel chassis to be able to fit inside the polycarb circle that we previously made. These movements gave us a good idea of where to position the rev rails, but the wheels were too close to the edge of the circle, to the point where cutting rectangular slots for the wheels would extend the slots outside of the edge of the circle. To correct this, we decided to first cut the slots, then adjust the wheel distance on the old chassis to fit the cuts.

    To cut the slots we first needed to make a template to map out where to cut. We did this on a circular piece of cardboard the same size as the polycarb. After two attempts at aligning the rectangles, we transferred the template onto the polycarb and cut them out with a jigsaw. We planned to round the edges of the rectangular slots to match the shape of the wheels, but an error during the cutting process caused only the outside edges of the rectangles to be rounded.

    Next we needed to mount the rev rail chassis to the polycarb circle and adjust the wheels to fit the new slots. One problem with the chassis is that the rev rails were positioned so that the wheels would sit towards the rear of the robot. After repositioning the rev rails, we marked and drilled holes, then mounted the chassis to the polycarb. TomBot now has the 2 big wheels

    Next steps:

    We need to add the 2 sets of omni wheels to the front and back of the robot to keep the base flat. We should build a basic wheel mount and design a 3d printed mount. The printed mount would be able to flex to soften to force of the robot on the chassis. The motors also need to be chained to the wheels.

    Coding 10/19/19 (Putting meat on the skeleton)

    19 Oct 2019
    Coding 10/19/19 (Putting meat on the skeleton) By Cooper

    Task: work on actually filling out the auto

    As seen in the last post, the skeleton of the auto was done. Tonight My goal was to fill it out-- make it do the things it needs to at the points based on the skeleton. This Would have been a bit more automated had we put a distance sensor on the robot, as I could just tell it to do certain actions based on how far it was from something. Without that, all I could do was hard code the distances. This took most of the time, but was efficient since I did it in stages.

    Stage 1 - The blocks

    My first task was to pick up the first block in the quarry line. I started by going forward and estimating the amount I needed to go, then went into the arm. I needed to make sure that when I went forward, I would go over the block just enough that I didn't move in when moving, but low enough to be able to be picked up with relative ease. So I ran a teleop version of this and got the value for the arm above the block, grabbing the block and just low enough to clear the bridge, a value I'd need later. Then I did trial and error on guessing the distance to the block until the grabber was in position just over the block. Then I ran into a little issue. I wanted to run the intake servos while I put the arm down, but in the StateMachine class, we can only have one action happening at a time per StateMachine object. Therefore, I just set it to run the servos after the arm was put down.

    However there was a separate issue concerning that as well. In the intake method, we assign a value to our servo PIVs to control the speed at which they run. This is how you are supposed to do that, the only problem is that that by itself is not compatible with our StateMachine. As we use Lambda functions, the code runs through the lines of .addState() repeatedly until the method call in the method call in that .addState() call returns true. For starters, we had to change the output method to return a boolean value. But isn't it, as if it was left as that, the lambda funtion would always get back a false from that .addState(), and be stuck like that until we stop it. So, I looked back on the old code from last year, and with the help of Mr.V, we found a .addTimedState() method. This takes in a method like a normal .addState() method, but a time to complete can be assigned. With the intake method always returning false, it means that the servos would run until the end of the time set and then it would end that action and move on to the next.

    Stage 2 - The deposit

    So, after the bock was picked up, the robot was told to turn to the other end of the field, where another set of estimations were used to move forward. This is where the value of just clearing the bridge came to play. To get under the bridge, we have to hold the block and arm in a certain position. After the bridge is cleared, the arm is set to move back up so when we turn to face the build plate, we could deposit. Now this was interesting. As hard as I tried I could not get the deposit to work reliably, but some of the accidental effects gave me ideas for how to get the most efficient way of placing the block. On one of the runs, the block was set down and it didn't quite sit where it needed to, as to say it was tilted back away from the robot. This led to the arm knocking it back into the correct place. I think this is a great way to have a more catch-all way make sure that the first block is correctly placed. I would have expanded on the idea, but I had to leave soon after.

    Next Steps

    I need to test more efficient paths for this auto, but other than that, I just need to finish this version of the auto for the scrimmage.

    Investing in a CNC Router

    20 Oct 2019
    Investing in a CNC Router By Bhanaviya

    Task: Invest in a CNC router using our grants from the previous season.

    Last year was a very successful season for Iron Reign, financially speaking. We earned around $11,000 in grants and funding from FIRST in Texas, Texas Workforce Commission and Mark Cuban, to name a few sponsors. In addition, this year we received a $200 Gobilda product grant. Most of this money was invested in last season's expenses. But as we found out over the course of our build season, our team incorporates a wide number of 3D-printed parts into our robot, and especially since we were recognized for our design process at the Houston World Championship through Innovate Award Finalist, our design process was one that we could further improve now that we've seen the level of competition at Worlds. Part of this includes using a variety of materials, as illustrated in previous seasons where we've used ice-cube trays and turkey-coolers into our robot's subsystems. So, what better way to improve our design process and spend our grant money than in investing in a CNC router?

    The router itself cost around $3000, and while this isn't cheap, it's a good investment since it now allows to cut our parts out of durable, inexpensive materials like aluminum and wood. So far, we have plans to use the router on the mounting under the turn-table of our robot and a logarithmic spiral that is being modeled to reduce the torque on our linear slide system. There's no end to how much this router can influence our overall design process. Our team is used to using Ninjaflex-printed parts but with the router, we can be more creative with the use of 3D-modeled parts on our robot.

    Next Steps

    Now, we can begin cutting the above-mentioned parts on the router once they've been fully modeled. We can also begin deciding what other parts need to be modeled that can easily be cut on the router.

    Control Mapping

    25 Oct 2019
    Control Mapping By Bhanaviya and Cooper

    Task: Map and test controls

    With the Hedrick Middle School scrimmage being a day away, the robot needs to be in drive testing phase. So, we started out by mapping out controls as depicted above.

    Upon testing the controls, we realized that when the robot attempted to move, it was unable to do so without strafing. To fix this issue, we decided to utilize a "dead-zone" of the left joystick. The dead-zone is a range of values in our code that is basically ineffective. Although this meant that that the zone did not have a purpose, we realized that its uselessness could be rendered to stop the robot from strafing. Although we do plan to implement strafe later on in our actual competition robot (TomBot), for the duration of the scrimmage, the deadzone in Frankendroid's (our scrimmage robot) controls will hold the set of values for strafe so that the robot cannot strafe at any point in time during the scrimmage. This will give our drivers more control over the robot during matches.

    Next Steps

    We plan to drive-test at the scrimmage tomorrow to ensure that the robot can move accurately without strafing. Once we begin code on Iron Roomba, we plan to orient strafe in such a way that it does not interfere with the rest of the robot's controls. At any rate, the dead-zone has given us a possible solution to work with if the strafe issue occurs on our competition bot.Since this is the control map for our scrimmage robot, we anticipate that the controls will change once Iron Roomba is further along in the engineering process. A new post featuring Roomba's controls will be created then.

    Driving at the Hedrick Scrimmage

    26 Oct 2019
    Driving at the Hedrick Scrimmage By Karina and Jose

    Task: Figure out what went wrong at the scrimmage

    We didn't do too well in teleop driving at the Hedrick Scrimmage, with our max stone deposit being 2 stones. There are several things to blame.

    In usual Iron Reign fashion, we didn't start practicing driving until a day or two before. Since we were not familiar with the controls, we could no perform a maximum capacity.

    There were also more technical issues with our robot. For one, the arm was mounted wihh little reinforcement. Small amounts of torque provided when dragging a stone across the floor gradually made it so that the line of the arm was not parallel to the frame of the robot, but slightly at an angle. And so, picking up the stones manually was not as straight forward a task as it should have been.

    This flaw could easily have been corrected for if Frankendroid could strafe. Frankendroid struggled with this. When extended, the weight of the arm lifted the back wheel opposite the corner on which the arm was mounted on off the ground. Thus, strafing to align with a stone when the arm was extended was a lengthy and tedious task.

    Next steps:

    Frankendroid has served its purpose well: it moved at the scrimmage and gave the team a better feel for the competition environment. But it's time to let go. Moving forward, Iron Reign will focus its efforts on building our circular TomBot Ironically, we will likely have to deconstruct Frankendroid to harvest parts.

    Coding Before Scrimmage

    26 Oct 2019
    Coding Before Scrimmage By Cooper, Karina, Bhanaviya, and Trey

    Task: Finish the temporary auto and work with drivers for teleop

    Tonight, the night before the scrimmage, We worked on making the depositing of the stone and parking of the robot more reliable. Or as reliable as possible, as we are planning to use FrankenDroid, which is somewhat in need of repair, which I also did with the help of Trey, Bhanaviya and Karina. This had a few changes come with it, as while we solved the problems of when we started the auto, there were still many that cropped up.

    Problem #1 - dragging the base

    In the auto, we need to drag the build area into the taped off section in the corner. This poses a problem, as dragging it can lead to major inaccuracies in estimated positioning. This, however can be solved somewhat easily once we have a distance sensor, which we could use in junction with PID based turning. Though in theory I could have done it with just the PID turning. While I would have loved to test that, there was another problem--

    Problem #2 - problem with hook

    There was a problem with our hook. I tried every time I ran auto to get the hook to work. I changed the return value, I changed the physical positioning of where it started, yet nothing worked. This was interesting, as it does work in the teleop. In any case, it prevented us to actually dragging the base in this version of auto. Looking back on it, there was a possibility that I needed to set it as a timed state, like the gripper, since we were using a servo to control it. While its unlikely, it's possible.

    Problem #3 - PID Tuning?

    This was the major issue of tonight, which we haven't found the root of just quite yet. During the auto, at the third turn, where the robot turns to heat to the foundation, there is a ~25% chance that the PID does not check where it turns and it just continues wherever it turns to. This usually leads to it overshooting and then ramming in to the wall. There is a temporary fix, however. For now, it seems that if only happens after we upload the code to the robot, or if we run auto fresh off of it being off. That is to say, if we run the auto at least for a second and then reset and re-init, then it will be good. This is a good thing however, as any chance we get to fix the underlying code's problems, that means we won't have to make a work around after in the season.

    Problem #4 - putting the block on the build platform

    This was the major fixable problem in the code. During auto, we need to take a block from the quarry and put it on the foundation. The problem is when we actually go to deposit it. When we go to put it down, we need to be very accurate, which with FrankenDroid is not easy. With no distance sensors, the best we can do is to tune the exact movements. While this isn't the greatest solution, this will do for now. In the future, we will have a distance sensor so that we can know where we are exactly in relation to the base.

    Next Steps

    We need to implement the distance sensors and other sensors on the robot. Obviously we aren't going to be using FrankenDroid for too much longer. TomBot may bring new innovations like a telemetry wheel which will make auto more accurate.

    TomBot Suspension

    26 Oct 2019
    TomBot Suspension By Ben

    Task: Design a suspension for TomBot

    3 Different iterations of the passive suspension.

    We've decided to design a suspension for our circular chassis for one reason. Under the neutral bridge, there is a 15mm lip on the floor plate to connect the bridge support. Traveling over this plate can cause significant depreciation of the chassis and connected subsystems.

    We have currently made 3 different versions of possible prototypes. We will be using a passive suspension system. The suspension will be 3D printed in Nylon, as it is fairly strong and flexible. It is also shatter resistant, making ideal for withstanding large and nearly instantaneous forces.
    Our first design was a triangle, but we determined that it was too rigid and wouldn't flex enough to absorb the impact of running into the floor plate at high speed. The next design was an ellipse. An ellipse has the capacity to expand outward, making it ideal for absorbing significant impacts. The first ellipse, however, was too small and unable to support the weight of the robot and flex enough to absorb the impact. The second ellipse is taller, enabling it to withstand the weight of the robot and forces from driving onto the floor plate.

    The suspension will be attached to a 3D-printed wheel mount. This mount will have the capacity to slide vertically as the suspension absorbs any impact.

    Wheel mount with example suspension

    As of now, we haven't conducted actual trials on any of these prototypes. In the event we determine that Nylon is not ideal; we may look into designing a shock absorber made from NinjaFlex. NinjaFlex may be suitable due to its flexible nature. A part could be designed, such as a cylinder, with a thick hexagonal infill. This would allow it to flex while maintaining some rigidity.

    Next Steps

    After creating a few more different types of passive suspension systems, we will want to begin testing them. They will have to be attached to the robot and individually tested. We may also want to design a NinjaFlex suspension regardless of whether or not the Nylon suspension proves viable to see which is ideal.

    Hedrick Scrimmage - Code

    26 Oct 2019
    Hedrick Scrimmage - Code By Jose and Cooper

    Task: Discuss what went and what needs improvement in our code

    Taking part in the annual Hedrick Scrimmage, we got to test our Robot In 24 Hours, FrankenDroid. Specifically, since both coders on the team are new to the sub-team, we wanted to see the code capabilities we could offer. For this event we had two autonomous paths: the first one simply walks underneath the skybridge for some easy 5 points, the other grabs a stone(we had no vision on FrankenDroid so no way to detect a skystone), moves to the building zone to drop said stone and parks under the skybridge. For being coded in a just a few days, these auto paths were both high in pointage and accuracy/precision. As well as auto, we wanted to test driver enhancements. These were coded at the event but proved to be useful. They include: a button press to move the arm to either fully retracted, perpendicular to the ground for strafing, and disableing strafing whilst in stacking or intake mode. These also proved to be effective on the playing field, making the drivers' life easier.

    Next Steps

    We need to incorporate vision into our autonomous, most likely Vuforia, to be able to detect skystones as well as speeding up the auto paths to be able to complete a 2 skystone auto.

    Ordering a Slip Ring

    26 Oct 2019
    Ordering a Slip Ring By Jose

    Task: Order a slip ring for the turn table

    In order to spin the turntable on TomBot we need to use a motor with a specific gear to make it spin and as a bonus we can use a slip ring to transfer power to it. Slip rings can prove to be useful since there would be no need to worry about wires getting tangled after the turntable spins a certain amount in the same direction and if done correctly, the turntable can be spun continuously, allowing for the very much necessary victory spins. The specific slip ring we need should have 6 wires, be able to handle 20 amps and 12 volts, and be at least 20mm in diameter. After some research on various sites, we found what we needed on aliexpress.com. This company features various slip rings for various purposes, which includes our "custom project" need. We ordered one at a hefty price, but if it works, its benefits will be worth it.

    Next Steps

    Once the slip ring arrives we can begin testing it on a test turntable to verify its viability on TomBot.

    Updating TomBot's model

    27 Oct 2019
    Updating TomBot's model By Bhanaviya and Ben

    Task: Update the model to plan TomBot's build

    With our first qualifier being less than a month away, Iron Reign embarked on an ambitious project to create a robot with a circular chassis named TomBot (which was, for reference, named after our coach's cat, Tom). Before we began the build of the robot, we planned out the chassis design in an earlier post on CAD. Now, with our chassis progress from last week, the model has been updated.

    The updated model still has the same base chassis design from the earlier model, but it now has extrusion bars above the chassis that were added in to the actual robot last week. It also has a turn table mounted on top of it to support our gripper arm and a gripper arm. As of now, the turn table hasn't been built yet but planning it out in the robot model will make it more efficient for us when we do start building.

    Next Steps

    With our robot model in progress, we can now plan out all our steps ahead of time in CAD so that we will make less mistakes on the physical build. We will be updating the model as the season progresses.

    Round Chassis Assembly

    02 Nov 2019
    Round Chassis Assembly By Justin, Trey, and Jose

    Task: Attatch Omni wheels to Round Chassis

    Today we finished assembling the round chassis for our circle robot, TomBot. The most important system we added was the omni wheels to the front and rear of the robot. Without the omni wheels, the robot would tilt like a seesaw around the central 2 big wheels. These omni wheels lightly touch the ground in the front and rear of the robot to keep the chassis parallel with the ground.

    The omni wheels were attached so that we have 3 wheels in the front and 3 in the rear. We used 3 wheels to give us more points of contact and more stability at high speeds. The wheels mounted to our new Go Bilda bearing mounts. The mounts have a central bearing with 2 mounting points that branch off of the bearing in a Y shape. The difficulty with this system of mounting the omni wheels is finding the correct height from the polycarb base to mount the bearings. The wheels should be as close as possible to the same height as the 2 big central wheels. The threads in the branches of the Y-shaped bearing mount are very short, which means that almost all the height adjustments need to be done with spacers and long screws. We used the longest screws we had, and after screwing them in to check if the height was right, we found that they were pretty close to what we needed. They still needed spacers to keep the screws from pushing up through the polycarb base, so we used the spacer heights to fine tune the height to get the omni wheels as even as possible with the big wheels. We found that exactly 1 and a half white plastic spacers looked pretty close to the height we needed.

    After assembling both sets of wheels, we placed the robot on the field and checked to see how much it tiled back and forth. We found that the 1 and a half spacers was the exact height we needed, as the robot doesn't tilt or wobble at all, and the big drive wheels still have plenty of traction on the field to drive the robot.

    These omni wheels allow us to use the chassis to test and work on our other subsystems, but we see some potential flaws in the wheels. The most significant flaw will occur at high speeds. The platform in the middle of the field has a steep edge to it, so driving over it at high speeds will cause those front omni wheels to take a lot of force. Since the mounting is rigid, that force will affect the whole robot and could either jam the robot up against the platform or cause the robot to hop and get shaken up a bit when it drives over.

    Next Steps:

    One of our modelers is working on 3d printing a suspension system to allow the omni wheels to retract under force. For testing purposes, and for our first qualifier, the rigid system should be fine, but later on the suspension will allow us to move at maximum speed. Our next step is to start assembling the rest of the robot to the chassis.

    Transition from Expansion Hub to Control Hub

    02 Nov 2019
    Transition from Expansion Hub to Control Hub By Jose and Cooper

    Task: Discuss the transition from using the Expansion Hub to using the Control Hub

    Over the past month we have used the control hub our robot in 24 hours, FrankenDriod. This was a great way to test its viability before implementing in onto our competition robot. We have already used the control hub at the REV test event where we were given a sample control hub to replace the existing expansion hub in our Rover Rockus bot. This proved the control hub to be much better than the expansion hub since there was no worry of a phone disconnect mid-match. This was no different on FrankenDriod, as we had less ping, didn't have to worry about a phone mount, and most important of all, we could push code to it via wifi. This is a useful feature since modifications to the bot's code can be done on the spot with no need for a wired connection. The only downside we see as of now is that an external webcam must be used for vision, this of course, is because we no longer have a phone to this. This is fine since we are used to using a camera for vision anyways so there is no difference there.

    Next Steps

    Considering that our team is one of the NTX teams who have received permission to beta-test a control hub at qualifiers, we will now use it on our current competition bot, Iron Roomba, especially since we have proven the control hub to be fully viable on a competition bot, having used FrankenDroid at the Hedrick Scrimmage.

    Stub Gripper

    02 Nov 2019
    Stub Gripper By Jose

    Task: Building gripper iteration #7

    As our 8th gripper design we modeled a stub gripper, inspired by 7129’s Ri30H. Several of our previous grippers were designed with the intention of being mounted our scrimmage/Robot in 2 Days bot Frankendroid. This is our first gripper design modeled with the full intent of being mounted on our circular chassis bot, TomBot. In essence, this gripper has some bars to align the gripper with the stone and grabs it by one of its stubs. The benefits of this design is that it’s the most compact of all our grippers and it can grab a stone from either its long or short side. The drawbacks are that it requires great driver precision and whatever we use to grip the stub needs to have lots of friction to not lose grip since there are few points of contact.

    Next Steps:

    We will add this design to the others and decide which one is best to actually implement it on TomBot.

    Turn-table Assembly

    02 Nov 2019
    Turn-table Assembly By Aaron and Trey

    Task: Finish assembling the turn-table

    During today’s meeting, we were able to complete the mounting of the pinion motor assembly to the turntable. This included drilling out holes and routing out a square in the polycarbonate disk that we are using as a base for mounting. We also rebuilt the pinion mechanism and implemented it into a smaller configuration.

    The idea with the turn-table is to eliminate the need for strafing. In this game, precision is key. Strafing allows for the robot to precisely move from side to side, however, with a turntable, the robot won’t even have to move. We can attach the gripping mechanism to the turntable and move the gripping mechanism side to side independently from the actual robot itself.

    Next Steps:

    Next we can mount the turntable on to the actual robot itself. We now have a slip ring that will allow the turntable to turn freely without worrying about wiring getting caught up in the motion.

    3-Fingered Gripper

    09 Nov 2019
    3-Fingered Gripper By Jose and Aaron

    Task: 3D Model and build an 8th gripper design

    As our 8th gripper design we are trying out a compact design known as the 3-fingered gripper. This was 3-D modeled before being built as a proof of concept. The back of the gripper has two bars to orient the stone before being grabbed. One bar contacts the stone and the other does too as TomBot continues to approach it. The actual grip comes from a plate that can open and close via a servo. Once the design was modeled it proved to seem reliable, especially because of the two bars orienting the stone.

    Now for the fun part, actually contructing the gripper. REV extrusions were used for bars at the back since their width is ideal for the job. From here we used GoBilda parts such the plates and a hinge for the rest of the design. Optimizations were made for the attachment of the GoBilda plates since they aren't the exact length needed, and once another plate was attached to the first via a hinge we added a servo. This servo opens and closes the gripper(of course), to do so a polycarbonate bar was used to connect the servo and the hinged plate. Finally, we added grip material to the back bars and the gripping plate. By using a servo tester we were able to test its functionality. Tests proved that grabbing the stone is really easy, but the grip could use work.

    Next Steps

    Compared to the other gripper designs this one seems to work best so we will optimize it some more add it onto TomBot.

    CNC Turntable Mounts

    10 Nov 2019
    CNC Turntable Mounts By Justin

    Task: Model and CNC way to mount the turntable to the chassis

    Today we worked on creating a 3d model for a CNC cut part to mount the turntable to the chassis. Since the turntable already has bolts sticking out of the bottom, we decided to use those as mounting points for our part. The most efficient solution to mounting the turntable is to cut a plate that attaches to the turntable bolts and has points to attach legs that will attach to the polycarb base. For convenience, the legs will be vertical tapped rev rails.

    Our first decision was deciding where to mount this plate. We determined that there should be 2 plates that attach to opposite sides of the robot. The plates would be curved and attach underneath the nylon gear. Each plate would attach to the turntable using 3 of the turntable's bolts, which uses all 6 of the bolts for mounting. Next, we needed to create bolt holes for the legs to attach to. In order to be able to drop bolts through the holes, this plate must extend slightly outside the turntable, because the plate will be flush with the nylon gear. We created a common radius from the center of the turntable where these holes will be placed, so that there is enough distance between the holes and the nylon gear. These holes would have to be placed so that the attached legs aren't blocked off by the rev rail already on the chassis. To fix this, we decided to put 7 total holes on each plate to mount the legs, all equally spaced around a common section of the circumference. This way we can play around with the mounting points, since we only need about 3 for each plate.

    Next we decided whether to mount the plates to the front and rear, or the left and right of the turntable. We counted up how many mounting points were available for each orientation and decided that the front and back mounting would give us a stronger attachment. The front and back are also where the turntable will want to lift up and push down under heavy loads, so it makes sense to mount at those points.

    During mounting, we found out that the spaces between the turntable mounting holes and the leg mounting holes at 3 points on each plate were too small to attach a REV rail leg. This is because the bolt from the turntable prevents the REV rail from being flush with the plate. To fix this, we used longer bolts on the turntable and used the revrail legs as both supports for the table and nuts to keep the plate onto the nylon gear/turntable.

    Next Steps:

    Our next step is to mount the legs to the plate, the plate to the turntable, and the whole thing to the robot. We need to measure out what length of rev rail legs we need to allow the turntable to spin freely without interfering with the chassis. We then need to mark and drill holes in the polycarb base to attach the whole subsystem. These mounting plates still need to be tested with the full capacity of the robot. Any issues should only come from the rev rail legs, which can later be replaced with a more custom solution.

    Mounting the Slip Ring

    10 Nov 2019
    Mounting the Slip Ring By Aaron

    Task: Mount a slip ring onto TomBot's chassis

    On our robot we have a turntable in order to increase the degree of precision at which we can maneuver skystones. We have one REV Hub under the base of the bot, and one on top of the turntable. This means, however, that we need 360 degrees of rotation between the two Hubs. Our solution to this problem was to use a slip ring. By using a slip ring it allowed us to have a center of rotation for our wiring to move freely around the point between our robot base and the turntable.

    We mounted said slip ring to the circular piece of polycarb that is bolted down to the outside of the turntable. We then ran the multitude of colored wires through two separate holes drilled through the previously mentioned polycarb circle and through the base of the robot to the underside and to the REV Hub mounted to the bottom of the robot.

    Next Steps

    Our next step is to ensure that the turntable on the chassis is mounted securely enough so that the motion of the slip ring won't cause it to topple over. To do this, Justin has modeled turntable mounts which we will mount onto the robot during the next meeting which will be the Saturday morning of the Woodrow Scrimmage.

    Logarithmic Spiral Design

    15 Nov 2019
    Logarithmic Spiral Design By Ben

    Task: Design a system that could linearly reduce torque.

    Since last season, we have conducted a significant amount of experimentation on our elbow and slide mechanism. We are using a similar design because we have prior knowledge on how to construct and maintain the subsystem; however, our slide this year is larger due to our desire to stack the stones higher. Although our elbow could lift the entire slide, we want to reduce the strain on the system by designing a component that would apply torque to the slide. Reduced strain will decrease the maintenance we will have to perform and will also increase the efficiency of the elbow by assisting it. The part would be attached with a bungee from the part to another part also on the turntable a few inches away.

    We decided to use a logarithmic spiral (r=ae^(bθ)) because it would reduce the torque exerted on the elbow linearly. To create this spiral in Fusion360, we had to write a script because there is no native spiral/equation builder. The code can be seen below and was adapted from code that can be found here. Once the code was executed, it created a sketch of the spiral, which you then had to spline into a line. Since we wanted the spiral to be tangent to the gear it would be attached to, we imported a model of the gear and aligned it with the spiral to find the optimal a & b values. Another requirement was that the spiral must be under 3 in and preferably 2.75 in to allow for space between the elbow and turntable plate. These values were a = 0.2 & b = 0.6, which were determined through various trials.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import adsk.core, adsk.fusion, adsk.cam, traceback, math
    
    def run(context):
        ui = None
        try:
            app = adsk.core.Application.get()
            des = adsk.fusion.Design.cast(app.activeProduct)
            root = des.rootComponent
    
            # Create a new sketch.
            sk = root.sketches.add(root.xYConstructionPlane)
    
            # Create a series of points along the spiral using the spiral equation.
            pnts = adsk.core.ObjectCollection.create()
            numTurns = 5
            pointsPerTurn = 20
            distanceBetweenTurns = 5
            theta = 0
            offset = 5
            a = 0.2 #aVal
            b = 0.6 #bVal
            for i in range(pointsPerTurn * numTurns + 1):
                r = a * math.exp(b * theta) #Definition of a logarithmic spiral
                x = r * math.cos(theta)
                y = r * math.sin(theta)
                pnts.add(adsk.core.Point3D.create(x,y,0))
    
                theta += (math.pi*2) / pointsPerTurn
    
            sk.sketchCurves.sketchFittedSplines.add(pnts)
            ui  = app.userInterface
            ui.messageBox('Spiral Done')
    
        except:
            if ui:
                ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
    

    Final design over original spiral

    Once we had the design, we printed it onto paper through the Fusion draw tool. We then confirmed that the holes aligned with the gear.

    After confirming the design aligned, we began preparing it to be machined on our CNC. For this part we went with 1/8in aluminum because it is both durable and inexpensive. It will also withstand the forces that will be exerted on the part.

    The finished part came out nicely with a few tabs that had to be removed. The part fit correctly and was successfully attached to the elbow and gear.

    Next Steps

    Our next steps will be to machine the part again, creating an identical copy, and printing the same design out of nylon, but taller. The nylon component will be sandwiched between the aluminum pieces and will have a cutout that will connect a bungee cord to it. We also have to design a part that will connect the bungee to the other side of the turntable. After introducing the bungee, we will have to conduct trials on the elasticity to determine the best bungee length or composition. These are necessary because we don’t want to apply too much force, restricting the elbow from lowering, yet we want to apply enough force to considerably assist the elbow when lifting.

    (Detected as missing, recovered, and Restored on 11/19/2022)

    Linear Slides on TomBot

    19 Nov 2019
    Linear Slides on TomBot By Justin

    Task: Mount linear slides to the robot.

    Today we focused on getting the arm and linear slide ready to be powered up. Our first task was to move down one of the stages of the linear slide to align the slides. We also adjusted where the carriage stops to further align the slides.

    Next, we began to run the belts through the pulleys. We needed to run the belts around the motor and accidentally put on an extra pulley, but we got the slides to move by pulling on the belt. To let the motor power the slide, we had to attach the both ends of the belt to the same carriage. To reach the below the slides from the top carriage, we had to attach a bracket with a screw sticking across to tie the belt onto. The bracket was made out of a bent GoBILDA flat plate. The hole spacing on the plate matched exactly the hole spacing on the nylon mounts for the final stage, which were also CNC drilled into the metal bracket. This made attaching the mount and bent plate to the metal bracket very easy. We extended the bottom row of the bracket out to one side to place the crossing screw away from the gears of the arm. The plate has a slight flex to it under the load of the belt, but will function fine as a tensioner for now.

    Next steps

    Next, we need to check the robot for sizing and mount the last stage and gripper to the arm. The gripper mounting system needs to be decided, because wire won't hold up this weekend.

    Coding TomBot

    20 Nov 2019
    Coding TomBot By Cooper and Jose

    Task: Use existing code from the code base to program TomBot

    To code TomBot, we decided to use the codebase from Frankendroid, as its the one we were most comfortable with. This will change after the qualifier, as we recognize that the robot is more like last year's robot, Icarus. This will, in the long run, help us as we will be able to minimize the amount of refactoring we have to do. But in the meantime, we made 4 major changes in the code for Tombot.

    Change #1 - Mecanum Drive to Differential

    The first was the change from a mecanum drive to a differential, arcade style control. This was done by commenting out the lines for strafing, and changing the method call to a dormant method, which was a remnant from some testing done with a linear op mode for an early version of FrankenDroid. We got rid of the power assignment for the front motors, and just used the back two motors to represent our 2 drive motors. This gave us some trouble, which I’ll cover later. After that trouble, the method was still broken, as the left stick y was controlling the left motor, and the right stick x was controlling the right motor. This was due to the incorrect power assignments in the code. With that fix done, it drove as it should after the switching of an encoder cable.

    Change #2 - Rolling Gripper to 3-finger gripper

    The next 'big' change was the change from the rolling gripper on frankenDroid to the 3- finger design on TomBot. I use the word big lightly, as it wasn't more than commenting out the lines for one of the servos. However, this will have a major impact, which can be seen in the details in our grippers post. This is also note worthy in terms of auto, as it will have adverse effects on auto. This is due to the current instability and overall unpredictability of it. So, in auto, we will have to compensate for it.

    Change #3 - Turret

    One of the biggest changes to the code base we made was with the Turntable class that I wrote. This was also, therefore, the hardest part. Due to the fact I'm still relatively new to this, I got a lot of my examples from the Crane class that Ahbi wrote last year. I started first by tackling making a basic skeleton, including methods like rotateTo() and rotateRight(). Then I started filling them in. For some reason, the first go around at this, I decided to through out all the things they taught me in school and use rotateRight() and rotateLeft() as my lowest level method, instead of rotateTo(). Another thing I failed to realize is that I didn't fully get the Crane class, and made a redundant positionInternal variable for the encoder values that is assigned at the rotate method calls and then another variable called currentPosition was assigned to that, and then the encoder value for the motor was set to that. This sounds stupid, because it was. This cost me a good day of working and was a great lesson in taking my time understanding something before I go off and do it

    Once I had realized my misunderstandings of the Crane class, I was able to move on. I cut out all the unnecessary positionInternal code, using the other variable (currentRotation) to be changed in the rotate mehtods. Speaking of, I also got some sense into me and changed the rotate methods to use setRotation() as its lower-level method, making the code more professional in nature. This, still, was not our only problem. Next was encountered a bizzare glitch-like attribute to using the rotate methods. There was a sporadic, sudden movement whenever we pressed the button assigned for turning the table (the a button as it was just a test). After many looks at all the possible variables of failure, we whittled it down to be the fact that we assigned it to the controllers A button. What we observed was the turntable working, just not how we thought we were telling it to. In the button map, there was a method called toggleAllowed() infront of all the boolean-value button. This, unbeknownst to me was actually a toggle method written by Tycho many years ago. This toggle made it so the action assigned to the button only happened once, which is useful for things like latches and poses, as the driver could overshoot it if left to un-press the button in the correct amount of time. This, however, in our case led to the turnLeft() method (the one assigned at the time) only happen once, which was that sudden, sporadic movement after the a button.

    Once we changed it to a trigger, it worked-- almost. there was still some bug in the code that made it do some pretty funky stuff, which is hard to describe. After we whittled it down to just a small error of changing a negative to a positive, it worked perfectly.

    Change #4 - XML file

    During the Woodrow Scrimmage, I spent most of my time dealing with null pointer exception errors and incorrect XML assignments. This was, again, due to a lack of knowledge of the code base. I tried to comment out certain motors, which led to the null pointers, and tried to get rid of those null pointers in the XML file. After awhile of this loop, I realized my mistake in that the null pointers were due to a method call on an uninstantiated object. When I put all the assignments back in the Init, I was finally able to get it running

    Next Steps

    My next steps are to tune the PID values for auto, so I can use the skeleton from FrankenDroid. Then I need to take some of the sounds from the driver phone, like the critical error one, as it can severely affect workflow and my sanity. Finally, I need to change the turret to make it so that it uses the IMU heading instead of entirely the encoder value from the turntable.

    Morph Chart

    20 Nov 2019
    Morph Chart By Bhanaviya

    Task: Create a morph chart to analyze all our designs so far in this season.

    Iron Reign has seen several iterations of several subsystems over this past build season. With our first qualifier being 2 days away, its finally time to come full circle and identify the different iterations of different subsystems coming together. To do this, our team used a morph chart. A morph chart shows the various subsystems of our 2 robots in this system - our robot in 2 days bot Frankendroid and our competition bot TomBot.

    The left axis showcases the different subsystems like gripper designs for both robots, chassis designs and progressions, and extension mediums. A morph chart is often used by professional engineers to document the cyclical nature of choosing and moving through various designs. So far, Iron Reign has been through 9 types of gripper designs, 2 chassis designs, 2 linear slides systems differing in lengths and a third one incorporating the logarithmic spiral described in an earlier post.

    Across each row, alternative designs for each subsystem have also been depicted. As of now, our current robot has a circular chassis as shown in the second design in the fourth row, a flat gripper system as depicted in the first column of the third row, and a linear slide system supported by a logarithmic spiral in the fifth column of the fifth row.

    Next Steps

    Placing all of our designs in one chart like this allows us to see how iterative our design process has been, and how much of an influence each design has had on another. With all of our designs so far placed in the morph chart, our next step is to continue to update the chart after our first qualifier so that we can have a pictorial summary of our entire build season for reference.

    Last Minute Code Changes

    22 Nov 2019
    Last Minute Code Changes By Cooper

    Task: Debug some last-minute code to be ready for our first qualifier of the season

    This article may seem a bit rushed, but that's because it is - for good reason. Tonight is the night before the qualifier and it’s roughly 2 in the morning. Tonight we got a lot done, but a lot didn’t get done. We can explain.

    We finally have a robot in a build state that we could use to test the code for the turntable properly. The only tragedy - it wasn’t refined, per say. But it’s good enough for tonight. There are some random discrepancies between the controller and the actual turning portions of the turntable, but they seem to be largely minute.

    Next, we had issues just a bit earlier tonight with the elbow. First off, the elbow was backwards. The elbow would count the ticks backwards, such that down was a positive tick direction. Looking through all the code, we saw that the motors’ encoder value was flipped through a direct call to the DCMotor class. So we turned that one off and tried it but that didn’t work, so we then found another and put back the first in a different position in the code, thinking they’d cancel out. But, eventually, the solution was as simple as taking out the encoder values, which allowed the elbow to count the ticks forward. We plan to fine-tune our solution after the qualifier, but for now, it will allow the elbow to work.

    Next steps

    Get some sleep and then refine and complete the code tomorrow morning at the qualifier, and hopefully write some auto

    Night Before Competition Build

    22 Nov 2019
    Night Before Competition Build By Aaron, Cooper, and Trey

    Task: Transform a mass of metal into a functional something in the span of one night in time for the qualifier tomorrow.

    Twas the night before competition and the robot was most definitely not competition ready. This is what usually happens, but once again we found ourselves scrambling around to get everything together before the end of the night. We ended up mounting the gripper, setting up the belts, making hooks for the foundation and of course a whole lot of minor fixes and adjustments.

    Mounting the gripper was actually something that we completely finished at competition, however the night before we decided the previous mount would work. Although ingenious, the previous mount would have been to wiggly and not reliable. We ended up opting for a less simple design, however more stable and efficient. With the design we came up with, we realized we still wanted a degree of rotation on the x axis so that when stacking, gravity would automatically align the stone to the rest of the presumed tower. We achieved this in the simplest way by having two c shaped bars connected by only one screw in the middle on either side, allowing it to move back and forth.

    The belt was probably the most difficult part. What we needed to mount the belt was a piece that went up and over the rest of the slide then back down the other side, in order to have an attachment point for the end of the belt. This piece would be attached to the back of the top slide, and would be the highest point of the robot, which presented its own challenge. We needed this part of the robot to be able to fit under the bridges, and couldn’t make it go over not even just a bit or it would get caught and ruin the whole game. We tried constructing this piece by drilling a line of holes into the section of the metal we wanted to bend, making it weak enough to bend, however that ended up in just breaking the metal. We then decided it would be much stronger if we used the already bent L channel and just used two of them attached opposite ways.

    The hooks for the foundation were pretty last minute and ended up not being very functional. This resulted in us immediately changing them when we got back from competition. The hooks we had at competition were two polycarb L shaped pieces the simply would rotate downward. We mounted them onto and axle driving by a core hex motor. The main issue what that they didn’t have enough contact area to the foundation and we couldn’t effectively move it. We also realized that if we wanted to efficiently move the foundation, we would need to be able to rotate it, which would require contact from the back as well.

    Next Steps

    With the robot completely (mostly) built for our first qualifier of the season tomorrow, our next concern is driver-practice. As of now, we have no drive practice so this is something which we will be trying out for the first time this season with TomBot tomorrow on the practice fields.

    Build Post-Mortem

    24 Nov 2019
    Build Post-Mortem By Bhanaviya and Aaron

    Task: Begin analyzing long-term build improvements

    Moving on from the Allen qualifier, there are a couple issues we need to fix. Aside from the usual wear and tear a robot experiences in it’s relatively short life-span, there are some specific opportunities we have for optimal robot performance which we hope to act upon.

    First, our grippers don’t have enough degrees of freedom to rotate fully. Being able to rotate gives the ability to pick up stones from any orientation. As such, we plan to create a swivel mount which will allow them to turn enough to grab and place skystones.

    Second, our grippers don’t have the best grip potential, so we hope to find more “grabby” materials to improve their grip. This can be anything from 3D-printed parts to some oven-mitts, which we have been considering using for a while now.

    Third, our robot moves slower than we’d like it to and the turntable lacks control when turning. Part of this comes with having motors and gears with a “good enough” amount of torque to give us more control or vice versa for speed. As such, we hope to calculate the exact amount of rotational force acting upon the robot to determine how to improve its speed or control in functioning. This can be as simple as finding new motors.

    Finally, we want to build a completely custom-built robot. Other than being a pretty cool flex, customizing our parts allows us to have a greater degree of control on the functionality of our robot subsystems, as demonstrated with the logarithmic spiral we printed to reduce stress on the elbow. Part of having a custom-built robot means documenting all our current parts in a bill of materials and identifying which of these parts we can manufacture in our new CNC Mill. Although we know this isn’t a goal we can accomplish before our second qualifier on the 11th, it is one we can have done hopefully before regionals.

    Next Steps:

    This time, we want to test our build improvements more often since testing is one thing we haven’t been too keen on during preparation. This is mainly a long-term list of goals we want to focus on but other smaller improvements will be detailed per usual in blog posts.

    Drive Issues at Allen Qualifier

    25 Nov 2019
    Drive Issues at Allen Qualifier By Justin, Karina, Jose, and Aaron

    Task: Identify points of improvement after driving at Allen

    While using our untested code and inexperienced drivers at the Allen STEAM Center this weekend, we encountered many issues while driving. Our biggest issue was with the turntable, which bugged us the whole day. First it was really slow, then it turned but after a 3 second delay, then we finally made it driveable but it turns to the opposite direction a little bit before going the correct direction. This was a problem the whole tournament. The turntable also had runaway, and would drift to either side. To counteract these issues, we maintained a static turntable and used the chassis to rotate. We only needed to spin the turntable maybe twice to extend into the safe zone at the end of the match. We also encountered the claw getting stuck on the side numbers when we rotated it or extended it to the side. We determined the locked straight position was the best for today.

    This wasn't a prevalent issue in this tournament, but the robot not being able to drive over the middle bridge could be a problem later on. Driving this robot around the field was so easy. We didn't have to worry about bumping into things and the claw tucked in very well. After about our first match, our coder added preset positions to the controller. This made grabbing and placing blocks very easy, and ultimately displayed the capabilities of our robot to other teams and judges. This also helped us actually score points. The gripper was very basic for this tournament, which was actually helpful as it made learning how to drive the robot very simple. They claw required very little adjustments during the match to pick up stones, and did so reliably. Adding a point of rotation to joint might allow us to pick up weirdly rotated stones. Something we noticed during this tournament was the amount of robots, including ours, that couldn't pick up stones that had been tipped on their sides. Being able to pick up sideways stones as easily as upright stones could give us a unique and very effective advantage over other robots.

    Next Steps:

    Our biggest task is to smooth out the turntable both in code and build. The presets and smoothness of the turning need to be tested and improved. We also need to free up some room on the robot to allow the arm to swing around while the claw is fully retracted. The changes to the arm should be made pretty soon, to allow enough time to drive and test the robot. The chassis issues mentioned earlier are not an immediate worry, but we should continue testing and improving our work in progress suspension system. The suspension, when functioning, will allow us to drive over the middle bridge, which increases our mobility and allows us to perform different strategies during matches. We will prototype a way to rotate the gripper on the arm to allow us to pick up blocks from more orientations. We will also compare the benefit of picking up sideways blocks with the difficulty of picking them up, and determine whether or not that is something worth prototyping.

    Post-Qualifier Code Debugging

    25 Nov 2019
    Post-Qualifier Code Debugging By Cooper

    Task: Debug code after the Allen Qualifier

    After the qualifier, along with articulation plans, we had a long list of bugs in the code that needed to be sorted out. Most of them were a direct effect of not being able to test the code until the night before the qualifier. In hindsight, there were some issues which needed to be debugged in the turntable and turret.

    The first one that we tackled was the turntable wind up and delay. This was one of the bigger problems, as it led to the instabilities seen at the qualifier. These included random jerking to one side, inconsistent speed, and most importantly the delay. As described by Justin, it was a 2-3 second time period in which the turntable did nothing and then started moving. This was especially important to fix for stacking, as quite obviously precision and careful movements are key to this game.

    So we started at the source of what we thought was the discrepancy— the rotateTurret() method. This was under scrutiny, as it was the lowest level call, or in other terms the only code that assigns new tick targets to the motor. In the rotate methods that are called by other classes, we assigned a new value to a different value called currentRotation. Once one of the rotate (right or left) methods were called, then the new value would be assigned to currentRotation. Then where the update() method for this turret class was called in the loop, it would call rotateTurret(), which would them assign currentRotationInternal to currentRotation, and then subsequently call the setTargetPositon() giving currentRotationInternal as it’s new tick value target position.

    We also started going through the demo mode that was written last year. We have this idea for a great cool demo mode that will be documented once it’s in progress. However, to get there we need a working IMU. We technically had an IMU that worked at the competition, though it was never properly used or calibrated. So, we decided to look into getting the IMUs running. We started by looking at the current demo code and seeing what it could do. Most of it was outdated. But, we did find what we were looking for- the maintainHeading() method, in which we called another method, driveIMU. We then wrote a new maintainHeadingTurret() which works pretty well. Granted, we need to adjust the kP and kI values for the PID, but that is quite easy.

    Next Steps

    Continue tuning PID values in both the turn-table and turret.

    Swivel Mount

    26 Nov 2019
    Swivel Mount By Aaron

    Task: Design a swivel mount to improve the degrees of freedom on the gripper

    After the recent competition, we realized that a good way to increase precision would be to add, of course, another axis of rotation. This was the most efficient way to be more precise and pick up a stone from all angles. With a swivel mount, the gripper would be able to rotate on the y axis, via a servo. We already have a simple mount that rotates on the x axis, not motor driven, that utilizes gravity to automatically align the stone with the tower in stacking it, however we realized that a lot of time during teleop was wasting in trying to achieve the right angle at which to grip the stones.

    The way we achieve a swivel mount is by mounting a servo facing downward directly onto the gripper, and yes, direct drive is never really a great idea and maybe the easiest thing to do right at that moment was to just mount it directly to the gripper but a swivel mount is a more universal solution for when the gripper needs to turn a certain angle. The only problem is that we also use a servo to actuate the gripper arm mechanism, meaning that we will have a wire that will limit the rotation of the gripper itself. We could get an itty bitty slip ring if we really wanted to, but in reality we don’t see ourselves actually needing the full three hundred sixty degrees of motion.

    Next Steps

    Now that we have a swivel mount, our next step is to test, test, and maybe even test it. We don't know what degree of control we have on the swivel mount so testing it out will help us analyze what changes need to be made on our gripper.

    Finger Gripper Version 2

    26 Nov 2019
    Finger Gripper Version 2 By Jose

    Task: Design a swivel and add ninjaflex parts to improve the finger gripper

    From what we learned at the Allen Qualifier the gripper needs some major improvements before it will work at its max performance. The first change that needs to be made is replacing the current grip material with some more flexible material, such as ninja flex which we have used before as a gripping material. The print we have on the gripper is large but when the gripper closes its flexibility allows for it to grip the stone much better.

    The second improvement was to add a swivel to the entire gripper. This was done by adding some REV beams to the top of the gripper and attaching those beams to a servo. After some experimenting with the placement of the new, larger gripper we found a place that gives it over 180 degrees for motion. This will prove to be useful as not even the turntable will have to be turned to grab a stone, increasing the amount of stones we can score.

    Next Steps

    We need to implement some code that will allow a second driver to control the swivel as well as add some articulations now that we have a new degree of freedom. Additionally, we will need to add a damper to the oscillatory motion of the whole subsystem while in action.

    Adding to TomBot model

    27 Nov 2019
    Adding to TomBot model By Ben

    Task: Update the current robot model

    Prior to updating the model, the model purely consisted of the chassis and the primitive turntable. Since then, both the turntable and chassis have been updated to reflect the current state of the robot, along with the addition of the elbow and slide. The elbow component consists of GoBILDA shafts, gears, and connectors, along with the logarithmic spiral. The elbow can be seen below.

    The next addition is the linear slide. This consists of different slide components which were taken from a model constructed in PTC Creo and a linear slide gear mount. The slide can be seen below.

    With this updated model, it will be much easier to develop strategies based on different articulations since we can now accurately visualize the robot. The updated model also allows coders to better visualize the robot, increasing programming efficiency.

    Next Steps

    As you can see from the model above, there is no gripper. Our next steps will be to model the gripper which is to be constructed and attached to the next version of the robot.

    Allen Qualifier Post Mortem - Code

    27 Nov 2019
    Allen Qualifier Post Mortem - Code By Jose and Cooper

    Task: Analyze our strengths, weaknesses, opportunities, and threats for our code at the Allen Qualifier

    Fresh off our first qualifier at the Allen STEAM Center, we decided to begin a SWOT (Strengths, Weaknesses, Opportunities, Threats) analysis for code. While we will have other posts specifying what issues we needed to debug after the qualifier, and what articulations we need to implement within our code, this article mainly focuses on our code progress at the qualifier, and what can be improved in time for the next qualifier.

    Strengths

    • We have completely overhauled our codebase to be completely compatible with TomBot
    • We know how to use state machines to code autonomous much easier

    Weaknesses

    • Our autonomous only scores 5 points
    • We had few driver enhancements so many manual overrides were used

    Opportunities

    • We can have a tower height variable that makes the arm go to a certain height when stacking
    • We have plenty more things to do during autonomous and can make use of the turntable to make it faster
    • We can use a color sensor directly on the stone gripper to detect skystones during autonomous

    Threats

    • Any team with a 5+ point autonomous
    • 7172, they have many of our ideas for code improvements already implemented

    Next Steps

    Focus on building upon our opportunities, and begin creating plans for future articulations (which will be detailed in a later post).

    Finger Gripper Version 3 CAD

    28 Nov 2019
    Finger Gripper Version 3 CAD By Jose

    Task: Design a more comapct and efficient gripper design

    This version of the finger gripper is going to be mostly custom made to make it as simple and as compact as possible. This is just the CAD model of the actual design and we plan to update a little more before we can actually make the physical change on the actual gripper. The design remains the same but the gripper now has a new addition, a capstone deployer. The idea is to have the capstone preloaded on the gripper and have a mini servo drop it on the last stone we are placing. The design of this capstone is in another blog post, but the idea is to make it as small as possible to not make the gripper much larger.

    Next Steps

    We need to make this design perfect before printing, once that is done we can do so and begin its implementation on the robot.

    Creating a Robot Handle

    29 Nov 2019
    Creating a Robot Handle By Paul

    Task: Create a handle for the robot to make it more inspection-worthy

    The robot handle is a revolutionary piece of precision engineering, designed to allow the robot to lifted by a carbon-based linear motor, known as a human arm. The handle is made of a composite material, consisting of a matrix of polyurethane fibers surrounded by a carbon-based synthetic thermoplastic polymer sheath. This cording material shall henceforth be known as “Bungee cording”. This “Bungee cord” is wrapped around two aluminium support struts to ensure structural stability and ensure that the forces induced by the carbon-based organic linear motor don’t exceed the ultimate structural limits of the attachment points, which would result in the uncontrolled acceleration and subsequent sudden deceleration when the robot impacts the surface below. This would be bad because the robot is expensive and the ground is usually hard.

    This bungee cording helps protect the puny little meat sticks we call fingers, because for some reason that getting your fingers sliced open by the robot is bad or something. The meatbags that our team consists of need to be protected as per FTC regulations.

    Next steps:

    Enhance the carbon-based organic linear motors so our engineers can lift the robot without looking weak. Also maybe a little more padding to help protect people’s fingies.

    Bill of Materials

    30 Nov 2019
    Bill of Materials By Bhanaviya, Trey, and Jose

    Task: Create a list of parts needed for the new robot

    To determine all the materials we need for the new robot, we started a Bill of Materials. To do this, we first analyzed TomBot sub-system by sub-system. We determined the parts used for each sub-system and placed it into a spreadsheet. Upon doing this, we needed to get each part's exact measurements so that we could save time when trying to cut the new parts. Additionally, we needed the quantity of each part as well as which manufacturer it was from. Something new about the new robot is that we hope to have a completely CNC-ed bot with as many custom parts as we can incorporate. Using a good number of custom parts will allow us to be more creative with the robot design itself since everything we add to it will be custom-printed. This will also allow us to improve our engineering process as we iterate through multiple different versions of a part. This was critical because at the end of the day, the task was to build a better version of TomBot but using, more or less, the same parts.

    Next Steps

    We will update the bill as we iterate through more parts. As of now, TomBot has several build issues that will be discussed in our post-mortem posts. Part of rectifying these issues includes ordering/printing more parts and editing the bill accordingly.

    Capstone Version 3

    30 Nov 2019
    Capstone Version 3 By Jose

    Task: Design a minimalistic capstone that can be deployed by the stone gripper

    This version of our capstone is to be 3D modeled and printed as well as be as compact as possible to be deployed by the gripper. The basic idea is that the capstone is flat while meeting the minimum size for length and width. The capstone will be an 'I' shape to fit around the nubs of a stone. From here a small beam will be attached on the hole which is extended out of the 'I' as shown above. This will be 3 inches long, making this capstone technically legal. This capstone is small enough to allow another capstone to be placed on top if needed.

    Next Steps

    We need to fully 3D model this capstone and change the bottom of the gripper so it can be deployed easily.

    Capstone Iterations

    07 Dec 2019
    Capstone Iterations By Bhanaviya

    Task: Go over all 3 of our capstone iterations

    So far, we have experimented with 3 capstone models. While we do not intend to use all 3 of these models, they allowed us to effectively implement the engineering process on our robot. Although the capstone isn't physically a part of a robot, its various iterations influence the model of the gripper being used since the ideal gripper must be able to pick up both the skystones and the capstones over the duration of a match. As such, this article analyzes these designs to help us determine which gripper is best for use at our next qualifier on January 11.

    1) Aaron's Super Cool Capstone That Works 100% Of The Time

    The capstone that we made and used at the competition wasn’t the prettiest thing, but it had heart, and was destined for greatness. It was constructed from prototyping wire and duct tape. The basic design was a ring with a spherical top over it in order to not fall off when dropped onto the tower. It also had four large screws on each side in order to weigh down the capstone so as to not slip or slide off the tower when dropped. While this capstone was firm in structure, it requires a lot of precision to be placed on top of the stone itself. Since this year's game is very speed-based, a precision-based capstone is not the most effective.

    2) Jose's Super Cool Capstone That Works 100% Of The Time

    The next capstone was custom-designed and printed at our very own Robo Dojo. Simply put, it is a much flatter, rather 2D version of a skystone. It had two large rectangles in the center to drop onto both the stubs of a stone on a tower. It also has a small rectangular tab at its edge which will allow the gripper to pick it up. But given its shape, an issue would be the ability of our gripper to pick it up and drop it onto the tower without tipping over the entire stack. Once again, while it was destined for greatness, it was not built for the unrelenting force that is time and it would take too much control and seconds to be capped onto a tower.

    3) The I-shaped Capstone That Works 100% Of The Time

    Our latest capstone design is also custom-designed and 3D-printed out of nylon. Structure-wise, it is a flat 'I'. But in terms of capacity, it is the easiest of our capstone models to be picked by the gripper and drop onto the skystone. This capstone aims not to be dropped on the stubs of the stone but rather in in the middle of the capstone where it requires less precision to be dropped and is less likely to fall. It comes with a small tab similar to the one on our second capstone which allows the gripper to pick it up with ease.

    Next Steps

    Now that we have analyzed all of our capstone designs so far, it will be easier for us to streamline which design will be the best to implement on the robot. Right now, we are leaning towards the I-shaped capstone since it's less precision-based, smaller, and easier to be picked up by our current finger-gripper.

    Future TomBot Articulations

    07 Dec 2019
    Future TomBot Articulations By Cooper

    Task: Plan out potential robot articulations to improve game strategy

    Getting back from the tournament, we were able to immediately start to think about what was the big problems and possible improvements to the articulations of the robot. Overall, we ended up coming up with several ideas, both for fixing things and for efficiency.

    1- Turntable Articulations

    In the competition, we realized the extreme convenience that having some articulations for the turret. Not to say that we hadn't tried to make them before the competition, we were having some issues writing them. plus, even if we didn't have those convene, it would have been improbable that we would have gotten them tuned for the competition. Anyways, even though we agreed on needing to have these presets, we could not agree on what they should be. One argument was that we should have them field-centric, meaning that it would stay in one position from the POV of the audience. This was cited to have a good number of use cases, such as repetitive positions, like the left/right and forward of the field. However, another idea arose to have them be robot-centric. This would allow for faster relative turns.

    So, what we've decided to do is write the code for both. The field-centric will be turns and subsequent static positions will implement the IMU on the control hub mounted to the turret. The robot-centric version will be based on the tick values of the encoders on the turret's motor. Then, we will have the drivers choose which one they prefer. This we believe is effective, as it will allow for a more consistent use of the turntable for the driver.

    2- Move to Tower Height Articulations

    this is one of the more useful Ideas, which would be to extend the arm to the current height of the tower. How would we do it? Well, we have come up with a 2 step plan to do this, in different levels of difficulty. The first one is based on trig. We used the second controller to increment and decrement the level of the current tower. That value is then used in the extendToTowerHeight() method, which was written as the following:

    public void extendToTowerHeight(){ hypotenuse = (int)(Math.sqrt(.25 * Math.pow((currentTowerHeight* blockHeightMeter),2)));//in meters setElbowTargetPos((int)(ticksPerDegree*Math.acos(.5/ hypotenuse)),1); setExtendABobTargetPos((int)(hypotenuse *(107.0/2960.0))); }

    As you can see, we used the current tower height times the height of a block to get the opposite side of the triangle relative to our theta, in this case the arm angle. The .25 is an understood floor distance between the robot and the tower. This means that the arm will always extend to the same floor distance every time. We think this to be the most effective, as it means not only that the driver will have a constant to base the timing of the extension, but we minimize the amount we have to extend our arm. If we assumed the length of the hypotenuse, there would be overextension for lower levels, which would have to be accounted for.

    The next phase of the design will use a camera to continue to extend the arm until it doesn't see any blocks. not only will this allow for a faster ascension and more general use cases, It will eliminate the need for a second controller (or at least for this part.

    3-Auto-grab Articulation

    Finally, the last one that we came up with is the idea to auto-grab blocks. To do this we would use vison to detect the angle and distance that block is away from the robots back arm and extend to it. Then rotate the gripper, snatch it and reel it back.

    Next Steps

    Use a culmination of drive testing and experimentation to refine the robots movements and ultimately automate the robot’s actions.

    Turret IMU Code

    22 Dec 2019
    Turret IMU Code By Jose and Abhi

    Task: Code some driver enhancements for the turret

    With the return of the king(Abhi - an alumni of our team) we were able to make some code changes, mainly dealing with the turret and its IMU since that is our current weak point. At first we experimented with field-centric controls but then realized that for ease of driving the robot, turret-centric control are necessary. After a few lines of code using the turret's IMU, we were able to make the turret maintain its heading, as the chassis turn, so does the turret to maintain its position. This is useful because it will allow the driver to turn the chassis without having to turn the turret as well.

    Next Steps

    We must continue tuning the PID of the turret to allow for more stable and accurate articulations.

    Finger Gripper Version 4 CAD

    25 Dec 2019
    Finger Gripper Version 4 CAD By Jose

    Task: CAD a slightly different capstone version to improve upon v3's issues

    On this minor update to our flat gripper design a dropper for the latest capstone was added. Our capstone design (which can be seen here: E-65 ) is minimalistic to allow it to be placed on the gripper and only deployed until the last stone in the match is placed to cap it. The basic idea for this capstone dropper is to have a bar which has the number 6832 on it to match the 6832 indent on the capstone. This dropper will keep the capstone in place until the gripper is opened to beyond 45 degrees. To allow the gripper to actually close, a triangle was cut off the dropper as seen in the image above. Here is the final design:

    Next Steps

    Once the design is finalized(there may be a 5th version if a change is needed) this will be 3D printed and will replace the current gripper on the robot.

    Materials Test Planning

    26 Dec 2019
    Materials Test Planning By Bhanaviya

    Task: Create a system to test our materials to better understand their grip potential

    Here at Iron Reign, we're used to using off-the-shelf materials for our robot. For this season, these include silicon oven-mitts and ice-cube trays, since we find these grip skystones pretty well. However, we need to do a thorough investigation of these materials before we can determine their efficacy on the robot.

    Specifically, we plan to implement these parts on the underside of our gripper, to improve its friction when in contact with a stone. Our current gripper uses parts of ninjaflex gears but these aren't the most effective in picking up stones quickly. This is a bit of a concern since this year's game is so speed-based. As such, the time has come for us to replace the material on our gripper. However, before we can decide which material would have the best grip, we need to test them to determine their on-robot properties. To do this, we will implement a slip test as shown below.

    The main thing that we want to test is the amount of energy they have while rotating and then the amount of energy they lose upon collision. We plan to test this through the coefficient of friction of the mitts. Simply put, we will place the skystone on top of the of the silicon oven-mitts/ice-cube trays and will tape down the material being tested on a flat surface. Then, we will lift the surface and using simple inverse trigonometric properties, we will calculate theta, the angle at which the stone begins to slip from the material. The bigger the angle, the higher the friction coefficient of the material, which equates to it having better grip.

    Next Steps

    With our testing planned out, we will next begin documenting the angle at which the skystone slips from each type of material. The calculations from the actual testing, including the equation we used, will be inputted into a separate post.

    Code Developments 12/28

    28 Dec 2019
    Code Developments 12/28 By Cooper

    Task: Gripper swivel, extendToTowerHeight, and retractFromTowerHeight. Oh My!

    Today was a long day, clocking in 10 hrs continuously. In those ten hours, I was able to make tremendous progress. Overall, we have 4 main areas of work done.

    The first one gets it’s own blog post, which is the extendToTowerHeight, which encompasses fixing the 2nd controller, calculating the TPM of the arm, and calculating the TPD for the elbow.

    The second focus of the day was mounting and programming the swivel of the gripper. Aaron designed a swivel mount for the gripper the night after the qualifier, which was mounted on the robot. It was taken off by Aaron to finish the design and then today I put it back on, and then wired it. Once we tested to make sure the servo actually worked, we added a method in the Crane class that swivels the gripper continuously. But, since the servo is still a static one, I was also able to implement a toggle that toggles between 90, 0, and -90. With a couple of tests we were able to determine the correct speed at which to rotate and the code ended up looking like this:

    public void swivelGripper(boolean right){ if(right == true) gripperSwivel.setPosition(gripperSwivel.getPosition()-.02); else gripperSwivel.setPosition(gripperSwivel.getPosition()+.02); }

    The third development was the retractFromTowerHeight() method that was written. This is complementary to extendToTowerHeight, but is significantly less complex. The goal of this method was to make retracting from the tower easier, by automatically raising and retracting the arm, such that we don’t hit the tower going down. This was made by using a previously coded articulation, retract, with a call to setElbowTargetPos before it, such that it raises the arm just enough for the gripper to miss the tower. After a couple of test runs, we got it to work perfectly. The final order of business was the jump from ticks being used on the turntable to IMU mode. It was really out of my grasp, so I asked for help from Mr.V. After a couple of hours trying to get the IMU setup for the turret, we finally got it to work, giving us our first step to the conversion. The second came with the changing of the way the turntable moves, as we made a new low level setTurntableTargetPos() method, which is what everything else will call. Finally, we converted all of the old setTurnTablePos() methods to use degrees.

    Next Steps

    As of now both extendToTowerHeight() and the gripper swivel are good. On the retractFromTowerHeight(), it may be important to think of the edge cases of when we are really up high. Also, the turntable is unusable until we tune PID, so that will be our first priority.

    Extend to Tower Height and Retract from Tower

    28 Dec 2019
    Extend to Tower Height and Retract from Tower By Cooper

    Task: Develop the controller so that it can extend to tower height

    Since we have decided to move onto using 2 controllers, we can have more room for optimizations and shortcuts/ articulations. One such articulation is the extendToTowerHeight articulation . It takes a value for the current tower height and when a button is pushed, it extends to just over that height, so a block can be placed. This happened in 2 different segments of development.

    The first leg of development was the controller portion. Since this was the first time we had used a 2nd controller, we ran into an unexpected issue. We use a method called toggleAllowed() that Tycho wrote many years ago for our non-continuous inputs. It worked just fine until we passed it the second controllers inputs, as then it would not register any input. The problem was in the method, as it worked on an array of the buttons on the controller to save states, and there was conflict with the first controller. So, we created a new array of indexes for the second controller, and made it so in the method call you pass it the gpID (gamepad ID), which tells it which of those index arrays to use. Once that was solved, we were able to successfully put incrementTowerHeight() on the y button and decrementTowerHeight() on the x button. The current tower height is then spit out in telemetry for the second driver to see.

    Then came the hard part of using that information. After a long discussion, we decided to with a extendToTowerHeight() that has a constant distance, as having a sensor for distance to the build platform would have too many variables in what direction i t should be in, and having it be constant means the math works out nicely. So this is how it would look:

    Now, we can go over how we would find all of these values. To start, we can look at the constant distance measure, and to be perfectly honest it is a completely arbitrary value. We just placed the robot a distance that looked correct away from the center of the field. This isn’t that bad, as A) we can change it, and B) it doesn’t need to be calculated. The driver just needs to practice with this value and that makes it correct. In the end we decided to go with ~.77 meters.

    Then before we moved on we decided to calculate the TPM (Ticks Per Meter) of the extension of the arm, and the TPD (Ticks Per Degree) of the elbow, as it is necessary for the next calculations. For the TPM, we busted out a ruler and measure the extension of different positions in both inches (which were converted into Meters) and the tick value, then added them all up respectively and made a tick per meter ratio. In the end, we ended up with a TPM of 806/.2921. We did similar with the TPD, just with a level, and got 19.4705882353. With a quick setExtendABobLengthMeters() and a setElbowTargetAngle() method, it was time to set up the math. As can be seen in the diagram, we can think of the entire system as a right triangle. We know the opposite side (to theta) length, as we can multiply the tower height by the height, and we know the adjacent side’s length, as it is constant. Therefore, we can use the Pythagorean theorem to calculate the distance, in meters, of the hypotenuse.

    hypotenuse = Math.sqrt(.76790169 + Math.pow(((currentTowerHeight+1)* blockHeightMeter),2));//in meters

    From that, we can calculate the theta using a arccosine function of the adjacent / hypotenuse. In code, it ended up looking like this: .setElbowTargetAngle(Math.toDegrees(Math.acos(0.8763/ hypotenuse)));

    Then we set the extension to be the hypotenuse:

    setExtendABobLengthMeters(hypotenuse-.3683);

    While it has yet to be seen its effectiveness, it should at the very least function well, as shown in our tests. This will help the drivers get into the general area of the tower, so they can worry more about the fine adjustments. For a more visual representation, here is the position in CAD:

    Next Steps:

    We need to work on 2 main things. Tuning is one, as while it is close, it’s not perfect. The second thing to work on is using a custom vision program to automatically detect the height of the tower. This would take all the stress off the drivers.

    Testing Friction Coefficient

    28 Dec 2019
    Testing Friction Coefficient By Bhanaviya

    Task: Measure the coefficient of friction of our potential gripper materials

    We want to measure various constants of materials on our robot. These materials serve to improve the grip on our gripper. But before we can decide which material will be most effective on our gripper, we need to find the friction coefficient of these materials through a slip test. The slip test is detailed in a separate post in E-67. This article serves mainly to show the specific friction coefficient produced by each material in the slip test.

    To measure the coefficient of friction, we first had to simplify an equation to determine what values to measure.

    Based on these calculations, we realized that the best way to calculate friction coefficient would be by deriving the angle of incline at which the skystone begins to slip from the material, which is placed on a flat wooden board. If we take the length of the side of the board being lifted to be the hypotenuse, and the height at which the board is being lifted to be height, then theta, the angle of incline, is arcsin. As the board is lifted, the stone begins to experience slippage and the angle at which it slides off the material being tested will be marked as its friction coefficient. The higher this value, the more grip the material has.

    The materials we will be testing are a green silicon oven-mitt with hexagonal ridges, a red silicon oven mitt with small rectangular ridges, and an ice-cube tray with cubical ridges. The wooden board on which this the materials and skystone are being placed on has a length and width of 23.5 inches. This will be the hypotenuse for the purposes of this test.

    Green Silicon Oven-Mitt

    When the wooden board was lifted with this material on top of it, it took a height of 10.3 inches before the stone began to slip. Using arcsin, the angle of incline for this material was 26 degrees. By using the equation above, we can find that the coefficient of friction is tan(26) which 0.48.

    Red Silicon Oven-Mitt

    When this material was tested, the board had to be lifted 13.7 inches before the stone began to slip. The angle of incline for this material was 35 degrees so the coefficient of friction is tan(35) which is 0.7. Since this value is higher than the green oven-mitt, the red oven-mitt has the better grip.

    Ice-Cube Tray

    The board reached a height of 12.2 inches when the stone began to slip from the ice-cube tray. The friction coefficient for this material was 32 degrees, and its coefficient of friction was hence 0.66, putting it above the green oven-mitt, and slightly below the red oven-mitt in grip.

    Next Steps

    The material with the largest friction coefficient will be attached to the gripper on the robot. Since the red silicon oven-mitt had the largest angle of incline, this will be the material we will use in the next iteration of our gripper.

    Sliding Foundation Grabber

    28 Dec 2019
    Sliding Foundation Grabber By Trey, Jose, and Aaron

    Task: Design and create a more efficient and compact foundation grabber

    Moving the foundation throughout a match is an important part of the overall gameplay of a team. The builders on Iron Reign went through many different designs before reaching the one we have now. Early in the season, we simply settled for a simple hook attached to a servo on the front of the robot; however, this proved to be quite unstable. The foundation wobbled back and forth when the robot was in control of it and with this in mind, we went back to the drawing board. The second design we had in mind was a lot like the first but with two large, unwieldy, polycarbonate hooks that spanned at least four inches. These were often great at keeping a stable grasp on the foundation but they were made out of polycarbonate and flexed quite a bit and also were just too big in general.

    The design we have now consists of a sliding metal door that is controlled by a servo with a spool of string on it. The metal door models something of a guillotine that lifts to let the edge of the foundation in and then drops to secure it. This door, with its wide bottom, provides a great amount of stability and the base that its mounted to makes it so that the force inflicted by the foundation is passed into the base and then into the drivetrain. The fact that the grabber is not only attached to the servo but also fixed to the robot makes it so that the moving parts are less likely to snap or slip. And all of the components fit into a small space that should not be too much of an obstruction to the arm. Overall, this foundation grabber checks the boxes that the previous ones did not, It's compact, controls the foundation well, and definitely won't bend or snap.

    Next Steps

    No design for any part on any robot is perfect and this grabber is no different. The spool and string that is used to control the door is most likely temporary because there is probably a better way to open and close the door of the grabber. However, one thing that can and will be improved upon with the spool and string is that if provided with an upward force, the door of the grabber will open. This can be fixed by making the string on the spool continuous which will prevent this from happening by providing an opposite force, holding the door in place.

    Finger Gripper Version 2.1

    29 Dec 2019
    Finger Gripper Version 2.1 By Bhanaviya and Aaron

    Task: Replace the ninjalfex gears on the finger-gripper with a material with more grip.

    The finger gripper is the pinnacle of technological evolution, with class, durability and most importantly, metal. But it does lack one defining feature - grip. Currently, the underside of the metal plate on the gripper has parts from our ninjaflex gears used in Relic Recovery, and while it has all the refinement of an almost 3-year old part, it could be improved. Introducing the Finger Gripper 2.1, brought to you by Iron Reign. (although this change is being made after version 3 and 4 of our gripper, it is listed as 2.1 since 3 and 4 have only been designed in CAD and we are yet to translate this into a physical change.)

    On the matter of choosing which material to replace the ninjaflex gears with, we had 3 options to chose from. The first was a red silicon oven-mitt with rectangular ridges, a green silicon oven-mitt with hexagonal ridges, and an ice-cube tray with cubical ridges. To determine which material would work best, we put them a slip test, which can be found in E-69 . Of the 3 materials we tested, the red silicon oven-mitt had the largest friction coefficient. This makes sense, considering it had the sharpest ridges of the three, hence allowing it to grip the stone better. Hence, we replaced the material under our current finger gripper with a small piece from the red silicon oven-mitt. Although changing the material underneath the gripper seems like a minor design change, the improved grip will allow us to rely less on precision and more on speed during the actual game.

    Next Steps

    Next we will test the actual gripper to see if the material lives up to its results from the slip test. Once version 3 and version 4 of the finger gripper have been fully modeled we will print these designs and modify the gripper accordingly.

    Last Coding Session of the Decade

    30 Dec 2019
    Last Coding Session of the Decade By Cooper

    Task: Gripper swivel, extendToTowerHeight, and retractFromTowerHeight. Oh My!

    Today is the second to last day of 2019, and therefore the same of the decade. Thus, I want to spend it at robotics. Today I worked solely on vision testing and attempt of implementation. However they ended up being fruitless, but let me not get ahead of myself. To start the day, I tried looking at the example vuforia code that was provided. After which I hooked up a camera to the control hub to try any see it in action. We learned that in the telemetry, there are 2 lines of values spit out, which are the local position in mm and the XYZ values of the block. For the first bit of the day when we were testing, we thought to use the XYZ values, but they seemed to be unreliable, so we switched over to the local position. Once we had gotten that down and gotten a map of values of where the skystone would be, I tried to tailor the concept class to be directly used in our pipeline from last year, and then refactor all of it. But this didn’t work, as it would always throw an error and for the life of me I could not get it to work.

    Today wasn’t a complete waste, however, as I have learned a valuable lesson -- don’t be lazy. I was lazy when I just tried to use the example code provided, and it’s what ultimately led to the failure.

    Next Steps

    Take another stab at this, but actually learn the associated methods in the example code, and make my own class, so it will actually function.

    Assembling the Turntable Bevel Gears for a REV Motor

    31 Dec 2019
    Assembling the Turntable Bevel Gears for a REV Motor By Trey and Justin

    Task: Assemble the bevel gears to the turntable to fit a rev motor

    Today we assembled a second version of our bevel gear assembly for the turntable. Our previous design used an Andymark motor, which was very fast but couldn't provide enough torque for precise movement. The custom geared REV motors allow us to power the turntable with our desired torque. This is further explained in our Calculating Torque at the Turntable post dated 2020-01-01 . The Gobilda motor mount was designed to fit motors wit 6 evenly spaced mounting holes, while the new REV motors have 8. We decided that the most efficient solution was to mount a rev rail motor mount to the Gobilda channel. First we had to make sure the holes lined up and the motor shaft was centered in the channel; the holes lined up perfectly and centered the shaft in the channel. The sides of the motor mount were too wide and had to be cut to allow the mount to slide in the channel enough to line up the mounting holes. Due to the apparent standardization of mounting holes, we could easily mount our new motor to the gears. The rest of the assembly was just following the Gobilda instructions for assembling the bevel gears and bearings. We were ready mount the new motor assembly to the turntable.

    Next Steps

    Next we will remove the old motor assembly and replace it with the new one. We also need to test the strength of the mounting plate under the load of the turntable. We should also use the time with the turntable off to inspect the nylon gears for any wear.

    Control Mapping v2

    01 Jan 2020
    Control Mapping v2 By Jose

    Task: Map out the new control scheme

    As we progressively make our robot more autonomous when it comes to repeated tasks, it's time to map these driver enhancements. Since we have so many degrees of freedom with TomBot we will experiment with using two controllers, where one is the main controller for operating the robots and the second handles simpler tasks such as setting the tower height and toggling the foundation hook.

    Next Steps

    We need to experiment with the two-driver system as well as implement a manual override mode and a precision mode where all the controls are slowed down.

    Calculating Torque at the Elbow

    01 Jan 2020
    Calculating Torque at the Elbow By Bhanaviya

    Task: Design an equation to model the torque at the elbow linearly

    In order to maximize our robot performance, we need to be able to use motors and gears with the most ideal gear ratios. This means having the right amount of torque to produce the most efficient performance out of our robot arm. As the arm extends, there is quite a bit of torque on the elbow. We want to model this torque as a function which will allow us to better analyze how much rotational force is being exerted on the elbow and whether the gear ratio of the gears at the elbow could be improved by using a different gear set.

    The torque at the elbow is a dynamic variable that changes as the arm is extended further and further. As such, we decided to model this equation as a function. Torque is generally T = Frsin(theta). F is force which can be derived by multiplying the mass of the arm (m) with g, the acceleration due to gravity. g can be otherwise defined as g = G, the universal gravitational constant, * (m/r * r). r is the distance from the center of mass of the arm when fully retracted to the axis of rotation, which is, in this case, the elbow. This value can be defined by 170.4 meters. However, since the center of mass changes as the arm extends, r is not a constant and as such can be modeled as C + x, where C is the constant for the center of mass when the arm is fully retracted increasing by x, wherein x is the value in meters by which the arm extends. C can be defined by 2358.68 grams. As the arm is extended, the axis of rotation is in motion so theta, the angle in degrees between the vertical and the position of the arm changes linearly and as such, cannot be represented as a constant. However, since this angle is more difficult to derive, and since the angle between the position of the arm and the horizontal is already shown in the code for the controls operating the elbow, theta can simply be stated as 90 - theta_0, wherein theta_0 is the angle between the horizontal and the position of the arm. The torque due to gravity at the elbow can be represented as the function T = 2358.68 grams g(170.4 meters + x)sin(90 - theta_0) wherein theta_0 and x are parameters which can be taken from the articluation positions.

    Next Steps

    Being able to model torque as a function will allow us to understand how much torque is needed for the robot to stack a certain number of stones. By identifying the non-constant values of the torque function, we will be able to analyze what specific values produce the best robot performance, as well as whether that performance can be improved by lightening the load on the arm.

    Logarithmic Spiral Update

    02 Jan 2020
    Logarithmic Spiral Update By Ben

    Task: Update the Logarithmic Spiral

    As the design and build of the robot progresses, many components must be updated to be compatible with the current design. The logarithmic spiral, which was used to linearly decrease the load on the elbow with a bungee cord, is one of these. The article for the original design is numbered as the 45th post in the engineering section and is dated 15-11-2019. Prior to updating the design, the part would interfere with the drive shaft for the elbow. This typically wouldn't have been a concern, as it provided a safe way to limit the movement of the arm, yet we have determined that we need a greater range of motion. To do this, we simply cut a small half-circle out of the spiral. This was a relatively simple fix which would allow us to stack the blocks higher, scoring even more points.

    The next fix was the mechanism for attaching the bungee to the spiral. We plan to attach a bungee from both the front and back of the spiral to generate a greater rotational force. A design issue we encountered was running a bungee to the back of the spiral. There was no simple method for attaching and containing the bungee. To overcome this, we decided we would attach the bungee to a string from the back of the spiral. The final spiral design required two individual machined parts. Each part would have a chamfered edge, forming a channel when the two were put together, allowing the string to run within that channel. The two parts would be connected using three new holes to prevent the string from wedging itself between the two.

    The image below highlights the changes made to the original part. The chamfers along the edge were added along with three holes to connect two of the parts. The half-circle is also highlighted. These changes should enable us to assist the elbow in lifting the arm with greater efficiency than with the previous version of the spiral.

    Next Steps

    Our next steps are to machine the two parts and determine how much tension we need on the bungees to generate enough torque to assist the elbow.

    Calculating Torque at the Drive-Train

    02 Jan 2020
    Calculating Torque at the Drive-Train By Bhanaviya

    Task: Calculate torque at the drive-train and analyze our choice of motors

    During drive-testing, one issue we noticed was that our robot was not as fast as could be, and in a speed-based game, this is not ideal. So, we decided to calculate torque at the drive-train, which currently runs on two Neverest Classic 40 motors. Currently, we are looking to replace these motors with REV HD Hex Motors with a 3-part cartridge. As such, we will find the torque acting on the drive train with both these motors to identify whether replacing the motors is the best choice, and if so, what combinations of a cartridge we ought to use on the new motors.

    Currently, we have 4 gear sprockets for the two 8-inch wheels on the chassis. However, since these are all of the same gear ratio, they do not need to be included in the calculations to find torque. The Classic 40 Neverest motors have a ratio of 40:1 and a stall torque of 2.47 Nm, both of which are values which can be found in the individual part specifications. Using this information, we can find that the torque acting on the drive train to be 2.47Nm * 40 which is a total rotational force of 98.8Nm.

    The Neverest motors give a significantly high amount of torque so looking to reduce it would help us increase the drive-train's speed which is our intended goal. A good replacement would be the REV Hex motors with the planetary cartridge but choosing the type of cartridge is the challenge. Ideally, three 3:1 cartridges would give the least torque but this combination would lack too much control. Especially since our supply of these catridges is limited, we want to choose a combination which gives a "good" amount of torque but also produces a decent speed. Currently, the Neverest motors are not slow and we only want a little more speed on the drive-train. Taking this into account, we want to choose a combination which is closest to the 40:1 ration but still falls under it. So, a combination of 3:1, 4:1, and 5:1 cartridges would be the best choice since it provides a compounded gear ratio of 36:1. Considering the stall torque of the Hex motors to be 2.1 Nm, we can calculate the torque to be 2.1Nm * 36 75.6 Nm.

    Next Steps

    The hex motors with a 36:1 compounded gear ratio are not only the closest in ratio to the Neverest motors, but also have a significantly lower torque with enough to maintain good control. As such, we are going to replace the our current motors on the drive train with this specific cartridge. If we find that the drive-train's performance could be improved, we will find more cartridge combinations or go altogether with a different motor to improve control.

    Calculating Torque at the Turn-table

    02 Jan 2020
    Calculating Torque at the Turn-table By Bhanaviya

    Task: Analyze torque at the turn-table and how it affects our choice of motor sets

    We want to know if we are using the best possible motor set on our turntable. Since our turn-table is programmed to rotate at the fastest possible speed, we are not too concerned with a motor that turns faster but rather one that has a higher level of control and produces a higher output torque. A faster turret gives us less control when we are turning on the field and we want to reduce the time we spend trying to get the turntable in the right orientation. So, it's time to replace its motors. Currently we are using a Neverest orbital motor on the bevel gear on the turret which has a stall torque of 0.23Nm. With a torque this low, we are not utilizing the turret to its maximum capability. We want to replace this with a REV HD Hex Motor with a double planetary cartridge. REV offers a manual which allows the user to see the exact gear ratios and output torque produced by each combination of cartridges. Based on the cartridges we have right now, two 4.1 cartridges have the highest output torque as per the manual. But we don't want to replace our current motor just yet, until we calculate the exact amount of torque and analyze whether this is a good amount.

    The gears operating the turntable are an 8:1 pinion gear and a 2:1 bevel gear. Thus, their compounded gear ratio is 16:1. Using this, we can find the output torque produced by our current motor which can be found by finding the value of 16 * 0.23Nm * 3.7 which gives us an output torque of 33.6. Now, this value can be higher so if we switch out with the double staged 4.1 HD Hex Motor, we get a compounded gear ratio of around 13.1, according to the REV manual. The stall torque for these motors are 2.1Nm which is significantly higher than the amount produced by the orbital motor. Plugging both these values and the 16:1 gear ratio of the turntable gears, we can find that the output torque produced by the turntable REV planetary motors can be found using the equation 16 * 2.1Nm * 13.1, which equates to 440.16 Nm.

    Based on these calculations, we can find that the planetary motors produce a significantly higher amount of torque and will give our turntable much more control and precision when operated. This amount of torque may cause some concern on how much the slower the turntable will be; as such, we also calculated the linear speed of the turret. To do this, we have to find the rotations per minute (RPM) of each motor. The no load RPM for the 3.7 motor is 1780 RPM. By dividing this by its gear ratio, we can find the RPM which is 1780 RPM/3.7Nm which is equal to 481.08m/s. As for the REV motor with more torque, its no-load RPM is 6000 RPM and when divided by its gear ratio of 13.1, we get a linear speed of 458.02m/s.Although this is a lower linear speed, the difference is very little, showing that the new 13.1 motors will not reduce our speed by much but will have a much larger effect on the output torque of the turret, thus maximizing the turntable's efficiency.

    Next Steps

    Since we determined that our current turntable motor needed to be replaced, our next step was to make the physical switch on our bevel gear system on the turret. However, we are yet to test how much of an improvement the replacement will be so that will be our next goal. If we find that the motor set can be further replaced then we will use calculations similar to the ones in the article depending on whether we want to reduce or increase torque. Our next qualifier is this upcoming Saturday, so the new motors should improve our turntable control for the match-play portion.

    Testing Two Drivers

    04 Jan 2020
    Testing Two Drivers By Justin and Aaron

    Task: Practice driving with two drivers

    Today we started testing out our new two controller setup. The goal is to have one driver control just the base, and have the other driver control the arm and turret. With the early stage of the 2 driver code, we were able to practice maneuvering around the field and placing blocks. unfortunately the code wasn't completely sorted, so the turret controller lacked many features that were still on the drive controller.

    An issue we noticed at first was that the drive controls were backwards, which was quickly fixed in code. After the robot was driveable, we spent most of our time practicing picking up blocks and testing out new code presets. Throughout the day we transferred functions between controllers to divide the workload of the robot into the most efficient structure. We found that whoever controls the base should also be responsible for placing the arm in the general area of where it needs to be, then the turret driver can make fine adjustments to grab and place blocks. This setup worked well and allows us to quickly grab stones off the lineup shortly after auto.

    Next Steps

    Next we will practice becoming more fluid with our driving and look for more common driving sequences that can be simplified to a single button.

    Driver Optimization Developments 5/1

    05 Jan 2020
    Driver Optimization Developments 5/1 By Cooper

    Task: Improve driver optimizations

    Today we worked on driver optimizations, since Justin was here. We changed around the controls for the arm to be more like the drivetrain and the D-pad on controller 1, with the left stick by controlling the elbow, the x controlling the turret, and y on the right stick to control the extension of the arm. This was cited to be more natural to the drivers than the previous setup. Then we tuned the PID values for the turret, while also reducing the dampener coefficient of the controller for the turret. Though here we ran into some issues with the dead zone rendering the entire axis of the given controller stick useless, but we shortly fixed it. There was also a problem with our rotateCardinal() method for the turret that we fixed by redoing our direction picking algorithms. Finally, I worked on tuning auto just a tad, but then had to leave.

    Next Steps

    Analyze more driver practice to get more concise controls for the driver, and finish auto.

    Drive Practice 1/6

    06 Jan 2020
    Drive Practice 1/6 By Justin and Aaron

    Task: Practice driving with new code

    Today we worked on driving the robot with new presets. Over the weekend, our coders worked on new presets to speed up our cycling time. The first preset the drivers learned was the cardinal directions, which allows the base driver, but potentially both drivers to quickly rotate the turntable 90 degrees. This made switching from intakeing to stacking directions very fast. To further speed up our stacking time, our coders implemented a stack to tower height, which allows the driver to set a height and the gripper will raise to it. This took a lot of practice to correctly distance the robot from the foundation for the preset to reach the tower. To avoid knocking over our own tower, we decided that the arm driver should stop the 90 degree rotate before it fully turns, so when the arm is extended it goes to the side of the tower, so the driver can rotate the turntable and still place the stone.

    We also worked on dividing the control between the two drivers, which involved transferring functions between controllers. We debated who should have turntable control and decided the base should, but we would like to test giving the turret driver control. The extend to height controls were originally on the drive controller but were moved to the turret to allow for a quicker extension process. The gripper wobble greatly slows down our stacking, even after dampening it.

    Next Steps

    Our next steps are to practice driving for our next qualifier and modify our gripper joint. A lot of our robot issues can be solved with enough drive practice. We need to start exploring other gripper joint options to allow it maintain orientation but not sway.

    Dissecting the Turret

    09 Jan 2020
    Dissecting the Turret By Karina and Cooper

    Task: Figure out why the turntable isn't turning

    Just as Iron Reign was at the point of getting driver practice started and hunkering down to do autonomous, the turntable stopped working. The issue was that there was heavy skipping of teeth between the planetary gear and pinion gear which drove the turntable. Still, there was no obvious reason for why the gears had suddenly disengaged.

    To get to the root of this issue, we took to dissecting TomBot. We had to detach the metal frame which supported the turntable from the chassis just to get a better view of the problem area.

    Ultimately we chalked it up to the metal plates shifting on the polycarbonate circle of the turntable from all the movement. Our solution was to shift everything on the turntable over a small amount in the direction of the point along the planetary gear where the pinion gear engaged so that there would not longer be skipping. We got to work with but drivers and pliers to detach the turntable attachments from the turntable, and then the slip ring, and then the circular polycarbonate plate from the mass of motors, wiring, gears, linear slide, and the gripper that make up the arm. Once we had the circular polycarbonate plate isolated, we used a dremel with a drilling bit to widen the holes through which the bolts attached the entire arm system to the plate. We figured shifting out the turret may alleviate the issue.

    Next Steps

    We will have to find a more solid solution for this in the event that this becomes a recurring problem. I suspect that the underlying cause is that the materials that we used for either printed planetary gear or the polycarbonate plate upon which the whole arm rests could not handle the stress of the torque and speed of the turntable. Going forward we can conduct some material strength tests to determine if they can handle the stress, or if we should find a replacement. To be frank, even after dissecting Tombot, we were not certain about the cause behind the planetary gear disengagement.

    Finger Gripper Morph Chart

    10 Jan 2020
    Finger Gripper Morph Chart By Jose

    Task: Create a morph chart to analyze all our 3-finger gripper versions so far in this season.

    Just like with our gripper designs, we've also gone through a number of changes with our final gripper - the 3 Finger Gripper. This calls for one thing - a morph chart! A morph chart shows us the various subsystems of the 3-finger gripper as it went through its different stages of design. The left axis addresses each part of the gripper like its grip material, back fingers, front finger, and capstone deployer. The right axis shows the different versions of each component visually. Right now, we are at a whopping 4 versions of the same design with 3 grip materials, 3 back and front fingers, and 2 different capstone deployer designs. The latest version has REV Extrusions, a GoBilda plate for the fingers, a red silicon oven-mitts for the grip material (and for helping with the turkey, of course), and no capstone deployer just yet.

    Next Steps

    By putting all of our grippers in one chart, we can see how our gripper has evolved from its humble beginnings, and lets us see which ideas we could possibly recycle. To read about our comprehensive gripper morph chart, visit our article on Gripper Designs Morph Chart. As the finger-gripper undergoes more modifications, we will create another, more updated morph chart later on.

    Auto Developments at the STEM Expo

    18 Jan 2020
    Auto Developments at the STEM Expo By Cooper

    Task: Improve autonomous and tune IMU

    During the STEM Expo, while also helping volunteer, we worked on auto. There were a series of cascading events that were planned and completed. The first of which was to calculate the TPM of the base. There was, however, a problem before we did that. Our robot has a slight drift when trying to drive straight, which could be solved by driving based off of the IMU. However, we had discovered a couple of days ago that it doesn’t run. This made no sense, until a critical detail was uncovered -- it sets active to false. With this knowledge, Ahbi sluthed that the action was immediately being completed, since it was in an autonomous path. We then took a break from that and calculated the TPM a different, and far less complex way- we drove it a meter by hand and recorded the tick values. After we did that, we averaged them up, and got 1304, which in the end we decided to use, since just after that Ahbi figured out the problem with the driveIMU() method, and it went perfectly a meter. The issue was rooted in one wrong less-than sign, which was in the if statement to detect if we had gotten to our destination yet.

    Next Steps:

    This is the first time we've actually tuned auto since the UME Qualifier, but now that Mahesh is trying to implement Vision, we plan to improve the sensor capabilities of our robot as well.

    Code Changes At STEM Expo

    18 Jan 2020
    Code Changes At STEM Expo By Mahesh, Cooper, and Abhi

    Task: Use Vuforia To Detect Skystones And Tune Ticks Per Meter

    This Saturday, we had the privilege of being a vendor at the Annual DISD STEM Expo. While this event served as a good way for us to showcase TomBot at our booth, it also gave us the much-needed chance to experiment with vision. With this year's game rewarding 24 points for locating skystones and placing them onto the foundation, vision is an essential element to success. To detect skystones, we could have gone down three distinct paths: OpenCV, Vuforia, or Tensorflow.

    We chose to use Vuforia instead of Tensorflow or OpenCV to detect skystones since the software gave the rotation and translation of the skystones relative to the robot's position, which could then be used to determine the position of the skystone, either left, center, or right. Additionally, Vuforia has proven to work under different lighting conditions and environments in the past, whereas Open CV requires rigorous tuning in order to prove flexible for a variety of field settings.

    The second major task we worked on during the STEM Expo was calibrating ticks per meter. The issue we encountered when driving both wheels forward a set number of ticks was that the robot drifted slightly to the right, either meaning that the wheels are misaligned or that one wheel is larger than the other. To fix this issue, rather than tuning PID Coefficients, we figured out a separate ticks per meter measurement for both wheels, so that one wheel would move less than the other to account for the difference in wheel diameters. After experimenting with different values and tuning appropriately based on results, we arrived at a ticks per meter number for each wheel.

    We could have used a more mathematical approach for calculating ticks per meter, which would be equal to (ticksPerRevolution * driveGearReduction) / (wheelDiameter * PI), with "wheelDiameter" being measured in meters. However, this solution would require a very precise measurement of each wheel's diameter, which our caliper is not wide enough to measure. Additionally, this solution would not account for wheel slippage, and for these reasons, we chose the latter approach.

    Next Steps

    Unfortunately, the vuforia vision pipeline did not work at the STEM Expo, which may be a result of bad lighting or some other code error. Moreover, constants such as the camera's placement relative to the center of the robot have not been measured as of now, which is a task for the future. In order to make sure vuforia is working properly, we should send the camera's feed into FTC Dashboard in order to debug more effectively and pinpoint the issue at hand.

    For last year's game, three different vision pipelines were used, Tensorflow, Vuforia, and OpenCV, and all three were compared for their effectiveness for finding the positions of gold cube mineral. This strategy can be employed for this year as well, since building a robust OpenCV pipeline would be impressive for the control award, and comparing all three options would give us a better idea as to which one works most effectively for this year specifically.

    Snapdragon - The Beginning

    19 Jan 2020
    Snapdragon - The Beginning By Bhanaviya and Aaron

    Task: Begin our 10th gripper design

    As you could probably tell from our plethora of gripper articles, here at Iron Reign we have one too many grippers. And now its time for another one! We could do a whole post-mortem analysis on what went wrong about our build at our last qualifier, but for the most part, the design was consistent, with one underlying exception - our gripper. The finger gripper was a revolutionary piece of work, and has gone through a whopping 4 different iterations. But as all good things, its time must end. The issue was that the finger gripper lacked precision when it turned and was not quick enough in picking up blocks, requiring excessive control on the drivers' end to be able to focus on a stone and pick it up. In a speed-based challenge like this year's, this was not ideal, so it had to go.

    A slapband in action

    In it's place stands the Snapdragon, its quicker, more rugged replacement. The snapdragon functions as a passive gripper - at its core, it works as a slapband would. A slapband is, simply put, a wristband that wraps around one's wrist when slapped with enough force. Similarly, the snapdragon's closing action is an elastic-powered snapping action that is physically triggered when the gripper is lowered onto a stone. It's ability to grip is a direct result of the lower metal "flap" below the larger rectangular plate above. The effectiveness of this flap relies on the precise placement of rubber bands holding the flap to the plate above it. However this also means that the plates must be triggered in a very specific manner so that the gripper closes down at the right time.

    Next Steps

    The beauty of the snapdragon relies on its ability to be self-triggered. However, it would still need to be reset after "snapping". This would require use of a servo. The servo would need to be able to close down on the stone, but this also means that the movement of the gripper needs to be controlled such that it does not snap upon contact with any other surface. Trying to find a balance between this passive action and the servo's movement will be our primary task since the gripper isn't ready to be mounted yet.

    Engineering Notebook Binder CAD

    20 Jan 2020
    Engineering Notebook Binder CAD By Jose

    Task: CAD an engineering notebook binder that is to be custom made

    We want to utilize our new CNC as best as we possibly can. Since we plan to CNC the second version of our current robot TomBot for regionals, the only companion that could serve a CNC-ed robot is a CNC-ed engineering notebook! Plus an aluminum-plated journal would also help us emphasize the iron part of our name to the judges (hi there, if you're reading this!). The first step is to make a CAD file for this binder which is what we have shown above. The most custom part is the cover, it features our team logo, name, team number and even outline of our robot. As per GM1, we can have 2 engineering notebooks so we will make 2 custom notebooks, one that reads "Engineering Section" and another that reads "Team Section". We plan to use piano hinges to joint all the panels of the binder, use polycarbonate as pockets, and steal some binder rings from other binders to be used for these. The panels of the binder will be made of aluminum and the cover will be carved out using our CNC.

    Next Steps

    The outline of our robot, TomBot, may be changed in the future but other than that all we need is to CAM the binder CAD to be able to make it using our CNC. Once the journal is printed, all that's left to do is add the rings, panels, and pockets to the actual binder.

    Snapdragon - The Sequel

    24 Jan 2020
    Snapdragon - The Sequel By Bhanaviya and Aaron

    Task: Improve the precision of the Snapdragon.

    Last week, we prototyped a new gripper called the Snapdragon. Now it's time to give it more complexity. The Snapdragon is a passively-triggered gripper which closes down on a stone upon an impact-heavy contact with it. The main issue we're focused on solving is the impact which triggers the gripper - the gripper needs to be able to close only upon contact with the skystone and not with any other surface. To solve this problem, we added the servo horns, which make the snapdragon look like an actual dragon, for an increased comedic value. Before the servo horns, an abrupt stop by the metal plate of the gripper and the momentum of the "flap" below it were needed to grip a stone but this requires too precise placement of plates. With the addition of the servo horns, the servo horns physically trigger the drop so that the rubber bands holding the gripper in place can be tighter and have more grip.

    In addition to the servo horns, we will also be using a capstone dropper. The capstone dropper is mounted between the two servo horns, and has three small wired which will go through a hole at the base of the capstone. The dropper will be pre-loaded with the capstone and be released during the endgame. The capstone dropper has not yet been tested but we will get to that once we have controls to release the capstone.

    Next Steps

    We need to test the Snapdragon's new version extensively so that our drivers can get a feel for it. Next, since this is a passive gripper model, it would need more grip, so we also need to conduct materials testing on more materials to determine which material has the best grip and can be mounted on the gripper.

    Coding the Snapdragon Gripper

    25 Jan 2020
    Coding the Snapdragon Gripper By Cooper

    Task: Code the new Snapdragon gripper

    Last night we installed the new Snapdragon gripper, which means we needed to re-work the gripper code. We started out by getting the positions the servo would go to using a servo tester. Then we decided whether to make it an articulation, which originally we did. This articulation would set the servo to pull up the gripper front and then return to its relaxed position. After doing some testing, that method was not working.

    So, we moved on to reformatting the gripper update sequence we had for the last gripper. There we still saw no success after that. So, we decided to call it a night, as it was getting late. The next morning, with a clear mind, we realized that the wire connection was flipped on the perf board, wherein after flipping it it worked fine.

    Next Steps:

    We still need to test it with drivers, see if there are any quirks.

    TomBot Calibration Sequence

    31 Jan 2020
    TomBot Calibration Sequence By Cooper

    Task: Create a calibration sequence to find a starting position for autonomous

    Today we worked on the calibration sequence. This has been a problem for awhile now, as the robot has so many degrees of freedom, and not a single flat edge to square off of (other than the guillotine, but that isn’t necessarily orthogonal to anything), it is rather difficult to come up with some way to ensure precision on startup, and this year its integral to the auton.

    To start, the arm is in need of a good way to calibrate. In theory, we have a couple of constants. We have a hard stop to the elbow, thoughtfully provided by the logarithmic spiral. We also can get the ticks from that position to a point that we define as zero. In terms of extension, we have a hard stop on the full retract, which is really all that is needed. So, we start by retracting the arm and increasing the angle of the elbow until it stalls, and we set that as the 0 for the extension. Then, we go down -elbowMax while extending the arm, such that it doesn’t hit the robot, and quickly set that elbow position as the 0 for the robot.

    Previous to this revision, we had different juxtapositions of the robot in terms of the arm and the base, because we couldn’t figure out what was the best compromise of precision and ease. This time around, we decided to have the robot and the arm face the north wall. In this way, the north is common between both alliances and sides, and we can just tell it with a button push which alliance it’s on. So, with that in mind, the next steps of the calibration are to raise up the arm and turn to be orthographically square with the wall. Then, it uses a driveIMUDistance to go back and tap the wall. This is how this sequence will probably stay relatively similar throughout the rest of the time with this robot, as this seems to be what we’ve been trying to achieve for awhile now. There, however, are still things that could be added.

    Next Steps

    In the future, we could add a magnetic limit switch between the turret and the base, so we can automate turning the turntable to the correct position. Also, we could add distance sensors to the (relative) back, left and right, as to ensure that were in the correct position based on the distance to the wall.

    Updated Bill of Materials

    01 Feb 2020
    Updated Bill of Materials By Bhanaviya and Paul

    Task: Update the list of parts for TomBot for regionals

    Being around 2 weeks away from the North Texas Regional Championship, Iron Reign has made significant new changes to its Bill of Materials. s of now, TomBot has several build issues that will be discussed in our post-mortem posts. Part of rectifying these issues includes ordering/printing more parts and editing the bill accordingly. But the beauty of the bill of materials relies on the fact that we will be building our second, improved version of TomBot soon - a little after regionals - and having a corresponding bill will streamline this process. We would like to iterate that regardless of whether we qualify at the Regional Championship, Iron Reign's build season will not end with the competition, We plan on furthering ourselves in our build season by creating a more custom version of TomBot, one which incorporates as many custom-cut parts from our CNC mill as possible, and documenting all of our existing parts allows us to better analyze which parts we can possibly custom-cut.

    Next Steps

    We will update the bill after regionals, once we've finalized which parts we can custom-cut and which subsystems need a complete change. As of now, since we've shifted over to a new gripper, this was a big change we had to highlight in the bill and we will continue to do these with our other updated subsystems.

    Friction Coefficient and Energy

    02 Feb 2020
    Friction Coefficient and Energy By Trey

    Task: Calculate the friction coefficient of various off-the-shelf materials

    Before our last qualifier, we ran a couple material tests to find the friction coefficient of different materials. Now, since we've upgraded to a new gripper - the Snapdragon - a passive-intake gripper - we will need a newer material with much better grip than the ridged silicone oven-mitt we used for our previous 3-finger gripper. Since our new gripper works by slapping onto a block and clasping it, a better grip material will allow the skystones to latch more easily. As such, we ran a new series of materials tests to find a better material.

    The materials we are testing are a blue ice cube tray, a green oven mitt, a red oven mitt, a black shelving liner, a rubber cement pad, and a plate dipped in Plastidip. Three of these materials we have already tested before, which you can read about in Post 69 of our Engineering Section, but we will still conduct another test on them to keep our values in the new test consistent. The surface we are using is a 24in*24in wooden board. To conduct the tests we put a block on the selected material at the top of the board on its side and its bottom. Then we lifted the board while the block was placed in both positions and measured the height of the top of the board from the ground. We used the average of the heights in both positions to calculate the angle that the board was at using some simple trigonometry seen below. Then we used the friction coefficient equation which you can learn more about here in post 66 of our Engineering Section.

    Blue Silicone Ice Cube Tray

    When the wooden board was lifted, with this material keeping the block on it took 11.5 in until the block started to slide off. Using the equation: sin(θ)=O/H to calculate the angle at which the board was tilted which was 28.63°. Then, using the equation tan(θ)=friction coefficient, we found that the friction coefficient of the blue ice cube tray was 0.55.

    Green Silicone Oven Mitt

    We did the same thing that we did for the blue ice cube tray as we did for the green oven mitt. We lifted the board 12.75 in before the block slipped, which translates to a 32.09° angle, and a friction coefficient of 0.63. This is slightly better than the Blue ice cube tray but not the best by far.

    Red Silicone Oven Mitt

    We ran the same tests on the red oven mitt, the material we have on our robot now, and it was raised 12.5 in before the block started to slip which means that the angle was 31.39° and the friction coefficient was 0.61. This makes it an ok material just like the ice cube tray and the other oven mitt. If we were to use these materials, the grip of the robot would be fine; however, the testing of the materials is not about finding an acceptable material, it is about finding the best material.

    Black shelving liner

    This material was one of the best by far, with a height of 16.5in. The height translated into an angle of 46.43° and a friction coefficient of 0.96 which is a very high friction coefficient. This explains why this material is used on many robots like ours that want to effectively grab blocks. Another interesting note of this material was that unlike, every other material when this material surpassed its limit it didn’t slowly slide down, but it just fell all the way down the board all at once.

    Rubber cement pad

    The rubber cement pad was the most interesting and most effective material. It was made by freeze-drying some rubber cement in a mold. When it was dry it has the friction of a sticky hand. We lifted the board 18 in before the block slipped. That means that we had to lif the board at an angle of 48.59° which means that the friction coefficient was 1.13. The only downside to this material is that it has to be cleaned before match to get the best results out of it. Plastidip. This material was not very good. For one, It does not look very clean because of how clumpy it is. It also only had a height 12 in when the block started to slip, which means that the angle was 30° and the friction coefficient was 0.58.

    Next Steps:

    With these numbers in mind we are now able to decide which material we are going to use on the gripper which is going to be the rubber cement. We also know that for future seasons we can use both the shelf liner and the rubber cement to grab game elements. We are also going to continue to calculate the friction coefficient of different materials so that we can make sure that the Snapdragon gripper is the best it can be. This includes Geko Tape which we might use in the future.

    Cumulative Drive Test Log 2/3 - 2/6

    06 Feb 2020
    Cumulative Drive Test Log 2/3 - 2/6 By Jose, Justin, and Aaron

    Task: Summarize the driver practice done throughout the week

    Over the course of the following week we have done much driver practice so we can improve our skills as drivers and also make some driver enhancements. On Monday we reached an average of 3.7 stones per match - this includes the endgame procedures but not the stones delivered during the autonomous period. We had a rhythm of driver 1 controlling the drive to have the wheels parallel the driver station wall while grabbing a stone and perpendicular when stacking. Both these alignments help driver 2(who controls the arm) stack much easier.

    On Wednesday we increased our average stones per match to 4.5, with more fine tuning on the movement between the zones and increased coordination we can keep decreasing cycle times. Finally, today we achieves a 5.4 average stones per match, although not very competitive, we are playing with no autonomous or alliance partner. We also got the idea of having a button to automatically raise the arm up and slam down to grab a stone. Since the gripper works similar to a mouse trap, all we need is force to close it and the process of getting this force can be sped up dramatically.

    Next Steps

    To continue to decrease our cycle times we can keep adding driver enhancements as well as learning to coordinate between the two drivers. These improvements will show up in a later post when implemented.

    OpenCV Grip Pipeline

    06 Feb 2020
    OpenCV Grip Pipeline By Mahesh

    Task: Develop An OpenCV GRIP Pipeline To Detect Skystones

    With this year's game awarding 20 points to teams than can successfully locate Skystones during autonomous, a fast and reliable OpenCV Pipeline is necessary to succeed in robot game. Our other two choices, using Vuforia and Tensorflow, were ruled out due to high lighting requirements and slow performance, respectively.

    With many different morphological operations existing in OpenCV and no clear way to visualize them using a control hub and driver station, we used FTC Dashboard to view camera output and change variables realtime. This allowed us to more rapidly debug issues and see operations on an image, like in a driver controller and expansion hub setup.

    To rapidly develop different pipelines, we used GRIP, a program designed specifically for OpenCV testing. After experimenting with different threshold values and operations, we found that a 4 step pipeline like the following would work best.

    The first step is a gaussian blur, used to remove any noise from the raw camera output and smoothen the darkness of the black skystone. Next, a mask is applied to essentially crop the blurred image, allowing the pipeline to focus on only the three stones. An HSV threshold is then applied to retain colors which have low values; essentially black. Afterwards, a blob of white pixels appears near the black skystone, who's center can be determined by using a blob detector, or even by finding contours, filtering them appropriately, and placing a bounding rectangle around them, then taking the center of that rectangle to be close to the centroid of the black skystone blob. Here is a visual representation of each stage of the OpenCV pipeline:

    Next Steps

    The next and only step is to integrate the GRIP pipeline with our existing FTC Webcam capture system, which uses Vuforia to take frames, and decide which x-coordinates of the skystone coorespond to which positions of the skystone. Specifically, we have to take the width of the final images and divide it into three equal sections, then take the boundaries of those three sections to decide the location of each skystone.

    Control And Vision DPRG Presentation

    08 Feb 2020
    Control And Vision DPRG Presentation By Mahesh and Cooper

    Task: Present Control And Vision To DPRG And Gather Feedback

    This saturday, we had the privilege to present our team's Control and Vision algorithms this year to the Dallas Personal Robotics Group. During this event, we described the layout of our robot's control scheme, as well as our OpenCV vision pipeline, in order to gather suggestions for improvement. This opportunity allowed us to improve our pipeline based on the feedback from more than a dozen individuals experienced in the designing, building, and programming of robots. We were able to demo our robot on a playing field, showcasing the mechanics of its design as well as semi-autonomous articulations to help improve driver performance.

    Here are is the slideshow we presented to DPRG:

    For this year's game, we chose a four step vision pipeline to detect skystones, which comprised of a blur, followed by a mask, then an HSV threshold, and finally a blob detector to locate the centroid of the black skystone. Although this pipeline worked fairly well for us, differences in lighting and the environment we are competing in may result in varying degrees of inaccuracy. To combat this, the DPRG suggested we used some kind of flash or LED in order to keep lighting of the stones consistent throughout different settings. However, this may result in specular reflections showing up on the black skystone, which will interfere with our vision pipeline. Another suggestion thrown was to detect the yellow contours in the image, and crop according to the minimum and maximum x and y values of the contour, allowing us to focus on only the three stones on the field and discard colors in the background. This suggestion is particularly useful, since any tilt of the webcam, slight deviation in the calibration sequence, or skystones lying outside the boundaries of the mask will not affect the detection of skystones.

    Next Steps

    The most significant input that DPRG gave us during the presentation was the cropping of skystones based on the size of the yellow contour present in the input image, allowing us to detect the black skystone even if it lies outside the mask. To implement this, we would have to test an HSV threshold to detect yellow contours in the image using GRIP, filtering those yellow contours appropriately, and cropping the input image based on the coordinates of a bounding box placed around the contour. Although this addition is not absolutely necessary it is still a useful add on to our pipeline, and will make performance more reliable.

    Final Weekend Before Regionals - Meeting Log

    08 Feb 2020
    Final Weekend Before Regionals - Meeting Log By Anisha, Cooper, Trey, Paul, Aaron, Bhanaviya, Karina, Justin, Shawn, Mahesh, Jose, and Ben

    Task: Use feedback from our presentation at DPRG and get ready for regionals

    A couple hours ago, we presented our robot at the Dallas Personal Robotics Group (DPRG), and we received insight on not only our robot, but also on our presentation, codebase, and our engineering journals. With this feedback in mind, and considering that we have a week before regionals, Iron Reign returned to the RoboDojo to do what we do best - panic, cram at the last minute, and repeat. (For reference, all our subteams will go into detail about their version of the scramble before regionals in separate posts. This is just a broader summary of our meeting).

    Today, the Code team mainly worked on improving driver controls, improving the implementation of a GRIP pipeline, and finalizing our autonomous path before regionals. Having just returned from presenting the works of our code-base at the DPRG presentation, the code team gained more insight on improving TomBot’s autonomous which will be their focus leading up to regionals.

    The Build team worked on Plasti Dipping the bottom of the foundation grabber for better grip when dragging the foundation. Plasti dip forms a layer of rubber on top of whatever’s being dipped in it and makes it stickier. Unfortunately later on, problems were discovered with the turntable. There had previously been cracks in the turntable from previous driving incidents but now they had gotten worse and were interfering with TomBot’s wheels. Because of a part of the turntable hanging off, the chain was being interfered with and stopping the robot. This was one of the most important tasks to do because obviously, without a functioning robot, there ain’t gonna be dubs at the competition.

    Before the problems with the turntable revealed themselves, our drivers got a decent amount of driver practice. They mainly focused on stacking as fast/efficient as possible. Towards the end of practice, they were also able to train new members of the team on driving. During practice, they also collaborated with the coders on improving the controls.

    The editorial team mainly focused on adding some finishing touches to the judging presentation after getting some great feedback from the Deloitte, and DPRG presentations (both of which have separate entries in our team section). They also worked on creating a research poster and a timeline of our notable events this past season to display at our pit during regionals.

    The design team mainly worked on improving the polycarb base of TomBot’s drive-train to CNC after regionals. To claify, our team is planning on creating a fully CNC-ed version of TomBot after regionals, regardless of whether we qualify to the next level of competition. As such, finalizing the CAD designs of each robot system will better prepare us to CAM these parts to create the next version of our robot. However, we currently plan to still replace the current polycarb base with the custom one since as mentioned earlier, our current base is not in the best shape. The design team also worked on creating a model of our pit design for regionals, which you can see down below. Having a well-organized pit benefits both us and any pit visitors, and regionals was no exception. Finally, they also worked on the CAM of the binder for both our Team and Engineering Sections, which will be custom-cut in aluminium using our CNC mill. For more information on the to-be CNC-ed binder, you can take a look at the “Engineering Notebook Binder CAD” post.

    Next Steps

    Although we had a significant amount of progress today, there's still plenty to do. Over the next weelk, our main goals will be finalizing our autonomous, getting our binder and new polycarb base manufactured, and ensuring that our journals and posters are ready to print for regionals.

    Designing a New Build Plate

    09 Feb 2020
    Designing a New Build Plate By Ben

    Task: Model and CNC a new build plate for TomBot

    The renowned architect Frank Lloyd Wright once said, “The longer I live, the more beautiful life becomes.” This, however, is not the case for our build plate. Throughout the course of the season the plate has seen extensive use and has endured much abuse, which can be seen in the large cracks forming on the plate. Although there are many temporary remedies, such as attaching plates to hold it together. These are not permanent solutions and not only appear bad, but can only temporarily reduce the problem, as more cracks will inevitably form.

    The first build plate was cut from Polycarb on a bandsaw from a pattern. This process resulted in many imperfections and uneven cutting, subtracting from the sleek circular design. This second time around we’re going to completely CNC the whole plate, including the wholes for bolts and wires. Using a CNC ensures a greater precision and guarantees a higher quality build plate.

    Cracks weren’t the only problems facing the first build plate. Drive testing revealed a major flaw with the design, the flaps that folded down from the plate were too short, causing the foundation to get stuck under the robot during matches. This is obviously undesirable as no one likes a robot who drags a giant plastic plate around the whole match. To fix this we just slightly extended those flaps on the model to extend past the height of the foundation. There was also another issue, the bolts that secured the omni-wheels to the build plate were difficult to access because they were to close to one of the Rev rails. To fix this we just slightly increased that distance but also had to ensure that there was enough length on the ends of the axle to comfortably secure the wheel mounts. Other, smaller, issues such as wiring holes were also solved by providing adequate space for wiring next to the expansion hub mount.

    Above you can see an image of the completed build plate. To ensure accuracy one side was developed them mirrored. This removes any variability within the model and creates a symmetric object. The screw holes were created by imposing the turret mounts and rev rails from the previous robot model onto the current one, providing an accurate placement for each hole.

    Next Steps:

    After completing the model, we will print the pattern on a large sheet of paper and verify the placement of all the components that are to be attached. If there are any inaccuracies they will be fixed. We then have to develop a CAM path for the CNC machine. Construction of the second robot will begin once the second plate is completed.

    Research Poster

    09 Feb 2020

    Task: Create a poster encompassing all of our calculations from this season

    From analyzing the friction coefficient of a variety of different materials, to calculating torque for our various robot sub-assemblies, and creating an equation for our tower-stacking abilities in our autonomous, Iron Reign has seen several different series' of calculations this season. Since these calculations are spread throughout our journal, we have compiled all of them in a single poster for us, and visitors to our pit to refer to at the NTX Regional Championship. Below, you can see how the chart is organized:

    Torque and Gear Ratios

    The first column covers the torque and gear ratios of TomBot's elbow and drive-train. You can read about these calculations in Calculating Torque at the Elbow and Calculating Torque at the Drive-Train which are posts 75 and 78 of the Engineering Section respectively.

    The second column also covers torque and gear ratios but this one focuses more on the torque of the turntable and on the logarithmic spiral, a custom-made part by our team to linearly reduce the torque on the elbow. You can read about these calculations in post 79 for the turntable, and 45 as well as 76 for the logarithmic spiral.

    Materials Testing

    The third column focuses on calculating the friction coefficient of various materials like silicone oven-mitts and rubber cement, which we used for our gripper materials. You can find the math behind the decision to use these materials in post 66, 69 and 91 of the Engineering Section.

    Extend to Tower Height

    The final column focuses on a method we implemented in our drive-controls which uses trigonometry to automatically calculate the height needed for the arm to extend to place a stone at a specific tower height. You can read about this method in post 68 of the Engineering Section.

    To take a closer look at these calculations compiled together, you can take a look at the chart in the very front pocket, or come visit us in our pits to see a much larger version of this math!

    Spicy Side Shields

    10 Feb 2020
    Spicy Side Shields By Jose

    Task: Design and CAD/CAM some spicy side shields

    In order to increase the spice factor for TomBot, we need to custom machine our own side plates out of aluminum using our CNC. The design is pretty simple, just a plate with our team number, but there are some other features such as the curved top. This keeps the side plates from being sharp and add some aesthetic to the design. Also, since the team number is to be put out of the aluminum, the circles inside the '8' need some strokes to keep them in place. To follow the font used these were at a set angle and thickness as seen above. The stroke for the '6' was also thickened to add some support as previous years' side shields have proven this stroke to be weak. Finally, there are holes on the top corners for the alliance markers. The idea for these is that a rectangle with both a blue circle and a red square is screwed to the top and is spun to show the color corresponding to the alliance we are in while the other color is hidden behind the side shield(of the spicy variety).

    Next Steps:

    With a CAM file of these (if not already obvious)spicy side shields already made we can immediately machine these on our CNC during our next meet as well as screw them onto TomBot. Since we have a circular chassis we will have to bend the aluminum, which shouldn't be too hard.

    Milling The Side Shields

    14 Feb 2020
    Milling The Side Shields By Jose, Justin, Trey, Paul, and Shawn

    Task: Mill the spicy side shields for the competition tomorrow

    In typical Iron Reign fashion we are making our side shields the night before regionals, as with many other things. The paper side plates look too jank on our robot that we are trying to make look professional, so we are going to use aluminum instead (a post covering the CAD and CAM of these can be found in a previous post). Since we are still fairly new to using our CNC it took us a while to get started, we broke 8 3mm mills before any major portion of the first side plate was done. After a few hours we were able to complete the milling of the numbers which we can use to label things like CartBot. To finish quickly as we were getting impatient, we used a 6mm flat mill to do the outside contour, some loose placement of the aluminum led to it drifting as this final stage occurred, but overall it finished quite well! After all these hours of suffering we still had to mill a second one this took a while, but not as long since we were used to the procedure.

    Next Steps:

    All that's left is to show off these aluminum side plates tomorrow at regionals!

    The Night Before Regionals - Code

    14 Feb 2020
    The Night Before Regionals - Code By Cooper and Trey

    Task: Fix our autonomous path the night before regionals.

    Twas the night before regionals, and all through the house, every creature was stirring, especially the raccoons, and boy are they loud.

    Anyways, it’s just me and Trey pulling an all nighter tonight, such that he can work on build and I can work on auto. Right now the auto is in a pretty decent shape, as we have the grabbing of one stone and then the pulling of the foundation, but we need to marry the two. So our plan is to use The distance sensors on the front and sides of the robot to position ourselves for the pull.

    Another thing we are working on is a problem with our bot that is compounded with a problem with our field. Our robot has a wheel that is just slightly bigger than the other. This leads to drift, if the imu was not used. But since our field has a slope to it, it drifts horizontally, which is not fixable with just the imu. So we plan to use a correction method, where the distance from where we want to go and the distance to the block to create a triangle from which we should be able to get the angle at which we need to go and how far we should go to end up perfectly spaced from the side of the build platform.

    Our final task tonight is to simply speed up the auto. Right now we have points at which the robot has to stop so that we don’t overshoot things, but that is fixable without stopping the robot.

    Next Steps

    Mirror the auto onto blue side and practice going from auto to teleop

    Driving at Regionals

    15 Feb 2020
    Driving at Regionals By Justin, Aaron, and Jose

    Task: Drive at Regionals

    Driving at regionals was unfortunately a learning opportunity for our drivers. In our first few matches, for some reason we couldn't get our robot moving; we faced code crashes, cables being pulled, and incorrect calibration during the transition from autonomous to tele-op. These issues combined with our weak autonomous (sorry coders), led to a very unimpressive robot performance for our first few matches.

    When we finally got our robot working, our lack of practice and coordination really showed. The lack of coordination between these drivers and coders resulted in drivers relying on manual controls, rather than preset articulations. Our articulations were also very harsh and untested, some resulting in constant gear grinding, which pushed the drivers to use manual controls. This slowed down our robot and made us very inneficient at cycling. The presets that gave us the most issues were transitioning from stacking or intaking to moving. The intake to north preset, which pointed the arm north after picking up a block, practically tossed the stones we picked up out of our gripper. The stacking to intake preset, which raised the arm off of a tower and pointed it south, would keep raisign the arm up, stripping the gears. This made us rely on our very slow manual arm and turntable controls. A failure in the capstone mechanism caused the capstone to fall off the robot during matches. With all of these issues, we stacked at most three stones during a match; not nearly enough to make us a considerable team for alliance selection.

    Next Steps

    We need to get consistent driver practice while coordinating with coders about the effectiveness of their presets. Many of our failures at regionals could be solved by driver practice. Our drivers being comfortable with the robot, both manually and with presets, would allow us to stack much faster and speed up the robot's in code to make our robot as efficient as possible.

    Wylie East Regional Qualifier Code Post-Mortem

    15 Feb 2020
    Wylie East Regional Qualifier Code Post-Mortem By Mahesh and Cooper

    Task: Reflect On Code Changes And Choices Made During The Wylie East Regional Qualifier

    Despite putting in lots of effort in order to pull off a working autonomous before regionals, small and subtle issues that surfaced only during testing at the competition as well as various other small bugs with our autonomous routine prevented us from performing well on the field. Trying to write a full autonomous in the last week before competition was a huge mistake, and if more time was dedicated to testing, tuning, and debugging small issues with our code base, we could have accentuated the theoretical aspect of our code with actual gameplay on the field. The issues experienced during the Wylie East Qualifier can be boiled down to the following:

    Improper Shutdown / Initialization of the Webcam and Vuforia

    We frequently encountered vuforia instantiation exceptions after attempting to initialize the camera after an abrupt stop. We suspect this issue to have originated from the improper shutdown of the Webcam, which would likely result from an abrupt stop / abort. During later runs of our autonomous and teleop with multiple, more complex vision pipelines, we saw that attempting to reinstantiate Vuforia after it has already been instantiated resulted in an exception being thrown. This issue caused us to not play in certain matches, since our program was either stalled or its execution was delayed from restarting the robot.

    Disconnection Of The Webcam (Inability To Access Camera From Rev Hub)

    Ocassionally when attempting to initialize our robot, we saw a warning pop up on the driver station which read "Unable to recognize webcam with serial ID ..." indicating that either the webcam had been disconnected or was for some other reason not recognized by the rev hub. On physical inspection of the robot, the webcam appeared to be connected to the robot via USB. The solution we came up with was to quickly disconnect and reconnect the webcam, after which the warning disappeared.

    This issue prevailed in other forms on the competition field, however. Sometimes, during gameplay, when the webcam was accessed, the blue lights on the rim of our webcam would not light up (meaning that the webcam was not active), and our program would stall on skystone detection. This happened despite getting rid of the driver station, warning, and is most likely another result of improper initialization / shutdown of vuforia after an abrupt stop or abort.

    State Machine Issues

    At the end of our autonomous, if the statemachine had completed, our robot would proceed to spin slowly in a circle indefinately. This unexpected behaviour was stopped using a stopAll() function which set all motor power values to zero, effectively preventing any functions which messed with the robot's movement to be ignored at the end of our statemachine's execution.

    Lack of Testing / Tuning

    By far the biggest reason why we did not perform as predicted at the qualifier was because of the lack of testing and tuning of autonomous routines. This would include running our statemachines multiple times to fine tune values to minimize error, and debug any arising issues like those that we experience during the competition. A lack of tuning made the time spent on our skystone detection pipeline completely useless as our crane did not extend to the right length in order to pick up the skystone, a direct result of inadequate testing. All of the above issues could have been prevented if they had surfaced during extensive testing, which we did not do, and will make sure we follow in the future.

    Next Steps:

    In the future, we ultimately plan to put a freeze on our codebase at least 1 week before competition, so that the remaining time can be spend for building, driver practice, etc. Additionally, we have agreed to extensively test any new additions to our codebase, and assess their effect on other subsystems before deploying them onto our robot.

    The Revenge of TomBot

    16 Feb 2020
    The Revenge of TomBot By Bhanaviya

    Introducing...The Revenge of TomBot!

    A long time ago in a galaxy far, far away there was a robot named TomBot. TomBot was a circle, a spinning circle with a turret and an arm that could extend to glory. Sadly, his reign was not destined for longevity - his cruel creators cut it short before he could enrich the FIRST world with his greatness. But TomBot remained scheming for many, many days, and in his wake followed... The Revenge of TomBot.

    That's right, we're building another robot! Even before our disasterous robot performance at the North Texas Regional Championship, we realized that our current robot, TomBot, lacked one defining one feature - class. Of course, only way to give a robot class is to bring a CNC Mill into the picture. The essential design of the robot will remain the same, but all parts, from the polycarb base to the the turntable mounts will be custom-cut and designed. Being able to custom mill our parts for every subsystem of the robot will also give us better control over the functionality of TomBot's design.

    Next Steps

    We will still be using TomBot in its original version for testing our code and drive practice and their corresponding blog posts. However, from this point onwards, every build post in our engineering section will refer specifically to our new robot - The Revenge of TomBot, coming to theatres near you.

    CNC a New Polycarb Robot Base

    24 Feb 2020
    CNC a New Polycarb Robot Base By Justin

    Task: CNC a new robot base

    We finished manufacturing our new base today, with very little difficulty, but a few flaws. The CAM was already designed so all we had to do was run the operations on the CNC. We drilled out the various sized holes, cut out the inner wheel slots and cable holes. Next was the groove along the edge to fold the side flaps along, which was a leap of faith because the orientation and position of polycarb on the CNC had shifted, which meant we didn't know exactly where we had it originally. We got it as close as we could remember and then ran the funky groove operation, which turned out to have pretty close to perfect alignment. Finally, we cut out the outline of the base, with flaps to fold down to increase the strength of the polycarb and to reduce flex. After looking at our finished project we noticed that the center slip ring hole was not cut. The hole is for general cable management and for the slip ring wires to reach the REV hub under the robot. We checked the CAM and found that it had been left out of the inner contours, so we made an operation for it, and cut it out separately. The build plate was finished on the CNC side of its production.

    Next we used attempted a new way to fold down the side flaps to make the structural ring of the base: some tasty oven baked aluminum. The plan was to heat the aluminum above the working temperature of polycarb, then place the edge of the hot aluminum in the groove and use the edge to make a straight 90 degree bend. We found that aluminum and polycarb just don't transfer heat very well, and ended up with a hot piece of aluminum and cold polycarb. Our less preferred alternative solution was the classic torch bend, which was prone to bubbling if rushed. We took our time and were very careful about how much heat we applied, so we only ended up with a few bubbles. Regardless, this was a major improvement over our previous build plate.

    Next Steps

    We are now ready to start mounting our subsystems onto the new base. We should first start with the drivetrain and the turntable. We also should document any errors we encounter with the new build plate, so we can fix them in CAM and make another more polished attempt. Our next CNC parts include boring out gears to fit on our big wheels, and cutting out more banana shaped mounts for the turntable.

    TomBot v2- Gripper Triggers

    25 Feb 2020
    TomBot v2- Gripper Triggers By Jose

    Task: CAD, 3D print and test new, better, and more aesthetically pleasing gripper triggers

    Since our gripper follows a design similar to a slap-band it needs a trigger to close it, for too long we have used a bent REV beam with screws on the end to hit the nubs of a stone. This proved to be very inconsistent as proven by driver practice before and at regionals since the screws were too small of a plane to hit the stone, forcing the driver to be precise to hit close the gripper. To help with this some better triggers were CADed by using the CAD of a stone as reference. since there is a servo on the top of the gripper the triggers have to work around that so a loft was made between the bottom circles and the attachment point on the gripper. Some filets were used to clean up some edges and this was sent to the 3D printer. At first the triggers were too short so they were extended by 2cm later on.

    Next Steps:

    With the print done we can test these triggers on the actual robots to test its viability on TomBot v2.

    Code Changes The Week Before Regionals

    28 Feb 2020
    Code Changes The Week Before Regionals By Mahesh and Cooper

    Task: Assess Code Changes During The Week Before Regionals

    Numerous code changes were made during the week before regionals, the most signicant of which were attempted two days before regionals, a costly mistake during competition. Firstly, three different paths were layed out for respective position of the skystone (South, middle, and North), which involved rotating to face the block, driving to the block, extending enough distance to capture the block, and driving towards the foundation afterwards.

    Next, we proceeded to add small features to our codebase, the first of which was integral windup prevention. We saw that when tuning gains for our turret PID, we experienced a build up of steady state error which was counteracted by increasing our integral gain, but resulted in adverse side effects. We used the following code to declare a range which we refer to as the integralCutIn range, and when the error of the system drops below that threshold, the integral term kicks in.

    This code was put in to account for a phenomenon known as integral wind up; when the theoretical correction given by the system surpasses the maximum correction that the system can deliver. An accumulation of error results in more correction that can possibly be given in the real model, so to prevent this, the integral term is active only within a small range of error, so that the robot can deliver a reasonable amount of correction and avoid overshoot.

    We continued to tune and tweak our autonomous routine Tuesday, making minor changes and deleting unecessary code. We also encountered errors with the turret which were fixed Wednesday, although the biggest changes to our algorithms occured in our skystone detection vision pipeline on Thursday.

    On Thursday, code was added in order to select the largest area contour detected by our vision pipeline, and avoid percieving any disturbances or noise in the image as a potential skystone. We achieved this by first iterating through the found contours, calculating area using Imgproc.contourArea(MatOfPoint contour), keeping track of the maximum area contour, and using moments to calculate the x and y coordinates of the blob detected. The screen was then divided into three areas, each of which corresponding to the three skystone positions, and the final position of the skystone was determined using the x coordinate of the blob. A snippet of the code can be seen here:

    On the final stretch, we added localization using Acme Robotic's roadrunner motion profiling library, which will be expanded on in the future. We also tuned and tweaked PID gains and ticks per meter. Finally, we added code to read distance sensors, which will be used in the future to detect distance to the foundation and follow walls. In addition we integrated the vision pipeline with the existing addMineralState(MineralState mineralState) method to be used during the start of autonomous.

    Next Steps:

    In the future, we plan to use the features we added during this weekend to expand on our robot's autonomous routine and semi-autonomous articulations. These include incorporating odometry and localization to reduce the error experienced during autonomous, and even drive to specific points on the field during teleop to improve cycle times. In addition we can now use distance sensors to follow walls, further improving our accuracy, as well as determine the distance to the foundation, allowing for autonomic placement of skystones using the extendToTowerHeight articulation.

    Summer Summary

    11 Jul 2020
    Summer Summary July 11, 2020 By Bhanaviya, Jose, Anisha, Paul, Shawn, Trey, Justin, Aaron, Ben, Mahesh, and Cooper

    Talking Heads: Summary July 11, 2020

    Task: Prepare for the 2020-2021 Game Reveal season

    Today kicked off our first meeting for the new Ultimate Goal season. Since the actual challenge for this year hasn't been released, the most we can do is to speculate what the new challenge might pose, and what we can do to prepare for it.

    Recruitment

    As most of our members have moved on to our Junior year, our team is now primarily upperclassmen-led. This means that within 2 years, we will need to recruit enough members to keep the team sustainable after our graduation. Unfortunately, due to the current pandemic, we will need to ensure that the Iron Reign program has the funding needed to maintain 3 teams in addition to ours. At the moment, our focus has been on keeping our own team viable over the virtual season, and this may mean that we will have to cut back on our recruitment and pick it back up closer to our senior year on the team.

    Outreach

    In an earlier post, we went over the plans for a new mobile learning lab. To clarify, the Mobile Tech xPansion program is owned by Big Thought, a non profit organization dedicated to education, but its outreach events are executed by Team 6832 Iron Reign. During these events, our team travels to low-income areas around the Dallas community with little access to STEM education, and teaches younger students about robotics and CAD to improve their interests in STEM which can sometimes be hard to discover without the access to a strong STEM-based education. Recently, Big Thought approved the plans for funding and expanding this program and our coach was able to purchase a new vehicle for the second, improved version of this Mobile Learning Lab. However, due to the ongoing pandemic, the plans for this vehicle have been put on temporary hold since most of our outreach events happen over the summer. As the count for COVID-19 cases in Dallas has been relatively high, there is no safe way for our team to interact with younger students and teach them hands-on robotics. As such, we will be placing our MXP outreach program on hold until the pandemic has improved (which will be, hopefully, soon).

    3D-Modelling and CAD Design

    Jose has been working on modelling various robot designs in anticipation of the upcoming season. The first is a kiwi drive, with a triangular chassis with 4 omni-directional wheels on each side of the chassis which enables movement in any direction using only three motors. The render of the robot itself is built using custom and goBilda motors. Another design was for an Inspirenc CAD Challenge, which resembled our Superman design from two seasons ago, but with a more rectangular chassis. All of these designs created over the summer will be within their own separate entry - this is merely a summary of our summer progress. Since we don't yet know what the challenge this year will look like, nor how much we would be able to meet in-person in light of COVID19, we plan on starting our build efforts with CAD designs to streamline the engineering process with an online reference in hand.

    Next Steps

    One of the hardest things about this year's season will be trying to cover all our usual grounds virtually since the number of team members who can show up to in-person practices has been severly limited. In the meanwhile, we plan on using our Discord group to map out the skeleton of our new season - journal and CAD will, for the most part, progress business as usual but we'll need to rely on CAD and our planning calls much more heavily to go through with build, code, and outreach. We plan to keep up our pace as a World-class team as best as we can over quarantine, as uncertain as our plans for this season may seem.

    Printing Rings

    14 Sep 2020
    Printing Rings By Trey

    Task: Print some game elements to get a kick start on the season

    Recently, this year’s competition details were released, and while we couldn’t quite get started on a robot immediately like we did last year we were able to do some prototyping for ring launchers. The thing that we made which enabled us to do this was a rendering of the game element for the year. This was done by taking the model released on AndyMark’s website and 3D printing it. With this, we were able to start thinking about the size and proportion of our future launcher as well as its construction. The ring was printed in PLA at its exact size to best accomplish this.

    The biggest problem with this method of construction is that the ring does not have the characteristic foam squishiness so we also made another ring out of foam tape to get a better idea of how the official game element might fly and how we can get it to fly. We were able to throw the two rings around and notice that there is a very noticeable spin that can be achieved and will likely be desirable in the future for maximum stability in the air. The realistic shape of the ring was helpful when we were trying to figure out how the ring would fly since different ring shapes would obviously fly differently so having a replica was nice.

    Next Steps:

    We are going to kick off our development of a robot soon and with the rings we made we should be able to develop better early on than if we were empty-handed. This development is of course being curbed by the pandemic since at the moment only a few builders can come in to build at a time. Being one of these builders, I think the goal for the first launcher prototype is to see how easy it is to get a ring to fly and what variables will be important in the future for trajectory and speed rather than actual functionality. We are excited to have a whole season of development ahead of us.

    Robot in 2 Days - But in CAD

    14 Sep 2020
    Robot in 2 Days - But in CAD By Jose

    Task: CAD a robot for the Ultimate Goal Challenge quickly in order to get ideas for a final robot design and prototypes

    A new season, a new design challenge, and more opportunities to compete. Last season we participated in the Robot in 3 Days Challenge where teams race to build a robot for the new season as quickly as possible in order to accelerate the brainstorming and prototyping phase of the season. Due to certain circumstances this couldn't happen this season but overcoming the situation the idea of transferring the challenge to CAD arose.

    Day 1

    The first step of course is to come up with a design for this robot. Many ideas came and went, many ideas were inspired by previous seasons' robots, but ultimately the main design was decided over a few hours and a basic CAD model was made. A time lapse of this can be seen here:

    Since I was really lazy today, I mean since coming up with the design of the robot took a while and I was very busy today not much could be done in the first day. I began working on the claw to grab the wobble goal and taking inspiration from the one used in the xRC Sim version of the game(the sim can be found here: https://xrcsimulator.org/downloads/) I decided on a simple arm mechanism with a hook. The hook is designed to be passive, it's wide enough to go around the pvc pipe of the wobble goal, but small enough such that the top of the wobble goal can't escape as easily. Since the wobble goal isn't as heavy the arm doesn't need such a high gear ratio, so I went for a 30:1 final gear ratio.

    Day 2

    Day 2! Time to do everything I was too lazy to do yesterday, I mean too busy to finish. The first step today was to check how much length I had left over for the ring intake, this turned out to be a little over an inch, not much, but enough. Since I am going for a conveyor design for this robot a base is needed below it to not only support the conveyor, but to also make sure the rings don't fall since they will be travelling below the conveyor in order to feed into the shooter. Some supports were added with REV extrusions, which made things start to come together.

    Up next was to actually have a way to power the wobble goal grabber. However, this was really simple as I just needed to add an ultraplanetary motor and a belt.

    Next on the list for today was to actually make the conveyor belt, this will have "spikes" in order to grab the rings. The conveyor is about 6 inches long to allow for some extra room when intaking. Spikes are in pairs and spaced about 3 inches apart. This was a simple assembly and I was able to move on to adding the pulleys and bearing shortly after. As far as a gear ratio goes, a direct drive 19.2:1 should do.

    It's the final countdown..[plays the final countdown music], time for the final sub-assembly, the shooter. This was very simple to make. Holes in the polycarbonate base were made to allow for the shooter wheels(I used the new goBilda Gecko Wheel) and these were also direct driven with a 5.2:1 goBilda motor. This may be too slow but since this is CAD, it isn't very easy to test this. The process of getting renders of this robot proved to be resource demanding but it got done and here is the final product:

    Simple Roller Intake

    26 Sep 2020
    Simple Roller Intake By Jose

    Task: CAD a simple roller intake design

    This intake design is the most plain of them all, just compliant wheels on a shaft. The idea with this is to have it low to the ground, and drive up to the rings. This design has been tried and tested on many robots by many teams, but it will not work on ROBOT as there is no realistic way to transport rings so low to the ground up to the turret, especially not with the entry angle of the rings.

    Next Steps:

    Continue prototying more intake designs.

    Archimedes Screw Intake

    28 Sep 2020
    Archimedes Screw Intake By Bhanaviya, Jose, and Shawn

    Task: Begin creating intake systems on CAD to test their potential

    The Archimedes Screw Intake, as the name goes, was based on an Archimedes screw. A screw shaped surface would draw the rings from the fields and transfer it directly to the launcher as the screw rotates. Similar to the Archimedes screw water pump, it makes use of positive displacement and would rely entirely on the screw's movement for the rings to travel upward towards the launcher.

    While this is an intruiging system, our biggest concerns with it are size and timing. This system would take up most of the volume of the robot. Also, since the screw would have to rotate entirely for one ring to be taken upwards, this is likely not the most efficient system and even the mere drawing of the rings into the system is likely to be more time-consuming. It would also be very difficult to make. So, this intake ends here in the concept stage.

    Next Steps

    Our next steps are to begin brainstorming ideas for other, more efficient intake systems. We may still come back to the Archimedes system but as of now, it is of lower priority. Rest in Peace Archimedes.

    The First Launcher

    10 Oct 2020
    The First Launcher By Trey and Paul

    Task: Create and Test a Arm Disk Launcher

    One of the centerpieces of any robot this year is going to be the disk launcher. It’s likely that most robots in the competition are going to be built around their launchers, so one could logically conclude that that’s a good place to start when building a robot. This is no different for us; however, we didn’t just want to build a flywheel like most other people. Instead, we started to look into other designs. One of the designs that came into mind first was some sort of arm that is powered by an elastic or bungee cord that throws disks sort of like a clay pigeon thrower.

    But why did we start with an arm design? Wouldn’t a flywheel be easier? We started with an arm because we thought it was interesting and customizable. Yes, a flywheel would be easier but that would be at the cost of customizability. With a flywheel, there is only so much to change. You can change pretty much only the motor, the wheel, or the speed of the motor. This is good for a team that just needs a launcher that works but we want to be able to make a customizable launcher that we can tailor to our needs easily. There is a lot of open space and customizability with an arm launcher. For example, we can change the arm material, length of the arm, strength of the bungee, the time the disk is in contact with the arm, and much more.

    So that’s what we built and it works to a degree. Yes, it does launch a ring, in fact, it can launch a ring across the field to a height of 55 inches at an angle of 44 degrees with an easily retractable arm; however, in its current state it breaks easily, isn’t consistent, and is quite big. The first two are fairly easily fixable because they are mostly because the base of the launcher is made out of particle board which falls apart easily but the last one isn’t quite as easy to fix. Cramming this design into a smaller space could provide a difficult challenge. The function of the design is to accelerate a ring over a distance with an arm which can be difficult in a small area because with a smaller arm you have to use a stronger bungee to achieve the same results.

    Next Steps:

    I have only touched on a few major things to be improved. There are quite a few; however, the results that we observed from this design definitely warrant a second version, and there will be one. At the very least, I am thinking of new designs and improvements for this system. There are also many other things we can try and I know that regardless of what I have said about a flywheel launcher so far, it would have its advantages, mainly compactness, so I know we will definitely build one of those as well. There is still much more to be made and built for this robot.

    Code Planning For The New Season

    17 Oct 2020
    Code Planning For The New Season By Mahesh

    Task: Plan changes to our codebase for the new season.

    This year's game saw a significant boost to the importance of the control award, now being put above even the motivate and design awards in order of advancement. Therefore, it is crucial to analyze what changes we plan on bringing to our codebase and new technologies we plan on using in hopes of benefitting from the award's higher importance this year.

    Firstly, the very beginning of the autonomous period requires the robot to navigate to one of three target zones, specified by the quantity of rings placed, being either 0, 1, or 4. Since the drivers will not be able to choose an opmode corresponding to each path, we will have to implement a vision pipeline to determine which of the three configurations the field is in. This can be done with OpenCV, using an adaptive threshold and blob detection to differentiate 1 ring from 4 rings through the height of the detected color blob.

    Secondly, ultimate goal's disk throwing aspect opens up the opportunity for automatic shooting and aligning mechanisms and the software to go along with them. If a robot can use the vision target placed above the upper tower goal or otherwise localize itself, projectile motion models can be used to analyze the disk's trajectory and calculate the necessary angle and velocity of launch to score into the goal given a distance from it on the field. Such automation would save drivers the hassle of aligning and aiming for the baskets, allowing them to focus on more complex strategy and improve cycle time. Vuforia and OpenCV pipelines can be used to figure out the robot's location on the field, given the vision target's orientation and size in its field of view. If OpenCV is also used to allow for automatic intake of disks on the ground, then most gameplay could be automated, although this isn't as simple a task it may seem.

    Asides from using the webcam, another localization technique we dabbled with this summer was using GPS. We were able to get +- 4 cm accuracy when using a specific type of GPS, allowing our test robot to trace out different paths of waypoints, including our team number, the DPRG logo, etc. If this level of accuracy proves to be viable in game, GPS could be considered an option for localization as opposed to the odometry sensors many teams employ currently. Another sensor worth noting is the PMW3901 Optical Flow Sensor, which acts similar to a computer mouse, in that its movement can be translated into a horizontal and vertical velocity, giving us more insight into the position of our robot. Regardless of how many different gadgets and sensors we may use, an important part of the code for this year's game will be automatic scoring, no matter how we choose to implement it.

    As always, we hope to have this year's codebase more organized than the last, and efforts have been taken to refactor parts of our codebase to be more readable and easily workable. Additionally, although it is not necessary, we could use multithreading to separate, for example, hardware reads, OpenCV pipelines, etc. into their own separate threads, although our current state machine gives us an asynchronous structure which emulates multithreading fairly well, and implementing this would give us only a slight performance boost, particularly when running OpenCV pipelines.

    Next Steps:

    The most immediate changes to our codebase should be both working on refactoring as well as implementing bare bones for our teleop and autonomous routines. Next, we should work on a vision pipeline to classify the field's configuration at the start of the game, enabling the robot to navigate the wobble goal into the A, B, and C drop zones. Afterwards, the physics calculations and vision pipelines necessary to auto-shoot into the baskets can be made, starting with a mathematical model of the projectile.

    Custom Flywheel CAD

    24 Oct 2020
    Custom Flywheel CAD By Jose

    Task: CAD a custom flywheel

    Instead of using a grip wheel to launch rings we went with the approach to make a custom flywheel. The key concept of a flywheel is to maximize rotational inertia. This is done by putting as much mass towards the edge of the wheel as possible. To do this, a ring of ninjaflex was designed, from there, 5mm flaps were added as an experiment to see if it would give the wheel more points of contact to the ring. However, the wheel needs a center to be able to spin, so aluminum plates were added to sandwich the ninjaflex ring. To decrease the amount of mass not on the edges of the wheel, these aluminum plates were pocketed, leaving aesthetically pleasing curved spokes on the plates.

    Next Steps:

    The ninjaflex is to be 3-D printed and the aluminum plates will be milled on our CNC machine. Once that is done it will all be put together using M3 hardware.

    Ladder Intake CAD

    21 Nov 2020
    Ladder Intake CAD By Jose

    Task: Design a mechanism to trasfer rings from the ground to a future ring launcher

    The initial vision for this intake design was inspired by FRC team 1983’s Ultimate Ascent robot. The “ladder” pivots from the back of the robot to rotate out. The wheels in the front are very similar to the simple roller design, except here they extend out of the robot. The intial CAD was a very simplified model in order to get the idea across. After some discussion, it was decided that the design would be shrunk down as it was unnecessarily large.

    After that, a more realistic CAD model was made, using aluminum side supports and REV extrusions. This was then taken to the chassis CAD model to check for mountabilty. There seems to be a spot on the front of the chassis that allows the intake to work as intended, however more testing is necessary.

    Next Steps:

    Physically build this intake in order to more acurately test for functionality.

    Auto Path Plan

    24 Nov 2020
    Auto Path Plan By Cooper

    Task: Layout a plan for auto paths this season

    To begin, as you can see up above (a diagram that was generated on https://ftcchad.com/ ) our first auto path takes very little movement, and no turns whatsoever. This path assumes that on the robot we have some way to grab the wobble goal at the start of the match and can release it in a controlled manner during autonomous. In such, with the robot facing with the "front" of the turret and chassis facing away from the back wall, and the robot in the center of the outermost tape, the robot would use vision to figure out which of the 3 stacks of rings are present. After which, the robot will drive forward and park next to the correct spot, and turn the turret to release the wobble goal on the correct target location. To finish, all it has to do is drive backwards and end up on the shooting line.

    After that is coded, we'll add in features gradually. First, we would look at going back and getting the second wobble goal first using odometry, then vision. Next, and by the time all everything already said has been coded, we should have our first launcher and intake done, making it evident that we should shoot them into the high goal from where we sit on the back wall, and then intake and fire the ring stack before moving on to moving the wobble goals. The final revision would to be to use vision to find and then subsequently pick up rings the human player puts in the field after the wobble goal segment.

    Next Steps:

    Get to coding!

    Modelling an Equation for Forward Speeds of a Ring

    01 Dec 2020
    Modelling an Equation for Forward Speeds of a Ring By Bhanaviya and Ben

    Task: Model a projectile motion equation to approximate forward speeds of rings launched from a ring launcher

    A key challenge in this year's game is finding the best possible position to launch rings to ensure optimal performance of the ring launchers. Part of this challenge includes approximating a potential forward speed for each ring as it is launched from the launcher itself. There was also height and distance constraints that needed to be taken into account before we could find these forward speeds. Modelling an equation to identify this forward speed would allow us to directly plug in this equation into the robot's code so it can automatically adjust itself to aim rings from an optimal angle and position.

    In order to find the most optimal position and angle to launch the rings, we needed to first consider the angle of the launcher to be a variable to determine all possible forward speeds horizontally and vertically. We needed to look at the forward speeds both vertically and horizontally in order to attain the maximum distance (which would be tangential to the horizontal and vertical distance if we were to look at it like a right triangle). FTC constraints dictate that the maximum height a ring can be launched was 16ft we translated to 4.85 meters. While this was not a contant we inputted into our formulas, it was something for us to consider when we began. We knew that the height of our robot with the shooter mounted was roughly 0.41m and aiming to get the ring into the third level of the goals, we knew that the height the ring needed to reach was 0.88m. Subtracting the desired height from the initial height, we got 0.47m, and by placing that on one side of our projectile equation, we used simple algebra to find out that to isolate v0, 1/2(-a)t^2 needed to be subtracted from 0.47m for the vertical velocity. Since the final horizontal distance varies from launch to launch, we left it as xF (final horizontal distance) - 0 (inital horizontal distance) to reflect our steps for the vertical equation.

    When we began planning our equation, there were 3 things we anticipated we needed to know. 1) Angle of launch - this was what we were intending to find but we wanted a formula so we wouldn't have to manually measure theta each time. 2) Initial vertical speed - this was another unknown which affected the distance our rings could travel, which, consequently, relied on the measure of the angles. Finally 3) time - there are two things we need to know about time. First, how long the ring stays in the air, and second how long it takes for the ring to reach zero vertical velocity (in other words, when does it reach its maximum height?) Another issue we needed to account for was how the end of our equation would be represented. Did we want the height of the third level goal to be the summit of the ring's arc or did we want it to be its final point? Since we knew that the ring were not being launched 0 meters away from the ground but rather 0.41 meters away, aiming for the goal to be the end of its arc past its apex would cause too much error in our model if we were to graph the ring's arc as a parabola. So, we settled for making the summit of our parabola be the third level of the goal. So, time in our equation was represented as t/2 since in a standard parametric equation, t for time represents the complete arc while t/2 cuts the arc off at the apex. With all this taken into account, we were able to model two different equations - one for the horizontal velocity of the ring and second for the vertical velocity of the ring.

    Our equations were: Vertical: v0 = (0.47 - 0.5(-a)(t^2))/sinθ(t/2)) and Horizontal: v0 = (xF - 0.5(-a)(t^2))/cosθ (t/2)) t stands for time in seconds, a for acceleration due to gravity - 9.8 m/s^2 and xF for the final horizontal distance of the robot which will be calculated by the robot itself.

    While having two unknowns in our equation in a concern, we plan to find the velocity of one, plug it into the equation for the other side and retrieve theta from there. We want theta to be the same for both the horizontal and vertical equation assuming that the distance they travel is the same.

    Next Steps

    The next step would be for us to plug in constants into our equations and check to see if the velocity and theta seem to be reasonable. We anticipate that these equations will undergo several changes as we continue to build the ring launcher. Even once the equation is finalized, we will need to figure out how to translate it into code and whether or not we can find values such as RPM and muzzle velocity in order to control our motor to provide us our desired launch.

    FTC Legal Belt Sander

    12 Dec 2020
    FTC Legal Belt Sander By Paul

    Task: Create a prototype for a belt sander intake system

    The so-called “FTC Legal” belt sander was an early iteration of the intake mechanism for this year's robot. It was composed of a belt, from a Ryobi belt sander, rev wheels wrapped in tape, to help center the belt, and a tensioning mechanism. The belt would provide friction, moving the disk game elements upwards towards the launcher mechanism. However, an issue we ran into was the distance between the bottom of the belt and the floor was hard to regulate, resulting in disks either not having enough space to be sucked up, or havag too much space and not enough friction to be dragged up. This was partially solved by replacing the belt sander belt with a Ninjaflex belt with flaps, which is the current iteration of the robots intake system, using many of the same parts and designs as the original “FTC Legal” belt sander.

    Future plans include designing and constructing some form of leveling system, and a higher belt speed to more quickly collect disks. We are also considering using this sander design as an inspiration for a dual-tracked belt drive intake system and an elevator-like intake system with ninjaflex substituting for a traditional belt drive system.

    Caterpillar Track Intake

    31 Dec 2020
    Caterpillar Track Intake By Ben, Bhanaviya, Trey, and Jose

    Task: Build and prototype an intake system

    One of the first intake systems we made was the Caterpillar intake assembly (Tetrix tread intake). The inspiration for this design came from an earlier bekt drive comprising of a sander (which you can read about in our earlier post). This was originally built off a c-channel extrusion with a motor attached to sprockets that drive treads. The purpose of this subsystem is to transport the rings from the field into the launcher loading area.

    We first tested the assembly without the rubber bands and quickly realized that the treads couldn’t create enough friction to grip the ring and move it vertically. Our solution was to attach rubber bands within each tred piece. There were 2 reasons for this, the first being that rubber in general has high friction and good grip. The second reason is that the flinging rubber bands will conform to the shape of the ring at high speeds and drag the rings up the intake.

    We did experience a few problems with the construction of the assembly. We found that the rubber bands would often get caught on the edges of the c-channel and either fly off at a high velocity, snap, or tangle and prevent the assembly from moving. Because of the way the band fits into a tread, there wasn’t a way to permanently attach the rubber band without damaging the thread, meaning we would have to scrap the idea or find a work-around. We eventually decided to rebuild the intake with REV extrusions because it would be more compatible with our robot and we could replace the large c-channel with the smaller REV extrusions.

    Next Steps:

    Although this prototype holds promise, we will continue to experiment with it and alternatives to find an alternative that doesn’t run the risk of tangling and disrupting the system.

    NinjaFlex Belt intake system

    02 Jan 2021
    NinjaFlex Belt intake system By Trey

    Task: Design an intake with the NinjaFlex belt

    So far we have made a few Intake assemblies including the belt intake and the Tetrix tread intake. However, as is Iron Reign tradition, we like to make systems that utilize custom parts to both help our robot’s aesthetic and functionality. To do this, we took aspects from the other two intakes to better design and make the one that is discussed in this post. To recap, the belt intake was a sanding belt on to barrels that spun at high speeds to pull in rings and the tread intake was made with Tertis tank treads with rubber bands and spun, in the same way, to grip and pull in rings.

    The NinjaFlex belt intake takes the benefits of both systems without generating their issues. The NinjaFlex intake has the narrowness and form factor of the belt intake without the issues of the belt derailing which is caused by uneven pressure on the belt. Instead, the NinjaFlex belt intake is sprocket-driven with a custom belt to ensure that the belt stays on the rollers at all times as long as the two ends are aligned properly. Derailing was a big issue with the belt intake. Personally, I remember spending at least a few hours in total trying to get the belt to not fall off, with little success. That system would have needed much more work and improvement before we would have seen any results.

    The NinjaFlex belt intake system also yields the benefits of the tread system in that the 3D printed belt provides sufficient grip on the rings in order to pull them onto the robot. Additionally, the NinjaFlex belt system also doesn’t use rubber bands as gripers that can tangle with nearby screws or protrusions, possibly causing the system to break. Instead, the belt has flaps which can also be changed or molded into different lengths or shapes. This brings up one of the biggest benefits, customizability. When we use 3D printed or CNC parts we enter this space of customizability which is always a good aspect because if a change needs to be made to a part, we can usually make a new custom part in a matter of days if not hours with our machinery which gives us a lot of flexibility in how we can build our robot.

    Assembly-wise the intake is also super simple right now. It consists of 6 sprockets, 3 on each side that drive a belt with the sprocket spacing sits on to pulls in rings. The dimensions and specifics of how the belt was designed and made are in the post “NinjaFlex intake belt” but basically it’s just a belt with holes in it with the specific spacing of the REV sprockets. The motor right now has just been placed on one of the shafts but will be secured in a better location in the future, either parallel to the guide rails or perpendicular depending on how much space we have. If the motor is mounted parallel to the guide rails, then it will drive the belt with beveled gears, otherwise, it will be directly fitted onto the shaft.

    Next Steps:

    As mentioned previously, the motor has yet to be permanently mounted so that would be the next clear step and after that, there will likely be more testing and comparing of different intake systems. Then, we will interface the new intake with a ramp to see how we can assemble the two together to finish our intake system and start planning to put it on the robot. For now, though, we have made good progress.

    Proteus' model

    03 Jan 2021
    Proteus' model By Bhanaviya and Jose

    Task: Update the model to plan Proteus' build

    With our first qualifier being less than 2 months away, Iron Reign embarked on an ambitious project to create a robot with a circular chassis, an elevator-like intake system, and a fully automated launcher. While this robot is still in construction, we do have a name for it - Proteus. Named after the early-prophetic sea god who was also known for his versatility, this was the most fitting name for our robot given how flexible we needed to be this season and with only a few weeks left to construct a robot. In an earlier post, we detailed our decision to reuse our circular chassis in order to improve our robot's maneuvering abilities and get around other robot to avoid the traffic towards the goal posts. However, we are yet to decide which of our three intake systems to use as well as how the progression of our launcher might change considering that it is still in its CAD stage. To see how each of these intake systems look on the robot, we modelled the chassis design from the beginning stages and created multiple models to represent each launcher mounted on the robot.

    Earlier in the season, we created a model of just the chassis itself to account for the fact that we are only reusing the chassis design from last year and nothing above it. The updated model still has the same base chassis design from the earlier model, but it now has three different iterations - one with the ladder intake, one with the caterpillar intake, and one with the elevator intake system (yet to be named). Since the elevator intake does not yet have a full-fledged design, we are holding off on a full robot model with it until we figure out how to make it compatible for a final design.

    Next Steps

    With our robot model in progress, we can now plan out all our steps ahead of time in CAD so that we will make less mistakes on the physical build. We will be updating the model as the season progresses.

    Ladder Intake Build

    08 Jan 2021
    Ladder Intake Build By Jose and Bhanaviya

    Task: Physically build the ladder intake, based on the design in CAD

    For the intake system of this year's challenge we first brainstormed several ways which a ring could be collected and transferred to the launching system. Through that and experimenting with CAD, the ladder intake system was developed. Essentially it functions by using the series of Omni wheels on its edge to collect the ring, and then pivot back up to the robot. As pictured below, the ladder intake will be mounted onto the back of the robot and pivot as needed to collect the rings.

    Construction

    The ladder intake was constructed using 8 REV extrusion bars connected by 6 plastic brackets, 2 servos, 7 Omni wheels, a shaft and its respective parts for the wheels to rotate on, a sheet of polycarb below the Omni wheels and shaft to support the rings, and 2 more brackets for the servos to be mounted onto. As shown in the picture below, the idea is for the rings to be reeled in by the Omni wheels and be held using the support of the sheet of polycarb below the shaft, and then be transported to their designated locations in the launching system by the intake pivoting back.

    Testing

    Although the system seemed promising on paper, it unfortunately did not work out as intended. When tested with some first draft versions of code, we found out that the system was unable to actually take in the rings, and instead could only hold them. There wasn't enough traction on the rings for them to be reeled into the system in the first place, which was an issue. We will use this experience to construct an intake that overcomes these issues moving forward.

    Next Steps:

    Start brainstorming a new intake mechanism possibly using some of the components of the current intake that can overcome the issues that hindered the ladder intake from functioning optimally.

    Ring Launcher CAD Meets 1+2

    11 Jan 2021
    Ring Launcher CAD Meets 1+2 By Jose

    Task: Begin designing a ring launcher

    The initial vision for the ring laucher was to be a semi-circle in order to give the ring as much acceleration as possible. In this meeting, it was decided that instead it would be a quarter-circle for the following reasons: to save on space, since there will eventually also be an intake on the robot and a quarter-circle has been proven to give the ring enough acceleration, even if a faster motor is necessary.

    With that decision made, the flywheel was placed in the CAD and the quarter-circle was brought into existance. There is a circular shaft in the center that will hold everything together, but the plate that the ring will rest on cannot be jointed to this shaft. This is because it has to clear the flywheel, so instead another aluminum plate will be placed below it to act as support. From there, walls were added to keep the ring within contact of the flywheel. These walls where also extended a bit beyond the quarter-circle, this is to prevent any variabilty in the lauching of the ring. Finally, a motor mount was extended out of the center aluminum plate to drive the flywheel with the use of a pulley and belt.

    In the second meeting, some final design additions where made, namely screw holes were added(or removed, technically) from the plates and walls in preparation for 3-D prining and CNC milling. Additionally, any walls that were in the way of the belt driving the flywheel were split to make way for it.

    Next Steps:

    There are still many features to be added, such as a way to transfer rings from an intake to the launcher.

    Flywheel Assembly

    12 Jan 2021
    Flywheel Assembly By Jose

    Task: Assemble the flywheel with the readily manufacured parts

    Following the milling of the aluminum plates and the 3-D printing of the core of the flywheel, it is time to put it all together. The first step was to sandwich the ninjaflex core with the aluminum plates, and secure them together with long m3 screws. The plates have a spot for bearings, and those allowed for the addition of a 8mm circlular shaft. From there, the cut-out pulley was directly attached to the flywheel using more m3 screws. This pulley is how the flywheel will be driven, and it has a cutout to be able to fit bearing inside of itself.

    Following the assembly was testing, initial spinning by hand revealed some shakiness in the flywheel. This is likely due to variability in any of the parts, as well as the bearings.

    Next Steps:

    Further investigate the reason for the shakiness of the flywheel when spinning, and modify the weight distubution as needed to correct any variability.

    1/16 Build Progress - The first rings fly

    16 Jan 2021
    1/16 Build Progress - The first rings fly By Trey, Cooper, Aaron, Paul, Bhanaviya, and Jose

    Task: Continue developing the ring launcher and do preliminary testing

    Today we continued to further our progression on our ring launcher, finally getting to do some preliminary testing to see what the design might do. For starters, we started to get some of the walls off of the 3d printer which was the first piece of our flywheel launcher barrel design that started to come into real life. We also modified the pulley for the flywheel with the CNC that would eventually be used in the final construction. We had to do this because we want to be able to use our REV motors and driving belts to move the non-REV wheel. In order to make sure that we could do this we set up a machining path that would remove an inner circle of material from a standard pulley so that we can put bearings through it.

    The machining of the pulley is actually fairly simple. All we did was set up a path that would mill a cylinder out of the pulley. What was more complicated was what we had to do before that since you can’t mount the pulley on the CNC since it doesn’t lie flat. Instead, we modeled and CNCed a divot for the pulley to fit into along with some holes for screwing the pully to the CNC. You can see both the divot and the final product above. This operation isn’t that difficult on the machine since it’s just plastic and wood but this is the first time that we have had to mill a divot to machine a part which is what makes it notable.

    Then we put what we had together for the first time on a sheet of particleboard and spun up the wheel to see if we could even get a ring moving. We did get some success and the rings did launch several feet but we did have a few problems. Mainly that the walls were being held in place by people so they were moving and we couldn’t get enough grip on the rings. However, actually assembling the flywheel in housing will solve this problem. Honestly, we weren’t looking for problems in the first place though. This event would fall more under team bonding because we really just wanted to see a ring fly. We put in a lot of work and it was quite inspiring to see the ring actually move.

    Next Steps

    We still have a lot more manufacturing ahead of us. We still need to finalize the model and the CAM of all 3 of the plates in the barrel and 3d print more parts. We also still need to assemble and think about how we are going to get the rings into the launcher which will come and bite us in the butt at some point. For now, it was nice to see some progress as well as the first rings fly.

    Updating Proteus' model

    16 Jan 2021
    Updating Proteus' model By Bhanaviya and Jose

    Task: Update the model to plan TomBot's build

    With our first qualifier being around a month away, Iron Reign is currently in the midst of trying to put together a functional (or semi-functional) robot. In a previous post, we detailed the earlier stages of our CAD design. As of now, Iron Reign is still testing our intake systems but before we finalize the system we want to implement, we plan to construct a robot with just our launcher system mounted. The reason for this is that we have more or less finalized the CAD design for our launcher (which you can read about in one of our earlier posts) and before we can begin the actual assembly and mounting, we need to have it represented in our robot model.

    So, we created a render with just the launcher itself mounted onto our robot Proteus. We anticipate that although the model will change substantially once an intake system has been mounted, the position of the launcher will be consistent and having this modelled allows us to plan out our articulations and strategy for scoring rings into the goalposts.

    Next Steps

    Once we have finalized which intake system we plan to use, the model will be altered accordingly to reflect these changes. As of now, this model will allow us to visualize and implement the addition of our launcher system which will streamline our ability to plan out how we want mount an intake in the future.

    Code Changes Leading up to the PvC Scrimmage

    18 Jan 2021
    Code Changes Leading up to the PvC Scrimmage By Cooper

    Task: Finalize code changes prior to the PvC scrimmage

    Leading up to the scrimmage, many code changes happened, mostly in the area of auton. To start, I tried to run 10 runs of every auton path, to check reliability. Time and time again though, the robot would go off towards joneses, crash into the far wall, or knock over the wobble goal when placing it.

    To address the robots tendency to not want to go straight forward, we wanted to start to use VUforia and the vision targets to help us know our relative angle. However, we had problems with VUforia, as it wouldn’t detect much past what was immediately in front of it. The problem probably has something to do with our abysmal lighting conditions on our field, and while there are solutions, we didn’t have time. So, we went analog and used a distance sensor on the front right of our robot, facing right. This was to basically just do wall following, with one ace up our sleeve. We decided to modify our existing movePID that uses the IMU, to make a moveGenericPID, where it could be used for more generic purposes, like this one. We pass the method our target distance, our current distance, plus all the other generic move variables, and with a bit of fiddling with input multipliers, it worked.

    The next issue caught me off guard, and put me into a state of confusion. Or I guess rather. In all seriousness, all I needed to do was decrease the distance it went for the far. To go into a little more detail on the final issue, it was caused by multiple things at the same thing. Firstly, the arm that holds the wobble goal is shorter than the robot; its end is inside the circumference of the robot when the base and turntable are lined up. That lined up position is how we start, so it had been where the arm just turns to one side to drop it off. Even swung out, the wobble goal is still 40% over the robot, as to where the robot lets go of it and it topples over. We decided to fix it by turning the robot in the opposite direction the arm is turning, at the same time. Then we aren’t losing time to it, and it's a clean drop.

    Next Steps

    Given that we have attended to all outstanding issues prior to the scrimmage, the next steps mainly include testing the robot out during practice runs and being prepared to drive it through the week for all matches.

    Ring Launcher CAD Meet 3

    22 Jan 2021
    Ring Launcher CAD Meet 3 By Jose

    Task: Expand the ring launcher to begin accomadating for a controlled system of firing the rings

    The first step in accomplishing this task is to expand the center aluminum plate to almost a complete semi-circle. From there the back of it was expanded to allow for a place for the rings to sit. Offsets were added to accomadate for any new walls that will be added. Finally, at the back is a place for a servo to be mounted, this servo will eventually be used to rotate rings into the flywheel.

    In terms of the center shaft assembly, the goBilda hyperhubs were removed as there were unnecessary, however the holes made for them were kept, in case they are ever needed again. Spacers and bearing were added to allow for clearance and minimal friction.

    Next Steps:

    Finalize, the left side of the ring launcher, walls need to be added to prevent rings from falling off and a trigger needs to be attached to the servo to rotate rings into the flywheel.

    Ring Launcher CAD Meet 4

    23 Jan 2021
    Ring Launcher CAD Meet 4 By Jose

    Task: Finalize the ring launcher design

    The main thing here is a huge wall on the left to guide rings to their resting position at the back of the ring launcher. But before that, the ring trigger needs to be made first, as it needs to be worked around. The trigger contours the ring perfectly by design, and only needs to rotate about 40 degrees to put a ring within contact of the flywheel. With that done, the guide wall was designed around it, encompassing the enitre left side and connecting to the back center.

    The final step here is to create a better motor mount. This will be a seperate part that will then be attached where the original motor mount was. This is being done to more easily allow for the mount to be slotted: doing so lets the motor's position be shifted to keep the belt it drives as tight as possible.

    Next Steps:

    With the first iteration of the ring launcher design completed, it is ready to be manufacuted.

    Iterate Trajectory Calculations in Preparation for DPRG Meet

    24 Jan 2021
    Iterate Trajectory Calculations in Preparation for DPRG Meet By Bhanaviya, Mahesh, and Ben

    Task: Improve the Trajectory Calculations

    As mentioned in our earlier posts, one of the biggest control challenges we face in this year's season is identifying a equation to model how the path of a ring launched from our launcher is affected by its angle of launch. 2 weeks ago, we were able to create a starter equation to model this trajectory. However, this time, we want to be able to identify time as not a variable but as a fixed constant and values for RPM, muzzle velocity and rotations per second of a motor. We want to be able to list these values in anticipation of our virtual meeting with the Dallas Personal Robotics this coming week where we will present both our Flywheel Launcher and the calculations we have derived so far. We anticipate that these calculations will be subject to change and our error as we go about the process of identifying how best to put our equations into code and as such, the values in this post are not final in any way.

    Our main purpose for modelling this equation is to correct the efficacy of our launcher - primarily what motor it uses and how the motor's PID values need to be fine tuned in order to provide us an ideal launch. In our previous post, we stated that the variables and constants we needed to derive the equations were:

    \(\theta\) - angle of launch

    \(hv_0\) - initial horizontal velocity of launch

    \(hv_0\) - initial horizontal velocity of launch

    \(h\))- height of goal at the third level which we know to be 0.88m

    \(d\)) - the horizontal distance between the goal and the robot

    \(g\) (approximately \(9.8 \frac{m}{s^2}\)) - acceleration due to gravity

    We initially created two equations - to represent the initial velocity of the robot horizontally and vertically. However, one key component which we originally considered to be manually calculated was time. In order to isolate time as a fixed variable, we needed to find the amount of time in seconds it would take a ring launched from the robot to reach 0 vertical velocity. We knew that for any shot that crosses through the goal with zero vertical speed, the ring needed to have an initial upward velocity such that the acceleration due to gravity brings it to zero vertical velocity at the point it reaches our target height. Regardless of what the horizontal component is, target time in this situation is governed by solely by gravity and vertical distance. Although we had initially modelled our equations to reach the summit in order to make the actual angle of launch more solvable since that would mean that we didn't have to consider "balancing" the initial height of the robot to derive the value of \(\theta\). However, seeing as the summit is the center of the portion of the trajectory with the least vertical travel for a given span of time or distance, we would not only be able to isolate time but also find \(\theta\) with the least vertical error. As such, we modelled an equation for time which can be found as shown below.

    \[\displaylines{t = \sqrt{v_0/(0.5* \(g\))}}\]

    In addition to time, we also needed to find the RPM of the motor of the launcher, for which we needed to find the circumference of the launcher, which was 0.48066m. From here, we found the radius to be approximately 0.076m, which we could use for our RPM equation which was RPM = v = \omega r, with r representing 0.076m. To find muzzle velocity, we plan on using our velocity formula as of now but this is likely to change as we continue to inspect our equation. Here are the overall equations we have developed so far now that we know how to look for time at the apex. \[\displaylines{d/cos(\theta)(t/2) = hv_0 \\ ((0.88 - 0.41) - 0.5(a)t^2)/sin(t/2)= vv_0, t = \sqrt{v_0/(0.5* \(g\))}}\]

    Next Steps:

    Using these equations, we plan to be able to identify angle of launch, RPM and muzzle velocity for a range of distances away from the goal. Mainly, we plan to derive values for a very specific range (likely 2 to 2.5m) to present our calculations as well as our equations to Dallas Personal Robotics Group in the upcoming meeting on Tuesday.

    RingSlinger 9000 Build Progress

    27 Jan 2021
    RingSlinger 9000 Build Progress By Paul and Cooper

    Task: Build and prototype the Flywheel Launcher

    For this years new season we used an innovative flywheel-based launcher to score the disks into the goal. After 3 weeks of work, we also managed to come up with a name for it - The RingSlinger 9000. Any posts referring to our flywheel launcher refer directly to the Ringslinger itself. This launcher uses the properties of rotational inertia to propel the game pieces along a carefully calculated, fixed trajectory to ensure that the disks have the same launch trajectory every time, allowing both automation and driver control to more simple. The assembly is physically constructed from several sheets of aluminum and one sheet of polycarbonate, modeled by Jose and cut on our CNC mill. The spacers between the sheets are made of nylon due to its high strength and low friction, and we chose to use a custom ninjaflex ring around the CNC milled flywheel to ensure that the wheel could transfer the maximum amount of kinetic force to the disks. The launcher is designed in such a way as to impart rotational energy on the disks, spinning them. This helps maintain a constant trajectory, similar to how an NFL Quarterback spins the football when scoring a touchdown pass, or how the grooving on a rifle spins a bullet, ensuring in-flight stability. In tests, our design proved to be mostly effective, launching disks along a consistent trajectory. Our first firing test was during our video meet with the DPRG, and with a few tweaks, it was performing up to standards. However, there were some issues that needed to be addressed - mainly, we need to complete further testing to see if any of the rings experience damage as a result of our launch, where the general area the rings tend to cluster at, and fine-tuning an equation to model the launch. Correcting these issues will make the accuracy of the RingSlinger that much more accurate.

    Next Steps:

    Future plans to expand upon this design include integrating a voltage regulation module, to ensure that the disks are always spun at a constant velocity. In tests, we noticed that as time in a round passed, the drop in main battery voltage caused the disks to be launched at a slightly slower velocity, not enough to phase a human driver, but enough to render automated shooting protocols inaccurate. To remedy this, we will find out the lowest point the battery will reach during the course of a match, and regulate the voltage being fed into the flywheel motor to not surpass the aforementioned "low" voltage during the match.

    New Addtions to the Elbow

    28 Jan 2021
    New Addtions to the Elbow By Jose

    Task: Design new parts to better mount the ring launcher and encoder

    First thing to do in this CAD session is to design a secondary mounting point for the ring launcher. To do this, the existing mount was projected and any unecessary parts were removed. Only the holes for adding the REV extrusion as well as the holes for encoder pivot were left.

    The next thing to design was a mount for the encoder, as it needs to be prevented from rotating with the shaft. The closest stationary location was the REV extrusion on top of the GoBilda U-channel. This part has three holes at the bottom to be mounted on the REV extrusion, as well as a hole at the top to reach the encoder.

    Next Steps:

    As for manufacturing, we need to mill out the ring launcher mount and 3-D print the encoder pivot and holder. As for programming, the new encoder should help with aligning the ring launcher.

    Correcting the Trajectory Calculations Equations

    28 Jan 2021
    Correcting the Trajectory Calculations Equations By Bhanaviya, Ben, and Mahesh

    Task: Correct the trajectory calculations after the DPRG meeting

    In the past week, we've been experimenting with a series of equations to derive the angle of launch of our flywheel launcher when we need it to travel a certain distance. 2 days ago, we were able to present the calculations we'd derived so far to Dallas Personal Robotics Group. After feedback from DPRG and a little more testing ourselves, we've discovered the following corrections we need to make to our equation. For reference, this is a correctional post regarding our earlier calculations - you can find versions of our earlier equations and calculations in our previous posts.

    Time

    One of the biggest fixes we needed to make to our equation was identifying how to derive time as a fixed variable. We wanted to be able to find the exact time in seconds it would take for our launcher to launch a ring at 0 vertical velocity. We needed this because we knew that for any shot that crosses through the goal with zero vertical speed, the ring needed to have an initial upward velocity such that the acceleration due to gravity brings it to zero vertical velocity at the point it reaches our target height. Regardless of what the horizontal component is, target time in this situation is governed by solely by gravity and vertical distance. As such, finding time at 0 vertical velocity would allow us to model an equation for the summit of the ring's trajectory, which is where we expect the goal post to be in order to reduce variability and error in our calculations. This understanding allowed us to create the following equation for time with h representing the height of vertical travel:

    \[\displaylines{t = \sqrt{h/(0.5* g)}}\]

    Initial Velocity

    Initially, we had planned on solving for the initial vertical velocity of the ring then plugging into the equation for horizontal vvelocity, work backwards and find angle of launch. However, in order to have the most accurate trajectory possible, we expect the horizontal and vertical velocity to be varying, especially since the vertical velocity is affected by gravity and the horizontal isn't. Thus, we expect the vertical and horizontal initial velocity to look like the following, wherein t is time, initial vertical velocity is v_0 and initial horizontal velocity is h_v0:

    \[\displaylines{v_0 = g*t \\ h_v0 = d/t}\]

    Muzzle Velocity

    Initially, we had planned on using velocity on its own for muzzle velocity. However, now that we have two initial velocities, our equation for muzzle velocity changed to look sort of like the Pythogorean Theorem with us solving for c, since the muzzle velocity represents the "hypotenuse" or trajectory in this case, mV representing muzzle velocity.

    \[\displaylines{mV = \sqrt{v_0^2 + h_v0^2}}\]

    Initial Height of Launch

    Previously, we measured the height of the robot - 0.41m - to be our initial height of launch. However, one issue with the vertical travel is that if we take 0.41 to be a variable which is affected by \(theta\) then we need to figure out how much that change is for the vertical travel distance - an error bar or the design of experiments chart might work well for this so we can make sure angle of launch doesn't confound our initial measures for time and muzzle velocity since both of which rely on 0.47m (the height of travel taken by subtracting the height of the robot from the height of the goal) being constant which in turn relies on 0.41m.

    Fixed Values

    Since we know the height of travel to be 0.47m and \(g\) to be 9.8 m/s^2, using our time equation, we found time to be 0.31s. Using time, we could then find the initial vertical velocity to be 3.055m/s and horizontal velocity dependent on the distance of the robot away from the robot, which we take to be our explanatory variable.

    Our equation ultimately stays the same but the methods we used to calculate time and initial velocities have now changed, which should change our final values substantially. In our latest post, we had a set of very different values in our meeting with DPRG. However, with these edits, we now have the following calculations (which we simplified by plugging into a spreadsheet to get automated values.

    In order to sanity-check our calculations, we also derived the following parabola to represent the arc of the trajectory:

    Next Steps:

    Our immediate next steps are to model initial height as a function of \(theta\). Since we know that initial height is susceptible to change as the elbow of the robot drops and raises in accordance with angle of launch, being able to model initial height as a function will allow us to reduce all possible sources of error and find an accurate measurement of trajectory calculations. This will likely require another process like the one we did here as we attempt to model initial height as a function. W'd like to thank DPRG for all their feedback and for their help in allowing us to fine-tune these calculations!

    Derive And Translate Trajectory Calculations Into Code

    29 Jan 2021
    Derive And Translate Trajectory Calculations Into Code By Mahesh, Cooper, Shawn, Ben, Bhanaviya, and Jose

    Task: Derive And Translate Trajectory Calculations Into Code

    To ease the work put on the drivers, we wanted to have the robot automatically shoot into the goal. This would improve cycle times by allowing the drivers, theoretically, to shoot from any location on the field, and avoids the need for the robot to be in a specific location each time it shoots, eliminating the time needed to drive and align to a location after intaking disks.

    To be able to have the robot automatically shoot, we needed to derive the equations necessary to get the desired \(\theta\) (angle of launch) and \(v_0\) (initial velocity) values. This would be done given a few constants, the height of travel (the height of the goal - the height of the robot, which we will call \(h\)), the distance between the robot and the goal (which we will call \(d\)), and of course acceleration due to gravity, \(g\) (approximately \(9.8 \frac{m}{s^2}\)). \(d\) would be given through either a distance sensor, or using vuforia. Either way, we can assume this value is constant for a specific trajectory. Given these values, we can calculate \(\theta\) and \(v_0 \).

    However, without any constraints multiple solutions exist, which is why we created a constraint to both limit the number of solutions and reduce the margin of error of the disk's trajectory near the goal. We added the constraint the disk should reach the summit (or apex) of its trajectory at the point at which it enters the goal, or that it's vertical velocity component is \(0\) when it enters the goal. This way there exists only one \(\theta\) and \(v_0\) that can launch the disk into the goal.

    We start by outlining the basic kinematic equations which model any object's trajectory under constant acceleration: \[\displaylines{v = v_0 + at \\ v^2 = v_0^2 + 2a\Delta x \\ \Delta x = x_0 + v_0t + \frac{1}{2}at^2}\]

    When plugging in the constants, considering the constraints mentioned before into these equations, accounting for both the horizontal and vertical components of motion, we get the following equations: \[\displaylines{0 = v_0sin(\theta) - gt \\ 0^2 = (v_0sin(\theta))^2 - 2gh \\ d = v_0cos(\theta)t}\] The first equation comes from using the first kinematic equation in the vertical component of motion, as the final velocity of the disk should be \(0\) according to the constraints, \(-g\) acts as the acceleration, and \(v_0sin(\theta)\) represents the vertical component of the launch velocity. The second equation comes from using the second kinematics equation again in the vertical component of motion, and again according to the constraints, \(-g\) acts as the acceleration, \(h\) represents the distance travelled vertically by the disk, and \(v_0sin(\theta)\) represents the vertical component of the launch velocity. The last equation comes from applying the third kinematics equation in the horizontal component of motion, with \(d\) being the distance travelled by the disk horizontally, \(v_0cos(\theta)\) representing the horizontal component of the launch velocity, and \(t\) representing the flight time of the disk.

    Solving for \(v_0sin(\theta)\) in the first equation and substituting this for \(v_0sin(\theta)\) in the second equation gives: \[\displaylines{v_0sin(\theta) = gt \\ 0^2 = (gt)^2 - 2gh, t = \sqrt{\frac{2h}{g}}}\] Now that an equation is derived for \(t\) in terms of known values, we can treat t as a constant/known value and continue.

    Using pythagorean theorem, we can find the initial velocity of launch \(v_0\). \(v_0cos(\theta)\) and \(v_0sin(\theta)\) can be treated as two legs of a right triangle, with \(v_0\) being the hypotenuse. Therefore \(v_0 = \sqrt{(v_0cos(\theta))^2 + (v_0sin(\theta))^2}\), so: \[\displaylines{v_0sin(\theta) = gt \\ v_0cos(\theta) = \frac{d}{t} \\ v_0 = \sqrt{(gt)^2 + {\left( \frac{d}{t}\right) ^2}}}\]

    Now that \(v_0\) has been solved for, \(\theta\) can be solved for using \(sin^{-1}\) like so: \[\displaylines{\theta = sin^{-1}\left( \frac{v_0sin(\theta)}{v_0} \right) = sin^{-1}\left( \frac{gt}{v}\right) }\]

    In order to be practically useful, the \(v_0\) previously found must be converted into a ticks per second value for the flywheel motor to maintain in order to have a tangential velocity equal to \(v_0\). In other words, a linear velocity must be converted into an angular velocity. This can be done using the following equation, where \(v\) = tangential velocity, \(\omega\) = angular velocity, and \(r\) = radius. \[\displaylines{v = \omega r, \omega = \frac{v}{r} \\ }\] The radius of the flywheel \(r\) can be considered a constant, and \(v\) is substituted for the \(v_0\) solved for previously.

    However, this value for \(\omega\) is in \(\frac{radians}{second}\), but has to be converted to \(\frac{encoder \space ticks}{second}\) to be usable. This can be done easily with the following expression: \[\displaylines{\frac{\omega \space radians}{1 \space second} \cdot \frac{1 \space revolution}{2\pi \space radians} \cdot \frac{20 \space encoder \space ticks \space per \space revolution}{1 \space revolution} \cdot \frac{3 \space encoder \space ticks}{1 \space encoder \space tick}}\] The last \(\frac{3 \space encoder \space ticks}{1 \space encoder \space tick}\) comes from a \(3:1\) gearbox placed on top of the flywheel motor.

    To sanity check these calculations and confirm that they would indeed work, we used a desmos graph, originally created by Jose and later modified with the updated calculations, to take in the constants used previously and graph out the parabola of a disk's trajectory. The link to the desmos is https://www.desmos.com/calculator/zuoa50ilmz, and the image below shows an example of a disk's trajectory.

    To translate these calculations into code, we created a class named TrajectoryCalculator, originally created by Shawn and later refactored to include the updated calculations. To hold both an angle and velocity solution, we created a simple class, or struct, named TrajectorySolution. Both classes are shown below.

    public class TrajectoryCalculator {
            private double distance;
    
            public TrajectoryCalculator(double distance) {
                this.distance = distance;
            }
        
            public TrajectorySolution getTrajectorySolution() {
                // vertical distance in meters the disk has to travel
                double travelHeight = Constants.GOAL_HEIGHT - Constants.LAUNCH_HEIGHT;
                // time the disk is in air in seconds
                double flightTime = Math.sqrt((2 * travelHeight) / Constants.GRAVITY);
        
                // using pythagorean theorem to find magnitude of muzzle velocity (in m/s)
                double horizontalVelocity = distance / flightTime;
                double verticalVelocity = Constants.GRAVITY * flightTime;
                double velocity = Math.sqrt(Math.pow(horizontalVelocity, 2) + Math.pow(verticalVelocity, 2));
        
                // converting tangential velocity in m/s into angular velocity in ticks/s
                double angularVelocity = velocity / Constants.FLYWHEEL_RADIUS; // angular velocity in radians/s
                angularVelocity *= (Constants.ENCODER_TICKS_PER_REVOLUTION * Constants.TURRET_GEAR_RATIO) / (2 * Math.PI); // angular velocity in ticks/s
        
                double theta = Math.asin((Constants.GRAVITY * flightTime) / velocity);
                return new TrajectorySolution(angularVelocity, theta);
            }
        }
        
    public class TrajectorySolution {
        private double angularVelocity;
        private double theta;
    
        public TrajectorySolution(double angularVelocity, double theta) {
            this.angularVelocity = angularVelocity;
            this.theta = theta;
        }
    
        public double getAngularVelocity() {
            return angularVelocity;
        }
    
        public double getTheta() {
            return theta;
        }
    }
    

    Next Steps:

    The next step is to use PID control to maintain target velocities and angles. The calculated angular velocity \(\omega\) can be set as the target value of a PID controller in order to accurately have the flywheel motor hold the required \(\omega\). The target angle of launch above the horizontal \(\theta\) can easily be converted into encoder ticks, which can be used again in conjunction with a PID controller to have the elbow motor maintain a position.

    Another important step is to of course figure out how \(d\) would be measured. Experimentation with vuforia and/or distance sensors is necessary to have a required input to the trajectory calculations. From there, it's a matter of fine tuning values and correcting any errors in the system.

    Build Progress 1/30

    30 Jan 2021
    Build Progress 1/30 By Trey, Justin, and Jose

    Task: assemble different intake prototypes

    Today we worked on different intake systems to place the rings in the launcher. We finished our first prototype for a belt type intake and lift. The 3d printed belt was able to slide rings along a vertical piece of polycarb to place rings into the launcher. The speed of the motor and belt makes this one of our quickest intake and delivery prototypes. Our other prototype was a spatula shaped "intake" that would scoop up disks, and flip them upwards into a basket on top of the launcher. We used aluminum CNC'd into a curved spatula that would perfectly fit around the disks to ensure an accurate launch. Rubber bands pull the spatula upward, where it hits stoppers and launches the rings upwards. This prototype created semi consistent flips, but it was hard to gauge how far down to pull the spatula to give a desired launch height. A problem with this method is the many different factors that can be changed to give an optimal launch. Different launch angles, distances from the launcher, rubber band tensions and lengths. This flipper would involve a lot of experimentation that would result in mostly failures. This method also requires a lot more driver skill to scoop up the relatively small disks.

    We also tested our fully assembled launcher - the Ringslinger 9000 - with working code. We wanted to measure how consistent our launches were by shooting multiple rings at a target and measuring the furthest distance between impact points. We used flour on a flat surface to show where the rings were hitting, then circled the clusters for our trials to get an approximate radius of error. We found that our launches were mostly consistent within a small radius, but had outliers that were hitting the exact same outer lying spot. This indicates a consistent flaw with our launcher and requires a closer look at how it moves and launches the rings. We also repeated this test by identifying where the rings tended to cluster when they had been launched beyond the length of the goal-post - even though the Ringslinger 9000 was not supposed to launch rings at such a height, identifying where it tended to cluster after landing also allowed us to evaluate its general launch patterns and accuracy.

    Next Steps:

    The belt system can easily grab disks and brings them to the other end of the ramp very quickly. While it works well when we test it with our hands, we need to create a rigid structure to connect the belt and ramp, which will be mounted on the chassis. This will allow us to see how the belt will need to pivot to grab rings, and if our current belt still maintains grip without human assistance. We will also take a closer look at our launcher to see what's different about our outlier launches.

    Programming Session 1/31

    31 Jan 2021
    Programming Session 1/31 By Mahesh and Cooper

    Task: Set up FTC Dashboard

    We wanted to setup FTC Dashboard for graphing, configuration, vision, and later on, odometry. FTC Dashboard enables graphing of numeric variables, which can simplify PID tuning enormously through plotting the current position/velocity and the target. Additionally FTC Dashboard enables real-time editing of configuration variables, and in the context of PID tuning, this enables PID constants to be edited on the fly. With the later goal of implementing odometry for localization, FTC dashboard can be used to draw the robot's pose (position and heading) on a canvas, to easily confirm the accuracy of our odometry calculations. Dashboard also allows for images to be sent, allowing us to also debug our OpenCV vision pipeline.

    We used FTC Dashboard during this coding session to tune the coefficients of our newly created flywheel velocity PID loop. This would ensure that our flywheel would be able to maintain the desired angular velocity we want it to, in order to consistently shoot the disk into the goal using our trajectory calculator.

    Next Steps:

    The next step is to harness the power of FTC Dashboard to verify our odometry calculations by drawing the robot's pose information onto the canvas, using vectors/arrows to signify the base's heading, the turret's heading, and the bearing from the robot to the goal. This would point out any glaring errors in our odometry calculations, and would serve to visually represent the degree of error our calculations would naturally experience as a result of slippage and other factors.

    Pink v. Cyan Remote Scrimmage Post Mortem

    31 Jan 2021
    Pink v. Cyan Remote Scrimmage Post Mortem By Cooper and Jose

    Task: review the progression of matches in our latest scrimmage

    We participated in the “Pink v. Cyan Remote Scrimmage” over the week, wherein we submitted our matches at an appropriate amount of time before the cutoff time. Doing this scrimmage has given us good insight into how to tune the performance of what is on the robot already, and what needs to be added. We submitted the standard 6 matches, and I want to go in depth for each.

    Before I delve into the weeds, I would like to explain our hypothetical perfect run for these matches. In auton, since we aren’t using vision quite yet, we had the robot always assume a 4 stack. The robot should put the wobble goal we are holding in the start ibn the appropriate corner tile, then backup to park on the line. In teleop we should retrieve the second wobble goal and put it across the line. With this all such that we can, in the endgame, put both of the wobble goals over the back wall. So therefore, in a perfect run, we could have 60 points max. An example can be seen in the video above.

    Match 1: Starting off on the wrong foot, when we started auton things looked fine. However, our pink decorations on the front of the robot got caught in the front caster wheel, making us veer off and hit the wall. We were able to re-orient the robot since the next few steps of the auton were based on the imu. However we didn’t park due to being off of the expected final position of the first movement. During teleop we successfully moved both of the wobble goals over to the other side of the shooting line, and then in teleop we just barely ran out of time putting down the second wobble goal over the back wall.

    Match 2: We got lucky in the second round and got the preferred 4 ring stack. However, we couldn’t make use of that luck due to a driver error when selecting the auton-- auton did not execute. So in teleop, we moved both wobble goals over to the correct side of the shooting line. Then, in the endgame, we successfully moved one wobble goal over the wall. The second we ran out of time trying to grab.

    Match 3: This time around, we had the opposite happen from the last round in auton. The rings randomized to be a 1 stack, but auton performed perfectly. Teleop was nominal, but endgame posed a new problem. When trying to put the wobble goal over the wall, it got stuck on the turret, seen in the video below at 2:44. This costed us enough time to have us not score any of the wobble goals

    Match 4: this is the video at the top of the post, because it was a perfect match.

    Match 5: Like match 3, we were randomized 1 ring, and auton performed perfectly. Unlike match 3, teleop and endgame were normal, with us scoring 1 wobble goal.

    Match 6: Final match, auton almost worked. The wall-following messed up at the very end of the first run, making us drop the wobble goal just out of the box, and miss parking. In teleop/endgame, we almost had a repeat of match 3, but we were able to shake off the wobble goal and score one.

    To start on the subject of lessons learned, It is obvious we should practice more. Driver practice has always been a weak area for us.(Having said that, for the amount practiced the driver did excellent). One thing the driver should not have had to account for is that possibility to lodge the wobble goal on the robot. This is subject to change anyways, as when the launcher is mounted on the robot, the wobble gripper is going to have to move. Not only move, but change; the current gripper has too tight a tolerance to be used effectively. It isn’t possible to have it stay the way it is when drivers will also be tasked with picking up rings. Finally, we learned that we need to work out the kinks in the wall following what happens at the beginning of auton. We only really did this, because we are still working on a better way to square the IMU to the field, and the human error was too great and cumulative on that far run to have it work reliably.

    Next Steps

    Execute the solutions to the problems found.

    Intake Iterations Summary

    03 Feb 2021
    Intake Iterations Summary By Bhanaviya and Ben

    Task: Go over our 5 intake iterations

    This season, we experimented with 5 gripper models - both for our robot in three days project and for our competition bot. While we do not plan on using all 5 of these models, they allowed us to effectively implement the engineering process within our build season. Experimenting with each intake helped us to identify the potential of each design as well as how two individual designs could be combined to create a more efficient one. Each of these designs has its own article but this is just a summary of all of our intake designs so far.

    1)Archimedes Intake

    This was one of our first designs and it was based on an Archimedes screw. A screw shaped surface would draw the rings from the fields and directly to the launcher. While this would have been a great feeder, our primary issue was that would essentially be a slower system which could likely only draw in ring at a time so it never progressed past its CAD stage.

    2) Ladder Intake

    This gripper functions with a series of omniwheels mounted in between two rev extrusion bars, which in turn are connected to a ladder-like assembly with a control hub mounted on the first rung of the ladder and to the wheels. As the wheels rolled, they would slide on top of the rings and roll them into the system. The issue with this system was that it had significant delay in "rolling" the rings in since if the omni wheels spun too fast, they would lack the tracton to "grip" onto the wheel.

    3) Belt Sander Drive

    This system was far more simplistic than our earlier ones and had a faster intake speed during testing too. The actual drive would be mounted onto the robot with the "back" of the system sliding over the rings and carrying them across the conveyor belt to the top of the robot. Despite its efficacy, it had one main issue - it didn't have the gription needed to ensure the rings slid across the belt.

    4) Caterpillar Intake

    Luckily, the gription issue could be resolved pretty easily with the caterpillar intake. This system was dual tracked unlike the first one, and had rubber bands threaded through the tetrix tracks to improve gription with double the power. Ultimately, this was a pretty successful issue but it did not have as much speed as it could have and lacked the signature Iron Reign charm.

    5) Ringevator Ultra Flex Unlimited Intake

    This gripper, the Ringevator, for short was a combination of our two previous best systems - the belt sander drive and the caterpillar. It possessed the mono-drive from the belt sander and similarly drew in rings from its back and carried them across a conveyor belt to the top of the robot and like the caterpillar, had a means for increasing friction with the surface of the rings. While the caterpillar intake did this with rubber bands, the Ringevator accomplished it with ninjaflex "fins" layering the "belt" to sweep in the rings. Both sides of the intake are covered with polycarb to encase the conveyor built internally and to ensure the rings don't fall off when picked.

    Next Steps

    Now that we have analyzed all of our intake designs so far, it will be easier for us to streamline the best design to mount on the robot. While the ringevator seems to be our best choice, we still need to conduct further testing to see which one is the most efficient.

    Materials Test Planning

    04 Feb 2021
    Materials Test Planning By Bhanaviya

    Task: Create a system to test our materials to better understand their grip potential

    Here at Iron Reign, we're used to using off-the-shelf materials for our robot. For this season, these include pillowcases (front and back) and an Einstein wig, since we are looking for materials with lesser grip. However, we need to do a thorough investigation of these materials before we can determine their efficacy on the robot.

    Specifically, we plan to implement these parts on a ramp connecting the intake and our launcher. Although we have not yet mounted our intake onto the robot, we expect to have a launch leading down from the intake to the launcher to enable to ring to slide down and then be launched. This requires a material with very less grip and a lot more slip. However, before we can decide which material would have the best grip, we need to test them to determine their on-robot properties. To do this, we will implement a slip test as shown below.

    The main thing that we want to test is the amount of energy they have while sliding and then the amount of energy they lose upon collision. We plan to test this through the coefficient of friction of the mitts. Simply put, we will place the ring on top of the of the pillowcases/wig and will tape down the material being tested on a flat surface. Then, we will lift the surface and using simple inverse trigonometric properties, we will calculate theta, the angle at which the stone begins to slip from the material. The bigger the angle, the higher the friction coefficient of the material, which equates to it having better grip. Since we are looking for a material with the least grip possible, we will be looking for the material with enables the ring to slide down at the smallest angle.

    Next Steps

    With our testing planned out, we will next begin documenting the angle at which the ring slips from each type of material. The calculations from the actual testing, including the equation we used, will be inputted into a separate post.

    RingSlinger 9000 Summary

    05 Feb 2021
    RingSlinger 9000 Summary By Jose

    Task: Summarize the key components of Ring Launcher 9000

    A ring launcher is more than just a flywheel; it needs a barrel to give the ring a path to move through. A 90 degree barrel is the best fit for ROBOT as the intake will take up the other half of the robot. The plan is to later on add an indexer to transport rings from the intake to the barrel in a way that can be controlled, that is, allowing the driver to manually choose when to let rings into the barrel.

    The barrel design looks simple, but there are lots of hidden things making it work as intended. For one, the motor driving the flywheel is attached via a slotted motor mount. The mount is then placed directly on the center plate through an extension to the center plate. Additionally, there is a plate below the one that the ring travels on top of. This plate is used to keep the shaft in place, it follows a similar shape to the others to preserve strength, as it is half of what keeps the flywheel in place. The bottom plate also supplies support to the center plate, this is due to the fact that the center place is not attached to the flywheel, instead it has 3mm of clearance in case of any vibration the flywheel may have. Finally, at the exiting end of the barrel, the side wall extends linearly to ensure the ring doesn’t spin off its intended path.

    Over to the other side of the barrel is the ring feeder. A huge nylon wall guides the rings into the ring flipper. The ring flipper is composed of a a servo with a custom made flipper to push rings into the flywheel.

    Next Steps:

    With everything milled out and 3-D printed, the next step is to take this to programing as the idea is to have the ring laucher be almost completely automated.

    Ring Launcher 9000 On-Bot Testing

    05 Feb 2021
    Ring Launcher 9000 On-Bot Testing By Cooper and Jose

    Task: Test the intake now that it is on the robot

    Today we performed proper field testing of the Launcher subsystem. While we have done many tests in the past with it, this was the first time we ran arrays of consecutive shooting with the launcher on the robot. Doing this meant some small modifications that led to an evolution of the “trigger” of the subsystem. Performing the tests was one of my friends, who we let drive the robot to gauge interest in being in the robotics program, and his ability driving.

    First, lets cover the trigger evolution, which is what lets us more smoothly conduct the tests. As it stood, and as pictured above, the trigger was a single spike-like piece of 3-d printed nylon attached to a servo. Wherein it pushes rings into the flywheel to shoot them. It’s main body follows the contour of the shooter’s body that is directly above and below it, as to conserve space. We initially thought that this would be feasible to keep so small, however, we noticed in previous testing that the rings did not chamber correctly when fed by the in-built gravity-fed magazine. The ring would fall onto the trigger, and tilt backwards, leading to the ring getting jammed behind the trigger when it tried to return to its original position. That effectively meant that we could only shoot one ring before we would have to physically reload. To combat this, it was devised that a small plate would have to be added to the top of the trigger, protruding at the back top of the trigger. Since it was just me and the driver there that day, I fashioned a mock-up out of cardboard and painters tape, as seen in the video below. You might also notice a cardboard piece in front of the rings in the magazine, and this was another impromp-to thing, which addressed the unforeseen movement of the rings in the magazine during on-bot use. This ended up, later that night, for the resident CAD/CAM expert, Jose, to make adjustments to the model. The following day, a version of the trigger was printed that had the plate, and was tested/proofed to see that it worked as expected.

    Moving on, let's talk performance. The shooter, after replacing the motor gears and removing an elastic band from the arm, did wonderfully. When firing consecutively in the same position, the effective spread of the shots was tight enough to actually hit whichever goal was being aimed for. The driver also came up with a test, where he would shoot a goal, move, and then return to the same position, to see if the turret auto-turn was fine enough. Turns out, having a different subsystem with different weight distributions means that the PID coefficients aren’t properly tuned. Of course this was to be expected, but it wasn’t too off, suggesting that all that needs to be done is to adjust ki and kd.

    Next Steps:

    Tune said coefficients, make a final version of the magazine retainer, and further test the driver.

    Accounting For Initial Height

    06 Feb 2021
    Accounting For Initial Height By Mahesh

    Task: Account For Initial Height

    In the previous trajectory calculations post, "Derive And Translate Trajectory Calculations Into Code", we did not take into account how the length of the launcher would effect our calculations. In reality, the height the disk would have to travel would be shortened by the launcher, since when titled at an angle the vertical distance would be shortened by \(lsin(\theta)\), where \(l\) represents the length of the launcher. This is because our launcher is mounted on a hinge, and therefore the rotation of the launcher affects the position where the disk leaves the launcher.

    To take this into account, we would have to add \(lsin(\theta)\) to the vertical distance the disk has to travel, however, \(\theta\) depends on this distance as well. To solve this problem of circular dependency we can use an iterative method. This is because when \(\theta\) is calculated for a given trajectory, the initial height of the disk will be raised by \(lsin(\theta)\). This means the disk has to travel less distance vertically, meaning that \(\theta\) will be smaller with the new launch height. But, when \(\theta\) is decreased, so will the launch height, will in turn will raise theta, and so on. This process is convergent, meaning that iterating the process described above will eventually yield a \(\theta\) whose change in the launch height is reflective of the launch height's change in theta. The following process can be used to find the convergent \(\theta\):

    1. Calculate \(v_0\) and \(\theta\) from the current launch height
    2. Find the new launch height given the previously calculated \(\theta\)
    3. Repeat steps 1-2

    We graphed out the convergence of \(\theta\) to confirm that these calculations would work correctly. Below is an image of the convergence of \(\theta\) given a distance of 4 meters and a launcher length of 0.3 meters:

    To exaggerate the effect here is another image with a launcher length of 1.8 meters:

    Next Steps:

    The next step is to implement this in code to account for the height of the launcher, a fairly simple task. Tuning the iterations for performance vs accuracy won't really be necessary since \(\theta\) seems to converge exponentially and iterations happen very quick on modern hardware anyway.

    One concern still exists which is that the horizontal distance the disk has to travel is also effected by the launch angle \(\theta\). However, this would only effect the distance by a matter of fractions of a centimeter, so it is likely not a big problem. If significant errors are encountered which cannot be traced down to other hardware or software defects/bugs then we can consider taking into account the effect that \(\theta\) has on distance, and vice versa.

    Meeting Log

    06 Feb 2021
    Meeting Log By Ben, Bhanaviya, Cooper, Jose, and Trey

    Task: Prepare the portfolio and intake before the qualifier

    The three of us worked on the engineering portfolio, discussing what we needed to get done in these 3 weeks between now and the qualifier. It was agreed that Ben, Bhanaviya, and Jose would be largely responsible for the portfolio and having other team members add information when necessary. We also began drafting an email to a physics professor who may help us with our physics calculations.

    Trey and Justin mostly worked on rebuilding the ring intake to make it easier to mount onto the robot. They also rebuilt parts of it to make it easier to service in the future. There were little issues with this, although access to the robot was limited at times during code testing. Time constraints also played a role in the progress that was made.

    Cooper had planned on calibrating the ticks/degree on the arm, implementing the trajectory calculator, fixing the LED on the robot, and making progress on Vuforia. By the end of the work period, he had successfully calibrated the ticks per degree on the robot arm and implemented the trajectory calculator. He decided to fix the LED later because of its low priority and time constraints restricted progress on Vuforia.

    Next Steps

    The next steps for the portfolio are to begin formatting and gathering information for all the subsystems and from team members. Once we have all the information, we will have to condense it into an easily-digestible 15 pages. We will also have to fix the LED lighting solution on the front of the robot, along with troubleshooting Vuforia.

    Adding Margins Of Error To Desmos

    13 Feb 2021
    Adding Margins Of Error To Desmos By Mahesh

    Task: Add Margins Of Error To The Desmos Calculator

    In order to visually represent the significance of placing the constraints we did, we modified our desmos trajectory calculator to include a margin of error box. This box would help to highlight the importance of keeping the summit of our trajectory aligned with the goal, and how deviations from the summit would result in drastically increasing margins of vertical error for the same horizontal error.

    As seen above, even with the same theoretical horizontal margin of error, having the goal (which can be thought of as the center of the error rectangle) placed further from the summit of the trajectory results in a larger vertical error. This helps to visually justify why we chose to have the summit of the disk's trajectory at the height of the goal, because the disk's vertical margin of error is minimized with that constraint.

    Additionally, we are able to minimize the energy required to launch the disk. This is because, by the law of conservation of energy, the energy at any point in the disk's launch must be equal to the energy at any other point. We can consider the point where the disk is about to be launched from the launcher and the point where the disk is at it's maximum height. The total mechanical energy (kinetic energy + gravitational potential energy) of the disk in these two points must be equal.

    Kinetic energy is represented by \[\displaylines{K = \frac{1}{2}mv^2}\]

    and gravitational potential energy is represented by \[\displaylines{U_g = mgh}\]

    The higher the disk goes, the larger the total mechanical energy of the disk at the highest point in it's trajectory, since \(U_g\) is proportional to \(h\). And by the laws of conservation of energy, the energy at the start of the launch would have to equal this larger mechanical energy for the disk to reach a higher altitude. By having the disk only go as high as it needs to in order to reach the goal, we minimize the total energy we need to put into the disk and the initial velocity of the disk at launch (since \(K\) is proportional to \(v^2\)). This is ideal for our flywheel as the likelihood of it being not fast enough is minimized.

    The link to the edited desmos calculator can be found at https://www.desmos.com/calculator/csxhdfadtm, with \(E_c\) being the variable to control the center of the error rectangle and \(E\) being the variable to control the margin of horizontal error.

    Ringslinger 9000 Step-by-Step Guide

    13 Feb 2021
    Ringslinger 9000 Step-by-Step Guide By Anisha, Paul, Trey, and Cooper

    Task: assemble different intake prototypes

    The Ringslinger 9000 is a crucial part of the robot and requires careful planning to build. Although we have a relatively simple intake and launching mechanism, their components are a bit more complicated. After getting the individual pieces of our launcher system ready, we were able to start putting them together to form the system. This post will serve as a step-by-step guide on how the entire launching system was assembled.

    The process starts with the launcher baseplate which was constructed using aluminum and was cut on the CNC mill. As shown in the picture above, several holes were strategically placed in various areas on the periphery of the plate for screws to go to hold the other elements such as the Ultraplanetary REV motor that powers the flywheel and the nylon guide wall which guides the rings as they move through the system. The plate itself is mounted onto 2 REV extrusion bars using several metal brackets as shown below.

    The bars are mounted onto a hinge which carries the entire system and rotates as needed during the game.

    Launcher Guidewall/extension

    The custom-printed guidewalls are attached to the plates using retaining screws, and function to guide the rings to the flipper to be prepared for launching.

    Motor Mechanism

    The REV 3:1 Ultraplanetery motor which drives the flywheel is attached via a slotted motor mount as shown below. It is then placed on an extension of the launcher baseplate using 6 screws. The motor can spin its sprocket at 1,727 RPM and drives the wheel by a belt between the two sprockets.

    As mentioned in the Ring Launcher Summary, our launching system essentially is made out of 3 levels: the mounting, driving, and ring levels. The pictures below show the driving level's center plate with 3D printed nylon spacers mounted to separate it from the ring level. The spacers closest to where the flywheel will be attached each contain 2 holes and are attached by screws. The larger spacers also contain 2 holes where screws are attached to mount the driving and ring levels together. After getting the two individual levels ready, they are put together using screws, as shown below.

    Shown below is the custom-made servo spacer. The servo is mounted next to the opening that is next to where the motor is mounted. It is fixed into place using screws.

    Pictured below is a bird's eye view of the center plate. The servo located on the back of the ring slinger essentially spins the ring flipper to exert motion onto the rings to prepare them for launching by pushing them into contact with the flywheel. The REV Ultraplanetery motor is mounted onto the platform using 4 screws and nuts and the servo is mounted also using 4.

    The flywheel is composed of a NinjaFlex center wheel which is sandwiched between 2 custom aluminum plates.

    The flywheel's upper aluminum plate works to keep the wheel from flying upward. A polycarbonate sheet works with its lower aluminum plate to fix the axle in place. The polycarbonate sheet is shown below. It also plays a role in keeping parts in place.

    The Flywheel is attached to a pulley which drives it using the belt that runs from the wheel pulley to the REV motor. As seen in the CAD model above and the picture below, the wheel was assembled by connecting the 2 aluminum plates to the NinjaFlex wheel in the center using screws. The flywheel spins on the shaft that is locked into place with the shaft collar on each end.

    As shown above, the whole launching system to the arm that sits on a pivot in the back of the robot which adjusts itself by rotating to the angle that is ideal for where a ring needs to be launched to.

    Finally, a look at the robot after all the individual parts were assembled is pictured below.

    Next Steps:

    One of the highlights of this system is that it is completely custom-designed and built . All our parts were either 3D-printed or custom-machined on our CNC. Documenting its assembly allows us to keep track of all of the parts involved in its print. Being able to showcase the build stages of the Ringslinger 9000 is also incredibly useful for two more reasons. First, if we ever intend to build a second one, we have the progress of the first one fully documented for inspiration and/or to isolate potential causes of structural error. Second, if any teams who follow our blog want to create a similar model, they have ours for a source to help. As the launcher continues to undergo changes, it is likely we will create another such assembly post - likely after our first qualifier in 3 weeks.

    Achieving Continuous Targeting and Launching

    17 Feb 2021
    Achieving Continuous Targeting and Launching By Mahesh and Cooper

    Task: Achieve Continuous Targeting and Automatic Launching

    With the goal of having the turret continuously aim towards the goal, the elbow tilt to the correct angle at will and the flywheel to ramp to the correct velocity at will, we began by verifying our odometry calculations using FTC dashboard. Our odometry calculations would be the cornerstone of our entire automatic launching system, since the distance between the robot and the goal as well as the bearing to the goal from the robot would both be determined using the robot's x and y position as given through odometry. Using FTC dashboard's field overlay, we were able to draw our robot as a circle onto the given canvas like so:

    In the above image, the bottom circle represents the robot, with the top circle representing the goal. The longest black vector represents the heading of the drivetrain or base of the robot. The second to longest red vector represents the heading of the turret of the robot. The shortest blue vector, which is the same size as the circle robot itself, represents the bearing from the robot to the goal.

    The blue and red vectors (bearing to goal and heading of turret) are equal in direction because of the PID loop running to continuously target the goal. We are able to accomplish this by setting the target heading of our turret PID controller to the bearing between the robot and the goal, which can be calculated with: \[\theta = tan^{-1}\left(\frac{y_{goal} - y_{robot}}{x_{goal} - x_{robot}}\right)\] The PID controller compares this target angle with the IMU angle of the turret and corrects for them to be equal.

    As for the other part, automatic launching, we were able to achieve this using our previously made trajectory calculator. The input to our trajectory calculator, the distance between the robot and the goal, was calculated using: \[distance = \sqrt{(y_{robot} - y_{goal})^2 + (x_{robot} - x_{goal})^2}\] The outputs of the trajectory calculator, the angle of elevation of the elbow and angular velocity of the flywheel, were then set to the targets of the elbow PID and flywheel PID controllers, in order to consistently hold the desired articulation. When the flywheel ramped up to a velocity in a 5% error threshold of the target velocity, we toggled the trigger servo and launched the disk, with the ramping of the flywheel seen below through FTC dashboard:

    Next Steps:

    By testing our continuous target and automatic shooting system, we quickly realized our calculations were slightly off. The next obvious step is to diagnose any sources of error in our calculations and account for them appropriately. The main one being how the angle of the launcher affects the vertical distance travelled by the disk (initial height of launch), and vice versa. This can be done using the convergent, iterative process described in a previous post. Other sources of error could include the turret being offset to the right of the center of the robot, and a later discovered glitchy flywheel power cable. We can now advance from simply implementing our theoretical calculations to diagnosing issues with them and addressing errors in our robot.

    Control Mapping

    20 Feb 2021
    Control Mapping By Bhanaviya, Mahesh, and Cooper

    Task: Map and test controls

    With our first qualifier being a week away, Proteus (our robot) needs to be in drive testing phase. So, we started out by mapping out controls as depicted above.

    One stark difference between this control map from previous years is that there a lot more controls than previously since one of our team goal's this season was to reduce human error as much as possible when it pertained to driving and having more expansive controls was reflective of this goal. For instance, last year, when our turret was still in use as in this year, we had two controls for rotating the turret. However, this season, since turret rotation allows us to maximize our capabilities when it comes to continuous targetting, we've set aside 4 controls for turret rotation alone since being able to vary its speed manually is something we've had difficulty with earlier in the season.

    Next Steps

    As the season changes, we expect our controls to change as well and we will document these changes accordingly as time progresses.

    A Lot to Intake

    20 Feb 2021
    A Lot to Intake By Paul

    Task: Prepare the intake before the qualifier

    Today’s meet consisted of Cooper working on code, Paul burning polycarb, and Trey working on the intake with Paul. We were able to get the ringevator-esque intake working with some level of reliability, at least off the robot. The design is quite ingenious, using the friction of the rings against the floor and a polycarbonate scoop-type thing to integrate the flipping of the rings and the lifting of the rings into one cohesive unit, that saves space, motors, and weight. Paul was in charge of heat-bending the polycarbonate plate, but Paul overheated it and ended up warping the plate. However, this proved to be quite useful, as the warp helped to hold the rings against the ninjaflex elevator belt. Sometimes, rarely, screw-ups are a good thing.

    Meanwhile in the robot garage dungeon, Cooper was working on optimization of the code and helped to optimize the odometry, calibrating the robot's autonomous mode to be more accurate based on its surroundings, using both the IMU and potentially an intel RealSense camera in the future. In addition, Cooper worked to enhance the robot’s position holding and automatic targeting systems, helping to ensure that the ring lands in the goal, every time, automatically. Pretty neat stuff.

    In the more whimsical department, the robots 12-round chefs-hat extendo-mag turns the robot from an FTC legal precision machine to a motorized fear-inducing machine. This extended mag was used for demonstration, target testing and shooting rings at unsuspecting team members only, as FTC regulations only allow the robots to be in control of 3 rings at a time, not 12 (though that would be kinda cool).

    Next Steps

    With the ringevator mounted, we plan to get the mag removed by the next meet to create more precision with our launcher system.

    Accounting For Offsets And Launching In Motion

    21 Feb 2021
    Accounting For Offsets And Launching In Motion By Mahesh

    Task: Build A Forward Kinematic Model Of The Robot To Account For Turret And Muzzle Offsets, And Counter-Lead The Target To Allow For Launching In Motion

    After building the base of a trajectory calculator to allow for continuous targeting and launching, the next step was to address the discrepancies between our robot in code and the real robot, a major one being the offset between the muzzle compared to the center of the robot. Thus far, we had been treating the muzzle exit point as the center of the robot, which in reality isn't the case. The center of the turret is positioned behind the center of the robot to be flush with the back edge, and muzzle is positioned in front of and to the right of the center of the turret. In order to account for these offsets in code, we would have to build, in technical terms, a forward kinematic model of the robot to figure out the final (x, y) position of the muzzle, or the point at which the disk leaves the robot.

    To account for the turret's offset we calculated the center of the turret to have the coordinates: \[\displaylines{x_t = x_r - dcos(\theta_r) \\ y_t = y_r - dsin(\theta_r)}\] where \(x_t\) and \(y_t\) represent the x and y coordinates of the turret respectively, \(x_r\) and \(y_r\) represent the x and y coordinates of the robot respectively, \(d\) represents the distance between the center of the robot and the center of the turret, and \(\theta_r\) represents the heading of the robot's base.

    We then took \(x_t\) and \(y_t\) and used them to calculate the muzzle exit point using a polar approach: \[\displaylines{x_m = x_t + rcos(\theta_t + \theta_m) \\ y_m = y_t + rsin(\theta_t + \theta_m)}\] where \(x_m\) and \(y_m\) represent the x and y coordinates of the muzzle respectively, \(\theta_t\) represents the heading of the turret, and \(r\) represents the "radius" of the muzzle, and \(\theta_m\) represents the "angle" of the muzzle. In reality, the terms "radius" and "angle" of the muzzle don't make sense since the muzzle is positioned in front of and to the right of the turret, and using a cartesion approach we would have to make two separate adjustments for the x and y for the vertical and horizontal offsets, however converting these offsets into a polar form can help to simplify the process, and is where a "radius" and "angle" are derived from. If the horizontal distance between the muzzle and the turret center is \(o_x\) and the vertical distance between the muzzle and the turret center is \(o_y\) (when the robot is viewed from the top-down), then \(r\) and \(\theta_m\) can be derived like so: \[\displaylines{r = \sqrt{o_x^2 + o_y^2} \\ \theta_m=tan^{-1}\left(\frac{o_y}{o_x}\right)}\] \(r\) and \(\theta_m\) are used in the previous equations for \(y_m\) and \(x_m\) to derive the final position of the muzzle exit point, and completes the "forward kinematic model" of our robot for trajectory calculation purposes. \(x_m\) and \(y_m\) are then substituted for \(x_r\) and \(y_r\) in all trajectory calculations to account for all offsets from the center of the robot. In the first image on this post, the turret can be seen repositioned from the center of the robot with a heading labeled with a red vector, and the muzzle can be seen with a smaller circle containing a neon-green line to the currently selected target.

    Our second task was to allow the robot to launch at its target while in motion. The first step of achieving this would be to address how the robot's velocity in the x direction would affect the trajectory of the disk. We would have to counter-lead the target in the x direction to account for side-to-side motion of the robot while launching. This is because when the robot is moving with a velocity \(v_x\) in the x direction while launching, the target will be offset by a factor of \(v_x \cdot t\), where \(t\) represents the time the disk spends in the air. To account for this we can simply subtract \(v_x \cdot t\) from the target's x position in order to counter-lead it.

    To account for the robot's velocity in the y direction (\(v_y\)) we can subtract \(v_y\) from the disk's horizontal velocity calculation, which then becomes \(\frac{d}{t} - v_y\). This effectively adds the robot's y velocity onto the y velocity on the disk, which reduces the needed horizontal velocity of the disk, hence why \(v_y\) is subtracted.

    With these two additions, we can now, at least theoretically, launch in motion. In practice, we saw that our underdamped PID controller could not keep up with the bearing to the counter-led target. In a perfect world, the turret's heading would equal the bearing the offset target, although due to poorly tuned PID coefficients, this was not the case. With some tuning we hope to correct this and get the turret to somewhat lock on to the offset target while the base is in motion.

    Next Steps:

    Our next steps would be to continue addressing small errors in between our robot in code and our robot in the real world, perfecting our trajectory calculator to maximize accuracy and precision. From a few tests we determined our successful shooting rate was around 75% from a fixed location, which can be used to conclude that there are mechanical faults at play as well, which could be a non-stationary elbow or unbalanced flywheel. These are all investigations to delve into later in order to perfect our automatic launching.

    A Lot to Intake

    22 Feb 2021
    A Lot to Intake By Paul

    Task: Prepare the intake before the qualifier

    At today's meeting, Paul worked on the ringevator, with the guidance from Mr. V. The intake mechanism required a motor to be installed, which at first glance seems like light work. However, the intake is composed of two separate parts that move independently, connected by a hinge. The motor had to be attached to the static, robot part, however, the power had to be transferred to the belt, which just so happened to be on the dynamic part that swings around like a screen door in a hurricane, so mounting the motor on the swingy bit was out of the question. Paul took a page out of last years book, drawing inspiration from the elbow mechanism of Icarus and with some help from Mr. V, designed a mechanism that allowed the belt and hinge to rotate on the same axis, ensuring constant distance between the motor axis and the axis of rotation for the belt pulley. This allowed the motor to be mounted in a safe spot on the robot, away from the dangers of an FTC field, while simultaneously being able to drive the belt mechanism on the moving part of the robot. Future plans call for replacing the pulley drive bushings with custom fabricated ball bearings, and moving the motor further down the robot to lower the center of gravity.

    Next Steps

    The ringevator still needs to be mounted on the robot but this was enough progress to hopefully get us to a working intake before the qualifier.

    Morph Chart

    24 Feb 2021
    Morph Chart By Bhanaviya and Ben

    Task: Create a flow chart to analyze all our intake designs so far in this season.

    Iron Reign has seen several iterations of our intake over this past build season. With our first qualifier being 2 days away, its finally time to come full circle and identify the different iterations of our intakes coming together. To do this, our team used a flow chart. A morph chart shows the various subsystems of our 2 robots in this system - our robot in 2 days bot Frankendroid and our competition bot TomBot.

    Each intake's progression is represented vertically, shwoing stages from the sketch, to the CAD to the final product. For the Ringevator intake design in particular was inspired by a combination of two other intaek designs - the belt drive and caterpillar. The combination of these two designs, as well as a description of each design is also represented on this chart.

    Next Steps

    Placing all of our designs in one chart like this allows us to see how iterative our design process has been, and how much of an influence each design has had on another. With all of our designs so far placed in the flow chart, our next step is to continue to update the chart after our first qualifier so that we can have a pictorial summary of our entire build season for reference.

    Ringevator Overview

    25 Feb 2021
    Ringevator Overview By Trey

    Task: Describe the construction and development of the Ringevator intake

    This year we have done a lot of work on intakes and launchers. The purpose of this post is to go over the function and overall design and build of the Ringevator intake. It doesn’t go too far in-depth so if you are looking for something more specific I would recommend that you look at specific posts discussing different parts of our design but if not you are in the right place.

    Build Breakdown:

    The construction of the Ringevator is moderately complex. It consists of a custom belt, two axels, a motor, a pivot, a base, and some elastics. The belt is custom modeled and printed in NinjaFlex. The design is based on the belt seen in one of our previous robots, Kraken, which competed in 2018. It has flaps that do the work of pulling in the rings and holes that are used by sprockets to drive the belt. The holes are the exact size and space apart to be fitted onto the sprockets on the drive axels which are attached to the base. The base is a simple H design that used to be in between the sprockets but now sits so that the sprockets are inside to make mounting easy. The axels are driven by one motor attached by a belt on the base of the robot.

    As you can see in the photo above, the belt assembly base and the robot base have a pivot between them. The purpose of this pivot is to make picking the rings much easier. Normally you would have to pick a ring up horizontally and then turn it to a vertical orientation which is what we need but instead, the pivot allows for the belt assembly to walk over rings. This means that when the intake reaches a ring, the movement of the belt causes the mechanism to open and consume the whole ring. Since only one side of the ring is being pulled up by the belt, it is flipped vertically and travels up the rest of the mechanism and out the top. The elastics make sure that the belt keeps in contact with the ring at all times. The only other thing that is apart of the design is a guide ramp on the inside made of heat-bended polycarbonate. You can see a photo of this ramp below along with the intake before it was attached to the robot on a pivot.

    Testing:

    We tested the Ringevator multiple times throughout its life to make sure that it will work. It gets a good grip on the rings and is able to pull them up most of the time. We still need to iron out a few tensioning issues with the elastics to make it more consistent but other than that it works well based on our tests so far which are few and far between. More testing will come.

    Improvements:

    The design didn’t start out this well though, we made several improvements since the start. For starters, the whole pivot idea was a mistake, to begin with; however, we discovered while doing preliminary tests that the belt walking over rings was a feature, not a defect. We realized that picking up rings without the pivot would be far more difficult and that was the spark for the design we have now. We also suffered some grip issues with the polycarbonate ramp which wanted to grip the rings too much and hindered the ability of the intake. We fixed this with some friction-reduced tape and now it works well. The design is still in its baby stages so we haven’t found a lot of problems but we will eventually and we are excited to address them.

    Next Steps:

    We are working right now on dialing in the shooter to make it more consistent and also testing a 1:1 motor to see how it compares to the 1:3 motor in terms of accuracy. We are also being posed with a challenge unlike any other challenge we have faced this season which is taking what we made when we were developing intakes and making a system that can feed into the shooter. This is going to prove a challenge because of the size of the shooter and the fact that it can be rotated or tilted to any angle. The challenge may be large but we are a worthy opponent.

    Making the Ringevator Legal

    05 Mar 2021
    Making the Ringevator Legal By Trey and Paul

    Task: Make the Ringevator legal so we can use it in competition

    We’re at the point now where we have a lot of our systems ready to be put on the robot, but we have to face another big challenge, which is making everything legal. Since the robot is a circle, we don’t exactly have any space to put an intake in the sizing cube. We can take advantage of the hypotenuse of the box by putting our equipment in the corners but then we raise the problem of height. This is because the Ringevator was never actually built to be permanently attached to the robot.

    We built the Ringevator as a prototype that harnessed the abilities of all of our previous models without their problems. However, with time closing in, it became apparent that the ringevator would have to be on the robot regardless of what we think. In order to do this, we had to shorten the assembly by about 2.5 inches and somehow pull the assembly inside more. With only a few builders being able to join us at any particular time, this proved to be a challenge.

    Two things needed to happen to make the robot even close to legal. The first was that the front would have to be chopped off, spitting the front Omni wheel assembly in two. And the second was actually shortening the ringevator which meant shortening the belt. The first part was easily accomplished by modeling two new Omni wheel bases for the front and surgically removing the front of the robot with a hacksaw. This was accomplished in the span of two days. After this was done, Paul also chopped the top of the ringevator off. The last piece was the belt.

    The problem with the belt was that I was the only one who knew how to shorten it and I was stuck at home for the next few days. So after Paul was done with the robot surgery, he swung by my house at 3 AM and dropped the belt off in my mailbox. The next morning, I marked off about 5 inches or 5 flaps of the intake, printed a new rig for the welding, cut, and welded the belt into a shorter configuration with my own tools. Then to get the belt back to the robot, we thought about getting a courier to deliver it but instead, I showed up the next day with the new belt and it was assembled onto the robot. After all of that, the robot was still not legal. The reason why it wasn’t legal is because we used bulky REV extrusions as sides since they are easy for prototyping. Since those rails are thick it just barely falls out of the sizing cube. So we had to detach the whole assembly for our next competition.

    Next Steps

    We would have liked to cut the assembly down more at this point but we couldn’t because we had already pushed the limits of its size. Our next step is to completely redesign the whole intake system. We knew this was going to have to happen at some point but we didn’t think it was going to be this soon. In order to make the intake legal, we have to CNC all of the parts. And I think that’s the kind of challenge Iron Reign is built for.

    UTD Qualifier Build Post Mortem

    06 Mar 2021
    UTD Qualifier Build Post Mortem By Trey

    Task: Review our failure of rushed build leading up to the UTD qualifier

    As discussed in the post "Making the Ringevator Legal" there was a lot of rushed build leading up to this qualifier. As a recap of that post, the Ringevator was too wide and too tall to be legal, so we had to cut off the front of the robot, split the omni wheels, shorten the assembly, and shorten the belt. For more information, read that post. So with all of this change leading up to the competition, one would expect that it all worked out.

    Alas, it did not. By the end of the raised build, the robot was still not legal by any means. In fact, the ringevator had to be removed so that we could actually run matches with a legal robot. This, however, is not the end. Even though the robot may not be legal, the judges still respected the development we displayed in our journal and portfolio. We demonstrated real development in innovative systems that I suppose resonated with the judges because we were awarded the Inspire award. Ordinarily, any team would see this as a big accomplishment but the builders at IronReign were restless. We failed our goals. The end objective with building a good robot is to score high amounts of points and that’s the one thing we didn’t do.

    At the very least we did learn quite a bit from the situation. Firstly, the troubles we had with the ring transfer from intake to outtake demonstrated that the pancake flipper was not a good idea. Such a path for ring transfer would be cool but a challenge too large for the coders. Besides, we already have put so much into the ringevator. Abandoning it now would be reckless. We also discovered that another pivot point at the bottom would be vital to the ring transfer. At the moment this is just a REV core hex motor but something more advanced would be helpful. There is also the added possibility of adding a slide to the bottom of the intake which paired with the current pivots, would make the intake far more versatile and clear of the spin of the turntable, which gets caught. There is still much thinking to be done in this department. Finally, the last thing we learned is that the ringevator would need to be remade in a fully custom, aluminum version to make it fit in the sizing cube. This will be a large feat but if we can do it, we will have points when our next qualifier rolls around.

    Next Steps

    We’re going to need to do a lot more before our robot scores real points. I admire our progress but we still have a long way to go. We need to step up on driver practice, reevaluate the ringevator, and start thinking about a final version of the robot. What comes immediately next is modeling and redesigning the ringevator to lose any bulk in the system so it can fit on the robot. I hope that those new developments will allow us to run matches next competition.

    Future Plans For Programming

    11 Sep 2021
    Future Plans For Programming By Mahesh

    Task: Plan Out Changes To Codebase and Use New Libraries/Hardware

    This season, we plan to utilize the PAA5100JE Near Optical Flow Sensor (left image) and Realsense D435 Depth Camera (right image) to improve our robot's autonomous accuracy and reliability when running alongside other robots.

    The optical flow sensor's potentially higher accuracy over traditional odometry deadwheels and immunity to slippage can make autonomous routines more reproducible. However, it is not a device that comes with out of the box FTC support, so a custom java driver will need to be translated from the existing python driver to have it correctly interface with the i2c ports on the REV Control Hub. Additionally, the device uses the SPI protocol for communication, so code will need to be written to convert the SPI calls to i2c, which can then be converted back to SPI via a i2c to SPI bridge chip.

    As for the Depth Camera, a pipeline can be created to take its output, detect robots or other objects that the robot may collide with, and preemtively come to a stop during autonomous and possibly tele-op to avoid those collisions. This would save time spent communicating with an alliance partner prior to a match to determine where to place delays in an autonomous program to prevent collisions, since those delays would be performed automatically.

    Furthermore, the optical flow sensor outputs movement in both the x and y directions, so only one is required to get xy localization on a holonomic drive. If we wish to also use the sensors for heading information instead of/alongside the IMU, two can be mounted on opposite corners of the robot. But what good is localization for autonomous if not to be used with path following?

    We plan to experiment with the roadrunner motion profiling library for FTC robots, using as input the Pose provided by the optical flow sensors. It simplifies many of the common needs for path following, like providing OpModes for odometry tuning, path following for linear and even spline trajectories, as well as asynchronous methods which can easily integrate into our current asynchronous codebase. Since we are dipping our toes back into a mecanum chassis for robot in two days, roadrunner will be ideal to harness the full potential of a holonomic drive.

    Next Steps:

    The most important first step is to get the optical flow sensor working with the Control Hub, so that we can have an accurate localization system as the backbone for future path following during autonomous. In a separate track, different pipelines can be experimented with to get obstacle detection working using the realsense depth camera.

    A Prerequisite Chassis to Robot In 3 Days

    12 Sep 2021
    A Prerequisite Chassis to Robot In 3 Days By Trey, Cooper, and Aaron

    Task: Build a robot that can be adapted to any challenge

    The challenge reveal is going to be quite soon. In the weeks leading up to the challenge reveal we began to wonder if there was anything we could do that would make our transition from preseason to prototyping any better. And obviously, there are many things we could do that would make our work easier when the time comes to see the new challenge. Mainly, we were thinking that since we do a robot in three days when the challenge gets revealed, it would be beneficial to have a robot chassis that could be used in most challenges and be adapted to the specifics of this year’s challenge. A robot like this should be easily maneuverable and have an arm or subsystem capable of interacting with ordinary objects. That’s where the idea for this robot came from.

    N-bot is the solution to this problem. The idea for N-bot was that we should have a chassis that can drive over elements and manipulate them within the walls of the robot. In order to do this, we created a robot in the shape of a lower case n that can drive over objects. Ideally, the next step would be to give it an arm that can manipulate anything it can drive over; however, we did not have time to complete this. Instead, what we ended up with was a chassis in the shape of a lowercase n.

    For wheels on this robot, we decided that mecanum wheels would be the best choice since we would be able to move in all directions on the field with them and position ourselves accurately over objects. Those four wheels are chained to motors and paired together in wall-shaped blocks that are linked together on top by 4 structural extrusions. The overall shape of the robot appears to be sturdy; however, it is actually quite flimsy. Linking two halves of a robot with only 4 beams on top is not a great idea if you’re looking for a rock-solid design. Instead, our robot tends to flex and shake but that’s ok because those issues are manageable. We sacrificed the structural integrity of our robot for ease of adaptation to challenge specific tasks.

    Next Steps:

    The next steps for this project are clear: we wait for the challenge to be revealed and then we adapt N-bot to that challenge with any number of additional subsystems. We are planning on only using this robot for our robot in 3 days challenge and nothing else so none of the subsystems we produce will be used at any other point in the year.

    Chassis Brainstorming

    02 Oct 2021
    Chassis Brainstorming By Trey, Cooper, and Shawn

    Task: Build a robot that can be adapted to any challenge

    The new challenge is upon us and with a new challenge comes new robot designs. This year we have found that we are going to need to focus on the chassis of our robot more than ever. This is because the barrier to the warehouse is an important obstacle that we want to be able to climb or get around in order to score. The drawings and notes depicted below are the unfiltered notes that I took shortly after the discussions we had about chassis designs.

    Next Steps:

    The next steps here are to pick one or two of these designs and run with them. We need to build some prototypes of these fast before the first scrimmage or competition. I think the ones we are most likely to prototype in the coming weeks are the Flipin' tank, the tricycle, and the Flippin' bot. We're excited to see where these designs take us.

    Flyset Workshop Vision Presentation

    02 Oct 2021
    Flyset Workshop Vision Presentation By Mahesh

    Task: Deliver a Presentation Over Developing Vision Pipelines At The Flyset Workshop

    This Saturday, we had the oppurtunity to present at the Flyset workshop, an event in which multiple teams could present a topic of their choosing, such as (but not limited to) build, design, and programming. For one of our two presentations, we decided to share our process for rapidly prototyping and testing OpenCV vision pipelines, taking a drag-and-drop visual pipeline in GRIP to a fully-fledged working android project that can be deployed to a control/expansion hub.

    To begin the presentation, we introduced the programs and dependencies we use for developing vision pipelines. These include GRIP (a graphical tool to easily visualize and test out different computer vision pipelines), FTC Dashboard (a project dependency that allows for remote debugging with image previews, on-the-fly variable editing, live telemetry, graphing, and a field overlay), and EasyOpenCV (a project dependency that simplifies using OpenCV for FTC and runs vision pipelines in a separate thread for maximum efficiency).

    Next, we laid the foundation for the HSV threshold step to come by introducing the audience to the HSV color space and its advantages that make it easier to tune for the purposes of sampling an orange cone or colored team marker. We then transitioned (not shown in slides) to the concept of an HSV threshold, which takes an rgb image and uses hue, saturation, and value ranges to let only certain pixels through the threshold, ultimately producing a binary image.

    The final requirement for understanding our color-based detection approach is that of contours in the context of computer vision. We explained the definition of contours (boundaries that enclosed shapes or forms in an image), and how they can be detected from thresholded images.

    The final constructed GRIP pipeline is shown above. It follows the steps:

    1. gaussian/box blur
    2. HSV threshold
    3. contour detection

    However, multiple contours/color blobs may be detected in the last step shown in the GRIP pipeline, so the largest contour must be selected by area. From this largest contour, moments can be used to find the (x, y) coordinate of the contour's centroid. Moments are defined as the weighted sums of pixel intensities (pixel values when converted to grayscale), weighted by their x and y positions to produce m_1_0 and m_0_1 respectively. These moments can then be divided by m_0_0 to produce the x,y coordinate of the centroid of the largest detected contour, the final desired result.

    Finally, the completed vision pipeline was exported to java and modified to be compatible with EasyOpenCV, as well as select the largest contour by area and compute its centroid.

    Next Steps:

    Possible next steps for other approaches of detecting FFUTSE cones include the shape-based approach and machine learning with tensorflow. The shape-based approach would use an adaptive threshold and contour detection to detect multiple contour, and can rely on the shape of the contour (tapered towards the top like a cone) to detect the location of the FFUTSE cone placed in the image.

    In order to construct a tensorflow model to detect FFUTSE cones, training data (images of FFUTSE cones placed in various different orientations, lightings, and backgrounds) will need to be collected and labelled with the (x, y) coordinate of the FFUTSE cone in each image. Then, a CNN (Convolutional Neural Network) can be constructed, trained, and exported as a .tflite file to be used in the FTC ecosystem.

    Deriving Inverse Kinematics For The Drivetrain

    08 Dec 2021
    Deriving Inverse Kinematics For The Drivetrain By Mahesh, Cooper, and Ben

    Task: Derive Inverse Kinematics For The Drivetrain

    Due to having an unconventential drivetrain consisting of two differental wheels and a third swerve wheel, it is crucial that we derive the inverse wheel kinematics early on. These inverse kinematics would convert a desired linear and angular velocity of the robot to individual wheel velocities and an angle for the back swerve wheel. Not only would these inverse kinematics be used during Tele-Op to control the robot through joystick movements, but it will be useful for getting the robot to travel at a desired forward velocity and turning rate for autonomous path following. Either way, deriving basic inverse kinematics for the drivetrain is a necessity prerequisite for most future programming endeavors.

    More concretely, the problem consists of the following:
    Given a desired linear velocity \(v\) and turning rate/angular velocity \(\omega\), compute the required wheel velocities \(v_l\), \(v_r\), and \(v_s\), as well as the required swerve wheel angle \(\theta\) to produce the given inputs. We will define \(v_l\) as the velocity of the left wheel, \(v_r\) as the velocity of the right wheel, and \(v_s\) as the velocity of the swerve wheel.

    To begin, we can consider the problem from the perspective of the robot turning with a given turning radius \(r\) with tangent velocity \(v\). From the equation \(v = \omega r\), we can conclude that \(r = \frac{v}{\omega}\). Notice that this means when \(\omega = 0\), the radius blows up to infinity. Intuitively, this makes sense, as traveling in a straight line (\(\omega = 0\)) is equivalent to turning with an infinite radius.

    The main equation used for inverse wheel kinematics is:

    \[\displaylines{\vec{v_b} = \vec{v_a} + \vec{\omega_a} \times \vec{r}}\]

    Where \(\vec{v_b}\) is the velocity at a point B, \(\vec{v_a}\) is the velocity vector at a point A, \(\vec{\omega_a}\) is the angular velocity vector at A, and \(\vec{r}\) is the distance vector pointing from A to B. The angular velocity vector will point out from the 2-D plane of the robot in the third, \(\hat{k}\), axis (provable using the right-hand rule).

    But why exactly does this equation work? What connection does the cross product have with deriving inverse kinematics? In the following section, the above equation will be proven. See section 1.1 to skip past the proof.

    To understand the equation, we start by considering a point A rotating around aother point B with turn radius vector \(\hat{r}\) and tangent velocity \(\vec{v}\).

    For an angle \(\theta\) around the x-axis, the position vector \(\vec{s}\) can be defined as the following:

    \[\displaylines{\vec{s} = r(\hat{i}\cos\theta + \hat{j}\sin\theta) }\]

    by splitting the radius vector into its components and recombining them.

    To arrive at a desired equation for \(\vec{v}\), we will have to differentiate \(\vec{r}\) with respect to time. By the chain rule:

    \[\displaylines{\vec{v} = \frac{d\vec{s}}{dt} = \frac{d\vec{s}}{d\theta} \cdot \frac{d\theta}{dt}}\]

    The appropriate equations for \(\frac{d\vec{s}}{d\theta}\) and \(\frac{d\theta}{dt}\) can then be multiplied to produce the desired \(\vec{v}\):

    \[\displaylines{\frac{d\vec{s}}{d\theta} = \frac{d}{d\theta} \vec{s} = \frac{d}{d\theta} r(\hat{i}\cos\theta + \hat{j}\sin\theta) = r(-\hat{i}sin\theta + \hat{j}cos\theta) \\ \frac{d\theta}{dt} = \omega \\ \vec{v} = \frac{d\vec{s}}{dt} = \frac{d\vec{s}}{d\theta} \cdot \frac{d\theta}{dt} = r(-\hat{i}sin\theta + \hat{j}cos\theta) \cdot \omega \mathbf{= \omega r(-\hat{i}sin\theta + \hat{j}cos\theta)} }\]

    Now that we have an equation for \(\vec{v}\) defined in terms of \(\omega\), \(r\), and \(\theta\), if we can derive the same formula using \(\vec{\omega} \times \vec{r}\), we will have proved that \(\vec{v} = \frac{d\vec{s}}{dt} = \vec{\omega} \times \vec{r}\)

    To begin, we will define the following \(\vec{\omega}\) and \(\vec{r}\):

    \[\displaylines{ \vec{\omega} = \omega \hat{k} = \begin{bmatrix}0 & 0 & \omega\end{bmatrix} \\ \vec{r} = r(\hat{i}cos\theta + \hat{j}sin\theta) = \hat{i}rcos\theta + \hat{j}rsin\theta = \begin{bmatrix}rcos\theta & rsin\theta & 0\end{bmatrix} }\]

    Then, by the definition of a cross product:

    \[\displaylines{ \vec{\omega} \times \vec{r} = \begin{vmatrix} \hat{i} & \hat{j} & \hat{k} \\ 0 & 0 & \omega \\ rcos\theta & rsin\theta & 0 \end{vmatrix} \\ = \hat{i}\begin{vmatrix} 0 & \omega \\ rsin\theta & 0\end{vmatrix} - \hat{j}\begin{vmatrix} 0 & \omega \\ rcos\theta & 0\end{vmatrix} + \hat{k}\begin{vmatrix} 0 & 0 \\ rcos\theta & rsin\theta\end{vmatrix} \\ = \hat{i}(-\omega rsin\theta) - \hat{j}(-\omega rcos\theta) + \hat{k}(0) \\ \mathbf{= \omega r(-\hat{i}sin\theta + \hat{j}cos\theta)}}\]

    Since the same resulting equation, \(\omega r(-\hat{i}sin\theta + \hat{j}cos\theta)\), is produced from evaluating the cross product of \(\vec{\omega}\) and \(\vec{r}\) and by evaluating \(\frac{d\vec{s}}{dt}\), we can conclude that \(\vec{v} = \vec{\omega} \times \vec{r}\)

    1.1

    Based on the constants defined and geometry defined in the image below:

    The equation can be applied to the left wheel to derive its inverse kinematics:

    \[\displaylines{\vec{v_l} = \vec{v} + \vec{\omega} \times \vec{r_l} \\ = \mathbf{v + \omega (r - \frac{l}{2})}}\]

    where \(r\) is the turn radius and \(l\) is the width of the robot's front axle. Applied to the right wheel, the equation yields:

    \[\displaylines{\vec{v_r} = \vec{v} + \vec{\omega} \times \vec{r_r} \\ = \mathbf{v + \omega (r + \frac{l}{2})}}\]

    Applied to the swerve wheel, the equation yields:

    \[\displaylines{\vec{v_s} = \vec{v} + \vec{\omega} \times \vec{r_s} \\ = \mathbf{v + \omega \sqrt{r^2 + s^2}}}\]

    where \(s\) is the length of the chassis (the distance between the front axle and swerve wheel).

    The angle of the swerve wheel can then be calculated like so using the geometry of the robot:

    \[\displaylines{\theta = \frac{\pi}{2} - tan^{-1}\left( \frac{s}{r} \right)}\]

    Mathematically/intuitively, the equations check out as well. When only rotating (\(v = 0\)), \(r = \frac{v}{\omega} = \frac{0}{\omega} = 0\), so:

    \[\displaylines{ v_l = v + \omega(r - \frac{l}{2}) = \omega \cdot -\frac{l}{2} \\ v_r = v + \omega(r + \frac{l}{2}) = \omega \cdot \frac{l}{2} \\ v_s = v + \omega\sqrt{r^2 + s^2} = \omega \cdot \sqrt{ s^2} = \omega \cdot s}\]

    In all three cases, \(v = \omega \cdot r\), where \(r\) is the distance from each wheel to the "center of the robot", defined as the midpoint of the front axle. Since rotating without translating will be around a center of rotation equal to the center of the robot, the previous definition for \(r\) can be used.

    As for the equation for \(\theta\), the angle of the swerve wheel, it checks out intuitively as well. When only translating (driving straight: \(\omega = 0\)), \(r = \frac{v}{\omega} = \frac{v}{0} = \infty\), so:

    \[\displaylines{ \theta = \frac{\pi}{2} - tan^{-1} \left( \frac{s}{r} \right) \\ = \frac{\pi}{2} - tan^{-1} \left( \frac{s}{\infty} \right) \\ = \frac{\pi}{2} - tan^{-1}(0) \\ = \frac{\pi}{2} - 0 \\ = \frac{\pi}{2} }\]

    As expected, when translating, \(\theta = 0\), as the swerve wheel must point straight for the robot to drive straight. When only rotating (\(v = 0\)), \(r = \frac{v}{\omega} = \frac{0}{\omega} = 0\), so:

    \[\displaylines{ \theta = \frac{\pi}{2} - tan^{-1} \left( \frac{s}{r} \right) \\ = \frac{\pi}{2} - tan^{-1} \left( \frac{s}{0} \right) \\ = \frac{\pi}{2} - tan^{-1}(\infty) \\ = \frac{\pi}{2} - \lim_{x \to +\infty} tan^{-1}(x) \\ = \frac{\pi}{2} - \frac{\pi}{2} \\ = 0}\]

    As expected, when only translating (driving straight), \(\theta = \frac{\pi}{2}\), or in other words, the swerve wheel is pointed directly forwards to drive the robot directly forwards. When only rotating, \(\theta = 0\), or in other words, the swerve wheel is pointed directly to the right to allow the robot to rotate counterclockwise.

    Next Steps:

    The next step is to use PID control to maintain target velocities and angles calculated using the derived inverse kinematic equations. Then, these equations can be used in future motion planning/path planning attempts to get the robot to follow a particular desired \(v\) and \( \omega\).

    A distance sensor will also need to be used to calculate \(s\), the distance between the front axle and swerve wheel of the robot.

    Deriving Maximum Chassis Length On Turns

    08 Dec 2021
    Deriving Maximum Chassis Length On Turns By Mahesh and Cooper

    Task: Derive The Maximum Chassis Length On Turns

    Having a chassis able to elongate and contract during play poses its advantages and drawbacks. If properly used, the chassis can serve to strategically defend portions of the field. However, if not shortened during turns, the extended length of the robot can lead the swerve wheel to lose traction and start skidding on fast turns. Therefore, it is crucial to derive a model for the maximum chassis length achievable on a turn of angular velocity \(\omega\) before skidding starts to occur.

    More concretely, the problem is the following: given an angular velocity \(\omega\) and other physical constants, what is the maximum distance \(s\) achievable between the front axle and swerve wheel before the centripetal force required to keep the robot in circular motion \(F_c\) exceeds the force of friction \(F_f\) between the wheels and the ground?

    To start, we can define the force of friction \(F_f\):

    \[\displaylines{F_f = \mu N = \mu mg}\]

    where \(\mu\) is the coefficient of friction betewen the wheels and the ground, \(m\) is the mass of the robot, and \(g\) is the acceleration due to gravity.

    Then, we can define the centripetal force required \(F_c\):

    \[\displaylines{F_c = ma_c = m\omega^2r_s}\]

    where \(a_c\) is the required centripetal acceleration, \(\omega\) is the angular velocity of the robot, and \(r_s\) is the distance from the swerve wheel to the center of rotation.

    Setting these two equations equal to eachother and solving for \(r\) will yield the final equation:

    \[\displaylines{F_f = F_c \\ \mu mg = m\omega^2r_s \\ \mu g = \omega^2r_s \\ r_s = \frac{\mu g}{\omega^2}}\]

    However, the \(s\) must be related to \(r_s\) to be used in the above equation. This can be done by substituting the expression \(\sqrt{r^2 + s^2}\) for \(r_s\), where \(r\) is the true turn radius, which will compute the distance from the swerve wheel to the instantaneous center of rotation. So,

    \[\displaylines{r_s = \frac{\mu g}{\omega^2} \\ \sqrt{r^2 + s^2} = \frac{\mu g}{\omega^2} \\ r^2 + s^2 = \left(\frac{\mu g}{\omega^2}\right)^2 \\ s^2 = \left(\frac{\mu g}{\omega^2}\right)^2 - r^2 \\ s = \sqrt{\left(\frac{\mu g}{\omega^2}\right)^2 - r^2}}\]

    As seen in the above screenshot of the following desmos calculator, the slower the robot rotates, and the closer \(w\), or in this case \(x\), is to 0, the higher the maximum chassis length \(s\), or in this case \(y\), is. Intuitively, this checks out, since when at a standstill, the robot can be as long as possible with no side effects. When rotating slowly, the robot needs to be slightly shorter to maintain traction, and when rotating fast, the robot needs to be very short to maintain traction, as reflected in the downward slope of the graph.

    Next Steps:

    The next step is to use PID control with input as the measured chassis length as given by the distance sensor and target being the output of the derived equation for \(s\) to maintain the robot's length to keep traction. Additionally, the coefficient of friction \(\mu\) between the wheels and ground will need to be tuned to the drivers' liking.

    Meeting Log 3/12

    12 Mar 2022
    Meeting Log 3/12 By Trey and Leo

    Task: Decreasing the Movement of Linear Slides During Expansions

    The continuous expansion and contraction of the robot placed a lot of stress on the mounting gear attaching the slides directly to the chassis. With each expansion the slides stretch out, and under their own weight, they would flex downwards. During regionals, the slides were subjected to these forces all day, and by the end our sliding components, “carriages”, were pretty damaged. The internals were unevenly worn and the ball bearings just fell out on the field; If left unattended, the carriages would eventually detach from the slides and the robot would literally break in two.

    To fix this, Trey came up with a double-carriage approach, aimed at reinforcing the mounts attached directly to the front of the robot. He machined an aluminum plate on the CNC, and then combined two different carriages to create a single sliding component. This effectively doubled the “strength” of the mounts by shifting the pivot point of the slides further in, and adding more resistance to the gravitational torque acting on the bar. Overall, the slides weren’t as steep and so carriages were much smoother during extensions.

    Next Steps

    We noticed that the slides did sag a little, however we need some compliance to allow for twisting caused by sharp crane movements and turns.We also noticed that the slide attached to the swerve module did flex so we might need to address that. Testing was limited however so we’d like to get some driver practice in and see how well the upgrades perform on the field.

    Iron Reign and the Three Magnets

    14 Mar 2022
    Iron Reign and the Three Magnets By Bhanaviya and Georgia

    Task: Evaluating what magnet type works best with the FFUTSE and bucket attraction

    FFUTSES with magnets mounted

    Iron Reign has its final event of the season, the UIL championship, in just one month! One driver task we've been needing to complete has been picking up and depositing a Freight Frenzy Universal Team Shipping Element (FFUTSE). To read about the FFUTSE and Iron Reign's open-source design, please refer to our FFUTSE repository. To overcome this part of the game challenge, we have decided to attach magnets on the underside of our bucket-intake and to the top of our cone-shaped FFUTSEs. The idea is that when the bucket roves over a FFUTSE, its magnet will be strong enough to attract the one atop the shipping element. However, the magnetic attraction must not be too strong, otherwise the bucket will not be able to drop off the FFUTSE on the shared shipping hub if the magnet is still affixed to the robot.

    In order to determine which kind of magnet could best meet these two criterion, we experimented with niodimium and ceramic magnets. Of the niodium magnets, there are 3 differently-sized ones - a large, medium, and small, with their sizes corresponding to the degree of magnetic attraction from greatest to least respectively.

    To reinforce the shipping element's attraction to the bucket, we have also created an array of corresponding magnets inside the bucket rather than simply affixing one magnet, since that way, the vertical thrust of the crane when is lifted upwards will not disrupt the attraction of the FFUTSE to the intake.

    It was clear that the ceramic and smallest niodimium magnets were too weak - even with an array of magnets in the bucket, they required too much precision on the driver's part in order to swiftly attract a FFUTSE and part of our idea is to minimize the driver effort and error that can come into play with this FFUTSE pickup process. Between the large and medium-sized niodimium magnets, though the large could attract a magnet faster, it did its job too well since dropping off the FFUTSE was not a task it could accomplish since the attraction of the magnets was too strong

    Next Steps

    In the end, our decision was influenced by Goldilockian principles - not too large, not too small but just right. The bucket does a reliable job of picking up and transfering FFUTSEs but as of now, this component has not yet been programmed. Once programmed, there is a chance we may have to either use a stronger magnet or find amiddle ground between the largest magnet and medium-sized one in order to minimize driver accuracy while maximizing efficiency.

    Hybrid Swerve Drive Progression

    19 Mar 2022
    Hybrid Swerve Drive Progression By Georgia, Shawn, Trey, and Bhanaviya

    Task: Fix issues found by Drive Practice in the robot

    Iron Reign has seen several dIfferent iterations of our swerve module this past season. In this post we’ve identified the different versions of our modules so we can isolate the failures and successes of each modification from sketch, to a CAD model to the constructed, manufactured iteration.

    To accommodate for our expanding chassis design this year, we’ve had to create a hybrid-differential swerve drive which means the combination of two differential wheels and swerve wheels and how they work together to achieve 2 degrees of freedom.

    Our first version of the swerve drive had a thrust bearing the same size as the ring gear. Unfortunately, this iteration was too small to cross over the barrier.

    The second iteration had a larger compliant wheel to cross over the barrier. Alas, the swerve drive created a high center of gravity for the robot, causing the robot to tip over.

    The third version had custom-machined aluminum plates for further weight reduction.The Hex Motor was moved inside and above the wheel hub to reduce the center of gravity. Sadly, the wheel was not malleable enough to pass over the barrier without dropping the freight.

    The fourth iteration is a rover-inspired swerve module made of six custom CNC carbon-fiber plates and ten custom 3D printed components. The wheel is made of NinjaFlex and has gothic arch-style to support a large vertical force. The wheel hub is made of nylon and has been holed to reduce weight. The walls of the holes have added infill to increase the strength of the wheel. This version has a lower center of gravity and a lighter wheel module.

    Next Steps

    We will contact the original designers of the rover-inspired swerve module, an Australian college rover team.

    Meeting Log 3/19

    19 Mar 2022
    Meeting Log 3/19 By Anuhya, Georgia, Aarav, Bhanaviya, Mahesh, Trey, and Gabriel

    Task: Get more drive practice before the UIL Championship

    This weekend, we focused on on-boarding new recruits as well as getting more drive practice to get us ready for the UIL competition next month.

    New Recruits Learnt to Create Blog Posts

    Bhanaviya taught us how to make blog posts on different topics, and also showed us the most efficient ways to bug the experienced members to get the information we needed.

    Drive Practice (we really need it)

    Gabriel got in practice going straight and using the extension function to minimize the amount of turning. Different angles of blocks were tested to see how the gripper would pick them up. An average of 3 pieces of freight per round was achieved.

    Build Improvements

    To help prevent the turret from drifting, we were looking at two options: implementing a tensioner to one of the belts to prevent skipping or adding an IMU to help the turret know where it is. We also added a potentiometer to be able to reliably be able to tell the shoulder position. There was a lot of shaft left, so Trey used a dremel to cut down the shaft so he could add the potentiometer.

    Code Changes

    There was an issue with an intake. The intake was running at a very high speed so it would spit the freight back out, for lack of a better phrase. A distance sensor was added to slow down the gripper when a shipping element is located nearby. Finally, he worked on fine tuning the crane so the transfer is seamless, and he is currently working on balancing the crane so it doesn’t bump into the shipping hub.

    Next Steps

    We have to test our robot without outriggers to see if the robot starts to tip over. (NB - We tested it out, it didn’t work. Let’s see what happens at the next meeting.) We also have to fine tune autonomous, so we can have a reliable auton which regularly works. We also have to work on driver optimization using present positions, so it’s easier on our drivers to control. Automating the intake cycle is also on our todo list.

    Repairing ‘Reach’

    19 Mar 2022
    Repairing ‘Reach’ By Gabriel

    Task: Fix issues found by Drive Practice in the robot

    To better prepare for UIL, we have started using Driver Practice to find issues that would’ve impacted the robot performance at the competition. Within the first 15 minutes of driving the robot, the servo that sustains the crane experienced thermal overload and could no longer hold up the axel by which the crane was able to move vertically.

    This required the deconstruction of the component to be able to access and replace the Steel Servo that had issue with the weight of the crane. This led to further experimentation with different aspects of the crane, such as the servo horn to test whether the axel would fully insert into the horn and reworking the distance sensor on the bucket so that it would function properly and automatically drop any held element onto the top of the shipping hub, though dropping elements into the shared shipping hub still needs some improvement. Unfortunately, even after changing out the Servo, the weight of the crane would still cause thermal overload, leading us to determine that it was unable to be fully fixed without reworking the crane in its entirety.

    Next Steps

    Continue with Drive Practice and rigorous testing of the robot attachments to see what needs improvement or complete reworking before UIL

    Solving Tipping Issues in The Reach

    19 Mar 2022
    Solving Tipping Issues in The Reach By Aarav, Shawn, Mahesh, and Bhanaviya

    Task-Identify and solve the problems that led to The Reach tipping over mid-match.

    Our robot, The Reach, utilizes a hybrid-differential swerve drive along with an extending design in order to effectively cross the barriers and score freight. Although this design is unique and avoids the congested areas of the playing field, it comes with trade-offs and flaws.

    At our first qualifier, we noticed one major flaw in the design of The Reach. The robot would often tip over during game play, rendering it unable to move and score points. Observing our matches and looking over our design, we attributed this problem to a couple of key components of our design.

    First off, due to limitations on the dimensions of the robot at the beginning of matches, the robot had quite a narrow base for its extended length of around 5 feet. This led to the robot being susceptible to tipping when in motion when combined with a variable center of mass.

    Furthermore, the jerky and sudden acceleration of the robot when traversing the playing field and extending caused the robot to fall over due to the sudden movement.

    Finally, our robot has an unusually high center of mass due to the design of its drive train and wheel modules. The motors that powered the wheels were housed above the actual wheel in the module, which led to a high center of mass. This issue was exacerbated by the extending crane arm we used for scoring freight, which led to a variable center of mass.

    Overall, we mainly attributed this failure to our robot's high and variable center of mass, which changed rapidly due to the robot's expansion and contraction. These factors combined with the narrow base were the key factors leading to the robot tipping.

    Looking at these diagrams of the robot and its center of mass, we can see how as the crane extends past the base of the robot, the center of mass moves towards the base. Eventually, the center of mass reaches a position outside of the base and the robot falls over. To solve this problem, we would have to either lower the center of mass or limit its fluctuation during movement.

    You can see from these free-body diagrams that as we lower the vertical component of the normal force, the overall rotational torque exerted by the swerve module is decreased, which inspired our decisions to lower the center of mass.

    We did this by redesigning our wheel modules and moving the motor further down. Our redesigned wheel modules utilize custom printed "barrier beaters" instead of the rock climbers we used before. These wheels were printed out of ninja flex and nylon and utilized a Gothic Arch design inspired by Monash University's rover wheels. The custom wheel modules used custom carbon-fiber plates and holes in the nylon hub to help reduce weight. Overall, these wheels were excellent at traversing the barriers, weighed less, and the wheel module allowed the motor to drop 5 inches in height. This led to a lower center of mass for the robot.

    However, in the situation that the crane and robot extension did lead to the center of mass nearing the base, we installed an outrigger system as a preventative measure. An outrigger is essentially a beam that extends from a robot that is used to improve stability. Our outriggers used omni wheels and functioned similarly to training wheels, preventing the robot from tipping over when the crane moves out and extends.

    Finally, we implemented some code changes to help deal with this problem, building anti-tipping limiters which allowed for gradual acceleration. This prevented the sudden acceleration mentioned earlier which was a cause of our tipping issue. We also programmed in pre-set arm locations to help keep the center of mass near the wheelbase, making sure that the center of mass never passes the base of the actual robot.

    Next Steps

    Building a unique and innovative robot like The Reach comes with a unique set of challenges and obstacles, and we will keep iterating our swerve module by experimenting with different wheel designs and weight-reduction patterns to reduce odds of tipping.

    Meeting Log 3/26

    26 Mar 2022
    Meeting Log 3/26 By Anuhya, Georgia, Bhanaviya, Leo, Gabriel, Aarav, Ben, Shawn, and Mahesh

    Task: Work on teamwork with drive practice for the UIL Championship

    This weekend, we worked on giving the new recruits a basic understanding of HTML so they could operate the blog when we were no longer here to help them. We also worked on communication in drive practice, because we have two drivers and two controllers.

    Gabriel and Georgia got in some drive practice

    They got in more practice working together driving, and figuring out how they wanted to split up the responsibilities. We have a robot which works better with two drivers controlling two separate controllers, but this means we have to spend extra time planning out our strategies and deciding how the controls will work for each individual driver.

    The new recruits are learning how to use HTML

    Bhanaviya and Shawn taught us how to use HTML to upload blog posts to the blog. We wrote our first blog posts a couple weeks ago, and today we learned how to upload them to the blog and possibly run damage control if we accidentally break something in the blog.

    Code Changes

    Mahesh worked on updating the code for picking up blocks. Now, whenever the robot is trying to pick up a block and drops it midway, instead of going through the whole motion of putting it in the bucket, it goes back down. This will help our robot become more efficient, as it will have more time to pick up blocks when it’s not wasting time.

    Making an Innovate Poster

    Bhanaviya and Shawn worked on making an Innovate poster which detailed our game strategy and the build for our robot. This is the main award for the UIL Championship.

    Next Steps

    First things first, we need to fine-tune the autonomous for our robot. We are planning to get more drive practice with an autonomous system so we’ll know how to time things properly. We also want to get in more drive practice in general, so we'll have better control over our robot overall and will be able to control the arm better.

    Meeting Log 3/29

    29 Mar 2022
    Meeting Log 3/29 By Anuhya, Georgia, Trey, Gabriel, Ben, Cooper, and Paul

    Task: Getting in some serious drive practice at Woodrow

    We took some time out of our week to get in some drive practice at Woodrow so we would be able to practice working together with another team and collaborating with a make-shift alliance.

    Drive Practice at Woodrow

    Practice matches run: 16 The main purpose of our drive practice at Woodrow was getting drive practice with another team, the Mechanicats. This would be one of our only opportunities before UIL to practice with another team and play in a full practice field with another team working as an alliance. One of the challenges we faced today was with our drivers learning how to work together. There were many kinks with having two people drive, including having two separate controllers with their own unique functionalities. One controller deals with the intake inside the warehouse while the other deals directly with the alliance shipping hub and the arm. Learning how to collaborate while using both was a difficult obstacle to overcome, especially because we didn’t have as much drive practice overall as we would have liked. Another major challenge we faced was getting the team shipping hub to not tip over. Our arm would extend too low and it would tip over the team shipping hub if we weren’t careful. Right now, we are working on maneuvering so it doesn’t tip it over, or only slightly nudges it. We also started working on our duck game, because we realized we didn’t have our duck spinner as efficient as we would have liked. The band which held the duck spinner back from deploying early snapped when we were setting it up, so we had to make do while practicing.

    Next Steps

    We are planning on getting even more drive practice as the days progress and we’re getting closer to UIL. We also need to work on not tipping over the alliance shipping hub, because that is a major penalty and it also makes it nearly impossible to get any points afterwards. We also need to figure out how to “double duck” with our current duck spinner, meaning we have to spin the duck off the duck spinner and then deposit them in the alliance shipping hub. Trey is currently working on redesigning the duck spinner so it has a wider range of compliance. This is so we can maintain our goal of “double duck”, which needs a larger range of motion and a robot which can reach further. We also need to keep working on strategy, so we can finalize what we’re running with at UIL and have time to practice it.

    Meeting Log 4/01

    01 Apr 2022
    Meeting Log 4/01 By Vance, Georgia, Trey, Gabriel, Bhanaviya, Leo, and Mahesh

    Task: Replace Crane Servo with a Motor

    After six broken servos amounting to around 240 dollars worth of funding, it became apparent that the current model of servo we were using wasn't up to the task that it needed to fulfill.

    First came the issue of figuring out how to mount the motor. An HdHex Motor was decided upon as it was able to support additions to increase the gear ratio, while a CoreHex motor had around the same power as the servos previously used. We were able to use a 90 degree mount in order to attach the motor as to not allow it to jut out of the robot, which would break the proper sizing restrictions. After assembly, it was found to solve most issues found with the servos, though did introduce the issue of leaning due to the unequal weight distribution. So far, it has had a better performance than the servos did

    Next Steps

    Figuring out how to mount on a counterweight to offset the weight of the motor so both the crane and the robot no longer lean off to one side

    Think Gripper Progression

    01 Apr 2022
    Think Gripper Progression By Vance

    Gripper Progression

    V1

    Our first gripper design was for robot in 2 days and with the time crunch came some downsides: little power and poor reach. Our second design intended to fix these downsides.

    V2

    Our second gripper design was made just before a scrimmage. While it fixed all V1's downsides it was bulky and heavy.

    V3

    Our third gripper design was used during our first qualifier. While it was significantly lighter than V2 and had much more reach, its gripper power was still too low.

    V4

    Our fourth gripper design was used for regional and it used a new beater bar on a continuous servo to pull blocks into the intake. The beater bar/spinner was controled by a distance sensor which could detech if a block was in the intake. It was held together using a carbon fiber-nylon sandwich (with aluminum shavings) system. It had 6 CNC carbon fiber plate and had 9 Nylon 3D printed parts.

    Meeting Log 4/2

    02 Apr 2022
    Meeting Log 4/2 By Anuhya, Georgia, Aarav, Bhanaviya, Mahesh, Trey, Gabriel, Ben, Anisha, Vance, and Shawn

    Task: Solve minor issues with the robot’s design and code. More drive practice in preparation for the UIL Championship next week.

    With only one week left until the UIL FTC State Championship in Houston, we doubled down on our efforts to fix a few small problems that remained in The Reach, as well as prepare for the State Tournament. Specifically, we had to finish constructing a new duck spinner that could extend farther out, and fix minor difficulties in the code of the robot that was messing up the positions of the crane during gameplay.

    Designing and Constructing a New Duck Spinner

    There were a couple of key issues with the old duck spinner that led to the development of an improved version, which Trey designed and constructed. The old duck spinner was too short to reach the duck carousel when the gripper was lowered and in an intake position and the drivetrain for the duck spinner motor was not very good. Trey designed and 3-D printed a new motor mount that allowed the spinner to be directly driven by the motor. To address the length issue, the entire mount was attached to a carbon fiber rod. This new system allows the hot swappable duck spinner to extend further out and work in tandem with the beater. We managed to mount the duck spinner by the end of our meeting.

    Remember to use safety glasses kids!

    Fixing Minor Build Issues

    There were a couple of structural and wiring issues with our robot that needed to be sorted out in order for the robot to function properly. On the bucket, the distance sensor that allowed an automated transfer system and automated drop off was re-wired to ensure that it didn’t unplug during the robot’s motion. This allowed for the proper transfer of freight from the beater to the bucket. Then, the servo for the second gripper beater was properly wired to make sure that the gripper could intake freight into the gripper properly. Finally, the magnets used to score our team shipping element were reattached so that we could lift FFUTSE’s and placed them on the alliance shipping hub.

    Code Modifications

    We recently added a new shoulder servo for the crane, and we worked today to help integrate it into the code and fine-tune it. We also dealt with an issue with the code that caused the crane to turn only to the right during freight drop-off.

    UIL Posters and Documentation

    Bhanaviya, Anisha, and Shawn worked on documentation posters for the UIL State Championship to submit for the awards at State. Bhanaviya worked on the engineering and design posters that highlighted how we developed and designed our robot. Shawn completed the innovate poster, which showed how we thought outside the box and created an innovative design. Anisha worked on the connect and motivate posters which displayed how we connected with industry professionals to improve our robot and how we spread robotics and opportunity to our community. Shawn also worked on designing our pit layout for UIL.

    Next Steps

    More drive practice. Don’t destroy the robot in the one week before State. Try and not have to pull an all-nighter the night before competition. Continual maintenance and upkeep of the robot would be useful to make sure the robot still works in a week. Documentation will also have to be finished and finalized in the coming week in preparation for UIL.

    Iron Reign’s Mechavator - Safety Features and Protocols

    09 Jul 2022
    Iron Reign’s Mechavator - Safety Features and Protocols By Gabriel and Trey

    Let's not do this!

    Intrinsic Hazards and Safeties
    Primary Safety
    Backup Safety
    Site Safety
    Operational Safety

    Intrinsic Hazards and Safeties

    Intrinsic Hazards

    It’s important to keep in mind that with a 3 to 4 ton class mini excavator we are dealing with forces that can crush and pull down trees, destroy structures and potentially end lives. There is no place for any lack of vigilance and caution for safely operating this machine.

    Intrinsic Safety

    The machine has two emergency stop controls and we employ them redundantly in fail-safe modes. The only intrinsic safety lies in the reliable slow motion of the machine. The engine will only be run at idle speed. Its normal ground travel speed is equivalent to a slow walk and it cannot move faster than an able bodied person can run. There are still cautions around this. Swinging the arm when extended can cover a lot of ground quickly. People need to maintain safe distances. Therefore, we have established Operational Safety and Site Safety protocols.

    Primary Safety

    The Primary Safety functions as a lock-out of the hydraulic pump. When the safety is engaged, no part of the excavator will move with the possible exception of a very slow sag of heavy components to the ground. For example, the bucket and arm may sag by a few millimeters per second if they were left off the ground.

    The Primary Safety is constantly engaged by a rugged bungie. To disengage the safety (UnSafed – therefore hydraulics activated) a servo can actively hold the safety lever down.

    Fail Safes

    • The servo is configured as a deadman switch – the operator needs to continuously hold down a button on the primary remote control for the servo to remain in the Safety-Disengaged position.
    • If the servo or control system loses power or browns out, the bungie will pull the safety back into the engaged position.
    • If the control system stops receiving active disengage commands from the remote, the safety will re-engage. This covers out-of-range conditions.
    • We specifically chose a digital servo that does NOT have a memory of the last good position signal. Some digital servos will continue to hold the last good position they received if they continue to receive power. The servo we chose does not have this feature, so if the PWM position signal fails for any reason, but power remains on, the servo will fail to hold position and the safety will re-engage.
    • If the control system app crashes, the safety re-engages
    • All of the above have been tested
    • We can’t say it’s impossible for the control software stack to crash in a state where it continues to send a safety-disengage PWM position signal. We’ve never seen it happen and we believe it’s prevented by the interaction of the firmware and the app – but we can’t say it’s impossible. It’s also possible to imagine a freak condition where the servo gearbox breaks and locks up in the safety-disengaged position. So we decided to create a redundant backup safety.

      Backup Safety

      The Backup Safety uses similar fail-safe design principles as the Primary, but it is completely independent of the normal control system.

        The Backup Safety is operated through an independent standard RC (digital radio control) transmitter and receiver.
      • The Backup Safety kills the engine when it is Safety-Engaged.
      • The Backup Safety is also normally pulled into its Safety-Engaged position by a tensioning system.
      • To suppress/disengage the Backup Safety, a servo can hold the kill switch in the down position.
      • The servo is configured as a deadman switch – the operator (a different operator than the Primary Safety operator) needs to continuously squeeze the throttle on the RC transmitter for the servo to remain in the Safety-Disengaged position. The throttle is spring loaded to return to Safety-Engaged.
      • If the servo or loses power or browns out, the bungie will pull the safety back into the engaged position.
      • If the RC receiver stops receiving active disengage commands from the transmitter, the safety will re-engage. This covers out-of-range conditions. It also applies when the transmitter is turned off.
      • We specifically chose a digital servo that does NOT have a memory of the last good position signal. Some digital servos will continue to hold the last position they received if they continue to receive power. The servo we chose does not have this feature, so if the PWM position signal fails for any reason, but power remains on, the servo will fail to hold position and the safety will re-engage.
      • All of the above have been tested

      Site Safety

      Site safety speaks to conditions of the site and surrounding properties that informs the risk to people and property.

      The site is the backyard 3 acres of our coach’s residence and the primary structure on the site is the home itself (blue oval, below). The site slopes downhill fairly steeply from the back of the house to the creek that cuts all the way across the property at the bottom (right side in the image). The site is heavily forested with the exception of an open glade, a clearing for a future workshop, and a gravel driveway connecting them uphill to the main driveway for the residence.

      With the exception of the driveway, the open areas are surrounded by impassable forest (yellow line in the overhead shot below). By impassible we mean that the excavator would stall on trees and undergrowth within 10 feet if it tried to push through the surrounding brush without skillfully employing the arm and bucket to uproot the vegetation. In addition to the forest/undergrowth, all of the neighbor’s properties are further isolated by being either significantly upslope or on the other side of the creek. The creek has cut an impassable 20 foot sudden drop across the property’s southern border, effectively creating a moat that would protect the only neighbor property that is downslope. Right now there is no path to the creek that the Mechavator could take.

      The future workshop site (white oval) is the only area that the Mechavator will be allowed to operate in. The ground there is mostly loose soil but does have rocks, mounds and branches that should be treated as trip hazards. Team members need to be aware of the terrain at all times. We will refer to this area as the arena.

      Operational Safety

      Operational Safety consists of the training and protocols that will be followed to assure minimal risk to the participants.

      • Mechavator will only be operated in the arena.
      • Our coach will always be present and supervising operations. The machine may not be started without an OK by coach.
      • There will be a minimum of two operators, a driver and a safety operator. The primary driver will operate either the arm or the chassis as well as the primary safety. The safety operator will operate the backup safety and is primarily responsible for nothing but safe operations of the vehicle.
      • A secondary driver is required if the plan calls for operating the chassis and the arm at the same time.
      • Every session will begin with a meeting to discuss all planned movements to be sure that everyone in the area knows what to expect as well as what could go wrong and to address specific safety concerns.

      Designing the New Workshop

      30 Jul 2022
      Designing the New Workshop By Aarav and Anuhya

      Task: Design a floorplan and model for the new workshop

      With the limits of our current workspace reached and the need to expand with more recruits and machinery; Iron Reign set off on a new summer project. The objective: design a new workspace for Iron Reign to be constructed further into the property. This new workshop would help Iron Reign improve our fabrication and machining capabilities and expand our program. It also served as a productive way to spend our summer and improve our CAD skills.

      A few major constraints and requirements had to be fulfilled by the new workshop, mainly increased capacity for teams and equipment. 2 full-size playing fields were needed to accommodate both Iron Reign and its growing sister teams, and more space for machines, tools, and storage to help delay the workshop's inevitable descent into chaos would be ideal. Finally, we also decided to include brainstorming areas, basic amenities, and a garage for vehicles.

      With our concepts and ideas somewhat straightened out, we began developing a floor plan that fits in the cleared-out patch of land on the property. After a few days of work and revision, we had a basic floorplan complected with dimensions. Below is our preliminary floorplan, which included all of the requisite areas.

      After that, we decided to take the design to the next level by turning our 2D design into a 3D model, using Fusion 360. Here we had to add components like doors, windows, hallways, walls, and roofs to our design. This helped better prepare it for construction and allowed us a chance to include model furniture to help verify our dimensions and make sure we have enough space. After a couple of weeks, we had a preliminary 3-D model. It is still not finished, and we are continuing to iron out any issues and add more components.

      Next Steps

      After finishing the 3-D model, the next step would be to think about construction and start contacting contractors to help sort out any potential issues, along with potentially finding ways to fund this project.

      Think Robot Ideation - TallBot

      02 Oct 2022
      Think Robot Ideation - TallBot By Aarav, Gabriel, Trey, Vance, and Leo

      Task: Design and Think about possible robot ideas after Ri2D

      After Robot in 2 Days, we decided to brainstorm and create more robots to test out ideas. One of those preliminary robot ideas was TallBot. This design involved using linear slides to increase the robot's height in order to allow it to drive over the poles. However, as you can see in the video below, it was not structurally stable and often collapsed on itself. It's wires also easily unplugged, which is not ideal for competition scenarios. Embedded above is a video showing our initial testing of a prototype TallBot, and you will see exactly why we chose to scrap it. However, it did represent our effort to stretch outside the box, literally.

      League Meet #2 Post Mortem

      03 Dec 2022
      League Meet #2 Post Mortem By Anuhya, Georgia, Gabriel, Trey, Vance, Leo, and Aarav

      Task: review the progression of matches in our latest League Meet

      Team 6832, Iron Reign, and our sister teams, Iron Core and Iron Giant had our second league meet earlier today. Overall, it was a very good learning experience and we got to see the functional robots of many of the teams in our league in action. After observing many unique robots, we learned a lot about the differences in strategies between us and other teams and how we could use our differing strategies to work together in a cohesive alliance.

      Play by Play

      Match 1: Win

      We got a total of 45 points, but we got a 20 point penalty for our human player placing a cone in the substation at the same time the robots were in the substation. In the autonomous section, Taubot's arm wrapped around the pole, which got stuck in the wires. We were unable to get a cone or parking. During driver control, we got 3 cones, and we got 1 cone with the beacon during the end game. Our robot scored 28 points by itself.

      Analysis: During autonomous, our robot was overshooting while trying to place the cone, so it would get stuck around the pole.

      Match 2: Win

      We got a total of 88 points, but we got a 10 point penalty for our human player, once again. In the autonomous section, we were unable to get the cone, but the overshooting issue was resolved and we got the points for parking. During driver control, we got 4 cones, and we got 1 cone with the beacon during the end game. Our robot scored 53 points by itself.

      Analysis: Our autonomous section needed to be tuned, and our drivers need more drive practice so the arm can be more reliable.

      Match 3: Win

      We got a total of 68 points, with no penalties. Our human player was incredible at telling the other team to not put their robot in the substation as she was placing cones. In the autonomous section, we scored a cone and got parking. This was the most we were capable of in autonomous. In driver control, we got 3 cones and we got another cone with the beacon in the end game. Our robot scored 53 points.

      Analysis: We could have gotten more points during driver control if our gripper mount wasn't so loose and didn't need to be constantly tightened, and we needed more drive practice for more precision/reliability.

      Match 4: Win

      We got a total of 78 points, with no penalties. In the autonomous section, we scored a cone and got parking, once again. In driver control, we got 5 cones, and we got another cone with the beacon in the end game. We scored 63 points with our robot, which is the highest score we got individually the whole tournament.

      Analysis: This match was the limit of both our autonomous and driver control, which means we need to push the limits and make the robot more efficient so more points are possible.

      Match 5: Loss

      We got a total score of 67 points, with no penalties. In the autonomous section, our robot couldn't score the cone, but we got parking. In driver control, we got 3 cones, but we didn't manage to get a cone with the beacon during the end game. We got a total score of 35 points with our robot.

      Analysis: We need more driver practice and precision, because adjusting the arm slightly when it's fully extended is incredibly inaccurate as it has very high momentum. We also need to practice different strategies, specifically defense, and not get distracted from our strategy by the strategy of the opposing team. Our autonomous section also needed to be more reliable.

      Post Mortem

      Strengths:

      • Not having to move the placement of the robot to score
      • Flexibility - we can score across the field and change where we pick up our elements without interfering with our alliance's strategy or robot
      • Human player - very good at telling teams not to move into box when she's placing things
      • Communicating with alliance partners

      Weaknesses:

      • Robot is bad at making circuits due to design of the robot
      • The big arm is too shaky to score quickly because of the weight
      • Cycle time is too long

      Opportunities:

      • Doing some defensive play
      • Scoring on multiple poles
      • Adding a fourth extension stage by decreasing the weight of the already present rods
      • Increasing the motor count to 5 on top of the turntable to support shoulder joint with more torque for the 4th stage of the arm

      Threats:

      • Letting the strategy of our alliance team interfere with our strategy
      • Getting distracted by the opponent's strategy, limiting how well we can perform
      • The cables of the robot getting tangled around itself or poles

      Overview of the past 3 weeks

      27 Jan 2023
      Overview of the past 3 weeks By Anuhya, Aarav, Leo, Vance, Trey, Gabriel, and Georgia

      Task: Recount the developments made to the robot in the past 3 weeks

      The past three weeks have been incredibly eventful, as we try to beat the clock and finish TaBbot: V2. We had a lot of work to do in build and code, since we were putting together an entirely new robot, coding it, and getting it competition-ready for the D&U league tournament on 01/28/2023.

      Build:

      We were making many changes to the design of our robot between TauBot: V1 and TauBot: V2. We had a lot of build and assembly to do, including putting the rest of the UnderArm together, adding it to the robot, CNCing many of the carbon fiber and aluminum components and assembling the new tires. Our 3D printer and CNC were running constantly over the span of the past 3 weeks. We also had to make sure the current iteration of the robot was working properly, so we could perform well at our final league meet and cement our league ranking going into the tournament.

      Leo focused on assembling the UnderArm and attaching it to the robot. The UnderArm was fully designed, CAMed and milled prior to the tournament, but we didn’t get the chance to add it to the robot or test the code. We were still having a problem with the robot tipping over when the Crane was fully extended, so we decided to attach the omni wheels and “chariot” for the UnderArm to the robot, to counterbalance the Crane when it was fully extended. We experimented with it, and this almost completely eradicated our tipping problem. However, while testing it separately from the robot, we got an idea for how the UnderArm would work with the Crane, and how we should begin synchronizing it.

      Because the majority of the new iteration of Taubot is entirely custom parts, designing the robot was all we had the chance to do prior to the tournament. However, we managed to get the basic chassis milled with carbon fiber and a sheet of very thin polycarbonate. We also began assembling parts of the new Shoulder and Turret assembly, but decided to not rush it and use the old assembly with the new chassis of Taubot: V2.

      Before the tournament though, we incorporated the new UnderArm assembly, carbon fiber chassis, and newly-printed TPU wheels with the Shoulder, Turret, and Crane from TauBot in preparation for the upcoming tournament.

      Code:

      On the code side of things, we mainly worked on fine tuning the code for the scoring patterns and feedforward PID. Most new things which we will be adding to our code will be done after we have completely attached the UnderArm to the main body of Taubot: V2, because that is when synchronization will occur.

      Vance updated auton so it would calculate how many points were feasible and go for the highest scoring option after 25 seconds. He also sped up auton, so it wouldn’t take as long to get a cone and score it. The preloaded cone was scored consistently, but grabbing new cones from the conestacks and scoring them was still unreliable.

      When he wasn’t making auton more stable and reliable and working through the scoring patterns, Vance was working on coding the parts of UnderArm which would be independent of the rest of the robot. He added a simulation so it would be possible to test UnderArm off the robot, and changed UnderArm servo calibration. Limits were also added to UnderArm so it wouldn’t continuously loop through itself.

      Next Steps:

      We need to perform well at the Tournament to ensure our advancement. If all goes well there, the next steps would be a Post-Mortem and the continued development of TauBot2 and the portfolio in preparation for either a Semi-Regional or Regionals.

      D&U League Tournament Post Mortem

      29 Jan 2023
      D&U League Tournament Post Mortem By Anuhya, Georgia, Gabriel, Trey, Vance, Leo, and Aarav

      Task: Discuss the events of our first tournament of the season

      Team 6832, Iron Reign, and our sister teams, Iron Core and Iron Giant had our first tournament to qualify for Regionals or Semi Regionals. Overall, it was an incredible learning experience for our newer members. This was our first opportunity this year to talk to judges and leave a lasting impression with our presentation skills and our robot.

      Strengths:

      • The speed and success with which we replaced the gripper
      • We won Inspire and 2nd place Think so our portfolio was definitely well constructed
      • We did a good job of selling the team's story, its role in the larger ftc community, and how tau is the pinnacle of that story

      Weaknesses:

      • Less emphasis on outreach
      • Distance sensor detected wire, messed with underarm
      • Need new place to mount power switch to make room for underarm
      • Coordinating with alliance partners
        • Collisions were avoidable, high scores more achievable
        • Have to get better at concisely explaining strategy, maybe with a short video
      • Drive Practice: Not enough, excusable since it was a new robot, but not going forward
        • Time to train with multiple drivers for scoring patterns

      Opportunities:

      • UnderArm
      • New Crane which can extend farther
      • A more versatile gripper: Flipper Gripper
      • Prioritize presentation for proper emphasis
      • Mechavator reveal video
      • Taubot Reveal Video
      • Subsystems video
        • Linear slide video
      • STEM Expo
      • Better cable management
      • Reliable UnderArm distance measurement - need ideas
        • Odometry wheels on linear slides
        • Encoder on a spring-powered retractable string (like the ones you would use for an id badge)
        • Tape measure with sensor to read numbers
      • Using sensors for autonomous period and tele-op

      Threats:

      • Robot capability
        • Release the Flipper Gripper - we need to see the dynamics in action, it might not be viable
        • Flipper gripper damping - we need to try different friction materials
        • Bulb gripper wrist - we may need to do active wrist control, which needs to be figured out asap
        • Flipper Gripper elbow - we may need to do active elbow control, which needs to be figured out asap
        • New Crane/Shoulder/Turret - need to avvelerate the build
        • Crane bouncing needs to be fixed on the new system
        • New Crane wiring harness with distance sensor and 3 servos - can't wait for full custom board manufacturing - need prototype
        • New IMU for new Crane (ordered)
        • Nudge stick distance sensor - will it work over the ultra long cable?
        • UnderArm
          • Mount onto robot and get unfold and articulations right
          • Anti-collision code with Crane
          • Better distance sensing and control for chariot extension
          • May need wrist control for conestacks
        • Lasso gripper needs to be tested, might not be viable
          • Make an alternate gripper design for UnderArm, as a fail-over option
        • Sensors
          • Cone and Cone Stack detector
          • Junction pole detector
          • Differential Distance Sensor as alternative to vision
          • Team number labels if LED Panels get rejected
          • Huge amount of drive practice needed
      • Team Composition - will onboarding new members at this time cause confusion and harm productivity?
      • Teams
        • Technic Bots
        • Mark X
        • Technical Difficulties
      • New sponsors and connect opportunities
      • Prep
        • Poor battery planning
          • Missing a multimeter
          • LED panel batteries not charged
          • Batteries not properly labeled
          • LED Switch and battery not properly secure
          • Batteries need to be tested for internal resistance
        • Rank what would be best to talk about, so talk about what benefits our stationary robot
      • Judging
        • Didn't have powerpoint up for initial judge motivate
        • More practice/preparation beforehand
        • Lack of presentation practice and timing(couldn't finish connect and motivate)
        • Don't oversaturate with information/gloss over other parts
        • Lack of people ready for judging panels
        • Lack of enthusiasm
        • Need Cart with display ready to go
        • Practice entering the room with the robot running
        • Practice in-judging Demo
        • Whenever we mention a specific part of subsystem, let judges interact with it
      • Inspection
        • Capstones were too close to being out of sizing - reprint
        • Robot close to out of sizing (Inspector was young, careless, and did not thoroughly check sizing)
        • Missing power switch label and full initialization label (they let us replace it, it was fine)

      A Deep Dive into the Shoulder and UnderArm

      16 Feb 2023
      A Deep Dive into the Shoulder and UnderArm By Aarav, Anuhya, and Krish

      Describe our Implementation of the Shoulder and Turret Subsystems

      With our primary game strategy for this season being to limit our movement around the playing field, the ability to quickly and easily rotate our intake and deposit systems is vital. Additionally, the ability to reach a variety of poles and scoring options is also crucial if we are to remain stationary. This is why we implemented a Turret and Shoulder on both versions of TauBot. This post will be a deep dive into the mechanics of both these subsystems on TauBot2.

      First, let's talk about our Turret, which allows the Crane to move a full 360 degrees independently of the actual differential drivetrain. First off, we have the Slip Ring, a crucial part of the Turret since it allows the Turret to rotate continuously without interfering with the wire runs. Below is a simple breakdown of the new Turret assembly, which consists of turning curricular rings with ball bearings. Inside is a custom Nylon 3D-printed planetary ring used to drive the entire Turret and motorize it.

      Finally, on top is a carbon fiber base plate upon which the entire Shoulder assembly rests. The Turret uses two main motors that synchronously drive its turning motion. The addition of another driving motor is what separates TauBot2 from the one lonely motor driving the TauBot Turret.

      As seen in the image above, near the front, the two TauBot2 turret motors lay horizontally on the carbon fiber cover under the REV channels. These motors use bevel gears to direct power downward towards the turntable and the planetary gear, allowing it to turn twice as fast as its previous iteration.

      On top of the REV channels, we have the entire Shoulder assembly, which is the basis for the Crane and allows our robot to score on various poles of all sizes from one stationary spot on the field. The two main functions of the Shoulder are to rotate the entire Crane up and down, and to power the extension of the linear slide.

      As you can see, the slide extension is controlled by the front motor and a belt drive. A gear ratio and second motor control the rotation. The gear ratio allows one motor to drive the entire elevation process and ensures easier positioning.

      The axle housing the largest gear is also a co-axial joint, allowing it to drive the extension and rotation through two separate systems. The Shoulder uses the shaft as an axle, but the main arm rotation gear pivots freely due to two attached ball bearings. Overall, this allows us to combine multiple responsibilities into one design and save space.

      The motor used for rotation and elevation is assisted by two springs and a custom-designed logarithmic spiral to provide a consistent upward force to counter the force of gravity on the extended Crane, helping to reduce torque.

      And that's a brief overview of the entire Shoulder and Turret system. This is also where our main Control Hub and our webcam are housed on the original version of TauBot. All in all, these two subsystems are crucial to the functionality of our robot and are the results of loads of careful and meticulous design by our team.

      NTX Regionals Post-Mortem

      27 Feb 2023
      NTX Regionals Post-Mortem By Aarav, Anuhya, Georgia, Gabriel, Trey, Vance, Alex, Krish, and Jai

      Discuss the events of Regionals, analyze our performance, and prepare future plans

      This past Saturday, team 6832 Iron Reign participated in the NTX Regionals Championship at Marcus High School. Overall, despite some robot performance issues, we won the Motivate award, meaning we advanced to both the UIL State Championship and FTC State Championship. Today, 2 days after the competition, we had our Regionals Post-Mortem, and below are our main strengths, weaknesses, potential opportunities, and threats.

      Strengths:

      • Motivate game was quite strong -> Figure of 1500 kids at two outreach events was quite impactful
      • Presentation
        • Should work on arrangement of members, some were off to the side and couldn’t do their slides -> Potentially utilize CartBot and a monitor
      • Meeting with judges went generally pretty well
      • Portfolio is quite well constructed and unique
        • Well-practiced portfolio/presentation team(lots of improvement from last time)
      • Shoulder of the robot was strong
        • Rails were bending; tension too tight.
      • Switching to carbon fiber resulted in a far stronger robot that did not crack
      • Turret was much more capable of moving the extended crane
        • Even worked well in fast mode -> probably could increase the speed of our articulations

      Weaknesses:

      • The need to sleep
      • Team burnout
      • Significant under planning
      • Entanglement of springy cable on junctions during auton
        • Arm does wide arcs sometimes, articulations not working half the time
      • Lack of driving practice
      • Cone placement accuracy
      • Navigation to final position speed
      • Connect game compared to other top teams
      • Turning down an Innovate panel
      • Robot Demo in judging
      • No reliable auton
        • If auton goes bad, effects extend into tele-op. The dependence is nice when auton is working but a hindrance when it needs to work.
      • No reliable wheels that rotate straight which messes up auton
        • Underarm wheels not working well and the cable management is still out of wack
      • Placement of certain components on the robot
      • Should have made it more clear to new recruits that this was crunch time and expectations for attendance are way up
      • Coordination in pre competition prep
      • Our funding situation is really bad. We are way over extended on deficit and Mr. V is not putting more money in

      Opportunities:

      • Booth at the pits with detailed banners
      • Good robot == good judging
        • Completing the robot puts us in the running for more technical awards
      • Build Freeze
      • A fully functioning robot with the transfer that can win matches would put us in Inspire contention somewhat
        • Synchronization with transfer would be impressive in a control sense as well
      • Strengthening our motivate outreach
      • Spring Break
      • A larger team to better spread the workload leading up to State
      • Curved Nudge hook
      • Drive practice
        • Need more on the left side. We are becoming a liability for our partners to side limitations in terms of driver practice.
      • Code Testing
      • Maintenance for parts that were previously underdone/not to our standards
      • Live robot demo
      • Time to improve our connect game
      • Judges for control award wanted to see more sensors
        • Nudgestick + cone gripper
      • Mechavator Reveal
      • Cart Bot
      • Matching shirts and hats

      Threats:

      • Our Connect game is significantly weaker than the competition
      • Technic Bots won Inspire twice
        • They had good outreach as well
        • They also have an underarm & it is very much working well
      • We have 3 weeks to code an entire robot
      • 9 advance from state to worlds so we cannot rely on Motivate again, we need a stronger award, also most likely cannot just place 2nd for any award so Think Winner should be our absolute minimum goal or Inspire 3r
      • Mr. V unavailable for a number of days leading up to State

      Texas State and UIL Championship Post-Mortem

      28 Mar 2023
      Texas State and UIL Championship Post-Mortem By Aarav, Anuhya, Georgia, Gabriel, Trey, Leo, Vance, Alex, Krish, Jai, and Tanvi

      Discuss the events of Regionals, analyze our performance, and prepare future plans

      This weekend, Iron Reign participated in the FTC UIL Championship, which was mainly robot game, and the FTC Texas State tournament, where we advanced to FTC Worlds with the Think award, an award granted for the engineering portfolio and documentation. We learned a lot from our gameplay and communications with our alliance partners, and got the chance to see our robot in action properly for the first time. This is our analysis of our main strengths, weaknesses, and future opportunities and threats we will have to deal with before competing at Worlds.

      Strengths:

      • fast maintenance when things went wrong, both build and code related
      • sticking to our own strategy
      • being able to access all the junctions/ cover a lot of ground
      • communication with alliances
        • not being a hindrance to our alliance partners

      Weaknesses:

      • penalties for wrapping around poles and extending out of field
      • long time required to recalibrate if setting up goes wrong
      • no consistent gameplay
      • turret movement is very choppy
      • lack of time to modify UnderArm
      • less time for testing because of complicated design
      • cone gets dropped, especially during transfer

      Opportunities:

      • further optimizing transfer and transfer speed
      • working on auton parking and cone scoring with transfer
      • automating transfer
      • we will have time to further finetune the robot

      Threats:

      • Nudge Stick is still a hindrance to game play
      • lack of drive practice because design was prioritized
      • robot pushes itself past what is mechanically possible
      • robot relies on calibration, which isn't convenient

      Meeting Log 4/9

      09 Apr 2023
      Meeting Log 4/9 By Georgia, Sol, Trey, and Leo

      Task: Prepare for Worlds through Build and Drive

      Today, we did drive practice, and worked out some of the smaller issues with transfer.

      While doing robot testing, the servo on the underarm shoulder joint broke. We took apart the joint in order to fix the servo, but the servo's gearbox was not accessible, rendering us unable to diagnose the problem, so we had to replace the old servo with a new one.

      Trey redesigned a new transfer plate bridge, then milled it on the CNC. While milling this piece, we pushed the CNC too much, causing a drill bit to break. After that, we cut the part again, but the cutouts got caught between the drillbit and the plate, causing the CNC to crash. Twice. Eventually, we fixed the issues, and successfully cut out the new transfer plate bridge.

      By the end of the meeting, we had successfully tested underarm.

      Next Steps:

      Our next steps are to finish making transfer work, remove the shoulder support spring, get more drive practice, and prepare for State and UIL.

      Consequences of Removing the Shoulder Support Spring

      11 Apr 2023
      Consequences of Removing the Shoulder Support Spring By Anuhya, Trey, Leo, Gabriel, and Vance

      We learned the consequences of making small changes to build without fully knowing the outcome

      A small change can make a huge difference: we have learned that we really should have put the shoulder spring back in place after we rebuilt Taubot. The Crane arm fails to maintain its shoulder angle, and this is an issue which has only started since we built Tau2. We're probably hitting the thermal cutoff for the motor port, which causes the control hub to stop sending power to the shoulder motor and the whole arm crashes to the ground.

      This also means that its stalling the motor and it pulls a huge amount of Amps. We also have horrendous battery management, which leads to short battery life and permanent battery damage. The Crane being held out fully extended further damages it.

      A lot of Tau2 is an inherited, yet modified, design. We aren't fully aware of the considerations that caused a spring to be in Tombot, the original robot we based part of our design on. We also changed the gear ratio of the shoulder motor so we could power through lifting the shoulder at extremes, and we're pulling many more electrons to compensate for something which was built-in initially.

      The original reason was a design goal - whenever you make an arm, you want as little motor force as possible dedicated to maintain the arm against gravity. The motor should just have been changing the position, not maintaining it. Real world cranes use counterweights or hydraulics to fix this problem, something which we don't conveniently have access to.

      The spring was meant to reduce the burden of maintaining the crane's weight against gravity. It wasn't perfect by a long shot, but it definitely did help. Our batteries would also last longer in matches and have a longer life.

      Thankfully, we still have access to the original CAM we used for the log spiral, and a spring could easily be reintroduced into our robot if we messed with some of the wires. It's a high priority and needs to be done as soon as possible.

      However, hardware changes like these are incredibly annoying for coders. We recently added a custom transfer plate too, and it was very helpful to increase transfer efficiency. It also changed the angle of the initial transfer plate to the flipper gripper, which added 3 hours of extra coding time to retune transfer and grasping the cones so it didn't get knocked off. It will be better once fully tuned, but it doesn't change the fact that small changes in physical build are incredibly annoying for the coding team. Adding the shoulder support spring will also have this kind of cost, but it's crucial for further success.

      Scrimmage Before Worlds

      15 Apr 2023
      Scrimmage Before Worlds By Anuhya, Jai, Alex, Trey, Gabriel, Vance, and Leo

      Attending a Final Scrimmage Before Worlds

      Today, we attended a scrimmage that team 8565, Technic Bots, graciously invited us to. The point of this scrimmage was to get some time seeing the changes which the other Worlds-advancing NTX teams had implemented, and to get some ideas of strategies and alliances. This was the first time we were able to get proper driver practice with the newly designed Transfer Plate and Nudge Stick.

      One of the main problems we experienced was our cable harnesses malfunctioning. The servos kept getting unplugged or the signals just weren't sending properly, which was a large issue. This meant that our Gripper Flipper assembly wouldn't flip into place, so the cones which the UnderArm was depositing onto the Transfer Plate would remain on the Transfer Plate and act as a hindrance. This also increased the chances of double cone handling, which is a major penalty. The Bulb Gripper was unable to get cones off the Transfer Plate because the servo which controlled the Gripper Flipper wasn't working. However, we learned that UnderArm to Transfer Plate mechanisms worked incredibly effectively and consistently.

      We also learned an important lesson about calibration; without realizing there would be consequences, we started calibration of our robot with the robot in the starting position, against the walls of the playing field. During calibration, the Turret does a full 360, during which the nudge stick kept hitting the walls of the playing field, causing one end to completely snap off at the joint which connected the REV channel to the nylon.

      The scrimmage also gave us a chance to work on auton. During our autonomous drive, we use a timer separate from the one on the driver station to make sure that we can complete or abort our auton safely before the driver station timer kills power to our robot. In our auton testing, we found that this time-management system was not properly iterating through the stages of our autonomous. To solve this, we reviewed and edited our code to work with our timer system and performed repeated trials of our autonomous system to ensure reliability. Once we fixed these bugs, we had the chance to begin working on improving the accuracy of our parking procedure. Our parking procedure hadn't been modified for our new cone-stack-dependent autonomous strategy, so we changed the code to account for it. We are now well on the way to a consistently performing autonomous mode.

      Next Steps:

      We will continue working on building and code, especially auton. We need to make sure that our Nudge Stick works in practice, and we need to make sure our drivers get time to get used to having a Nudge Stick to control. Overall, we need drive practice, and we need to make parking and getting cones from cone stack consistent in our autonomous period.

      FTC World Championship 2023

      25 Apr 2023
      FTC World Championship 2023 By Anuhya, Jai, Alex, Trey, Gabriel, Vance, Leo, Tanvi, Georgia, Krish, Arun, Aarav, and Sol

      Our Experience This Year at Worlds

      Over this past week, we had our final preparations for the FTC Worlds Championship in Houston, Texas, which was our final destination after everything we’d done this season. This Championship was an incredible opportunity for us to interact with teams from around the world, and establish relationships with teams we never would have been able to meet otherwise. It was an incredible outreach opportunity, where we talked to teams from Romania, India, Libya, and other countries with different approaches to how we did robotics. At the Regional Edison Awards, we won 2nd place Motivate!

      What was productive at worlds?

      The build of the robot was much closer to being done than it had been at previous tournaments. We were also relatively confident in the capabilities of our transfer system, especially with the implementation of the Transfer Plate. We were also prepared with replacement parts fully made and manufactured, so we knew we would be able to replace the UnderArm if something went wrong with one of the arms.

      What was beneficial to our team?

      The time and effort we put into our portfolio as a team was definitely one of our strongest points. We were prepared for how to interact with judges, and we had also practiced our answers to some possible questions we could get. By showing the judges how our team was set up and the true nature of our compatibility and cooperation, we were able to leave a lasting impression.

      We also had a pit design which was made to help our productivity, with shelving to organize our tools and supplies, tables set aside for different purposes and stools to maximize space within the tent. It also helped us convey a good team image to the other teams who were present at Worlds, and gave us a place to talk about our robot design and game strategy. The posters which were put up in our pit were also very effective, because they were great conversation starters. Teams were very interested in seeing our robot design and getting an explanation for some of our decisions when they saw the engineering banners which were put up at eye level.

      How do we want to improve?

      One large issue that we had throughout the entire season was our robot was never fully prepared when it was time for the tournament. We didn’t have the opportunity to have driver practice throughout the season, especially with the new robot and the new design, so we found a lot of issues at the actual Worlds Championship that we should have found and fixed way earlier. We also burnt out many of our axon servos at the tournament, and scrambling to find more because they were the basis of our UnderArm was not a good look for the team. One of our primary goals for next year will definitely be finishing the robot on time, so our drivers have a good opportunity to get drive practice. At the Championship, we also barely passed inspection. Because we didn’t have enough time to ensure that our robot fit under sizing when it was initialized, we had to get inspected a second time. Overall, we want to make sure that we are fully prepared for all tournament procedures in the upcoming season, so we don’t have as much of an issue during the actual tournament.

      Our packing and organization also left something to be desired, because we didn’t start packing until 1 or 2 days before the tournament. While our pit design was effective, we didn’t have a chance to practice it beforehand, and we could have made some design changes and improvements if we had practiced it prior to the tournament. Even though we had shelves, it took us 20 to 30 minutes to find tools and that was incredibly frustrating when we were in a time crunch.

      Something else we were lacking in was communication between different subteams. One of our largest problems was that the coders weren’t given enough time to work on the robot because the modelers and builders weren’t entirely sure about when prototypes would be available. We also sacrificed a lot of sleep because we weren’t ready to compete when tournaments came around, and it wasn’t sustainable throughout the year and led to a lot of burnout. Our morale was also low because of deadlines and not having a sustainable work ethic.

      Next Step:

      The next season started the day Power Play ended. Over the summer, we have plans to start recruitment and outreach early, and set up boot camps to get the new members of our team more specialized and ready for the next season. We also wanted to get the MXP up and running, so we would have more mobile opportunities to teach kids how to code and use 3D printers and just set up more outreach events. We’ve also started setting up organization softwares and setting up different team roles to maximize organization in the following seasons.

      How To Get Your Daughter (or Son) Started in Robotics

      21 Jul 2023
      How To Get Your Daughter (or Son) Started in Robotics By Anuhya

      FIRST Robotics is an incredible opportunity for kids of all ages to get involved in STEM! It starts with FIRST Lego League (FLL), which uses LEGO robots to teach kids the basics of robotics and STEM-based activities. FLL has 3 levels for different age ranges.

      FIRST Lego League Discover: Grades PreK - 1: This is the introductory level of FLL, which introduces kids to robotics using LEGO® DUPLO® bricks.
      FIRST Lego League Explore: Grades 2 - 4: This is the second level of FLL, which introduces kids to solving real-world problems using engineering and logical thinking skills.
      FIRST Lego League Challenge: Grades 4 - 8: The third level of FLL is competitive, and teams of kids learn how to program and design a LEGO robot to navigate a robot game and engage with other teams.

      For older kids, such as middle and high school students, they can participate in the FIRST Tech Challenge, or FTC, and FIRST Robotics Challenge, or FRC.

      FIRST Tech Challenge: Grades 7 - 12: Students design, build, program and drive robots to navigate a robot game and beat their opponents. They learn important time management, problem solving and teamwork skills while participating in friendly competition. In FTC, they also uphold FIRST's core value, Gracious Professionalism, where kids learn how to compete but maintain good relationships with their opponents.

      FIRST Robotics Challenge: Grades 9 - 12: Students work alongside engineering mentors to create robots under strict guidelines. FRC is meant to be similar to the real-world engineering environment, where students must find funding, resources and ideas by themselves, and create a robot which can compete in a difficult robot game against opponents.

      What Steps Should I Take?

      • Talk to your principal and PTA to see if your school has pre-existing robotics opportunities. If not, you can start a team yourself! You can create robotics opportunities within your school or community through FIRST! Click the following links to find out how to start an FLL team, FTC team or FRC team.
      • Sign up to talk with coaches and other parents through the North Texas FLL google group
      • For middle and high school students, sign up with the North Texas FTC google group

      Iron Reign’s R2V2 - Safety Features and Protocols

      11 Aug 2023
      Iron Reign’s R2V2 - Safety Features and Protocols By Coach

      Let's robotify this!

      What if you took an RV, converted it into a mobile learning lab, and then turned that into a droid? What would you call it? We call it R2V2

      Intrinsic Hazards and Safeties
      Primary Safety
      Backup Safety
      Site Safety
      Operational Safety

      Intrinsic Hazards and Safeties

      Intrinsic Hazards

      It’s important to keep in mind that our mobile learning lab is based on a Class A motorhome chassis. As such it weighs on the order of 16 tons and represents a real danger with any kind of untrained operation. There is no place for any lack of vigilance and caution for safely operating this vehicle.

      Intrinsic Safety

      R2V2 has multiple emergency stop overrides and we employ them redundantly in fail-safe modes. The only intrinsic safety lies in the reliable slow motion of the vehicle with max speed under normal human control. The engine will only be run at idle speed and the PSO will only apply acceleration if needed to get the vehicle moving at a walking pace ground travel speed. The acceleration pedal is not automated. People in the test zone will still need to maintain safe distances. Therefore, we have established Operational Safety and Site Safety protocols.

      Primary Safety Operator

      The Primary Safety Operator (PSO) is our coach, who is the owner and operator of the vehicle and who will always be behind the wheel while the vehicle's engine is on. Only he has the authority to start the engine and operate the gear shifter. He also has the ability to physically override the primary brake and independently operate the parking brake. He is the only one able to apply any force to the accelerator via normal foot control. He is also able to kill power to the whole control system, thereby engaging passive braking and locking the steering.

      Remote Safety Operator

      The remote safety operator will be a student trained and solely assigned the task of the ensuring safe operations from the outside. Their mandate is to stop the vehicle if they see anything wrong. Their interface is a normal gamepad where they have only two controls, either of which will stop the vehicle. The left trigger is configured as a deadman switch and has to be held in order for unbraking (and therefore motion) to happen. They can also press the red button on the gamepad to stop the opmode, thus idling the unbrake.

      Remote Driver

      The remote driver also has access to a kill button on their gamepad. They are responsible for starting and stopping automation by controlling the opmode. They can engage in remote steering or enabling automated steering, and can unbrake the vehicle, thereby allowing overrideable movement.

      Fail Safes

      • The brake and steering are the only two systems under automation.
      • The brake is the real safety system and is designed to fail into braking mode. The brake pedal is continually pushed toward stopping the vehicle by rugged bungees.
      • Unbraking or counter-braking requires a motor to counteract the passive bungee tension and allow the brake pedal to release.
      • If power fails to the counter braking motor, the tension in the bungees is enough to back-drive the motor and apply pressure to the vehicle's brake pedal.
      • If the control system locks up with counterbraking applied and doesn't respond to any of the kill commands, the Primary Safety Operator still has the ability to overpower the counterbrake motor. The motor simply doesn't have the torque needed to compete with a human leg. As stated elsewhere, 3 people have access to multiple means of shutting down the control system and we find this extremely unlikely, but are keeping this potential failure mode in mind.
      • The steering motor simply locks up in any kind of failure mode. The gear ratio is approximately 200:1 and the gentle natural tendency of the steering column to center when no input is applied is insufficient to back-drive the steering input. There are too many factors to decide how steering should be applied in an emergency situation. So we decided to take steering out of the equation and simply rely on stopping the vehicle while locking the steering motor. Removing power, killing the opmode and not receiving continuous unbraking commands all result in engaging braking and locking steering to the current angle.
      • All of the above are testable both off the vehicle and while installed.
      • We can’t say it’s impossible for the control software stack to crash in a state where it continues to send a safety-disengage PWM position signal. We’ve never seen it happen and we believe it’s prevented by the interaction of the firmware and the app – but we can’t say it’s impossible. It’s also possible to imagine a freak condition where the servo gearbox breaks and locks up in the safety-disengaged position. So we decided to create a redundant backup safety.

        Site Safety

        Site safety speaks to conditions of the site and surrounding properties that informs the risk to people and property.

        The site is the backyard 3 acres of our coach’s residence and the primary structure on the site is the home itself (blue oval, below). The site slopes downhill fairly steeply from the back of the house to the creek that cuts all the way across the property at the bottom (right side in the image). The site is heavily forested with the exception of an open glade, a clearing for a future workshop, and a gravel driveway connecting them uphill to the main driveway for the residence.

        With the exception of the driveway, the open areas are surrounded by impassable forest (yellow line in the overhead shot below). By impassible we mean that the R2V2 would stall on trees and undergrowth within 10 feet if it tried to push through the surrounding brush. In addition to the forest/undergrowth, all of the neighbor’s properties are further isolated by being either significantly upslope or on the other side of the creek. The creek has cut an impassable 20 foot sudden drop across the property’s southern border, effectively creating a moat that would protect the only neighbor property that is downslope. Right now there is no path to the creek that R2V2 could take.

        The future workshop site (white oval) is the only area that the R2V2 will be allowed to operate in. The ground there is mostly level and compacted. Still, team members need to keep this area clear of possible stumbling hazards. We will refer to this area as the arena.

        Operational Safety

        Operational Safety consists of the training and protocols that will be followed to assure minimal risk to the participants.

        • R2V2 will only be operated on a closed course like the arena. Closed means that we have good control and awareness of all souls on a private course and no other vehicles are moving.
        • Our coach will always be present and supervising operations. The vehicle will only be started by coach.
        • There will be a minimum of three operators, the Primary Safety Operator, a Remote Safety Operator and a Remote Driver. These roles were defined above.
        • Additional spotters will be able to call out safety concerns by issuing a Halt call and hand signal.
        • Every session will begin with a meeting to discuss all planned movements to be sure that everyone in the area knows what to expect as well as what could go wrong and to address specific safety concerns.
        • While we may use "movie magic" to make it appear otherwise, no participant will be allowed to approach closer than 25ft to the path of the (slowly) moving vehicle
        • The vehicle will be kept to a maximum speed of about 5mph (jogging speed) when under automation

        An Overview of the R2V2 Braking System

        26 Aug 2023
        An Overview of the R2V2 Braking System By Aarav, Tanvi, Krish, Sol, and Gabriel

        Task: Design a subsystem to control the braking of R2V2

        An essential part of effectively remote controlling R2V2 is the developing a method for controlling the brake autonomously. We decided, for safety reasons, to not involve the accelerator at all, so the movement of RV2V would be reliant on the application of pressure on the brake.

        Our main requirement with the system's integration with R2V2 was a quick installation process and no permanent changes, meaning that the entire assembly would have to be removable but also rigidly installed for reliability. Additionally, for safety purposes, the resting state of the mechanism would need to be with the brake pushed down, and with power, the brake would be released and the vehicle would move forward. For more information about the safety protocols implemented to protect us, check out this blog post.

        Here is an image of the brake pedal(the larger one) and the area immediately around it. There were size restrictions due to a large center console on the right and the driver’s seat assembly.

        Our initial idea was to use a series of pulleys and bungees to manipulate the brake pedal; however, this applications would require the use of the driver’s seat itself, making us unable to have a driver physically present in the case of emergency. For safety reasons, we pivoted and decided to attempt to emulate the natural movement of a foot and ankle that a human uses to driver.

        Engineering

        The braking subsystem consist of an approximately 2.5 foot by 7 inch REV rail frame that slides in under the driver’s console and lines up with the brake pedal. It attaches to points drilled into the flooring of the RV, and can be quickly installed. This allied for no significant permanent alterations that could interrupt our ability to drive the RV “normally.”

        On the frame, there is a “foot” mechanism mean to simulate the movement of a foot that presses the brake by rotating on an axle attached to the frame. This “foot” is what we manipulate in order to press and release the brake.

        In order to set the default position of the foot mechanism to down, a system of bungees and pulleys are used to create tension and pull the brake down. This way, if the system ever loses power or fails, the foot will revert to pressing the brake and stopping the vehicle. The bungees are tied to the front of the foot and pass through a set of pulleys that send them to the back of the frame, where they are securely tied down. These bungees create a significant amount of tension in order to ensure the foot presses the brake far enough to stop the vehicle.

        To lift the foot, we used heavy-duty twine that could withstand the forces put upon it. The twine was tied to the back of the foot and passed through an elevated pulley(allowing us to more effectively lift the foot through mechanical advantage) to a spool. We used a REV ultraplantery motor connect to a gear train to rotate the spool and lift the foot. Our usage of gears and an elevated pulley system allowed to to counteract the tension of the bungees and release the brake.

        The diagram below highlights the major components of the system as described above.

        Coding

        The code for the “unbreaking” mechanism consists of two parts: calibration and running. Additionally for the code of the robot we refer to the braking system as the unbreak as it only runs when we want to stop breaking.

        First we perform the calibration where we run the motor until we have tightened the string pulling the unbreak up and we set this encoder position to 0 and are not able to go lower then this. Then we run the break until a human sees that the break has stopped being depressed; this is the maximum for the unbreak, and we cannot go higher than that. That finishes the calibration sequence now we can run the unbreak.

        The way that the unbreak runs is a two-fold controller system. One person must depress the deadman switch or the unbreak will automatically run to its lowest position. Once the deadman switch is depressed then the unbreak can be lifted. When the trigger to unbreak is pressed when the deadman switch is active then the unbreak will raise until it reaches its max or until the trigger is released. When the trigger is released the unbreak runs back down to ensure that we are always breaking when not actively unbreaking.

        A majority of the system is comprised of REV parts, illustraring how we can use the parts on our FTC robots for larger and more complex applications. The system itself, after lots of code tuning, worked pretty reliability throughout our testing.

        Next Steps

        We are hoping to further test R2V2 and extend upon its capabilities and further share our progress through our blog, socials, and Youtube.

        An Overview of the R2V2 Steering Wheel

        26 Aug 2023
        An Overview of the R2V2 Steering Wheel By Anuhya, Vance, Trey, Leo, Alex, and Jai

        Task: Design a subsystem to control the steering wheel of R2V2

        One of the main components of our mission to make a remote-controlled RV was figuring out how to automate our steering wheel.

        Step 1: Designing the plywood base for the steering wheel

        Our first plan was to attach a sprocket and chain to the plywood base for the steering wheel. We knew we needed a plywood base because it would be both lightweight enough to easily be removable and attachable onto the steering wheel, and sturdy enough to handle a motor with high torque without splitting. While trying to screw in the sprocket to the base, we realized we didn’t have a convenient way to attach the motor assembly and the chain would most likely “lock up” if we tried to constantly move it forward and backwards.

        We settled on a design using a worm gearbox and the REV ultra planetary motors. We used a paddle to keep the worm gearbox and motor stationary so the steering wheel could move. The paddle was latched onto the window using REV bars and attached to a carbon fiber plate, which was then secured onto the worm gearbox. We used a second carbon fiber plate to attach the shaft collars on the axle of the worm gearbox to the plywood base, and made sure the shaft collars were tight enough to not spin on the axle when high amounts of torque were applied with the worm gearbox.

        Step 2: Attaching the plywood base for the steering wheel

        We didn’t want to make any permanent changes to the RV, so we devised a system to attach the plywood base to the steering wheel using straps and buckles. We attached the buckles to 2 sides on the top of the plywood, and attached one end of the straps onto the back of the plywood. To attach it, the straps go under the steering wheel and latch onto the buckles on the top of the steering wheel, securing the plywood to the steering wheel.

        Step 3: Coding and calibration!

        After we finished the design portion of the steering wheel we had to get it to actually move. We needed to not only map the left and right motion of the steering wheel to buttons on the logitech controller we are using for the R2V2 but also to know where the wheel is in relation to its maximum rotation to either side at all times.

        In order to find the maximum rotation of the wheel we had to spin it all the way to one side. We need to find a way to know in the code that we reached the end of how far we could turn. For this we decided to test to see if the motors stalled because when the motor cannot move the wheel anymore in a direction its amperage spikes. This makes up our calibration mechanism. We spin the wheel all the way to the left and when it stalls we record the encoder position as the max left we can go. Then we spin the wheel all the way to the right and do the same thing but with the max right. We then find the distance between the max left and right and assume the middle of those numbers is center. To finish the calibration we run the wheel to center and then set that encoder position to 0 for easy readability for the driver. Left is negative and right is positive. Finally as a sanity check we make sure the encoders were recording values and if they were not we stop the robot as a safety precaution.

        This procedure gets us the precise location of the wheel relative to where it is, and we can safely run the robot using the controller.

        Next Steps

        We are hoping to further test R2V2 and extend upon its capabilities and further share our progress through our blog, socials, and Youtube.

        Center Stage Robot in 2 Days(Ri2D) Overview

        10 Sep 2023
        Center Stage Robot in 2 Days(Ri2D) Overview By Aarav, Anuhya, Krish, Sol, Tanvi, and Alex

        Task: Build, Code, Test, and Film our Center Stage Ri2D

        This blog post will serve as a more in-depth analysis of Ri2D, including dives into specific subsystems and rationale.

        The Chassis

        In order to save time, we repurposed a basic mecanum and REV rail chassis from our sister team, Iron Giant. It is a basic REV rail frame with mecanums driven by motors and chains, along with all the requisite electronics. We built all of our additions on top of this base; however, we did spend a sizable amount of time fixing the chains on the chassis. Mecanums were the clear-cut choice because of their simplicity to use, the lack of on-field barriers that could interfere with them, and their strafing capabilities(which we unfortunately did not get working due to balance issues). One of the critical issues with this chassis was its lack of weight balance. The Control/Expansion Hub and Battery were located on the front side, preventing our Ri2D from strafing and causing the opposite side to pop up when driving.

        The Gripper

        We found that a prototype of our old UnderArm gripper from TauBot(last year’s robot) fit the pixels relatively well, which allowed us to adapt it to this competition. It features a pincer grip articulated by a single servo between 2 carbon fiber plates. There are also custom Ninjaflex squinches on the pincers to allow for better gripping. Since we wanted to implement a transfer strategy, we gave the gripper limited mobility, allowing it to only pick up 1-2 pixels from the ground and then lift them for transfer.

        The Scoopagon/Transfer System

        In order to limit the need for our robot to turn in order to pick up pixels and deposit them on the backdrop, we implemented a basic transfer system into our Ri2D. The primary mechanism that deposits the pixel is an arm with a pixel holder built out of tape and polycarbonate, which we call the “Scoopagon”(it scoops the pixel up and is shaped like a hexagon). The gripper flips up and drops the 1-2 pixels into the Scoopagon during the transfer. This allows us to reduce cycle time by reducing the amount of driving we have to complete; however, sometimes pixels can get stuck on the edges of the Scoopagan or get tangled with other parts of the robot.

        Scoring System

        In order to score the pixels, our Ri2D uses the Scoopagon in combination with a rotatable arm and extendable linear slide. The Scoopagon is mounted on an arm that can be rotated by a servo, creating a “catapult-like” motion. The entire servo and arm assembly is then placed on a linear slide that can extend out to allow us to place pixels higher on the backdrop and from farther away. One potential issue with our implementation is that the arm may accidentally propel pixels, which is not allowed by the rules, so the arm must be close enough to ensure the pixels are placed onto the backboard.

        Expansion Ideas and Limitations

        Because of time constraints and the extended field assembly time, we could not attempt the drone and hanging aspects of the game. However, we found a hanging mechanism used by previous year’s robots(pictured below) that relies on tape measures. Due to the massive amount of weight imbalance, we were unable to attach it to our robot, but we hope to be able to test it out on future robots. As for limitations, the robot itself was very tough to drive due to the weight imbalance and general lack of driver practice, and the linear slide was poorly built and ended up being quite unreliable.

        Overall, though, Ri2D served as a valuable learning opportunity for us, and we will be using everything we have learned over the past 2 days as we move forward into the season.

        League Meet 1 Post-Mortem

        21 Nov 2023
        League Meet 1 Post-Mortem By Aarav, Krish, Jai, Sol, Tanvi, Alex, Vance, Georgia, and Anuhya

        Task: Analyze our performance at our 1st League Meet

        After Meet 1, Iron Reign met to discuss their performance as a team and make plans for the next month in preparation for Meet 2. Here are our takeaways and analysis, divided into strengths, weaknesses, threats, and opportunities.

        Strengths:

        • Our drive team communicated quite well, and we could score pixels very well and turn those points into match wins.
        • A better auton performance than we expected. We only coded it for the middle region, but it consistently scored that. However, we were lucky with the region selection during this meet. Adding code for the two side zones is near the top of our to-do list right now.
        • No hang-ups on the stage door while crossing the playing field. Our strategy this year involves building a robot shorter than the stage door so that we can freely transit across the center rigging, and during this meet, our robot was quite successful at that task.

        Weaknesses:

        • A mediocre gameplay robot that does not stand out innovation-wise. Generally speaking, this year's robot will not be super innovative compared to the previous year's robot. This means that we need to put effort into improving the gameplay capabilities of the robot to stand out.
        • The outtake got stuck and missed the pickup location. Because of the tight spacing near the transfer point, our outtake would get stuck on wires and bungees around there and not reach all the way down, leading to failed transfers.
        • Wire management limited our usage of the outtake. Often, when we extended the outtake, the wire connecting the servo at the end would get caught on the chassis and unplug, rendering us unable to score. We need to cable manage the entire robot and test to ensure nothing gets caught when the robot moves.
        • Intake catching on tape/tiles. When we were picking up the robot on the wings, the front edge of the beater bar would get caught in the tape and not pick up the pixels. That is something we will have to experiment with and fix.
        • Erratic movement and a lack of control sometimes led to us hitting the backdrop and descoring pixels. A better understanding of our scoring positions and outtake positions should help us avoid this.

        Threats:

        • Lack of organization. So far during the season, we have not communicated well between subteams and as a team in general. We must ensure everyone is on the same page and up-to-date on what is happening, especially across subteams.
        • Careless placement of expensive parts. We often misplace motors and servos, and these costs increase over time. This ties into being more organized, both in our workspace and as a team.
        • Only working on the robot at the Robodojo(not emphasizing design and portfolio). Editorial work, CAD, and code(to an extent) can be done off-site, and our ability to stay on schedule relies on us putting time outside our formal meetings.
        • We have not thought about what we want our portfolio to look like or put much effort into our documentation efforts.
        • We simply have not put much effort into finding and getting donations/sponsorships. We must focus on that to continue the program's sustainability and fund the parts we need for the new robot.

        Opportunities and Next Steps:

        • Seeking out mentorship and connect opportunities. Building relationships for the long-term. For example, we could have more meetings with DPRG.
        • A new chassis for the next robot version with a potential 3-wheel drive.
        • We have yet to tackle the lift or drone aspect. Getting designs underway for those and testing them on the robot to increase our point-scoring capability.
        • We could experiment with a shortened linear slide and Scoopagon to solve some of our problems with a reliable transfer system. Also, adding a way for the robot to detect the backdrop for depositing pixels should allow us to automate the process and reduce our chance of descoring pixels.
        • Expanding auton to all 3 regions and adding the yellow pixel
        • Blending innovation and gameplay strength for future competitions
        • More driver practice, which is something we have neglected in past seasons.

        Explaining Drone Launcher V1

        23 Nov 2023
        Explaining Drone Launcher V1 By Tanvi and Aarav

        Task: Explain how we arrived at our current drone launcher design

        The first iteration of the drone launcher is a simple servo-powered elastic launcher that is controlled like a switch. A linear slide has a servo mounted to the back end and a V-shaped nylon airplane holder is attached to surgical tubing which is attached to a zip tie held by the servo. The system is set on a linear slide, resulting in easy change of the amount of power being transferred to the plane. We opted for a compact drone design so it can easily be held by our airplane holder, which allows for a more consistent launch by reducing impact of draft. Hopefully, our final plane design will have very few open folds, resulting in minimal aerodynamic drag.

        The Design Process

        Our first step for creating the plane design was to look at multiple videos on YouTube explaining paper airplane design, in the hopes of getting some inspiration. Our initial thoughts for the trajectory of the airplane was that we wanted it to shoot out to the side, and basically make a U-turn so that it lands parallel to the lines of the landing zones. This way we would lower the chance of the plane flying past the scoring zones. However, as we looked more and more into the physics behind how airplanes work, we realized it wasn’t feasible. Our current plane design was achieved mostly through trial, error and research about lift, drag and thrust.

        First, we figured we wanted our launcher to be spring-controlled. Our initial thoughts for the design were to use a holder and a spring that would be stretched and released to launch the plane, but springs are better at launching objects over a short distance and we wanted the plane to be pushed down a longer runway to reduce errors during launching. Next, we turned our attention to rubber bands as a launching medium. This would eventually lead to us using surgical tubing as our mode of tensioning.

        Another initial design was a trebuchet-esque design, pictured below. This consisted of a base plate with a beam on a pivot. The beam would be controlled by servo and tension would be applied through surgical tubing. There would be adjustable axles at the stopping points. Additionally a “sling” would have to be constructed to cradle the airplane. Challenges with this design regarding how to keep the plane in an aerodynamic position and mounting.

        Strategy

        Our goal for the launcher was to be as straightforward as possible. During the endgame, the drone has to be launched from behind the truss to one of the three distinct launch areas. The launch area closest to the field is the area with the most points allotted. Due to this complication, the drone cannot be launched as far as possible. It must stay within a set distance. As a result of the adaptable design, the mechanism can be coded with a simple on-off type code and can be adjusted mechanically by hand (in tiny adjustments).

        Next Steps

        Over the course of the season, we expect to keep experimenting with models and shifting them to find the best one for us. Eventually, we hope to have a fully 3D-printed design. As our robot goes through iterations, so will the launcher!

        League Meet 2 Post-Mortem

        11 Dec 2023
        League Meet 2 Post-Mortem By Aarav, Krish, Jai, Sol, Tanvi, Alex, Vance, Georgia, and Anuhya

        Task: Analyze our performance at our 2nd League Meet

        After our performance at Meet 2, Iron Reign sat down as a team and discussed what happened. Here’s an overview of our takeaways and next steps as a team, divided into our strengths, weaknesses, potential threats, and opportunities/next steps.

        Strengths:

        • Our autonomous scored the purple pixel consistently when set up correctly. This significantly helped us with the tiebreaker and is a significant reason for our high ranking.
        • When it worked, the field-oriented drive was quite helpful and simplified things for the drivers.
        • When the robot functioned in tele-op, we could consistently and accurately cycle pixels to the backdrop.

        Weaknesses:

        • The transition to Teleop was unreliable because of a code bug we could not fix during the meet. Late code changes near our queue-up period meant we could not properly test them, and because of this, we sat still in Teleop for the last 3 matches.
        • Over the week of the meet, we burned through about 3-4 servos for the intake lift. We kept shattering their gearboxes through hazardous driving and not correctly setting up the robot. This isn’t sustainable, and we currently don’t have the budget to replace servos as they get destroyed.
        • Our init cycle at the beginning was too long and held up a couple of our matches, and we needed to remain aware and properly reset our robot each time.
        • Sizing remains a problem, mainly because we have little room for error. Even when our lift was slightly out, we failed to size and held up a match because of it. We need to focus more on sizing in the next iteration of the robot instead of being an afterthought until the night before a meet.
        • When we traveled under the door, the Scoopagon ran the risk of getting caught under the door if it was not entirely down. A way to combat this would be to create a travel position for the Scoopagon that can be toggled when moving under the stage door.
        • Wire management and the packaging of the robot are also issues with the current robot. The Scoopagon will often get stuck on the surgical tubing holding up the intake, the lift will de-spool, or wires will get caught on the chassis and unplug our servos. Issues like these end our matches, but we can fix this with a robot that is designed and visualized first.
        • Finally, in general, we have been behind as a team, especially on CAD for the next version of the robot, and that means more people getting involved to support our design efforts so that we can have the next version of the robot by Meet 3.

        Threats:

        • Our slow progress on V2 of the robot due to a lack of design participation.
        • There are fewer connection opportunities than in years before at this time.
        • A lack of funding, especially with the need to build an entirely new robot and deal with broken servos.
        • Becoming complacent with documentation and completing the portfolio at the very last minute.
        • Not expanding our industry connections and using them to get advice on our robot design.

        Opportunities and Next Steps:

        • We were able to get the hanging mechanism functioning the week before the meet, but we could not get it working at the meet. Specifically, it needs more angled support bars, and the motor placement needs to be redone, as they keep messing up pixel transfer. However, it did serve as a proof-of-concept, and we can adapt the same concept to the lift for the next version of our robot.
        • We could also experiment with a kinetic lift that uses the momentum of the robot instead of motors.
        • Similarly, we had a drone launcher that could score points the week of the meet, but when we attached it to the lift mechanism, it conflicted with the outtake and was too heavy. However, the concept is a strong starting point for incorporating a drone launcher into the next version of the robot.
        • The Scoopagon hinge currently wiggles and is not stable, so we need to replace it with a stronger material, such as carbon fiber.
        • A second hinge to allow the outtake to tuck away in a position that doesn’t interfere with as many components.
        • A new custom-designed chassis that is not built on rev rails and is lighter/faster will decrease our cycle times. It will also be designed with the complete robot in mind, helping deal with some of the packaging issues we have been facing.
        • A swerve drive is an idea that we could implement later in the season for maneuverability.
        • Adding the yellow pixel drop-off to our current autonomous routine
        • Automating driver paths and the intake/outtake articulations to reduce errors caused by the driver
        • Earlier and more consistent driver practice. This is important with a more straightforward game that requires robot performance.

        UPDATE: We did find out what the code bug was that messed up a couple of our matches. It was an error in the transition between the autonomous state and the tele-op state.

        League Meet 3 Post-Mortem

        22 Jan 2024
        League Meet 3 Post-Mortem By Aarav, Krish, Jai, Sol, Tanvi, Alex, Vance, Georgia, and Anuhya

        Task: Analyze our performance at our 3rd League Meet

        After our performance at Meet 3, Iron Reign sat down as a team and discussed what happened. Here’s an overview of our takeaways and next steps as a team, divided into our strengths, weaknesses, opportunities, and potential threats.

        Strengths:

        • Pretty consistent robot performance as we went 5-1 and were able to score points in all 3 games stages
        • Improved mosaic scoring
        • More accurate when scoring pixels on the backdrop and when dropping pixels off during auton
        • Good time management. Less last-minute code changes or queue delays

        Weaknesses:

        • Goofy, careless mistakes
          • Not loading drone for launch
          • Not setting up skyhooks
          • Not having a writtenm checklist to go over before match starts
          • Robot spinning around in auton
        • Occassional mishap when placing pixels on the Backdrop
        • Unreliable drone launcher. Only cleared the game walls once

        Threats:

        • Not having PPE V3 built or coded in time
        • Less innovative design compared to older iron Reign robots
        • Giving up on R2V2 and Mechavator videos
        • Slacking and not getting portfolio done on time/rushing it the week before Tournament

        Opportunities:

        • Cleaning up our minor mistakes(ex. Pre-Match Checklist)
        • Portfolio and Presentation
        • Connect Meetings for Feedback
        • Motivate Opporunities

        U^2 Tournament Post-Mortem

        05 Feb 2024
        U^2 Tournament Post-Mortem By Aarav, Krish, Jai, Sol, Tanvi, Alex, Vance, Georgia, and Anuhya

        Task: Analyze our performance at the U^2 Tournament

        After we advanced to Regionals by winning Inspire 2, we sat down as a team and discussed our performance as a team. Although we advanced, we are not as far as we want, with PPE V3 not built. If we want to advance to State, we need to show up to Regionals with a fully-built V3 that hopefully works. With that being said, here’s an overview of our takeaways as a team, divided into our strengths, weaknesses, opportunities, and potential threats.

        Strengths:

        • Transfer between outtake and intake worked efficiently
        • Strong pit interviews. Were able to engage the judges and cover our main points. Can still be improved
        • Virtually no coding during the meet, which is a welcome change
        • Implemented a driver checklist by the end, which should help us in the future
        • Skyhooks displayed a surpising amount of reliability

        Weaknesses:

        • Dislodging of drone when we hit obstacles
        • Difference in skyhook tensions (ex. Types of rubber bands) (get blue rubber bands!)
        • Rushed portfolio(completed mainly during the week before)
        • Lack of communication in presentations and a lack of practice
        • Talking too fast in the presentation
        • New team props did not have prior testing with the robot
        • Subpar and inconsistent auton by our standards
        • Starting auton/teleop multiple times, messing up field position and driver controls

        Opportunities:

        • New redesigned robot(PPE V3)
        • More Fundraising/Connect/Outreach
        • New organizational system in Clickup
        • More driver practice
        • Banners/Posters/Booth
        • Less content in presentations so we can talk slower
        • Distributed speaking topics
        • More presentation prep(specifically for questions)

        Threats:

        • Falling behind on blog
        • Time management
        • Auton
        • Not finishing PPE V3 in time

        Next Steps

        Get to work cutting and assembling PPE V3 and working through any design flaws. Start working on aotnomous teleop navigation in code and adapting to the new chassis. Documentation wise, we need to update both the portfolio and presentation, and work on connecting with local engineering professionals.

        Lessons We’ve Learned Switching from CAD to a Physical Model

        27 Feb 2024
        Lessons We’ve Learned Switching from CAD to a Physical Model By Anuhya, Sol, Krish, and Fernando

        Task: Overview the issues with PPE V3 and the changes that need to be made.

        This past weekend, we had our regional competition! We were incredibly fortunate to have gotten Inspire 3 and were the 5th advancements to the FTC Texas State Championship in a couple weeks! However, we went into Regionals with a robot we had barely finished building due to an incredibly long design season, and we had barely any robot game, except for our Skyhooks. There were also a lot of challenges that came up as we built our robot from machined parts. Here are some of the problems we noticed and steps we are going to take to fix them.

        Intake (Pixinerator):

        • The new robot is way too wide, the two main causes are 1. Intake width and 2. Electronic plate wiring(where the control & expansion hub are mounted)
        • Solutions:
          1. We can narrow the intake because the current size is completely random (<3 pixels, >4 pixels) and it probably won’t have the worst repercussions
          2. Drivers may decide that the width isn’t an issue because of the new corner deflectors and we can continue using this iteration of the chassis
        • Pixinerator is intaking unevenly (thinner carbon fiber plate isn’t as rigid as the 2 mm aluminum plate we were using initially, the side without servo power isn’t being pushed into the mat with enough force)
          • Routing cables also needs to be improved, not enough space for a second servo because of how things were routed
          • Solution: Use two intake servos as opposed to one so both sides of the Pixinerator will receive servo power

        Outtake (Ralph):

        • Ralph is getting caught on the surgical tubing used to assist Pixinerator
        • Solutions:
          1. Possibly move the surgical tubing to the inside of the nacelle (side wise) and attach to back plate
          2. Create new attachment point for longer bolts which attach further back on the Pixinerator side plates so it doesn’t interact with the inside of the nacelles
        • Many issues occurred with Crook moving while we were trying to outtake pixels(electrical problem, bad connection between the Crook servo) → we generally have wiring problems/power injection problems, need to be sorted out
        • Hinges and Clamps (Joints)
          • The carbon fiber tube clamps allow sideways movement → too much wiggle (cf tubes are not held square towards robot)
          • Pillow blocks and how they accepted bearings also had a lot of wiggle
          • Solutions:
            1. Switch over to using bearing blocks as opposed to bearings
            2. Possibly moving the REV bearings to the inside of the pillow blocks to lock them in place
          • Nothing is retaining the axle on far side of pillow blocks (axles twisted and slid)
            • Solution: Switch to using locking hubs

        Chassis:

        • Support for cable management/cable runs was not properly considered by design team because of a time crunch
          • Hand-held drilling may be our only option
        • LEDs
          • Back camera LEDs need a place to mount to as well as wiring and battery solutions
        • Battery Compartment
          • Current battery compartment “door” doesn’t open fully because the back plate doesn’t have enough clearance
          • The hinge for the battery compartment is incorporated within a structural element which results in a very weak design
          • Solution: Redesign battery compartment door so it can open fully and is stronger

        Dock:

        • Dock flaps were interacting with Pixinerator when it is completely vertical
        • The forward boundary for Ralph wasn’t effective in real life even though it looked like it was in CAD. It also doesn’ seem necessary because Ralph can bottom out by itself
          • Parallel alignment with Pixinerator can be done w just pins instead of forward wall
          • Either it retains pixels or the pixels will slide out of robot by way of dock so we won’t get penalized
        • Passive dock roof doesn’t seem feasible → just too many problems :(
          • Solution: Possibly attach dock roof to inward facing inner nacelle walls, operated by micro/mini servos
          • Test high speed intake to see what kind of hand-held roof placement prevents pixel ricochet
        • Bridge needs to be 8-10 mm lower because Scoopagon doesn’t get low enough to intake from pixel stacks
          • Solution: pacers can be printed which go between the L beams that connect the bridge and the inner nacelle walls
        • Camera was too high: it could not see when scoopagon was up and could not interact when scoopagon came down
          • Solution: We need to redesign a front camera mount and possibly illuminate it

        Drone Launch:

        • Drone clamp is too weak, doesn’t stop the drone from being knocked off the robot by rigging or interaction with anoth
        • Solution: Drone clamp should cover at least half of the drone, or double as a hangar for the drone - cover it completely
          • Physical prototype and test first

        Skyhooks:

        • Still having rubber band/tensioning issues but that’s more of a set-up thing, doesn’t necessarily need a design change
        • Had to abandon the concept of the limit switches to detect when they're fully up due to having to manually drill holes to increase clearance of Skyhooks with Pixinerator side plates
        • Mount the IMU

        Contact Us

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