Go Down

Topic: [Multicotteri] Elettronica : IMU, MCU, Sensori ed algoritmi di controllo (Read 439488 times) previous topic - next topic

dab77


...Per quanto riguarda il software lato pc è lo stesso sia per APM che per MegaPirateNG ed è stata rilasciata da poco la versione Linux e c'è una versione, ridotta, per Android.
Attenzione che per compilare MegaPirateNG serve una apposita versione dell'IDE di Arduino denominata 1.0.3.
Con Mavlink puoi gestire la telemetria e la navigazione tra waypoint, il protocollo prevede anche il pilotaggio diretto, però non sono sicuro se MegaPirateNG supporta anche questa funzionalità.


Purtroppo anche la versione apposita di arduino è solo per win e mac... ma si sa in cosa differisce? si può modificare un arduino per linux per farlo andare?

astrobeed


Nel caso invece dovessi andare di protocollo personale, rispetto al mio dubbio su come interfacciarmi cosa ne pensi?
Ovviamente pensavo anch'io ppm-sum, se devo passare per l'ingresso ppm, altrimenti mi eviterei le trasformazioni ed entrerei direttamente con la seriale nel Mega2560. poi li dentro trasformo le variabili lette e le metto al posto della conversione del ppm.


Probabilmente la soluzione migliore è usare una piccola MCU esterna che converte i comandi da seriale in PPMSUM, va bene qualunque mcu a 8 pin dotata di UART e un paio di timer.
Scientia potentia est

astrobeed


Purtroppo anche la versione apposita di arduino è solo per win e mac... ma si sa in cosa differisce? si può modificare un arduino per linux per farlo andare?


Ho provato a scaricarlo, l'IDE ha un tab in più che permette di scegliere l'HAL con cui lavorare tra APM 1.x, APM 2.x, e MegapirateNG, ovviamente dietro questo c'è sicuramente un discreto carico di librerie dedicate alle cosa.
Senza disporre dei sorgenti dell'IDE modificato, in teoria dovrebbero essere disponibili, la vedo dura trasportare la cosa su IDE 1.0.5 per Linux.
Ti conviene seguire il consiglio di Lock, macchina virtuale con sopra Xp e usa la versione windows, non credo sia possibile far girare l'IDE di Arduino con Wine (da verificare).
Una cosa che ho letto stamattina, Arducopter cessa lo sviluppo su piattaforma ATmega 2560, ovvero le attuali release hardware, APM 2.6, e software, 3.1, sono le ultime su questo hardware, il motivo è che sono stati raggiunti i limiti della piattaforma, praticamente il 100% della flash usata e il 96% del tempo CPU.
Arducopter, anzi adesso solo APM, va avanti sulle piattaforme a 32bit, ovvero la PX4 PixHawk di 3DR e la VRbrain di VR, tutte e due basate su STM32F4 (core ARM Cortex M4), tutte due decisamente costose.
Scientia potentia est

astrobeed

Mi sono appena ricordato che l'anno scorso avevo realizzato un programma che converte l'out PPM dei singoli servo di una ricevente in S.BUS Futaba, che è ancora meglio del PPMSUM visto che è un pacchetto dati contenente i valori degli impulsi, sono sicuro che MegaPirate NG accetta anche l'S.BUS, mi pare pure MultiWii 2.3 (devo verificare).
Non dovrebbe essere un problema convertire quel codice in modo da fargli accettare in ingresso Mavlink, o altro protocollo, e fornire in uscita S.BUS, non è possibile trasmetterlo direttamente via datalink perché anche se è una normale comunicazione su UART (8N2) deve rispettare delle precise tempistiche nella ripetizione dei pacchetti, se non mi ricordo male ogni 14 ms ovvero ~71 Hz.
Scientia potentia est

dab77

Bè, visto il costo e la fatica irrisori, e alla luce dei tuoi consigli, penso che mi conviene fare una schedina di conversione. (penso che un attiny85 basta..)
Però visto che probabilmente più in là utilizzerò un trasporto a 2,4GHz, penso che vado di ppmsum così non perdo tempo a riconvertire dopo.
Per quanto riguarda il discorso Win/Linux, ho provato in tutti i modi ad installare il Planner 2.0 beta2 (l'ultima) su linux (dicono si faccia, ma il discorso è veramente recente..) ma niente da fare. le librerie ci sono tutte, ma alla compilazione escono tipo 5000 warning...poi mi fermo io perchè la vedo dura..
Ah, lavoro su Ubuntu 13.10 Gnome.
In compenso il planner di Windows gira bene su Wine riconoscendo per ora la scheda USB-Seriale. (ho dovuto fare solo un link tra ttyUSB0 e com3.) appena mi arriva la sceda provo il funzionamento.
Se è solo per la compilazione su Arduino mi appoggio tranquillamente a windows. Mi scoccia usarlo troppo, ma un pò ogni tanto si può ancora fare... :)
Poi per quanto riguarda la versione di APM, comprendo, ma penso proprio che per ora posso "accontentarmi" delle funzionalità offerte da queste versioni..

Quote
Probabilmente la soluzione migliore è usare una piccola MCU esterna che converte i comandi da seriale in PPMSUM, va bene qualunque mcu a 8 pin dotata di UART e un paio di timer.

Scusa, ma perchè dici due Timer? non ne basta uno impostato a 20, o meglio 22ms e fare un ciclo per tutti i canali?

dab77

sto scaricando l'arduino per compilare ardupilot... Però! ne hanno aggiunta di roba! 90MByte contro i circa 60 dell'arduino normale....

astrobeed


sto scaricando l'arduino per compilare ardupilot... Però! ne hanno aggiunta di roba! 90MByte contro i circa 60 dell'arduino normale....


La versione per windows contiene avr-gcc per Windows che è più pesante della rispettiva versione per Linux, per girare gli servono delle librerie aggiuntive.
Scientia potentia est

dab77

ah, pardon, non lo sapevo...
..in compenso..URRAH!!  :D :D :D

La versione special di Arduino, ovvero: ArduPilot-Arduino-1.0.3, gira tranquilla su Wine (Wine v.1.4.1 - ubuntu 13.10-Gnome) e pare pure compilare! dico pare perchè ho provato solo lo sketch blink su una Duemilanove.

Mi pare una notizia interessante! quasi quasi lo comunico anche nel loro forum..

astrobeed


Poi per quanto riguarda la versione di APM, comprendo, ma penso proprio che per ora posso "accontentarmi" delle funzionalità offerte da queste versioni..


L'attuale versione di MegaPirateNG è matura e stabile, potrebbe anche essere che loro portano avanti lo stesso lo sviluppo visto che sono indipendenti dal gruppo di APM, però la vedo dura perché a parte correggere qualche bug minore e ottimizzare qualcosa rimane il fatto che la MCU è arrivata al limite, in tutti i casi per la tua applicazione va benissimo come è attualmente.

Quote

Scusa, ma perchè dici due Timer? non ne basta uno impostato a 20, o meglio 22ms e fare un ciclo per tutti i canali?


Un timer è il clock di sistema, un timer genera il PPM, io sono abituato a ragionare sempre con un sistema sia event driven (interrupt) che con esigenze ROTS (scheduler degli eventi), per me  è la norma avere un sysclock :)
Il TINY85 non ha una UART, ha l'USI che è un hardware per comunicazioni seriali castrato :) , meglio se vai su una mcu con una vera UART.

Scientia potentia est

astrobeed


ah, pardon, non lo sapevo...
..in compenso..URRAH!!  :D :D :D


C'è poco da essere felici,  con solo Linux hai sempre problemi per far girare software "particolare" :)

Quote

La versione special di Arduino, ovvero: ArduPilot-Arduino-1.0.3, gira tranquilla su Wine (Wine v.1.4.1 - ubuntu 13.10-Gnome) e pare pure compilare! dico pare perchè ho provato solo lo sketch blink su una Duemilanove.


Buono a sapersi, tocca vedere se riesce anche a caricare sul ATmega 2560 perché con Wine non sempre si riesce ad usare correttamente la USB, però questo è un problema relativo perché puoi farlo usando avrdude, direttamente da Linux, da riga di comando/script utilizzando l'hex generato.
Scientia potentia est

astrobeed

MegaPirateNG ha anche un tool (per Windows) che permette di flashare direttamente la board con l'ultima release del software preconfigurate tramite una serie di scelte dalla GUI, provato su una MEGA2560 e funziona perfettamente.
Non serve l'IDE di Arduino per compilare in quanto i vari firmware vengono scaricati online in base alle scelte fatte.

Scientia potentia est

lestofante


La versione per windows contiene avr-gcc per Windows che è più pesante della rispettiva versione per Linux, per girare gli servono delle librerie aggiuntive.


ora le contengono anche quelle linux, mi pare dalla 23 in poi, proprio per evitare casini di tollchain
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

astrobeed


ora le contengono anche quelle linux, mi pare dalla 23 in poi, proprio per evitare casini di tollchain


Certo, ora sia la versione Linux che quella MAC contiene la stessa, vecchia, toolchain della versione Windows proprio per evitare i vasi casini  dovuti a librerie gcc non allineate e preinstallate da Linux/MAC, però GCC per Windows richiede più roba per girare sotto questo ambiente operativo, ovvero usa WinAvr che ha un suo peso nel pacchetto.
Scientia potentia est

dab77



Scusa, ma perchè dici due Timer? non ne basta uno impostato a 20, o meglio 22ms e fare un ciclo per tutti i canali?


Un timer è il clock di sistema, un timer genera il PPM, io sono abituato a ragionare sempre con un sistema sia event driven (interrupt) che con esigenze ROTS (scheduler degli eventi), per me  è la norma avere un sysclock :)
Il TINY85 non ha una UART, ha l'USI che è un hardware per comunicazioni seriali castrato :) , meglio se vai su una mcu con una vera UART.

Giusto.
Magari (solo perchè ce li ho) uso un attiny2313 che ha USART e 2 Timer...
A questo punto chiedo un piccolo chiarimento. Per quanto riguarda il PPM-SUM, il "vuoto" da lasciare per far da sync al treno di ppm va bene di 4ms? e poi ogni 2ms parte un impulso tra i 1000 e i 2000 uS, e se il canale non è usato 500uS? però mi chiedo, se ho 2 segnali consecutivi da 2ms, devo comunque prevedere un piccolo "vuoto" tra i due?
Perdonatemi se chiedo cose ovvie, è solo perchè tra le info trovate in giro ho trovato alcune discordanze..
Tipo qui danno un buon esempio, ma dal quale si deduce che l'impulso non arriva a 2000 uS, ma un pò di meno.. oltretutto il segnale di sync lungo non è LOW, ma HIGH.. come funziona?

astrobeed


A questo punto chiedo un piccolo chiarimento. Per quanto riguarda il PPM-SUM, il "vuoto" da lasciare per far da sync al treno di ppm va bene di 4ms? e poi ogni 2ms parte un impulso tra i 1000 e i 2000 uS, e se il canale non è usato 500uS? però mi chiedo, se ho 2 segnali consecutivi da 2ms, devo comunque prevedere un piccolo "vuoto" tra i due?


Regola generale per il PPMSUM, premesso che può essere sia a logica positiva che negativa, dipende dal tipo di ricevente e nel firmware c'è una opzione per scegliere la logica, di default è logica negativa, ovvero idle a 1 logico e impulsi a 0 logico, la separazione tra i singoli impulsi deve essere almeno 100 us, la durata finale del frame deve essere 100us maggiore della durata massima per l'impulso.
Esempio pratico, tipicamente gli impulsi variano tra 1000 e 2000 us, valori standard e di default previsti da tutti i software, questo comporta che per codificare otto canali, il massimo possibile, servono 2100 * 7 us + 2000 us = 16700 us, separazione per il frame durata minima 2100 us.
Anche se la durata del frame non è obbligatoriamente costante è bene che lo sia, semplifica il lavoro del software di decodifica e garantisce una frequenza costante di refresh dei dati, da questo ne deriva che la durata finale del frame è variabile in funzione della durata dei singoli impulsi.
Nota che sia MultiWii che MegaPirateNG consigliano di regolare la propria radio, se possibile, per emettere impulsi tra 1000 e 2000 us, a  seconda di marca e modello tale valore può essere sensibilmente inferiore come default, p.e. tra 1050 e 1950 us con centro a 1500 us come a 1514-1524 us per alcuni modelli di radio.
Domani ti posto una videata del DSO per il PPMSUM in out dalla presa DSC (usata per i simulatori e per mettere due radio in master/slave) del mio Tx (una Aurora 9 Hitech) così hai una misura reale del segnale a cui fare riferimento.
Comunque tutti i software per multi consentono di impostare sia il valore per il centro che quello degli estremi da software se non è possibile farlo sulla radio.
Scientia potentia est

Go Up