Come si progetta e sviluppa un'app di telemetria?

nedjem

Well-known member
Nell'ultimo mese e mezzo ho progettato e sviluppato un'app di telemetria per lo sci. Ve la racconto, magari a qualcuno interessa il processo. È roba da nerd dello sci e dello sviluppo software, siete avvisati.

Premessa: non è una roba finita e perfetta, è un progetto personale che ho portato avanti nei ritagli di tempo, con tutto quello che questo comporta. Errori, ripensamenti, soluzioni artigianali e qualche soddisfazione inaspettata.

Volevo trovare il modo per misurare in maniera oggettiva alcuni dati che mi permettessero di analizzare la sciata nella sua sostanza, più che nella sua forma.

Tutto è partito da una chat con Gemini e da un brainstorming sulla fattibilità: non avevo mai lavorato con sensori esterni e dovevo capire come impostare il tutto. Alla fine della conversazione ero ottimista sulla possibilità di arrivare a qualcosa di concreto e ho ordinato i sensori dalla Cina, due M5StickC Plus2, basati su ESP32* con IMU* integrata: 20 giorni di attesa. In futuro non escludo di poter assemblare qualcosa con un IMU migliore, ma non avendo una stampante 3d non saprei come creare il case, quindi ho preferito partire con qualcosa di già pronto. Non il massimo dal punto di vista tecnico, ma comodo per partire.

Invece di aspettare che i sensori arrivassero ho tirato fuori un ESP32 che ho comprato qualche anno fa per fare dei test e che di fatto ho messo nel cassetto poco dopo: la piattaforma é la stessa dei sensori, solo che questo non ha accelerometri e giroscopi. Ho quindi scritto un firmware* che simulasse dati di accelerometro e giroscopio con una sinusoide, così da poter iniziare a lavorare sulla connessione BLE* e sulla struttura dei pacchetti dati anche senza avere niente in mano. Dati falsi, ma utili per mettere insieme tutta la parte di comunicazione tra il sensore e l'app che ho iniziato a sviluppare in contemporanea.

Sull'app, sviluppata in C# con MAUI in modo da poter girare su Android e iOS, ho iniziato dai moduli di servizio: accoppiamento BLE, gestione delle connessioni, settings: roba noiosa ma necessaria.

La prima decisione importante è stata salvare i dati grezzi esattamente come escono dai sensori, senza nessuna elaborazione. Sembrava ovvio ma si è rivelata la cosa più utile che potessi fare: ogni volta che capivo che una formula doveva essere modificata potevo applicarla nuovamente agli stessi dati già registrati, senza dover rimettere gli scarponi e andare in pista. Questo ha velocizzato moltissimo lo sviluppo successivo. In questa fase ho iniziato a sviluppare il motore di analis dei dati, che doveva funzionare sia con dati live durante la sciata, sia a posteriori sui dati di log salvati. L'inserimento della sintesi vocale che legge i risultati alla fine di ogni curva é stata in realtà la parte più semplice del progetto.

Nel frattempo ho tirato su anche il backend: volevo che si potessero condividere le sessioni con il proprio allenatore, quindi mi servivano database, storage e hosting. Con un vincolo: spesa zero. Alla fine: Vercel, NeonDB e Cloudflare. Free tier di tutto. Funziona, almeno con il carico modesto che può generare un singolo utente. In futuro si vedrà.

Quando i sensori sono arrivati ho completato il firmware per leggere i dati reali e mi sono occupato della comunicazione tra i due dispositivi via ESP-NOW. Ho impostato una struttura master/slave: lo slave che comunica i propri dati tramite ESP-NOW al master, il master li impacchetta insieme ai propri e manda tutto allo smartphone tramite BLE. In questo modo lo smartphone gestisce un'unica connessione e ha meno problemi.Le batterie dei sensori sono minuscole quindi ho lavorato parecchio sul risparmio energetico: i sensori trasmettono solo durante una sessione attiva, altrimenti stanno fermi e non leggono neanche i dati da accelerometro e giroscopio, restando in attesa della prossima richiesta di connessione dall'app.

I primi test sul campo sono stati un po’ demoralizzanti ma istruttivi. I supporti in plastica in dotazione ai sensori erano troppo flessibili, e ho scoperto che anche una piccola vibrazione rispetto allo scarpone rovina i dati. Ho preso quindi un vecchio case da PC, ricavato due piastrine di alluminio, messo tutto insieme con biadesivo, neoprene e due cinghie da pacchi che ricordano un booster molto spartano e ho creato un sistema di ancoraggio artigianale ma stabile.

In questa fase ho scoperto che tutto il codice di riconoscimento delle curve che avevo scritto sui dati simulati non funzionava con i dati reali: troppo rumore, dai troppo sporchi. Ho dovuto buttare l'approccio basato sull'accelerometro e passare al giroscopio, molto più affidabile in questo contesto.

Il calcolo delle forze G è stato il passaggio più sofferto: sono tornato sul firmware più volte, ho cambiato scala di misura, frequenza di campionamento, filtri. L'ho risolto per tentativi più che per illuminazione. Anche il BLE mi ha fatto penare: connessioni fantasma, dati che sparivano senza errori visibili. L'app non si collegava più ai sensori e semplicemente non capivo perché. Mi é servito qualche ciclo di modifiche e test per trovare la stabilità necessaria.

Sul campo ho scoperto anche l'esistenza del drift dei giroscopi: in pratica anche da fermi accumulano errore e continuano a credere di essere in movimento. Ho aggiunto una procedura di calibrazione iniziale e poi anche quella automatica, che parte da sola quando il sistema capisce che sei stato fermo abbastanza a lungo, per esempio a inizio run quando aspetti la conferma vocale di poter partire.

La parte più bella è stata confrontarsi sulle metriche insieme al mio maestro e mentore. Mi ha spiegato come legge una curva in pista, cosa la rende efficace, dove si perde energia. Tradurre quella roba in formule è stata la parte più stimolante di tutto il progetto. È nato così il "performance index", un numero che prova a riassumere l'efficacia di ogni curva. È ancora grezzo, ma già dice cose interessanti.

Per ora la prima fase è chiusa e funzionante. Quest'estate continuo i test con i pattini in linea per vedere se possa essere utile anche anche lì.

Spero questo racconto possa essere interessante per qualcuno: se così fosse, e se ci fossero domande, sarò lieto di rispondere per quanto mi é possibile.

Nel prossimo post, se volete, vi racconto cosa ho capito dalle prime analisi fatte sui dati.

Intanto grazie per essere arrivati fino a qui.

* Riporto da un messaggio che ho scritto in seguito
Piccolo glossario per chi non conosce il contesto.
L'ESP32 é una piccola scheda programmabile. Ce ne sono di diversi formati e di diversa potenza: alcune sono grosse come una moneta da due euro, circa.
L'IMU é un componente elettronico che contiene accelerometro e giroscopio: l'accelerometro misura gli spostamenti nelle tre direzioni, il giroscopio misura le rotazioni, sempre sui 3 assi.
Il firmware é il "programma" che dice alla scheda come deve funzionare. Il dispositivo arriva "vuoto", non fa niente: bisogna dirgli cosa fare e se si vuole che comunichi con altri dispositivi bisogna dirgli come.
Il BLE è la sigla del Bluetooth Low Energy: una forma di connessione Bluetooth, ma un po' diversa da quella degli auricolari e delle casse perché non è necessario fare il pairing dal menu del telefono e per una serie di caratteristiche tecniche che è inutile elencare. Consuma "poco" ed è utile per lo scopo.
Spero che questo possa rendere più comprensibile il mio racconto.
 
Ultima modifica:
Intanto complimenti per l'idea e la realizzazione, traspare tutto l'entusiasmo e la conoscenza veramente vasta nei vari campi, non solo IT ma anche elettronica (di quest'ultima io sono quasi completamente a digiuno).

Secondo me in linea generale dal tuo racconto traspare la mancanza di know how "pratico" sulla correzione dei dati in real time; i dati raw sono "sporchi" per definizione, e come hai notato tu ci sono continue oscillazioni per cui uno guardando solo i dati sembra che non si fermi mai.

Questo nel mio piccolo l'ho notato più volte, personalmente io mi diletto ad eseguire tutta una serie di trasformazioni, elaborazione e rappresentazione dei dati delle mie sciate. Per i miei desiderata vanno benissimo i dati del GPS del telefono; ovviamente i GPS commerciali anche se non hanno più tutte le limitazioni di parecchi anni fa, ne conservano comunque alcune, principalmente per evitare che vengano utilizzati per scopi militari.
Anche io fin dall'inizio ho notato che guardando i dati, anche se sono fermo (ad es. in baita al rifugio) viene creata una rosa di punti ravvicinati che sembra di essere un gatto che gironzola nel cortile. Ho avuto anche la pretesa di provare a filtrare in automatico, via elaborazione ex post, i dati di rilevamento di quando sono su impianto tipo una seggiovia, in cui sono fermo e immobile. Dato che fra i dati disponibili c'è l'orientamento in gradi, pensavo bastasse definire che se un tot di punti hanno la stessa inclinazione simile con una piccola tolleranza, allora probabilmente sono su un impianto (questo perchè su una pista da sci difficilmente vado dritto e basta per un tot di tempo). Tuttavia, anche in quei dati l'orientamento varia in maniera non così impercettibile, anche se il telefono è in tasca e io sono fermo seduto.
Perchè questo non accade durante le navigazioni in auto o su gmaps? Perchè il software di visualizzazione è "furbo", e aldilà di incrociare la posizione con altre metodologie (ad es. cella telefonica) se sono nei pressi di un'autostrada e vado a 120, assume che ci sono sopra come se fossi su binario, anche se la posizione restituita dai dati è lievemente sfalsata. Questo si nota bene quando si prende uno svincolo in uscita, per cui il navigatore ci mette un po' a piazzare il segnalino sulla rampa di uscita, perchè assume ancora che sono sul binario principale.

Su facebook pubblicizzano un po' di sensoristica integrata commerciale come quella che ti sei costruito (loro la mettono nello scarpone, penso sia perchè è la parte del corpo che fa meno movimenti indipendenti rispetto alla sciata); lì evidentemente gran parte del lavoro è stato fatto proprio sulla correzione near-real-time della telemetria. Non ho suggerimenti pratici da darti, ma la tua è una casistica nota e ultra nota, che sicuramente viene spiegata e sviscerata nei millemila papers ad hoc sul tema.
PS per curiosità ho posto i tuoi quesiti a chatgpt (l'avrai fatto anche tu con gemini immagino) e giustamente mi ha dato una marea di suggerimenti sulle calibrazioni da fare, sia prima che durante. Oltre che ovviamente calibrare la sensoristica in maniera indipendente rispetto al rumore, tipo la vibrazione dello scarpone che hai citato. Suggerisce anche di passare a un tracciamento a stati piuttosto che continuo e di evitare soglie fisse (se ne hai usate), anche questo mi pare più che verosimile. Più una serie di altri suggerimenti tecnico-elettronici che io non mastico.
 
Ultima modifica:
Intanto complimenti per l'idea e la realizzazione, traspare tutto l'entusiasmo e la conoscenza veramente vasta nei vari campi, non solo IT ma anche elettronica (di quest'ultima io sono quasi completamente a digiuno).

Secondo me in linea generale dal tuo racconto traspare la mancanza di know how "pratico" sulla correzione dei dati in real time; i dati raw sono "sporchi" per definizione, e come hai notato tu ci sono continue oscillazioni per cui uno guardando solo i dati sembra che non si fermi mai.

Questo nel mio piccolo l'ho notato più volte, personalmente io mi diletto ad eseguire tutta una serie di trasformazioni, elaborazione e rappresentazione dei dati delle mie sciate. Per i miei desiderata vanno benissimo i dati del GPS del telefono; ovviamente i GPS commerciali anche se non hanno più tutte le limitazioni di parecchi anni fa, ne conservano comunque alcune, principalmente per evitare che vengano utilizzati per scopi militari.
Anche io fin dall'inizio ho notato che guardando i dati, anche se sono fermo (ad es. in baita al rifugio) viene creata una rosa di punti ravvicinati che sembra di essere un gatto che gironzola nel cortile. Ho avuto anche la pretesa di provare a filtrare in automatico, via elaborazione ex post, i dati di rilevamento di quando sono su impianto tipo una seggiovia, in cui sono fermo e immobile. Dato che fra i dati disponibili c'è l'orientamento in gradi, pensavo bastasse definire che se un tot di punti hanno la stessa inclinazione simile con una piccola tolleranza, allora probabilmente sono su un impianto (questo perchè su una pista da sci difficilmente vado dritto e basta per un tot di tempo). Tuttavia, anche in quei dati l'orientamento varia in maniera non così impercettibile, anche se il telefono è in tasca e io sono fermo seduto.
Perchè questo non accade durante le navigazioni in auto o su gmaps? Perchè il software di visualizzazione è "furbo", e aldilà di incrociare la posizione con altre metodologie (ad es. cella telefonica) se sono nei pressi di un'autostrada e vado a 120, assume che ci sono sopra come se fossi su binario, anche se la posizione restituita dai dati è lievemente sfalsata. Questo si nota bene quando si prende uno svincolo in uscita, per cui il navigatore ci mette un po' a piazzare il segnalino sulla rampa di uscita, perchè assume ancora che sono sul binario principale.

Su facebook pubblicizzano un po' di sensoristica integrata commerciale come quella che ti sei costruito (loro la mettono nello scarpone, penso sia perchè è la parte del corpo che fa meno movimenti indipendenti rispetto alla sciata); lì evidentemente gran parte del lavoro è stato fatto proprio sulla correzione near-real-time della telemetria. Non ho suggerimenti pratici da darti, ma la tua è una casistica nota e ultra nota, che sicuramente viene spiegata e sviscerata nei millemila papers ad hoc sul tema.
PS per curiosità ho posto i tuoi quesiti a chatgpt (l'avrai fatto anche tu con gemini immagino) e giustamente mi ha dato una marea di suggerimenti sulle calibrazioni da fare, sia prima che durante. Oltre che ovviamente calibrare la sensoristica in maniera indipendente rispetto al rumore, tipo la vibrazione dello scarpone che hai citato. Suggerisce anche di passare a un tracciamento a stati piuttosto che continuo e di evitare soglie fisse (se ne hai usate), anche questo mi pare più che verosimile. Più una serie di altri suggerimenti tecnico-elettronici che io non mastico.
Grazie per l'interesse e per la risposta articolata. Approfitto per aggiungere alcuni dati che forse mi sono sfuggiti nel primo post:
non uso GPS, l'idea originaria é quella di consentire ai sensori di funzionare anche in autonomia, registrando direttamente nella memoria del sensore master. Quindi tutti i calcoli sono fatti senza il dato su posizione e velocità, cosa che spesso ha complicato un po' le cose.
Anche nel mio caso i sensori sono montati sugli scarponi, precisamente dietro al gambetto, in posizione verticale: la calibrazione azzera (o quantomeno limita) imprecisioni di montaggio.

Aggiungo un piccolo glossario per chi non conosce il contesto.
L'ESP32 é una piccola scheda programmabile. Ce ne sono di diversi formati e di diversa potenza: alcune sono grosse come una moneta da due euro, circa.
L'IMU é un componente elettronico che contiene accelerometro e giroscopio: l'accelerometro misura gli spostamenti nelle tre direzioni, il giroscopio misura le rotazioni, sempre sui 3 assi.
Il firmware é il "programma" che dice alla scheda come deve funzionare. Il dispositivo arriva "vuoto", non fa niente: bisogna dirgli cosa fare e se si vuole che comunichi con altri dispositivi bisogna dirgli come.
Il BLE è la sigla del Bluetooth Low Energy: una forma di connessione Bluetooth, ma un po' diversa da quella degli auricolari e delle casse perché non è necessario fare il pairing dal menu del telefono e per una serie di caratteristiche tecniche che è inutile elencare. Consuma "poco" ed è utile per lo scopo.
Spero che questo possa rendere più comprensibile il mio racconto.
 
Ultima modifica:
Interessante! quali saranno le differenze con ad esempio un sistema tipo CARVE? non hai pensato di sistemare sensori anche sullo sci?
 

.

Interessante! quali saranno le differenze con ad esempio un sistema tipo CARVE? non hai pensato di sistemare sensori anche sullo sci?
Intanto che CARV è un prodotto professionale, con un'azienda solida sotto e un team di sviluppatori, il mio un DIY fatto da un singolo. Per quanto io abbia considerazione di me stesso, non posso fingere che possa esistere un confronto (per quanto io capisca che la mente vada lì, assolutamente legittimo).
Fatta questa debita premessa, io mi sono concentrato su un utilizzo un po' diverso rispetto a CARV: loro hanno come target il grande pubblico, che spera di poter evitare il maestro utilizzando lo strumento (magari non lo dicono apertamente, ma questo è). Siccome io sono invece convinto del fatto che il maestro e l'allenatore siano fondamentali, non ho voluto insistere in quella direzione. Ho pensato invece a uno strumento che potrebbe AFFIANCARE gli allenatori (con tutte le obiezioni del caso, delle quali però non sono certo di voler parlare qui :D) nell'integrare criteri oggettivi nella valutazione e nella crescita tecnica di un atleta. L'idea non è sostituire l'allenatore, ma dargli degli strumenti.
Il mio cosino per come è adesso non ti insegna a sciare, non ti dice cosa devi migliorare e non ti suggerisce esercizi. Ti dà una fotografia oggettiva, poi sta al tuo allenatore mettere insieme i pezzi. Parlo di allenatore e non di maestro per un motivo preciso: per quanto le metriche possano probabilmente individuare uno sciatore scarso, io ad essere sincero non mi sono troppo posto il problema: non è una roba che serve per imparare a fare L4, non credo ci sia utilità in quel senso. Può essere utile solo da un "certo punto" in poi, e nemmeno io al momento so bene dove sia quel punto. Posso dire che il 100% degli utenti (ossia io) al momento lo ritiene utile, ma di più non posso affermare :D

Sensori sullo sci: sì, all'inizio ci ho pensato. Mi turba per una serie di motivi:
- necessità di un aggancio solido ma senza deturpare lo sci.
- maggiori vibrazioni ad alta intensità (arrivando fino allo scarpone parte delle vibrazioni viene assorbita).
- maggiore rischio di botte contro pali o contro gli sci dei villanzoni in coda.
- necessità di imperbeabilità totale, mentre ora sotto i pantaloni diciamo che ce la possiamo giocare un po' di più.

Non lo eslcudo a priori come possibile evoluzione, ma per il momento ho preferito restare un po' più alto, sotto i pantaloni e quindi un po' più protetto.
 
Ultima modifica:
Bravo!! non solo perchè molto interessante quello che stai portando avanti, ma anche per lo spirito di sana curiosità e umiltà nel farlo. Chapeau!

Quando facevo l'università, oramai quasi 20 anni fà, mi facevo le pippe anche con la PIV (particle image velocimetry) e già allora mi erano venute idee di trasporla allo sci per più o meno gli stessi tuoi fini...

all'epoca l'elettronica e l'informatica era quello che era e non andai molto oltre...anche perchè poi lavorativamente parlando sono andato a fare altro.
 
Peccato, mi stavi simpatico.
Ce l'hai con Gemini nello specifico o con il fatto che uno sviluppatore utilizzi modelli di linguaggio per velocizzare la fase di ricerca (e anche per imbastire parti di codice lunghe e noiose, seppur banali, lo ammetto)? :D
 
Ce l'hai con Gemini nello specifico o con il fatto che uno sviluppatore utilizzi modelli di linguaggio per velocizzare la fase di ricerca (e anche per imbastire parti di codice lunghe e noiose, seppur banali, lo ammetto)? :D
Usi vari modelli o solo gemini/google family?

Io in questi mesi (per lavoro lo uso l'IA sopratutto per organizzare contenuti e creare presentazioni e infografiche, quindi in modo massiccio notebookLM) sto interrogando le tre principali chat, ovvero claude, chatgpt e gemini, per capire quelle che meglio reagiscono senza prompt troppo stringenti, e devo dire che gemini a livello di ricerca è quello che preferisco, mentre sora mi piace di più come image generator...
E' che devo proporre al mio capo un abbonamento tra questi tre oltre a notebook, e ancora non so decidermi (a far le cose per bene servirebbero tutti)
 
I cervelli si stanno restringendo a una velocità impressionante, lo dicono vari studi. Trova il colpevole.
Lo dicevano già prima dell'avvento dell'IA, se la gente è più stupida è proprio perchè non sa/non vuole usare la tecnologia, e quando la usa molto spesso la usa nel modo sbagliato, d'altronde quando un boomer rincoglionito arriva a fare un intervista all'IA (veltroni, se volete ridere leggetevi le cazzate che ha scritto) o il 90% usa l'ia al posto dei motori di ricerca o per farsi scrivere i whazapp da mandare all'amante... è già comprensibile quante risorse vengono sprecate...

l'IA è in campo di studio, progettazione, formazione, ciò che è stata l'industria per la produzione fisica di prodotti: automazione, rapidità, e delega di lavori noiosi e privi di alcun elemento creativo...
Di recente ho convertito tramite IA un'intera dispensa di corsi online in inglese su argomenti di marketing e comunicazione in 4 file audio e altrettante infografiche sui punti salienti, in italiano, per formarmi e poi formare i miei colleghi, cosa che senza IA avrei impiegato settimane a tradurre e organizzare... Ho strutturato l'intera presentazione del piano welfare dell'azienda in cui lavoro tramite IA attingendo da materiale sparso in 4TB di dati su server, e sto lavorando adesso su creazione di modelli standardizzati di informazione sugli articoli che vendiamo, adattabili di volta in volta in base alle richieste dei clienti.

Sarà come tutti gli strumenti a disposizione delle persone usata in modo sensato e dunque produttivo da pochi, usata male dalla maggioranza...
D'altronde l'uso maggiore di internet (40% stimato nel 2025) è destinato ancora a guardare i porno...
 
A costo di sembrare antipatico, vi chiederei di non intavolare qui una discussione sull'AI in senso lato. Se vogliamo parlarne in una discussione off-topic sarò più che felice di portare la mia esperienza in merito, visto che ritengo di utilizzarla in modo un po' più approfondito della media e sono certo che le mia capacità cognitive siano completamente intatte.
Ciò detto, per l'applicazione relativa all'app in questione l'utilizzo dell'AI si è limitato al brainstorming iniziale sui dispositivi (non avevo mai lavorato con sensori esterni, non avevo idea di cosa esistesse e cosa fosse acquistabile a prezzo contenuto) e alla stesura di parti di codice dietro precise istruzioni. Gli strumenti sono stati principalmente Gemini per le chiacchiere (il fatto che in modalità veloce non abbia limiti di token la rende imbattibile), Claude per il codice, Qwen per le analisi dei dati grezzi dei log (lento e stupido sul codice, ma sulle analisi è molto performante).
 
Ultima modifica:
Lo dicevano già prima dell'avvento dell'IA, se la gente è più stupida è proprio perchè non sa/non vuole usare la tecnologia, e quando la usa molto spesso la usa nel modo sbagliato, d'altronde quando un boomer rincoglionito arriva a fare un intervista all'IA (veltroni, se volete ridere leggetevi le cazzate che ha scritto) o il 90% usa l'ia al posto dei motori di ricerca o per farsi scrivere i whazapp da mandare all'amante... è già comprensibile quante risorse vengono sprecate...

l'IA è in campo di studio, progettazione, formazione, ciò che è stata l'industria per la produzione fisica di prodotti: automazione, rapidità, e delega di lavori noiosi e privi di alcun elemento creativo...
Di recente ho convertito tramite IA un'intera dispensa di corsi online in inglese su argomenti di marketing e comunicazione in 4 file audio e altrettante infografiche sui punti salienti, in italiano, per formarmi e poi formare i miei colleghi, cosa che senza IA avrei impiegato settimane a tradurre e organizzare... Ho strutturato l'intera presentazione del piano welfare dell'azienda in cui lavoro tramite IA attingendo da materiale sparso in 4TB di dati su server, e sto lavorando adesso su creazione di modelli standardizzati di informazione sugli articoli che vendiamo, adattabili di volta in volta in base alle richieste dei clienti.

Sarà come tutti gli strumenti a disposizione delle persone usata in modo sensato e dunque produttivo da pochi, usata male dalla maggioranza...
D'altronde l'uso maggiore di internet (40% stimato nel 2025) è destinato ancora a guardare i porno...
Non mi riferivo all'IA. Parlo di tutto quanto viene dal computer in poi. Fine OT.
 
  • Like
Reactions: Teo
Top