We’re Back!
ooh, shiny
With the 2021 season effectively being a continuation of the 2020 season, and with most of the design process of this robot being in one post, I think this thread can just be for the combined build log for the two robots.
Also, if you stop reading here but have thoughts on the robot design, we welcome (and actually, are actively asking for) any feedback! Hopefully there are people who are bored over this vacation.
Also also, if you stop reading here, we’d like to thank a ton of teams whose work both inspired us and made our jobs a lot easier. This robot is effectively a Frankensteined bunch of robots we liked various parts of, so we really couldn’t have designed this without those teams.
How did we get here?
As I briefly mentioned in the last post, we planned on doing a redesign of our 2020 robot for (whatever happened with) the 2021 season. We made plans for this for two reasons: this gave us a unique opportunity to be able to look at flaws in our 2020 robot and make massive revisions to them, and we really wanted to at least CAD and program a new robot for 2021 to make sure that students had as much of the FRC experience as possible even during the pandemic. With that in mind, we planned on having our team kickoff in mid September, after the school year started and a couple of weeks of workshops to get new members at least able to participate in the strategic aspects of kickoff.
Of course, nothing ever really happens on schedule, but in this environment, that was totally fine. We took a relaxed approach here, allowing for more workshops to be fit in before kickoff, and especially before CAD work really started. Our initial plan was for kickoff in mid September, but we pushed it to the end of September for more workshop time, and then only started CAD in late October.
Kickoff and Strategy
One of the new things we tried this year was in response to a discussion on how to avoid overreaching in the future. In the 2020 season we did a pretty decent job of this (our issues this season were not, I think, primarily due to kickoff strategy) but in the past we’ve definitely had trouble with this. The conclusion we came to was to think about if we can concieve of any robots at all at the highest level of play we’re realistically trying to reach that will skip a given feature. If it’s something that any robots at that level of play could realistically get away without, we would have to have some really strong justification to consider that feature ourselves.
With that in mind, we also decided to immediately discard that philosophy for the 2021 season . Just kidding, but we did decide that with this effectively being an offseason robot, we could pick a couple of areas to try something fancy, with the hopes that we could learn how to do those mechanisms effectively in case we needed something similar in a future year. Also, if we had decided to stick to the zero overreaches strategic approach for this robot, we would probably have built something very similar to our 2020 robot, and that would not have been nearly enough of a challenge.
One of the “fancy” things we decided to try, before we even talked about strategy during kickoff, was swerve. We had been thinking about doing swerve for a couple of years at this point, and with the low cost of the Thrifty Swerve and the pretty good WPILib support for swerve at this point, we decided this offseason was probably the best time we would ever get to try swerve for the first time.
Other than swerve, we didn’t have any features we considered to be “fancy” until way later in the build process.
So using our new “no overreaches” plan, we realized that in 2021, we could actually have data on what robots at the highest level of play did, rather than just having to guess. We categorized a bunch of teams into “tiers” (Einstein bound, DCMP first pick, etc) and tried to analyze what strategic actions those teams took. We emphasized that what we cared about was not what those teams had the capability to do, but rather what they actually did in matches. Of course this was not perfect, since we didn’t get to see gameplay beyond week 2, but it helped us catch things like low robots that preferred to cross the generator switch area rather than go under the trench (the idea being that if they didn’t actually go under the trench there’s no advantage to being shorter).
https://docs.google.com/spreadsheets/d/1G0P4CUBFCePQ3ktBITnnOWEw00GQtA3zMPmn2Tz6hsE/edit#gid=0
Based on this analysis, and goals we came up with beforehand, we decided on the following needs, wants, and wishes: (everything below wishes are things we didn’t consider)
As for the 2020 season, the needs are things we design the robot around, wants are things we try to fit in if it doesn’t add significant complexity, and the wishes are things that we don’t actively try to fit in at all, but if it’s a trivial change to make them happen, we will do it. An example of treating “shoot beyond control panel” as a wish would be to pick hood angles and everything without considering the long shot, but then if it turned out the angle we picked could be used for the long shot, we would consider adding a flywheel setpoint for it.
The Process
One of the other new things we tried this year was to take a scrum-based approach to building the robot. We had been looking at this since midway through the 2020 season, after we heard about other teams using a similar structure. Basically, our implementation of this was to split the team into robot subsystems, rather than just subteams like mechanical or design or controls, to allow for each group of students to take a broader approach to the robot. This way, even students focused on software would get a little bit of mechanical experience, and vice versa. We hoped that this would both broaden students’ horizons and allow for more continuity in work (so people work on the same project every meeting, so they can see progress etc). On that note, we also decided that each student would have to sign up for both a technical and a non-technical subteam, even if they decided they primarily wanted to focus on one side of that. This was for two primary reasons: first, to get more students to take part in our business and strategy subteams, which we needed, and second, more importantly, to better achieve a part of our team mission, which is to show more people that STEM can be fun. This way, students who join primarily for a non-technical subteam would still do at least a little of the robot work, so they might potentially realize they enjoyed it more than they initially expected.
With everything being online for now, we also decided we would significantly scale back on meetings. Our student leaders brought up (and I agreed based on this semester of university being online) that when being in a Zoom call for a long time, it’s significantly more difficult to stay productive than at an in-person meeting for the same length. That, in addition to having no hard restrictions on time for designing this robot, led to us scaling back meetings to two 1-hour meetings per week, rather than the normal in-season schedule of 2-hour meetings every weekday and a 6-hour meeting on Saturday.
So, how did all of that go? After writing all of this out, I realize we stuck to this a lot better than I thought we did. On the note of widening students’ horizons: we did a pretty good job of that with the technical/non-technical stuff, resulting in us having more activity in our non-technical subteams than I can ever remember. For the “give mechanical people controls experience” side, though, I definitely hope we do better in future years. Most of the issue here was, I think, because of the nature of online calls rather than working in person. If we had both design and controls in the same call, people would just be talking over each other as they worked on different things, so we ended up splitting the calls, resulting in very little of students doing work on both. I think with in-person meetings in the future, though, this may get better.
For the meeting times: for most of the design process, we did stick to two one-hour meetings per week. The initial goal was for a lot of the work to be done outside meetings. Historically, we haven’t really been able to do this because our team is relatively new to doing CAD (going into 2020 we only had two CAD students with even a year of CAD experience). This year, that was a lot better, so some subsystems were able to get a lot of work done outside meetings. However, there were still a couple of subsystems that had primarily new CAD students who needed more help to do work, so those subsystems did have to expand to three meetings a week in the last couple of weeks as we came up on our self-imposed deadline.
The Software
As with the 2020 season, I was not very involved with the software side, so I have little insight into how the software developed over the past couple of months. If you look at our code and have questions, though, I’m sure someone on the controls team can jump in and answer anything.
The Design
Yeah, this is the section with the pictures.
Drivetrain
We chose the Thrifty Swerve modules primarily for their cost-effectiveness. After kickoff, we did the math, and based on the hardware we already had in stock (some motors + motor controllers), using Thrifty Swerve compared to other modules like the WCP modules was nearly half the price. With the aluminum saddle and after looking at the stress test videos Ryan put out, we were confident that there would be no downsides for our purposes to the Thrifty modules.
The other interesting design decision here was how heavy this subsystem is. Without bumpers and the battery, the drivetrain weighs 43lbs on its own. This is because the bellypan is unpocketed 1/8" aluminum, and the side rails are unpocketed 1/8" 2x1. We made this decision largely based on looking closely at 2056’s 2020 robot, when compared to our own 2020 robot. One of our goals this year was to make the robot more controllable, and part of that was to make the robot less tippy. Our 2020 robot, in response to 2019 being nearly overweight, was super light – we weighed in at our competition at 90lbs. But a lot of this weight was fairly high up, resulting in a robot that was apparently pretty difficult to drive. At competition, we tried to address this by adding ballast mass to the drivetrain, but finding a good attachment point to make things secure was pretty difficult.
This year, we realized that teams like 2056 used 1/8" sheet metal for their entire drivetrain, likely making it fairly heavy. We realized that there’s no point in lightening everything, only to later come back and add weight back to the drivetrain. Instead, we decided to start with a super heavy drivetrain and remove weight later if the CAD was looking like the robot was too heavy. The first place to cut weight from this robot is everything other than the drivetrain, then reducing the side rails to 1/16" wall, then reducing the bellypan to 0.09" thick, then pocketing the bellypan.
Teams Who Inspired This Mechanism
- 2056 - large and apparently heavy drivetrain, makes design easier and lets you push through defense if necessary
- 2910 - the bumper mounting is directly taken from their 2019 robot
- 1678 - the compressor mounting is directly taken from their 2019 robot
- 1323 (?) - the plates on the outside of the side rails to widen the frame perimeter to allow for attachments to the side there
Climber
Since we tilted back the feeder to allow the shooter to be far back on the robot, we couldn’t just use a single stage elevator like last year to climb. If we had done this, the top of the elevator would have blocked either our own shots or at least the field of view of the camera to see the vision targets. Based on this, we decided to use a telescoping tube design. The best examples of this that came to mind were 1114 and 2056, and 1114 graciously shared screenshots of the CAD of their 2020 telescoping tube climber. Based on this design, we have the inner tube extending with constant force springs, and being winched back down to elevate the robot.
To keep the climber up at the end of the match, we have a pneumatic cylinder, which when extended, goes through the inner tube and prevents it from extending. This is on a single solenoid so at the end of the match it will automatically brake, so a last second climb will hold.
The shaft across the tubes is meant to prevent the tubes from flexing towards each other. In 1923’s reveal for this year, we could see that before they added a similar beam, when climbing on a non-level rung, one of the tubes would flex towards the center. We may end up changing this shaft to something more substantial like a tube spacer.
Teams Who Inspired This Mechanism
- 1114 - released screenshots of their climber CAD, which we took inspiration from (especially the bearing attachment and the pneumatic lock)
- 2056 - for the original design of the 1114 climber
- 1923 - the strut across the climber tubes to prevent flex
Intake
This is the first pneumatically deployed intake we’ve ever done. For the last couple of years I’ve taught the design students how to do pneumatics in a sketch, based on that one 973 RAMP video, but we haven’t used it (2019 and 2020 both had motorized wrists for us). This year, we had to use pneumatics because swerve eats our motor slots, so we finally got to make the controls students’ lives easier.
We have three rollers, all powered by one Falcon 500. We chose this motor so we wouldn’t have to package a motor controller nearby on the moving subsystem (compared to a NEO or NEO 550). The bottom roller has 3" compliant wheels on it, so the linear speed on it is higher than the other rollers (which are just bare polycarbonate). I think the advantage of the faster bottom roller is that the balls come off of the ground faster, so we don’t drive over them, though to be honest we picked this architecture entirely based on 3847’s success with it. Usually we would prototype, but without in person meetings, that’s way more difficult. We chose this over our 2020 robot’s mecanum wheel intake because we realized that with mecanum intakes when compared to full-width roller intakes it’s just not possible to intake multiple balls as quickly from a wide area.
an aside on mecanum intakes
I think the lesson we learned here is to avoid mecanum intakes, and anything that centers the game piece outside the robot before lifting it off the ground, in games where you have to hold multiple game pieces. Even if a mecanum intake centers the ball in 0.1s and then pulls it in, that means you can’t just drive through that ball and into the next one you want to grab. Instead, you have to stop at the first ball, wait for it to come off of the ground, and then continue, unless you want to risk driving over the ball. In a game like 2019 where you only want to grab one cargo ball, this waiting time is fine, since driving through that one game piece doesn’t give you as much of an advantage. But in games like Infinite Recharge it significantly slows teams down, which you can see in a lot of teams’ match video when they try to grab balls from the open field.
In addition to the rollers, to add rigidity to the intake, we have a couple of tube spacers that just bolt directly to our intake plates.
This is the cross section of each of the rollers we’re using. To make swapping out the rollers easier, we decided to use dead axles here. From left to right: we have a shoulder screw, a bearing, a spacer, a hub for the roller with an integrated pulley, and a heat set insert for the shoulder screw.
This will be the first time we’re trying this, and the first time we’re printing parts that need the heat-set inserts. There’s a couple of issues I can foresee with this, that we would appreciate feedback on.
First, I’m not sure how well a roller like this would take even light impacts. Theoretically it shouldn’t need to take any real impacts because of our tube spacers, but you never know how things may play out, so I would like to make this stronger if necessary. Currently, the shoulder screw goes all the way through the pulley to try to get that steel part to prevent the pulley hub from delaminating, but I’m not sure if that will work. We also plan on printing the hub out of a strong nylon to try to make the roller as strong as possible.
Second, I’m concerned that the installation of the heat set insert will deform the plastic around the shoulder screw enough that it won’t fit in the hole anymore. It’s currently a pretty tight fit so that the shoulder screw properly adds strength to the part so a little deformation would cause a big problem.
Teams Who Inspired This Mechanism
- 3847 - the spacing of the bottom roller from the bumper and from the ground, along with the overall 3-roller architecture, is directly taken from them. Also, the idea of using dead axle rollers to make roller replacement easier is, I think, from them too.
- 973 - the positioning of the tube spacers (overall this intake looks a lot like the 973 2020 intake)
- 2056 - the polycarbonate plate we’re using to guide the balls in the right path over the bumper
- 319 - nothing directly copied as far as I remember but we looked a lot at pictures and CAD of this intake for inspiration
- 1678 - the pneumatic cylinder mounting is copied from their 2019 offseason bot, and the mounting for the intake pivot is not copied from that same bot based on their recommendation
Hopper and Feeder
This mechanism was one of the more challenging ones to package. We decided at kickoff to use a passive funneling mechanism similar to 973 and 2056 to center balls into a linear feeder. The panels for this funnel needed to 1) continue funneling even with the weight of a few balls on top, 2) fit on top of the swerve modules, and 3) connect somewhere that wasn’t being used by swerve modules, the intake, or the climber. Fitting on top of the swerve module ended up being easier than we initially expected, but the other two resulted in our changing the funnel material from polycarb to aluminum.
We needed two motors on this subsystem: one for the bottom sliding floor, and another for the vertical feeder section. This arrangement, along with a couple of beam break sensors, is intended to allow indexing balls in the vertical feeder section.
The really large plates here are acting as both gearboxes and supports for the 2x1s that go up to the shooter. In this picture, the left side motor powers the sliding floor, and the right side motor powers the vertical portion of the feeder (directly belted for one side, and using a gear to flip the direction for the other side).
These plates still need a little work – we need to add beam break sensors to allow for indexing balls, and the plate pocketing needs fixing (mostly because it could definitely look nicer). We also want to add some passive mechanism for balls to be centered inside the vertical funnel part. Most likely, we’ll end up doing what 2056 did with unpowered polycord rollers on the sides forcing the balls to the center.
The vertical part of the feeder is tilted back to allow the shooter to be as far back on the robot as possible, to allow us to take the target zone shot.
One other interesting part here is the crossbeams that the hopper and feeder are mounted to. For the 2020 season, we had similar crossbeams, but we put them in the profile of the drivetrain, as opposed to now, where we have the crossbeams on top of the drivetrain. We did this to increase modularity – now, theoretically, we can assemble the full drivetrain and the feeder separately, and then just assemble them together. We can also then easily replace the feeder if it somehow breaks.
Teams Who Inspired This Mechanism
- 973 and 2056 - the general architecture of the hopper + feeder with the passive funneling
- 2220 - tilting the feeder back to get a better angle for the shooter (and actually a lot of the robot architecture – if you look at 2220’s robot it’s very similar to this)
Shooter
Initially, the plan for this mechanism was just to do a single position hood for a robot designed to shoot from the trench. We mostly finished the CAD for this super early on, though, so to give students more to do, we decided to also CAD an infinitely variable hood (with linear servos) and a pneumatic two-position hood. Primarily, the goal was to be able to hit the target zone shot, after teams like 1690 demonstrated incredible 3-point accuracy from a couple of feet back from the wall.
The two position hood was designed to take these two shots – the trench run shot and the target zone shot. To maximize the chances at the 3 point shot, we picked a 65 degree angle from the vertical to release the balls, allowing us to hit the inner port if we were a couple of feet back from the wall. For the trench run shot, we used a 24 degree angle from the vertical, which is the same as we had last year, because we had some success for the medium to long shot with that angle last year.
One issue we’ve had with the two position hood so far is that it seems that we can’t use a single Limelight to see the goal both from 2ft away and from ~30ft away. Currently, we’re planning on trying the beta Gloworms and using two of them, one for the close shot and one for the long shot. The nice thing is that the close shot camera also may be able to help drivers line up the climb, if that’s necessary. If we have any major issues with the Gloworms, we can relatively easily change to using the Limelight we already have.
Compared to our 2020 robot, we also changed our inertia wheels (from large aluminum disks we made in house to the SDS COTS flywheel), motors (from NEOs to Falcon 500s), and the gearing (from 1:1 to 1.5:1). The motor and gearing changes will also help us with taking shots from the trench run. I’m thinking, though, that whenever possible, we want to play the front court game (just grab balls from the opposing loading station area) and take the target zone shot) since we should be able to swerve around defense more easily than most bots.
Missing from the CAD currently are the polycarb plates that act as the hood backing, the ziptie holes in the 3D printed curved pieces for that, standoffs in the back for stiffness, and the Gloworm mounting.
Teams Who Inspired This Mechanism
- 3940 - varying the compression along the hood to better deal with damaged balls
- 3476 - the adjustable hood design, which we almost directly copied (we changed the actuation to pneumatic rather than motorized)
- 1690 - their accuracy at the inner port from the target zone inspired us to try the two position hood
Things I’m Proud Of
Honestly, the fact that anything at all got done in a timely fashion given the nature of this season is really impressive, and it’s even more impressive that the students were able to design something of the quality that they did.
I’m also really happy with how our process changes worked out. There’s probably a lot that we did this year by necessity that we will do in future years because it just works better. For example, we may have CAD members not come in every day but instead do a lot of work over video call.
On an individual level, I’m very proud of the new design members, in particular in the shooter group, who took charge of the design of a pretty complicated subsystem and took initative to learn to keep their group on schedule.
And finally, I’m proud of myself for finding the time in my least favorite semester at university to be able to help these students design the best robot we have done yet.
Next Steps
We currently have plans for a contact-free build process. We recently got a machining sponsor, who will likely make a lot of our sheet parts, and the remaining parts and tube can be run by some combination of our experienced students + a parent and myself in our shop. We’re planning on doing the machining like this, limiting contact down to zero (nobody is interacting with new people directly in this process), then kitting parts together into totes alongside some tools to allow volunteer students and their families to do assembly by themselves. In theory, there shouldn’t be any need for tools beyond a rivet gun, allen keys, a screwdriver, and a drill to do most of the assembly. This way, we plan on building the robot without having any in person meetings. We plan on starting this next week.
After the robot is built (hopefully by mid-February), we need to start doing some type of driver practice. Most likely, for now, this will just be giving the robot to the driver and having them do drills by themselves in a basement or on carpet on the pavement outside or something.
We’re really happy to get back to doing robots, even with the process as different as it is this year. Hopefully, future blog posts will be more regular (and therefore, not quite as long )