annuncio

Comprimi
Ancora nessun annuncio.

ArmFox v4 e Multipilot 32 la piattaforma definitiva.

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

  • ArmFox v4 e Multipilot 32 la piattaforma definitiva.


    Buongiorno a tutti , oggi mi sono preso una mezzoretta di tempo per presentare il progetto agli amici italiani.

    ArmFox v4 e' l'evoluzione di QuadFox v3 , ho cambiato nome e ho aperto un nuovo thread perche' la piattaforma su cui si basa ArmFox e' totalmente rinnovata e decisamente molto piu' potente della Multipilot 1.0

    Prima di tutto ho cercato di venire incontro un po' a tutte le fasce di utenti che ho conosciuto negli ultimi anni dando a tutti la possiiblita' di sperimentare , giocare e divertirsi , ma anche a chi vuole fare qualcosa di un po' piu' professionale in futuro di avere degli interlocutori di tutto rispetto con cui confrontarsi.

    ArmFox4 e' una piattaforma completa di Frame , Elettronica e firmware.



    Il frame puo' essere scelto tra diverse tipologie costruite dai membri della nostra community dai fanstastici frame in carbonio realizzati da Bercella ai funzionali e robusti realizzati da Pipposoft. L'elettronica di base e' costituita dalla Multipilot32 con la IMU di Diydrones la OilPan. Nella progettazione di Multipilot32 abbiamo lasciato spazio all'impiego di materiali standard per quanto riguarda ESC Motori e ricevitori radio , infatti e' grazie all'alta velocita' del processore 72 mhz contro i normali 16 delle piattaforme arduino e' possibile collegare ESC di tutte le taglie alle uscite standard ppm a 16 bit (65000 step invece di 127) senza aver grosse problematiche di gestione. Sono comunque consigliati alcuni modelli di base . La MP32 ha 8 intressi PPM standard e quindi puo' gestire tranquillamente normali riceventi RC. Ovviamente per chi vuole il massimo dal proprio quad rimangono disponibili accessori top di gamma come gli ESC i2c compatibili con lo standard mikrokopter e le riceventi digitali e analogiche 1 wire di ultima generazione che su un unica coppia di fili fanno correre fino a 12 canali RC.


    Una delle componenti fondamentali di questo progetto e' il software di bordo . Da oltre 2 anni faccio parte del gruppo di sviluppatori che stanno realizzando Arducopter. Il progetto ha l'obbiettivo di realizzare un quad che sia in grado oltre che di volare bene supportare funzionalita' evolute come ad esempio il gps hold , la navigazione waypoint e la stabilizzazione di quota con barometro ad alta quota e con sonar a bassa quota.

    Questo e' il primo volo con il porting del firmware Arducopter NG a 32 bit.



    Dopo diversi anni di sviluppo siamo arrivati finalmente ad un punto in cui queste funzionalita' si vedono realizzate nella sezione video di virtualrobotix ce ne sono diversi esempi ... con Multipilot32 sara' tutto ancora piu' performante e stabile visti l'incremento di prestazioni disponibile con questa nuova cpu. fino a 24x rispetto ad una cpu standar arduino mega.

    Il progetto poi e' ben supportato dal FOXTEAM che ormai conta quasi 200 user e un core team internazionale molto numeroso, siamo oltre le venti persone , ognuna specializzata nella funzionalita' specifica.

    Tutto cio' mantenendo pero' un prezzo di base della scheda cpu di soli 70 euro , 99 $ e con la possibilita' di montare imu che vanno dalla WMP poche decine di euro fino a schede professionali ...






    Un po' di link con molte informazioni inerenti lo stato del progetto :

    Link alla presentazione PPT: Multipilot 32 Power Point Official Presentation - FOXTEAM UAV CLAN
    Link al thread getting started: http://www.virtualrobotix.com/profil...ot32-tutorial-...
    Link alla presentazione del primo volo : http://www.virtualrobotix.com/profil...ot32-ardupilot...
    Link alla presentazione Vros.: http://www.virtualrobotix.com/forum/...ite-paper-simp...
    Link alla Building log giornaliera: Multipilot 2.0 - AP32 Building Log realtime update. The next gen cpu for your Arducopter. - FOXTEAM UAV CLAN

    Spero che il progetto sia interessante e che trovi supporto in italia dove nasce come lo sta' trovando nel resto del mondo .

    Un saluto a tutti

    Roberto
    File allegati
    Redfox74
    Virtual Robotix ( Arducopter DEVTEAM )
    http://www.virtualrobotix.com
    Canale di supporto FB
    https://www.facebook.com/groups/1606596929592397/

  • #2
    Ciao Roberto
    ho l'onore di essere il primo a rispondere al nuovo tread..
    Complimentoni per l'ottimo lavoro...avendo già provato l'ottima qualità della MultiPilot 1.0 e del QuadFox v.3 sono sicuro che questa schedina ci restituirà delle belle soddisazioni.

    Continuiamo così.

    Ciao

    Diego
    Ultima modifica di Elmessicano; 27 febbraio 11, 16:46.

    Commenta


    • #3
      Grazie Diego,
      a meta' settimana organizzo un Webinar che e' una sorta di video spiegazione degli ambienti di sviluppo e delle librerie che sto' impiegando ed implementando nei nostri software , questa sera ho fatto una prova con Ciskje , visto che mi aveva chiesto di effettuare un benchmark l'abbiamo fatto in diretta e la piattaforma sembrava reggere .. si chiama freebinar.com .
      Cmq il benchmark ha dato un buon risultato di prestazioni tra un arduino standard a 16 mhz e la MP32 abbiamo visto nel primo bench 960 se non sbaglio quello fatto da francesco su un arduino , mentro al multipilot 32 ha segnato 4210 , quindi un bel pezzo piu' veloce .. il benchmark che abbiamo provato e' questo se qualcun altro volesse rifarlo :
      #define MAXX 1024
      byte primes[MAXX];

      void setup()
      {
      Serial2.begin(115200);
      Serial2.println("Calculating...");
      unsigned long start;
      int cycle;

      start=millis();
      while (millis()-start<5000)
      {
      for(int i=0;i<MAXX;i++)
      primes[i]=1;

      for(int num=2;num<MAXX;num++)
      {
      for(int i=2*num;i<MAXX;i+=num)
      primes[i]=0;

      }
      cycle++;
      }
      Serial2.println(cycle);
      /*
      for(int i=0;i<MAXX;i++)
      if (primes[i]==1)
      Serial.println(i);
      */
      }

      void loop()
      {
      }

      Saluti a tutti
      Roberto
      Redfox74
      Virtual Robotix ( Arducopter DEVTEAM )
      http://www.virtualrobotix.com
      Canale di supporto FB
      https://www.facebook.com/groups/1606596929592397/

      Commenta


      • #4
        ciao Roberto
        complimenti per il lavoro.

        ho 3 domande da ignorante:

        6 uscite PWM significa che non si possono gestire 8cotteri senza usare regolatori I2C?

        MultiPilot32 è il nome della scheda incluso il processore ARM ma esclusi i sensori, giusto? ArmFox V4 allora cosa identifica, MP32+IMU+FW?

        Si possono caricare così come sono i vari codici per Arduino o è necessario un adattamento? sarebbe il "porting"? nel caso serva,è un lavoro complesso/lungo?

        ciao
        davide
        quota, velocità, idee: averne sempre almeno due

        Commenta


        • #5
          Originariamente inviato da redfox74 Visualizza il messaggio
          Grazie Diego,
          a meta' settimana organizzo un Webinar che e' una sorta di video spiegazione degli ambienti di sviluppo e delle librerie che sto' impiegando ed implementando nei nostri software Saluti a tutti
          Roberto
          Bella la MP32 anche come costo e' appetibile, non hai un compilatore in BASIC cosi la provo?
          Quadricottero News
          http://www.facebook.com/Quadricottero

          Commenta


          • #6
            Ciao Roberto

            mi hai incuriosito con stò test e l'ho provato su un Arduino 2009,risultato un punteggio di 872....poi per curiosità l'ho provato anche su un Arduino Nano,risultato...identico..872.

            Mi sembra pochino...

            Ciao

            Diego

            Commenta


            • #7
              Originariamente inviato da blinking Visualizza il messaggio
              ciao Roberto
              complimenti per il lavoro.

              ho 3 domande da ignorante:

              6 uscite PWM significa che non si possono gestire 8cotteri senza usare regolatori I2C?

              MultiPilot32 è il nome della scheda incluso il processore ARM ma esclusi i sensori, giusto? ArmFox V4 allora cosa identifica, MP32+IMU+FW?

              Si possono caricare così come sono i vari codici per Arduino o è necessario un adattamento? sarebbe il "porting"? nel caso serva,è un lavoro complesso/lungo?

              ciao
              davide
              1) In realta' le uscite sono molte di piu' di sei almeno 8 e se non usi un po' di ingressi puoi convertirli in uscite pwm .. c'e' un doc tecnico che ti allego che ti da' queste info .. lo trovi comunque nei documenti sul sito FOXTEAM UAV CLAN
              2) Esatto MP32 e' solo la cpu senza i sensori .. per i sensori hai una vasta scelta , poi devi orientarti rispetto a quelli supportati dalle librerie . ArmFox V4 e' MP32 con OilPan e firmware Arducopter NG , alla base puoi aggiungere magnetometro , gps e sonar ed ottenere questo risultato almeno quando abbiamo finito il poring e gli ultimi test :
              Hexacopter - FOXTEAM UAV CLAN
              3) Tra i diversi framework che sto' rendendo disponibili ce n'e' anche uno che ti consente di usare il linguaggio arduino su MP32 , ovviamente supporta tutto cio' che e' scritto ad alto livello , non le chiamate a funzioni native del processore ... quindi se usi il software di multiwii cosi com'e' non funziona .. devi fare un porting , cioe' devi cambiare le librerie di gestione della i2c , degli interrupt per la ricezione della radio e devi anche cambiare il pwm in uscita ..
              Nel progetto arducopter invece abbiamo adottato un'altra strategia , abbiamo librerie standard che vengono chiamate da programmi uguali su cpu anche molto diverse tra di loro , e ogni cpu mette a disposizione librerie compatibili . Inoltre abbiamo deciso che con un file board.h andremo a descrivere quelle funzioni tipiche di una cpu specifica quindi e' tutto piu' semplice .. giovedi' faro' un seminario online .. dove spieghero' un po' tutte queste cose se ti interessa iscriviti .. trovi l'evento su virtualrobotix.

              Spero di aver risposto alle tue domande.
              Un saluto
              Roberto
              File allegati
              Redfox74
              Virtual Robotix ( Arducopter DEVTEAM )
              http://www.virtualrobotix.com
              Canale di supporto FB
              https://www.facebook.com/groups/1606596929592397/

              Commenta


              • #8
                Il test è il mitico crivello di eratostene, o Sieve benchmark.
                Cosa curiosa e che ottimizzato per size (-Os nelle opzioni del gcc) su arduino fa 872 e su STM32 2692, ottimizzato per Speed (-O2) su arduino 966 e su STM32 4210. (basta guardare la compilazione premendo shift per le opzioni attive).

                Ammirevole l'ottimizzazione per size del GCC su arduino, estremamente efficiente.
                Da notare che l'incremento di velocità con STM32 è derivato quasi direttamente dall'incremento di clock, e l'accesso alla memoria è compensato dalle operazioni a 16-bit (che devono essere scomposte su arduino che è a 8-bit), su stm32 certamente l'int sarà a 32-bit.

                In conclusione direi l'ARM STM32 è circa 4 volte più veloce nelle operazioni accesso alla memoria e calcoli interi.

                Da vedere nei calcoli floating point.
                Informatico Professionista, Amante dei 4x4 e delle auto ibride, costruttore di quadricotteri.

                Commenta


                • #9
                  Test Floating point

                  Ecco il test floating point (è appunto una DCM Madgwick):


                  #include <math.h>
                  #include "ahrs.h"

                  void separator()
                  {
                  Serial.print(";");
                  }

                  ///////////////////////////////////////////////////////////////////////////////

                  unsigned long prevTime;


                  void setup()
                  {
                  Serial.begin(115200);

                  Serial.println("AHRS Benchmark start... (wait 5 sec)");
                  ahrs.setup();

                  long start=millis();
                  int cycle=0;
                  float sec=5.0; // how many seconds?

                  while (millis()-start<sec*1000) // wait 5 sec
                  {
                  ahrs.update(-0.04, -0.09, 0.06, 6, 259, 9, -73, -539, 194); // expected value near 1.44 -1.29 -3.04
                  cycle++;
                  }
                  Serial.print((int)(sec*1e6/cycle));
                  Serial.println(" us per cycle");

                  float check=ahrs.r+ahrs.p+ahrs.y;
                  if (check>=-2.99 && check<=-2.79)
                  Serial.println("Check OK");
                  else
                  Serial.println("Check Error");

                  }

                  void loop()
                  {
                  delay(1000);
                  }

                  Il Risultato su arduino è 2002us per cycle.
                  Informatico Professionista, Amante dei 4x4 e delle auto ibride, costruttore di quadricotteri.

                  Commenta


                  • #10
                    AHRS.h

                    //================================================== ================================================== =
                    // AHRS.h
                    // S.O.H. Madgwick
                    // 25th August 2010
                    //================================================== ================================================== =
                    //
                    // See AHRS.c file for description.
                    //
                    //================================================== ================================================== =
                    #ifndef AHRS_h
                    #define AHRS_h

                    #define Kp 2.4f // proportional gain governs rate of convergence to accelerometer/magnetometer
                    #define Ki 0.015f // integral gain governs rate of convergence of gyroscope biases
                    #define halfT (1/60.0) // half the sample period

                    class CAHRS
                    {
                    //---------------------------------------------------------------------------------------------------
                    // Variable definitions

                    float exInt , eyInt , ezInt ; // scaled integral error
                    public:
                    float q0, q1 , q2 , q3 ; // quaternion elements representing the estimated orientation
                    float p,r,y;

                    void setup()
                    {
                    exInt=0;
                    eyInt=0;
                    ezInt=0;
                    q0=1.0;
                    q1=q2=q3=0;
                    }
                    void update(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz) {
                    float norm;
                    float hx, hy, hz, bx, bz;
                    float vx, vy, vz, wx, wy, wz;
                    float ex, ey, ez;

                    // auxiliary variables to reduce number of repeated operations
                    float q0q0 = q0*q0;
                    float q0q1 = q0*q1;
                    float q0q2 = q0*q2;
                    float q0q3 = q0*q3;
                    float q1q1 = q1*q1;
                    float q1q2 = q1*q2;
                    float q1q3 = q1*q3;
                    float q2q2 = q2*q2;
                    float q2q3 = q2*q3;
                    float q3q3 = q3*q3;

                    // normalise the measurements
                    norm = sqrt(ax*ax + ay*ay + az*az);
                    ax = ax / norm;
                    ay = ay / norm;
                    az = az / norm;
                    norm = sqrt(mx*mx + my*my + mz*mz);
                    mx = mx / norm;
                    my = my / norm;
                    mz = mz / norm;

                    // compute reference direction of flux
                    hx = 2*mx*(0.5 - q2q2 - q3q3) + 2*my*(q1q2 - q0q3) + 2*mz*(q1q3 + q0q2);
                    hy = 2*mx*(q1q2 + q0q3) + 2*my*(0.5 - q1q1 - q3q3) + 2*mz*(q2q3 - q0q1);
                    hz = 2*mx*(q1q3 - q0q2) + 2*my*(q2q3 + q0q1) + 2*mz*(0.5 - q1q1 - q2q2);
                    bx = sqrt((hx*hx) + (hy*hy));
                    bz = hz;

                    // estimated direction of gravity and flux (v and w)
                    vx = 2*(q1q3 - q0q2);
                    vy = 2*(q0q1 + q2q3);
                    vz = q0q0 - q1q1 - q2q2 + q3q3;
                    wx = 2*bx*(0.5 - q2q2 - q3q3) + 2*bz*(q1q3 - q0q2);
                    wy = 2*bx*(q1q2 - q0q3) + 2*bz*(q0q1 + q2q3);
                    wz = 2*bx*(q0q2 + q1q3) + 2*bz*(0.5 - q1q1 - q2q2);

                    // error is sum of cross product between reference direction of fields and direction measured by sensors
                    ex = (ay*vz - az*vy) + (my*wz - mz*wy);
                    ey = (az*vx - ax*vz) + (mz*wx - mx*wz);
                    ez = (ax*vy - ay*vx) + (mx*wy - my*wx);

                    // integral error scaled integral gain
                    exInt = exInt + ex*Ki;
                    eyInt = eyInt + ey*Ki;
                    ezInt = ezInt + ez*Ki;

                    // adjusted gyroscope measurements
                    gx = gx + Kp*ex + exInt;
                    gy = gy + Kp*ey + eyInt;
                    gz = gz + Kp*ez + ezInt;

                    // integrate quaternion rate and normalise
                    q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
                    q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
                    q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
                    q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;

                    // normalise quaternion
                    norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
                    q0 = q0 / norm;
                    q1 = q1 / norm;
                    q2 = q2 / norm;
                    q3 = q3 / norm;


                    y=atan2(2*q1*q2-2*q0*q3,2*q0*q0+2*q1*q1-1);
                    p=-asin(2 * q1 * q3 + 2 * q0 * q2); // theta
                    r=atan2(2 * q2 * q3 - 2 * q0 * q1, 2 * q0 * q0 + 2 * q3 * q3 - 1); // phi

                    }
                    };

                    CAHRS ahrs;

                    #endif
                    //================================================== ================================================== =
                    // End of file
                    //================================================== ================================================== =
                    Informatico Professionista, Amante dei 4x4 e delle auto ibride, costruttore di quadricotteri.

                    Commenta


                    • #11
                      Originariamente inviato da ciskje Visualizza il messaggio
                      //================================================== ================================================== =
                      // AHRS.h
                      // S.O.H. Madgwick
                      // 25th August 2010
                      //================================================== ================================================== =
                      Ecco il risultato del test sul calcolo in virgola mobile , senza particolari ottimizzazioni , cosi come me lo hai inviato tu .. ho mantenuto -O2 sul compilatore ... i tempi piu' o meno si riconfermano ... in questa versione di micro non ho FPU a bordo , ma nella versione di cui ti parlavo che sara' disponbile l'anno prossimo e sara' pienamente compatibile con tutto quello che faremo su MP32 ce lo avremo disponibile e potremo andare con un clock quasi doppio da 72 ad almeno 120 mhz ed in piu' il cooprocessore matematico in virgola mobile hardware.

                      AHRS Benchmark start... (wait 5 sec)

                      476 us per cycle contro i
                      Il Risultato su arduino è 2002us per cycle.
                      Quindi MP32 anche in questo test risulta decisamente piu' veloce .

                      Check OK
                      Ultima modifica di redfox74; 28 febbraio 11, 10:40.
                      Redfox74
                      Virtual Robotix ( Arducopter DEVTEAM )
                      http://www.virtualrobotix.com
                      Canale di supporto FB
                      https://www.facebook.com/groups/1606596929592397/

                      Commenta


                      • #12
                        Non capendo un' H di tutto quanto scritto e mi piacerebbe tanto capire qualcosa...vedo però e non me ne volere che il quadricottero oscilla vistosamente e mi chiedevo è un setup definitivo o in via di sviluppo? Me lo chiedo perchè sono interessato a farmi un quadri più grande di quello in mio possesso e volevo capire su quale elettronica di supporto approdare
                        Grazia
                        Il mio canale youtube
                        http://www.youtube.com/user/hurricanenzo

                        Commenta


                        • #13
                          Originariamente inviato da hurricane01 Visualizza il messaggio
                          Non capendo un' H di tutto quanto scritto e mi piacerebbe tanto capire qualcosa...vedo però e non me ne volere che il quadricottero oscilla vistosamente e mi chiedevo è un setup definitivo o in via di sviluppo? Me lo chiedo perchè sono interessato a farmi un quadri più grande di quello in mio possesso e volevo capire su quale elettronica di supporto approdare
                          Grazia
                          Ciao hurricane01 ,
                          no problem ci mancherebbe , in quel video il quad traballa realmente un po' hai proprio ragione Ma e' il primo volo in assoluto del software Arducopter NG portato su piattaforma ARM , in particolare sul prototipo filato di Multipilot32 che ai tempi del video non avevo ancora assemblato in via definitiva .. Praticamente fatti i test pre volo e portato in volo .. le novità oltre alla cpu che nessuno aveva mai usato su quel software erano anche le uscite pwm anziche' i2c come di solito uso nelle mie realizzazioni vedi QuadFox v3.
                          Tu su cosa stai lavorando come base di elettronica ? MP32 e' sicuramente un bel passo avanti rispetto a tutto il resto che c'e' in giro Fligh Control di Mikrokopter inclusa.Nelle prossime settimane si iniziera a vedere la potenzialità ancora inespressa di Multipilot 32. E poi potro' fare anche io le mie valutazioni rispetto alla precedente Multipilot 1.0 , se dettagli meglio le tue richieste posso cercare di risponderti in base anche alla nostra roadmap di progetto.
                          Comunque il setup definitivo del progetto eiste e si chiama Arducopter NG , con diversi firmware tra cui la revision 458 del gruppo Ardupirates . In quella configurazione la scheda APM , la versione 8 bit di Multipilot32 monta OilPan che e' la scheda IMU che comprende il barometro , il magnetometro e il gps . Oltre che al sonar . Mp32 e' l'evoluzione della scheda APM del progetto realizzato da virtualrobotix assieme a Diydrones .. non so' se conosci tutte ste sigle ...
                          Un saluto e grazie
                          Roberto
                          Ultima modifica di redfox74; 28 febbraio 11, 21:16.
                          Redfox74
                          Virtual Robotix ( Arducopter DEVTEAM )
                          http://www.virtualrobotix.com
                          Canale di supporto FB
                          https://www.facebook.com/groups/1606596929592397/

                          Commenta


                          • #14
                            Originariamente inviato da redfox74 Visualizza il messaggio
                            non so' se conosci tutte ste sigle ...
                            è veramente da panico capirci qualcosa con tutte queste sigle e nomi di progetti spesso molto simili tra loro.
                            ci vorrebbe un video esplicativo tipo questo: Il Riassunto Di Beautiful in 6 Minuti - Beautiful in 6 Minutes - Video

                            oppure una più pratica e veloce paginetta riassuntiva dei vari progetti passati e presenti
                            quota, velocità, idee: averne sempre almeno due

                            Commenta


                            • #15
                              Originariamente inviato da blinking Visualizza il messaggio
                              è veramente da panico capirci qualcosa con tutte queste sigle e nomi di progetti spesso molto simili tra loro.
                              ci vorrebbe un video esplicativo tipo questo: Il Riassunto Di Beautiful in 6 Minuti - Beautiful in 6 Minutes - Video

                              oppure una più pratica e veloce paginetta riassuntiva dei vari progetti passati e presenti
                              ennòòòòòòò.....ti tocca premere il tasto cerca...e leggerti tuuuuuuuutti i post da 20 anni a questa parte


                              naturalmente scherzo... e non faccio riferimento a nessuno
                              FpvProjekt channels:
                              http://www.youtube.com/user/Arnald26
                              http://www.vimeo.com/album/72997

                              Commenta

                              Sto operando...
                              X