← All projects
Electronics Division · Principal Engineer

Cal Baptist Long Knights VEXU

Collegiate VEX U robotics, competing at the same events as the VEX World Championship. I lead the Electronics Division — sensing, localization, and the communication backbone that lets every subsystem act on one shared picture of the field.

3× World Championship qualifierBuild Award winnerSince 2024
2026 / 2027

VEX
Override

Upcoming
Reveal video — coming soon

Season kicks off Fall 2026. Game breakdown and system write-ups will land here as they're built.

Push Back is played on a 12′ field where alliances score blocks into goals and contest a center zone. The autonomous period rewards precise positioning — a robot that knows exactly where it is can score before the opposing alliance has finished its first movement.

01 · Comms

High-Speed RS-485 Sensor Bus

Every subsystem — drivetrain, intake, lift, and the sensor pods — needed to act on the same picture of the field at the same instant. Standard serial couldn’t carry that many nodes at the rate we needed without collisions and stale reads.

I built a multi-drop RS-485 network running at 5 Mbps, carrying roughly 6000 packets per second across a dozen addressable ESP32 data-acquisition nodes. Each node is time-synced, so the main controller reads a coherent snapshot rather than a smear of values from different moments.

5 Mbps6000 pkt/s12 nodesESP32
Bus topology diagram
Photo
Scope trace
02 · Vision

AprilTag Field Localization

Wheel odometry drifts — especially after contact with another robot. To correct it, I put AprilTags at known field positions and ran a vision pipeline on a Raspberry Pi that recovers the robot’s absolute pose whenever a tag is in frame.

The pose estimate feeds the same fusion filter as the encoders, so a single tag sighting silently snaps the robot’s belief back to truth without interrupting whatever routine is running.

Raspberry PiAprilTagAbsolute pose
Detection overlay
Camera mount
Field map
03 · Autonomy

Behavior-Tree Match Logic

Autonomous routines written as long scripts break the moment reality diverges — a missed grab, a blocked path. I moved the match logic to behavior trees so the robot can re-evaluate and fall back instead of running blind to the end of a sequence.

Each subtree owns one objective and reports success or failure upward, which made it possible to test individual behaviors in isolation rather than replaying a whole match.

Behavior treesC++Fallback logic
Tree structure
Match clip
FoxGlove
Field diagram / reveal video

High Stakes centered on scoring rings onto mobile goals and climbing at the end of the match. Our season ended at the World Championship, and the robot took the Build Award.

01 · Estimation

Kalman-Filtered Localization

No single sensor was trustworthy on its own — encoders slipped, the IMU drifted, optical flow failed on certain surfaces. I fused dead-wheel odometry, optical flow, a 6-axis IMU, and vision into one Kalman filter that weights each source by how much it deserves to be believed.

The result was a position estimate that stayed usable through contact and defense, which is what let the autonomous routines stay aggressive instead of conservative.

Kalman filterDead-wheel6-axis IMUOptical flow
Filter block diagram
Drift plot
Sensor pod
02 · Vision

Game-Object Tracking

The robot needed to find rings on a cluttered field without a human in the loop. I built a vision pipeline on a Raspberry Pi that segments game objects by color and geometry, then reports their field position to the planner.

Getting it reliable meant handling the venue lighting problem — arena lights vary wildly between events, so the pipeline calibrates against a reference at the start of each competition.

Raspberry PiOpenCVField-relative
Segmentation output
Camera
Match clip