Hello and welcome to another Burf Update. This was another active month on the robotics side, with the creation of the first native ROS2 driver for the Sanbot Elf and lots of refinements to the Platform.
Sanbot — a native ROS 2 driver, no bridge
The Sanbot Elf used to reach ROS through a bridge: a Python node on a laptop, polling the robot and republishing everything, so the laptop was on the network on the robot’s behalf. It now speaks DDS itself — the robot is the node. There’s no rclcpp for Android, so the transport is hand-written in Kotlin: discovery, serialisation, reliability, fragmentation, about 2,800 lines, talking to stock ROS 2 with nothing special on the other end. The driver also works with the USB Lidar that I attached to the robot, however, SLAM and Nav2 still need to run on another machine, but I am fine with that.
Keecker — hacking a dead robot back to life
The Keecker is a rolling home projector from a French company that folded years ago — Android inside, no SDK, never meant to be opened. Getting in was the whole job: in device mode its USB port answers Android Open Accessory, so my Mac registered itself as a USB keyboard and mouse and drove the robot’s on-screen menus by remote until I could turn on USB debugging and drop to plain ADB. A small voice-activated driver app now rides on top and re-pairs itself on boot, so the hack was the way in, not the way it runs.
Burf Platform — it docks itself, and drives around things
The Platform gained the two things that separate a demo from something you can leave running. It charges itself: a robot on a route watches its own battery, breaks off when it’s low, docks, charges, and resumes — all afternoon, no human. Both bugs on the way were the robot being correct: it kept undocking because voltage sags twenty points under load, so it charged to 82%, drove off, watched itself read 60%, and reasonably went back; and obstacle avoidance wouldn’t let it dock at all, because the dock is against a wall.
And it drives around things that weren’t on the map. Bumper or LiDAR trips, stop, wait thirty seconds, and if it’s still there mark a robot-sized no-go zone and replan around it. It failed on hardware six different ways against a pair of shoes — a bumper that cancelled its own countdown, a bumper that bounces ten times in two seconds, a released switch mistaken for a clear path — until I made myself write proper unit tests, which caught a seventh bug at the desk. This morning it worked end to end: one bump, one clean hold, a back-off, “New path found around it — 4 leg(s)”, and a neat arc around the shoes.
I had looked to run Nav2 on the TurtleBot, however, it seemed to push the robot past its Jetson Nano limits, which I did find odd.
Robotic Hand
So I have started work on building my own robot. I remodeled an unfinished robotic hand and got a basic demo working which I am happy about.
InMoov — teleoperated from a VR headset
A quieter month after July’s, but the Meta Quest teleop got real use — headset on, move your arms, the humanoid copies you. It’s worked since the end of July.
Plan for 2026 — honest scorecard
- Strengthen Burf Robotics — steady. Consultancy delivering.
- Launch Burf Platform as MVP — it docks itself and avoids obstacles now. Still no price and no first customer, which is the real bottleneck, and entirely mine.
- Continue learning ROS 2 — best month yet: a hand-written RTPS transport on Android, running against stock ROS 2.
- InMoov Robots — driver and VR teleop both working.
- Continue Brilliant learning — ongoing.
- Build my own robot product — already started.
What’s next
I really need to make sure the platform is working well and then focus on building my own robot.



















