board rotation - fix 0
This commit is contained in:
@@ -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}°`,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user