Pages: 1 ... 77 78 [79] 80 81 ... 106   Go Down
Author Topic: [Multicotteri] Elettronica : IMU, MCU, Sensori ed algoritmi di controllo  (Read 99126 times)
0 Members and 1 Guest are viewing this topic.
Tortona
Offline Offline
God Member
*****
Karma: 2
Posts: 590
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tutto chiaro per adesso!!! grazie
non resta che aspettare la vendita smiley-razz
Logged

Se gommo tiene,io vince gara! Se gommo non tiene,io come bomba dentro montagna

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho dato una sbiriciatina al sito di Drotek, la loro IMU con  gli stessi sensori della STM32F3 Discovery costa 37 Euro smiley
Da notare che i sensori di ST costano meno di quelli di Invensense e di Analog.
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Chiedo scusa ma vorrei una delucidazione.
Ho scaricato lo sketch multiwii da caricare sull'arduino giusto per dargli un'occhiata. devo essere sincero ma pensavo che l'occhiata sarebbe diventata un'esitazione alla scritturo di un codice (perchè no) magari mio, e invece sembra a me leggibile smiley

Ma arrivo al dunque, ho visto che ad ogni motore si assegna un valore che arriva a 2000,
Code:
motor[FRONT] = 1500 + rcCommand[THROTTLE] - axisPID[PITCH] ;
per poi essere riportato massimo a 255 cioè il massimo valore ammissibile per il pwm(per pilotare l'ESC, no?).
Code:
analogWrite(FRONT_PIN, motor[FRONT]>>3);
Perchè questo e sopratutto perchè usare il bitshift e non una proporizione?


Un'altra cosa,
Ci tenevo particolarmente a scrivere del codice perchè altrimenti il progetto non mi darebbe molte soddisfazioni.. cioè una qualcosina fatta ad hoc!
Ho visto che il codice multiwii è molto corposo anche perchè è in grado di gestire diverse configurazioni. Secondo voi sarebbe quindi troppo difficile scrivere un codicino? Niente di particolare, nessuno UAV, solo un qualcosa che mi permetta di farlo alzare e girare senza nessuna particolare stabilità!
Ovviamente prima caricherei sull'hardware il multiwii, ma poi..? Qualcuno ci è già riuscito? No perchè se non ci siete riusciti voi..  smiley-yell
Se usassi degli xbee al posto della trasmittente classica? Collegherei un joystick della playstation al pc che elabora tramite python e invia a bordo i dati già pronti degli stick, senza dover smanettare sui PPM della ricevente. I canali sarebbero molti di cui 4 per gli stick, che sono l'indispensabile no?

Grazie, ma sto solo valutando l'idea smiley-grin

Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10102
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

1500 circa è il valore di metà stick (in millisecondi), a cui somma le varie componenti (sempre in millisecondi)

poi usa il bitshift perchè è molto più veloce della proporzione.

Quello che vuoi fare è fattibile, se studi il codice del multiwii non so, ma di quello aeroquad trovi sul loro repositori la versione in lavorazione che vedrai è divisa in tante piccole compoenti, che poi vengono unificate solo alla fine. In questo modo puoi partire a modificare solo la parte che ti interessa.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie, allora vedrò anche quello smiley

Avevo già chiesto qualcosina riguardo la logica di stabilizzazione e mi avevi parlato di PID però ora che ho capito più o meno cos'è mi viene spontanea una domanda: Se alla fine il PID diventa un valore che vado ad aggiungere o sottrarre alla "velocità" dei motori, e quindi indica quanto agire sui motori, non potrei semplicemente agire sui motori fino a quando la posizione attuale è uguale a quella voluta?
Mi spiego meglio: Giro a destra di X con lo stick, ricevuto il segnale so che il mezzo deve avere inclinazione X e quindi con il PID so quanto agire sul motore per ottenere l'inclinazione.
Non potrei invece: Giro a destra di X stick, ricevuto il segnale so che il mezzo deve avere inclinazione X e quindi inclino il mezzo fino a quando il giroscopio mi dice che l'inclinazione è stata ottenuta?

Poi un'altra cosa, dove trovo un qualche link utile riguardo i movimenti che devono fare i motori per andare avanti, indietro, ruotare su se stesso ecc?
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10102
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

studiati bene come funziona il pid e ne riparliamo. per il movimento dei motori basta un minimo di logica.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un'idea di come si muova ce l'ho, volevo solo vedere se fosse giusta :\
Studierò il PID, però lasciandolo un attimo da parte, perchè non si può usare quel metodo?
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10102
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si tratta di un gioco di inclinazione di vettori per il movimento, e di inierzia angolare per le rotazioni sul posto.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Milano, Italy
Offline Offline
Faraday Member
**
Karma: 10
Posts: 3085
Sideralis Arduino!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

EuHM... ho montato come sono riuscito questo coi i primi video di un anno fa... :-)

« Last Edit: September 14, 2012, 02:49:56 am by Federico » Logged

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10102
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un conto è la velocità di comunicazione sul bus, ed è un bene che sia la maggiore possibile, e un conto è la reale frequenza con cui ottieni nuovi dati validi, il parametro DLPF_CFG, parliamo di ITG3200, ti permette di settare un rate massimo di 256 Hz con 8ksps interni, in realtà è meglio lavorare a 188 Hz se vuoi letture veramente stabili.

scusa ma faccio fatica a capire il funzionamento del filtro passa basso. in pratica funziona su 8000ksps/256Hz=31sample circa
somma semplicemente per 31 volte la differenza di valore in entrata(tensione di alimetazione 3,3v) e quello in uscita dal sensore?
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

scusa ma faccio fatica a capire il funzionamento del filtro passa basso. in pratica funziona su 8000ksps/256Hz

Il sensore ha un suo sistema interno, un mix tra analogico e digitale, di prefiltraggio delle letture, è il blocco "signal conditioning" nello schema a blocchi del sensore.
Tu puoi scegliere come filtrare le letture raw del sensore tramite il registro DLPF_CFG, a seconda del valore viene scelta un'accoppiata tra sample rate analogico interno, filtro analogico passa basso e filtraggio digitale successivo che ti danno il sample rate in uscita.
Per farla breve, se imposti DLPF_CFG = 0 in uscita ottieni 256 sample al secondo utili, è perfettamente inutile leggere il sensore 1000 volte al secondo a meno che non usi quattro letture consecutive per fare una media in modo da pulire ulteriormente il segnale, però alla fine sempre 256 letture utili ottieni.

Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10102
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quello che vorrei capire è come vengono generate le 256 misure utili a partire dalle 8KHz di sample rate...
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

quello che vorrei capire è come vengono generate le 256 misure utili a partire dalle 8KHz di sample rate...

Stai facendo confusione tra la lettura raw interna del sensore con quella già filtrata in uscita.
Il sample rate del ADC interno è  8kHz oppure 1 kHz, e questa è la velocità con cui viene letto il sensore mems, poi c'è la parte di filtraggio che ti limita la banda utile reale eliminando nel contempo molto rumore che altrimenti dovevi filtrare tu se avevi direttamente a disposizione le letture raw.
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10102
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, e immagino che il grosso, se non tutto, di questo filtraggio sia fatto dal filtro passa basso, giusto?

e questo suo filtraggio come è esprimibile matematicamente? la media delle letture RAW filtrate? la somma delle differenze dallo "zero" delle letture RAW filtrate? altro?
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, e immagino che il grosso, se non tutto, di questo filtraggio sia fatto dal filtro passa basso, giusto?

In parte analogico, e in parte digitale.

Quote
e questo suo filtraggio come è esprimibile matematicamente? la media delle letture RAW filtrate? la somma delle differenze dallo "zero" delle letture RAW filtrate?

Questa domanda falla a Invensense visto che non è dato sapere come lavora esattamente internamente il suo sensore e quali algoritmi usano, tu come utente finale prendi per buono come sample rate reale il limite imposto dal filtro passa basso e sei sicuro di non sbagliare smiley
Ti posso dire che da test che ho fatto personalmente sul ITG3200 è meglio non andare oltre il valore immediatamente prima di 256Hz, ovvero 188 Hz dove si riesce ad ottenere una risposta complessiva della IMU stabile e precisa nel medio/breve termine, sul lungo termine entra in gioco il drift del gyro ed è necesssario ricalibrarlo, operazione che può essere fatta anche a caldo senza resettare il sistema.
« Last Edit: September 14, 2012, 06:33:11 am by astrobeed » Logged

Pages: 1 ... 77 78 [79] 80 81 ... 106   Go Up
Jump to: