Help

Troubleshooting

What to check when nao-rs doesn't start, the death switch won't stay armed, the guard takes over, or a tool can't open the chest board.

Start with these two commands on the robot; most problems show up in one of them.

naoctl status
journalctl -u hulk -u nao-rs-guard -n 50 --no-pager

The motors don't move

That is expected today. nao-rs rejects the robot's version 11 motor boards, as HAL 2.8.5 does, until the motor session on the robot (planned). See Status.

The switch is tripped and I didn't trip it

naoctl status names the reason. The first reason since the last re-arm is kept.

ReasonCauseWhat to do
Cli right after bootEvery boot starts with a new, tripped pageRe-arm when the robot is ready: naoctl rearm
ChestButtonThe chest button was pressedCheck the robot, re-arm
HeadTouchAll three head pads were touched at onceCheck the robot, re-arm
OvertemperatureA joint at 75 °C, or the CPU above 95 °C (the system halts then)Let the robot cool down; check the fan
DriverFaultThe cycle fell more than 3 periods behind, an exchange with the chest board failed, or the runtime stoppedRead journalctl -u hulk; look for cycle overran or cycle failed
ApiA stop from the REST API, its WebSocket, the MessagePack API or the brain's stop toolFind out which client; re-arm
UdpSomeone sent the UDP stop alone (for example cargo nao-rs stop)Find out who; re-arm
GuardHeartbeatLostThe runtime stopped beating for more than 60 msThe guard killed hulk; see below
PageLostThe switch page in /run/nao-rs was truncated, overwritten, deleted or replacedFind what touched /run/nao-rs. After a deletion or replacement, restart nao-rs (sudo systemctl restart nao-rs-guard, then systemctl restart hulk) so every stop path uses one page again; then re-arm
GuardNoConfirmationAfter a trip, the runtime didn't confirm an all-off frame within 40 msThe guard killed hulk; see below

The guard took over

journalctl -u nao-rs-guard shows TakeOver, KilledDriver and Holding. The guard holds the chest board and sends all-off. systemd restarts hulk after one second (Restart=on-failure); the guard hands the board to the new hulk, and the switch stays tripped.

  1. Read why hulk hung or died: journalctl -u hulk -n 200 --no-pager.
  2. Check that the new hulk beats: naoctl status.
  3. When the robot is safe, re-arm: naoctl rearm.

If hulk keeps failing, systemd gives up after repeated failures; fix the cause and run systemctl start hulk.

hulk doesn't start

  • failed to start the robot runtime: chest board: …: another program holds the chest board. HAL may still run (systemctl status hal), or the guard holds it after a takeover (see above), or a naoctl hardware command runs.
  • death switch: Permission denied or No such file or directory: /run/nao-rs is missing or has the wrong owner. It should be root:hal, mode 2770. Run sudo systemd-tmpfiles --create /etc/tmpfiles.d/nao-rs.conf.
  • head bus unavailable or head fan unavailable in the log: the runtime keeps running without the head or the fan. Check that LoLA is stopped (systemctl status lola) and that /dev/i2c-head and /dev/cgos exist.

The installer rolled back

Exit code 1 means the health check failed and the previous installation runs again. The installer printed the last 30 journal lines of both services; the failed installation is kept in /home/nao/hulk.failed. Exit code 2 means the rollback failed too: run cargo nao-rs robot restore <address>, or reflash.

naoctl can't open the chest board

The hardware commands (prefs, run, guard, head, replay-sensors) need the device to themselves. Stop hulk (systemctl stop hulk) and, for guard, the guard service. On the original stack, stop HAL, and LoLA for head. status, stop and rearm need nothing stopped.

LoLA can't reconnect after a restore

On HULKs-OS, LoLA can't connect to a HAL that is already running ("No HAL found"). Restart the whole chain in order: HAL, then LoLA, then HULA, then hulk. nao-rs robot restore does this.

The robot doesn't react to the UDP stop

  • Check the guard runs: systemctl status nao-rs-guard.
  • The datagram must start with exactly NAO-RS STOP and go to UDP port 7701.
  • A firewall between you and the robot may drop UDP. On the robot, naoctl stop always works.

The robot doesn't respond at all

Hold the chest button for 8 seconds: the chest board switches the robot off, whatever runs on the head.

On this page