Week 1: Strategy & Design
As we mentioned last week, due to NCSSM’s schedule students did not return to campus until January 7th. Subsequently, our team enjoyed Kickoff from our homes and met virtually on Sunday before reconvening in person. We had our first full team meeting on Wednesday.
Our Strategy
This year, we aim to prioritize simplicity and reliability. Due to the 5 points gained for each coral scored in L4, we are specializing our robot to fill the 12 scoring spots on L4 for 60 points. Our L4 cycle should take 10-12 seconds.
Very early on we decided that we did not want to prioritize climbing and put it on the “Will Not” list as the amount of time spent developing and testing the climber would not be worth the points it gave during a match. Additionally, we determined that the processor scoring was not worthwhile due to it only being a 2-point net gain.
Therefore, our priority list lines up to be the following:
Requirements:
- Drive
- Intake from CORAL STATION
- Autonomously align to SCORING PIPES
- Score in L4
- Score in L2 and L3
Nice to Haves:
- Score in L1
Will not:
- Ground Intake
- Algae in processor
- Shallow Climb
- Deep Climb
- Algae in net
(If we complete our “requirements” and “nice to haves” ahead of schedule, we may reconsider our “will nots.” For now, this remains unlikely.)
This chart shows our potential point breakdown, with our robot scoring 2 L4 coral in auto and the remaining 10 L4 coral in tele-op:
L4 Coral Strategy |
|
Auto Points |
17: 3 (LEAVE) + 2*7 (L4) |
Teleop Points |
50: (5 points/cycle * 10 cycles) (Only L4) |
Endgame Points |
2: (Park) |
Total |
69 |
One compromise with this strategy is that it does not significantly work toward the Coral or Barge RP. Because the new RP system adds emphasis on winning the match and decreases the significance of additional RP (winning a match still counts for ½ the total possible RP while an additional RP now only accounts for ⅙ the total), we believe this is a fair compromise to make.
Wednesday: Team members reviewed the game manual and passed a game manual quiz! After assessing other potential strategies, we voted to pursue the L4 CORAL Strategy.
Field Element Construction
Thursday: We fully assembled the CORAL STATION, and cut the PVC pipes for the CORAL game elements. With our strategy, we are only assembling the CORAL STATION and REEF.
Saturday: We started assembly of our REEF pipes using this model that uses 3D printed connectors and PVC pipes. This design worked well and didn’t require any glue, however, we did have to sand down some of the pipes to fit and add tape around the connectors for others. We cut out pieces for the REEF base following the field element design provided by FIRST, which proved to be a lengthy process as our school’s larger ShopBot was broken. Once we have one of the sides fully assembled, either Monday or Tuesday of next week, we plan to cut the other two REEF sides with the (hopefully fixed!) ShopBot.
(as an added bonus, the PVC pipes and 3d printed connectors resemble zebra stripes!)
Early Design Process
With strategy goals decided, our design team began brainstorming robot archetypes and geometries. Here are some of the proposed archetypes and geometries.
Passive Intake + Outtake!
- Base + 2 stage elevator
- Passive end effector similar to 3255’s prototype
- End effector vertically offset from carriage to reach L4
Sideways elevator with rotary intake on the last stage
- Sideways elevator to make passthrough easier
- The same end effector used to intake and outtake
- Rotating intake to “dunk” on branches
2-stage elevator with carriage
- 1 DOF
- Scoring is far away from L4, will fall off if not accurate
2-stage elevator w/ refined end effector
- 2 Stage elevator + carriage
- The end effector design used here has a third set of compliant wheels that are used to guide the coral onto the L4 reef and prevent backlash or flicking after the coral is ejected, currently being prototyped
As we refined our understanding of the robot and field geometry, we listed some design goals/preferences :As we refined our understanding of the robot and field geometry, we listed some design goals/preferences:
- Minimize DOFs: Focusing on keeping degrees of freedom (DOFs) minimal helps simplify the mechanical design of the robot and the software behind it.
- This is a general good principle, but we are placing special emphasis on it this season.
- Avoid stacked DOFs (e.g. adding an arm)
- Passthrough: Outtake on the opposite side of the robot through which it intakes.
- The nearest faces of the reef face towards the coral feeding stations. Therefore, by having a passthrough, robots don’t need to turn around to score on the reef.
- Low Center of Gravity (CoG): Especially with how much we need to extend to reach L4, and how high the coral station is, we need to be wary of CoG in our designs and take steps to lower it.
- Allows the robot to be driven more aggressively with less risk of damage/tipping.
- Since our strategy is focused on under-scoping and hyper-optimizing, this is one of the most important aspects to optimize.
- Wide intake, narrow outtake:
- Even with the grooves in the coral station, a wide intake will help account for alignment errors.
- A narrow outtake makes alignment to the branches easier and more consistent, decreasing cycle times
We decided to move forward with a 3-stage elevator archetype:
This is similar to our 2-stage + carriage archetype but adds another stage. We initially wanted to stick with a 2 stage elevator for simplicity, especially since we could use the same continuous belted rigging as our 2023 robot, Chimera. However, a 3-stage + carriage elevator brings the intake and end effector to a lower stowing position, therefore lowering the CoG. Furthermore, this archetype also has the advantage of a separate intake which allows us to achieve a wide intake.
This three-stage elevator design uses an internal belt rigging loosely based on 4414’s elevator from 2023, though ours is designed such that the only tube machining needed is drilling clearance holes in some tubes for the belt runs. This is harder to rig and repair, but we determined this trade-off to be worth it given the overwise simplicity of the robot compared to the tradeoffs that other archetypes present. Overall, we found this archetype appealing since it achieved all our goals and preferences the best, with the only significant point of complexity being the elevator.
Additionally, we will continue using SDS mk4is as in previous years. For our swerve, we chose an L2 ratio and Grip Lock wheel, because of the accuracy and traction it provides.
Early Prototyping
Thursday/Saturday: Our first prototype this season was an outtake to test angles, distances, and compliance needed to score CORAL on the REEF, especially on L4. We assembled the outtake Saturday and messed around with it a little bit, and next meeting we will be able to more thoroughly test its limits and capabilities.
Code Architecture
Now that we’ve mostly decided on an archetype, we’ve begun discussing how to control this robot. We’ve also been giving mechanical unsolicited advice
- don’t get algae or coral stuck
- sensor to know if we have a coral, one in the intake spot and one in the scoring spot
- need to make sure our mechanism can’t hit scoring pipes
Action Servers
We extensively use ROS’s actionlib framework for our code and create action servers for most robot functionality. Here’s a recap from our 2023 whitepaper:
“The ROS actionlib library is a client-server setup for asynchronous robot operations. A client sends a request (“goal”) to a server to start an action. The client code continues as the server runs the requested action in the background. Client code can query the state of a server request, allowing that client to synchronize one or more actions happening in parallel.”
We arrange our actions hierarchically. The lowest level servers (usually with names ending in -er, leading to names like the “intaker” and “elevator”) directly control mechanisms. We then create higher-level actions that call these lower-level actions (usually with names ending in -ing; for example, the placing server will call the elevator and outtaker/roller servers to raise our elevator up and then outtake a CORAL). Finally, we have a few servers at an even higher level (e.g. a server to autoalign to the REEF and place a CORAL, calling our autoaligning and placing servers); these are usually the servers called directly by our tele-op node.
Writing individual, modular action servers that work together to build complex behaviors has had many benefits. We’ve been able to divide up programming work by action server, leading to more tasks for people to do. We can swap out actionlib servers to replace functionality, assuming servers share the same action message definitions. We can more easily test individual parts of the robot. We log every goal/feedback/result message, through the rosbag tool. The list goes on.
The servers we’re planning on building this year are (note for next year: starting with the actions we want our robot to do is probably better than starting with individual mechanism servers):
Lower-level
- Elevator: move the elevator to a specific position
- Goal: Enum for elevator position (intake, L1, L2, L3, or L4)
- Feedback: Percent complete
- Result: Succeeded or not
- In progress
- Intake: intake a CORAL, stopping when sensor triggered (indicating we have a CORAL)
- Roller: controls CORAL management in end effector
- Goal: Enum for intaking (from intake/handoff) or outtaking (ejecting CORAL)
- Feedback: Nothing
- Result: Succeeded or not
Higher-level
- Auto aligning: auto aligns to the nearest REEF face
- Goal: Enum for left or right pipe
- Feedback: Current alignment error
- Result: Succeeded or not
- In progress
- Placing: places a CORAL
- Goal: Enum for level (L1, L2, L3, or L4) + a bool for only raising the elevator
- Feedback: Percent finished
- Result: Succeeded or not
- Other servers it calls: Elevator, roller
- (not an actionlib server) Autorotate: rotates towards the nearest REEF face or coral station
- Auto aligning + placing: self-explanatory
- Goal: Enum for left or right pipe, enum for level (L1, L2, L3, or L4)
- Feedback: Current state
- Result: Succeeded or not
- Other servers it calls: auto aligning, placing
This will change as the season goes on, but this is a good starting point.
Other random stuff
We’ve also been setting up our code for 2025 (e.g. importing the Reefscape field and AprilTag locations to our 2D stage simulator, updating the WPILib version, etc). Additionally, our swerve velocity control might be a tiny bit more accurate soon (we’re now accounting for the fact that the robot drives in an arc instead of a straight line while rotating and driving, aka implementing WPILib’s ChassisSpeeds discretize function). We haven’t thought extensively about autonomous modes yet, but our main objective will likely be to score as many L4 CORAL as possible (and potentially push alliance partners off the ROBOT STARTING LINE to get the AUTO RP).
Moving Forward
Looking ahead, we believe that to make L4 worth it, we must minimize our cycle time. Some ways we plan on doing this is to optimize auto-alignment and give our driver ample time to practice. So, it will be important for the mechanical team to finish the design and fabrication of the robot quickly so that the robot can be handed off to the programming team and driver. (Easier said than done)
Snow
Not entirely related to robotics, but it snowed at NCSSM for the first time in 3 to 4 years! This did slightly delay our Saturday meeting, but we enjoyed going outside and touching grass snow!
This was a long post – thanks for reading, and we’re excited to post next Wednesday!
P.S.: Just a reminder that we are all youth participants! We ask that all discussion regarding our Build Blog stays on Chief Delphi and that other questions/comments be redirected to [email protected].