This is a true story. It is a story about facing adversity. A story where I learn a valuable lesson. I tell this story every now and then among robot friends. I talk. They laugh. I die a little bit more inside.
This story really starts with the creation of the FRC kitbot and ends with the story of one team’s 2005 season… Gather round my friends as I tell you a tale. This is a true story.
The Pre-Kitbot Kit Drivetrain
Long before the VEXpro “COTS revolution” in the early 2000’s FIRST decided the Kit of Parts should include components to build a drivetrain. I’ve heard, this was a difficult decision for them to make. There were concerns that this would take away from the experience of the teams. Many of the thought-leaders loved the “Apollo 13” model for the kit of parts. They wanted teams to need to build something out of miscellaneous parts. In the earliest days of FIRST, the robot rules were very strict. The kit was incredibly important since so few other parts were legal. The folks advocating for the “Apollo 13” kit decried the “BBQ Grill Kit” philosophy, likening any sort of buildable drivetrain to the step-by-step construction of a propane powered appliance. (Perhaps the “Ikea Philosophy” would have been a better name?)
I won’t get into the specific for/against arguments in this debate, but I will say three things:
I’m sympathetic to the subtleties involved in making this type of decision. It is hard to judge the effect of changes like this on the underlying impact of the program. I would never begrudge hesitation and careful thought.
I am grateful to have even be a fly on the wall for many of these discussions, let alone participate in some small way.
I personally believe strongly in the “all ships rise on the rising tide” model, and as such advocate to provide every advantage to teams. Never hold down the top end… raise the floor.
In 2003 and 2004, there was a drivetrain in the kit of parts. I don’t think it is unfair to say it was terrible. If you used it - you probably weren’t going to be successful.
Back in the old days people talked about the “circle bots” where robots would lose 1 side of their drivetrain, and be stuck driving in arcs for the rest of the match. This was not uncommon. Even back when there were only 4 robots in a match.. I’m sure someone like Mark McLeod or Jim Zondag has exact data on it. I have no data, but will estimate it happened once every two or three matches.
An Intern’s Impact
In the summer of 2004 I was an intern at Innovation First International. Early in my time, I was asked to review something relating to “cost optimization” in the kit of parts. I did a report for my management about how there was a lot of “junk” in the kit related to the drivetrain and we could probably do a cost effective and functionally superior solution.
Apparently my writeup caught someone’s attention because I was named onto a newly formed “drivetrain committee” with Woodie Flowers, Paul Copioli (in his pre-IFI days), Bob Mimlitch (IFI co-founder, and my boss at the time) and some intimidating folks from FIRST.
I won’t lie… I was totally freaking out about this.
“I’m on a committee with Woodie. No big deal. This is totally normal… be cool… be cool… be cool.”
I have many stories from this process, but those are for another time. If you ever catch me hydrating: ask me about the time Woodie chastised me out on a conference call for being a cocky punk (my words, not his).
The result of our committee’s work? the 2005 Kitbot Chassis and Gearbox!
I felt triumphant. The kitbot was unveiled during kickoff and every team received one. My summer of work was finally out in the wild. After that, I had a great senior year at Clarkson, and a great 2005 FIRST season on FRC229. Our team used the 2005 Kitbot as the chassis for the 2005-FRC229 Robot: Denominator.
That year a few of my friends and I went on a spring break trip together (somewhere tropical), and because we can never get enough robots, ended up popping into a local regional. While there a local friend of mine, asked me and my roommate (Eric O’Brien, of FRC177 fame) to help out with something…
Spring Break 2005! The Call to Action.
JVN’s Friend: “John you lazy bum… unless you’re overly preoccupied with doing nothing-at-all, do you think you have time to help a team out? I’ve been watching these guys struggle all weekend. There is something very wrong. Go talk to them.”
What seems to be the problem?
It turns out, this team was having lots of trouble driving. In fact, they hadn’t moved in a single match. I will present the dialog as well as I can, given the fact that almost 14-years have elapsed since then. I will remind you, this is a true story, not a dramatization.
Lead Student: “When we try to drive, the robot kind lurches a little bit - then dies. Eventually it will come back to life, but then the whole thing happens again…”
JVN: “Sounds like you’re popping breakers.” <I try to spin a drive wheel with my hand> “This isn’t spinning at all. What gearing do you have?”
Lead Student: “Oh, we didn’t want to be pushed around so we used a worm-gearbox so no one can move us.”
JVN: “I mean… that’s not how that really works… but… never mind. Can you fire it up here in the pit? Let’s see if we can figure out what’s going on.”
Lead Student: “No problem… we just need to get our programmer back from lunch.”
JVN: “We don’t need new code… we just need to run it. Run it like it’s in a match.”
Lead Student: “Oh, we can’t run it. Our programmer is the only one who knows how to hook it up. We would never hook it up without him.”
JVN: <Looks around confused>
All the Students: <Nodding and shrugging as if to say “what’re ya gonna do, right?”>
Lead Student: “Hey, our programmer is back!”
JVN: “Great! Let’s fire this robot up!”
Programmer: “We can’t run it for you right now. I need to change our autonomous code before our next match.”
JVN: “But… your robot hasn’t been able to drive in any matches so far, right?”
Lead Student: “Right, it hasn’t moved.”
Programmer: “It hasn’t moved… SO FAR. BUT, I just made a code change, which will fix it. Now that everything is going to work, I need to update the autonomous like our partner asked!”
JVN: “If you think you’ve fixed it… can we test it? It’s hard to know for sure if you fixed the problem if we don't confirm it.”
Programmer: “There’s no time! I need to update the auton, then we’re going straight to the match.”
Lead Student: “Sounds like we don’t need your help, anymore!”
Can you imagine how this played out?
What do you think happened in that 2-minute match?
Did you guess: “Robot did not move in the match” because if you did - you’re correct!
JVN: “I saw what happened in that last match, it definitely looks like a breaker problem. I really think we need to test it in the pit and try to isolate the problem? Can we put it up on blocks.”
Programmer: “No, no… I think I can change the code, and make it work. Let me fix it there.”
Lead Student: <Glancing at me hesitantly> “Maybe this guy is right. Let’s let him try to help…
JVN’s Internal Monologue: “Yay!”
Lead Student: “Ohhh! I almost forgot. We don’t have any charged batteries! We used our last one in that match.”
JVN’s Internal Monologue: “Sigh.”
JVN: “How many batteries DO you have?”
Lead Student: “Just the two from the kit. We can’t afford any more.”
JVN: “Okay. Are you friends with any teams here? Can you borrow some?”
Lead Student: “No, our teacher says working with other teams is cheating.”
JVN: “Well I have some friends here who will do me a favor - let me go get you some batteries.”
The Pit Test
<After we go scrounge up some batteries, and we get the robot up on blocks.>
JVN: “Fire her up!”
<The wheels spin fine, fast but smoothly and controllably.>
JVN: “Hmm, okay. Looks fine. Take it off the blocks and let’s see how it moves here on the floor.”
Lead Student: “That’s not safe. We shouldn’t do that.”
<After 15 minute safety interlude>
JVN: “Fire her up!”
<Robot does the same thing in the pit that it does on the field.>
Let me fast-forward through some of the troubleshooting process.
-We checked each individual motor with the robot “on blocks” making sure they all worked (and were spinning in the same direction).
-We verified each motor controller was being commanded to go “full power” when it was supposed to be.
-We checked the electrical connections to make sure there were no significant voltage drops.
-We put the robot on the ground and confirmed that running only 1-side of the drive had the same problem.
JVN: “Well… You’re definitely tripping the motor circuit breakers.”
JVN: “Where did you get these worm-gear boxes? You said you chose them because you don’t want to be pushed around. What gear reduction do they have?”
Lead Student: “We bought them from some gear company…I don’t remember the name.”
JVN: (seeing Boston Gear logo) “Looks like they’re from Boston Gear. Do you happen to know the Part Number or the gear reduction?”
Lead Student: “Uhhh…”
Eventually we managed to figure out the gear reduction.
It was… very, very low. VERY low.
Face-palm inspiringly looooooooow.
JVN: “Your robot is geared at like 100 miles per hour!”
Lead Student: “Why is that bad? We want to be able to score fast!”
JVN: “It’s very bad. Your drivetrain has no torque, and can’t accelerate! It’s struggling to get moving, and it draws so much current it pops the motor breakers.”
At this point… I had to spend a little while explaining that this was actually true, and convincing the team that this was a serious problem. There were several of them who remained convinced it was a code problem.
Lead Student: “Okay, so how do we fix it?”
JVN: “Easiest way, is increase the amount of gear reduction in your drivetrain. Now, we can’t change the gearing in your gearbox, but we can change the chain reduction!
Lead Student: “How do we do that?”
JVN: “Can we swap the sprockets on the output shaft of your gearbox? If we put some smaller size sprockets on there, we can make the robot slower and torquier.”
Lead Student: “Where are we going to get new sprockets? THESE are the only sprockets we have!!!”
JVN: “We can probably borrow some sprockets, what size output shaft do you have on there?”
Lead Student: “It doesn’t matter, because you can’t take the sprockets off our gearbox.”
JVN: “I thought we talked about this! We need to slow thing thing down.”
Lead Student: “No, I mean… you literally can’t take the sprockets off. They’re welded onto the shaft.”
JVN: “…” <As I slowly bend down to look closer at the gearbox>
Lead Student: “We had problems with our sprockets falling off last year, so we fixed the problem. We’re always trying to improve.”
JVN: “That’s a good mentality, but this really… limits our options.”
Lead Student: “We’ve got a really good freshman welder.”
I’m pretty sure I then spent the next few minutes rubbing my temples and muttering to myself.
JVN: “How about this: we’ll swap the whole gearbox! Yes… of course. Swap the whoooooole gearbox.”
At this point I noticed the grim look on my young colleague’s face as he slowly shook his head and glanced towards the gearbox.
Bending down I saw it, just before he said it…
Lead Student: “We… welded the gearbox also. We welded it onto our frame…Right onto the frame.”
Programmer: “It’s time to go to our next match! Is it fixed yet?”
Lost in Thought
They welded… cast iron, onto aluminum? How do you even do that? I'm not an expert in metallurgy, but that isn’t a thing, right?
Turns out… if you melt enough metal, and those puddles of metal interlock enough, you can in fact link these materials together.
Picture a jigsaw puzzle. Two puzzle pieces linked together: where one piece is a hardened puddle of melted aluminum and the other piece is a a pile of JVN’s broken dreams. Are you picturing it? Can you see my broken dreams in your head?
At this point as I pondered how I was even in this mess, I turned to other friends at the event, desperate for ideas. Any ideas. Ideas which would free me from this problem. I’d become emotionally invested. I found myself caring about this team and becoming stressed out that they might not get picked.
Failure was definitely an option.
By now, the team had gone out to another match, and again: had not moved.
Then, to rub salt in the wound, my friend (who originally got me in this) cornered me.
JVN’s Friend: “What’s going on? I thought you were going to help this team out? They only have one more match, are they going to be able to move or not?!?”
My best plan at this point? Pull my hat down low over my eyes, walk out of the venue and potentially leave FIRST forever to spare myself the humiliation of this retreat.
The better plan? (F = m*a)
As I recall my college roommate Eric came up with a slightly better solution than us quitting FRC.
Eric: “I mean, if we can’t change the gearing, and the robot is having trouble accelerating…
F = m*a. Can we reduce the robot weight enough so it will be able to accelerate?”
Admitting You Have a Problem is the Hardest Part
At this point, we had to break the news to our new friends.
JVN: “We really think… the best option is to reduce the weight of your robot to the point where it can drive. The bad news is that it’s not going to be able to do very much after that.”
Lead Student: ”If that’s the bad news, is there good news?”
JVN: “The good news? It’s not going to be able to do very much, but it will do it VEEEERY fast.”
Lead Student: “This is the best idea you have?
Lead Student: “We’ve got one match left. Let’s start by taking the arm off.”
Programmer: “You can’t take our arm off! We need that for autonomous!”
(Side note: The arm was not going to do anything… in autonomous OR otherwise.)
At this point, the lead student and most of teammates understood the nature of the problem. I can still picture the fire in their eyes as they stared silently at the programmer… His defiance slowly fading. This awkward tension finally breaking as the lead student turned back to me.
Lead Student: “Can we keep ANY part of the arm on there?”
JVN: “Not only do you need to take the arm off, but we need to take the tower off… and as much of the drivetrain as we can.. and need to drill holes in anything which can be drilled into. We need to take as much weight off of this robot as is humanly possible in the next 45 minutes.”
Lead Student: “Is there anyway you can make the robot score? We’d like to score some points in our last match.”
I turned helplessly to Eric, and he only shrugged at me.
JVN: “Well… if guess if we leave some of the frame on the top of the robot. You can drive over to the loading station, have the human player manually load a tetra… and then… and then if you ram the robot into the pyramid it will dump the tetra into the low goal.
Lead Student: “You want us to… ram into the goal to dump the tetras? That can work. Sure.”
Out came the drills. Out came the sawzall. Out came the angle grinder.
The students seemed to have a lot of fun doing the weight reduction.
I don’t know if this was because they were feeling hopeful.
Maybe it was because they were enjoying taking some action to fix the problem…
…Or because they were so effing done with this robot they wanted to inflict some pain on it.
Once completed, the team sent it out to the field for the moment of truth.
As the robot took the field my friend (who started this whole debacle) found me in the crowd and from across the field we made eye-contact. The look on his face told me everything I needed to know: “I asked you to help this team… and instead you ripped their robot apart. What the heck is this thing you’ve sent to the field?”
The look on my face also probably told a story: “Look man… I did what I could, and I really don’t want to hear one effing word from you about it. You have NO idea the stuff I’ve seen.”
The game announcer (understanding what was happening), of course made a big deal about it. I held my breath.
Auton started. The robot didn’t move. I held my breath.
“And we’re starting driver control in 3… 2… 1…” and I held my breath.
The driver stepped to the controls. He gingerly nudged the joystick forward and…
THE ROBOT MOVED
It was erratic.
It was almost uncontrollable.
BUT. IT. MOVED.
The entire team went nuts.
I cannot begin to describe their reaction to this moment.
Then, something magical and unexpected happened. Something which stirred the hearts of even the grumpiest people in the crowd: the robot started moving towards the loading station. The team’s human player was ready, nervously gripping a tetra, the first tetra he would ever load. We had gone through the routine, so he knew what to do.
The robot limped towards the loading station.
It wasn’t driving straight, instead driving in arcs, BUT the arcs were drawing closer and closer… and closer to the pad. I held my breath.
When the robot’s wheels finally touched the pad, another raucous cheer went up from the team. By this point, their cheering was joined by the rest of the audience; the entire arena united by the sheer absurdity of this triumph.
The human player exploded from his staging pad with a tetra held in his sweaty grasp, the robot automatically disabling as he left position. I held my breath, and turned towards the clock. 45 seconds left… 44… 43.
I don’t know why I even worried… The kid nailed it.
Put the tetra right where it was supposed to go, and headed quickly back to his station with no issues. As the robot came back to life I continued to hold my breath - would it be able to limp over to the goal? Would the tetra dislodge from its position? Would it fall into the goal?
Would this team score some points?
As I held my breath, the driver touched the joystick and with the 8.5 lb tetra perched on top, the robot started moving forward… or at least it tried to.
Really… it just kind of shuddered, and died.
If I had to guess, I’d say the motor breakers tripped.
Each tetra weighs 8.5 lbs… a few too many for this particular drivetrain…
I don’t know what happened next because I walked out of the arena and back to the pits.
I must remind you one last time: This is a true story.
The best writers in Hollywood could never have scripted this.
After the elimination rounds of the event were completed, the Lead Student came to find me. He brought me back to the pits and gave me one of their stickers (he wanted toggle me a t-shirt, but they didn’t have team shirts). He thanked me for all my help, saying “even if it didn’t work out, it was still a great experience.”
As I was about to walk away, I noticed something I hadn’t seen before.
I saw the team’s robot cart. The robot cart… made from my beloved 2005 kitbot chassis in all it’s custom sheet-metal glory. The kitbot represented my personal contribution to stopping problems like this from plaguing any team. The kitbot was an attempt by a group of incredible people to provide a baseline option for ALL teams. To raise the floor.
A kitbot, as a robot cart.
I couldn’t help myself. I had to ask. If I hadn’t asked, to this day I’d still be wondering.
JVN: “I can’t help but notice you guys have the kitbot chassis built up, and you’re using it as your robot cart. Do you mind telling me…
…why didn’t you guys use the kitbot for your robot?”
The student seemed confused by the question.
He followed my eyes towards the ground.
Lead Student: “Ohhh, that. We can’t use that.”
JVN: “Why… why not?”
Lead Student: “That shit is weak.”
I will NEVER get that out of my head. “That shit is weak.”
When FRC veterans and design experts talk to teams, when someone asks “what is the most important tip you can give?” Most would say the same thing. The Simbots made it one of their Golden Rules. The Robowranglers use it as a cornerstone of our design process.
“Build Within Your Limits"
On 148 we talk about “Optimizing Limits vs. Wants”.
I’m 148% confident that if someone told the team in this story “Build within your limits” they would have thought: “That doesn’t apply to us. That weak shit is for other teams.”
So that’s the morale. If someone cautions you to build within your limits, and you find yourself thinking “that’s good advice for teams worse than ours” maybe you should ask yourself: