*If you prefer a shorter read, I wrote a concise technical thread on this project on Twitter
I tend to lose my keys a lot. So I embarked on a journey to build an autonomous rover to find stuff for me. That was two years and four iterations ago.
I figured building a rover would teach me a couple new things. I was a software guy; how hard could the rest be? It started with first-year kinematic equations on my iPad to spec out something that’d move. Two years later I've designed circuit boards on KiCad, learned SolidWorks to print my own parts, fabricated a chassis with 2020 aluminum extrusions, and re-designed the same PCB enough times to be on a first-name basis with JLCPCB. For every problem I learnt to solve, three more would pop up like Hydra’s heads.
Today, Findbots a working autonomous rover that can push objects into a target zone using a neural network trained on demonstrations I collected manually. Take a look at it in action:
[https://drive.google.com/file/d/1QeeZ6ykr17fDA956F0xVI4mw1w0BmWfU/view?usp=sharing](https://drive.google.com/file/d/1QeeZ6ykr17fDA956F0xVI4mw1w0BmWfU/view?usp=sharing)
My friends make fun of me for talking about FindBot too much. I’m writing this blog to get it all out of my system and go through the nitty gritty of the latest version, as well as covering the numerous failures (some funny, others very expensive) that have made each iteration better than the last.
Here’s every iteration up till V4:
.png)
Version 4 is the current, working iteration of FindBot. As an initial demonstration, I’ve trained it to be able to push targets into an objective zone, in a constrained 8x4ft arena I built in my basement (maybe I should call it RonaldoBot instead). Going forward, the goal is for FindBot to traverse various indoor environments to locate and manipulate objects its prompted to find in plain English.
This version, which started as my attempt to improve version 3’s electrical & mechanical design, ended up being a massive end-to-end rehaul. The chassis was rebuilt with 2020 aluminum extrusions, three levels of laser-cut acrylic platforms, a drivetrain consisting of omni-wheels driven with XL belts, attached to an axle constrained with pillow block bearings, and a camera mounted to a rotating 180° stepper-driven platform.
The electrical and firmware rehaul was even more drastic - I swapped V3’s Arduino for an STM32, V3’s Bluetooth piloting with a radio controller which can function from a mile away, designed three iterations of a custom battery management PCB to monitor a 11.1V LiPo battery and added a Raspberry Pi to handle middleware, vision and inference coming from my laptop.
_(4).png)
High Level System Diagram:
The entire rover is powered by an 11.1V LiPo battery, which is monitored by a custom Battery Management PCB I made (more details below). I spec’d a 4500mAh battery by calculating the worst case scenario for my rover (~100W; 9A) and assuming I’d want it to be able to handle this for >30 minutes.