Source: https://mayphus.org/so-101-bone-rover/
Title: SO-101 Bone Rover
---
type: project
---

SO-101 Bone Rover

Topology optimization · FEA · Bambu A1 mini · two motors

A mobile base for my [SO-101](/so-101/) arm, grown rather than drawn. Every strut sits where a load runs from the arm, battery, motors or camera mast down to two driven wheels and one caster. The frame prints as four pieces on a 180 mm bed and bolts together through rounded knuckles where a strut crosses a cut.

## Status on 12 November 2026

Designed, checked by FEA and packaged for printing. The first test piece (the front body, at low infill) is printing. Nothing has been driven yet; motor, wheel and caster dimensions still need checking against the parts as delivered.

## What it is

| Part | Choice |
|---|---|
| Drive | 2 × JGB37-520 12 V gearmotor with Hall encoder (1:90), 100 mm treaded wheels at the back, about 0.58 m/s |
| Nose | One 2" rubber swivel caster: three contact points stay on uneven ground |
| Electronics | Waveshare General Driver for Robots (ESP32, both motors and encoders); optional Raspberry Pi 5 stacked on it; 3S pack under the arm |
| Cameras | A 32 × 32 mm USB camera on the official SO-101 wrist mount, plus a wide-angle one on a 380 mm mast behind the arm. No depth camera |
| Frame | ~441 g printed (estimate), four pieces, all within 180 mm |

## How the frame was generated

- **Design space and keep-outs.** Motors and their encoder plugs, wheels, the caster's swing circle, the battery bay and cable paths are kept clear; the arm pad (the SO-101 base outline with four M5 inserts), motor face plates, caster bosses, driver bosses and mast socket are fixed solids.
- **Optimization.** 3D SIMP topology optimization on a 6 mm hex grid with 13 load cases: arm weight, reaching forward, backward and sideways, base twist, push and brake, battery, boards, motor torque and weight, a knock on the camera mast, and the caster plate pressing on every bolt. A 45° overhang rule keeps it printable without supports where possible.
- **Smoothing and joints.** The density field becomes a smooth surface; exact flat features are added back; joints grow out of the same field as rounded knuckles with M3 screws into heat-set inserts.
- **FEA-guided clean-up.** A first FEA pass finds dead fins (almost no stress) and thin load-carrying bridges; fins are removed and bridges thickened to at least 5 mm, then the frame is checked again.

## FEA check (PETG, 2.5 mm voxels)

| Load case | Safety factor |
|---|---|
| Arm reaching forward, 200 g payload, 2× dynamic | 89× |
| Arm reaching sideways, 200 g payload, 2× dynamic | 99× |
| 3 g bump: arm, battery, motors, boards, mast | 106× |
| Both motors at stall torque | 137× |
| Camera mast knocked sideways, 3 g | 40× |

Frame flex moves the gripper at most 0.15 mm at full reach. Strength is not the limit; printability is. The knuckle joints are modelled as bonded, so the screws themselves are not checked, and real prints at low infill are softer than solid plastic.

## Limits

- Reaching fully backward past the rear axle with a load can tip the base over its wheels; the work area is in front, where the mast camera looks.
- The 3D view above is visual only: the six SO-101 joints move, the rover does not drive, and nothing connects to hardware.

## Source

Code, print-ready STLs, the print guide and the design history are in [mayphus/so101-bone-rover](https://github.com/mayphus/so101-bone-rover). The arm model and wrist camera mount come from TheRobotStudio's SO-ARM100 repository under Apache 2.0.
