Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Punti Su Rette E Rette Parallele - Come fare??


Messaggi consigliati

Inserito:

Buongiorno a tutti.

Questo il mio dilemma .....

Mi ritrovo 2 serie di numeri da 400 valori per serie; l'arduo compito è

quello di capire quale linea retta approssima meglio ciascuna serie e se

le due rette risultano +/- parallele. Il top sarebbe anche capire se le rette

parallele tra loro (con una certa tolleranza ovviamente) risultano inclinate

di molto rispetto ad una ipotetica retta verticale. I numeri delle 2 serie posso

assumere valori da 0 a 100; la precisione basterebbe circa pari al 15%

(diciamo un controllo non troppo serrato). Qualcuno ha qualche idea

da suggerirmi? Grazie a tutti per qualsiasi info; buona settimana.

Ciao!


Roberto Gioachin
Inserita: (modificato)

Ciao jumpier

Non riesco a capire se il tuo calcolo vuole essere matematico o trigonometrico.

Mi spiego:

Se usi un sistema ad assi cartesiani, non mi spiego quale sia la variabile indipendente (asse delle ascisse), in più non mi spiego come fai a confrontare il tutto con una retta verticale che significherebbe mantenere a zero o perlomeno costante il valore sull'asse delle ascisse.

Oltre tutto come intendi distribuire 400 dati con valori non maggiori di 100.

I conti potrebbero tornare se ti riferissi a 400 punti sulle ascisse e il confronto fatto con una retta orizzontale.

Se invece pensi ad un sistema trigonometrico, non vedo gli angoli e tutto quello che segue.

Ciao

Roberto

Modificato: da Roberto Gioachin
Inserita:

Provo a spiegarmi meglio ed a semplificare quello che vorrei ottenere ....

Coordinate X: da 1 a 400

Coordinate Y: avrò 400 valori, il loro valore potrà essere tra 0 e 100.

Detto ciò. senza avere rette di riferimento, angoli o altro, dovrei calcolare

quale retta approssima meglio il mio insieme dei 400 valori.

Che io sappia, dovrei fare il calcolo per determinare la retta di regressione

ma su un sistema plc mi sa che i tempi salgono ....

Qualche idea? Spero di essermi spiegato meglio. Grazie, ciao

Inserita:

Domanda non banale.

Il calcolo deve essere eseguito durante il processo o può essere eseguito solo prima dell'inizio del processo stesso (macchina-impianto fermo).

Se poi puoi illustrare anche l'applicazione potremmo, magari, avere qualche idea in più su come ottimizzare la soluzione.

Inserita:
Domanda non banale.

Il calcolo deve essere eseguito durante il processo o può essere eseguito solo prima dell'inizio del processo stesso (macchina-impianto fermo).

Se poi puoi illustrare anche l'applicazione potremmo, magari, avere qualche idea in più su come ottimizzare la soluzione.

Ciao Livio.

Grazie per la risposta. Dunque, l'ottimale sarebbe eseguire il calcolo durante il processo ma per ora mi può andar bene

anche a fine movimentazione della macchina. Per capirci, memorizzo i punti, pongo la macchina in stand-by ed elaboro,

riprendo il processo. I punti si riferiscono alla lettura del profilo di un automezzo; in particolare viene misurata l'altezza

del profilo da un punto di riferimento (zero). Una volta determinata la retta (e quindi ragionando in 3d per approssimazione

+ tolleranze varie il piano) che più approssima il profilo, inseriti i vari offset di correzione ecc.., passo alla lavorazione del

profilo. Io pensavo di inserire nel plc una funzione di regressione della retta "semplificata" ma in questo momento

mi sfuggono alcune basi di matematica :( . Spero di essere riuscito a fornirti le informazioni in più per compiere altri

ragionamenti.

Grazie in anticipo

Inserita:

Provo a "buttar li" un'idea.

Io in prima approssimazione calcolerei la retta passante per i due punti estremi, in altri termini fisserei il punto determiantodalla prima coppia e dall'ultima. Poi controllerei lo scostamento degli altri punti da questa retta, aggiustando eventualmente la pendenza della retta per rientrare nella tolloreanza.

Così "a occhio" mi sembra più veloce del calcolo della regressione.

Inserita:

Ottima idea ma putroppo la lettura degli spigoli non viene fatta in modo ottimale

a causa delle varie bombature degli autoveicoli. Mi spiego meglio: l'inizio e la fine

della scocca viene rilevata con una precisione del 4-6% (per me accettabile). Il problema

è che se acquisisco altezze errate sugli spigoli, seguendo il tuo ragionamento rischio di

sballare tutto il profilo. Da qui la necessità di leggere tutti i punti del profilo e calcolare

quale "maggioranza" viene meglio approssimata da una retta. Abbi pazienza non avevo

accennato ai problemi degli spigoli nei post precedenti perchè .... mi ero dimenticato :(.

Come detto già in precedenza, non ho bisogno di una grande precisione però, considerando

che l'autoveicolo può essere posizionato perfettamente parallelo alla mia attrezzatura o no

(a seconda di quanto è bravo l'autista) e che le letture delle varie bombature tra specchietti,

spoiler ecc.. diventa difficile, io ottimisticamente pensavo di cercare il maggior numero di

punti passanti all'incirca su di una retta. Poi il tutto viene supervisionato / filtrato dagli

ingombri massimi / minimi delle autovetture processabili e dai limiti della mia attrezzatura

e quindi parto con la lavorazione. Ho provato ea eseguire calcoli "empirici" e cioè considerare

delle sottoserie di valori (dei 400 punti letti prendo i primi 20 per esempio) e controllo sulla

sottoserie di 20 valori quali tra i primi 10 è fuori range. Perchè tra i primi 10? Perchè utilizzo i

successivi 10 valori per capire se sono in presenza di uno spigolo o no e qauindi apportare le

dovute correzioni. Mi spiego

considero una sottoserie COMPLETA di 5 valori così composta:

5, 5, 5, 5, 10

Il dubbi sono:

il 5° valore è uno spigolo?

è errato?

lo sostituisco con una valore pari a 5? --> dipende: se leggendo i successivi fossere 5, 5, 5, 5, 10 e poi 6, 5, 5, 4, 5

allora ok con la sostituzione pari a 5. Ma se i successivi fossero 5, 5, 5, 5, 10 e poi 9, 10 , 11, 10, 10 allora sarei in

presenza di uno spigolo ....

considero una sottoserie MEZZA di 10 valori così composta:

5, 5, 5, 5, 10, 5, 5, 4, 5, 5

elaboro solo i primi 5 valori ma considero la "tendenza" dei successivi 5 ...

così facendo il 5° valore pari a 10 direi che è sbagliato e posso correggerlo in 5

Viceversa se avessi i valori pari a

5, 5, 5, 5, 10, 9, 10, 9, 10, 10

elaboro solo i primi 5 valori ma considero la "tendenza" dei successivi 5 ...

così facendo il 5° valore è con buona probabilità uno spigolo.

Ora, dopo questa filippica, se il metodo sopra esposta funzionasse, mi rimangono 2 problemi:

- il primo è come scrivere una funzione ricorsiva nel plc che sia performante e non troppo laboriosa in termini di calcoli

- da quale sottoserie parto dato che l'altezza degli spigoli non viene letta correttamente???

Spero di non aver detto troppe fesserie .....

Roberto Gioachin
Inserita:

L'argomento è ostico per un plc, ma..

Provo anch'io a buttarla!

Valore medio di tutti i 400 punti e trovo la posizione della retta al punto 200

Valore medio dei primi 200 punti e trovo una ipotetica posizione della retta al punto 100

Valore medio dei secondi 200 punti e trovo una ipotetica posizione della retta al punto 300

Mediazione fra questi due risultati per realizzare una retta che passi per il centro calcolato all'inizio

Se invece devi per forza fare un calcolo di regressione, ti conviene farlo in molte scansioni sucessive per evitare loop troppo pesanti,

ma credo che un calcolo statistico sia ostico da realizzare con un plc.

Ciao

Roberto

Inserita:

Da come descrivi il problema forse l'unica soluzione è calcolare non una retta, ma una spline. COn 400 punti la precisione sarebbe elevatissima però....anche i tempi di calcolo non sarebbero trascurabili.

Il tutto dipende dalla CPU che pensi di impiegare. Se puoi permetterti una breve pausa al termine del rilevamento, questa è la soluzione che ti da la maggiore affidabilità.

Tanto per darti un'idea con soli 5 punti tramite spline si ricostrusce un sinusoide tra 0 e 90o con errori non significativi.

Inserita:

Con la media proposta da Roberto mi sa che non risolvo ....

Per il discorso spline proposto da Livio devo documentarmi, scivere codice e fare tante tante prove.

Se vengo a capo di qualcosa faccio sapere metodo utilizzato e risultati.

Grazie a tutti

Inserita:
Se vengo a capo di qualcosa faccio sapere metodo utilizzato e risultati

Mi raccomando, tienici comunque informati perchè è un problema interessante.

  • 2 weeks later...
Inserita:

Potresti analizzare Il Coeficente angolare m (Cioè la differenza (Ynext - YActual)/(Xnext-XActual)

poi esegui ancora un ulteriore elaborazione su questa variazione m (mNext-mAct)/ Delta x

in pratica la variazione della variazione (Derivata 2° del Profilo).

Così facendo puoi discriminare gli Ostacoli presenti ed escluderli dal profilo dell' Autoveicolo.

Segli ora solo i tratti in cui la Derivata 1° è limitata dentro un determinato tuo range di accettabilità.

Bene unisci i tratti escludendo gli ostacololi che hai trovato.

Il procedimento potrebbe far uso di Array per memorizzare i tratti m, a range costante, per poi unirli.

Questa prima elaborazione ti ripulisce la tua curva, e filtra il profilo.

Oppure puoi analizzare n+1 punti consecutivi e trovare il polinomio o Spline che interpola questi Punti.

Cosi i tuoi 400 punti saranno interpolati da un certo numero di tratti Polinomiali.

Se analizzi i Polinomi potrai escludere tutti quei poliniomi che hanno dei coeficenti superiori

al grado 2°, oppure il cuoi valore è molto ma molto basso.

vedrai che il termine X^1 sarà il tuo coefficente angolare cercato.

Penso che potresti far uso di un risolutore di Sistemi all' interno del tuo Programma PLC.

Guarda su "Altri Argomenti - Up/Down Load Manager - Sezione Software" Gauss-Jordan Reduction System.

Su una CPU 314 girà molto bene (con una matrice per 5 Equazioni di 4° grado) risolve il sistema in meno di 300ms o forse meno.

va bene anche per la Regressione lineare.

  • 1 month later...
Inserita:

Buongiorno a tutti.

Dunque sono in debito della spiegazione di come ho risolto e volevo postarla prima delle ferie;

alla fine devo ammettere che ho ... barato :lol: !!

Prima alcune premesse:

1)-Il calcolo lo eseguo in tempo reale (quindi no pausa del processo)

2)-Ho installato un po' di dispositivi meccanici che han fatto si che l'autoveicolo venga posizionato in modo molto

più preciso o comunque diciamo meno fantasionso da parte del conducente

3)-Leggo il profilo dei due fianchi dell'auto contemporaneamente e li vado a lavorare con 2 attrezzature indipendenti

dal punto di vista della movimentazione nello spazio x-y-z

Dei famosi 400 punti, scarto i primi 50 / 75 ad inizio / fine vettura (a secondo della fascia di modello auto processato in termini di

utilitaria, station wagon, pick-up ecc...); considero quindi i successivi / precedenti 10 punti (esempio da 51 a 60 e da 340 a 349

per capirci). Controllo se sono 2 rette e comunque se i punti stanno tra loro (a 10 a 10) all'interno di un range

accettabile e preimpostato; se il controllo da KO, me ne vado a casa :superlol: e segno pezzo scarto. Ultilizzando quanto

esposto in precedenza, ho riscontrato una percentuale del 97,8% ok, quindi ho deciso di utilizzare tale controllo.

Successivamente, calcolo una retta fittizia passante per i 2 punti medi delle due rette calcolate in precedenza e controllo

la distanza da tale retta di 50 punti campione presi nell'intervallo da 50 a 350. Se una percentuale "x" di tali punti mi piace,

(di solito 80 / 85%) allora da test eseguiti posso affermare che i punti letti siano circa su di una retta e quindi processabili dalla mia attrezzatura.

A questo punto completo l'opera calcolando gli spigoli dell'autoveicolo per approssimazione prolungando prima dei 50 punti

ed oltre i 350 il valore medio delle rette precedentemente calcolate (quelle dedotte dai 2 gruppi di valori da 10 misure) utilizzando per il

prolungamento la stessa pendenza della retta teorica che più approssimava i 50 punti campione. Poi siccome la mia attrezzatura lavora

porzioni di auto che sono larghe anche 5/6 valori, suddivido ulteriormente tutti i valori letti in sottogruppi (o spezzate di retta) da 10 valori

ciascuno e da qui parto con la lavorazione. E' un po' macchinoso ed un poco approssimativo ma alla fine per il fine va alla grande. Così

facendo sono riuscito ad incrementare la scansione del plc di 3ms (tanti o pochi non discuto ma per il mio controllo accettabili).

Inizialmente contavo di controllare anche il parallelismo tra le 2 serie di valori letti ma con le prove ho capito che non è vincolante, anzi,

a volte controproducente perchè specialmente i mezzi recenti molto arrotondati / bombati presentano spesso una rastremazione su

fronte / retro autovettura.

Vedremo nel corso del tempo con la sporcizia che si deposita sui sensori se e quali problematiche verranno a galla!!! Grazie a tutti per i

consigli. A buon rendere ed alla prox.

Inserita: (modificato)

Leggo solo ora questo thread. Io avrei fatto così. I 400 valori li butti in un vettore.

La retta interpolante ha la forma classica eqtrend.gif dove t è il tempo, ma nel tuo caso è un numero che va da 1 a 400 (l'indice del campione)

Attraverso un processo di regressione ricorsivo, vai a cambiare alfa e beta, finchè la somma vettoriale di tutte le 400 differenze tra il punto reale contenuto nel vettore e il punto corrispondente della retta è nulla o inferiore ad una quantità a piacere. In buona sostanza ciò equivale a dire che l'integrale di superficie sotteso dalla curva dei punti e dalla retta è algebricamente pari a zero.

Alfa è il tuo angolo (espresso in decimale). Per avere l'angolo è sufficiente calcolare l'atangente di alfa.

A ogni nuovo punto che si aggiunge , scarti il più vecchio punto esistente (LIFO) e poi ricalcoli il tutto.

Confrontando alfa prima e alfa dopo, puoi capire se la tua retta si sta alzando o abbassando.

Modificato: da NoNickName
Inserita:

Grazie NoNickName per la tua soluzione; per ora sono ok ma la tengo in considerazione;

ricordo comunque che il mio vincolo era eseguire calcoli accettabili, veloci ed in tempo

reali con il processo. Infatti era stato ipotizzato il calcolo di regresione della retta ma

per il mio plc (ed anche per il programmatore :superlol: ) risultava un po' oneroso in

termini di scansione (per il primo) e scrittura del codice (per il secondo).

Ciao

Inserita:

Logicamente, in questo caso davo per scontato che i calcoli sarebbero stati eseguiti su un pc industriale affiancato al plc.

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...