Tappa 10 · opzionale

Nido, il cervello locale

Il robot da solo si pilota benissimo dal telefono. Il Nido è un piccolo server Python che gira su un Mac, un PC o un Raspberry Pi di casa e gli aggiunge tre cose: controllo condiviso, autonomia con un modello linguistico locale e routine.

[iPhone / amici] ⇄ HTTPS ⇄ [Nido: Mac/PC/RPi] ⇄ WS/HTTP ⇄ [Pulcino]
                                 ├─ LLM locale (Laya, Ollama, …/v1)
                                 ├─ routine YAML
                                 └─ voce: TTS/STT locali

Proxy HTTPS: il microfono su iPhone

Il Nido ripubblica la web app del robot in HTTPS. Su iPhone questo sblocca il push-to-talk, perché Safari concede il microfono solo in un contesto sicuro. Il modo più semplice per avere un certificato valido è Tailscale (tailscale serve o tailscale cert), che funziona anche fuori casa senza aprire porte sul router.

Presa di controllo multiutente

Chiunque abbia il link può guardare il video e chiedere il controllo. Le regole sono semplici:

Un pilota alla volta

Chi guida ha un “turno” di 60 secondi, rinnovabile se nessuno è in coda. Gli altri guardano e aspettano il loro turno.

Coda equa

Le richieste finiscono in coda nell’ordine in cui arrivano; quando il turno scade passa al prossimo.

Il proprietario vince

Con il token admin puoi sempre riprendere il controllo, fermare tutto o chiudere la sessione.

Link ospite con scadenza

Generi un link che vale, per esempio, un’ora o un giorno: poi smette di funzionare da solo.

Il Nido limita anche la frequenza dei comandi per utente, così nessuno può “inondare” il robot.

Autonomia con un LLM locale

Quando nessuno pilota (o se lo chiedi tu), il Nido entra in un ciclo di al massimo una decisione al secondo:

  1. raccoglie una foto da /capture (se il modello vede le immagini), la telemetria e quello che ha sentito il microfono;
  2. la manda a un endpoint compatibile con l’API OpenAI che gira sul tuo computer;
  3. riceve un’azione JSON da un insieme chiuso e la esegue, con limiti di velocità.
{"azione":"move","vx":0.4,"wz":0.0,"secondi":2,"motivo":"corridoio libero"}
{"azione":"say","testo":"Ciao! Come ti chiami?","motivo":"vedo una persona"}

Il campo motivo finisce nel registro, così capisci perché ha deciso così. Il formato completo è nel prompt di sistema in nido/prompts/sistema.txt.

Azioni permesse: move, stop, pose, say, beep, eyes, wait. Nient’altro: il modello non può eseguire comandi sul computer né accedere a Internet.

BackendIndirizzo tipicoImmagini
Ollamahttp://localhost:11434/v1sì, con un modello multimodale piccolo
Laya (via mlx_lm.server su Mac Apple Silicon)http://localhost:8081/v1solo testo (telemetria e trascrizione)
Qualsiasi server OpenAI-compatibilehttp://…/v1dipende dal modello

Si configura in config.example.yaml (sezione llm), da copiare in config.yaml.

Routine locali

Per le cose ripetitive non serve un LLM: bastano file YAML in nido/routines/, leggibili da chiunque. Esempi inclusi:

nome: buongiorno
trigger:
  tipo: orario
  orario: "08:00"
  giorni: [lun, mar, mer, gio, ven]
passi:
  - pose: stand
  - say: "Buongiorno! È ora di alzarsi."
  - pose: wave
  - wait: 2
  - pose: rest

Voce

Privacy

Nessun dato esce dalla tua rete se non lo decidi tu: il modello, la voce e le routine girano in locale. Il repository non contiene indirizzi IP o credenziali personali, solo config.example.yaml.

Avvio rapido

cd nido
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp config.example.yaml config.yaml    # imposta robot.host e il backend llm
python -m nido --config config.yaml
python -m nido --config config.yaml --link-admin   # stampa il link del proprietario

Non hai ancora il robot? Il Nido include un finto robot per le prove: fake_robot.py. Tutti i dettagli sono nel README del Nido.