Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Problema matematico!

Hybrid View

  1. #1

    Problema matematico!

    Salve a tutti

    Ho acquistato un giroscopio che come bene sapete misura la velocità di rotazione nei 3 assi X Y Z.

    Questo giroscopio quando è assolutamente fermo ritorna queste 3 misurazioni:
    x 65454
    y: 62660
    z: 94

    Il sensore utilizza 16bit per salvare le misurazioni quindi ha a disposizione range di numeri che va d a 0 a 65535 (unsigned).
    Come si vede dalla misurazione precedente però lo 0 varia da sensore a sensore e per il mio sono quelli scritti sopra relativi agli assi.

    Considerando l'asse X come esempio la domanda è c'è un modo "matematico" per poter ottenere la misurazione considerando il numero
    65454 come 0?

    Grazie mille in anticipo, spero di essere stato chiaro non scendendo troppo nei particolari.

    (uso java anche se dovrebbe essere indifferente)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A priva vista bastano delle semplici proporzioni/sottrazioni ma non mi è del tutto chiaro il problema.

    In questo modo x sarà quasi sempre negativo e se usi lo stesso zero per y e z ugualmente per questi assi.

    Ovvero se 65454 è 0, basta sottrarre questo valore al valore misurato. Se x vale 60000 allora il valore sarà

    60000-65454

    -5454
    Ultima modifica di oregon; 21-10-2014 a 11:25
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ti ringrazio tantissimo per avermi risposto, tuttavia adesso spiego meglio il problema...

    Sappiamo che in 16bit si riesce a contenere i valori massimi che vanno da −32768 a 32767 questo sensore non avendo numeri negativi puo contenere fino ad un valore massimo di 65535.

    Se consideriamo l'asse delle X, il nostro 0 sarà
    65454 possiamo dire che il nuovo range di numeri positivi va:
    da 65454 a 65535e da 0 a 32685 ----->proprio come da 0 a 32767 sono positivi per il range naturale.Mentre quelli negativi vanno:
    da 65453 a 32686 ----->proprio come da 0 a -32768 sono negativi per il range naturale

    Sempre considerando l'asse delle X un accelerazione positiva potrebbe superare il limite consentito di 65535 e portare un azzeramento del registro quindi passerebbe dal valore iniziale di 65454 a 200 il calcolo della misurazione è

    200 + (
    65535 - 65454 ) = 281

    Il valore 281 in questo caso è considerato come valore positivo proprio perche rientra nel range di numeri positivi.

    un accelerazione negativa invece potrebbe far ottenere il valore di 40000 il calcolo della misurazione è:

    65454 - 40000 = 25454

    In questo caso se pur positivo il valore dovrà essere considerato negativo perche rientra nel range dei numeri negativi.

    Un altra ipotesi è quando l'accelerazione non supera il limite massimo di 65535 supponendo che il valore letto è 65500 in questo caso la formula sarà:
    65454 - 65500 = −46

    Il risultato anche se negativo va considerato positivo perche rientra nel range di numeri positivi.

    Un modo non "logico" ma "matematico" per risolvere questo problema esiste per forza...

    Sono sicuro che il problema è molto più semplice di come lo immagino...

    Intanto ti ringrazio ancora della risposta ciao ciaooo

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    sto facendo i conti a mente e scrivendo dal telefonino.
    Questa funziona?
    codice:
    int myZero = 65454;
    int read = 40000;
    
    int real = ((read - myZero) & 0xFFFF) - 1;
    real = (real > 32767 ? real - 65535 : real);
    myZero è il tuo valore zero (come da strumento)
    read è il valore letto.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Ciao e grazie anche a te per la risposta, ottimo script anche se c'è un piccolo margine d'errore e non funziona se imposto come nuovo zero il numero 94 che rappresenta l'asse z nel mio caso... (ovviamente ho cambiato pure il limite nell' IF)

    Comunque credo che l'unica soluzione è creare uno script simile al tuo (che funziona con qualsiasi numero) perche la matematica non può aiutarci in questo caso...

    Anche se vorrei sbagliarmi...

    Fin ora non ho detto il modello del sensore ch'è MPU9150... e la cosa strana è che non ho ancora trovato qualcuno che abbia avuto lo stesso problema.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    int real = ((read - myZero) & 0xFFFF);        
    real = (real > 32767 ? real - 65536 : real);
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Prova a mettere sulla variabile read prima il numero 32769 e poi 32764,sono 2 numeri vicini al nostro limite di 32767, questo significa che i risultati dovrebbero dare uno un numero positivo e l'altro negativo... ma come potrai vedere non è cosi..

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Sì, ma qual è lo zero stavolta?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    sempre 65454, cmq al codice che hai scritto manca il limite dinamico... anche facendo quella modifica non funziona... o per lo meno in alcuni casi si in altri no

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Con 65454 hai un offset di 81, quindi l'ultimo positivo sarà 32685 e corrisponderà a 32767 e il primo (o meglio, l'ultimo) negativo sarà 32686 e corrisponderà a -32768.

    32767 e 32769 sono entrambi maggiori di 32685 (e minori di 65454) e quindi correttamente entrambi negativi
    Ultima modifica di Andrea1979; 22-10-2014 a 16:43
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.