Citrus Circuits 2022 Code and CAD Release

Citrus Circuits is proud to release the CAD for our 2022 robot, Margie, and software for our 2022 robot and scouting system. All github/onshape links, as well as our latest scouting whitepaper, can be found here:

We hope these resources are valuable to the community. Our students have worked hard to prepare them for the community with context and comments on the resources where possible, but I’m sure there are things we’ve missed or could go into more detail on, so please feel free to leave any questions or comments here!




Hi, I was wondering what the purpose of the clamps near the top of the telescoping beams were.


One of the highlights of the year for me. I love digging through the 1678 CAD - I still regularly refer to the 2019 robot any time I have to deal with an elevator. Thank you for making these resources available!


During our initial testing with this climber we noticed the inner bearing blocks were actually denting the outer tube outwards during our climb sequence.

The loads were pretty high from the swinging so the inner bearings pushing out against the tube at the end of the extension would actually put a little dent in the tube. The tubes are 1/16th wall, so to add a little more strength we added the clamps to support the walls a little better just in the area that we needed it. This solved our issues.


Here’s a quick video that shows this deflection on the early climber build.


Thanks a lot! One more question; is there a reason why these climber shafts stick out?


Great question!

Those shaft features allowed us to quickly retract the climber arms when the robot was disabled. We stuck a 1/2" driver bit on a drill w/ extension to retract the arms after getting the robot off the bar. This sped up our process of reseting the robot and getting it out of the hangar and off the field.




From Helena, the student who designed the climber.

“ The reason that shaft sticks out is for ease of reset. When the arm is fully extended, it’s too tall to allow to robot to get out of the hangar zone without winching it down, so having the shaft stick out allowed us to winch the arms down using a socket and a drill instead of having to turn the gears by hand.

The shaft consists of hex shaft which has been turned down on a lathe to 0.5” round on the side that doesn’t stick out, and has been turned down to 0.5” thunderhex and inserted into a thunderhex bearing on the side that does stick out. This allows the gearbox plates to capture the shaft and prevents it from sliding around. ”


Whoops, sorry Mike, didn’t see your answer before replying


Helena’s explanation is better anyway!


Thank you both so much! Having to winch our telescoping arms is something we’ve had issues with this season, so this is a really smart solution!

1 Like

Hi! Thank you for publishing these resources. It’s been really cool to dig around and in taking a look at the CAD, I had some questions:

As this is my first post, unfortunately I can neither embed more than one image nor place more than two links, so I have put the screenshots referenced in 1-6 here.

(1) What is the purpose of the circled plate that is attached to the motor powering the intake? Why not use spacers that are a quarter inch longer?

(2) Why are the intake axles turned down on the ends rather than leaving them as ThunderHex?

(3) (On the intake deployment gearbox) Assuming the holes circled are intended for bearing retention, what is the motivation behind their placement? Specifically, why is it that the line connecting each one’s center does not pass through the middle of the bearing hole?

(4) Perhaps this is just an error in the thickness of the aluminum shown in the CAD, but how is the circled interference with the bearing and motor dealt with?

(5) Is there a particular reason why the gusset circled on the drivetrain uses a spline to form the t-shape geometry rather than an arc/fillet?

(6) From what I understand, the orange circle represents the location of the primary color sensor used when cargo enters the robot. What is the purpose of the color sensor circled in red?

(7) Why was the hood placed into its own assembly rather than being modeled together with the rest of the shooter?

(8) What was the process for choosing the right diametral pitch and pressure angle for the rack and gear used for the hood?

(9) How was the correct extension force determined for the gas shocks on the climber?

Sorry, I’ve now asked far more questions than I originally intended to. As you can probably tell, I had a great time being able go through Margie’s CAD.


Could someone please clarify the difference between snap and vision alignment? I’m impressed by how quickly you rotate your robot toward the goal.


We had the same thing happen on our citrus style climbers, this was the result after an event of running, the tube almost started splitting. Replaced the tubes and added the clamping plates for our next event and it fixed the issue.


What kind of pulley is this?


Thanks! Our snaps and vision alignment are actually two separate features, with the key difference being how the driver initiates each function.

Snaps are what we call our controls for turning the robot to a specified heading with a single button press. They function by using a PID controller to take over rotational input until either the target heading is reached or the driver decides to ‘break out’ of the snap by sending another rotational input, either through moving the rotation joystick, or another snap or vision align. We primarily used snaps to line up to shoot from the fender this year.

Vision aligning works similarly to our snaps (PID controller using the robot’s heading), except the driver instead holds down a button to activate vision-align driving. We then get our target angle through our limelight, or odometry if the target is out of our field of view. Additionally, the vision-align drive also enables closed loop control on our drive motors for more precise aiming.

During normal tele-op driving, our drive motors run simple percent output control. We found that using this while vision aligning led to sluggish corrections when the angle error was small, making shooting from long distances unviable. Between Hueneme Port and Sacramento, we added tuned feed-forward constants (kS, kV, kA) to increase “snappiness,” especially during small corrections, and PID feedback control on the drive angle motors to allow the motors to draw more voltage when facing resistance, such as a defender. We also used a fixed-angle variation of our vision align drive to line up for our climbs.


What is the purpose for this cover on the trigger wheel pulley?

Also what are these standoffs you’re using for mounting the polycarb?


What made you want to use 2 motors instead of one for the flywheel?

1 Like

Oh ok so they’re separate, that makes sense. I’ll definitely take a look before I go to IRI cause we had all the aiming mapped to one button regardless of additional driver input. I think I could use that to reduce tippyness

Also it’s such a scam we never interacted in hopper I wanted to race climbs. :slightly_frowning_face:



Hey everyone! In addition to the release of our competition CAD for Margie, we’ve also gone back and cleaned up the CAD for our two other robot iterations we did this year, and we’re excited to share them with you all!

We’ve just updated the CAD & Code release page on our website with the Onshape documents for each of these robots. Alpha was the robot we threw together in those first 9 days of build season, and Beta was the sort of intermediate stage between that robot and our comp iteration. As always, let us know if you have any questions!