practicableRobotics · 2023 – 2025 · Prototype v1
A dog-sized, modular ground robot designed as the base unit for a neighbourhood service: one fleet doing small domestic jobs like snow clearing across many homes.
Concept
Instead of one large machine per house, Meerkat units share a common software stack and can work together. One unit handles a snow-shovel job; three or four clear a sidewalk; a larger group takes on a driveway. A remote operator watches the fleet and steps in only for unusual conditions.
Large machines worry people on residential streets. The target size is roughly that of a dog, so units look approachable while working near homes and sidewalks.
Customers define job boundaries in an app. Units move by remote control first, then console control, then GPS guidance with basic vision for traffic safety stops.
A base station, the Burrow, holds the units and charges them from mains or solar power. A disabled unit can be recovered by other members of the fleet.
System architecture
The system was defined in SysML using Gaphor before any parts were cut. The model breaks the domain into the robot and its four subsystems (drivetrain, chassis, electrical, command module), the Mission Control centre, the Burrow base station, and a deployment and maintenance unit.
Design decisions
| Decision | Options investigated | Outcome |
|---|---|---|
| Running gear | Tracked versus wheeled | Wheeled four-wheel drive with skid steering, using pneumatic 2.50-4 tires rated 220 lb each at 30 psi. |
| Drivetrain layout | Motor placement, gearing, and how each motor reaches the wheels | Two centrally mounted gearmotors, one per side. Each drives both wheels on its side through roller chain and sprockets, with spring-loaded chain tensioners. |
| Motor sizing | Motor power against payload and working loads | 24 V DC gearmotors with 200 rpm output, sized against the expected payload. |
| Battery | Lead-acid, LFP and other lithium-ion chemistries, compared on usable capacity, cycle life, weight and safety | Lithium-ion pack built from 18650 cells, with work on cell balancing and charge circuits. |
| Motor control | Commercial controllers against custom driver circuits | Custom MOSFET driver circuits on the prototype. In hindsight, complete modules would have been faster. |
| Communications | Local and wide-area links | Bluetooth LE between robot and an onboard phone, which provides cellular wide-area connectivity to Mission Control. Both were designed and tested. |
| Video | Image capture and streaming approaches | Benchmarked to find the most bandwidth-efficient approach for remote monitoring over cellular. |
| Charging | Mains, solar and EV charging standards for the Burrow | Investigated using the J1772 EV charging handshake and rectifier designs to charge from standard equipment. |
Build record
Parts were modelled and assembled in FreeCAD, then fabricated and assembled in a home workshop: steel frame and plates, chain drive, battery mounting, and a formed body shell.
Software
Version 0.1 (December 2023) connected all three tiers end to end.
// pRCommandModule v0_1 · MainActivity.kt
val gattCallback = object : BluetoothGattCallback() {
@SuppressLint("MissingPermission")
override fun onConnectionStateChange(
gatt: BluetoothGatt, status: Int, newState: Int
) {
val deviceAddress = gatt.device.address
if (status == BluetoothGatt.GATT_SUCCESS) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
Handler(Looper.getMainLooper()).post {
connectedGatt = gatt
intent = Intent(this@MainActivity,
ControlActivity::class.java)
intent.putExtra(BluetoothDevice.EXTRA_DEVICE,
gatt.device)
startActivity(intent)
connectedGatt.discoverServices()
}
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
gatt.close()
}
} else {
Log.w("BluetoothGattCallback",
"Error $status encountered for $deviceAddress! Disconnecting...")
gatt.close()
}
}
}
Results and lessons
The machine design worked very well. The chain drive, motor sizing and frame performed as intended on the built prototype.
Next time I would buy complete, proven modules instead of designing custom circuits. That would free time for integration and testing.
I would use AI-assisted development much more heavily to increase the pace of software work across the three tiers.