Apro questo post riportando quasi per intero un post scritto in un'altra discussione, perché ritengo l'argomento se non importantissimo, almeno utile.
Si assiste al proliferare di multi rotori asimmetrici, ma i software di gestione del volo hanno poche varianti pre-impostate.
La maggior parte degli utenti si accontenta di usare un mixer standard.
Se da un lato questo vuol dire che si può tranquillamente volare anche così, alle volte si scopre che certi comportamenti non molto regolari possono essere risolti riscrivendo la tabella di miscelazione dei motori.
Questa vorrebbe essere una discussione sui metodi di affrontare questa tematica, e magari un database sulle matrici per correggere i mixer dei nostri multi rotori.
----------------
La toria della coppia, ovvero forza X braccio
Sono entrato nel mondo dei multirotori non rtf con gli Squid di bandit. Recentemente ho preso un micro spider hex.
Sono tutti mezzi asimmetrici, ed il mio primo approccio alla correzione della matrice di spinta è stato valutanto la spinta dei motori come fossero pesi all'estremità di una bilancia con fulcro al centro.
La cosa aveva senso per me.
In pratica ragionavo sul braccio di leva e correggevo la spinta in base all'operazione forza x braccio, col risultato che più il braccio è lungo, e minore deve essere la spinta.
Devo dire che i micro non mi hanno mai dato problemi veri, ma lo Squid si.
Cose strane interrompendo i comandi, soprattutto yaw.
Quando ho montato i KISS sullo Squid i problemi sono quasi spariti, segno che comunque il flight controller ci prova a tenere gli assetti, ma deve essere servito da un sistema di motopropulsori a variazione veloce, sia in accelerazione che in frenata.
Poi è arrivato l'esino, piuttosto asimmetrico, soprattutto, con i motori centrali arretrati rispetto al centro di gravità.
Quindi ho posto un quesito sul forum openpilot, ed un francese mi ha aperto una prospettiva del tutto nuova (per me).
La teoria delle velocità periferiche
Anche lui come me, all'inizio ha ragionato sulla teoria della coppia riguardo la modifica della matrice, ma in seguito ha cambiato opinione (basandosi anche sul feedback dei piloti), seguendo una strada praticamente opposta.
Se ci si sofferma a pensare, il sistema di equilibrio di un multirotore non può essere accomunato ad una altalena, in quanto il fulcro non è fisso.
Il fulcro si posiziona in base a cosa fanno i motori alle estremità.
Possiamo solo desiderare che il baricentro corrisponda al centro di rotazione lungo tutti e tre gli assi, ma questo avviene soltanto se i motori progrediscono sull'arco di cerchio che descrivono in modo proporzionale al raggio.
Vuol dire che più un motore è lontano dal fulcro di rotazione che noi scegliamo, e più distanza deve percorrere, quindi deve sviluppare una velocità lineare adeguata a percorre questa distanza lungo l'arco di cerchio.
Un motore più vicino al fulcro di rotazione deve invece percorrere meno distanza, quindi deve girare più piano.
Riassumendo, motori lontani devono girare più forte dei motori vicini al fulcro, il contrario dell'altra teoria.
Discorso a parte per il yaw, dove la variazione della velocità di rotazione comporta si una spinta a salire o scendere, ma questa viene compensata dal motore contrapposto che fa il contrario. Ciò che gioca per la rotazione yaw è la variazione dell'effetto giroscopico delle masse in movimento.
A sostegno di questa ultima teoria, e motivo per cui sono qui a scrivere, c'è l'esperienza fatta oggi con l'RD290, un micro esino di tipo spider, piuttosto asimmetrico.
Mi sono deciso a testare il sistema che tiene conto delle velocità, quindi ho ripetuto due volte i seguenti passi:
- azzeramento delle impostazioni del fc
- aggiornamento del firmware
- impostazione del veicolo (Hexa X la prima volta, matrice modificata la seconda)
- impostazione di Rx, output ai motori, modalità di volo
- ricerca degli UOV (Unique Oscillation Value) per i tre assi con i quali calcolare i PID con OPTune
- prova di volo
Con l'esa impostato Hexa X (default) gli UOV di pitch e roll erano molto diversi, così come ovviamente i PID.
Nella prova di volo c'era una evidente differenza in autorità a vantaggio del roll. Il pitch era pesante, un po' spugnoso, con una certa fatica a mantenere l'inclinazione nel volo molto veloce.
Con la matrice reimpostata gli UOV di pitch e Roll sono risultati molto più simili, quindi PID simili.
Nella prova di volo, roll e pitch hanno la stessa autorità, sembra un quadro puro e in FFF si comporta molto bene.
Una cosa che ho notato è la seguente. Lo UOV è quel valore di Kp, impostati Ki e Kd a zero, che porta il velivolo in oscillazione costante su quell'asse (non aumenta e non svanisce). Con la matrice di default l'oscillazione era sporca, nel rollio c'era un po' di pitch e viceversa, insomma assomigliava più ad un traballamento. Con la matrice corretta l'oscillazione su ciascun asse era perfettamente pulita, roll puro o pitch puro.
I miei squiddini, ancora non sono impostati col nuovo metodo, ma quel che so è che gli UOV di pitch e roll sono estremamente diversi, quasi il doppio l'uno dell'altro.
Non mi meraviglierebbe se la nuova matrice avvicinasse i valori in modo da riuscire ad usare PID simili e generalmente più elevati.
Appena trovo un po' di tempo provo anche sugli squid.
Si, ma come si producono i numeri?
Mentre so come attribuire più o meno importanza ai motori ragionando sulla coppia, non saprei come calcolare correttamente i valori per la speed theory.
Mi viene in aiuto uno script in python che calcola la matrice per esa e octo-cotteri che mi ha segnalato Laurent, le cui spiegazioni tecniche le trovate qui.
Lo script è semplice da usare, basta editare la matrice geometrica dei motori inserendo le coordinate XY di ciascun propulsore e lanciare lo script in una finestra a linea di comando col comando python (osx e linux, su windows forse bisogna installare qualcosa).
Il risultato è questo
Ho editato il titolo della tabella in modo che il print fosse Mixer table RD290.
Nella tabella si vedono i sei motori con i coefficienti da usare, a seconda del flight controller. In openpilot si possono moltiplicare per 100 se nessuno dei risultati supera 127, altrimenti si sceglie un fattore di moltiplicazione adeguato.
Se l'argomento interessa ed avrà un seguito, potrebbe essere utile mettere le matrici dei quad più in voga. Tenete in considerazione che lo script è espandibile a qualunque tipologia che non comprenda servi, tipo tricottero, e che abbia i motori tutti in linea.
Non so come si potrebbe inserire un V-Tail nello script.
Comunque dai quadri agli octo asimmetrici è possibile generare la matrice.
Si assiste al proliferare di multi rotori asimmetrici, ma i software di gestione del volo hanno poche varianti pre-impostate.
La maggior parte degli utenti si accontenta di usare un mixer standard.
Se da un lato questo vuol dire che si può tranquillamente volare anche così, alle volte si scopre che certi comportamenti non molto regolari possono essere risolti riscrivendo la tabella di miscelazione dei motori.
Questa vorrebbe essere una discussione sui metodi di affrontare questa tematica, e magari un database sulle matrici per correggere i mixer dei nostri multi rotori.
----------------
La toria della coppia, ovvero forza X braccio
Sono entrato nel mondo dei multirotori non rtf con gli Squid di bandit. Recentemente ho preso un micro spider hex.
Sono tutti mezzi asimmetrici, ed il mio primo approccio alla correzione della matrice di spinta è stato valutanto la spinta dei motori come fossero pesi all'estremità di una bilancia con fulcro al centro.
La cosa aveva senso per me.
In pratica ragionavo sul braccio di leva e correggevo la spinta in base all'operazione forza x braccio, col risultato che più il braccio è lungo, e minore deve essere la spinta.
Devo dire che i micro non mi hanno mai dato problemi veri, ma lo Squid si.
Cose strane interrompendo i comandi, soprattutto yaw.
Quando ho montato i KISS sullo Squid i problemi sono quasi spariti, segno che comunque il flight controller ci prova a tenere gli assetti, ma deve essere servito da un sistema di motopropulsori a variazione veloce, sia in accelerazione che in frenata.
Poi è arrivato l'esino, piuttosto asimmetrico, soprattutto, con i motori centrali arretrati rispetto al centro di gravità.
Quindi ho posto un quesito sul forum openpilot, ed un francese mi ha aperto una prospettiva del tutto nuova (per me).
La teoria delle velocità periferiche
Anche lui come me, all'inizio ha ragionato sulla teoria della coppia riguardo la modifica della matrice, ma in seguito ha cambiato opinione (basandosi anche sul feedback dei piloti), seguendo una strada praticamente opposta.
Se ci si sofferma a pensare, il sistema di equilibrio di un multirotore non può essere accomunato ad una altalena, in quanto il fulcro non è fisso.
Il fulcro si posiziona in base a cosa fanno i motori alle estremità.
Possiamo solo desiderare che il baricentro corrisponda al centro di rotazione lungo tutti e tre gli assi, ma questo avviene soltanto se i motori progrediscono sull'arco di cerchio che descrivono in modo proporzionale al raggio.
Vuol dire che più un motore è lontano dal fulcro di rotazione che noi scegliamo, e più distanza deve percorrere, quindi deve sviluppare una velocità lineare adeguata a percorre questa distanza lungo l'arco di cerchio.
Un motore più vicino al fulcro di rotazione deve invece percorrere meno distanza, quindi deve girare più piano.
Riassumendo, motori lontani devono girare più forte dei motori vicini al fulcro, il contrario dell'altra teoria.
Discorso a parte per il yaw, dove la variazione della velocità di rotazione comporta si una spinta a salire o scendere, ma questa viene compensata dal motore contrapposto che fa il contrario. Ciò che gioca per la rotazione yaw è la variazione dell'effetto giroscopico delle masse in movimento.
A sostegno di questa ultima teoria, e motivo per cui sono qui a scrivere, c'è l'esperienza fatta oggi con l'RD290, un micro esino di tipo spider, piuttosto asimmetrico.
Mi sono deciso a testare il sistema che tiene conto delle velocità, quindi ho ripetuto due volte i seguenti passi:
- azzeramento delle impostazioni del fc
- aggiornamento del firmware
- impostazione del veicolo (Hexa X la prima volta, matrice modificata la seconda)
- impostazione di Rx, output ai motori, modalità di volo
- ricerca degli UOV (Unique Oscillation Value) per i tre assi con i quali calcolare i PID con OPTune
- prova di volo
Con l'esa impostato Hexa X (default) gli UOV di pitch e roll erano molto diversi, così come ovviamente i PID.
Nella prova di volo c'era una evidente differenza in autorità a vantaggio del roll. Il pitch era pesante, un po' spugnoso, con una certa fatica a mantenere l'inclinazione nel volo molto veloce.
Con la matrice reimpostata gli UOV di pitch e Roll sono risultati molto più simili, quindi PID simili.
Nella prova di volo, roll e pitch hanno la stessa autorità, sembra un quadro puro e in FFF si comporta molto bene.
Una cosa che ho notato è la seguente. Lo UOV è quel valore di Kp, impostati Ki e Kd a zero, che porta il velivolo in oscillazione costante su quell'asse (non aumenta e non svanisce). Con la matrice di default l'oscillazione era sporca, nel rollio c'era un po' di pitch e viceversa, insomma assomigliava più ad un traballamento. Con la matrice corretta l'oscillazione su ciascun asse era perfettamente pulita, roll puro o pitch puro.
I miei squiddini, ancora non sono impostati col nuovo metodo, ma quel che so è che gli UOV di pitch e roll sono estremamente diversi, quasi il doppio l'uno dell'altro.
Non mi meraviglierebbe se la nuova matrice avvicinasse i valori in modo da riuscire ad usare PID simili e generalmente più elevati.
Appena trovo un po' di tempo provo anche sugli squid.
Si, ma come si producono i numeri?
Mentre so come attribuire più o meno importanza ai motori ragionando sulla coppia, non saprei come calcolare correttamente i valori per la speed theory.
Mi viene in aiuto uno script in python che calcola la matrice per esa e octo-cotteri che mi ha segnalato Laurent, le cui spiegazioni tecniche le trovate qui.
Lo script è semplice da usare, basta editare la matrice geometrica dei motori inserendo le coordinate XY di ciascun propulsore e lanciare lo script in una finestra a linea di comando col comando python (osx e linux, su windows forse bisogna installare qualcosa).
Il risultato è questo
Ho editato il titolo della tabella in modo che il print fosse Mixer table RD290.
Nella tabella si vedono i sei motori con i coefficienti da usare, a seconda del flight controller. In openpilot si possono moltiplicare per 100 se nessuno dei risultati supera 127, altrimenti si sceglie un fattore di moltiplicazione adeguato.
Se l'argomento interessa ed avrà un seguito, potrebbe essere utile mettere le matrici dei quad più in voga. Tenete in considerazione che lo script è espandibile a qualunque tipologia che non comprenda servi, tipo tricottero, e che abbia i motori tutti in linea.
Non so come si potrebbe inserire un V-Tail nello script.
Comunque dai quadri agli octo asimmetrici è possibile generare la matrice.
Commenta