Monday, March 31, 2025

Week 10 - Chasing

Would we be SAFE at the end of our second event?


Another short just-under-two-weeks passed between our first event at Glacier Peak and our second at Sundome in central Washington. Also I promise this post will be shorter than the previous post. Just two sections to cover - our event preparation, and the event itself. Like the hands of a clock, let's spin through Weeks 9 and 10! (Students: Clocks used to be analog and contained multiple overlapping dials - called hands - to visualize time.)


Editor's Note: Wow, for some reason I definitely thought this would be a lot shorter, but, apparently a lot actually happened. Well, you've read one paragraph, you might as well finish!


Event Preparation:

Our first meeting post Glacier Peak, we held a retrospective of the event, and a planning session for the working days we had before load-in to our next event. The retrospective covered things that went well, didn't go well, and what we could try for next time. Many topics were discussed from scouting notes, pit setup, and the robot itself. Our planning looked similar to a kick-off day - we saw how the game was played, we saw what our robot could do, we even put our kickoff notes and robot priority list on the board to use as reference, and prioritized what we wanted to do. Our final list included further developing and tuning autonomous paths, re-designing our End Effector, finish designing and mounting a Climber, develop and tune the auto-alignment vision control, design and mount a simple Algae removal system, drive practice, and a few others.

The prioritized list ended up with end effector, autonomous, and vision on top, with drive practice, Algae removal, and a climber making the bottom half.


Like our list from Kick-Off, only smaller, and more focused.


Mini Mentor Musing: The students were hungry, especially when recognizing we could have put on a better show at Glacier Peak. As can be the case however, eyes are larger than stomachs, and there are only so many hours in a day that our lead mechanical student can consume hamburgers. Once again, prioritizing is important, so that if we need to save time and resource by cutting an item, we have all previously agreed on the order to focus, and to cut. At one point we had asked for some estimates on how long we think some tasks could take, and in particular one of the estimates was that vision setup and tuning would take just two meetings. Sadly this is where some mentor experience has to come in and guide expectations. They want to do it all, but we simply cannot. I personally was happy with the prioritized list.

So we spent our eight days as such - Design team iterated on our End Effector, and on Saturday we mounted the newest version with a proper 2:1 reduction between the motor and wheels. One hiccup from the rush job was that we placed a belt path right in front of a beam break sensor, but a drill quickly put paid to that issue. Electrical and our good friends at team 2910 helped us improve our Vision by adding a second Limelight camera.


It took only two hours to swap the entire carriage and end effector - not bad!


But the real brunt of the work was performed by the Software team. We grabbed every free time we could at the full sized practice field, and ended up attending six nights in a row! Slowly but surely we built out newer, faster autonomous paths, with many failures - both irksome and hilarious - along the way. We used logging tools to help assist as we dialed in our automated alignment controls. We updated firmware and introduced a second camera into the code.


And yet none of it was actually working.


Very much not aligned.


Autonomous paths were inconsistent - missing more frequently than it scored. Vision never lined up in the same place twice. We couldn't connect to the second camera after multiple attempts at running through the setup and configuration steps.


What was going on?


Vision, well, we'll get to this, but suffice it to say, we decided it was better to use the time we had with the working camera and forgo further attempts at getting the second camera running.


Literally unusable.
But actually it was fascinating to see the interplay of design and
manufacturing while optimizing parts using Altair's software!


Both our autonomous routines and the automated alignment made use of the PathPlanner library to help pre-compute paths and compute paths on the fly to place Lil Al at field coordinates. PathPlanner has some of its own configs, and also uses chassis and drivebase settings from the YAGSL library. Sunday morning (once again at the practice field) I took the opportunity to do something we hadn't quite done all year - take a step back and try to look at the macro picture.


We tested an Autonomous.
It didn't work.


Semi-side-tangent - we don't have a full time software mentor. While I am the most knowledgeable mentor with software in general, I'm not specifically fluent in FRC software. We all know this, and a few other mentors have been doing some work to address this blind spot. Also - if you are an FRC software adept and want to mentor a fun team in Monroe... :-D


We tested another Autonomous.
It still didn't work.


We generally take our lessons and learnings from previous years into the current year. Apparently we did similar with our software settings, setting aside the fact that our gear ratio was different, inertia and mass were different, and there were just some other... funky... things happening. So pro tip - take your lessons from previous years, but probably don't copy paste all of your variables. We went through all the YAGSL documentation, resetting and reconfiguring ratios, conversion factors, and PID values. We repeated the same with PathPlanner, using the provided calculations for estimating inertia and copying some default values for wheel friction and some others.


We... yeah that happened too.
We failed a lot.
And we learned a lot.


We put the robot back on the field and wouldn't you know the robot drove beautifully. Well, maybe lovely. Nicely.

We tested an auto routine, and it looked <much> better. We played with the automated alignment command, and it also looked <much> better. It felt like we were in business. The remaining days were spent continuing to tune and improve our overall pace. Our one remaining  'tune' item in PathPlanner was our maximum acceleration - we could have set up a test harness to capture a true value, or we could tune it up and down until we reached a happy medium of performance and repeatability. We started parallelizing movement (such that the elevator started raising up before we reached the Reef), increased the elevator speed, tried to set meaningful LED colors, and tried avoiding scenarios where we bumped into the Reef or Coral Station. Bumps were really bad and even with Vision trying to re-orient us, we would quickly fall off our intended paths.


This alignment is.... acceptable.


After many failures - by Wednesday evening we had a three-piece autonomous routine that scored reliably on the practice field. (Foreshadowing..?) Our practice matches had us scoring 15+ game pieces. We should be in the top 8 in Sundome, with a chance of solid District Points.


Very reliable three piece Autonomous!
On this field anyway...

Oh - as far as Algae and Climb - yeah we never got that far. Eight days goes incredibly quickly, and we already had to backtrack before we could move forward. We did have a mini Algae arm assembled, but simply did not have time to stop and perform more mechanical work.


SunDome Overview:


Thursday evening was somewhat unremarkable. The event was short on volunteers, so inspection took a bit longer than other events (Thank you volunteers!) But eventually we had our robot checked out and received a clean bill of health. During the downtime Kayla and I wandered through the aisles, looking at how other teams had approached this years challenges. I personally still love the variety in what tasks teams chose to tackle, and the details of how they brought their ideas into physical form. There were also a lot of teams with climbers - good for us who hadn't managed to get once installed!


Love a good corner pit!


Friday was really when the event began. For us, it was when... everything... began...

Before the Qualification matches begin, there are a few things that happen on the main field during an event. Teams are given the opportunity to calibrate their robots - usually bringing their robot and checking camera settings, light/ambience/contract/etc to make sure we're getting good readings. Teams also are given a practice match to get any late jitters (human or robot) out of the way, before the match results count for anything.

Calibration went fine - our software students made a few adjustments to contrast and light levels, but AprilTags are much more forgiving across ambient lights than the retroreflective tape. Practice matches began soon after, and as we didn't have any work to perform, we hopped into the queue, hoping to grab extra practice slots if other teams didn't show for their practice match. We snuck into a practice match and got ready to play - except there seemed to be some connectivity issue with our laptop and robot, and after some troubleshooting, we were skipped and the match played without us. No worries, we still had our scheduled practice match in a short while.

The field technical staff advised that we may have burned out the SD card on our RoboRio, and that was causing the connection issues. (Anyone reading from last year's blog hopefully groaned the same way we did. Twice with a bad SD card at our second event? Really?) With a new card inserted, code downloaded, and the robot connecting happily to our laptop in the pit, we went to play our actual practice match.


Lots of standing around and waiting happened...


We were late, but because field staff were working with us, they delayed the start until we were ready. Minor frustration - yes we were late, and the other teams had made their Human Player claims - but if your robot isn't running a multi-piece autonomous, please don't hog the Coral Station! We know how to feed our robot, and as we watched the practice match, it was clear that the human player from another team was not experienced at feeding our robot. It's only practice, but the delay and the lack of Coral control seemed to frazzle the drive team a bit. In Qualification matches, we would have more time to strategize and stake our own claim on the Coral Station.

Our first match showed that the changes and improvements were performing more or less as expected - a solid win, much better Coral control, though we didn't get all three pieces in autonomous. We'll look into that.


Lady is very happy we won!


Second match took a few minutes to start - apparently our Driver Station was being finicky once again, but after restarting the application on the laptop, it connected and we were good to go! Hrm, didn't get all three in autonomous again.

Third match - we're going to have someone film autonomous and try to see where and how much we're off. Oh, the Driver Station connection issue again? I don't understand, we ran all of Glacier Peak with no issues... It should be so simple: plug in the laptop, wait a little bit, click the ‘Enable Robot’ button. Wait. Why do we have an enable robot button? The field technical staff once again came to us to troubleshoot. (Per our drive team - we actually came <this> close to pressing the Enable button before realizing the significance of the situation…)


And here began an hour-long dance break for SunDome.


I don't do the macarena.
(He definitely broke my stoic face though!)


While our team and robot seemed to be causing the issue, the field staff noticed something slightly more concerning - Our laptop was showing the controls to enable and disable our robot, bypassing the kill switches implemented in the Field Management System. It was a cornucopia of interest, confusion, entertainment, and intrigue as we watched the field staff get into a Slack conversation with FIRST headquarters, including folks who wrote the FMS software and who designed the new robot radios. Many network traces, information gathering screenshots, and even a second laptop weren't able to identify just what was happening with some configuration either on this station of the field, our laptop, or our robot.

Something was being mis-routed somewhere, and finally a workaround was determined when a programmer from somewhere in Massachusetts maybe(?) remote logged into the SunDome FMS, and directly pinged our robot IP address, resetting some bit in a network routing table, and finally, once all parties were satisfied, we played our third match. We scored two of three in autonomous - still not what we saw on the practice field...

After the match, the field staff followed us to our pit once again, with a final theory in mind. What if the mis-routing was due to conflicting IP addresses? Everyone should know that there are reserved IP addresses for Driver Station, the RoboRio, the field, etc, so all of our network devices on the robot itself need to use a specific subnet. Right? ... Right?


At least these two had popcorn while sitting around waiting...


Technically, this falls back to when we added our first LimeLight camera, and to help us set it up we had another mentor - who is a FIRST Technical Assistant - get us an IP address, and it's probably just luck that it worked. When we added a second LimeLight camera, it needed an IP address, so we used the next available - which happened to be reserved, which then caused a network collision, and helped the Technical staff identify a possible edge case or bug in the network routing and fallback logic! You're welcome folks! (But seriously, again, thank you for all the help, support, and being so calm and collected through a pretty crazy ride!)

With new IP addresses (though technically, the code was still referencing only the one camera), we entered the field for our next match a little curious on what would happen - and we connected right away! Yay! Humbug - only one of three autonomous Coral scored. We didn't get a camera view of that attempt either.

Autonomous misses aside, the robot was looking much better - the auto-alignment was working much better than our manual alignment of last event, the newest End Effector had a firm hold on all our Coral, and the updated chassis configuration allowed our driver more confidence to swing past defense and collect more Coral all match long. Our stats looked good - not perfect - but really good! And the robot is finally doing what it was designed to do, we were winning, and enjoying the day.


Everything working, everything clean!


Our 7th match of the day started like any other. And by that I mean we once again had a connection issue - while we were able to play the full match, our sole remaining camera hadn't connected. We were learning a lot about camera use at competition... I'm not sure if the previous connection issues were masking this, but there is some common knowledge that sometimes, a butterfly flaps its wings in Las Vegas and the LimeLight data doesn't appear on our Driver Station. Our autonomous scored zero of three Coral that time. We definitely needed to figure that one out...

We ended up having yet another match with no camera - but we were up against the two most powerful robots at the event so, it likely wouldn't have changed the outcome. Come Sunday morning - after chatting with the friendly field staff, then chatting with some friendly Squirrels and Raptors - we learned that we can reset a camera through a web endpoint in the Photon Vision library. After learning this, we didn't have any other issues with the camera. I suppose this is just another item for future years?


Losing a camera was definitely a challenge.
Theres "learning vision" and "battle tested vision usage"...
We'll get there...


Competition is loud, stressful, and despite the many hands and minds that go into developing the robot, it falls upon two students to drive and manipulate the robot. Managing the mental game is just as important in robotics as any other sport. Time and again we've seen students get flustered, frazzled, and bamboozled. More often than not, it's a simple matter of overthinking - you made a mistake, you don't want to make the mistake again, so you either slow way down, or go into hyperdrive, and in both cases, you hit the wrong button again, then try to fix it again, and it's a pretty nasty performance limiting spiral. While I'm not inside our driver's head, we came up with a plan to also keep himself out of his head! Every match we asked a blatantly absurd question for him to ponder - therefore not thinking about the robot. Things like - what's the best breakfast good? What's the best super power? Is a calzone a sandwich or a salad?


We will experiment and try whatever we can to keep our drive team
in a good mood and able to focus (or unfocus) on the task at hand.


Saturday lunchtime was hysterical as the entire team apparently jumped on the 'sandwich or salad' argument - forcing discussion of many types of food items and how (incorrectly) they were salads, sandwiches, or something else. Honestly, I think the overall mood of the team was pretty good!


You tell us! Salad? or Sandwich?


After 12 Qualifying matches, we ranked 8th - a much better showing than Glacier Peak! We were picked up once again by our friends at Liberty High School to join Alliance 5, played a few matches, but were once again eliminated. We ranked high, we played in Eliminations - all of this earned us some solid District Points to try and make up for a less optimal showing at our first event. The cherry on top was meeting another season goal for the team - for the third year in a row, we were recognized with the Quality Award - celebrating the quality a team puts into its robot and itself. To win this award - again - shows that we have a solid process for how our team operates and builds robots.

Three quality years in a row!
Hey - what's a bears favourite award?
Koala-ty Award!


After it was all said and done however, we hadn't quite earned enough District Points to continue our season at the District Championship. A slow start at Glacier Peak definitely hampered us, as with a few issues here at SunDome with missed opportunities in autonomous and much slower cycles when we lost our vision-processing alignment. In such a competitive district - heck, as the entire floor and median skill of all FRC teams improves - it is more and more challenging to play catch-up at any point in the season.

Now, we'll evaluate the season, identify our opportunities for growth, celebrate our senior's contributions and achievements, and begin our work toward 2026!


No comments:

Post a Comment