Isaac Tools
Account

Body file reference

Generated from packages/body-spec/schema/body.v1.json (https://isaac.tools/schema/body.v1.json), the authority on the structure of robot.isaac.yaml. The semantic rules (one primary board, pins used once, parts in the registry, roles, class requirements) are checked by the validator in @isaac/body-spec; see Your first body file.

One YAML file that describes a robot. Everything else (BOM, wiring, firmware, sim model, calibration profile, ROS export, assembly guide) is generated from it. This schema is the structural authority; the semantic rules in section 4.12 of the build document are enforced by the validator in @isaac/body-spec.

Top level

field type required description
isaac 1 yes Schema version. Always 1 for this schema.
robot robot yes
dimensions dimensions
boards array of board yes
actuators array of actuator
sensors array of sensor
power power
links array of link
joints array of joint
drive drive Shortcut for tracked and diffdrive robots. Expands to wheel links and continuous joints in the sim and ROS export.
mounts array of mount
buses array of bus
parts array of part
calibration calibration Written by the agent's calibration flow. Excluded from the body hash.
skills skills yes

identifier

Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.

Type: string. Pattern: ^[a-z][a-z0-9_]{0,31}$.

registryId

Driver registry part id, e.g. esp32-s3-wroom-1 or st7789-1.14.

Type: string. Pattern: ^[a-z0-9]+([.-][a-z0-9]+)*$.

gpio

Type: integer. Range: 0 to 255.

pinMap

Logical pin name to GPIO number on the owning board.

Type: map of gpio.

address

Type: string. Pattern: ^0x[0-9a-fA-F]{40}$.

semver

Type: string. Pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$.

vec3

Type: array of number. Items: 3.

vec2

Type: array of number. Items: 2.

origin

field type required description
xyz_in vec3
rpy_deg vec3

robotClass

Type: companion, tracked, diffdrive, arm, quadruped. Values: companion, tracked, diffdrive, arm, quadruped.

interfaceId

Type: companion/1, mobile/1, arm/1, legged/1. Values: companion/1, mobile/1, arm/1, legged/1.

role

Type: motion, audio_in, audio_out, display, battery, distance_front, distance_left, distance_right, distance_rear, line_left, line_center, line_right, camera_front, encoder, button, touch, temperature, light, battery_voltage, charge_rate, charger. Values: motion, audio_in, audio_out, display, battery, distance_front, distance_left, distance_right, distance_rear, line_left, line_center, line_right, camera_front, encoder, button, touch, temperature, light, battery_voltage, charge_rate, charger.

robot

field type required description
name string yes
slug string yes
class robotClass yes
version semver yes
creator address yes
summary string yes
license string yes SPDX license id.
tags array of string

dimensions

field type required description
size_in vec3 yes Overall x y z extent in inches.
weight_oz number
size_mm vec3 Overall x y z extent in millimetres when the design is metric; must agree with size_in.

board

field type required description
id identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
part registryId yes Driver registry part id, e.g. esp32-s3-wroom-1 or st7789-1.14.
role primary, secondary, daughterboard yes primary: the board the agent talks to; secondary: an MCU board linked to the primary over a bus; daughterboard: a passive board with no MCU (a USB-C or connector board) joined to another board by a cable.
transport usb-serial, wifi-mqtt, ble How the agent reaches this board. Required on the primary board. A secondary board is reached through the primary over a bus with peer set to this board.
pins pinMap Signals wired directly to this board that belong to no bus, actuator, or sensor (status LEDs, enable lines). Net name to GPIO.
active_low array of identifier Pin names (keys of pins) whose signal is active low: asserted at 0 V. Firmware and the wiring diagram use it.
alternates array of registryId Registry ids of drop-in module alternates the board also accepts unchanged (same footprint and pin map).
pcb object The custom circuit board that carries this board's parts: a parts[] entry (its design file) plus its outline and stack-up.
link object Daughterboards: how the board joins its host board.

actuator

field type required description
id identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
part registryId yes Motor or servo registry id.
driver registryId Driver registry id. Omit for direct drive (a servo on a GPIO, a smart servo on a bus).
driver_channel string or integer Channel of the driver this actuator uses, e.g. A or B on a TB6612FNG, 0..15 on a PCA9685.
board identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
pins pinMap Registry pin names of the driver channel (or the actuator itself for direct drive) to GPIOs on board.
bus identifier Bus id for bus-attached drivers and smart servos.
address integer
encoder object
limits object

sensor

field type required description
id identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
part registryId yes Driver registry part id, e.g. esp32-s3-wroom-1 or st7789-1.14.
board identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
bus identifier Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
address integer
pins pinMap Registry pin names to GPIOs for sensors and peripherals not on a bus, or for the extra pins of a bus device (interrupt, chip select, reset).
role role yes
origin origin Pose of the sensor on the robot's root link, for the sim.
link identifier Link the sensor is attached to. Default is the root link.
range_in number Max range for distance sensors, in inches. Default from the registry.
active_low array of identifier Pin names (keys of pins) whose signal is active low: asserted at 0 V. Firmware and the wiring diagram use it.
source identifier Another reading of a part that is already in the body: the id of a sensor, or battery / charger / regulator. Such an entry has no bus, address or pins of its own and adds nothing to the BOM.

power

field type required description
battery object
charger object
regulator object
rails array of object

link

field type required description
id identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
shape box, cylinder, sphere, mesh yes
size_in vec3 Box extents x y z in inches.
radius_in number Cylinder or sphere radius in inches.
length_in number Cylinder length along its axis in inches.
axis x, y, z Cylinder axis.
mass_oz number yes
mesh string Path to an STL in the body folder, for display.
origin origin Visual and collision shape offset from the link frame.
color string

joint

field type required description
id identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
type fixed, revolute, continuous, prismatic yes
parent identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
child identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
origin origin Child frame in the parent frame.
axis vec3
actuator identifier or null
limits object

drive

Shortcut for tracked and diffdrive robots. Expands to wheel links and continuous joints in the sim and ROS export.

field type required description
kind diffdrive, tracked yes
wheel_radius_in number yes
track_width_in number yes Distance between the left and right wheel or track centers.
wheel_width_in number
left identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
right identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
base identifier Link the wheels attach to. Default: the root link.
axle_xyz_in vec3 Axle center in the base link frame. Default [0,0,0].
caster object

mount

field type required description
part identifier yes Id of a board, actuator, sensor, part, or power item (battery, charger, regulator).
on identifier yes Link or part id it attaches to.
position string yes
fastener snap, adhesive, screw, heat-insert, press-fit, zip-tie, tape, velcro, solder, none yes
hardware identifier Id of the parts[] hardware entry used (screws, inserts).
qty integer
notes string

bus

field type required description
id identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
kind i2c, i2s, uart, spi, onewire, can, pdm yes
board identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
pins pinMap yes Logical pin name to GPIO number on the owning board.
speed_hz integer
baud integer
peer identifier For board-to-board links: the secondary board reached over this bus.
peer_pins pinMap Pins on the peer board.

part

field type required description
id identifier yes Local id: lowercase letter then lowercase letters, digits, underscores. Max 32 chars.
kind printed, cut, hardware, other yes
file string Path in the body folder: STL for printed, DXF/SVG for cut.
material string
part registryId Registry id, required for hardware; resolves to an AliExpress search.
qty integer yes
notes string

calibration

Written by the agent's calibration flow. Excluded from the body hash.

field type required description
imu object
display object
motors map of object
servos map of object

skills

field type required description
interface interfaceId yes