HACKFeb 2023
KUKA — an interactive seven-joint arm
Fast forward a few months from SignLink. I was still ridiculously salty about how useless I'd felt at Purdue, internship season was happening, and I'd already collected a decent pile of interview rejections. I wanted a job at Kinetic Vision.
They had a sponsor challenge at RevolutionUC, so I said we were going to win it. I gaslit Kaaustaaub "Kaus" Shankar into believing the internship was basically guaranteed if we won, and rallied the troops with Alexander Van Bibber.
The challenge was joint data for a seven-axis KUKA arm, sitting in MATLAB files. They wanted a way to look at it. We built the arm in Unity, put it in the browser, gave every joint a slider, and replayed the recorded movement on the same model. Partway through we called Akhil Penumudy as an SOS because we had no idea how to rig the objects to code in Unity.
My part was the inverse kinematics. A seven-axis arm can reach the same position with a bunch of different joint configurations. We narrowed down the solutions, kept a configuration that was geometrically close to where the arm already was, and prepared the motion path from there. That side went surprisingly smoothly.
I knew almost nothing about UI/UX, so I slapped an isometric viewer onto the demo and surrounded it with enough controls and information to make it usable. I still find that funny. I wanted everything on screen: all seven joints, the path, and the data moving.
| KUKA playback flow |
|---|
| Kinetic Vision joint / CSV data |
| ↓ |
| Shared joint-state model |
| ↓ |
| Manual sliders ‖ Recorded playback |
| ↓ |
| Unity arm hierarchy |
| ↓ |
| WebGL viewer |
| KUKA inverse-kinematics flow |
|---|
| Target position |
| ↓ |
| Inverse-kinematics candidate solutions |
| ↓ |
| Geometric filtering against current pose |
| ↓ |
| Selected joint configuration |
| ↓ |
| Prepared motion path |


The seven-axis arm was modeled in Unity as a hierarchy of joint transforms. Rotating a lower joint changed the coordinate frame for every joint attached after it. The Kinetic Vision movement data was converted into joint states that could be replayed through the same hierarchy the manual sliders used.
For inverse kinematics, one target position could produce several valid joint configurations. Candidate solutions were filtered by geometric similarity to the current arm state, so the selected solution stayed close to the existing pose.
The 3D assets were put together in Unity, with models prepared in tools including Blender, Fusion 360 and RoboDK. The project was exported from Unity to WebGL for the browser demo.
In 2026 the arm was rebuilt as a plain web page, the one above. It draws the KUKA LBR iiwa models from the challenge in the same isometric view and plays the ten recorded runs from the dataset, with each joint's angle, speed and torque. The inverse kinematics now works on all seven joints and starts from the current pose, so the arm moves the least it can. The Unity build is gone from the repository.12
We won Kinetic Vision's Robotic Data Visualization challenge. We also won Best Domain Name for howardgotinastickysituationwithspacearm.tech.
Winning the sponsor challenge didn't turn into a Kinetic Vision job. I did get to talk with Scott Fasone, though. He gave me useful guidance on how to organise and present myself, and I remember that conversation a lot more than whatever follow-up I expected from the company.
At the time I came out of the weekend feeling like a noobie developer who'd learned how to slap together junk that worked. I was excited to make more junk.