SNOWDAY UPDATE!
Today was interesting because the snow storm hitting New England didnāt actually affect our meeting times all that much.
I am anticipating a more thorough game analysis post tomorrow due to some nuances we are noodling through, but I wanted to share posts from students regarding our preseason training and some information about our teamās current challenges and hurdles we have to overcome.
Meeting Times
By @Akash_Rastogi
Some folks are always surprised to learn that our teamās official meetings are actually quite limited, so a lot of work in CAD and software happens outside meetings, in addition toā¦pretty much everything else. Our official season schedule is:
- Kickoff 10am - 4pm with 1pm Lunch
- Post Kickoff Wednesdays and Thursdays 6-8:30pm
- Post Kickoff Saturdays 9am-3pm with Noon Lunch
Pre-season is a bit tight as well, which limits a lot of development work as a team:
- October - December Thursdays 6pm-7:30pm
We sometimes add meetings when things are running tight or due to snow days, but this is pretty much the gist of it. Software and drive team unofficial meetings also happen at our practice field (generously donated by a local company in one of their facilities).
Regardless, here are a few items we worked on in the pre-season as a team or as individual projects, as well as some insight into our training methods.
Programming Update #1: Offseason Projects + Preseason Training
Weāre excited to get the season kicked-off and share our plans, but first letās talk about what weāve done in the offseason and preseason to prepare.
Offseason Projects:
Every year during the summer, we like to have our students work on projects that will allow them to better their understanding of programming and become familiar with new concepts or pieces of software. Hereās what we did this summer:
Custom Vision System:
By @dh28567
As a team, we have usually used Limelights for our vision, and that is what we did last season as well because it was the simplest solution for us with the short time we had to play around with AprilTags. However, we did encounter a few issues with this last year like limited FOV and slightly inaccurate pose estimation due to our mounting. In addition to applying these lessons learned about physical mounting designs for 2024, we set out to fix these issues with a custom vision solution. We were planning on using Rust to make software using its NetworkTables implementation and OpenCV, but after putting a lot of work into this, we were unable to get the program working to the level we wanted, and have paused development on it for now. Our current plan is to continue using Limelights while we look into potentially adapting something like 6328ās Northstar to work for our robot.
Adding on to this, we have been implementing our own Object Detection system, using the OpenCV Python library. This isāupon further researchāavailable in most languages, but Python is, by far, the most comprehensive. Our current model uses both shape and color to detect game pieces, such as the yellow cones (detecting for triangles) and the purple cube (detecting for squares) in the 2023 Charged Up game. We worked on OpenCV for object detection in 2022 as well, but did not end up using this on final autonomous routines.
New Base Swerve Code (+ Advantage Kit):
By @dh28567
Last year was our first year using a swerve drive train, and everyone on our team agrees that it was a huge success, so we will likely be continuing to use it for many years to come. Last year we used 364ās BaseTalonFXSwerve code because we didnāt want to spend too much time getting it up and running, and while that worked fine for us (mostly), we would like to have our own swerve code base that we can use as a template for our future robots.
We decided to include some new features in this project as well, like 6328ās Advantage Kit. After having some issues with our autos last year that we couldnāt debug, we decided that some sort of data logging would be something we would need this year, and we have heard very good things about Advantage Kit. Some other things that were updated from our previous swerve code are:
- Simulation
- New PathPlanner version
- Phoenix 6/PRO
- New WPILib version
- Better comments/documentation
We have only had a very limited amount of testing with this code, but we did get the wheels spinning correctly when the robot is tipped on its side, and it drives around and follows paths in simulation. During our most recent test we werenāt able to get it to move at all despite not changing that much code regarding teleop and we have reached the conclusion that it must be some sort of licensing issue with the CANivore as the last time it functioned normally was before New Years. We are also aware of a small bug with some nonoptimal wheel rotations, we think it is just an issue caused by the CANcoders wrapping back around to 0 and will work to fix this issue shortly. The code for it can be found here: GitHub - BobcatRobotics/Bobcat-Base-Swerve: 177 Bobcat Robotics base swerve template
Inverse Kinematics:
By @AidenK
In previous years, our team has relied solely on PID loops traveling to prerecorded encoder setpoints to reach certain robot states. We knew we were leaving a lot of performance on the table, so, inspired by 6328ās insane control system, we began to look into more sophisticated control methods. Unfortunately, math is hard, and implementing state-space control proved too advanced for a short one-person preseason project, but we found a nice stepping stone into model-based control: kinematics. In short, kinematic equations describe the relationship between your robotās current state and the end effectorās position. While the robot would still rely on several parallel PIDs, knowing these equations would streamline the process of setting the robot to scoring and intaking positions, as well as making code more readable. Thankfully, our 2023 robot is relatively simple, and is essentially a double-jointed arm mounted to an angled elevator. Ultimately, we were able to derive the equations using some basic geometry and trig. We hope to use this knowledge in 2024 to create more efficient control systems.
Quick thanks to @jonahb55 @bbonner @Connor_H and all of 6328 for inspiring our students to try new things!
Programming Preseason Training:
Taking a step away from the ā1s and 0sā of programming, we found it important to include all members of our team, regardless of skill level, into our subteam. For newer programming students, we offer training and simple projects for them to work on to help them get an understanding of both Java and WPILib, as well as all of the other libraries we use for our code. Hereās what we did this year:
Leveling System
We found it effective to include a ālevelā system as every student has a different starting point. Some students came into the first meeting with a big smile on their face and a confident choice to be on the programming subteam, whereas other students were a bit hesitant. We wanted to make sure all students felt welcome and wished to accommodate each of these students to their own personal needs. We created a general structure of this system:
- Level 1: Students who have little to no experience with Java
- These students would start off with the Codecademy courses and gradually make their way up to working with Romis from Pololu
- Level 2: Students who have experience with Java but not with FIRST Programming
- These students would start off with Romis and continue on to helping with our Offseason projects once they felt comfortable
- Level 3: Students who have experience with FIRST Programming
- These students would start off with helping us with offseason projects
- We did not have many students in this group
Codecademy:
We found that Codeacademyās āLearn Javaā course was a good way to introduce completely new students to programming and Java. We had them complete modules 1-6 and 8-10, these cover a wide range of basic programming skills, and we felt that after this, they would be adequately prepared to experiment around on the Romis.
Romis:
Once students had a basic understanding of programming, we used the Romis to introduce them to WPILib. Their projects consisted mainly of learning how to write and deploy code from VSCode and create simple dead reckoned autonomous paths.
Mechanical Pre-Season Update/Training
By Brian M.
Pre-Season has come to an end, and team 177ās Mechanical sub-team is prepared and excited to crescendo into action! This year we welcome a new teacher to our metal shop, and with them many changes that we are taking in stride and using to our advantage. Along with a complete deep cleaning and reorganization of our machine shop, we are welcoming a new horizontal band saw and a new plasma-cutter table replacement to our shop.
Pre-season was not only a productive and educational experience, but a blast to all of our new and returning mech team students. New safety and education procedures were implemented into the shop which were gone through very thoroughly. Safety is fun here at Bobcat Robotics!
Our annual shop scavenger hunt came with a new twist this year as shop-seasoned returning members also had to reacquaint themselves with all the rearrangement and reorganization over the summer. Luckily, things are now clean and everything in the shop is slowly learning its new home. This cleaning and reorganization was truly needed for a team that has been in the same shop for 3 DECADES!
Some of our students have been working diligently on training themselves how to use our Tormach CNC machine. Previously an underutilized resource, we are hoping to deploy and utilize it this season to make more precise and replicable parts quicker and easier than ever before. In the transition period before our replacement CNC plasma cutter table is here, we are hoping that the Tormach can pick up some of the slack.
Along with training on our lathe, our various milling machines, and our numerous types of saws, we really tried to focus on team building and gracious professionalism within our sub-team, our team, and we also met with other teams to strengthen our friendship and connections with each other.
Student authors: @dh28567, @AidenK, Brian M.
Mentor authors: @Akash_Rastogi
Thanks for sticking around!