Skip to content

Device Values

rover/ holds one file per physical device on the rover, grouped by subsystem. These are the values pushed to a board at commissioning time, against the layout defined in config/<board>.yaml.

DirectorySubsystemContents
rover/ra/robotic armjoint configs, absolute encoders, gripper, pusher
rover/mob/mobilitysix drive controllers plus a backup
rover/sp/science payloadauger, linear actuator
rover/cm/chassis and mountsmast limit
rover/test/bench testingscratch configs

Two different file formats live here, and they are not interchangeable.

A .yaml file is a flat map of field name to value. The names come from the board’s definition file: for a register with fields, use the field names; for a plain register, use the register name in lower case.

rover/ra/abs_de_pitch.yaml, an absolute encoder board:

# can
can_id: 55
host_can_id: 16
# encoder settings
continuous_mode: false
bounded_mode: true
invert: true
output_scalar: 1.00
position_offset: 0.00
poll_frequency: 10.00
publish_frequency: 10.00
min_bound: -3.00
max_bound: 3.00

Every key here appears in config/abs.yaml, either as a register or as a field of sys_cfg.

To push one of these to a board, see CAN Configuration Interface.

rover/mob/*.cfg are a completely separate system. Brushless drive joints use mjbots moteus controllers, which have their own register namespace and their own tooling.

uuid.uuid.0 106
uuid.uuid.1 245
clock.hsitrim 64
aux1.i2c.i2c_hz 400000
aux1.i2c.devices.0.type 0
aux1.i2c.devices.0.address 64

These are flat key value lines using moteus register paths, not YAML, and nothing in config/ or tools/esw/config reads them. They are applied with mjbots’ own tools (moteus_tool, or the moteus-gui diagnostic console), both of which are dependencies of this repo’s Python environment.

See Brushless Motors for background on the controllers themselves.