birkof Inserito: 12 aprile 2006 Segnala Inserito: 12 aprile 2006 ciao a tutti,provo a generalizzare il mio problema,sperando di riuscire a spiegarmi..Ho due traiettorie, una vecchia A e una nuova B. Devo passare dalla traiettoria A alla traiettoria B in un certo tempo T. La traiettoria B non e' costante nel tempo ma evolve in qualche modo. Come potrei fare? Io pensavo a un qualche algoritmo funzione della distanza tra A e B ma non riesco a rispettare la specifica sul tempo T...Grazie dell'attenzione
emanuele.croci Inserita: 12 aprile 2006 Segnala Inserita: 12 aprile 2006 Forse dovresti chiarire un po' meglio il tuo problema:- cosa intendi per traiettoria (di default sarebbe il percorso effettuato nello spazio da un punto mobile): è una curva, una retta, una direzione, è F(t) dove a qualsiasi valore t associo un punto (X;Y) su un piano...?- Cosa vuol dire passare da una traiettoria ad un'altra? Ad es. se le 2 traiettorie sono F(t) e G(t), supponiamo che vuoi fare ciò al tempo t=10, calcolo F(10) e G(10) e trovo 2 punti. Calcolo la retta che unisce i 2 punti, calcolo la distanza D tra i 2 punti e definisco una velocità pari a V=D/T, dove T è il tempo dato.Diciamo che in base ai tuoi dati, questo algoritmo risolve il tuo problema, se no dacci maggiori ragguagli...Ciao, Emanuele
birkof Inserita: 12 aprile 2006 Autore Segnala Inserita: 12 aprile 2006 Immaginavo di non essermi spiegato bene..Dunque..per "traiettoria" intendo una grandezza (temperatura, posizione, ecc.) variabile nel tempo.Provo a dare alcuni nomi forse piu' chiari di A e B..Io ho due traiettorie, una di partenza P e una di arrivo A. Io devo raccordare le due traiettorie in un tempo T=N*Ts a partire da un certo istante in cui voglio iniziare il passaggio tra P e A. La traiettoria A e' variabile e Ts e' il passo di calcolo: in pratica, in N passi devo passare da P ad A, ovvero devo generare una nuova traiettoria che mi realizzi il raccordo.Le righe di pseudocodice che vedi sotto realizzano il mio algoritmo nel caso in cui P e A siano costanti nel tempo. Se pero' A o P cambiano nel tempo, non riesco a rispettare la condizione y(T)=A. Dimenticavo..quello che vado a realizzare con l'algoritmo e' in pratica un filtro che riceve in ingresso P e A e mi genera la traiettoria y in cui si vede il raccordo tra P e A. Vorrei poter correggere y in modo che dopo N passi la y abbia comunque raggiunto la traiettoria A che e' variabile.y(i=0) = P // inizializzazione con il valore di partenza //y(i+1) = y(i) - (P(i)-A(i))/NForse e' piu' semplice (o fattibile) se impongo la condizione che la traiettoria P sia in realta' una costante e non cambi durante il movimento di raccordo..Spero di non aver aumentato la confusione.. :-PCiao
emanuele.croci Inserita: 12 aprile 2006 Segnala Inserita: 12 aprile 2006 (modificato) Secondo me la formula che hai scritto vale solo se P e A sono costanti.Ti propongo una media pesata tra le grandezza P ed A, che ne dici?Y(i) = P(i)* (100- i)/100 + A(i)*i/100Con i che varia tra 0 e 100 (oppure al posto di 100 puoi mettere T per generalizzare su qualsiasi tempo).Così facendo il setpoint Y "si sposta gradualmente" tra P ed A, ognuna vista come variabile nel tempo, cioè come una f(t).Ciao, Emanuele Modificato: 12 aprile 2006 da emanuele.croci
irpick Inserita: 12 aprile 2006 Segnala Inserita: 12 aprile 2006 Ricapitoliamo:Start P (fisso)Arrivo A(variabile , ma la condizione A>P è sempre vera (?), delta di variazione (?)N = numero di incrementi che subisce la variabile P per raggiungiungere il valore A?passo variabile in funzione di P,A,Nè questo il problema?
birkof Inserita: 12 aprile 2006 Autore Segnala Inserita: 12 aprile 2006 (modificato) Grazie Emanuele per i suggerimenti.Si, la mia formula vale solo per P e A costanti durante il movimento, come avevo sottolineato nel mio secondo messaggio. Effettivamente non avevo pensato di utilizzare lo stesso indice "i" per realizzare una media. Questo perche' uso Simulink e non ho accesso direttamente al indice "i". Per ovviare al problema ho creato un semplice contatore.Per Irpick:- Start P puo' anche essere fisso ma se posso variarlo e' meglio.- La condizione A>P non e' detta. Posso avere A qualsiasi, tipicamente e' piu' grande di P.- Come delta di variazione devo avere un "gradino piccolo" rispetto a P-A. La traiettoria raccordata sara' un riferimento fornito a un controllore e non deve avere variazioni troppo brusche.- N=T/Ts ed e' il numero di incrementi per passare da P ad A (y(0)=P(0) e y(N)=A(N))- Il passo e' variabile durante il movimento, in funzione di P e A. N viene fissato all'inizio e non cambia durante il movimento.In allegato trovate una simulazione fatta utilizzando l'algoritmo di Emanuele (grazie ancora per l'idea!).Nel grafico si vede P(giallo),y(viola),A(azzurro). Ho richiesto di arrivare in A in 5 secondi (N = 100 e Ts=0.05s)Idee per migliorare il profilo, osservazioni?Grazie del supporto Modificato: 12 aprile 2006 da birkof
emanuele.croci Inserita: 12 aprile 2006 Segnala Inserita: 12 aprile 2006 Onestamente non ho capito bene la tua esigenza, quindi a parte l'algoritmo matematico non ti so consigliare altro. Forse se dai qualche dettaglio su che applicazione è e cosa intendi per "migliorare"....Noto anche che P(N)=A(N) nel tuo grafico di esempio, è un caso o è sempre così??Ciao, Emanuele
birkof Inserita: 12 aprile 2006 Autore Segnala Inserita: 12 aprile 2006 ciao Emanuele,Noto anche che P(N)=A(N)No, y(N )=A(N) ovvero a 5s la curva azzurra e quella viola si incontrano, proprio come volevo.Ho un controllore che riceve in ingresso un riferimento da inseguire. La mia esigenza e' poter cambiare profilo di riferimento con un comando es. un segnale 0/1. Ovviamente non voglio vedere salti a scalino e voglio agganciarmi al nuovo riferimento dopo un tempo ben preciso.Grazie dell'attenzione
emanuele.croci Inserita: 12 aprile 2006 Segnala Inserita: 12 aprile 2006 (modificato) OK, adesso ho capito sia il grafico che il problema....Secondo me, se i 2 riferimenti ti arrivano istante per istante (non sai prima come si muoveranno) l'unica possibilità logica è fare la media pesata, che tra l'altro ti garantisce- di non avere punti di discontinuità nel passaggio- di compierlo sempre nel tempo specificato- che per tutto il tempo dell'avvicinamento sei sempre compreso tra P ed A, cioè Y è sempre PIU' VICINO ad A di quanto non sia PSe potessi avere delle informazioni in anticipo sarebbe diverso.... il top sarebbe conoscere già all'inizio P(0) e A(5), allora tiri una bella retta e sei a posto, o magari anche qualche altra info "sul futuro" delle funzioni P ed A potrebbe essere utile.Ciao, Emanuele Modificato: 12 aprile 2006 da emanuele.croci
birkof Inserita: 12 aprile 2006 Autore Segnala Inserita: 12 aprile 2006 ciao,il top sarebbe conoscere già all'inizio P(0) e A(5), allora tiri una bella retta e sei a posto,Gia', gia' e' quello che voleva il mio capo ma purtroppo non sappiamo quanto valgono P(0) e A(5)...Mah.. forse potrei filtrare il segnale viola in modo da migliorare l'arrivo su A(5) che puo' essere un po' "spigoloso" ma non credo sia necessario.Grazie dell'aiuto
Henon Inserita: 13 aprile 2006 Segnala Inserita: 13 aprile 2006 Ciao BirkofProva a dire la mia. Io farei cosi:Nel istante ben preciso nel quale vuoi commutare la traiettoria fai una fotografia del valore della grandezza [A], e della grandezza [P]in pratica campioni il valore della grandezza [A]e della Grandezza [P], rilevi perciò la Differenza Albebrica.Specifichi il Tempo con cui vuoi raccordarti.Interpoli Linearmente i 2 Punti (Retta) o in altra maniera (Polinomio o Spline).Bene sin qui non ci sono problemi, se la grandezza [P] varia nel Tempo fisso che tu hai specificato, alloradevi fissarti degli Step di Tempo (Precisi) Step_t supponiamo 10 o più.Ad ogni incremento dello Step Temporale, procedi come prima Fotografi la Posizione di [A] e di [P], Interpoli i due punti come prima, però orail Tempo di raccordo sarà t_Restante := T_Raccordo - (Step_t * N°Passo).In Questa Maniera arrivi al punto di Raccordo con la Grandezza [P] nel Tempo che tu hai Specificato.E' chiaro che il tuo algoritmo devrà essere elaborato in N Passi, e non una volta sono nell' istanteche tu hai specificato.Infatti non possiamo sapere l'andamento a priori della Grandezza [P], perciò devi eseguire una elaborazione temporale.Alla fin fine non ti sembra che l' algoritmo assomiglia tanto ad una Rampa a Tempo costante, con qualche leggera differenza.Se tu Generalizzi il processo troverai la funzione Y := f[T_raccordo,t]+Ao che io ti ho descritto.
birkof Inserita: 14 aprile 2006 Autore Segnala Inserita: 14 aprile 2006 Grazie Henon,mi hai fatto capire una cosa!Provo a estendere quanto detto da Emanuele con quello che dici tu.La media di Emanuele non e' altro che un'interpolazione lineare, infatti y(i)=P*(N-i)/N + A*i/N e' uguale a quella lineare che hai consigliato tu ovvero y(i) = P - i*(P-A)/N (basta farsi i conti..). Effettivamente, cambiando la formula di interpolazione, posso cambiare la curva di raccordo e ottenerne una piu' dolce. Es. potrei usare un'interpolazione con un esponenziale o un polinomio di vario genere (interpolazione spline).Mi faccio un po' di conti e poi vi metto la formula per chi fosse interessato al discorso.Grazie davvero per i suggerimenti!
emanuele.croci Inserita: 18 aprile 2006 Segnala Inserita: 18 aprile 2006 Concordo con quanto dici.Facci sapere!Ciao, Emanuele
birkof Inserita: 20 aprile 2006 Autore Segnala Inserita: 20 aprile 2006 ciao,alla fine ho scelto un'interpolazione con una funzione esponenziale. Per chi e' interessato, ecco la formula che ho usato.y(i) = P + (A-P)*(1-e^(-i*Ts/tau))dove:P = valore di partenza. Volendo puo' anche essere variabile nel tempoA = valore di arrivo. Volendo puo' anche essere variabile nel tempoi = passo n-esimo di calcolo. Puo' essere ottenuto con un contatore o un qualche indice che viene incrementato ad ogni ciclo.Ts = tempo di calcolo in (s)tau = costante di tempo dell'esponenziale. Se il raccordo deve avvenire in T secondi, tau puo' essere calcolata come tau=T/10.e = numero di NeperoVolendo si puo' anche ricavare un raccordo con una curva ad "S"..Qualche tempo fa avevo trovato un tutorial in internet con tutti i conti svolti.Grazie a tutti
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora