DuoBotics: Project Story
Author: DuoBotics
Inspiration
Education is one of the most important things to exist in this world, and we think no differently. Unfortunately, the current state of the internet has caused a lack of literacy among youth in how various technologies actually work. Through our project, DuoBotics, we aim to educate youth on how machine learning works and can be applied to real world applications through a fun and slightly challenging simulation.
What it does
Bracket Pong transforms BracketBot—a mobile manipulator featuring dual 6-DOF robotic arms, a vertical carriage lift, and wheel drives—into an interactive system that allows the user to tweak multiple parameters on how it runs in order to see the effects of various variables. It allows users to learn about various systems, whether it be inner workings of the PID, to how the robot can use reinforcement learning to learn how to do certain tasks.
The project features two core execution modes:
- Interactive Rally Matches: A real-time game where human players use a mouse-controlled physical paddle to play first-to-11 matches against BracketBot.
- BracketBot Learning Lab: A local web application designed for students ages 10–13 to explore PID position control, the five stages of RL model training, and 3-color vision classification.
How we built it
- Kinematics & Physics Integration: Imported 50 CAD visual meshes and the 54-link URDF definition into MuJoCo physics with surrogate inertia assignments.
- Reinforcement Learning Pipeline: Built a Gymnasium environment trained via Proximal Policy Optimization (PPO) using Stable-Baselines3. The policy outputs eight residual target adjustments around an analytical Inverse Kinematics (IK) baseline controller.
- State & Action Representation: Designed a 35-float observation vector tracking joint states, ball position/velocity, paddle pose, carriage position, and prior action memory.
- Educational Web Engine: Developed a local Node and Python browser application with automated headless Chrome visual tests for lesson verification.
Challenges we ran into
- Surrogate Physics Calibration: Source CAD models lacked collision geometry and calibrated mass parameters, requiring us to construct surrogate physics for arm links, carriage servos, and paddle dynamics.
- Non-Holonomic Drive Kinematics: The wheel chassis must turn before driving sideways across the court rather than executing pure lateral sliding, complicating real-time interception trajectories.
- Generalization to Human Serves: Initial policies trained on narrow post-bounce feeds struggled with human serves, requiring multi-stage residual training across diverse serve distributions.
Accomplishments that we're proud of
- Quadrupled Return Performance: Our trained wheel RL policy achieved a 67/100 return rate against held-out human serves, compared to 16/100 for the analytical baseline.
- High Precision Fixed-Base Returns: Achieved a 93.2% success rate (466/500) on unseen starter shots using the vertical carriage lift policy.
- Automated Educational QA: Built a local web laboratory capable of driving 10,240-step RL training jobs with full session reload persistence.
What we learned
- Residual reinforcement learning—learning small corrective deltas on top of classical Inverse Kinematics—trains faster and generalizes better than end-to-end control from scratch.
- Sim-to-real transfer requires explicit modeling of actuator force limits, contact dynamics, and non-holonomic movement constraints.
What's next for DuoBotics
- Expanded Workspace Coverage: Expanding lateral target placement beyond the current ±0.45 m limit to enable full-court defense.
- Hardware Calibration: Replacing surrogate simulation physics with measured mass, motor torque, and wheel traction specifications from physical hardware.
- Sim-to-Real Hardware Deployment: Porting our trained ONNX residual policies onto the physical BracketBot chassis for real-world table-tennis rallies.
Built With
- claudecode
- codex
- css
- html
- javascript
- mujoco
- ppo
- python
- vercel
Log in or sign up for Devpost to join the conversation.