2012-04-16 8 views
5

Estoy implementando un controlador para una fresadora CNC, y tengo problemas para implementar los comandos de arco de código G.Calcular ruta de arco n-dimensional

He encontrado varias implementaciones del algoritmo del círculo de punto medio, pero no es realmente utilizable tal como está.

El problema con el círculo de punto medio algo tal como lo encontré es que es 2D y dibuja todos los octantes al mismo tiempo, mientras que necesito pasos secuenciales a través de una ruta 3D, dada por los puntos de inicio, fin y centro .

Encontré un nice multidimensional equivalent of Bresenham’s line drawing algo usando operaciones de coma flotante. ¿Tal vez existe algo similar para dibujar un arco?

Podría doblar este algo a mi voluntad usando mucho pensamiento y experimentación, pero como dibujar un arco no es un problema sin resolver, y las máquinas CNC se han fabricado anteriormente, me pregunto si ya existe una solución elegante ?

+0

¿Está tratando de encontrar un camino a lo largo de una curva 1D en el espacio 3D, o una ruta que cubra una superficie curva 2D en el espacio 3D? – Beta

Respuesta

0

Mi paquete dxftools python utilizado para procesar archivos DXF para un cortador 2D no muy inteligente tiene una función para dividir un arco en segmentos de línea en 2D. Puede usar este código y luego usar transformaciones de coordenadas 3D para colocar esto arbitrariamente en el espacio 3D. Se pueden encontrar ejemplos de transformaciones de coordenadas en mi paquete py-stl.

0

En LinuxCNC, la generación de posición está separada de la generación por pasos. En el bucle de generación de posición, el sistema rastrea la distancia que ya ha movido a lo largo de la primitiva actual (línea o hélice) y utiliza una fórmula simple para obtener la ubicación que es la distancia D a lo largo de esa primitiva. (Por lo general, esto se hace una vez por milisegundo). Esta posición se puede usar de diferentes maneras dependiendo de si tiene servos, generación de pasos de hardware o generación de pasos de software.

En un sistema de generación de paso software, la diferencia entre la antigua posición mandado, y la nueva posición ordenada se determina a lo largo de cada eje, y esto se utiliza para actualizar las tarifas de un generador de forma de onda digital usando el método de síntesis digital directa (DDS) Luego, a una tasa más alta (típicamente cada 20-50μs), el DDS determina para cada eje si se debe generar un paso en ese momento.

Este es un diseño diferente del que está describiendo, pero es uno más flexible. Por ejemplo, al separar la generación de posición de la generación por pasos, puede revisar el algoritmo de mezcla en su código de generación de posición sin revisar la generación de pasos; y puede reemplazar la generación por pasos de software con la generación de paso de hardware o el servocontrol con algoritmos como PID.

En su diseño, puede aproximar el método que describo arriba simplemente dividiendo el arco helicoidal en segmentos de línea como lo describe Roland, y utilizándolos como entradas en su código de generación por pasos que solo comprende líneas. En cierto sentido, esto no es muy diferente de lo que hace LinuxCNC, excepto que la primitiva de curva se muestrea según la distancia en lugar de según el tiempo.

Cuestiones relacionadas