> Documentation index: https://nao-rs.lukaloehr.com/llms.txt, a list of every page in this documentation.

# Body sensors and units

> Every value nao-rs decodes from the chest board and the head, with its index, unit and source, and the units of the robot API.

nao-rs decodes the body sensors from the chest board's answers into **LoLA's
arrays, order and units**, so software written for LoLA reads the same
numbers. In two recordings, 279,186 values in 1,767 of LoLA's messages came
out bit-identical. This page lists the runtime's state; the robot API's units
follow at the end.

## The runtime's state

| Field | Size | Unit | Source |
| --- | --- | --- | --- |
| `accelerometer` | 3 (x, y, z) | m/s² | Inertial unit; ±9.81 m/s² per 16,384 counts |
| `gyroscope` | 3 (x, y, z) | rad/s | Inertial unit; 500 °/s per 32,768 counts |
| `angles` | 2 (x, y) | rad | Inertial unit's own orientation estimate, with the offsets from the preferences |
| `battery` | 4 | see below | Battery |
| `fsr` | 8 | kg | Foot boards; pressure sensors with the gains and offsets from the preferences |
| `sonar` | 2 (left, right) | m | Sonar board; first echo, 0.01 m per count |
| `touch` | 14 | 0 or 1 | Chest board, foot boards, hand boards, head bus |
| `position` | 25 | rad (hands: 0..1) | Joint boards |
| `current` | 25 | A | Joint boards; 0.016 A per count |
| `temperature` | 25 | °C | Joint boards; steps of 2 °C |
| `status` | 25 | 0..3 | Temperature status per joint: 0 normal, 1 above the minimum, 2 near the maximum, 3 at the maximum |
| `stiffness` | 25 | 0..1 | Not measured: the stiffness that was commanded, as LoLA reports it |

Joint arrays follow LoLA's joint order (see
[Architecture](https://nao-rs.lukaloehr.com/architecture.md#state-and-commands)).

> **Warning:** Joint values need accepted motor boards
>
> Positions, currents, temperatures and the hand touch sensors come from the
> motor boards. Until nao-rs accepts the robot's version 11 boards (**planned**),
> they are not checked against real data.

### Battery

| Index | Value | Unit |
| --- | --- | --- |
| 0 | Charge | 0..1 (values outside are dropped) |
| 1 | Status | Bit field from the battery's status register |
| 2 | Current | A; negative while discharging |
| 3 | Temperature | LoLA's scale: the 0.1 factor is applied twice, so 28.5 °C reads 2.8 |

### Foot pressure

| Index | Sensor |
| --- | --- |
| 0, 1, 2, 3 | Left foot: front left, front right, rear left, rear right |
| 4, 5, 6, 7 | Right foot: front left, front right, rear left, rear right |

nao-rs also computes each foot's total weight and centre of pressure the way
HAL does, from the sensors' positions in the foot. LoLA never sends these.

### Touch

| Index | Sensor | Index | Sensor |
| --- | --- | --- | --- |
| 0 | Chest button | 7 | Left hand, left |
| 1 | Head, front | 8 | Left hand, right |
| 2 | Head, middle | 9 | Right foot bumper, left |
| 3 | Head, rear | 10 | Right foot bumper, right |
| 4 | Left foot bumper, left | 11 | Right hand, back |
| 5 | Left foot bumper, right | 12 | Right hand, left |
| 6 | Left hand, back | 13 | Right hand, right |

## Head readings

The head bus adds values that LoLA reads but never sends to its client. nao-rs
reports them:

| Value | Unit | Device |
| --- | --- | --- |
| Head voltage | V | INA230 power monitor, 1.25 mV per count |
| Head power | W | INA230 |
| Head current | A | INA230 |
| Face temperature | °C | TMP100, about every 300 ms; 0 until the first reading |

On the robot: 24.8 V, 10.7 W and 43 to 47 °C.

## Checked live

With HAL stopped and nao-rs reading the chest board: gravity at −10.4 m/s²,
gyroscope at about 0, battery at 99 %, and the sonar following a person
between 0.4 and 1.7 m.

**Still open**, checkable without motors: the physical order of the head pads
(front, middle, rear), of the foot pressure sensors and of the bumpers needs
one touch of each; and whether the gyroscope's zero offset is ever nonzero.

## The robot API's units

The [robot API](https://nao-rs.lukaloehr.com/reference/api.md) sends a converted state at 20 Hz:

| Field | Unit |
| --- | --- |
| `battery.charge` | 0..1 |
| `battery.current` | A, negative while discharging |
| `battery.temperature` | LoLA's scale (see above). The REST API reports whole degrees Celsius instead |
| `battery.charging` | `true` when the current is above 0 |
| `imu.linear_acceleration` | m/s² |
| `imu.angular_velocity` | rad/s |
| `imu.roll_pitch` | rad |
| `sonar` | m, left and right |
| `left_foot_pressure`, `right_foot_pressure` | kg: front left, front right, rear left, rear right |
| `touch` | booleans; each hand and foot is one value (any of its sensors) |
| `joint_positions` | rad, 26 values in the API's joint order |
| `joint_temperatures` | °C |
| `joint_currents` | A |

## Related topics

- [Hardware reference](https://nao-rs.lukaloehr.com/hardware.md)
- [Chest board link](https://nao-rs.lukaloehr.com/hardware/chest-board.md)
- [Head devices](https://nao-rs.lukaloehr.com/hardware/head.md)
- [LEDs](https://nao-rs.lukaloehr.com/hardware/leds.md)
- [Head fan](https://nao-rs.lukaloehr.com/hardware/fan.md)
- Previous: [Chest board link](https://nao-rs.lukaloehr.com/hardware/chest-board.md)
- Next: [Head devices](https://nao-rs.lukaloehr.com/hardware/head.md)
