FTC 20827 Roborpunk 2024-2025 Build Thread

Introduction

We are FTC Team 20827 from Beijing National Day School, Beijing, China, founded in 2021. Our team is driven by a passion for robotics and innovation, always pushing ourselves to explore new possibilities and achieve greater heights. In 2023 and 2024, we had the honor of being part of FGC Team China, representing our country at the FIRST Global Challenge on the world stage.

Why We Joined the FTC Open Alliance

We believe in the power of collaboration and knowledge sharing, which is why we’re excited to be part of the FTC Open Alliance. Through this platform, we aim to exchange ideas, learn from other teams, and contribute our own insights to elevate the global FTC community. By engaging with like-minded teams, we hope to gain new perspectives and together push the boundaries of innovation in robotics.

Core Values

In everything we do, we strive to uphold the spirit of Gracious Professionalism , ensuring that we work with respect, kindness, and integrity. We also firmly believe in the Declaration of Interdependence and the Bill of Responsibilities, recognizing that our success is interconnected with the success of the global community.

Build Thread Updates

We will be providing weekly updates on our progress, including code development, CAD designs, and the physical build of our robot. Through this regular sharing, we hope to contribute to the collective knowledge of the FTC community and inspire new ideas as we move forward together.

Our goal is not only to grow as a team but also to promote STEM education in China and beyond, while fostering a culture of openness, cooperation, and continuous learning within the FIRST community.

4 Likes

Mechanical Update Week 1

Chassis: We selected a simplistic approach when constructing this component. The rectangular chassis is made out of numerous U-shaped beams, with several truss structures and the robotic arm mounted on top of it. We attached four wheels to the four corners of the chassis, and connected them to their respective motors. During the prototyping process, we encountered a problem: the chassis is not wide enough for our robotic arm to function properly. Initially, we decided to replace the beams with longer ones of the same type; then we realized that there were no longer U-shaped beams. Ultimately, we replaced the U-shaped beams with longer C-shaped beams which, fortunately, we have acquired already.

Arm:As their names suggest, the high baskets and the high chambers which our robot have to reach during the competition are relatively elevated. Thus, we decided to elongate the robotic arm to ensure the required altitude would be within reach. Our robotic arm comprises of a main truss structure and several slider modules; with the aid of reel pulleys, wires, and several servomechanisms, the arm could extend and retract. We utilized two DC brush motors to power both sides of the arm, and we used two sets of bevel gears as the junction between the motor and the arm so that the motors remain vertically stationary but the robotic arm could move back and forth. Finally, we added a small pivoting arm that could move via the servomechanisms at the end of the arm.
屏幕截图 2024-11-04 172027

Claw: We took inspiration from the Team12527 robot’s design, refined it and combined it with our own. The mechanism works flawlessly, and we will continue testing and improving our design.


4 Likes

Mechanical Update Week 2

Initially, we employed a set of bevel gears to connect the arm and the motor. However, this design posed several challenges. First, the setup introduced significant backlash, which negatively impacted the precision and stability of the arm’s movements. This issue became especially noticeable during tasks requiring high accuracy. Second, maintenance proved to be cumbersome. The gears were not only difficult to access but also challenging to replace or repair, leading to extended downtime whenever issues arose.

After evaluating these drawbacks, we decided to redesign the mechanism by replacing the bevel gears with a timing belt and pulley system. This new configuration offers several advantages. The timing belt significantly reduces backlash, ensuring smoother and more precise operation. Additionally, the pulley system is easier to assemble and maintain, allowing for quicker repairs and adjustments. This change has improved the overall reliability and performance of our design, making it more robust in competitive scenarios.

The switch to the timing belt and pulley has been a crucial step in optimizing our robot, aligning with our goal of creating a system that is not only efficient but also easy to maintain under the rigorous demands of competition.

1 Like

Programming Update No.1

Progress Recap: Last Month

Over the past month, our team, 20827 Roborpunk, has made significant strides toward preparing for this season’s FTC. Here’s what we’ve accomplished:

  • Successfully completed our first fully functional TeleOp, enabling us to handle all the key tasks.
    • Integrated PID control for our slide and arm, ensuring precise and reliable movements.
    • Designed and implemented the TeleOp using a state machine, improving efficiency and robustness.
  • Achieved a major milestone in autonomous by clearing all 4 yellow samples during the autonomous stage—a pivotal step in enhancing our robot’s capabilities.

Our progress is documented in detail in our GitHub repository: FTC2025-20827 Roborpunk.


Future Plans

Looking ahead, we plan to refine our systems further and share insights into the challenges we encountered, helping others in the FTC community. Here’s our roadmap for the next updates:

  1. Localizer (for the goBILDA Odometry Driver): Enhancing position tracking and pose estimation for precision.
  2. PID Control: Further fine-tuning the slide and arm systems for optimal performance.
  3. Autonomous: Sharing strategies for achieving accurate and consistent pose.

Stay tuned as we continue to tackle the challenges, share the lessons we have learnt and push the boundaries of what we can achieve. :infinity:

3 Likes

Programming Update No. 2

Localizer for GoBILDA Odometry Driver

This season, we’re excited to use the latest GoBILDA Swingarm Odometry Pods! It’s by far the best odometry setup we’ve ever used. :star_struck:


Why GoBILDA?

Traditional localizers rely on raw encoder data processed via the Control Hub or Expansion Hub, requiring custom logic to calculate the robot’s position. The GoBILDA Pinpoint Driver changes the game by handling this processing internally.

With its I2C communication, it offers significantly faster refresh rates and higher measurement accuracy. This simplifies setup and ensures precise localization without additional coding for raw encoder calculations.


How to Set It Up

Follow the sample code provided here to get started:

  1. Set Encoder Resolution: Choose between 4-Bar or Swingarm setups depending on your hardware.
  2. Test Encoder Direction: Specify FORWARD or REVERSE for each encoder to ensure correct directional behavior.
  3. Configure Offsets: Measure the perpendicular distance (in mm) from your robot’s rotation center to the X and Y pods. Ensure the positive direction is left for X and front for Y.
  • Important Tip: If your offsets are incorrect, your robot’s position can become significantly misaligned when rotating. For example, the robot may appear to move in a circle on the dashboard while actually rotating in place.

After completing the setup, run the sample code to test the GoBILDA Pinpoint Driver’s accuracy. We’re confident you’ll be amazed by the results!


Running Autonomous with the New Localizer

For our autonomous programming, we’ve built on last year’s Road Runner system to develop a custom method for running auto routines. A critical component is continuously updating the robot’s position throughout the autonomous stage.

We implemented the Localizer interface by overriding these methods:

  • getPoseEstimate()
  • setPoseEstimate()
  • update()

One unique feature of the GoBILDA odometry is its use of Pose2D (instead of the standard Pose2d). This enhanced structure includes internal unit settings, such as:

Pose2D currentPos = new Pose2D(
    DistanceUnit.INCH, 
    x, 
    y, 
    AngleUnit.RADIANS, 
    heading
);

This built-in unit handling prevents common errors and simplifies code debugging.


Check Out Our Full Code

Explore our custom StandardLocalizer class here.

public class StandardLocalizer implements Localizer {
    public double xOffset = 169, yOffset = 133;
    private Pose2d poseEstimate = new Pose2d(0, 0, 0);
    private Pose2d poseVelocity = new Pose2d(0, 0, 0);

    private Pose2D currentPos = new Pose2D(DistanceUnit.INCH,0,0,AngleUnit.RADIANS,0);
    private Pose2D currentVelocity = new Pose2D(DistanceUnit.INCH,0,0,AngleUnit.RADIANS,0);

    private final NanoClock time;
    GoBildaPinpointDriver odometry;

    public StandardLocalizer(HardwareMap hardwareMap) {
        odometry = hardwareMap.get(GoBildaPinpointDriver.class,"odo");
        odometry.setOffsets(xOffset,yOffset);
        odometry.setEncoderResolution(GoBildaPinpointDriver.GoBildaOdometryPods.goBILDA_SWINGARM_POD);
        odometry.setEncoderDirections(GoBildaPinpointDriver.EncoderDirection.REVERSED, GoBildaPinpointDriver.EncoderDirection.FORWARD);

        time = NanoClock.system();
}

Bonus Tip

Always verify the direction of your drivetrain motors! Misaligned motor directions can cause a lot of headaches during testing. :innocent:

2 Likes