Vacuum Bot
A round robot vacuum, 0.34 m across and under 0.1 m tall, with its drive wheels hidden underneath, spinning side brushes that sweep past the rim, a front bumper and an optional lidar turret and mop pad. The wheels, brushes and lidar turn with distance; the status ring glows at night.
- Size
- 0.36 × 0.12 × 0.35 m
- Triangles
- 1,048
- Kit
- Robots
Tune it
5 knobs: Colour, Lidar, Side brushes, Mop pad, Size.
Specs
- Size
- 0.36 × 0.12 × 0.35 m width × height × depth
- Triangles
- 1,048 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 0.201 m of travel per cycle
- Moving parts
- 5 wheel_0 · spin, wheel_1 · spin, brush_0 · spin, brush_1 · spin, lidar · spin
- Knobs
- 5 3 presets
- Night lights
- 1 led
Passed the validator: real scale, rests on y = 0, front faces +Z, deterministic.
Use it
Code for the specimen as it is set up above; it follows your knobs.
import { createAsset } from 'https://gaitkit.com/cdn/vacuum-bot.mjs';
const vacuumBot = createAsset();
scene.add(vacuumBot); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
vacuumBot.position.z = dist;
vacuumBot.userData.tick(dist); // wheels roll exactly with the distance
renderer.render(scene, camera);
});import { useMemo, useRef } from 'react';
import { useFrame } from '@react-three/fiber';
import { createAsset } from 'https://gaitkit.com/cdn/vacuum-bot.mjs';
export function VacuumBot({ speed = 1 }) {
const model = useMemo(() => createAsset(), []);
const dist = useRef(0);
useFrame((_, dt) => {
dist.current += speed * dt;
model.position.z = dist.current;
model.userData.tick(dist.current); // wheels roll exactly with the distance
});
return <primitive object={model} />;
}# Import vacuum-bot.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $VacuumBot/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 0.201 # one Loop = 0.201 m of travel// Import vacuum-bot.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 0.201 // one Loop = 0.201 m of travelUse the gaitkit MCP server: get_variant({ "id": "vacuum-bot", "want": "default look" })
then place the result and drive it with userData.tick(distance).
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
color | choice | white black silver sage | white | Body finish: white (blue status light), black (gloss black, white light), silver (grey with green light), sage (soft green with a cream top). |
lidar | toggle | on / off | true | A spinning laser-distance turret on top, as on mapping robot vacuums. Off = a flat, low disc that slides under sofas. |
brushes | choice | 1 2 | 2 | Spinning three-arm side brushes at the front corners: 1 (one on the right) or 2. |
mop | toggle | on / off | false | A blue microfibre mop pad under the back half, for a vacuum-and-mop robot. |
size | range | 0.8 to 2, step 0.05 | 1 | Uniform scale. 1 is a 0.34 m home robot; 2 is a 0.7 m commercial floor scrubber for offices and stations. |
Presets: mapping vac {"color":"black","lidar":true} · slim mop bot {"color":"sage","lidar":false,"mop":true} · office scrubber {"color":"silver","size":1.8,"brushes":2}
Files
| File | What |
|---|---|
| vacuum-bot.glb | GLB, default look · 126 KB |
| vacuum-bot.mjs | ES module, every knob live |
| vacuum-bot.obj | OBJ, static, no colour |
| vacuum-bot-params.json | knob schema, presets, night zones |
Licence
Use it in games, apps, renders and client work, commercially and without credit. Do not resell it as an asset or train a 3D generator on it. The full licence.