Registro por cámara
Las cortadoras, los plotters y los láseres con cámara (o con un sensor óptico) pueden corregir un trabajo para adaptarlo al material: un vinilo impreso que se ha estirado, una plancha colocada un poco girada, un rollo que se desvía al avanzar. ParametriQ CAD lo hace con extensiones de registro por cámara: antes de que un perfil de máquina que nombra una escriba su trabajo, se indica a la extensión dónde deberían estar las marcas de registro del dibujo, y esta indica dónde las encontró la cámara. Después, el trabajo se ajusta a las marcas (tramo a tramo a lo largo de un trabajo largo) y se escribe corregido, sea cual sea el formato.
Cómo funciona
- Coloque marcas de registro con la herramienta Marca de registro: en las esquinas del diseño o, para un trabajo largo, en filas a lo largo de la selección. Cada círculo (o punto) de la capa Registro es una marca.
- Las marcas se agrupan en tramos a lo largo del avance (el lado más largo de las marcas, salvo que el perfil indique X o Y): las marcas alineadas entre sí a lo largo del avance forman una fila, y cada dos filas vecinas forman un tramo. Cuatro esquinas son un tramo; seis filas a lo largo de un rollo son cinco. El primer tramo se extiende hacia atrás hasta el inicio del trabajo, y el último, hasta su final.
- Para cada tramo por turno, se pasan a
registerde la extensión las marcas del tramo donde las tiene el dibujo, y esta devuelve dónde están realmente. - Se ajusta una homografía (véase HOMOGRAPHY) a las marcas de cada tramo (exactamente con cuatro, el mejor ajuste por mínimos cuadrados con más) o el modelo del perfil. Si se encuentran menos marcas de las que necesita el modelo, se usa el modelo más flexible que permiten (tres: afín; dos: desplazar, girar y escalar; una: un desplazamiento).
- Si las marcas de un tramo se alejan del ajuste más de lo que permite el perfil (la media cuadrática de sus distancias, en milímetros), el trabajo se detiene y no se escribe nada. El informe indica cuánto se desvió cada tramo.
- El trabajo se escribe con cada elemento colocado sobre el material: su curva se corta donde se unen los tramos, y cada parte se desplaza según el ajuste de su propio tramo. Las líneas siguen siendo rectas; los arcos y los círculos se convierten en las elipses (u otras curvas) que hace de ellos el ajuste, y cada formato las escribe como escribe cualquier curva. Un agujero taladrado se desplaza al lugar al que va su centro y conserva su tamaño.
Con exactamente cuatro marcas, una homografía siempre se ajusta a ellas con exactitud, así que el error es 0 y no se puede detectar una marca mal medida. Dé a cada tramo más marcas (Marcas transversales 3 en la herramienta Marca de registro da seis) para que se compruebe el ajuste.
Coordenadas de máquina
Las marcas se dan, y las marcas encontradas se devuelven, en milímetros (sean cuales sean las unidades del dibujo), con X e Y como en el dibujo, desde el origen del dibujo, que es donde los formatos de máquina colocan el dibujo. Fije el origen de la máquina donde está el origen del dibujo sobre el material, o haga que la extensión mida desde él. Mientras se escribe un trabajo registrado, GP-GL y LightBurn conservan ese origen en lugar de mover el trabajo a su esquina inferior izquierda.
Escrito tramo a tramo ("frames": "perFrame"), cada tramo se mide y se escribe desde su propio origen:
su primera fila de marcas a lo largo del avance. Esto conviene a las máquinas que hacen avanzar el material y vuelven a
fijar su origen en cada tramo.
En cada formato
| Formato | Un trabajo de una vez (oneJob) |
Tramo a tramo (perFrame) |
|---|---|---|
| HP-GL | Un archivo, todos los tramos en coordenadas de máquina | Un archivo: el programa de cada tramo desde su propio origen, con PG; (Advance Full Page de HP-GL/2) entre ellos para hacer avanzar el material |
| GP-GL | Un archivo, desde el origen del dibujo | Un archivo por tramo (name-f01.gpgl …): GP-GL no tiene un comando de avance en el conjunto documentado que se escribe |
| G-code, DXF, CF2, LightBurn | Un archivo | Un archivo por tramo |
| Posprocesadores | Reciben los cortes corregidos, como en cualquier exportación | Se ejecutan una vez por tramo, un archivo cada uno |
Los formatos de imagen y de página (PDF, SVG, el SVG para láser, que coloca el trabajo en su propia página) no se registran.
Una cortadora de rollo a la que se envía un solo trabajo hace avanzar el material por sí misma a medida que las coordenadas lo recorren: compruebe que su cortadora acepta toda la longitud en un solo trabajo (la mayoría la limitan).
Declarar un registro por cámara
cameraRegistration({
name: "My camera",
description: "Reads the marks with the cutter's camera.",
model: "homography", // or "affine", "similarity", "rigid", "translation", "auto"
maxError: 0.3, // mm: a frame's marks further off than this (RMS) stop the job
services: ["http://localhost:8765/"], // the addresses httpRequest may reach
options: { exposure: { label: "Exposure", type: "number", value: 10, unit: "ms" } },
begin(job, options) { }, // before the first frame (optional)
register(job, options) { // each frame
return job.marks.map(m => [m.x + 0.4, m.y - 0.2]);
},
end(report, options) { } // after the last (optional)
});
Las options se declaran como en las demás extensiones; un perfil puede establecerlas.
register puede ser una función async o devolver una promesa: se espera a que termine.
Qué recibe register
| Propiedad | Significado |
|---|---|
marks |
Las marcas del tramo donde las tiene el dibujo: cada una {index, x, y, diameter} (index: el número de la marca en el trabajo). |
expected |
Las mismas posiciones, como {x, y}. |
frame |
{index, number, count, from, to, start, end, origin}: desde 0 y desde 1, cuántos hay, dónde empieza y termina a lo largo del avance (null: el propio final del trabajo), su primera y su última fila de marcas, y su origen. |
frames, axis |
Cuántos tramos tiene el trabajo, y el avance: "x" o "y". |
extent |
La extensión de todas las marcas del trabajo: {minX, minY, maxX, maxY}. |
units |
Siempre "mm". |
name, profile, machine, format |
El nombre del dibujo, y el perfil de máquina, su máquina y su formato de exportación. |
Qué devuelve register
- Una lista con una posición para cada marca, en el mismo orden:
[x, y]o{x, y}en milímetros, onullpara una marca que la cámara no encontró (se omite del ajuste). - O bien
{ marks: [...] }. - O bien
null: dejar este tramo tal como está dibujado.
Lanzar un error detiene el trabajo, con el mensaje.
Comunicarse con una cámara
Una extensión no puede acceder a archivos ni a la red, salvo que, mientras mide (en begin, register y end),
puede enviar solicitudes a los servicios que declara:
| Función | Significado |
|---|---|
httpRequest(url, {method, headers, body, timeout}) |
Envía una solicitud y espera la respuesta: {status, ok, text, json} (json: la respuesta leída como JSON, o null). method es "GET" si se omite; un body que es un objeto o una lista se envía como JSON; timeout está en segundos (30 si se omite). La url debe empezar por uno de los services declarados. |
Cada llamada a register debe terminar dentro del tiempo que se concede a una llamada de extensión (diez segundos):
una cámara que tarde más debe controlarse mediante un servicio que mida en segundo plano y al que se le pidan sus
resultados.
En un perfil de máquina
Un perfil indica su registro en su archivo (véase Perfiles en archivos):
"registration": {
"extension": "Simulated camera",
"options": { "turn": 0.5 },
"model": "homography",
"maxError": 0.3,
"feed": "auto",
"frames": "oneJob",
"split": true
}
| Ajuste | Significado |
|---|---|
extension |
El nombre del cameraRegistration. |
options |
Sus opciones (las demás, como las declara). |
model |
El ajuste; si se omite: el de la extensión y, si no, una homografía. |
maxError |
Lo máximo que pueden desviarse las marcas de un tramo (media cuadrática, mm); si se omite: el de la extensión y, si no, 0,5. |
feed |
"auto" (el lado más largo de las marcas), "x" o "y". |
frames |
"oneJob" o "perFrame" (véase En cada formato). |
split |
true: los elementos se cortan donde se unen los tramos, y cada parte se corrige con su propio tramo. false: cada elemento se mantiene entero, corregido con el tramo en el que está su punto medio (no se divide ningún corte; lo mejor para piezas pequeñas). |
Entonces, Archivo › Enviar con perfil de máquina con ese perfil mide, ajusta y escribe; la ventana Interactiva enumera las marcas encontradas de cada tramo, su error y la peor marca, y a qué distancia sitúan los tramos vecinos la línea en la que se unen.
Las extensiones que vienen con la aplicación
El archivo registration.js de la aplicación (cópielo a su carpeta de extensiones para modificarlo) contiene:
- Simulated camera: encuentra cada marca donde la sitúan un giro, un estiramiento, una distorsión trapezoidal y un desplazamiento conocidos, con ruido de medición y una marca descartada si se pide: para probar el registro y comprobar una configuración. La usa el perfil Vinyl cutter with camera registration (HP-GL).
- Camera service (HTTP): una plantilla para una cámara a la que se accede a través de un servicio en el mismo
equipo (
http://localhost:8765/register): envía (POST) el trabajo de cada tramo como JSON, lee de vuelta{ "marks": [[x, y], …] }(o{ "skip": true }) e indica al servicio cuándo empieza y cuándo termina el trabajo.
Véase también: herramienta Marca de registro, Perfiles de máquina, HOMOGRAPHY, Extensiones, API de dibujo.