Get started

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

WhenWhat 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:

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 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.

On this page