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

# What the robot says

> The robot's spoken system messages in English or German, its address on a chest press, and how to switch the language.

The robot speaks its system messages itself, in English or German. The lines
are recorded ahead of time and ship with nao-rs, so the robot needs no
internet connection for them.

## When it speaks

| When | What it says (English) |
| --- | --- |
| The robot booted (nao-rs's first start since the boot) | "Hello, I'm awake. Press my chest button and I'll tell you my address." |
| nao-rs restarted (a new installation, a service restart) | "I'm back." |
| **Chest button pressed** | "Stopped. My motors are off." (if they were on), then its address, see below |
| All three head pads touched | "You touched my head, so my motors are off." |
| A stop from the app, an API, UDP or `naoctl` | "Stop received. My motors are off." |
| A joint at 75 °C: the motors were stopped | "My joints are too hot, so my motors are off. Let me cool down." |
| A driver fault | "My drivers reported a fault, so my motors are off." |
| The guard lost the runtime's heartbeat | "My drivers stopped responding, so my motors are off." |
| Re-armed with `naoctl rearm` on the robot (it stays limp until it is woken) | "Motors enabled. Wake me from the app to move." |
| A joint at 68 °C | "My joints are getting hot." |
| Battery at 20 % / 8 % | "My battery is low. Please charge me soon." / "My battery is almost empty. Please plug me in now." |
| Charger plugged in | "Thanks, I'm charging." |
| The app (a brain or a REST lease) connects, or is gone for 2 s | "My app is connected." / "My app disconnected." |
| Fell; first attempt to stand up | "Oops, I fell over. Getting up." |
| Gave up standing up | "Ouch. I can't get up on my own. Please help me." |
| The robot powers off | "I'm shutting down. Goodbye." |
| The robot reboots | "I'm restarting. I'll be right back." |
| Only nao-rs stops | "My software is stopping. See you soon." |

The robot tells a boot from a restart by a marker file in `/run/nao-rs`,
which is empty after every boot. When it stops, it asks systemd whether a
power-off or reboot is pending; if systemd does not answer within a second,
it says the software line. The goodbye skips any queued speech and takes at
most 4 seconds. The 8-second chest hold switches the robot off in the chest
board's firmware, without asking the software, so it has no goodbye. The
hold starts as an ordinary press, so the robot may begin "Stopped..." and its
address; the power cuts it off mid-sentence.

After a restart, a stop that came from a failure (heat, a fault, a lost
heartbeat) is said again after the greeting; a stop by a person is not.

## Its address

A chest press stops the motors ([the death switch](https://nao-rs.lukaloehr.com/safety.md#gestures)) and the
robot says how to reach it, for example:

> My address is 1 9 2 dot 1 6 8 dot 1 dot 4 2. Open port 7702 for my easy REST API.

So `http://192.168.1.42:7702` is the [REST API](https://nao-rs.lukaloehr.com/reference/rest-api.md). Pressing
again repeats it, at most once every 4 seconds. The robot builds the sentence
from recorded pieces (one per digit), so any address works offline.

It says the address a computer on the same network can use: a DHCP address on
the cable or Wi-Fi first, then nao-rs's fixed `172.28.28.28`, then a
link-local `169.254.x.x` address. Without any, it says "I have no network
address. Please check my cable or Wi-Fi."

## Language

English by default. For German, set `NAO_RS_LANGUAGE=de` for `hulk` on the
robot:

```bash
sudo systemctl edit hulk      # add:  [Service]  Environment=NAO_RS_LANGUAGE=de
sudo systemctl restart hulk
```

or set `"language": "de"` under `speakers` in `etc/parameters/hardware.json`
before installing; the environment variable wins. `speakers.speech_volume`
(default 1.0, as loud as the agent's voice) sets how loud the lines are.
[The brain](https://nao-rs.lukaloehr.com/brain.md#settings) reads the same `NAO_RS_LANGUAGE` for its own
words.

## Changing the lines

The texts live in `etc/sounds/voice.toml` in the nao-rs repository, one English
and one German text per line; the clips are generated with ElevenLabs by the
`nao_rs_voice` tool there and committed. The repository's `docs/voice.md`
describes the steps.

## Related topics

- [What nao-rs is](https://nao-rs.lukaloehr.com/get-started.md)
- [Quick start](https://nao-rs.lukaloehr.com/get-started/quickstart.md)
- [Install, flash and rollback](https://nao-rs.lukaloehr.com/get-started/install.md)
- Previous: [Install, flash and rollback](https://nao-rs.lukaloehr.com/get-started/install.md)
- Next: [Safety model](https://nao-rs.lukaloehr.com/safety.md)
