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) 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. 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:
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 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.
Install, flash and rollback
Flashing HULKs-OS, what the nao-rs installer changes, its health check, the automatic rollback, and the planned flashable image.
Safety model
How nao-rs stops the motors: a latched death switch checked before every frame, a guard process that takes over a hung runtime, the triggers, and the chest board's own hard power-off.