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:
- raccoglie una foto da
/capture(se il modello vede le immagini), la telemetria e quello che ha sentito il microfono; - la manda a un endpoint compatibile con l’API OpenAI che gira sul tuo computer;
- 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.
| Backend | Indirizzo tipico | Immagini |
|---|---|---|
| Ollama | http://localhost:11434/v1 | sì, con un modello multimodale piccolo |
Laya (via mlx_lm.server su Mac Apple Silicon) | http://localhost:8081/v1 | solo testo (telemetria e trascrizione) |
| Qualsiasi server OpenAI-compatibile | http://…/v1 | dipende 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:
- buongiorno.yaml — alle 8:00 dei giorni feriali si alza e saluta
- ronda.yaml — un giro di pattuglia a quadrato
- saluta.yaml — saluta quando qualcuno passa davanti alla camera
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
- Parlare: l’azione
saypassa dal sintetizzatore vocale locale (saydi macOS opipersu Linux), viene convertita in PCM 16 kHz e inviata al robot sul WebSocket/audio. - Ascoltare (opzionale): il microfono del robot passa da un riconoscimento vocale locale (whisper) e la trascrizione entra nelle decisioni dell’LLM.
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.
- Un robot con camera e microfono in casa è un dispositivo delicato: avvisa chi vive o passa da te, e non condividere link ospite con sconosciuti.
- Tieni il token admin per te; i link ospite scadono da soli.
- Se esponi il Nido fuori casa, fallo attraverso una VPN come Tailscale, non aprendo porte sul router.
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.