FRC 1155 The SciBorgs | 2024 Build Thread | Open Alliance


Hello! Welcome to the 1155 SciBorgs Open Alliance Build Thread for the 2024 season. We’ve relied on Open Alliance in the past few years for inspiration, and want to share updates about our team to the broader FRC community.

We’re from the Bronx High School of Science in New York City, and this year will be our 21st year competing. We’re a proud, student-led team composed of 43 students, 2 hands-off mentors, and 7 advisors from our school. We also have a sister team at our school, Team 2265 The FeMaidens!

Over the next few weeks, there will be posts out to talk about our 2023 season, how our team functions, off-season project progress, and our plans for the near future. At minimum, we’re aiming for bi-weekly posts in the preseason, and weekly updates during the build season (there will also be a lot more media and smaller updates in our Open Alliance Discord channel). We’re really excited to contribute to the ever-evolving FRC community, and hope to learn a ton from this experience!

Team Links and information:

We’ll be seeing you at Hudson Valley, NYC, and hopefully Champs! If you have any questions, please reach out to us here, or in the Open Alliance Discord :slight_smile:

–Warren

ezgif.com-video-to-gif

21 Likes

What we’re up to!

Hello everyone! Our team is in the midst of member recruitment season, and we felt that for our second OA post, we should briefly talk about how we typically recruit members and garner interest at our school. Later in the pre-season, we’ll have a more comprehensive post on our entire 2023 season, but that’ll take more time to get ready.

On the first Tuesday of the school year, we co-hosted our yearly robotics interest meeting with 2265 and the new FTC team, FTC 23409. We had a great turnout of over 200 people, and we discussed what we do in FRC, the expectations for being on our teams, and our tentative schedules for the year.

The day after our interest meeting, we also attended our school’s club fair, where we could demo our 2023 robot Whiplash, answer questions, and get some more sign-ups for this year.

giphy

From all of these events, we amassed 100+ applications to try out for our team, which, while about average, still seems like an absurd amount of people. Unfortunately, this large number also leads to our next topic, tryouts.

Why we do tryouts:

Due to our school being a top STEM school in our city, the robotics program generates a lot of interest from the student body. We are lucky to be one of three FIRST teams at our school, the others being FRC team 2265 The FeMaidens, and FTC team 23409 Apeiro. Despite this, the amount of people who are interested in robotics at our school is often significantly larger than the amount of people we are allowed to take, due to various constraints related to space, administration, etc. In past years, we’ve had 300+ students trying for around 25 open spaces on 1155 and 2265. This puts us into the fairly unique position of having a quite rigorous tryouts process in order to get onto our team, with an end result of people who want to be involved with robotics not getting that opportunity. This year, we’re working with our school’s administration to help with this problem, by starting FTC teams and running other robotics programs at our school.

Each department runs independent tryouts that are catered to their specific needs. The main idea behind our tryouts process is that prior knowledge is not required whatsoever. We value one’s ability to work in a team and willingness to learn over technical skills when taking members in. You can’t have a successful team if you don’t have motivated members!

Construction/Mechanical tryouts

For our mechanical department, we had around 60 total applicants. Our first day was a group egg drop challenge, with a small homework assignment. Right now, prospective students are presenting robot designs and strategies they have been working on for the 2018 FRC game Power Up.

Programming tryouts

For programming tryouts, we’ve run 3 sets of introductory Java lessons so far to get applicants acquainted with basic syntax and general concepts. We aim to assess members’ problem-solving and comprehension skills through classwork and homework, and going forward we’re going to focus more on their collaboration abilities.

Electronics tryouts

We started electronics tryouts by having prospective members give a presentation to each other on their favorite video game. For the second day, we began working with the TKO circuit simulator made by team 1351 to have them learn to create an FRC electronics board.

Communications and Marketing

Our marketing department is not holding tryouts this year, so they spent this week holding workshops on graphics design and basic camera skills for students in our media boot camp, a program we’re helping to run this year.

Overall, we’re off to a great start to the year, and we’re looking forward to finishing tryouts and getting to know the new members for this year. We’re hoping to have some more posts out soon, to talk about ongoing projects like the rookie bot and robot code.

6 Likes

I’ve always had reservations about applications and tryouts because usually they’re focused more on preexisting skills and ignoring that the point of a team is an opportunity for growth. I definitely know they’re quite necessary, however, for teams at schools with large amounts of people that want to do robotics.

You’re one of the best examples of this, and I am impressed with the way these tryouts are handled and agree with every bit of your process. I love how a bit of your skills development is also done through the tryouts. And how you’re also trying to provide more opportunities for students on another level by creating more FTC teams. Great work, keep it up!

3 Likes

October Recap!

It’s a little late, but here’s what we were up to during the month of October. We’ve had a great month, and are gearing up for the Crescendo season! We are really excited that we’re now confirmed for 2 regionals this year- the week 2 Hudson Valley Regional, and the week 6 New York City Regional. Both are always amazing events, with HVR returning this year after being on pause since 2020. It will also be nice to have a full 4 weeks between our events, instead of the very tight 1 ½ weeks we had last year.

We finished our tryout process at the beginning of the month and were excited to welcome 6 new members to our team. We’ve since been working with them to advance their knowledge and complete safety training for our shop.


Our mechanical veterans showing our new rookies around our 2023 robot, Whiplash.


Our electronics veterans helping our new electronics rookies with soldering and crimping a NEO.

Rookie Bot:

Our 2nd-year members are continuing to work on a cube-shooting robot of their own design. Since last month, they’ve completed the electronics, and they’re continuing work on the CAD and prototypes for their shooter designs. They’re working on a more comprehensive post about their designs and the process they’re working through right now, which should be ready soon.


Brainstorming intake designs

Finished electronics and chassis.

Outreach:

  • At the beginning of the month, we began mentoring FLL and FTC teams throughout NYC, in collaboration with Steamworks Robotics. We worked with them last year, and this year we’re aiming to beat the 1000+ hours of mentoring FLL and FTC teams we achieved with them last year.

  • On 10/21 several members of our team volunteered at NYC’s RoboReplay event. While we unfortunately weren’t able to compete this year, it was a great time volunteering, and it’s overall a wonderful event.

  • On 10/24 we held a demonstration at our school’s open house alongside 2265. It was a lot of fun, and we were able to answer a ton of questions from students who we’ll hopefully see on the team in the future.



Demonstrating our 2023 robot, Whiplash, scoring cones and cubes.

What’s coming in November:

  • On 11/11, several members of the team will be volunteering at Brunswick Eruption. (Editors note: this happened, it was really fun, and will be covered in our November recap post… which will hopefully be out before mid-December.)

  • We’re having our season-wide post-mortem on Monday, 11/13. This will be an opportunity for all of our members from last year to reflect on our season, and for new members to hopefully learn something new. We’re working on a full recap of our season, including the good and the bad, and this post-mortem will likely have a lot of influence on that post.

  • We’re aiming to hold driver tryouts before the end of the year, depending on if we’re able to get more meeting time to allow for the setup and teardown of our half-field.

4 Likes

Rookie Bot Update

Heyo everyone! This marks the beginning of our OA rookie bot log for the 2023 Charged Up FRC Game!

Why would we make a rookie bot in the first place anyways?

  • Allows us rookies (well… now veterans) to develop our design and building skills (On team 1155, rookies are first-years and become veterans starting their second year)
  • Gives us the opportunity to work independently from more experienced members of our team, where we have more control over workflow and design features
  • Provides the team with a realistic defense bot to use for driver practice (at the mercy of our main season robot)

With every design process comes with a lot of brainstorming, so we got straight to spitballing ideas and sketching possible features:

Organized, isn’t it? Many of these drawings are random ideas that came to our minds, which did mean that we made a lot of iterations. We ended up choosing a few features that we really liked and wanted to include in our design.

Before getting to these features, we need to first address the base of our design, which is the AndyMark Everybot chassis.

Given that our time is much more limited during the off-season (only 2, ~1.5 hr meetings per week as opposed to 6 per week during build season), starting off with the everybot chassis saves us an INCREDIBLE amount of time by giving us the essentials.

Like a fine piece of marble, this everybot chassis will be sculpted and shaped to our needs. Taking this analogy to heart, we gave the drivetrain a little slicey-slice:

This major front cutout will be intended to give space for game pieces (cubes) to be “funneled” into the intake that will rest on top of our chassis. In other words, we plan on making our robot low to the ground, and targeting cubes. As a result, we plan on only using one degree of freedom to rotate our intake/shooter.

Wait, why not cones?
Given how low we planned to position our intake relative to the ground, we figured that it would be very difficult to pick up cones because of how many different orientations they can be in. This would make it a hassle to try to intake it from either the base or the top, which are shaped very differently. On the other hand, cubes are shaped more consistently which makes them easier to pick up.

We are currently in the prototyping phase of our shooter/intake design, and we’ve been figuring out adequate cube compression through setups like these:

After trying to place the cube in this given dimension, we found that it was able to be held in place snugly, even after a shake or two. Moving forward, we’re going to design the intake so that it has a way to stop a cube from exiting the other side. Furthermore, we also need to figure out a gear setup that’ll allow the two sets of wheels to rotate in opposite directions.
We will follow up in a future post with (possibly haphazard) CADs and sketches to make the concept much clearer and fleshed out.

As of now, our robot CAD (on OnShape) includes the fully dimensioned chassis with mounted electronics boards:

|759.8933333333333x351.424
|846x395.59376439203135

After communicating with our programming department about our general robot priorities, they began to brainstorm potential auto-paths to use:

We all still have a lot more progress to make, but we’ve always gotta start somewhere. We hope to provide more updates about our Rookie Bot as our design becomes more established.

Feel free to ask questions or post any comments below! :>

-Araf

6 Likes

November-December Recap

Hello again everyone! It’s been a minute since our last post (college applications moment) but we’ve been working hard to prepare for the 2024 FRC season. Later today (Friday 1/5/24) we’ll release our season recap for the 2023 season, but for this post, I’ll be recapping what we did during November and December.

  • On 11/11, several team members volunteered at the Brunswick Eruption off-season event. It was a great experience, and we had lots of fun. We also participated in a human match, the VOD is available here.

  • On 11/13 we had our season-wide postmortem, where we discussed everything good and bad across kickoff, build season, and competition season. The document with our notes is available here.

  • We decided to switch from the Spark Max and NEO V1.1 to NEO Vortex and Spark Flex for the 2024 season, based on the increased power and easier wiring that these motors offer.

    • We might also switch to Krakens in the future, depending on when they ship and how many issues we encounter with them compared to vortexes.
  • On Saturday 12/9 @NebuDev14 and @AngleSideAngle gave a presentation about robot code structure at Hawk Talks, an event hosted by 2601. Their slides can be found here.

  • On Saturday 12/16 @NebuDev14 and @AngleSideAngle presented at StuySplash, an event hosted by 694. Warren’s slides on custom software within FRC can be found here, and Asa’s slides on Trajectory Optimization can be found here.
    410293019_18394601866006002_8597268540163217024_n
    Members of the SciBorgs at StuySplash.

  • On 12/22 and 12/24 we held our mock kickoff event.

    • We used the practice game Melody Melee for our mock kickoff, due to it being a unique game that we thought no one on our team would have seen robots for.
    • It was mostly successful. We learned several things we could improve about the process that will be changed for our real kickoff this Saturday, but many parts went quite well.
  • Over Christmas break we had a virtual driver tryouts process, culminating in an in-person tryout for the final 4 people on 1/3/24.

    • The virtual stage used the game Overcooked to test teamwork and communication skills in a high-stress environment.
    • The in-person stage had an obstacle course for the robot, and people trying out had 2 minutes to practice, and 2 minutes to get as many laps as possible.
  • On 1/2/24 and 1/4/24 we began manufacturing components and preparing electronics for a test swerve chassis for our programming department to utilize for the first few weeks of build season, as we prepare our competition robot.

  • On 1/4/24 we removed, disassembled, and began cleaning the swerve modules from our 2023 robot. Unless the game is very weird (terrain game?), we will be using these modules for 2024.

That’s all from me for now, until tomorrow at least. Warren will be posting our season recap here soon, and then our next post should be a (hopefully positive) overview of what happened on kickoff.

5 Likes

Robo Recap

Hey fellow robotics enjoyers. As we rapidly approach January 6th, we thought that we’d recap our 2023 season. This is our 2022-23 season recap post, which will (attempt to) document most of the ups and downs from last season, and how we can improve going forward. The primary motivation behind this is to have a concrete document for future members of our team as well as the rest of the FRC community to learn from what we think that we did well, and what mistakes we made along the way. We’ve spent a lot of time reflecting on the mistakes we made this past season, and this document will attempt to document everything that went well, and everything that… didn’t go so well.

At the end of each season, and after every competition, we hold a team-wide post-mortem, where we get together and go over the positives, the negatives, and how we can improve going forward. If you’re interested, you can find a summary of our 2023 season post-mortem here. Alright, without further ado, let’s get into the recap:

Kickoff


One of our mentors playing a human game for 2023 kickoff ^

In the past, our team has struggled tremendously with communication (a common theme you’ll notice throughout this post). During the 2022 kickoff, our team’s leadership decided to design the robot for the rest of the season in a locked room, leading to the rest of our team having no input or awareness of what was going on.

In 2022 we were pretty terrible at competitions and consistently behind schedule because of this. Since then, we’ve moved on to:

  • Small group/team-wide discussions on kickoff to include all opinions
  • Having an actual organizer to help students get their thoughts on paper
  • Assembling a team-wide priority list by the end of the day to help with design decisions
  • Having a day 2 of kickoff, where we hopped into voice calls
    • Separated into small potential mechanism groups
    • Brainstormed ideas for the final mechanisms on the robot.

During the 2023 season, there were also several plans to hold a mock kickoff beforehand, but that got canceled due to logistical/administrative reasons. For the 2024 Crescendo season, we managed to run a fairly successful one with our new members :slight_smile:

Some key things to note:

  • Our priority list took longer than expected on kickoff since there was a pretty big debate about whether we should prioritize picking up fallen-over cones;
    • Looking back now, this was unnecessary
More context for that ^

Fallen over cones this year, like floor hatch panels in 2019 and floor gears in 2017, were one of the big traps of the season. Many teams (including us) severely overestimated how important the ability to pick up fallen over cones would be. While many teams were extremely successful focusing on them even over standing cones (694, 2468, 3005) there were just as many teams that were just as good if not better while not being able to pick up fallen cones (254, 2056, 4414). Looking back, it would have been fine to prioritize one over the other, and I think we could have been successful either way, but the lack of a conclusion to this argument within our team did lead to a delay in our initial ideas on kickoff. It ended up not having a massive influence on our robot design, but this is something that really should have been decided by whatever was better for the robot architecture that we ended up going with.

  • Throughout the season, we repeatedly forgot about the priority list and ended up not following what we put down, which ended up contributing to consistent failures (i.e. not prioritizing low CoG on the robot which limited our drive capabilities severely)

First few weeks of build season

Going forward into the first two-ish weeks of build season, our communication began falling apart. Talks about mechanism designs were primarily scattered and disorganized, and some of the finalized mechanisms on the robot were decided with a great percentage of the team unaware of such a decision being made.

As someone who used to be a part of the software department on our team, I can not stress heavily enough how important it is that the robot design planning process consists of everyone. Communication is key to ensuring that each member of the team knows what they’re doing, how they’re going to get it done, and how their work impacts other subteams working on the same mechanism.

Throughout the first few weeks of build season, we went through many different ideas. From watching RI3D, keeping up with many OA teams, and researching solutions from outside FRC, we created many different ideas, some of which were probably better than the one we eventually went with. A brief list would include:

  • A pink arm with a fixed wrist and roller claw
  • a simple 4-bar design actuated by a linear component with a claw that could automatically align fallen cones
  • a double-jointed arm
  • a virtual 4-bar on an elevator inspired by 254s’s 2019 robot

While the words “inspired by 254’s 2019 robot” should have been enough to tell us that we were probably in over our heads, that was the design that would go on to inspire our final design. The idea of a virtual 4-bar was quickly disproven, as it was not flexible enough to fit the requirements we set for our robot, which resulted in 2 fully separate degrees of freedom for our arm, for a total of 3 separate degrees of freedom within the whole system including the elevator. This design was, and continues to be, a nightmare for our programmers.

We went through many claw designs and prototypes, building several very different designs, and drawing many more.

Eventually, we settled on a roller claw design, partially inspired by one of the many prototypes demonstrated by 7461 on their OA thread.

Mid-End of Build Season

Robot issues:

Due to a lack of communication and poor cost-benefit analysis at the start of the season, our overall robot design ended up being pretty overcomplicated and disorganized, taking away valuable testing time and driver practice as the season went on. We had to go through many CAD revisions in week 4 and 5 of build season just to fit within our frame perimeter, again due to miscommunication between mechanism groups.

The L-shape of the wrist on our first claw was a hasty addition to allow us to fit fully inside the frame perimeter with our starting configuration.

We also discovered that, due to a mix of miscommunications and misuse of mechanism gear ratio calculators, we had severely underpowered our arm, and overpowered our elevator. The fix for our arm ended up being fairly simple, instead of redesigning to add another gear reduction, we just added a small reduction using sprockets and added a third motor.

While these changes were fine solutions to these problems, there shouldn’t have been a problem in the first place, as these are things that should have been caught much earlier on in the build season. Checking things like this is something that we are going to put much more effort and focus into this season, as avoiding big problems like this late into the build season will make our lives easier and save us a lot of time.

Other things:

One of the driving forces of productivity that was new for our team this year was an Incentive Plan, something our team’s leadership and school administration worked together on to increase overall productivity. At the end of each week would be a “deadline” or “goal” to meet, and if met, we would be rewarded with more funding from our school.

For one, many of the incentives were actually counterproductive to what we should have been working on at the time. This led to the team going off on tangents to achieve these goals, wasting time that we didn’t have at that point in our season. While a lot of the stuff we ended up receiving from this was incredibly nice to have, we could have saved several days if the goals had been closer to what we needed to be doing. The idea behind this plan was good, but the execution had several flaws.

Competitions

SPBLI 1

Positives:

  • We passed inspection (fairly) smoothly!
  • We were able to experience a lot of unseen issues and quickly address them during practice day
    • Ended up rewriting a sizeable portion of our arm in between matches
    • Had a functional 1+move auto for the entire event
    • Had a very reliable 1+engage by the end of the event

Not so positive:

  • Our drive speed was extremely limited and cycles were pretty slow
  • We had recurring issues with disconnected encoders (a common theme for the season) leading to violent arm behavior
    • This also led to damaging several motors, and we went through 2 arm NEOS before the problem was fully resolved.
  • Our arm was breaking the height limit repeatedly during practice matches
    • Had to write janky last-minute code to ensure our arm could travel between states without violating height limits (we address this issue later)
  • Autonomous routines weren’t as good as they could have been
    • One game piece
    • Could only dock, not engage for most of the event
  • Didn’t make it to elims
    • LI1 alliance selections and playoffs were… interesting, to say the least, but we definitely could have done better in elims than we were demonstrating on the field for most of the event.
  • Our scouting app did not save data properly, leading to us having to rescout all of day one of quals using video recordings (strat team did not get a ton of sleep)

The Mess Between

In the week and a half between SBPLI 1 and NYC Regionals, we

  • Came up with a new control scheme for the arm, which was inspired by team 6328, detailed in their post here
    • Arm movement was much faster while avoiding collisions/height violations
  • Fixed very few of the major issues we encountered at SBPLI1

However, we decided to replace our perfectly working roboRIO 1 with the new roboRIO 2 we just ordered, which

  • Required a complete rewire of our robot
  • Was untested
    • Encoder connections suddenly stopped working and caused our elevator to violently rip itself apart

Because of the destroyed elevator, we spent most of the time dedicated to driver practice instead rebuilding and troubleshooting much of our robot.

A Nightmare at NYC

Positives:

  • Drive speed was a lot faster than SBPLI 1
  • Arm motion (when still intact) was baller
  • Asa won dean’s list!
  • We were able to take half of the carpet from the event, meaning we finally have a practice carpet!
  • We ran into 0 issues with the MaxSwerve wheels (a small miracle given what we were doing to them, and how fragile the originals were)

Negatives:

  • Robot was not ready for this competition
    • No drive practice
  • Our autos became less reliable
  • Robot comms were much worse due to a poorly chosen radio position, leading to disconnections in 2 separate matches
  • Decreased speed limiting helped to shorten cycle times, but made the robot much less controllable
  • Robot failures were addressed by replacing the part and moving on, without considering why that part broke, and taking steps to fix the problem.
  • The arm rarely survived a full match
    • This was due to encoders repeatedly unplugging during matches
  • Poor communication within the drive team led to the robot tipping twice, both times could have been avoided with better comms.


The result of encoders unplugging in the middle of a match ^

Offseason:

Positives:

  • A redesign of our claw and redo of our robots wiring fixed many of the critical issues with our robot, greatly improving its performance
  • Our outreach initiatives were very successful, and we’ve been able to help mentor many FLL and FTC teams this offseason.
  • We raised over $600 for charity through several different projects
  • Cleaned and reorganized our workshop
  • Had a mostly successful mock kickoff

Negatives:

  • Due to scheduling conflicts with our mentors, we were unable to attend any offseason events for the 2023 season
    • This was incredibly disheartening for many team members
    • Did not allow us to get our new drivers any actual competition experience

That’s all for this post. We hoped for this to be released around a month earlier, but college applications can be a punch in the face. As always, please let us know if you have any questions!

-Warren & Charlie (@Techno-1155)

5 Likes

Kickoff!

Hello everyone! Now that the game has been released, it’s time to get into the swing of things. We had a pretty good kickoff today, and I’ll be going over everything that happened.

We had the opportunity to host rookie team 9636 at our kickoff event and had a wonderful time working with them during the day. We’ll hopefully get an opportunity to help them more later in the season, and we’ll see them again at the NYC regional.

Before the game reveal, rookies and members of 9636 attended a presentation by me on strategic design and FRC basics, available here. Veterans worked to clean up our storage area, and then the entire team attended a quick presentation by our shop leads to discuss and reiterate safety.

We watched the game reveal (and the surprisingly short speech by Dean) with 2265 and 9636, before we broke off into our respective sessions. We integrated members of 9636 with our kickoff groups, which was very successful during our small group brainstorming sessions.

We started by gathering the entire team to do an out-loud reading of the important sections of the game manual. This ensures that the entire team is familiar with the rules and how the game is played before we head into priority list brainstorming.

After the game manual reading, we split everyone into groups of 4-5 students, and gave them 2 hours to research the game, and complete our kickoff worksheet, which was based on a combination of the one made by 6328, and our worksheet from last year.

During small group brainstorming, we ran the human game, which helped our small groups to better understand the flow of the game, and how cramped it can be around the stage at certain points of the match.
POV footage from human match

After small group brainstorming, we reconvened to come up with our team’s initial priority list for this year. This includes both robot attributes (low cg, fast, etc) and robot capabilities (score in the speaker, climb in the endgame). Below is the list, with explanations for each placement in the dropdown.

Must haves:

Drive and have working bumpers
  • Move in Auto
  • Parking in endgame
  • Able to play defense
Scoring in the speaker from the subwoofer

Easiest scoring location for the speaker, and the speaker is worth more points than the amp.

Intaking

Needed to score more than one game piece in a match.

Low COG

With how fast this game will be, a low cog will keep us safe from tipping.

Fast cycles

Very important to maximize points during a match, especially with speaker cycles.

Should haves:

Climbing the chain

The simple part of the endgame task needed to be decently competitive.

Scoring in the amp

Needed for cooperation points, and is slightly more efficient in terms of points/cycle

3 speaker cycles: 2 + 2 + 2 = 6

2 amp cycles and one amplified speaker: 1 + 1 + 5 = 7

The extra points from amp cycles are much better if one other robot is also able to score in the speaker while it’s amplified, as that increases the difference from 1 to 4

Intaking specifically from the ground

needed for multi-piece autos, and can also be used with the HP station. Dropped game pieces could also be common in this game depending on how consistent speaker shots turn out to be.

Vision for April tags

very helpful for the autonomous period and auto-align in teleop.

Lightweight

helpful to decrease potential cycle time

Harmony

contributes to climb RP (ensemble)

Could haves:

Scoring in the speaker from the podium

immune to defense, but the opening is much smaller from this angle.

Scoring in the speaker from around the stage

just to flex, but could be helpful for even faster cycles

Scoring in the trap

a decent amount of extra endgame points contributes a ton to the ensemble RP

Intaking directly from the source (human player station)

helpful to prevent opposing robots from stealing game pieces at any point.

Won’t haves:

Buddy Climb

very helpful for ensemble RP, but buddy climbs are very complex, and we don’t think that it’s worth the problems we might encounter down the road to pursue one right now.

LEDs

Not needed for HP communication, and we smoked our LEDs the last two times we tried, it wasn’t worth it.

Things we will discuss adding/changing tomorrow during our full team meeting:

  • Max robot height of 2ft 2in to fit under the Stage for faster cycles
  • Intaking from the ground vs directly from the source
  • High vs low bumpers (go over notes vs push them away, also intake packaging)
  • Should we invest in higher gear ratios for swerve modules?

Some observations about the game:

  • Going under the chains will be very important to evading defense and having consistent cycles, which caps your height at ~2ft 3in
  • Notes being scored into the amp need to be placed, rather than shot, to avoid bouncing out (untested)
  • It is challenging to get the climb RP, as (assuming no human player) at least two robots on the alliance must climb on the same rung, or one team needs to reach the trap
    • This also means top teams will need to go for the trap at the regional level to compensate for potentially bad schedules
  • The endgame is very low scoring, and compared to the fast cycling of notes to the amp and speaker, high-level alliances in finals may want to keep cycling instead of climb
  • Amp mechanisms can potentially be used for the trap as well, depending on the climbs
  • Buddy climbers could allow you to “solo” the climb rp if you can grab one of your alliance partners

Once we had finished the first draft of our priority list, students began researching mechanisms and debating robot designs. We ended before we could have large group discussions, so everything related to mechanisms and robot architecture will be discussed in the post about tomorrow’s meeting.

If anyone has any questions, don’t hesitate to post it here. That’s all for now, we’ll see you tomorrow. Here’s a photo of Warren to brighten your day:

5 Likes

Kickoff Part 2

After our very successful kickoff yesterday, many of our team members spent their evening independently researching robot designs and looking for inspiration. Many of us independently came up with the triangle architecture, with an intake on the low end, an angled indexer, and a shooter at the top corner.
trianglegang wooooooooooo

While this design was very simple, effectively being an upgraded kitbot, it didn’t have the capabilities we were looking for in our robot, so we continued working to try to add a simple way of scoring in the amp to a robot of this design. After several rounds of Krayoncad, we settled on a design that allowed the shooter to rotate downwards to drop game pieces directly into the amp.

Speaker scoring mode.

Amp Scoring mode.

After getting to this point in the design, we went to sleep.

Team meeting:

We started our team meeting by revisiting the priority list that we created yesterday. Our first point of discussion was driving under the stage, which requires having a robot less than 26” tall. The entire team agreed that, due to the impact this would have on cycle time, this was a critical feature for our robot, and belonged in Must haves. We also revisited our two points on intaking and clarified them to have intaking from the ground in must-haves, and intaking directly from the source (human player station) in could haves. With these changes made, here is our new priority list:

Must haves:

  • Drive and have working bumpers
    • Taxi (Move in auto)
    • Parking in endgame
    • Able to play defense
  • Drive under the stage (height under 26”)
  • Scoring in the speaker from the subwoofer
  • Ground intake
  • Low COG
  • Fast cycles

Should haves:

  • Climbing the chain
  • Scoring in the amp
  • Apriltags vision
  • Lightweight
  • Harmony (two robots on one chain)

Could haves:

  • Scoring in the speaker from the podium
  • Scoring in the speaker from around the stage
  • Scoring in the trap
  • Intaking directly from the source (human player station)

Won’t haves:

  • Buddy climb

After this, we split off into small groups to brainstorm potential robot architectures. Many groups continued to work with the concepts that had been created last night, especially the triangle structure we had been considering. When we presented, every design was a fairly minor variation of this, and we eventually decided on this robot architecture:

Drivetrain:

We’ll be using MaxSwerve modules with Vortexes (and Krakens, once they ship). We are currently deciding what gear ratio to upgrade to, especially with the 5 new ratios recently released by REV.

Intake:

We have been considering two intake types, and due to both having mixed tradeoffs, we are planning on taking both of these intakes into consideration during prototyping before we decide on one this week as we transition into CAD.

Option 1: Over the bumper

A fairly standard fold-out over the bumper intake, inspired by RI3D Cranberry Alarm and their intake, this would be rotated using a NEO on a MaxPlanetary, and would likely use a mix of belts and compliant wheels.

Over the bumper intake retracted.

Over the bumper intake extended

Option #2: Under the bumper

This is a very similar concept to the Cranberry alarm intake, but instead of being OTB and needing to be retracted and extended, this would be mounted inside of our frame perimeter and would intake notes that go underneath our front bumper. This would require having fairly high bumpers, with 2.5in of clearance underneath at least the front bumper to allow notes to path through.

This design is much simpler than an OTB intake and removes a DOF. Remember, a DOF saved is a DOF earned. It also packages much better with our indexer and shooter, allowing for the shooter angle to be steeper without a more complex indexing system. However due to the nature of UTB intakes, it cannot be as wide as an OTB intake, so we would either be sacrificing that width, or we’ll need a different mechanism to potentially direct notes into this intake.

Scoring in the speaker:

Similar to the kitbot shooter, with our shooter in the resting position it will be perfectly positioned to score in the speaker while up against the subwoofer.

By adjusting the angle of our shooter, and rotating both the flywheel assembly and a section of the indexer, we can fine-tune the shooter to be able to score on the speaker from much farther distances, such as the podium.

|624x300.22798099193705

Scoring in the amp:

Doing this while maintaining simplicity and minimum DOFs was a challenge, but we think that we’ve figured out an effective, simple way of doing this by only adding 1 DOF to our robot, and zero extra mechanisms.

By rotating our shooter around 90 degrees, it is positioned at a downward angle that is perfect for dropping notes directly into the ramp at the bottom of the amp. The exact geometry of this mechanism will require more testing, especially when we need it to retract to be under 26” tall, but based on this CAD and initial sketches we’re confident in this design.

Climber:

We will be going with 2 simple telescoping arms for our 2024 climb. We have some familiarity with these from 2022, and this is a simple solution to the climb this year. Over the next 2 weeks, we will be testing different hook designs and materials to figure out what is best for our climber.

The trap:

For now, the trap will not be our focus. As the build season progresses, we will likely re-evaluate if we want to attempt to modify our robot to be able to do this task, or if it is out of our reach for this season.

That’s all from us for kickoff weekend. Tonight we’re gauging interest from members of the team on what mechanisms they are interested in working on, and tomorrow we will begin the prototyping process. Our next major post will be this Friday, recapping what will happen this week. However, we will be posting daily media and small updates in our discord channel on the OA discord.

14 Likes

This is excellent, we had some similar ideas that we have been discussing. Thank you for sharing.

6 Likes

Oh man I really like this architecture

3 Likes

For the over the bumper version, a linear slide intake could be the move.

4 Likes

How tall is the KrayonCAD robot? are there plans to make it package lower?

I’m curious as to why you think 26" should be the max height when the lowest point of the chains is 28.25" from the carpet

They likely wanted to stay under the 27" stage

1 Like

Oh I totally forgot about that part of the stage, but even then those are only 27.825" high from the carpet, I feel like a 27" robot would be fine if you really needed to

The lowest parts of the stage are 27 7/8” above the carpet. We had some people on our team who were understandably concerned about cutting this close and getting stuck or decapitated, so we figured that 1 7/8” of clearance would be a good value to aim for. If it becomes a problem later on and we need to cut it closer, we likely will, but I’d rather try to have more clearance now than run into height issues later down the road.

2 Likes

The KrayonCAD robot is currently 28 1/2” tall, but it is definitely not optimized for height. Over the next few days we’ll be working on a master sketch for this robot, which is where we’ll be figuring out realistic dimensions for this design and how low we can get it while maintaining the ease of scoring in the amp. I’m fairly comfortable that we’ll be able to cut it down to 26”, most of the problems with this current design are due to the triangle frame in KrayonCAD being slightly skewed backwards, and I wasn’t able to figure out how to change that part of it yesterday.

Threw this together, is this close to what you were thinking of?

Retracted slide intake

Extended slide intake

Handoff state

This seems like the move regarding packaging for an OTB intake, although I will keep thinking about ways to do this without needing a third “handoff” state. I still prefer the UTB intake for now, but we will keep this in mind as we prototype intakes.

Here is the KrayonCAD for anyone interested in modifying this design.

1 Like

Programming: where it was, where it is, where it isn’t

By subtracting where it is, from where it isn’t, or where it isn’t, from where it is, whichever is greater, SciBorgs programming obtains a difference, or deviation.

I’m Asa, programming head along with @infinite_arity. We’ll be making programming specific posts pretty frequently throughout the season.

This post outlines developments from last year, goals for Crescendo, and initial planning.

2023

Over the past years, we’ve made significant progress toward becoming a top tier (I hope) programming department. Some developments include:

Code Structure

While we made initial progress on sim in 2022, it wasn’t until 2023 that we fully simulated everything from the start.

Very quickly, it became clear that REV’s support for the SimDeviceSim api was not going to cut it for our needs, since it didn’t support onboard closed loop control or duty cycle absolute encoder position. Additionally, we wanted a cleaner way to represent the sim/real split that did not rely on storing every class for sim and real hardware in all scenarios. Based on the code structure of AdvantageKit and swerve modules in template repositories, we decided to use a system of IO interfaces and classes.

For example, here’s what we did for swerve:

/** Generalized SwerveModule with closed loop control */
public interface ModuleIO extends Sendable, AutoCloseable {
  /** Returns the current state of the module. */
  public SwerveModuleState getState();

  /** Returns the current position of the module. */
  public SwerveModulePosition getPosition();

  /** Sets the desired state for the module. */
  public void setDesiredState(SwerveModuleState desiredState);

  /** Returns the desired state for the module. */
  public SwerveModuleState getDesiredState();

  /** Zeroes all the drive encoders. */
  public void resetEncoders();

  @Override
  default void initSendable(SendableBuilder builder) {
    builder.addDoubleProperty("current velocity", () -> getState().speedMetersPerSecond, null);
    builder.addDoubleProperty("current angle", () -> getPosition().angle.getRadians(), null);
    builder.addDoubleProperty("current position", () -> getPosition().distanceMeters, null);
    builder.addDoubleProperty(
        "target velocity", () -> getDesiredState().speedMetersPerSecond, null);
    builder.addDoubleProperty("target angle", () -> getDesiredState().angle.getRadians(), null);
  }
}

Additionally, our code this year has stuck very closely to what’s considered pragmatic in the modern command-based framework. Notably, we created a CommandRobot class for use instead of Robot and RobotContainer that provides triggers for game states (auto, teleop, etc). The triggers have found their way into WPILib 2024 thanks to @DeltaDizzy, and I’m currently working on a restructuring of the command-based templates to use CommandRobot for 2025.

// Runs the selected auto for autonomous
autonomous().whileTrue(new ProxyCommand(autos::get));

// Sets arm setpoint to current position when re-enabled
teleop().onTrue(arm.setSetpoints(arm::getState));

We were also able to organize our code like this, without separating by commands vs subsystems. This is enormously aesthetically pleasing to me.

Advanced Controls

In 2023, to control our abomination interestingly designed 3DoF robot, we looked into trajectory optimization with CasADi. However, we did not just have a double jointed arm. Instead, in our infinite wisdom, we made a double jointed arm on an elevator, the true pinnacle of KISS. This would prove to be a terrible, horrible, very educational idea. To derive an inverse dynamics model for this arm via the lagrange method, we referenced Underactuated and [the unofficial frc discord programming-discussion crew]. After getting our inverse dynamics model, we adapted and mildly refactored 6328’s Kairos to use it (and yaml config), and renamed the library to Chronos.

In the end, our robot loaded and ran pregenerated trajectories that were deployed off-field, with a system for falling back on trapezoid profiles. The entire system uses high quality (unbiased source: me) modern command-based code.

Examples
/**
 * Goes to a {@link ArmState} in the most optimal way, this is a safe command.
 *
 * <p>Uses {@link #followTrajectory(ArmTrajectory)} based on {@link #findTrajectory(ArmState)} if
 * a valid state is cached for the inputted parameters. Otherwise, falls back on {@link
 * #safeFollowProfile(ArmState)} for on the fly movements.
 *
 * @param goal The goal state.
 * @param gamePiece The selected game piece.
 * @return A command that goes to the goal safely using either custom trajectory following or
 *     trapezoid profiling.
 */
public CommandBase goTo(Goal goal, Supplier<GamePiece> gamePiece) {
  return goTo(() -> ArmState.fromGoal(goal, gamePiece.get()));
}
/**
 * Goes to a {@link ArmState} in the most optimal way, this is a safe command.
 *
 * <p>Uses {@link #followTrajectory(ArmTrajectory)} based on {@link #findTrajectory(ArmState)} if
 * a valid state is cached for the inputted parameters. Otherwise, falls back on {@link
 * #safeFollowProfile(ArmState)} for on the fly movements.
 *
 * @param goal The goal state supplier.
 * @return A command that goes to the goal safely using either custom trajectory following or
 *     trapezoid profiling.
 */
public CommandBase goTo(Supplier<ArmState> goal) {
  return new DeferredCommand(
      () -> {
        var trajectory = findTrajectory(goal.get());
        return trajectory
            .map(this::followTrajectory)
            .orElse(safeFollowProfile(goal))
            .alongWith(
                Commands.print(
                    String.format(
                        "Arm goTo Command:\nStart: %s\nGoal: %s\nFound trajectory: %b\n",
                        getSetpoint(), goal.get(), trajectory.isPresent())));
      },
      this);
}
/**
 * A (mostly) safe version of {@link #followProfile(ArmState)} that uses {@link ArmState#side()}
 * and {@link ArmState#end()} to reach the other side without height violations or destruction.
 *
 * <p>This is implemented by going to a safe intermediate goal if the side of the arm will change,
 * which is slow, and mostly prevents circumstances where the arm hits the ground.
 *
 * @param goal The goal goal.
 * @return A safe following command that will run to a safe goal and then until all mechanisms are
 *     at their goal.
 */
private CommandBase safeFollowProfile(Supplier<ArmState> goal) {
  var toSide =
      Commands.either(
          followProfile(() -> ArmState.passOverToSide(goal.get().side())),
          Commands.none(),
          () -> goal.get().side() != getState().side());

  var toOrientation =
      Commands.either(
          followProfile(
              () ->
                  ArmState.fromRelative(
                      getState().elevatorHeight(),
                      goal.get().side().angle,
                      goal.get().wristAngle().getRadians())),
          Commands.none(),
          () -> getState().end() != goal.get().end());

  return toSide
      .andThen(toOrientation)
      .andThen(followProfile(goal))
      .withName("safe following profile");
}
/** Follows a {@link Trajectory} for each joint's relative position */
private CommandBase followTrajectory(ArmTrajectory trajectory) {
  return Commands.parallel(
          trajectory.elevator().follow(elevator::updateSetpoint),
          trajectory.elbow().follow(elbow::updateSetpoint),
          trajectory.wrist().follow(wrist::updateSetpoint, this))
      .withName("following trajectory");
}

More arm GIFs

Goals for 2024

Going into the 2024 season, we have several (ambitious) goals, focusing on consistency and long term success as a department:

  • 0 code rewrites
  • 100% uptime
  • Unit testing
  • Run AprilTag pose estimation in actual matches
  • Run consistent high scoring auto routines
  • Finish comprehensive rookie documentation and lessons
  • Hand-off robot to drive practice in a week after it’s finished
  • Effectively use GitHub projects, issues, pull requests
  • Some stupidly difficult project to sink time into, TBD

Since we will have a simpler robot this year than last year, and a week 2 event, we need to be able to finish characterizing and testing on the real robot in ~a week and let the drive team have it as soon as possible. This means most shenanigans will be saved for NYC.

Thoughts on Crescendo

Localization will be incredibly important in Crescendo. We plan on having, at a minimum, auto alignment to a single position for shooting. Given the target’s size, shooting from variable positions or while moving isn’t out of the question. While the climb (and our current lack of practice space) make it unlikely, we might be able to automate the operator away.

For our AprilTag detection hardware, we bought two OV9281 cameras last year, and are currently waiting for an Orange Pi 5 to ship.

Thus far, all departments on the SciBorgs have been collaborating to develop a unified robot design. I cannot stress how important this is, since, in previous years, we’ve had much less inter-department collaboration in the design process and the robot was segmented into mechanism groups far too early.

Some important design considerations that we will make sure to enforce:

  • Every position controlled rotating mechanism must have a 1:1 geared REV throughbore encoder
  • The robot must have a reasonable starting configuration and practical movements
  • No single mechanism will have more than 1 DoF, it’s unnecessary this year
  • There must be room (we had ~5cm last year) for electronics in the belly pan
  • The shooter and intake must have adequate sensors

Now, speaking of sensors in the shooter, our design will necessitate keeping track of the position of songs within our conveyor system in order to move. To do this, we’re most likely going to use several beam break or range sensors, such as the LaserCAN.

This week

We plan on finishing most of the initial code for our robot this week (running into next week), meaning subsystems, hardware, and simulations. Additionally, we will work towards verifying the movements of our design by abusing Mechanism2d and AdvantageScope.

Expect updates, especially on some projects with an AMU of 1, soon!

9 Likes