Buenas tardes,Trazando un arco en discretos pasos
Antecedentes
Mi pregunta está relacionada con el trazado de un arco arbitraria en el espacio mediante pasos discretos. Sin embargo, es único porque no estoy dibujando un lienzo en el sentido típico. El firmware que estoy diseñando es para un intérprete gcode para una fresadora CNC que traducirá los comandos en movimientos de motor paso a paso. Ahora, ya he encontrado una pregunta similar en este sitio, pero la metodología sugerida (Algoritmo de Bresenham) parece ser incompatible para mover un objeto en el espacio, ya que solo se basa en el cálculo de un octante de un círculo que luego se refleja sobre los ejes de simetría restantes. Además, el método prescrito para calcular un arco entre dos ángulos arbitrarios se basa en la trigonometría (estoy implementando en un microcontrolador y me gustaría evitar costosas funciones trigonométricas, si es posible) y simplemente no tomar los pasos que están fuera del rango. Finalmente, el algoritmo solo está diseñado para trabajar en una dirección de rotación (por ejemplo, en sentido antihorario).
Pregunta
Así, a la pregunta real: ¿alguien sabe de un algoritmo de propósito general que se puede utilizar para "dibujar" un arco arbitraria en pasos discretos, pero dando respecto a la dirección angular (CW/CCW)? La implementación final se realizará en C, pero el lenguaje para el propósito de la pregunta es irrelevante.
Gracias de antemano.
Referencias
SO publican en la elaboración de un círculo simple usando el algoritmo de Bresenham:
"Drawing" an arc in discrete x-y steps
página Wiki que describe el algoritmo de Bresenham para un círculo
http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
instrucciones gcode a ser implementadas (ver. G2 y G3)
http://linuxcnc.org/docs/html/gcode.html
qué el microcontrolador han operaciones de punto flotante apoyado en el hardware? – titus
Sí y no. El controlador que estoy soportando actualmente no tiene hardware FP, pero tiene una biblioteca de software FP moderadamente optimizada (AVR Mega32). He estado considerando actualizar a uno de los AVR más potentes de 32 bits, que sí son compatibles con el hardware FP. En realidad, había planeado desplazarme por la mayor parte de los elementos FP al traducir las coordenadas a pasos enteros y solo recurrir a un acumulador de error FP si las cosas no se "alineaban" con un paso de motor. Sin embargo, estoy abierto a cualquier cosa en este punto. Tendrá 4000 pasos/pulgada, si hace alguna diferencia. – phobos51594
Ah, también, el punto fijo también es una opción, ya que estaría más que sorprendido de ver incluso una resolución de 0.005 dado las partes mecánicas baratas que estoy usando. Unos pocos lugares más allá de eso es el territorio de las máquinas que probablemente cuestan más que mi auto y probablemente suficiente para la acumulación de errores. – phobos51594