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

# FAQ

> Short answers about compatibility, safety, NAOqi, older robots, licensing and what comes next.

## Which robots does nao-rs support?

The NAO6 (NAO V6) only. It was developed and tested on a NAO6 with body
version 6.0.0 and head version 6.0.0. Older NAOs have a different head
computer and are not supported.

## Do I need HULKs-OS?

Today, yes: nao-rs installs on top of HULKs-OS 9.0.1 (kernel 6.12 with
PREEMPT_RT) and uses its kernel drivers and its `nao` user. A flashable image
with nao-rs preinstalled is planned and stays compatible with what HULKs-OS
9.0.1 runs.

## Does it work alongside NAOqi?

No. Flashing HULKs-OS replaces NAOqi. nao-rs replaces the hardware layer that
NAOqi's HAL and LoLA provided.

## Why don't the motors move?

Every motor board of a NAO6 that once ran NAOqi 2.8.7 reports configuration
version 11. nao-rs accepts only version 10 by default, exactly like the HAL in
HULKs-OS, until the first movement has been tested step by step on the robot:
lying down, one joint, low stiffness. That is the next milestone.

## Do I have to downgrade the motor board firmware?

No. nao-rs reads version 11 directly. A firmware downgrade or a compatibility
layer in front of HAL were the alternatives and are not needed.

## Can my existing software keep running?

nao-rs doesn't serve LoLA's socket: a program links the runtime as a Rust
library instead. Its state and commands use LoLA's arrays, order and units, so
code that converts LoLA's messages keeps its conversions. HULKs' `hulk` runs on
nao-rs this way, with the runtime linked in instead of talking to HULA.

## What happens if the software crashes while the robot moves?

The guard notices within 60 ms that the runtime stopped beating, kills it and
sends all-off frames itself. The motors go limp, so a standing robot falls,
but no motor keeps pushing. See [Safety model](https://nao-rs.lukaloehr.com/safety.md).

## Why is the UDP stop not authenticated?

On purpose: anyone near the robot must be able to stop it, from any device on
its network, even when the API is stuck. A stop can only switch motors off;
re-arming needs a person on the robot.

## Can I re-arm the death switch from the API?

No. Only `naoctl rearm` on the robot re-arms it. This is deliberate. A re-arm
doesn't wake the robot either: it stays limp until the app or an API wakes it.

## Is the fan controlled?

Yes, under nao-rs, with the curve of Aldebaran's own fan daemon. Under
HULKs-OS without nao-rs, nothing controls it.

## Does nao-rs contain Aldebaran's code?

No. nao-rs is written from scratch in Rust. Its behaviour was matched to the
original software by observing it: recordings of the robot's USB and I2C
traffic, and differential tests that call Aldebaran's original libraries next
to the port. None of Aldebaran's files are part of nao-rs.

## Is there a REST API?

Yes: HTTP/JSON on port 7702, with a token and control leases, answering the
local network only. See [REST API](https://nao-rs.lukaloehr.com/reference/rest-api.md). The brain uses the
MessagePack [robot API](https://nao-rs.lukaloehr.com/reference/api.md) on port 7700.

## Related topics

- [Troubleshooting](https://nao-rs.lukaloehr.com/help/troubleshooting.md)
- Previous: [Troubleshooting](https://nao-rs.lukaloehr.com/help/troubleshooting.md)
