Robotics Engineering · UC Santa Cruz

Joe Touchman

I build robots, and the software that runs them.

Real footage My hand on the left. The robot's on the right.

01 / Personal project · 2026

A robotic hand that copies yours.

JoebotHand is a 3D-printed, five-finger hand that mirrors a real one in real time. A web app tracks your fingers through a phone camera and streams each finger's position over Wi-Fi to an ESP32-S3, which drives five servos that pull the fingers closed with fishing-line tendons.

  • 5servos, one per finger
  • 21hand points tracked in 3D
  • ~30updates per second
  • $80in parts
  • 9 MBapp + ML model, stored on the chip

Try it

Hold up your hand.

This runs the same tracking math as the real hand, right here in your browser: 21 landmarks become joint angles, joint angles become a curl percentage for each finger, and the hand on screen follows.

Your video never leaves this page. Nothing is recorded or uploaded.

Until then, it's playing its startup wave.

The hardest problem

The camera needs HTTPS.
The hand has no internet.

Browsers only allow camera access on secure pages, and a secure page isn't allowed to talk to an insecure device on the local network. Hosting the app online was a dead end: it could see my hand but couldn't reach the robot.

So I made the hand its own secure website. The ESP32 runs a Wi-Fi hotspot and serves the app over HTTPS, using a real certificate for a domain I own that points at the hand's local address. A phone joins the hotspot, opens the page with no security warning, and everything works with no internet at all.

A servo library bug

Moving one finger moved several. I read the chip's pin routing directly, found the library was sending multiple servos' signals to the same output, and replaced it with direct hardware PWM.

A neural network in 12 MB

The app, MediaPipe's WebAssembly runtime and the model are gzipped into 75% of the flash partition and cached on the phone, so it works offline.

Safe by default

Per-finger angle limits protect the servo gears. A watchdog opens the hand if the phone disconnects, and the servos go limp after a minute of silence.

Press the button: startup chirp and finger wave
Manual control: one slider per finger
The hand lifted off the forearm, showing the five servos and their wiring inside.
Inside the forearm: five servos, five strings
Three 3D-printed forearms side by side, numbered 1 to 3.

Iteration

Three forearms.

  1. The original. The plain forearm from the tutorial design.
  2. My first redesign. A round base so the hand stands on its own, a press fit so it slides on and off, and a hole for the power button.
  3. The current one. A hollowed base so the servos get their full range of motion, exits for the wires, and corrected dimensions.

Full demo

One minute, start to finish.

Power-on, joining the hand's Wi-Fi, slider control and camera tracking. The repository has the firmware, the web app, the wiring schematic, the debugging sketches and the STL for my forearm.

Credit where it's due: the hand and finger design comes from Viral Science's flex-sensor robot hand tutorial. Mine are the redesigned forearm and stand, the wiring, the move from Arduino to ESP32-S3, camera tracking in place of flex sensors, the self-hosted web app, and the firmware.

02 / FRC Team 1678 · 2024–2026

Software a championship team runs on.

For two seasons I was a front-end developer on Software Scouting at Citrus Circuits, FRC Team 1678. The subteam is 21 students building six apps that record what every robot does in every match, then turn it into the data the drive team and strategists use to plan matches and pick alliance partners.

  • 2seasons on the team
  • ~21hours a week in season
  • 18scouts using my app every match
  • 113pages in the team's 2026 scouting whitepaper
Match Collection on a competition tablet: auto, teleop, endgame

My app

Match Collection

I designed and built about 90% of the 2026 Objective Match Collection app, interface design included. It's the tablet app scouts in the stands use to record a timeline of everything one robot does. Every qualification match, 18 scouts run it at once, three per robot.

  • A field map where scouts follow the robot zone to zone, and can only move to zones that actually connect
  • Press-and-hold shot timing with a live timer, so the server can match shooting to the scoreboard second by second
  • Undo and redo, an "incapacitated" mode, and a flipped layout for scouts on the other side of the field
  • Match data leaves the tablet as a QR code, because Wi-Fi isn't allowed at events and Bluetooth is unreliable

KotlinJetpack ComposeAndroid StudioGit

Team codebase

Viewer

Viewer is how the drive team and strategists read the data. I built multi-team graphs, which put several teams on one chart or split them into a scrolling list, and the team comparison page that lines up any data point side by side.

"You made the multiple team graphs? That's the feature I used the most."A 1678 coach

In 2026 Viewer was rewritten from Android-only to Kotlin Multiplatform, so it runs on Android, desktop and the web.

Team codebase

Stand Strategist

I added "Do Not Pick" flags and match marks. A strategist can flag a team for the rest of the event, or mark one team in one match to come back to, and both collect into sheets they can pull up later.

Smaller features in someone else's code taught me the unglamorous part: branches, pull requests, code review, and not breaking what 20 other people are building on.

A tablet running the Match Collection auto screen, showing the field divided into zones.

The auto screen, as scouts see it.

Also at 1678

Teaching it.

Through the team's youth programs I taught and mentored kids aged 8 to 14. Explaining a lever to a ten-year-old turns out to be good practice for explaining anything.

A classroom drone course with arches, hoops and landing pads.

Fourteen drones, one classroom, no lesson plan

I ran the drone section of the summer robotics camp on my own: I picked which drones to buy, wrote the slides, the safety rules and the lesson plans, and taught kids to code them through rings and onto targets. The teacher kept my materials for later camps.

One of my slides: a short arm is easy to lift but travels less, a long arm reaches further but needs more torque.

A class of my own, twice

For a year each at Davis Waldorf and Davis School for Independent Study, I was the weekly robotics instructor, teaching kids to build, code and drive competition robots. I wrote my own lessons on levers, counterweights and weight distribution. That's one of my slides.

Me running a Citrus Circuits robotics table at a farmers market.

Wherever they needed someone

At youth VEX IQ tournaments I've been the emcee, the queuer, a referee and the person resetting the field. And at the farmers market, the one handing a kid the controller.

03 / VEX V5 · Two years

Two robots, two unfair advantages.

Alongside Citrus, I spent two years building VEX V5 robots in robotics class. Both years I went looking for the one mechanism nobody else in the room had.

A VEX robot with tank treads and a rubber-band catapult.

Year 1 · Over Under · with one teammate

The slip-gear catapult

A gear with half its teeth shaved off. While the teeth mesh, the motor winds the arm back against rubber bands. When the gap comes around, the arm lets go and slaps the game piece across the field. No other team had one, so we scored from our side while everyone else drove back and forth.

  • 1stin qualifications
  • Wonthe 16-team school tournament
  • 112–56one of our matches
A VEX robot with a chain elevator, a roller intake and a pneumatic cylinder.

Year 2 · High Stakes · solo build

Pneumatics before anyone else

I designed and built this one alone: a roller intake, a chain elevator that lifts and scores a game piece with one button, and a pneumatic clamp. Nobody in the class had gotten pneumatics working. I figured it out, and the clamp became the robot's biggest edge in the tournament.

PneumaticsChain elevatorRoller intake4-motor drive

04 / About

Hi, I'm Joe.

Joe Touchman in a Citrus Circuits 1678 shirt.

I'm a first-year Robotics Engineering student at UC Santa Cruz, from Davis, California. I like the place where software meets something that physically moves.

I got here sideways. As a kid I taught myself Blender to make visual effects for short films, so I was thinking in 3D long before I opened a CAD program. Robotics class turned that into building things, and Citrus Circuits turned it into writing software that other people depend on. The hand at the top of this page is where it all meets: printed parts, a microcontroller, a web app and a vision model that have to agree with each other.

What I'm looking for

A research lab where I can be useful while I learn. I'm comfortable in firmware, in app code, in CAD and with a soldering iron. I document what I build, and I finish it.

Software

  • Kotlin
  • Jetpack Compose
  • JavaScript
  • C++ for Arduino / ESP32
  • Python
  • Git & GitHub

Hardware

  • ESP32 & Arduino
  • Servos & PWM
  • Soldering
  • Wiring & schematics
  • Pneumatics

Design

  • Onshape CAD
  • 3D printing
  • Blender
  • Visual effects

People

  • Teaching & mentoring
  • Code review
  • English & Spanish
Before CAD, there was CGI. 10th grade, for a short film of Ray Bradbury's "The Long Rain": a drone shot, a 3D-tracked crater, and lightning, flashes and rain I added myself.
Joe playing a drum kit.
Off the clock I'm the drummer in a rock band. It's the same job as firmware: keep everyone else in time.

05 / Contact

Let's talk.

If you're reading this because I emailed you, thank you for clicking. A reply to that email is the best way to reach me.