Robotic Side Quest

If you're not a developer you may not find this one very interesting.

It's been an extremely strange several years for developers. We’ve seen code becoming commoditized by large language models, which can now write high-quality, well-documented, well-tested code in a tenth of the time it used to take a human. For commoditized applications—think very 2010s tables and forms—you really don't need high-quality talent or any kind of skill to build 80% of those applications anymore. Most of that work was just plumbing anyway and not very enjoyable to write. So now, I’m really only thinking about 20% of the application and maybe some unique business logic for some opportunity I see in the market.

All that is to say, I can hammer out a new product in a couple of days. The implication is that software is becoming easier to build, and for the most part, it’s not a moat. Now, of course, if you’re collecting unique data and training a model based on it, maybe you can have a moat. But that requires distribution, which brings me to my next point: successfully launching a SaaS today feels like trying to win at distribution. That’s an attention game and very different from even just a few years ago, when you could reliably do some long-tail SEO, start getting traffic, pay a couple bucks on Google Ads, and really test an idea out. Sure, you can still do that today, but the competition is only going to increase as the marginal cost of creating software goes to zero.

So, while thinking about this macro trend, I was staring at the robotic arm on my desk and thought, “Maybe introducing some hardware is another way to reduce the number of people building the same thing.” I settled on the use case of an upper back massage using a TheraGun attached to a 6-axis robotic arm. The arm itself can be fixed; it doesn’t need to move on a linear rail or cart to navigate 3D space. I can just focus on the actual massage, and thankfully, most humans have very similar-looking upper backs. This is a very constrained domain and a perfect opportunity to test training a robotic arm to do one specific task.

early iterations of the attachment to the arm

I broke out my dusty 3D printer, which I haven’t used in probably six years, and started designing an attachment to connect the TheraGun to the robotic arm. After a few iterations, my 3D printer broke, so I decided to Dremel out a decent enough attachment and duct-taped the TheraGun to the arm. I grabbed my partner and started doing a small sample massage by guiding the robot with my hands, moving the joints as if the robot was giving the massage. I recorded all of the joint positions and camera info to use as training data.

I only collected five samples of a very simple, 3-minute upper back massage—roughly 1.5 minutes on each side of the spine. The model itself is a small transformer model that trains decently fast on my small 10GB GPU. It took about three hours to train the first model, and it completely overfit, so I implemented some early stopping and that took about an hour to train.

Just use duct tape

I was pretty shocked by the results. Initially, I just ran the model overlooking the massage table without any kind of person or object on it. The behavior was erratic, and I was disappointed. But on a whim, I threw a t-shirt over a pillow to see if it would start behaving reasonably. I was pretty shocked when it did.

Notice in the video that it touches the pillow fairly gently. I’m not totally sure how to incorporate the timing aspect—like spending half the time on one side and half on the other—but as an initial test, I think it learned a reasonable amount given how little data I gave it.

This is probably the coolest side project I’ve worked on. It feels like I need to either get really good at distribution, continue buying businesses that already have distribution, or try to compete by introducing a small amount of hardware that someone else builds (in this case, a robotic arm) and create software and a product around that. Over time, the more massages we do, the more unique data we capture, and it should become fairly difficult for someone else to match the amount of data we’ll have.

But of course, everything’s an experiment, and this is no different.