Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Scopri di più su Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.
Perché unirti a noi?
Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Accedi in anteprima agli annunci di nuovi prodotti e alle anticipazioni.
Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni e Giveaway Festivi: Partecipa a giveaway e promozioni in occasione delle festività.
👉 Sei pronto a esplorare e creare con noi? Clicca [here] e unisciti oggi stesso!
14. Auto con Comandi Vocali usando Espeak e Pico2Wave
In questa lezione useremo due motori di sintesi vocale (TTS) integrati in Raspberry Pi — Espeak e Pico2Wave — per far parlare la PiCar-X.
Questi due motori sono semplici e funzionano offline, ma hanno caratteristiche vocali diverse:
Espeak: molto leggero e veloce, ma con una voce robotica. Puoi regolare velocità, intonazione e volume.
Pico2Wave: produce una voce più fluida e naturale rispetto a Espeak, ma con meno opzioni di configurazione.
Sentirai la differenza nella qualità della voce e nelle funzionalità, e poi costruirai un”“auto con prompt vocale” che annuncia le sue azioni prima di muoversi.
Prima di iniziare
Assicurati di aver completato:
Installare Tutti i Moduli (Importante) — Installa i moduli
robot-hat,vilib,picar-x, poi esegui lo scripti2samp.sh.
1. Testare Espeak
Espeak è un motore TTS leggero incluso in Raspberry Pi OS. La sua voce suona robotica, ma è altamente configurabile: puoi regolare volume, intonazione, velocità e altro.
Passaggi per provarlo:
Crea un nuovo file con il comando:
cd ~/picar-x/example sudo nano test_tts_espeak.py
Copia il codice di esempio al suo interno. Premi
Ctrl+X, poiYe infineEnterper salvare ed uscire.from picarx.tts import Espeak tts = Espeak() # Optional voice tuning # tts.set_amp(100) # 0 to 200 # tts.set_speed(150) # 80 to 260 # tts.set_gap(5) # 0 to 200 # tts.set_pitch(50) # 0 to 99 # Quick hello (sanity check) tts.say("Hello! I'm Espeak TTS.")
Esegui il programma con:
sudo python3 test_tts_espeak.py
Dovresti sentire la PiCar-X dire: “Hello! I’m Espeak TTS.”
Prova a rimuovere il commento dalle linee di regolazione della voce nel codice per sperimentare come
amp,speed,gapepitchinfluenzano il suono.
2. Testare Pico2Wave
Pico2Wave produce una voce più naturale e umana rispetto a Espeak. È più semplice da usare ma meno flessibile — puoi solo cambiare la lingua, non intonazione o velocità.
Passaggi per provarlo:
Crea un nuovo file con il comando:
cd ~/picar-x/example sudo nano test_tts_pico2wave.py
Copia il codice di esempio al suo interno. Premi
Ctrl+X, poiYe infineEnterper salvare ed uscire.from picarx.tts import Pico2Wave tts = Pico2Wave() tts.set_lang('en-US') # en-US, en-GB, de-DE, es-ES, fr-FR, it-IT # Saluto veloce (verifica di funzionamento) tts.say("Hello! I'm Pico2Wave TTS.")
Esegui il programma con:
sudo python3 test_tts_pico2wave.py
Dovresti sentire la PiCar-X dire: “Hello! I’m Pico2Wave TTS.”
Prova a cambiare lingua (per esempio
es-ESper lo spagnolo) e ascolta la differenza.
3. Auto con Prompt Vocale
Ora combiniamo Pico2Wave o Espeak con il codice di guida di PiCar-X per creare un’“auto con prompt vocale”: prima di ogni azione, l’auto annuncerà ciò che sta per fare.
Esegui il Codice
cd ~/picar-x/example
sudo python3 14.voice_promt_car.py
Esegui questo codice e vedrai la tua PiCar-X andare avanti, indietro e girare, annunciando ogni volta prima la manovra. Questo rende la tua auto più sicura, amichevole e interattiva.
Codice
from picarx import Picarx
from picarx.tts import Espeak
import time
# If you want to try Pico2Wave instead of Espeak, uncomment below:
# from picarx.tts import Pico2Wave
# tts = Pico2Wave()
# tts.set_lang('en-US') # Options: en-US, en-GB, de-DE, es-ES, fr-FR, it-IT
px = Picarx()
tts = Espeak()
# Quick hello (test)
tts.say("Hello! I'm PiCar-X.")
def main():
try:
# Forward
tts.say("Moving forward")
px.forward(30)
time.sleep(2)
px.stop()
# Backward
tts.say("Moving backward")
px.backward(30)
time.sleep(2)
px.stop()
# Turn left
tts.say("Turning left")
px.set_dir_servo_angle(-20)
px.forward(30)
time.sleep(2)
px.stop()
px.set_dir_servo_angle(0)
# Turn right
tts.say("Turning right")
px.set_dir_servo_angle(20)
px.forward(30)
time.sleep(2)
px.stop()
px.set_dir_servo_angle(0)
except KeyboardInterrupt:
# Stop if interrupted
px.stop()
finally:
# Reset to safe state
px.stop()
px.set_dir_servo_angle(0)
if __name__ == "__main__":
main()
Risoluzione dei Problemi
Nessun suono quando esegui Espeak o Pico2Wave
Controlla che altoparlanti/cuffie siano collegati e che il volume non sia disattivato.
Esegui un test rapido nel terminale:
espeak "Hello world" pico2wave -w test.wav "Hello world" && aplay test.wav
Se non senti nulla, il problema è nell’uscita audio, non nel tuo codice Python.
La voce di Espeak è troppo veloce o troppo “robotica”
Prova a regolare i parametri nel tuo codice:
tts.set_speed(120) # più lento tts.set_pitch(60) # diversa intonazione
Permission denied quando esegui il codice
Prova a eseguire con
sudo:sudo python3 test_tts_espeak.py
Confronto: Espeak vs Pico2Wave
Caratteristica |
Espeak |
Pico2Wave |
|---|---|---|
Qualità della voce |
Robotica, sintetica |
Più naturale, simile a una voce umana |
Lingue |
Inglese predefinito |
Meno lingue, ma le più comuni |
Regolazioni possibili |
Sì (velocità, intonazione, ecc.) |
No (solo lingua) |
Prestazioni |
Molto veloce, leggero |
Leggermente più lento, più pesante |