TODOPIC
Mecatrónica => CNC - Control Numérico Computarizado => Mensaje iniciado por: PicKetero en 26 de Diciembre de 2004, 20:26:00
-
Hola a todos !!
Mi problema es muy concreto pero hasta ahora muy dificil para poder resolverlo.
Y es sobre un software que haga la interpolación entre puntos que se encuentra en un archivo *.dat que contiene estas coordenadas en dos columnas ( X , Y respectivamente ).
La utilidad sería la de poder dar valores intermedio a los puntos conocidos para poder "llenar las zonas donde no hay declarada un punto" (así se describe una curva suave ) en mi frezadora.
La ayuda podria ser que me pudieran decir si ya existe este software para poder utilizarlo con mi software controlador de mi fresadora, o de ultima que me pasen el algoritmo o polinómio ( aproximación por circunferencias etc)
Esto es todo, desde ya muchas gracias a todos !!!!
-
¿Interpolación lineal?
-
Necesitas el centro de la curva que definen esos dos puntos como tercer dato, de lo contrario, las posibilidades son infinitas.
Sabiendo el centro y los puntos, sacamos el radio, y de ahi, mediante una expresion algebraica, conseguimos una funcion matematica que por cada X valor nos dará dos puntos en el eje Y (aunque a nosotros solo nos interesa uno).
La formula primordial es:
(X - Zx)² + (Y - Zy)² = R²
Seria cuestion de despejar Y.
salu2
-
Perdoname la ignorancia Nocturno66 !!!
Z, X x, Y y, que valores respresentan si solo tengo tres puntos como datos y todos ellos en 2D (X,Y) ?
Quería agregar que este archivo tiene una lista de puntos que van en orden (renglón a renglón), por esto el punto que correspondería al punto del centro, no se encuentra a la mitad de la distancia con respecto a los dos puntos que lo rodean, por lo que no se estaría cumpliendo lo que es necesario para que esta ecuación que me pasaste se cumpla ( especie de ecuación de una circunferecia )
y estos puntos no tienen una separación iguales sobre el eje X, por lo que si tomara tres puntos el del centro sería muy dificil que se encuentre en el centro.
Desde ya muchas gracias por tu ayuda !!!
-
si no estás seguro de qé hacer lo mejor es que hagas interpolacion lineal pura y dura aproximando por rectas los segmentos, si quieres currartelo mas igual hacer uso de una curva de bezier (polinomio de mayor grado) por ejemplo inventandote la 1a derivada para suavizar mas.. pero con el inconveniente de hacer mas redondas las esquinas :C
depende del propósito de tu interpolación
por ejemplo la lineal
(p1x,p1y), (p2x,p2y)
(X,y)=(p1x,p1y)+K·(p2x-p1x,p2y-p1y)
y dar a K valores entre 0 y 1 dividiendo el intervalo 0-1 en tantas partes como puntos desees...
o normalizar (p2x-p1x,p2y-p1y) dividiendolo entre su modulo y dar a K un valor constante que sea la maxima distancia aceptable entre dos puntos consecutivos interpolados
o yoqsé..
papel y lapiz y paciencia
-
software tal cual no creo que encuentres,
Tienes tres opciones creo yo,
1-Agarrar un libro de calculo y aprender las ecuasiones matematicas que te generar una funcion a partir de un conjunto discreto de puntos, interpolacion de simpson y muchas otras que no recuerdo nombre, generalmente se trata de generar un polinomio de grado N que pase por los puntos.
2- Buscar lo anterior en libros de algoritmos, ya implementado, quizas este en un lenguaje que desconoces, podria ser muy larga la busqueda
3- Unir los puntos por lineas rectas, si es para fresadora va a quedar bien feo.
El unirlo mediante segmentos de circunferencia no creo que sea buena opcion, no va a quedar con una curva suave, sino que quedara como forzada , y en los puntos de inflexion va a ser bien fea la curva.
El metodo que uses definira la suavidad de la curva.
Si encuentro algo en mis libros de calculo lo posteo aca
suerte
-
Hola Mariosaul !!
Desde ya muchas gracias a todos los que dejaron su ayuda, la verdad que tendría que ver cada caso para ver si el resultado se acerca a mis necesidades y desde luego Mariosaul, cualquier info será bien venida !!!
Saludos a todos !!!
-
Puedes probar usando esta sencilla formula, siempre que estemos hablando de interpolacion lineal entre 2 puntos a velocidad constante:
x(t)= [x-i - (x-i-1)] . [(t- ti)/T] - (x-i-1)
donde:
T= tf - ti
ti= tiempo inicial
tf=tiempo final
x-i-1= punto inicial
x-i= punto final
En funcion de los valores intermedios entre ti y tf que des a la variable t, obtienes distintos puntos x.
-
Más o menos creo entender lo que tratas de hacer .Espero que esto te ayude a simplificar lo que quieres.
En las maquinas CNC se trabaja básicamente con dos tipos de curvas las circunferencias y la rectas. Los programas CAD CAM se encargan de convertir a través de los posprocesadores ; los diseños o dibujos en códigos G y M . El microprocesador de las CNC interpreta el código haciendo las respectivas interpolaciones .
Internamente en las CNC se generen una lista de tiempos para cada micra de movimiento y en cada eje que quieres controlar . Las variables que se procesa es el valor del tiempo para cada micra de distancia . O sea si tienes la longitud ( una micra ) tendremos la variable final valores de tiempo.
El proceso de control de todos los movimientos de una CNC se simplifica a un movimiento constante y a un movimiento de velocidad variable . En el caso de los códigos G son: El G01 y G02 . Por ejemplo :G01 X300Z400F50 , . El resto de los códigos G son variantes y combinaciones de estos .Otros códigos tienen funciones especificas y no necesariamente de movimiento tenemos al G04 ( tiempo de espera) , G21( milímetros) G22 (pulgadas) etc.
Veamos que hace el microprocesador para el caso del ejemplo
Primero se tiene que encontrar el tiempo que demoraría en una micra de espacio , en cada eje :
Z =400(horizontal como en los tornos CNC) X=300 Vertical
=arctang 300/400 o sea el arco cuya tangente es ¾ 37
La velocidad esta en dirección de la diagonal (hipotenusa ) por lo tanto la velocidad en el eje Z será 50 cos() ( la velocidad F esta expresada en mm/ M)
Para encontrar el tiempo que tomara por cada micra de espacio tienes que hacer la conversión necesaria o sea :
mm 1000/mm
-------------------- =/60ms
MX60s/MX1000ms/s
Al final si queremos saber cuanto tiempo tomaría en una a la velocidad de 50 mm/M en la diagonal para el eje Z seria =1 / 50 /60ms cos() =48/50ms y para X = 36/50ms
luego el programa tiene que ser tal que vaya sacando pulsos simultáneamente por un puerto a un ritmo constante de 48/50 ms para el driver Z( hasta completar 400millones de pulsos o sea 400mmde recorrido) y a 36/50 ms para el driver X ( obviamente también llegara a los 300 millones de pulsos al final )
Si logras hacer un programa que logre esto con un DSpic tienes la base de un control CNC
Ivan Tarnawiecki