Cartesian Robotics #8561 | Build Blog 2024

CARTESIAN Build Blog | CRESCENDO | 8561

Introduction

#8561 Cartesian Robotics is excited to make its first appearance in the Open Alliance, hoping to make it a team tradition!

We will mainly be a 5-people team posting for the blog and some of our team members will assist us with the Q&As.

  • Esin Sağlam - Team Captain, Blog Editor
  • Orhun Uzun - Electronics Lead, Blog Editor
  • İbrahim Bal - Programming Member, Blog Editor
  • Tan Tacettin - Mechanics Co-Lead, Blog Editor
  • Ege Doğanay (Me) - Engineering Mentor & Team Founder, Blog Editor

For the 2 upcoming days, we have 5 planned posts:

  • The Kick-Off Event
  • Our Off-Season Work
  • Season Callendar
  • Season Goals and Strategy
  • What We Have Done & Current Prototypes

After the planned posts, we plan on posting at least every 2 days!

Our History

Cartesian Robotics is more than a team. It is a community. 8561 is a student-found, school-based (METU DF High School) team in Ankara, Turkey. The community’s journey started in 2020 with the goal of establishing a strong foundation and opportunities for students who strive to develop in STEAM.

8561 first made its debut in FRC during the 2021 Infinite Recharge Season. In the 2022 season. We became the Istanbul Regional Winner and got awarded the Highest Rookie Seed (Ranked 2 out of 48). In the 2023 season, we faced some obstacles that taught us a lot.

With 72 members, our goal is to push our boundaries and learn much more in the 2024 season!

We will be competing in:

  • Istanbul Regional | 5-7 March (Week 2)
  • Marmara Regional | 22-24 March (Week 4)

Team Links

We hope to reach as many of you as we can!
Feel free to ask any questions : )

3 Likes

Kick-Off

For kick-off, our team designed an activity night for our members and their parents. We invited 100 people in our school to the event and told them about FIRST and its principles and made a brief presentation about FRC.

Our department captains talked about their departments and their jobs. We played a Kahoot about FRC and distributed various awards designed by our team members.

Our PR department held a driver contest between the guests. They challenged themselves by trying to drive our robot and had special moments.

When the time came we watched the kickoff livestream. We finalized the night with the unboxing of the game elements.

2 Likes

Off-Season and Pre-Season

Mechanics

Before kick-off our team looked through previous years games and had predictions about Crescendo 2024 game. In order to get ready for the season we built up robot parts and subsystems that can be helpful in the season. Our mechanics crew divided into 4 groups to work on 4 subsystems:

1-Quick-Release Bumper Mechanism
2-Cycloidal gearbox
3-Four bar intake
4-Adjustable Shooter Prototype

Groups worked on their projects for 6 weeks and presented their products to other team members.

After the kick-off we got our kit and our mechanics crew divided into groups to increase our work efficiency for the season and make a rapid start. Groups started working immediately after reading the necessary parts in the manual. Groups were specialized in their working areas are as follows:

1-Inventory
2-Bumper
3-Robot car
4-Playfield
5-Robot

A last group of our experienced members started the draw the first CAD models of our robot after making huge brainstorms and long meetings. Cartesian robotics is proud to present the first model just 10 days after the kick-off.

We will share a directory for our CAD this week once it is organized.

Electronics

Our electronics department is responsible for the wiring of the robot and developing custom circuit boards when needed. We use EAGLE EDA for designing circuit boards.

In the off-season, we worked on circuit theory and custom circuit boards other than FRC electronics and wiring. Our new team members learned how to analyze simple circuits and design custom circuit boards in EAGLE EDA.

They designed a motor controller circuit that uses the 555 timer IC to create a PWM signal to control the motor through a BJT.

Programming

Our summer journey began with the introduction meeting on June 29. The programming team was subdivided into 3 groups: Web Development, Vision-AI, and ROBOgramming (robot programming). Team Captains gave different tasks to each group to practice their programming skills. The team had a regular meeting, where team captains checked the development of the members and the given tasks every week. For ROBOgramming, our team provided materials about Java for those who do not know or those who want to improve their skills. On the way, we created drive files to store every data and program and made them easily accessible.

On August 8, we brainstormed for project ideas. Groups of 3 to 4 people focused on their projects. We have PRogramming projects like Cartesian Wiki for documentation of team members’ knowledge, FRC Meeting Application for easy communication and meeting of the teams, FRC API for scouting during competitions, and AI Sign Language to easily communicate with the hearing impaired.

Experienced members introduced the electronic components of a robot to ROBOgramming members and downloaded the required apps(WPILib, Game Tools) to program a robot. After downloading WPILib, members learned about the basics of WPILib and Command Based Programming. Members programmed a drivetrain and started to work on PID. With some practice and the help of experienced programmers, we learned how to write autonomous codes and create trajectories.

In the summer, our team worked hard, meeting regularly every week and we made significant progress. On September 12, the school began.

During the following months, we worked on swerve, which our team is trying out for the first time this year. We started with driving the robot in tele-op mode and moved our way up to autonomous. With thankfully very few errors, we were able to successfully program a swerve drivetrain. We later integrated limelight and position tracking. Currently, the swerve can follow AprilTags no matter their orientation, motion, or position.

We now put ROBOgramming on hold for the new robot to be assembled, and are focusing on PRogramming projects.

And here is our long awaited GitHub Link:

4 Likes

We Are Back! Sorry for the Hiatus

For the last month we had an unexpected restoration and reorganization workshop. Meanwhile we were unable to work properly in our workshop. Also we had scheduling problems and could not manage to create a proper posting habit. But now we are back, from now on people who will be posting are:

  • Orhun Uzun: Electronics
  • Tan Tacettin: Mechanics
  • Deniz Şenkul: Programming
  • Esin Sağlam: Public Relations
  • Ege Doğanay: Team Mentor

This week we have set up our practice field in our new space in our workshop. The space was just enough for the quarter of a field, which consists of the amp, the speaker and the stage.

In the meantime, our CAD team proceeded with designing 2 robots. Prototyping team also experimented with intaking and shooting mechanisms, which we will be sharing in our next post. Coming right after this!

3 Likes

First Design Ideas

Hello, I am Orhun. I am in our Electronics and Mechanics department and I will be sharing updates on our blog this year.

Here are the first robot and subsystem ideas that were drawn in CAD.

Intake & Shooter

Our intake has 4 rollers that enable us to pick up notes and shoot them. There are 2 Neo motors that turn the rollers in sets of 2. There are belts between the bottom rollers to guide the note, and we use those belts to store the note at the back of our intake. When we want to shoot the note, we turn the rollers to the opposite side and the note is shot from the intake and the shooter mechanism.

Lift

We have 2 profiles that are symmetric to each other and there is a chain from the bottom to the top of the profile. There is a hook attached to the chain which attaches to the stage chain and when the chain turns, the robot climbs to the chain.

Elevator

The elevator system allows us to put the note to the Amp and potentially to the Trap. There is another intake attached to the moving part of the elevator -which can rotate- and it takes notes from our main intake and drops them into the amp and to the trap when the robot is climbed to the chain.

Robot Assembly

Coming up is our second robot design.

3 Likes

The Second Design

The second design team decided on starting off with sketches. The idea was to combine the shooter and the intake in a single system with the assumption of reducing the cycle time.

The shooter design consists of 4 flywheels. Intaking is done with rollers and two belts running parallel.

We planned the shooter to be mounted on a double jointed system that will allow us the freedom to rotate it to the height and the angle we want for shooting into the trap and the amp.

After completing the rough sketches, which are based on our guesses and our experience, we decided to create a simple assembly to visualise our design.

3 Likes

Prototyping

Now we come to this week’s prototyping. We have decided on prototyping the shooter design with the 4 flywheels. The setup includes 2 neo motors and 4 compliant wheels attached to plywood. We have decided to test 3 and 4 inch compression for the shooter.

Neo motors run the two 60A durometer 4 inch compliant wheels and two T5 pulleys transmit power to the 4 inch stealth wheels that comes from the kit of parts. We have also tested our 3D printed Neo to hex shafts with this prototype.

4 Inch compression:

3 Inch Compression:

And we managed to damage the 3D printed shaft after 20 runs.

As a result we decided to proceed with 4 inch compression and find an alternative solution to transmit power from the Neo to the wheels. Now it is time for the CAD team to revise and tidy up the CAD of the shooter.

Feel free to ask anything :smiley:

3 Likes

Here is our 60cm x 60cm (26.6 in x 26.6 in) swerve drivetrain! We are using L3 modules with Neos

2 Likes

Revised Shooter CAD

A lot of revision is made on our CAD this week. It was the design team’s goal to make the CAD ready for manufacturing until this Wednesday!

First revision was made for the shooter. In order to implement both a shooter and a roller intake a side plate is designed that will hold both the motors and the rollers.

Then according to the prototype the distance between two shooter plates are determined to be 46 cm (18.1 in) The compression is set to 4 inches and we have decided to use 1:1 transmission for the shooter NEOs…

Mechanics team decided to use a single Falcon 500 to power the intake rollers with 2:1 reduction with HTD pulleys.

As you can see on the design, the above and the under of the shooter is left empty. The design team added that feature to allow for the note to slip downwards while scoring at the amp.

An ellipsoid may have caught your attention! That ellipsoid is one of our team member’s unique solution for the problem to keep the intake belt in the center.

Shooter Arm

This subsystem got the greatest improvement! We have decided to move on from a double jointed arm system to a 50 cm arm with a simple linear actuator system we have designed using IGUS helix lead screw which we got from the previous year’s First Choice. The shooter carrier part in the middle, slides on rails again from Igus from 2022 kit of parts.

The lead screw is driven with a 775 RedLine motor with a 85:12 reduction.

We do not have a proper way to manufacture gears thus we decided to get creative and experiment manufacturing gears with a laser cutter by cutting gears from 2mm (~0.08 in) thick steel and stacking them up to obtain a drivable gear.

Current Robot Assembly

The shooter arm will be driven with a NEO attached to a 16:1 Sport Gearbox. We have not decided the sprocket ratio that will be connecting the arm to the gearbox.

As of today this is our final assembly and we plan to proceed from this design. We have sent our shooter and arm subsystems to manufacturing and plan on assembling the robot tomorrow (friday). We will be more than happy to answer any questions!

4 Likes

Assembly Day!

The manufacturing is done and we got all the pieces at our hand for our shooter+intake mechanism. The manufacturing process consisted of laser cutting for polycarbonate shooter plates and aluminium parts, bending for motor mounts and CNC milling for the profiles that will be the structural parts of the robot.

The mechanics team swıftly got to work. The Andymark’s Sport Gearbox that will operate the arm is attached to the bellypan.

The shooter carrier is assembled and the shooter is attached on top of it half-assembled. We are using a voltage controlled PSU to run the 775 RedLine

Here are the test runs of our linear actuator for the shooter carrier

Don’t mind the mechanics team’s music taste :slight_smile:

After the testing we were satisfied with how the linear actuator and the carrier worked so we decided to do the final assembly and attached the arm+intake+shooter subsystem to the drive train.

The electronics team did the wiring and installed the electronics control system while the mechanics team did the testings.

4 Likes

Robot Wiring

In the previous season, our electronics department finished wiring the robot after the robot assembly was finished, so we didn’t have to worry about robot parts colliding with the electronics. However, this year we wanted to finish the robot faster than the previous year, so our electronics team had to start wiring the robot before the robot parts were fully assembled.

We wanted to make a small robot this year and because of that, we had limited space for roboRIO, PDH and all the SPARK MAX motor controllers. We put the motor controllers of the swerve motors on top of the motors. This looks a little weird, but we didn’t have any issues with that for now. We put a piece of plexiglass in the middle of the robot and placed the PDH on top of it. Our roboRIO and other electronics are placed on the belly pan, underneath the PDH. We want to use a Jetson Nano for object detection, but still don’t have a planned place for that yet.

Unlike the previous season, we have a CANivore now, so our CAN network is divided into two. Our roboRIO bus includes only the swerve modules, and our CANivore bus has the other devices. In the swerve bus, each module is connected to each other like a square which makes the can wiring easier, except for 2 modules going to PDH and roboRIO.

For the wiring of the arm, we used cable chains to accommodate the linear movement of the arm. We have 1 neo and falcon on one side and 1 neo on the other side of the intake, so we used 2 cable chains to have a better wiring. The power cables and a CAN cable runs through these cable chains.

1 Like

Mistake of the Season

it turns out that SPARK MAX motor controllers don’t support CAN FD … (it is important to read documentation electronics department !!)

+1 Mistake points

-1 CANivore

+Womp womp

4 Likes

Test Weekend

Today we put the sub-systems to test with a simple code. We wanted to make sure that,

  1. We can pick notes consistently, and established “touch it own it”
  2. The shooter shoots powerful and consistent enough
  3. The proposed design of leaving the floor of the shooter to shoot notes into the amp works
  4. We can score into the trap with our intake in the position we assume our robot will be in when climbed.

Intake Tests

We train our human player at the same time :joy:

And here is us having fun with the robot

Shooter Tests

We tried to run our shooter at different speeds and recorded the results.

We decided to test the shooter with the speaker now,

We have come to the conclusion that while shooting with 100% the note goes too high at the current angle, when at 75% speed the note usually goes lower than it shoots which, we assume, is due to the empty top and bottom parts.

Currently, we plan on running the shooter with 100% and adjusting the angle with the arm’s gearbox. If this will not produce consistent results we need to revise for a solution to guide the notes to the shooter for a consistent output.

Overall the shooter makes powerful shots and we are satisfied with its performance and range!

The Amp Test

During this test, we held the shooter in the position that the arm will be in while scoring to the amp. The programming team is currently writing a PID algorithm for the position. The shooter is again controlled with a controller.

Max Speed:

With 70% Power:

Scoring to the Trap

We wish to get our robot 30 cm high from the ground during the climb. We have not finished our climber thus we did the testing by lowering the trap 30 cm.

Our plan is to set our shooter arm at a 90-degree angle and score with our intake.

The Conclusion

With today’s test, we found out that the polycarbonate is not accustomed to sliding well on the playing field in our use, thus we need to make an addition to our intake that will either prevent it from touching the field ground or make it easy for it to slide on it. We are open to any suggestions from you guys!

Additionally, we need to do more shooting tests to measure the consistency.

The programming department will now steal the show !!!

As always, feel free to ask us questions or give advice!

5 Likes

Quick Update

We have decided to add an physical restrictor to limit the intakes motion in order to keep it in the right angle. We call it the “tear drop”

5 Likes

Programming Jumpstart

With the robot’s assembly nearing its end we have finally begun writing snippets of code. The main systems that we have had time to implement (aside from the basic motor tests) are:

-Vision Processing

-Autonomous

-Arm

Vision

This year, with the help of our Limelight 2+, we have dug our hands in the dirt to try and produce a reliable vision system. While this proves to be a daunting task, especially on the topic of a field-relative system, the reading of limelight relative to a single target seems to be doing fine.

The current biggest problem with vision occurs in field relative readings where it sometimes changes the readings of the x-value (going from +x to -x while not changing the heading). We speculate that this might be the result of a misaligned apriltag or incorrect camera-to-robot pose, but have decided to go with tag-relative readings for now. Another big problem with limelight that we have encountered is the calibration. The calibration doesn’t seem to produce a result even after wait times reaching ~15 minutes. This especially hinders the accuracy of autonomous and delays the writing of a routine code for now.

Autonomous

While we have had most of the autonomous code ready prior to kick-off, we still had to solve some problems with the implementation of field-relative readings. As of now, the main strategy of autonomous seems to be relying on a pid-controller-based command rather than a ramsete or a swerve-drive controller. This is mainly the result of the WPILib’s trajectory class’s limitations that are especially apparent with swerve drivetrain. Aside from that, we have plans to write our own path planner and trajectory generator if required.

Arm

A telescoping arm system is one of the most troublesome subsystems for us to handle or at least that was the case in the year prior, and yet we have a partially working arm system that uses a feedforward constant multiplied by the cosine of the arm angle plus a pid controller. While this is one of the most simple ways to write an arm (and a bit patchy for angles >90 degrees) we have also experimented with motion profiling but decided to continue our experimentations after the routine is complete as we don’t need a full-range motion for our arm.

Plans Going Forward

Going forward we have a ton of ideas that can elevate our robot’s performance to a whole new level. Despite that, our top priority remains to be the completion of a full autonomous routine. We also have in mind a 4-5 piece auto (maybe even more). Aside from the robot code we also have projects that are nearing their end and are seeming to be late bloomers.

Our robot serves as a trophy of high hopes this year especially programming-wise.

Feel free to give us any advice you might have (especially on vision)

Bonne chance!

5 Likes

Well…

It turns out our manufacturer produced the shooter panels from acrylic eventhoug we explicitly told that the panels need to be manufactured from polycarbonate. Here are todays issue : )

The tension on the belts caused the shooter to be under constant stress, hence it shattered last night adter closing the workshop.
We anticipated such an occasion thus we had aluminium ones as spares. We were able to fix it in 2 hours.

The programming is currently working on a 4 piece auto. Videos are on their way!

2 Likes

Lift Update

For our current design, the design team decided that a small form factor is the best option. The design team decided to utilize the empty space on the sides of the robot and designed a scissor lift. The proposed design is that a scissor lift will carry a aluminium hook that will attach to the chain and a gearbox will lift the robot to the desired height. Two of these systems will be available on the robot.

The lift gearbox is constructed from the toughbox mini gears which is avaible in the KOP drivetrain. The gear ratio is 10.71:1 and the output shaft is a regular hex shaft.

The Prototype

One of the members have already designed and printed the scissor lift and tested it with a simple arduino setup. The scissor lift is driven with a 15 N•m servo and it can reach 75 cm when fully extended.

The hook on the lift is symbolical. We hope to print 2 modules with our K1 Max and insert it on the robot until tomorow. Meanwhile the design team will work on a attachment that will carry the hook.

We will be more than happy to recieve comments and questions from you guys!

3 Likes

VOILA

Hi, I’m Beril. I’m one of the team captains and a part of the programming department, I will also be adding updates on our work.

Making Progress on Autonomous

Overall, we’ve been very successful in improving our general vision and autonomous code. We have many options with apriltags in autonomous, which include trajectories (with/without PathWeaver) and using PID with field-relative poses. The hardest parts of autonomous seem sorted out.

Previously, we had multiple issues with robot heading, especially with the values of the odometry and Limelight, however, we were able to fix most of them. The heading being incorrect seems to be mainly caused by the kinematics being defined incorrectly in our code and encoder offsets being wrong (which were very much our mistakes, oops). We got the field relative code working and will probably continue with it instead of using apriltag relative poses. We haven’t worried about limelight calibration or tuning the PID for driving yet but we’ll be dealing with them for better accuracy.

Other than calibration, to increase the accuracy, we’ve decided to use megatags, which give better results for field relative poses since it uses the values of two or more apriltags instead of just one. Megatags seem to have increased our accuracy well, especially when starting the robot where a pose is needed.

As a test, the general routine with 4 game pieces works well so far yet we’ll definitely be pushing for more :slight_smile:

6 Likes

Upgrade of the Shooter

He had a short break where we were busy with recording a video for the Premiere Night. During the recordings we have observed that the consistency of the shooter decreased as we did more cycles. Thus we decided to switch to a more reliable shooter. When we first designed the shooter we have trusted the design of the Kit Bot type shooter, however when we removed the top and bottom plates the exit angle of the piece lost its consistency. We have decided to design a part that will transform out current shooter to a top and bottom roller type shooter. Here is our iteration,


We have also printed shooter wheels due to not being able to find any compliant wheels. We have covered it with non-slip mat. The trials for the new shooter are down below.

A Little Bit of Driver Practice

We started driver pactices, meanwhile the programming continued to develop code that will ease the work of the driver. Hence some of the subsystems still have rough edges for the teleop.

4 Likes

kedy

With only 1 week remaining for the Istanbul Regional we have made significant improvements to our robot that seem to push the robot towards the final design. We worked mainly on the shooter and intake angle commands and we can currently change the shooter’s angle based on the location of the target and (theoretically) shoot from any pose. The angle calculation is basically curve fitting for datapoints we have recorded from various distances. Since we know that the distance and the required angle is proportional to inverse tangent of distance we can easily fit a curve with the equation b0 * (arctan(distance * b1 + b2) + b3). We’d like to thank team 6838 X-SHARC for the curve fitting idea.

Furthermore, we have a working auto-aim command that turns the chassis towards the target. We calculate the slope between the robot pose and the target pose and get the angle using the arctangent of the slope. We unfortunately can’t fully test the auto-aim command with MegaTags since our field is a little bit janky and the apriltags aren’t placed to exact proportion. The code seems to be working perfectly fine with a single target, though.

2 Likes