annuncio

Comprimi
Ancora nessun annuncio.

Dubbi algoritmo PID

Comprimi
X
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • Dubbi algoritmo PID

    Ciao a tutti,
    vorrei implementeare l'algoritmo PID nel software del mio quadricottero per stabilizzarne l'assetto. Come scheda di controllo uso una Raspberry PI.
    Vorrei partire implementando il proporzionale, ovvero la P, che ho capito essere il prodotto fra la costante P ed e(t) dove e(t) è l'errore in un determinato istante che è dato da angolo_voluto-angolo_attuale.
    Ebbene i miei dubbi sono:
    -la costante P come la ricavo?
    -dovrò avere due PID, uno per il rollio e uno per il beccheggio, giusto?
    -il risultato dell'operazione che ho descritto sopra, che cos'è? Come lo uso?

    Grazie

  • #2
    Gioblu robotics | Che cos'è l'algoritmo PID | Correzione, Pid, Serial, Float, Fall
    multiwii e quadrirotore: http://www.multirotors.org
    software e invenzioni: http://www.sideralis.org

    Commenta


    • #3
      Già letta e stra letta, ma non riesco ad arrivare ad una conclusione

      Commenta


      • #4
        Puoi anche contattarlo gioblu, e' un tipo simpatico che conosco personalmente
        multiwii e quadrirotore: http://www.multirotors.org
        software e invenzioni: http://www.sideralis.org

        Commenta


        • #5
          Originariamente inviato da blackfede Visualizza il messaggio
          Puoi anche contattarlo gioblu, e' un tipo simpatico che conosco personalmente
          Come lo contatto? Dici che mi risponde se gli scrivo sulla mail che indica nel suo sito?

          Commenta


          • #6
            Originariamente inviato da G.Electro Visualizza il messaggio
            Ciao a tutti,
            vorrei implementeare l'algoritmo PID nel software del mio quadricottero per stabilizzarne l'assetto. Come scheda di controllo uso una Raspberry PI.
            Vorrei partire implementando il proporzionale, ovvero la P, che ho capito essere il prodotto fra la costante P ed e(t) dove e(t) è l'errore in un determinato istante che è dato da angolo_voluto-angolo_attuale.
            Ebbene i miei dubbi sono:
            -la costante P come la ricavo?
            -dovrò avere due PID, uno per il rollio e uno per il beccheggio, giusto?
            -il risultato dell'operazione che ho descritto sopra, che cos'è? Come lo uso?

            Grazie
            Detto il più semplicemente possibile
            Proll = ( segnale radioroll - lettura angolo roll calcolato tramite l'integrale del giroscopio fuso con il dato dell'accelerometro ) * K

            Dove K è un valore che attribuisci manualmente per regolare il processo in modo che non oscilli

            Proll sarà il valore PWM da aggiungere al motore di sinistra e togliere dal motore di destra o viceversa al seconda del segno ottenuto

            Ovviamente tutto deve essere scalato in modo da ottenere i valori corretti nel range 1160 - 1900 uS che sarebbe il range pwm da inviare all' esc dei motori
            Quadricottero News
            http://www.facebook.com/Quadricottero

            Commenta


            • #7
              Originariamente inviato da danveal Visualizza il messaggio
              Detto il più semplicemente possibile
              Proll = ( segnale radioroll - lettura angolo roll calcolato tramite l'integrale del giroscopio fuso con il dato dell'accelerometro ) * K

              Dove K è un valore che attribuisci manualmente per regolare il processo in modo che non oscilli

              Proll sarà il valore PWM da aggiungere al motore di sinistra e togliere dal motore di destra o viceversa al seconda del segno ottenuto

              Ovviamente tutto deve essere scalato in modo da ottenere i valori corretti nel range 1160 - 1900 uS che sarebbe il range pwm da inviare all' esc dei motori
              Ok grazie Danveal.
              Valori tipici di Kp quali potrebbero essere?

              Quindi, in un esempio pratico, se poniamo Kp=12, angolo voluto=-4 e angolo attuale=-45 la P sarà 41*12=492 che equivale dire aggiungere 492uS al segnale pwm di una coppia di motori e toglierli all'altra coppia, giusto?

              Commenta


              • #8
                Originariamente inviato da G.Electro Visualizza il messaggio
                Ok grazie Danveal.
                Valori tipici di Kp quali potrebbero essere?

                Quindi, in un esempio pratico, se poniamo Kp=12, angolo voluto=-4 e angolo attuale=-45 la P sarà 41*12=492 che equivale dire aggiungere 492uS al segnale pwm di una coppia di motori e toglierli all'altra coppia, giusto?
                Si con le opportune scalature.
                lo stick del radiocomando al centro ha un valore di 1500uS, supponiamo che quando lo porti a destra arriva a 2000uS mentre a sinistra a 1000uS
                hai un range di 500uS per lato, supponiamo che si voglia fare corrispondere ad un angolo di 50° massimo

                avrai da 0 a 50° a destra e da 0 a -50° con stick a sinistra di angolo voluto
                Ora dovrai leggere l'angolo rilevato e possibilmente dovrai fare in modo che il range sia da 0 a 50°
                Callcoli i P come hai scritto tu, e scali il valore ottenuto con il range PWM 1160 - 1900 che andra sommato e sotratto ai 2 motori ( destra e sinistra )

                Cosideriamo un quadricottero a +
                avrai un P per il roll che agisce sul motore destra e sinistra
                e un P per il pitch che agira' sul motore anteriore e posteriore.
                Inoltre avrai un P per lo Yaw
                La componente Pyaw andra sommata ai motori orari e sottratta ai motori antiorari ( o viceversa )
                Pdefinifivomotoredestra = Proll -(+) Pyaw + valore del gas
                Pdefintivomotoresinsitro= (-)Proll +(-) Pyaw + valore del gas
                I segni sono importanti cosi' come il senso di rotazione delle eliche 2 orarie e 2 antioriarie.
                Comunque e' un argomento un po lungo da sviluppare in un forum
                Ultima modifica di danveal; 06 novembre 13, 20:58.
                Quadricottero News
                http://www.facebook.com/Quadricottero

                Commenta


                • #9
                  Originariamente inviato da danveal Visualizza il messaggio
                  Si con le opportune scalature.
                  lo stick del radiocomando al centro ha un valore di 1500uS, supponiamo che quando lo porti a destra arriva a 2000uS mentre a sinistra a 1000uS
                  hai un range di 500uS per lato, supponiamo che si voglia fare corrispondere ad un angolo di 50° massimo

                  avrai da 0 a 50° a destra e da 0 a -50° con stick a sinistra di angolo voluto
                  Ora dovrai leggere l'angolo rilevato e possibilmente dovrai fare in modo che il range sia da 0 a 50°
                  Callcoli i P come hai scritto tu, e scali il valore ottenuto con il range PWM 1160 - 1900 che andra sommato e sotratto ai 2 motori ( destra e sinistra )

                  Cosideriamo un quadricottero a +
                  avrai un P per il roll che agisce sul motore destra e sinistra
                  e un P per il pitch che agira' sul motore anteriore e posteriore.
                  Inoltre avrai un P per lo Yaw
                  La componente Pyaw andra sommata ai motori orari e sottratta ai motori antiorari ( o viceversa )
                  Pdefinifivomotoredestra = Proll -(+) Pyaw + valore del gas
                  Pdefintivomotoresinsitro= (-)Proll +(-) Pyaw + valore del gas
                  I segni sono importanti cosi' come il senso di rotazione delle eliche 2 orarie e 2 antioriarie.
                  Comunque e' un argomento un po lungo da sviluppare in un forum
                  Ok ho capito, grazie.

                  Ascolta ma dove hai trovato che il range pwm è fra 1160 e 1900? Io in tutte le discussioni che ne parlano trovo scritto che il range è da 1000us a 2000us, con un impulso ogni 20ms, quindi frequenza di lavoro a 50Hz e passo minimo di incremento di 10us.

                  Commenta


                  • #10
                    Originariamente inviato da danveal Visualizza il messaggio
                    Si con le opportune scalature.
                    lo stick del radiocomando al centro ha un valore di 1500uS, supponiamo che quando lo porti a destra arriva a 2000uS mentre a sinistra a 1000uS
                    hai un range di 500uS per lato, supponiamo che si voglia fare corrispondere ad un angolo di 50° massimo

                    avrai da 0 a 50° a destra e da 0 a -50° con stick a sinistra di angolo voluto
                    Ora dovrai leggere l'angolo rilevato e possibilmente dovrai fare in modo che il range sia da 0 a 50°
                    Callcoli i P come hai scritto tu, e scali il valore ottenuto con il range PWM 1160 - 1900 che andra sommato e sotratto ai 2 motori ( destra e sinistra )

                    Cosideriamo un quadricottero a +
                    avrai un P per il roll che agisce sul motore destra e sinistra
                    e un P per il pitch che agira' sul motore anteriore e posteriore.
                    Inoltre avrai un P per lo Yaw
                    La componente Pyaw andra sommata ai motori orari e sottratta ai motori antiorari ( o viceversa )
                    Pdefinifivomotoredestra = Proll -(+) Pyaw + valore del gas
                    Pdefintivomotoresinsitro= (-)Proll +(-) Pyaw + valore del gas
                    I segni sono importanti cosi' come il senso di rotazione delle eliche 2 orarie e 2 antioriarie.
                    Comunque e' un argomento un po lungo da sviluppare in un forum
                    Una cosa non ho capito: come faccio a fare in modo che l'angolo rilevato sia massimo di 50°? Cioè, in linea teorica, il qc in volo può avere anche un angolo maggiore come 60° o 70°.

                    Seguendo il tuo ragionamento basta porre Kp=20, in questo modo:
                    -errore 0°, P=0
                    -errore 1°, P=1*20=20us
                    -errore 50°, P=50*20=1000us
                    E' giusto il ragionamento?

                    Ah altra cosa, ma dove hai trovato che il range pwm è fra 1160 e 1900? Io in tutte le discussioni che ne parlano trovo scritto che il range è da 1000us a 2000us, con un impulso ogni 20ms, quindi frequenza di lavoro a 50Hz e passo minimo di incremento di 10us.
                    Ultima modifica di G.Electro; 07 novembre 13, 23:34.

                    Commenta


                    • #11
                      Up

                      Inviato dal mio HTC One 801e con Tapatalk 2

                      Commenta


                      • #12
                        Originariamente inviato da G.Electro Visualizza il messaggio
                        Una cosa non ho capito: come faccio a fare in modo che l'angolo rilevato sia massimo di 50°? Cioè, in linea teorica, il qc in volo può avere anche un angolo maggiore come 60° o 70°.

                        Seguendo il tuo ragionamento basta porre Kp=20, in questo modo:
                        -errore 0°, P=0
                        -errore 1°, P=1*20=20us
                        -errore 50°, P=50*20=1000us
                        E' giusto il ragionamento?

                        Ah altra cosa, ma dove hai trovato che il range pwm è fra 1160 e 1900? Io in tutte le discussioni che ne parlano trovo scritto che il range è da 1000us a 2000us, con un impulso ogni 20ms, quindi frequenza di lavoro a 50Hz e passo minimo di incremento di 10us.
                        L'angolo attuale e' quello rilevato dall'algoritmo di calcolo che fa uso dell'accelerometro e del giroscopio e ovviamente puo' assumere valori superiori ai 50° ma il discorso e' che il pid lavora sull' angolo desiderato, cioe' il valore letto dallo stick del radiocomando, in relazione all'angolo rilevato.
                        Quindi lo stick ha un range PWM che deve essere convertito in angolo
                        se hai un range PWM di 500 uS e lo scali per avere da 0 a 200° avrai una risoluzione piu' grossolana rispetto ad un range da 0 a 80°, era un esempio.
                        Bisogna distinguere il range del segnale radio da quello utile agli esc.
                        Il segnale utile agli esc e' generato dalla scheda di controllo e il suo range dipende dall'esc in uso, in genere e' simile a quello che ho indicato ma con una frequenza superiore ai 50Hz, sarebbe meglio avere una frequenza intorno ai 400Hz
                        Quadricottero News
                        http://www.facebook.com/Quadricottero

                        Commenta


                        • #13
                          Originariamente inviato da danveal Visualizza il messaggio
                          L'angolo attuale e' quello rilevato dall'algoritmo di calcolo che fa uso dell'accelerometro e del giroscopio e ovviamente puo' assumere valori superiori ai 50° ma il discorso e' che il pid lavora sull' angolo desiderato, cioe' il valore letto dallo stick del radiocomando, in relazione all'angolo rilevato.
                          Quindi lo stick ha un range PWM che deve essere convertito in angolo
                          se hai un range PWM di 500 uS e lo scali per avere da 0 a 200° avrai una risoluzione piu' grossolana rispetto ad un range da 0 a 80°, era un esempio.
                          Bisogna distinguere il range del segnale radio da quello utile agli esc.
                          Il segnale utile agli esc e' generato dalla scheda di controllo e il suo range dipende dall'esc in uso, in genere e' simile a quello che ho indicato ma con una frequenza superiore ai 50Hz, sarebbe meglio avere una frequenza intorno ai 400Hz
                          No, allora, la libreria che mi permette di gestire gli esc tramite la scheda di controllo lavora a 50Hz, questo è ciò che c'è scritto nell'articolo che ne parla:

                          Di default lavora a 50 HZ (un impulso ogni 20 ms ).

                          La lunghezza dell’impulso da il comando al motore.

                          Con un impulso di 1ms =1000us , il motore sta fermo.

                          Con un impulso di 2ms =2000us , il motore va alla massima velocita’.

                          Il passo minimo di incremento e’ di 10us


                          Per quanto riguarda lo stick del radiocomando beh...è un bel problema, perchè io non uso un radiocomando.
                          La scheda di controllo si collega in wifi al mio pc (per ora veramente si collega al router, ma più avanti creerò una connessione ad-hoc) ed io gli invio i comandi tramite ssh (secure shall).
                          Quindi pensavo di comandarlo direttamente dalla tastiera del pc, tipo:
                          -premi tasto 'a': sterzata a sinistra
                          -premi tasto 'd': sterzata a destra
                          -premi tasto 'w': muoviti in avanti
                          -premi tasto 's': muoviti indietro

                          Commenta


                          • #14
                            50 Hz non sono sufficienti.
                            Per quanto riguarda il range PWM ci sono alcuni esc che accettano frequenze a partire da 1100 circa fino a 1900 e altri che partono da 1200 ed arrivano a 1800.

                            Ciao
                            Quadricottero News
                            http://www.facebook.com/Quadricottero

                            Commenta

                            Sto operando...
                            X