board rotation - fix 0

This commit is contained in:
chk
2026-06-10 18:08:18 +02:00
parent 9105dc5eac
commit b1950ffa5a
5 changed files with 104 additions and 25 deletions

View File

@@ -491,6 +491,8 @@ app.post('/api/board/run', async (req, res) => {
if (!res.writableEnded) res.write(`data: ${JSON.stringify(obj)}\n\n`);
};
const { refSet } = req.body ?? {};
// 1. Temp-Verzeichnis
const ts = makeTimestamp();
const runDir = path.join(boardDataDir, ts);
@@ -501,9 +503,14 @@ app.post('/api/board/run', async (req, res) => {
// Robot-JSON laden und Marker-Anzahl loggen
let robotData = null;
try { robotData = JSON.parse(await fsPromises.readFile(ROBOT_JSON, 'utf8')); } catch {}
const boardMarkerCount = robotData?.links?.Board?.markers?.length ?? '?';
const boardMarkers = robotData?.links?.Board?.markers ?? [];
const boardMarkerCount = boardMarkers.length;
const refMarkerCount = refSet
? boardMarkers.filter(m => m.set === refSet).length
: boardMarkerCount;
send({ type: 'log', text: `▶ Robot-JSON: ${ROBOT_JSON}` });
send({ type: 'log', text: `▶ Board-Marker (A0): ${boardMarkerCount} Marker aus links.Board.markers` });
send({ type: 'log', text: `▶ Board-Marker: ${boardMarkerCount} (links.Board.markers)` });
send({ type: 'log', text: `▶ Referenz-Set: ${refSet ? `"${refSet}" (${refMarkerCount} Marker)` : 'alle'}` });
send({ type: 'log', text: '' });
// 2. Kameras ermitteln
@@ -567,12 +574,9 @@ app.post('/api/board/run', async (req, res) => {
}
send({ type: 'log', text: '\n▷ 2_estimate_camera_from_observations' });
const exit2 = await runScript([
SCRIPT_2,
'-i', detJson,
'-robot', ROBOT_JSON,
'-outDir', runDir,
], send);
const script2Args = [SCRIPT_2, '-i', detJson, '-robot', ROBOT_JSON, '-outDir', runDir];
if (refSet) script2Args.push('--refSet', refSet);
const exit2 = await runScript(script2Args, send);
if (exit2 !== 0) {
send({ type: 'log', text: `❌ Script 2 Exit ${exit2}` });
}
@@ -753,6 +757,23 @@ app.post('/api/robot/remove-marker', async (req, res) => {
}
});
/**
* GET /api/robot/board-sets
* Gibt die einzigartigen "set"-Werte aller Marker in links.Board zurück.
* Wird vom Frontend genutzt, um Dropdowns zu befüllen.
*/
app.get('/api/robot/board-sets', async (req, res) => {
try {
const robot = JSON.parse(await fsPromises.readFile(ROBOT_JSON, 'utf8'));
const markers = robot?.links?.Board?.markers ?? [];
const sets = [...new Set(markers.map(m => m.set).filter(Boolean))].sort();
return res.json({ sets });
} catch (err) {
console.error('robot/board-sets error:', err);
return res.status(500).json({ error: String(err) });
}
});
/**
* POST /api/robot/align-sets
* Richtet alle Marker des angegebenen Sets rigid (2D-Rotation um Z + 3D-Translation)
@@ -761,7 +782,7 @@ app.post('/api/robot/remove-marker', async (req, res) => {
*/
app.post('/api/robot/align-sets', async (req, res) => {
try {
const { setToMove } = req.body ?? {};
const { setToMove, setFixed } = req.body ?? {};
if (!setToMove) return res.status(400).json({ error: '"setToMove" ist erforderlich.' });
let extraMarkers = [];
@@ -778,7 +799,7 @@ app.post('/api/robot/align-sets', async (req, res) => {
if (result.error) return res.status(400).json(result);
console.log(
`robot/align-sets set="${setToMove}" → ${result.numChanged} Marker verschoben` +
`robot/align-sets fixed="${setFixed ?? ''}" move="${setToMove}" → ${result.numChanged} Marker` +
` (${result.numMatchingPts} Messpunkte) Δx=${result.transform.tx} Δy=${result.transform.ty}` +
` Δz=${result.transform.tz} mm θ=${result.transform.thetaDeg}°`,
);