6299 QuadX: Relic Recovery
What is FIRST?
“The mission of FIRST is to inspire young people to be science and technology leaders and innovators, by engaging them in exciting mentor-based programs that build science, engineering, and technology skills, that inspire innovation, and that foster well-rounded life capabilities including self-confidence, communication, and leadership.” This is executed through leagues that host competitions, where robots compete to score points based on a given objective.
What is Relic Recovery?
The objective for Relic Recovery can be found here: FIRST Relic Recovery by Qualcomm.
During this season, I created:
- Autonomous Code (Vuforia, Camera, Pathing, Objectives)
- TeleOp Controls (Implementing Driver Requests and Improving Performance)
- Software Portfolio
- Improvement Data
- Scouting Data Sheet
In the after-season, I created a Gyro-Assisted Tele-Op for a Mecanum Wheel Drive-Train:
The outcome of the season can be found here.
I was quitting the band and my mom didn’t want me to be a lowlife. I submitted an application for my school’s Robotics Organization and got accepted. Prior to the selection process, there is a meeting that explains information about what FIRST is and the cost of the season. That meeting was filled with parents. That’s where this all starts.
It’s possible that one of those people end up reading this article and proceed to “do something” about it. That could be contacting me directly or a teacher or whatever. Don’t do that. Everything I talk about going forward is (100 - Psychopathy Chance)% the parents’ fault. Raise your kids correctly and we don’t run into any of the “issues” you created in this article. In addition, external readers must keep in mind that people change, but I can’t confirm or deny that they did; only what happened.
I was drafted to 6209 QuadX. This team consisted of the following members: Rebecca Bates (Project-Manager), Chandler Pryor (Assistant Project-Manager), Ryan Hollaway (Hardware Lead), Cameron Ferweda (Hardware), Alex Tan (Software Lead), Devan Patel (Software), Mia Thompson (Marketing), Tanvi Siruvuri (Marketing), Kiyan Bhalla (Hardware to Marketing), and Me (Software). There are four important contexts for this season.
First, we lost our Marketing Lead (ML) before the season even started. ML asked not to be on the team — due to the final context — IF she was picked in a certain way. Rebecca picked her in that way anyways… Another issue occurred regarding leaked information, which ended in Rebecca telling the organization that ML disrespected her authority. This resulted in ML being blamed by the organization for something (?) and being forced to apologize to Rebecca. In this apology, ML voiced her concerns about the way Rebecca was leading the team, which prompted Rebecca to tell the organization that the ML disrespected her AGAIN. The organization was obligated to support Rebecca, so ML was placed on probation with a contract that stated that “everything was her [ML’s] fault”. ML was a person who definitely was NOT going to let someone walk over them. She quit.
The second context is explained by the following message (to the group chat) from our first-time Project Manager that was actually sent by her boyfriend (Assistant Project Manager).
The message isn’t that important, but its implications are: If I’m being honest, there really isn’t an issue with dating someone you work with, as long as you are able to separate your work environment (business decisions) with your personal environment (emotional decisions). However, Rebecca didn’t do that during this season, which opened the team up to accountability issues and bias within our management.
The third context is that I’m supposed to be a software developer, while Alex Tan — featured in The Racism I Experienced In School — is the software lead. That’s right. My direct superior — at that time — is a racist, who did NOT change since I’d last seen him (in 6th grade). I was willing to overlook our history for this objective, but he wasn’t initially.
Finally, QuadX was riding on the coattails of its previous members, known for their robot’s design. As a result, Rebecca was under immense pressure to live up to her brother’s achievements, and not many people work well under pressure. This meant that we would be placing our efforts on arbitrary objectives (such as design), while relearning the ropes. The team got along fine, with the exception of a few “cultural issues”. In hindsight, it’s easy to see why we were unable to reach our goals for the season.
Keep in mind that this timeline is from my — a software developer’s — perspective. View the team chat logs for a reference of events: QuadX 2017-2018 Chat. Read the software chat logs for a reference of events by the software subteam: 6299 Software 2017 - 2018 Chat.
The Season: Start
The season started out in a less than ideal manner, in part due to Rebecca’s inexperience as a project manager. We wasted time finding an ideal meeting format, among other organizational concerns. On the software side, we maintained three members: 2 of which were rookies (Devan and I). This was problematic because Alex did NOT provide us onboarding, instead opting for us to trio-program on his laptop… This was not efficient at all.
I don’t believe that the previous software lead trained Alex to be 100% self-sufficient. Sometimes, it felt as if he was reluctant to teach us, but that reluctance could have been a lack of knowledge. Regardless, it didn’t help that Alex still held his beliefs towards me from 5 years ago. In 11th grade, I did NOT have a car and would require rides from after-school practice (while taking the bus to school). There was a day where Alex opted to drive all the Asians and White people on our team, but when I asked for a ride he denied my request because “his parents said so''. Obviously, I called him out on his shit. We had a verbal exchange and that seemed to be the end of the shenanigans. However, he would continue to talk behind my back.
My other issue with Alex was a lack of dedication: While he could spend hundreds of dollars per week on tutors and thousands on laptops, putting in the extra hours Devan and I required was not important: Our organization only allowed us to place 8 hours per week, so missing time was lethal. Especially when we — the rookies — had to drill him to push his code. Then his laptop broke… Then his new laptop broke… His class rank remained high, but at the cost of our software quality. It was no excuse considering that Devan would go on to be the Valedictorian of his grade.
For the most part though, we were making progress. After we created the initial TeleOp code together, we split up responsibilities with me working on the Vuforia Localization code necessary for autonomous. I would also add encoders for reliability and fix servo-rotation issues. There ended up being a critical issue with our Inertial Measurement Unit in the TeleOp code that wasn’t solved for weeks and I solved it. The entire software team was pulling their weight, and our issues — on the surface — had subsided. The robot remained competitive in the first league meet (Nov 4th, 2017).
Meanwhile, in one of 11 peer reviews from that meet’s peer review… “Caleb sometimes delays the team's progress by proposing outlandish suggestions, questioning existing methods, and focusing the team's attention on unimportant topics. So far, Caleb has not made any major individual contributions which are notable to the team and does not communicate well with the rest of the team. Recently, Caleb has focused his attention to a particular area of software which is crucial to the team's success. His behavior is interpreted as annoying to most other team members”.
No idea who sent this, but it wasn’t software? If only we could identify writing patterns in 2017…
The Season: Turning Point
The direction of the team changed when we needed to decide drivers permanently. We were supposed to pick drivers by having candidates benchmark themselves in a test run of the game. Instead, Chandler is given an automatic placement on the team due to experience (which makes sense). The issue was that something went wrong, causing the decision to be made between Rebecca and Chandler IN PRIVATE. It was obvious that Chandler simply chose the person he liked the most: Alex, who drove the robot in the first competition and was on the same team as Chandler in the previous year. All I’m going to say is that Alex wasn’t the best gamer on the team (and I’m NOT insinuating that was me either).
From that point forward, the team dynamics changed. Devin and I were now more responsible for providing updates to the autonomous and TeleOp code; due to the software lead requiring driver practice. This meant Devan and I would add more driver-supported features (using improvement data), while also working on the autonomous ones. In contrast, our power — with regards to the team — never changed. This was problematic since Alex never spoke up during our design meetings which had implications for the features others would request. So Alex Tan is the software lead, but who takes the blame when the software goes awry? Me.
Autonomous software is hard to create for robots. You can make everything perfect in one day based on time, but your robot will fail when the motors lose power (based on battery voltage). You can base your robot on encoder values, but these fail when your drive-train keeps slipping. You can use the best (worst) range sensors you have available to you, only to have them go from 0 to 100 when light conditions change. What ends up happening is that you get the autonomous working, and report that it’s working. Then someone comes along and modifies the robot (or it gets worn out) and all of sudden, your autonomous isn’t working.
People view hardware-features (the business-case) as permanent and software-features as ever-changing, but it’s usually the other way around. This has many implications which I may discuss in another article. More problematic was how often the Hardware Team worked past deadlines, giving the Software Team a limited amount of time to test. Here are numerous quotes from the Software Team throughout the season:
- Oct 04 2017: “We need to get the cad done today. We are so behind in hardware.”
- Oct 26 2017: “We need <important Software Objective>.” “Well, Hardware slacking.”
- Nov 27 2017: Working around hardware constraints to place a range sensor necessary for autonomous objectives.
- Dec 8 2017: Makes plan over 4 weeks for new autonomous. Unable to use the robot for 2 weeks due to hardware features.
- Dec 8 2017: Robot tilts from the balance-beam due to issues with the drive-train’s gear ratios and Hardware wants it fixed by software.
- Dec 21 2017: “Chandler said no drive train is 100% efficient, so <insert software requirement>.”
- Jan 19 2018: “At least the base still works. That’s all we need.”
- Jan 22 2018: “We could do that [double glyph auto] ez if we had a wider intake.”
- Jan 30 2018: “We got 85 point auto not them.”
- Feb 10 2018: “Is there any way we can make sure our base is 100% tomorrow (fixing screws, tensions, etc)?”
- Our last competitive match: “We had code to pick up a second glyph, but our tight intake made it too risky.” This is also related to an “outlandish” suggestion…
Don’t take it from us, but an actual hardware member on the team: “Ok first off the relic situation was mostly a delegation issue. I was doing too much at once [cause of Chandler] and it just got pushed back. It was pretty messed up from the start how things were divided, especially once I had to do the base as well.” Then there were the members not contributing to the EN fiasco… Then, there’s Kiyan.
What a shitshow.
Scapegoating takes a driving force and the person behind that force was Kiyan. In 11th grade, Kiyan and I were good friends, but he was also friends with Will. I had no problem with this, but Kiyan — being a follower — starts to be influenced. It doesn’t help that Kiyan — who is supposed to be a hardware member — finds himself filling the role of the SCRUM master instead. If AGILE doesn't work to predict deadlines in a professional setting… We started the season as equals, and his attempts to hang onto that translated to bringing me down.
When autonomous reliability was an issue, there were a few ways we could fix it, but not in practice? Everytime we proposed a solution, there was always some reason that our robot had to heavily rely on hardware maintenance. On the other hand, I can’t say that the software is guaranteed to work, because that means that the hardware is guaranteed to stay consistent. So when you're in a meeting and say the software worked, it really isn’t helpful when someone goes, “OH! Caleb has no idea how the software works.” Damned if I do and damned if I don’t.
This was a huge issue when it came to Judging, the award-part of the competition. For whatever reason, Rebecca decides that we don’t need the entire team to participate in judging. While that’s great for people who don’t want to be there (like Kiyan), it’s problematic when it comes to software: Alex is a driver first and a software lead second. So when we have our judging decision (that is also decided IN PRIVATE), guess who doesn’t make it… Ironically, this meant that the software lead spent even less time tending to their responsibilities.
In hindsight, it should be no surprise that we ended up failing in the League Meet Championships (Feb 3 2018). Everyone was on suicide watch that night. Luckily, we qualified for Wildcard: a last-chance competition for teams to make it into the Regional Competition. As a result, I — not a leader — attempted to uplift the team:
"Now that emotions are hopefully out of the way, I would like to say that every experience has something you can learn from. What happened yesterday was the past, and today is tomorrow. Maybe there was some things we ALL could of done to improve the outcome of the situation, and maybe there was even a bit of luck (which for us was bad), but it doesn't matter, because we can't go back and change that. The time to change is now. APPARENTLY wildcard will be easy, but that doesn't mean that the next competitions will be. Every team experiences struggle and right now we are the ones in the trenches. I'm telling you right now: This WEEK won't be easy, sacrifices will (and already have) be made, but overall it's up to you if you want to step up your game or not. Every minute counts. Every minute you could be doing something but aren’t counts too. In preparing for this competition, you can see we didn't put in our 100%. We can look at the charts and see what we did do and what we failed to do. But failure makes you stronger, and with a second chance to come back and blow every competition out of the water; hopefully we see that in the bigger picture, that the situation we are in right now might be more beneficial to us in knowledge and long term efforts."
Nothing really changed… All of these circumstances are how you end up a few nights before the Wildcard Event (Feb 10 2018) reading the requirements for awards, and realizing you have no shot at getting one for software. I’d ask Alex, “Where is our software portfolio required for the software award?” Only to receive the response that we weren’t planning to win that award. So that’s how I ended up creating our entire Software Portfolio on a Sunday night.
It paid off. We ended up winning a (Software) Control Award that allowed us to persist our season. We really had no chance winning non-robot related rewards because of our lack of marketing expertise… Plus, we had no outreach. It was funny because Devan would always say, “No outreach! What is our marketing team DOING?” To be fair, it wasn't even their fault.
Our season ended when we lost in our league’s Regional Championship Semifinals by 30 points. This occurred due to a “placement issue” (by and according to the Software Lead) that caused the autonomous code to mess up in our deciding match. There may have been foul play involved by the other teams, but the referees didn’t call it. So whose fault is that? Doesn’t matter. What’s important is what happens before we lose.
Our robot was a competitive robot. This meant that we would be able to pick our alliance partners. Throughout the entire competition, members (of our and other teams) are in charge of watching other matches and writing them down (in the scouting sheet I made). Some teams fail to fulfill their data-collection promises (in a deal Rebecca made), so — for whatever reason — our data ends up unfilled. In an unexpected turn of events, we ended up as a top 8 ranked team, which prompts Rebecca to ask Kiyan and I for a list of some number of alliances… I am honest with her and tell her that we can only create a reliable list of some number of teams, while she wants more. Kiyan is saying that we messed up like an idiot. The result is her crying on the floor with her Dad consoling her before we pick teams.
A team picks US making this entire situation irrelevant… or so I thought.
In the article, “The Racism I Experienced in School”, I mention that I wrote about the 6th grade incident three times. The second time occurred shortly after the loan-incident when I got towed (in College). The first time was in response to a rumor, which showcased my side of the story. The following is a direct quote from that story.
“Eventually, I got good at learning software on my own, because I knew that deep down (and according to others) Alex still has something against me. I think this merited some respect from Alex... You’re not going to bash the guy doing your whole software portfolio, fixing numerous errors, and actively putting in effort in an attempt to step up the code to the level advanced teams have.
I can't say that I was flawless this year, but already, the off-season has shown my progress: I made controls where the user points the stick at an angle, and the robot moves in that position (like an RC car). I added a turn method 10x better than the one we had in-season when I received flak for working on the code at many points. I’m already learning how to use OpenCV in Java for next year and continuing to expand my knowledge of the FTC code and Computer Science.”
At least one thing is wrong with the above statement… First, reading the software chat logs (Feb 25 2018) showcases Alex listing my contributions entirely wrong. More important is how our organization has the Project Managers re-select teams: This involves a process where the Project Managers for the next year sit at a table and look over applications (everyone is required to re-apply to the organization). Kiyan told me that — during this process — Rebecca would shake her head and make noises every time she encountered my application. Will was also a project manager…
According to Kiyan, I ended up being the last person picked which made me “the worst member in robotics”. So despite everything I did that season, I was — allegedly — the worst of all veteran accepted members in the School’s Robotics Organization (ranked by pick order). I’m not sure whether it was the scouting incident, or someone influencing her outlook towards me. I would hear from people outside the organization stating that Chandler said I had no chance at becoming a Software Lead or Assistant Project-Manager in the next season.
He was wrong.