Sorry it’s been a while, but I’m back with a huge progress update! Here’s what we’ve been up to the past two weeks. Shoutout to everyone on the team who compiled all of this info and pictures!
Drivetrain
Before the season, we decided that we’re going to use the SDS MK4i swerve modules for our drivetrain so we went ahead and assembled those ahead of time so that when we had all the tubes for the frame we could quickly assemble it. After mounting the swerve modules we attached the drivetrain rails. These rails would anchor the lift supports and had grommet holes to allow for cleaner wiring.
They were also reinforced with a gusset on one side and MAXtube endcaps on the other because the gusset would clip with the lift so with the endcap we could just screw it directly to the frame. Soon after putting on the rails, it was time to mount the belly pan, in order to lay out our electronics. We ordered our belly pan a few weeks prior through SendCutSend, as it would’ve been too large to fit on our CNC. Although it took a while to arrive, it arrived safely and was sized accurately.
After getting the bellypan on, it was time to start mounting electronics and wiring up the robot.
While attaching the radio power module, we accidentally overtightened one of the nuts on the corner and the case broke so we decided to just drill two holes on either side of the RPM on the bellypan and just zip-tie across.
With all the electronics and swerve modules being wired and connected to the PDH, drivetrain wiring was finished but still far from the current configuration being finalized.
We then realized that in order to put on the two elevator plates, we would have to take out two of the back swerve modules because they were blocking access to the drivetrain rails and our rivet gun couldn’t fit in the gap. For other small spaces, we used a manual rivet gun, which was much easier to fit in the gaps.
After we got those plates on, we attached the base stage tubes to the plates as well as the support tube to strengthen the structure and then we put the two back swerve modules back on.
Ground Intake
Assembly of the ground intake was more or less a straightforward process, with small adjustments made accordingly along the way to resolve issues that came up.
Assembling the intake arms
There were three main tasks that were necessary to assemble the ground intake: putting the wheels on the roller shaft and attaching it to the polycarb intake arm, assembling and attaching the gearbox to the drivetrain, and attaching the arms to the plates.
To assemble the roller, we put on mecanum wheels and Thrifty squish wheels, similarly to our prototype, in order to center the cubes into the cutout.
This year, we opted to use bearing hats on top of the bearings in order to make sure that they would not move or fall out during matches. Here is a link to the CAD:
Onshape
Bearing Hats
Washers to hold rivets
An issue we came across while riveting the bearing hat to the polycarb arm was that the holes in the polycarb arm were too large; this prevented the rivet from being able to grab onto the end of the plate and fastening the bearing hat to it. This was an easy fix though, as we just used washers with smaller holes on the plate to prevent the end of the rivet from slipping through.
Initially, we 3D printed the bearing hats with PETG, but later realized after one of the hats broke they would likely be vulnerable when force would be applied to the polycarb arms (ex. if another robot rams into us). In order to alleviate this problem, we reprinted new bearing hats out of GF nylon to improve the stability and structure of the intake.
The last task to assembling the polycarb arms was to attach the roller motor onto the arm. We screwed the motor onto the arm with a spacer extending the distance of the motor shaft so that it would allow the motor pinion to spin freely. This however came with a few issues, one being that the motor and spacer were not directly perpendicular with the arm because it was only fastened with two screws. The lessened distance caused the belt tensioning to be looser than expected, so we reprinted the motor spacer with a third hole in the back to better hold the motor down.
With that, the arms were assembled and were ready to be attached to the gearbox.
Attaching plates and gearbox
The intake plates were milled out of aluminum in order to provide strength and solidity to the intake as they would be responsible for carrying most of the load. We countersunk the outside holes of the outermost plates so that the rivets attaching it to the drivetrain rails would be flush with the bumpers. The outside plates were then riveted into the rails, and then the inside plates on the other side of the drivetrain rails were riveted as well. This was a bit of a struggle due to the spatial constraints with wiring occurring on the drivetrain, but we were eventually able to rivet most of the holes to support the intake.
We then put the middle plate between the inside and outside plates. The three plates were fastened together with 4” screws spanning the entire length of the inner to outer plate, separated by aluminum spacers to keep the distancing accurate. We then assembled the gearbox for the actual actuation of the intake, the dead axle tube nuts were inserted into the ends of the two cut dead axles, and the through bore encoder was screwed into the left plate.
Fastening arms to plates
Before attaching the arms to the intake plates, we screwed the RT25 pulleys into both sides of the polycarb arms. Then, we used two bronze bushings on both dead axles as a rotation point for the intake. We decided to use bushings as opposed to a spacers in order to account for the fact that the point of rotation for the ground intake would heat up during a match due to the constant movement of the intake, which could cause a 3D printed spacer to melt. We then ran the bottom intake shaft through both sides of the attached intake plates, making sure to place the other RT25 actuation pulley at each end of the shaft.
We then put both sides of the polycarb arm onto each bushing on the dead axle, belted the pulleys together on each side (the small RT25 pulley to the RT25 on the intake arm), and screwed in the dead axles into the intake plates. This was a bit difficult given that the length of the dead axle was exactly the distance between the inner and outer plates, but we were eventually able to squeeze the dead axle between the plates and screw them in their corresponding holes.
With the intake arms being connected to the intake plates, the assembly of the ground intake was complete.
Things to look out for
The reason we decided to choose a RT25 pulley/belt system was because it was a lot lighter than using chain and sprocket, and it also simplifies the process of having to mess with chain tensioning. However, after receiving information from OA teams about RT25 belts potentially skipping, we have been reconsidering if we should switch to a chain and sprocket to actuate the intake. Belt skipping could cause inaccuracies with the through bore encoder, which is meant to record the rotations of the shaft, and could therefore lead to inconsistent rotations of the intake.
The good thing about RT25 pulleys is that the center to center distance of the pulleys should be almost the exact distance if we were to switch to chain and sprocket instead of belt and pulleys, so fixing this potential issue should not be too complicated of a process.
Gripper
The assembly of the gripper went quite smoothly for the most part, except for a couple of things, such as the preparation of the motors.
Getting the shafts and rollers on
The rollers of the gripper freely rotate around a shaft, and are driven by pulleys. Attaching the shafts was quite easy, as we had precut and tapped them. One of the shafts had metal shavings in the tapped hole, which made it difficult to screw it in but we cleared it out with an air duster. We used the same infinity belt configuration we prototyped with earlier for the two top rollers which worked out well. However, for the bottom two rollers, we couldn’t find the exact belt we used for our prototype and the older belt of the same size we found was too worn to use so we had to order a new one. This new belt fit quite nicely, and was about the perfect tension to have every roller on the gripper be driven reliably.
Preparing the motors
Preparing the motors was something we thought to be easy, but in fact, it turned out to be a bit of a hurdle in the assembly of the gripper. The motors we were utilizing were two NEO 550’s, one for driving the rollers, and one for driving the extension of the gripper. Note that the rollers had quite a bit of resistance when being free spun, as this will be important later.
The NEO’s would both require REV ultra-planetary gearboxes to get the necessary torque, so we decided to go with 3:1 cartridges. To drive that cartridge, we had to press the necessary pinion for it onto our NEO’s, which we didn’t carry any spares of at the time. However, the planetary gearboxes come with FTC 550 series motors (REV HD Hex), and they have the necessary pinions already pre-pressed onto them. We decided to “steal” these and reuse them on our NEO’s.
To remove the pinions from the HD Hex motors, we used a heat gun to thermally expand the pinion, and this worked quite well to remove the pinion from the motor’s shaft after prying it off with two screwdrivers. Then, once the pinion had cooled to a temperature we could handle it with, we pressed it onto the NEO 550 with a quick-grip clamp. The process of pressing the pinion onto the NEO’s was suspiciously easy and we did research on this. Later we noticed that the shaft of the NEO was undersized in relation to the pinion we were using. We also tried testing it on the gripper, and because of a combination of the resistance that the rollers had as well as the loose pinion, the motor would rotate freely, but not spin the rollers. We saw that this has been an issue for quite a while, until we found this CD thread [link] about solutions. We decided to try the crimping tool idea that essentially deforms the NEO’s shaft, and expands it out in the adjacent direction. After testing this on a spare NEO we had, we liked how it worked, and did this to our gripper motors. Pressing the pinion on felt much more secure now, and we also decided to swap out the 3:1 planetary cartridges with 5:1’s so there would be less torque needed for the motor to rotate, and less of a chance for the pinion to come loose. We then reattached them to the gripper plates and ran a test using our prototyping board, and it was able to spin freely on its own, and we plan on testing with actual cubes and cones once we finish more aspects of the robot.
Assembling the extension stage
Assembly of the extension stage was quite easy for the most part, with the only issue we ran into being bearings not fitting into tubes correctly. We suspect this to be because of the powdercoating making it’s way inside of the hole, as well as not leaving enough tolerance for the bearing. This was easy to solve however, and we just had to deburr the inside of the holes to expand them slightly. One issue we had with the 3D printed clamp was the design and print orientation.

With testing, the layers separated, causing the clamp to fail and required a redesign. Our newly designed clamp was able to be printed in a better orientation, which worked well. Note that the hex bore in this picture is a bit loose, so we’ve reprinted since then.
Changes we want to make
Right now, when intaking cubes there isn’t a mechanical hard stop. We don’t want to solely rely on code for this, so we plan on attaching an additional shaft above the cube intake for the cube to intake into, and not just fly out the top.
Additionally, with further testing, we’ve seen that even with a 5:1 ultra-planetary stage, the NEO 500 still struggles to rotate all three gripper rollers consistently. We plan on either attaching additional stages or switching to a full sized NEO if space permits to resolve this.
Some upLIFTing progress!
The first step in assembling our lift was to assemble the carriage that the gripper is mounted on. The carriage plates were milled and the 10-32 holes for the shoulder screws were tapped on our drill press instead of the CNC. A major issue with using the drill press is the fact that the speed in which the tapping bit goes into the plate had to be just right, or the threads would not be suitable for the screws we had. After messing up and tapping a spare plate incorrectly, we managed to successfully tap the holes for the carriage plates on the second try, with a lower speed and checking the alignment multiple times.
Bearing Block Assembly
Once the plates were milled and tapped, we started to assemble the bearing blocks that would constrain the carriage from moving left and right. The bearings had to be fit onto a dowel a specific distance from the edge which proved to be very challenging to get exact. We tried press fitting the bearings onto the dowels but this was very time consuming as it was mainly just trial and error and the bearings were pretty fragile.
In addition to this, we realized that the tolerances for the dowel slots were too tight, so the bearings and dowel wouldn’t fit perfectly into place as we hoped. The hole for the bearings was too small so there was friction between the bearings and the plate and the half-pocket was too deep which could potentially cause the carriage to wiggle in the middle stage. At first, we tried to widen the holes in the plate with a drill to accommodate the bearings and dowel but this didn’t work very well. After several broken bearings, we decided to sand down the dowels themselves so that the bearings could easily slide on them. In the future, we will probably design a 3D printed jig that we can use to properly align the bearings on the dowel so that this process can be sped up.
In milling, the z-axis was not accurately zeroed, so the depth of the dowel rods’ slots was not accurate. The wobbliness of the carriage is dependent on getting this depth accurately. We 3D-printed shims of various depths (1mm to 2mm) to place inside the slots to bring the dowel to the correct depth.
This worked very well for us and the bearing blocks were able to be completed and installed in the carriage while the rest of the carriage was assembled in parallel.
Once the bearing blocks were somewhat in proper alignment, we decided to finish up the carriage by mounting the springs and standoffs to the plate. We also built our ratcheting axle that the lift belt would attach to. We did this by sawing off half of a ratcheting wrench, and sliding the ratcheting disk onto the axle.

We then zip-tied the wrench down onto the carriage plate. This would ensure that the axle only spins in one direction so that we could later properly tension the belt without cutting it to an exact length.
Assembling stages together
The next step after assembling the carriage was to make sure that it fit within the middle stage properly and attach the gripper assembly to it. When we first slid the carriage into the middle stage, it fit pretty well and it moved up and down smoothly with relatively no wiggle room. However, we notice that some of the bearings weren’t fully contacting the middle stage. We then tried to fit the gripper into the carriage and we realized that it wouldn’t fit in and the carriage and middle stage were slightly bending outwards due to the gripper being too wide. After measuring and remeasuring, we realized that the carriage was an eighth of an inch too small so we decided to recut the shafts and reassemble the carriage.

This allowed the gripper to fit into the carriage perfectly and simultaneously fixed the issue of the bearings not fully contacting the middle stage. With the gripper on the carriage, it still moved very smoothly and there was still little to no wiggle room in the middle stage.

Middle stage was then put onto base stage which was already mounted on the drivetrain and then after we fastened the top tubes for both the middle and base stages, lift was complete! Until we tried moving it
We realized that there was an undetected clip between one of the carriage standoffs and the pulley at the top of the base stage.
We decided that we could just remove that standoff entirely since there were already several standoffs holding the carriage apart on top of the gripper tubes and other shafts on the carriage. We also noticed that the constant force springs weren’t spaced correctly apart after we widened the carriage so one of them was actually hitting the pulley as well. After moving the spring over and removing the standoff, the lift was pretty much complete! All that was left to do was to rig the belt through the lift and attach the motors.

Rigging
The next day we rigged the lift by feeding the belt through all the pulleys and securing it at the bottom with zip-ties and at the top with tiny 4-40 screws onto the carriage. With the belt needing to be centered on the carriage, we decided to fasten the end of the belt to the center of stand-off. We resorted to using two 4-40 screws side-by-side because they were small enough to fit two end caps on the belt for proper securing and small enough to screw into one of the hex faces of the stand-off. Tapping the holes for these screws was a challenge as the holes had to be very precise and if the tapping bit broke while inside the shaft, we would have to scrap it entirely. In fact, we broke multiple bits while practicing tapping on a spare shaft. The strategy for this that we learned through practice was that the 5/64” pilot bit we used to make the original hole had to be drilled through the whole shaft. If it was drilled through only one half (stopping at the hole in the middle), the 4-40 tapping bit would instantly break, as the tip would hit a solid surface, in this case the second half of the shaft. Apart from this issue, we followed normal practices like keeping the bit as straight as possible and making sure oil was used.
We then used the ratcheting shaft on the carriage to tension the lift properly. Right now, the lift is pretty smooth but there is still a little friction from the powdercoat on the tubes and at the transition between the side and top tubes of the middle stage. This makes it so that its hard to start moving middle stage out of base stage but it’s easy to move after that point.

Over time, the powdercoat will rub off but as for the transition between the side and top tubes, we decided to file down the corners of the tube near the transition in order to allow the bearing to smoothly transition between the tubes. From our testing, when the carriage comes up and hits the top of the middle stage with enough momentum, the resistance caused by the bearing getting caught is negligible. We do plan on adding padding at the top though so when the carriage does slam into the top of the middle stage, it doesn’t damage the tube. The two NEOs on either side and the cable carrier still have to be attached but other than that, lift is looking pretty complete.

At this point the robot was looking almost complete so naturally we decided to have a little photoshoot: