X-Position
X-Position from Fotos. Kallibrierung
@@ -1,3 +1,3 @@
|
|||||||
|
|
||||||
const { calculate } = require('./calculateAngles.js');
|
const { calculate, optimizeRobot } = require('./calculateAngles.js');
|
||||||
module.exports = { calculate };
|
module.exports = { calculate, optimizeRobot };
|
||||||
|
|||||||
@@ -4,24 +4,127 @@
|
|||||||
* Browser + Server + Jest (CJS) kompatibel
|
* Browser + Server + Jest (CJS) kompatibel
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function calculate(foundMarkers, jsonRobot) {
|
function calculateXPos(listIdAndX, jsonRobot){
|
||||||
// --- X of the Hand-Joint ---
|
const partsMovingFixedX = new Set(['Base', 'Arm1', 'Joint1']);
|
||||||
const validOns = new Set(['Base', 'Arm1', 'Joint1']);
|
const markersMovingFixedX = jsonRobot.Marker.filter(m => partsMovingFixedX.has(m.on));
|
||||||
const foundById = new Map(foundMarkers.map(f => [f.id, f]));
|
// Join: Robot-Marker ↔ Found-Marker
|
||||||
|
|
||||||
const markersMovingFixedX = jsonRobot.Marker.filter(m => validOns.has(m.on));
|
const markersListeWithRobotInfo = jsonRobot.Marker
|
||||||
const markersXPosition = new Map();
|
.filter(m => partsMovingFixedX.has(m.on)) // nur relevante Teile
|
||||||
|
|
||||||
const xs = markersMovingFixedX
|
|
||||||
.map(m => {
|
.map(m => {
|
||||||
const f = foundById.get(m.id);
|
const found = listIdAndX.get(m.id);
|
||||||
return f ? f.position[0] - m.relPos[0] : null;
|
if (!found) return null;
|
||||||
})
|
|
||||||
.filter(x => x !== null);
|
|
||||||
|
|
||||||
const xAvg = xs.length
|
return {
|
||||||
? xs.reduce((a, b) => a + b, 0) / xs.length
|
id: m.id,
|
||||||
: 0;
|
relPos: m.relPos, // oder m.relPos, je nach Struktur
|
||||||
|
position: found,
|
||||||
|
Px: found[0] - m.relPos[0]
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.filter(Boolean); // nulls entfernen
|
||||||
|
|
||||||
|
const pxValues = markersListeWithRobotInfo.map(m => m.Px);
|
||||||
|
const meanPx = pxValues.reduce((sum, x) => sum + x, 0) / pxValues.length;
|
||||||
|
|
||||||
|
const variancePx = pxValues.reduce((sum, x) => sum + Math.pow(x - meanPx, 2), 0) / pxValues.length;
|
||||||
|
const stdDevPx = Math.sqrt(variancePx);
|
||||||
|
|
||||||
|
return { meanPx, stdDevPx };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function optimizeRobot(listFoundMarkers, jsonRobot) {
|
||||||
|
|
||||||
|
const map = new Map();
|
||||||
|
|
||||||
|
for (const foundMarkers of listFoundMarkers) {
|
||||||
|
var x_222_226 = null;
|
||||||
|
var x_222_226_count = 0;
|
||||||
|
|
||||||
|
for (const mark of foundMarkers.markers.filter(m => m.id === 226).map(f => [f.id, f.position_mm])) {
|
||||||
|
x_222_226 = mark[1][0];
|
||||||
|
x_222_226_count++;
|
||||||
|
}
|
||||||
|
if (x_222_226_count > 0) {
|
||||||
|
x_222_226 = x_222_226 / x_222_226_count;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
continue; // Wenn weder 222 noch 226 gefunden wurden, überspringen
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const mark of foundMarkers.markers.map(f => [f.id, f.position_mm ])){
|
||||||
|
const id = mark[0];
|
||||||
|
const dx_222_226 = mark[1][0] - x_222_226;
|
||||||
|
if (!map.has(id)) {
|
||||||
|
map.set(id, []); // Initialisiere mit x_222_226, damit wir später die Abweichung berechnen können
|
||||||
|
}
|
||||||
|
map.get(id).push(dx_222_226);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = Array.from(map, ([id, mm]) => ({ id, mm })).filter(m => [198,200,204,229,243].includes(m.id));
|
||||||
|
|
||||||
|
|
||||||
|
const withStats = result.map(entry => {
|
||||||
|
const { mm } = entry;
|
||||||
|
const n = mm.length;
|
||||||
|
|
||||||
|
if (n === 0) {
|
||||||
|
return {
|
||||||
|
...entry,
|
||||||
|
n: 0,
|
||||||
|
average: null,
|
||||||
|
deviation: null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const average = mm.reduce((a, b) => a + b, 0) / n;
|
||||||
|
|
||||||
|
const deviation = Math.sqrt(
|
||||||
|
mm.reduce((sum, x) => sum + Math.pow(x - average, 2), 0) / n
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
...entry,
|
||||||
|
n,
|
||||||
|
average,
|
||||||
|
deviation
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return withStats;
|
||||||
|
}
|
||||||
|
function calculateRotAngle(listIdAndX, jsonRobot, jointName){
|
||||||
|
// Achse finden
|
||||||
|
const jointInfo = jsonRobot.Joints[jointName];
|
||||||
|
if(!jointInfo){return null, null; }
|
||||||
|
if(jointInfo.type !== 'revolute'){ return null, null; }
|
||||||
|
if(!(jointInfo.origin)){ return null, null; }
|
||||||
|
if(!(jointInfo.axis)){ return null, null; }
|
||||||
|
if(!(jointInfo.child)){ return null, null; }
|
||||||
|
|
||||||
|
markerUsed = jsonRobot.Marker.filter(m => m.on === jointInfo.child)
|
||||||
|
if(markerUsed.length === 0){ return null, null; }
|
||||||
|
|
||||||
|
var markerFound = []
|
||||||
|
for (const m of markerUsed){
|
||||||
|
markerFound.push(listIdAndX.get(m.id));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var angle = 0;
|
||||||
|
var varAngle = 0;
|
||||||
|
|
||||||
|
return angle, varAngle;
|
||||||
|
}
|
||||||
|
|
||||||
|
function calculate(foundMarkers, jsonRobot) {
|
||||||
|
|
||||||
|
const foundById = new Map(foundMarkers.markers.map(f => [f.id, f.position_mm ]));
|
||||||
|
const { meanPx: x, stdDevPx: varx } = calculateXPos(foundById, jsonRobot);
|
||||||
|
|
||||||
|
const { meanY: y, stdDevY: vary } = calculateRotAngle(foundById, jsonRobot, "jointB");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
meta: {
|
meta: {
|
||||||
@@ -34,10 +137,11 @@ function calculate(foundMarkers, jsonRobot) {
|
|||||||
},
|
},
|
||||||
status: 'ok',
|
status: 'ok',
|
||||||
result: {
|
result: {
|
||||||
xAvg
|
x: x,
|
||||||
|
varx: varx
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
module.exports = { calculate };
|
module.exports = { calculate, optimizeRobot };
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"Elements":["Board","Base","Arm1","Joint1","Arm2","Finger1","Finger2"],
|
"Elements":["Board","Base","Arm1","Joint1","Arm2","Finger1","Finger2"],
|
||||||
"Joints":{
|
"Joints":{
|
||||||
"jointA":{"name":"Slider", "type":"lninear", "axis":[1,0,0],"parent":"Board","child":"Base"},
|
"jointA":{"name":"Slider", "type":"lninear", "axis":[1,0,0],"parent":"Board","child":"Base"},
|
||||||
"jointB":{"name":"Shoulder","type":"revolute","axis":[1,0,0],"parent":"Base","child":"Arm1","origin":[-89.5, 115, 61]},
|
"jointB":{"name":"Shoulder","type":"revolute","axis":[1,0,0],"parent":"Base","child":"Arm1","origin":[-89.5, 115, 53], "originSource":[null, "229_198_Foto_5_2026", "229_198_Foto_5_2026"]},
|
||||||
"jointC":{"name":"EllbowLift","type":"revolute","axis":[1,0,0],"parent":"Arm1","child":"Joint1"},
|
"jointC":{"name":"EllbowLift","type":"revolute","axis":[1,0,0],"parent":"Arm1","child":"Joint1"},
|
||||||
"jointD":{"name":"EllbowTwist","type":"revolute","axis":[0,1,0],"parent":"Joint1","child":"Arm2"}
|
"jointD":{"name":"EllbowTwist","type":"revolute","axis":[0,1,0],"parent":"Joint1","child":"Arm2"}
|
||||||
},
|
},
|
||||||
@@ -15,12 +15,13 @@
|
|||||||
{"id":214,"on":"Board","position":[0.40, 0.0, 0.0]},
|
{"id":214,"on":"Board","position":[0.40, 0.0, 0.0]},
|
||||||
{"id":215,"on":"Board","position":[0.20, -0.090, 0.0]},
|
{"id":215,"on":"Board","position":[0.20, -0.090, 0.0]},
|
||||||
|
|
||||||
{"id":200,"on":"Base","relPos":[-166, 6.5, 55]},
|
{"id":200,"on":"Base","relPos":[-163.8, 6.5, 55], "relPosSource":["226_FotoAverage_5_2026",null,null]},
|
||||||
{"id":201,"on":"Base","relPos":[-190, 97.5, 74.5]},
|
{"id":201,"on":"Base","relPos":[-164.8, 97.5, 74.5], "relPosSource":["226_FotoAverage_5_2026",null,null]},
|
||||||
{"id":204,"on":"Base","relPos":[-158.5,152.5,111]},
|
{"id":204,"on":"Base","relPos":[-158.5,152.5,111]},
|
||||||
|
|
||||||
{"id":198,"on":"Arm1", "relPos":[-89.5,-160, 35]},
|
{"id":198,"on":"Arm1", "relPos":[-93.4,-160, 35], "relPosSource":["226_FotoAverage_5_2026",null,null]},
|
||||||
{"id":229,"on":"Arm1", "relPos":[-89.5,-250, 35]},
|
{"id":229,"on":"Arm1", "relPos":[-90.6,-250, 35], "relPosSource":["226_FotoAverage_5_2026",null,null]},
|
||||||
|
{"id":242,"on":"Arm1", "relPos":[-89.5,-250,-35]},
|
||||||
{"id":243,"on":"Arm1", "relPos":[-89.5,-285, 0]},
|
{"id":243,"on":"Arm1", "relPos":[-89.5,-285, 0]},
|
||||||
|
|
||||||
{"id":222,"on":"Joint1", "relPos":[0,0, -35]},
|
{"id":222,"on":"Joint1", "relPos":[0,0, -35]},
|
||||||
|
|||||||
@@ -2,38 +2,7 @@ const fs = require('fs');
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { calculate } = require('../public/calculateAngles.cjs');
|
const { calculate } = require('../public/calculateAngles.cjs');
|
||||||
|
|
||||||
/* -------------------------
|
|
||||||
Hilfsfunktionen
|
|
||||||
------------------------- */
|
|
||||||
|
|
||||||
function loadMarkersFromCSV(filePath) {
|
|
||||||
const text = fs.readFileSync(filePath, 'utf8');
|
|
||||||
|
|
||||||
const [header, ...lines] = text
|
|
||||||
.split('\n')
|
|
||||||
.map(l => l.trim())
|
|
||||||
.filter(Boolean);
|
|
||||||
|
|
||||||
return lines.map(line => {
|
|
||||||
const [
|
|
||||||
id,
|
|
||||||
x, y, z,
|
|
||||||
roll, pitch, yaw,
|
|
||||||
seen_by
|
|
||||||
] = line.split(',');
|
|
||||||
|
|
||||||
return {
|
|
||||||
id: Number(id),
|
|
||||||
position: [Number(x), Number(y), Number(z)],
|
|
||||||
rotation: [Number(roll), Number(pitch), Number(yaw)],
|
|
||||||
seen_by: Number(seen_by)
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadJSON(filePath) {
|
|
||||||
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------
|
/* -------------------------
|
||||||
Tests
|
Tests
|
||||||
@@ -41,11 +10,28 @@ function loadJSON(filePath) {
|
|||||||
|
|
||||||
describe('calculateAngles.calculate', () => {
|
describe('calculateAngles.calculate', () => {
|
||||||
test('berechnet X-Durchschnitt für Base / Arm1 / Joint1', async () => {
|
test('berechnet X-Durchschnitt für Base / Arm1 / Joint1', async () => {
|
||||||
const markersPath = path.resolve('./test/snapshots/snapshot_video0_1774805028717_two_cam.csv');
|
//const markersPath = path.resolve('./test/snapshots/snapshot_video0_1774805028717_two_cam.json');
|
||||||
|
const markersPath = path.resolve('./test/snapshots/snapshot_video0_1775406055428_two_cam.json');
|
||||||
const robotPath = path.resolve('./public/robot.json');
|
const robotPath = path.resolve('./public/robot.json');
|
||||||
|
|
||||||
const foundMarkers = loadMarkersFromCSV(markersPath);
|
const foundMarkers = JSON.parse(fs.readFileSync(markersPath, 'utf8'));
|
||||||
const jsonRobot = loadJSON(robotPath);
|
const jsonRobot = JSON.parse(fs.readFileSync(robotPath, 'utf8'));
|
||||||
|
|
||||||
|
const result = await calculate(foundMarkers, jsonRobot);
|
||||||
|
|
||||||
|
expect(result.status).toBe('ok');
|
||||||
|
expect(result.result).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
describe('calculateAngles.y', () => {
|
||||||
|
test('berechnet y-Durchschnitt für Base / Arm1 / Joint1', async () => {
|
||||||
|
const markersPath = path.resolve('./test/snapshots/snapshot_video0_1778407171886_two_cam.json');
|
||||||
|
const robotPath = path.resolve('./public/robot.json');
|
||||||
|
|
||||||
|
const foundMarkers = JSON.parse(fs.readFileSync(markersPath, 'utf8'));
|
||||||
|
const jsonRobot = JSON.parse(fs.readFileSync(robotPath, 'utf8'));
|
||||||
|
|
||||||
const result = await calculate(foundMarkers, jsonRobot);
|
const result = await calculate(foundMarkers, jsonRobot);
|
||||||
|
|
||||||
|
|||||||
34
test/optimizeRobot.test.js
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const { calculate, optimizeRobot } = require('../public/calculateAngles.cjs');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------
|
||||||
|
Tests
|
||||||
|
------------------------- */
|
||||||
|
|
||||||
|
describe('optimizeRobot.', () => {
|
||||||
|
test('berechnet X-Durchschnitt für Base / Arm1 / Joint1', async () => {
|
||||||
|
//const markersPath1 = path.resolve('./test/snapshots/snapshot_video0_1777958128576_two_cam.json');
|
||||||
|
const markersPath1 = path.resolve('./test/snapshots/snapshot_video0_1778406635059_two_cam.json');
|
||||||
|
//const markersPath2 = path.resolve('./test/snapshots/snapshot_video0_1777957783463_two_cam.json');
|
||||||
|
const markersPath2 = path.resolve('./test/snapshots/snapshot_video0_1778406621349_two_cam.json');
|
||||||
|
const markersPath3 = path.resolve('./test/snapshots/snapshot_video0_1778407153025_two_cam.json');
|
||||||
|
const markersPath4 = path.resolve('./test/snapshots/snapshot_video0_1778407171886_two_cam.json');
|
||||||
|
const robotPath = path.resolve('./public/robot.json');
|
||||||
|
|
||||||
|
const foundMarkers1 = JSON.parse(fs.readFileSync(markersPath1, 'utf8'));
|
||||||
|
const foundMarkers2 = JSON.parse(fs.readFileSync(markersPath2, 'utf8'));
|
||||||
|
const foundMarkers3 = JSON.parse(fs.readFileSync(markersPath3, 'utf8'));
|
||||||
|
const foundMarkers4 = JSON.parse(fs.readFileSync(markersPath4, 'utf8'));
|
||||||
|
|
||||||
|
const list=[foundMarkers1, foundMarkers2, foundMarkers3, foundMarkers4];
|
||||||
|
const jsonRobot = JSON.parse(fs.readFileSync(robotPath, 'utf8'));
|
||||||
|
|
||||||
|
const result = await optimizeRobot(list, jsonRobot);
|
||||||
|
|
||||||
|
//expect(result.status).toBe('ok');
|
||||||
|
//expect(result.result).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
BIN
test/snapshots/snapshot_video0_1777957783463.jpg
Normal file
|
After Width: | Height: | Size: 162 KiB |
21
test/snapshots/snapshot_video0_1777957783463_two_cam.csv
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
|
||||||
|
camera 0,52.51,-848.87,600.02,-121.404,-2.306,-21.261
|
||||||
|
camera 1,353.00,-480.56,1185.56,-166.739,1.583,0.395
|
||||||
|
0,396.47,-42.96,-40.41,-0.938,-1.625,-1.286,1
|
||||||
|
178,434.70,-346.30,161.82,14.660,-9.061,127.657,3
|
||||||
|
179,410.47,-291.22,139.29,-4.164,55.412,-152.725,1
|
||||||
|
187,397.52,-341.22,141.15,-27.505,19.727,93.759,3
|
||||||
|
200,257.99,-24.24,118.95,-0.938,-0.465,2.088,3
|
||||||
|
204,258.36,127.36,126.23,131.455,-8.390,-19.321,3
|
||||||
|
205,805.33,-88.85,-1.77,-1.373,-0.755,-1.917,3
|
||||||
|
208,498.96,-80.59,-31.57,-3.711,0.412,1.079,2
|
||||||
|
210,-4.17,2.35,-2.53,-3.329,2.596,-0.816,3
|
||||||
|
211,200.91,-0.39,0.35,112.239,-7.122,-11.633,3
|
||||||
|
214,431.62,65.62,-47.50,114.928,-19.137,-29.993,1
|
||||||
|
215,199.30,-89.61,-0.57,-2.325,-0.729,-2.726,3
|
||||||
|
217,615.09,30.80,-73.14,-0.531,0.733,-1.364,2
|
||||||
|
226,420.76,-77.03,270.10,26.782,2.029,-0.030,3
|
||||||
|
228,400.09,-176.95,215.07,27.186,-28.754,-17.246,3
|
||||||
|
229,333.70,-35.80,258.29,-46.300,1.911,1.507,2
|
||||||
|
242,343.11,-34.31,190.43,135.274,0.085,-2.030,1
|
||||||
|
243,329.38,-87.08,265.66,42.490,1.111,-1.823,3
|
||||||
|
280
test/snapshots/snapshot_video0_1777957783463_two_cam.json
Normal file
@@ -0,0 +1,280 @@
|
|||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"timestamp": "2026-05-05 05:09:43",
|
||||||
|
"reference_markers": [
|
||||||
|
210,
|
||||||
|
211,
|
||||||
|
215,
|
||||||
|
205
|
||||||
|
],
|
||||||
|
"dict": "DICT_4X4_250",
|
||||||
|
"marker_size_mm": 25.0,
|
||||||
|
"rms_refs_px_cam1": 4.671353744091205,
|
||||||
|
"rms_refs_px_cam2": 3.1040055485065166,
|
||||||
|
"description": "Two-camera joint optimization with triangulation"
|
||||||
|
},
|
||||||
|
"cameras": [
|
||||||
|
{
|
||||||
|
"id": "camera1",
|
||||||
|
"position_mm": [
|
||||||
|
52.50705149143897,
|
||||||
|
-848.8746743773831,
|
||||||
|
600.0158350840767
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -121.40391168229475,
|
||||||
|
"pitch": -2.306436189824197,
|
||||||
|
"yaw": -21.260996144039062
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "camera2",
|
||||||
|
"position_mm": [
|
||||||
|
352.9965583411941,
|
||||||
|
-480.5647619160942,
|
||||||
|
1185.560920507425
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -166.73896963486465,
|
||||||
|
"pitch": 1.5832050600381053,
|
||||||
|
"yaw": 0.39465785124673575
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"position_mm": [
|
||||||
|
396.4664087076043,
|
||||||
|
-42.96067455601671,
|
||||||
|
-40.40681141345037
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -0.9375313569440544,
|
||||||
|
"pitch": -1.6254708655757175,
|
||||||
|
"yaw": -1.2864045600920857
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 178,
|
||||||
|
"position_mm": [
|
||||||
|
434.701416015625,
|
||||||
|
-346.30255126953125,
|
||||||
|
161.82244873046875
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 14.660044975945809,
|
||||||
|
"pitch": -9.060615532311536,
|
||||||
|
"yaw": 127.65722760442327
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 179,
|
||||||
|
"position_mm": [
|
||||||
|
410.4690229459951,
|
||||||
|
-291.2238586627398,
|
||||||
|
139.29182445163846
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -4.164149490729818,
|
||||||
|
"pitch": 55.41156542149833,
|
||||||
|
"yaw": -152.7245941169703
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 187,
|
||||||
|
"position_mm": [
|
||||||
|
397.520263671875,
|
||||||
|
-341.2248229980469,
|
||||||
|
141.1533203125
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -27.504707713464253,
|
||||||
|
"pitch": 19.727305083968414,
|
||||||
|
"yaw": 93.7587269029218
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 200,
|
||||||
|
"position_mm": [
|
||||||
|
257.988037109375,
|
||||||
|
-24.238113403320312,
|
||||||
|
118.95182037353516
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -0.9378750676447358,
|
||||||
|
"pitch": -0.46498037079853055,
|
||||||
|
"yaw": 2.088489211025033
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 204,
|
||||||
|
"position_mm": [
|
||||||
|
258.36309814453125,
|
||||||
|
127.355712890625,
|
||||||
|
126.2347412109375
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 131.45520428430584,
|
||||||
|
"pitch": -8.390047805254406,
|
||||||
|
"yaw": -19.32140480702805
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 205,
|
||||||
|
"position_mm": [
|
||||||
|
805.3345336914062,
|
||||||
|
-88.8466796875,
|
||||||
|
-1.772031307220459
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -1.3732577845338951,
|
||||||
|
"pitch": -0.755221584659945,
|
||||||
|
"yaw": -1.9174437143486767
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 208,
|
||||||
|
"position_mm": [
|
||||||
|
498.96205325263963,
|
||||||
|
-80.58717235952845,
|
||||||
|
-31.572839312099976
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -3.710891042088827,
|
||||||
|
"pitch": 0.41201015735627716,
|
||||||
|
"yaw": 1.0794999035785666
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 210,
|
||||||
|
"position_mm": [
|
||||||
|
-4.165961742401123,
|
||||||
|
2.3509929180145264,
|
||||||
|
-2.526089668273926
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -3.328954072289312,
|
||||||
|
"pitch": 2.5958542701376963,
|
||||||
|
"yaw": -0.8159059084027147
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"position_mm": [
|
||||||
|
200.90512084960938,
|
||||||
|
-0.38677510619163513,
|
||||||
|
0.34789878129959106
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 112.23902036479667,
|
||||||
|
"pitch": -7.122227983034214,
|
||||||
|
"yaw": -11.633422115111248
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 214,
|
||||||
|
"position_mm": [
|
||||||
|
431.6227926849502,
|
||||||
|
65.62094846958766,
|
||||||
|
-47.50279224705922
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 114.92780566359703,
|
||||||
|
"pitch": -19.136547203279413,
|
||||||
|
"yaw": -29.993356126435852
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 215,
|
||||||
|
"position_mm": [
|
||||||
|
199.30484008789062,
|
||||||
|
-89.61498260498047,
|
||||||
|
-0.5710603594779968
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -2.325372314878339,
|
||||||
|
"pitch": -0.7287700728739313,
|
||||||
|
"yaw": -2.7262640326032175
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 217,
|
||||||
|
"position_mm": [
|
||||||
|
615.0909335800857,
|
||||||
|
30.80487435405388,
|
||||||
|
-73.13761132332198
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -0.5312076724112325,
|
||||||
|
"pitch": 0.733422156922922,
|
||||||
|
"yaw": -1.3642012070521408
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 226,
|
||||||
|
"position_mm": [
|
||||||
|
420.7601623535156,
|
||||||
|
-77.025390625,
|
||||||
|
270.102783203125
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 26.781667281645746,
|
||||||
|
"pitch": 2.0289279897051853,
|
||||||
|
"yaw": -0.029585611475562927
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 228,
|
||||||
|
"position_mm": [
|
||||||
|
400.0892639160156,
|
||||||
|
-176.95059204101562,
|
||||||
|
215.06854248046875
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 27.18577804896399,
|
||||||
|
"pitch": -28.75366590348638,
|
||||||
|
"yaw": -17.246112881667592
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 229,
|
||||||
|
"position_mm": [
|
||||||
|
333.7011791401545,
|
||||||
|
-35.8008587982585,
|
||||||
|
258.2860495531072
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -46.30034850320603,
|
||||||
|
"pitch": 1.9106830493551008,
|
||||||
|
"yaw": 1.5074126579645082
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 242,
|
||||||
|
"position_mm": [
|
||||||
|
343.10525826663707,
|
||||||
|
-34.30694513106547,
|
||||||
|
190.4347424613153
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 135.27419902188078,
|
||||||
|
"pitch": 0.08530734885954665,
|
||||||
|
"yaw": -2.0299609451153673
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 243,
|
||||||
|
"position_mm": [
|
||||||
|
329.3802795410156,
|
||||||
|
-87.07755279541016,
|
||||||
|
265.6557312011719
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 42.49029610133165,
|
||||||
|
"pitch": 1.1112401667954726,
|
||||||
|
"yaw": -1.8231069586598487
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 255 KiB |
BIN
test/snapshots/snapshot_video0_1777957783463_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
21
test/snapshots/snapshot_video0_1777958128576_two_cam.csv
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
|
||||||
|
camera 0,256.17,-822.43,643.20,-123.532,-0.788,-9.098
|
||||||
|
camera 1,629.68,-270.32,1205.64,-171.411,10.923,11.668
|
||||||
|
0,385.87,-56.31,-33.55,100.596,-9.989,-12.304,1
|
||||||
|
178,494.28,-336.90,276.53,16.619,-4.277,132.262,3
|
||||||
|
179,425.50,-337.67,297.09,-14.032,53.897,-146.912,1
|
||||||
|
187,456.07,-335.85,259.58,-115.447,-36.884,-147.096,3
|
||||||
|
200,268.20,-14.01,117.32,-3.139,0.850,3.172,1
|
||||||
|
204,272.97,143.23,115.44,-2.727,3.637,0.923,3
|
||||||
|
205,804.71,-90.62,-1.30,-1.466,1.393,-0.486,3
|
||||||
|
207,799.64,-5.60,0.22,-2.190,2.670,2.302,3
|
||||||
|
208,499.89,-82.94,-54.66,29.194,-1.655,0.389,2
|
||||||
|
210,-31.34,6.71,-22.45,36.767,44.126,13.395,2
|
||||||
|
211,199.74,0.05,-0.18,107.619,3.693,4.245,3
|
||||||
|
214,409.79,26.15,-22.96,-3.559,0.080,-0.908,1
|
||||||
|
215,199.60,-89.94,-0.50,-2.825,0.115,0.368,3
|
||||||
|
217,604.05,19.26,-100.39,-10.000,4.687,0.680,2
|
||||||
|
226,461.88,-22.14,258.77,137.748,-9.547,-25.264,3
|
||||||
|
228,471.30,-140.24,256.77,-9.794,-8.559,3.734,2
|
||||||
|
229,383.65,-6.45,251.30,-52.687,10.507,3.203,2
|
||||||
|
243,366.01,-50.21,251.71,41.338,1.927,-0.577,3
|
||||||
|
279
test/snapshots/snapshot_video0_1777958128576_two_cam.json
Normal file
@@ -0,0 +1,279 @@
|
|||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"timestamp": "2026-05-05 05:15:28",
|
||||||
|
"reference_markers": [
|
||||||
|
211,
|
||||||
|
215,
|
||||||
|
205
|
||||||
|
],
|
||||||
|
"dict": "DICT_4X4_250",
|
||||||
|
"marker_size_mm": 25.0,
|
||||||
|
"rms_refs_px_cam1": 4.6375655603331385,
|
||||||
|
"rms_refs_px_cam2": 2.7443840845140404,
|
||||||
|
"description": "Two-camera joint optimization with triangulation"
|
||||||
|
},
|
||||||
|
"cameras": [
|
||||||
|
{
|
||||||
|
"id": "camera1",
|
||||||
|
"position_mm": [
|
||||||
|
256.1736410256437,
|
||||||
|
-822.4276726253502,
|
||||||
|
643.2026671719713
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -123.5316900379821,
|
||||||
|
"pitch": -0.7884129637642172,
|
||||||
|
"yaw": -9.097970726569594
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "camera2",
|
||||||
|
"position_mm": [
|
||||||
|
629.6754325211745,
|
||||||
|
-270.3191926197733,
|
||||||
|
1205.6426460653051
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -171.41083174640656,
|
||||||
|
"pitch": 10.922928735643563,
|
||||||
|
"yaw": 11.668247833176194
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"position_mm": [
|
||||||
|
385.87069622396274,
|
||||||
|
-56.31153562235403,
|
||||||
|
-33.54904549877591
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 100.59635796327298,
|
||||||
|
"pitch": -9.988991138734189,
|
||||||
|
"yaw": -12.304433726646625
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 178,
|
||||||
|
"position_mm": [
|
||||||
|
494.27813720703125,
|
||||||
|
-336.8986511230469,
|
||||||
|
276.5267333984375
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 16.61888387917759,
|
||||||
|
"pitch": -4.276930983519099,
|
||||||
|
"yaw": 132.26226500097638
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 179,
|
||||||
|
"position_mm": [
|
||||||
|
425.50282620904954,
|
||||||
|
-337.66631245337317,
|
||||||
|
297.0947712329073
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -14.03207370980746,
|
||||||
|
"pitch": 53.897382259538816,
|
||||||
|
"yaw": -146.91173919479965
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 187,
|
||||||
|
"position_mm": [
|
||||||
|
456.0668029785156,
|
||||||
|
-335.8484191894531,
|
||||||
|
259.5787658691406
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -115.44727568007977,
|
||||||
|
"pitch": -36.88432807413855,
|
||||||
|
"yaw": -147.09594966123984
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 200,
|
||||||
|
"position_mm": [
|
||||||
|
268.19624900285766,
|
||||||
|
-14.007162810458107,
|
||||||
|
117.31979998476683
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -3.1391365497288004,
|
||||||
|
"pitch": 0.849526608275676,
|
||||||
|
"yaw": 3.1721064317497194
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 204,
|
||||||
|
"position_mm": [
|
||||||
|
272.970458984375,
|
||||||
|
143.23162841796875,
|
||||||
|
115.44142150878906
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -2.726554071240893,
|
||||||
|
"pitch": 3.6374217353973566,
|
||||||
|
"yaw": 0.9234750688709343
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 205,
|
||||||
|
"position_mm": [
|
||||||
|
804.7095336914062,
|
||||||
|
-90.62186431884766,
|
||||||
|
-1.299379825592041
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -1.4658959348870262,
|
||||||
|
"pitch": 1.3933641879342518,
|
||||||
|
"yaw": -0.4862554682096239
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 207,
|
||||||
|
"position_mm": [
|
||||||
|
799.6442260742188,
|
||||||
|
-5.6020660400390625,
|
||||||
|
0.22404810786247253
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -2.189789906214652,
|
||||||
|
"pitch": 2.67045298129937,
|
||||||
|
"yaw": 2.302090287657334
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 208,
|
||||||
|
"position_mm": [
|
||||||
|
499.8863711359788,
|
||||||
|
-82.9365943571326,
|
||||||
|
-54.661945244869784
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 29.194092496312926,
|
||||||
|
"pitch": -1.6546496155382426,
|
||||||
|
"yaw": 0.38917806200082566
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 210,
|
||||||
|
"position_mm": [
|
||||||
|
-31.340368831395793,
|
||||||
|
6.7093997800957155,
|
||||||
|
-22.44573483244117
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 36.76670266178536,
|
||||||
|
"pitch": 44.1262498780372,
|
||||||
|
"yaw": 13.394948310954723
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"position_mm": [
|
||||||
|
199.744384765625,
|
||||||
|
0.05302027612924576,
|
||||||
|
-0.17967739701271057
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 107.61913087124054,
|
||||||
|
"pitch": 3.6929670477766554,
|
||||||
|
"yaw": 4.244923292001919
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 214,
|
||||||
|
"position_mm": [
|
||||||
|
409.78569191526424,
|
||||||
|
26.14888337450583,
|
||||||
|
-22.95924977723651
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -3.5591880651619534,
|
||||||
|
"pitch": 0.07958832800522347,
|
||||||
|
"yaw": -0.908281512466989
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 215,
|
||||||
|
"position_mm": [
|
||||||
|
199.60459899902344,
|
||||||
|
-89.9400405883789,
|
||||||
|
-0.4983225464820862
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -2.8248904023375925,
|
||||||
|
"pitch": 0.11546147778295654,
|
||||||
|
"yaw": 0.3680811987678786
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 217,
|
||||||
|
"position_mm": [
|
||||||
|
604.0510107770316,
|
||||||
|
19.25716435846797,
|
||||||
|
-100.39204520392686
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -9.999857114318917,
|
||||||
|
"pitch": 4.687411623510123,
|
||||||
|
"yaw": 0.6798235392761715
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 226,
|
||||||
|
"position_mm": [
|
||||||
|
461.88153076171875,
|
||||||
|
-22.143922805786133,
|
||||||
|
258.7698059082031
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 137.74833212868913,
|
||||||
|
"pitch": -9.546682190154835,
|
||||||
|
"yaw": -25.26374103690034
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 228,
|
||||||
|
"position_mm": [
|
||||||
|
471.3025228843485,
|
||||||
|
-140.24054627084377,
|
||||||
|
256.76517144080714
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -9.794001434347695,
|
||||||
|
"pitch": -8.559400619598163,
|
||||||
|
"yaw": 3.7341109472929315
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 229,
|
||||||
|
"position_mm": [
|
||||||
|
383.6541118252914,
|
||||||
|
-6.447470537112753,
|
||||||
|
251.29615453599862
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -52.68677699532855,
|
||||||
|
"pitch": 10.506929671117463,
|
||||||
|
"yaw": 3.2028428302931338
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 243,
|
||||||
|
"position_mm": [
|
||||||
|
366.0063171386719,
|
||||||
|
-50.20854949951172,
|
||||||
|
251.70713806152344
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 41.337890377168854,
|
||||||
|
"pitch": 1.9272769657975612,
|
||||||
|
"yaw": -0.5767882855037844
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 260 KiB |
BIN
test/snapshots/snapshot_video0_1777958128576_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
19
test/snapshots/snapshot_video0_1778054889025_two_cam.csv
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
|
||||||
|
camera 0,147.42,-751.09,594.62,-121.791,-0.822,-16.558
|
||||||
|
camera 1,393.29,-388.36,1179.31,-166.014,1.894,3.112
|
||||||
|
0,372.49,-94.59,0.47,-1.368,-0.236,-0.161,3
|
||||||
|
178,456.12,-359.81,245.47,50.538,-32.792,83.890,1
|
||||||
|
179,435.62,-348.24,284.44,-52.619,25.235,147.081,3
|
||||||
|
187,404.37,-362.35,274.95,13.506,10.207,73.990,3
|
||||||
|
200,280.33,-27.04,118.17,-0.012,-0.778,3.812,3
|
||||||
|
204,278.61,125.53,123.01,126.488,-7.084,-15.783,3
|
||||||
|
208,518.66,-28.70,-54.78,105.248,-29.214,-36.129,1
|
||||||
|
210,-4.16,1.46,-2.90,-0.317,2.970,-0.772,3
|
||||||
|
211,199.76,0.13,-0.34,-3.856,1.306,-0.502,3
|
||||||
|
214,426.36,88.57,-71.53,0.908,-0.975,-0.593,1
|
||||||
|
215,199.65,-89.81,-0.78,-1.530,-0.638,-0.883,3
|
||||||
|
217,612.39,25.75,-81.35,-1.901,-0.742,-2.150,2
|
||||||
|
223,432.78,-177.96,275.89,-2.274,-14.074,0.887,3
|
||||||
|
226,442.85,-63.87,268.88,-4.845,2.287,0.660,3
|
||||||
|
229,357.96,-53.35,287.65,-47.898,1.975,2.923,2
|
||||||
|
243,353.42,-92.26,263.01,44.821,2.132,0.166,3
|
||||||
|
253
test/snapshots/snapshot_video0_1778054889025_two_cam.json
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"timestamp": "2026-05-06 08:08:09",
|
||||||
|
"reference_markers": [
|
||||||
|
210,
|
||||||
|
211,
|
||||||
|
215
|
||||||
|
],
|
||||||
|
"dict": "DICT_4X4_250",
|
||||||
|
"marker_size_mm": 25.0,
|
||||||
|
"rms_refs_px_cam1": 4.590816018090041,
|
||||||
|
"rms_refs_px_cam2": 1.6240034592105381,
|
||||||
|
"description": "Two-camera joint optimization with triangulation"
|
||||||
|
},
|
||||||
|
"cameras": [
|
||||||
|
{
|
||||||
|
"id": "camera1",
|
||||||
|
"position_mm": [
|
||||||
|
147.42494865275995,
|
||||||
|
-751.0854570669217,
|
||||||
|
594.6183586095766
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -121.79096706534146,
|
||||||
|
"pitch": -0.8218092217060426,
|
||||||
|
"yaw": -16.55800609169854
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "camera2",
|
||||||
|
"position_mm": [
|
||||||
|
393.2881919726487,
|
||||||
|
-388.3550283648296,
|
||||||
|
1179.3091897188835
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -166.0141656191962,
|
||||||
|
"pitch": 1.89358083964142,
|
||||||
|
"yaw": 3.111972751662505
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"position_mm": [
|
||||||
|
372.48663330078125,
|
||||||
|
-94.5899429321289,
|
||||||
|
0.47164931893348694
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -1.3681401980979884,
|
||||||
|
"pitch": -0.23638593167529084,
|
||||||
|
"yaw": -0.1613986718329691
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 178,
|
||||||
|
"position_mm": [
|
||||||
|
456.11608239895315,
|
||||||
|
-359.80777627987607,
|
||||||
|
245.4731644376812
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 50.538176524873926,
|
||||||
|
"pitch": -32.79186919733686,
|
||||||
|
"yaw": 83.89001220022
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 179,
|
||||||
|
"position_mm": [
|
||||||
|
435.61993408203125,
|
||||||
|
-348.2384033203125,
|
||||||
|
284.43634033203125
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -52.61873975144137,
|
||||||
|
"pitch": 25.234584609200773,
|
||||||
|
"yaw": 147.0807634416476
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 187,
|
||||||
|
"position_mm": [
|
||||||
|
404.3673095703125,
|
||||||
|
-362.3518981933594,
|
||||||
|
274.95159912109375
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 13.506344281555837,
|
||||||
|
"pitch": 10.207437257161248,
|
||||||
|
"yaw": 73.9895685873278
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 200,
|
||||||
|
"position_mm": [
|
||||||
|
280.331298828125,
|
||||||
|
-27.04494857788086,
|
||||||
|
118.17294311523438
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -0.012251456947055669,
|
||||||
|
"pitch": -0.7775758584681589,
|
||||||
|
"yaw": 3.8124863453082036
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 204,
|
||||||
|
"position_mm": [
|
||||||
|
278.6128234863281,
|
||||||
|
125.52925872802734,
|
||||||
|
123.01371765136719
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 126.48782678823211,
|
||||||
|
"pitch": -7.083549530230612,
|
||||||
|
"yaw": -15.782702355540186
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 208,
|
||||||
|
"position_mm": [
|
||||||
|
518.6632773344581,
|
||||||
|
-28.697352192997517,
|
||||||
|
-54.77502128181433
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 105.24776703452369,
|
||||||
|
"pitch": -29.213657366588535,
|
||||||
|
"yaw": -36.12852775174824
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 210,
|
||||||
|
"position_mm": [
|
||||||
|
-4.164219856262207,
|
||||||
|
1.4597249031066895,
|
||||||
|
-2.9007458686828613
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -0.31694418737468777,
|
||||||
|
"pitch": 2.969889470432295,
|
||||||
|
"yaw": -0.7718500078010664
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"position_mm": [
|
||||||
|
199.76065063476562,
|
||||||
|
0.1294933259487152,
|
||||||
|
-0.3412942886352539
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -3.8561307789129287,
|
||||||
|
"pitch": 1.306318032876168,
|
||||||
|
"yaw": -0.5015868400366902
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 214,
|
||||||
|
"position_mm": [
|
||||||
|
426.35580492728934,
|
||||||
|
88.56616440062004,
|
||||||
|
-71.52535523553838
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 0.9078878446492741,
|
||||||
|
"pitch": -0.9747977726478123,
|
||||||
|
"yaw": -0.5931841691660048
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 215,
|
||||||
|
"position_mm": [
|
||||||
|
199.64529418945312,
|
||||||
|
-89.81466674804688,
|
||||||
|
-0.7764945030212402
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -1.5304041632561065,
|
||||||
|
"pitch": -0.6375461965750857,
|
||||||
|
"yaw": -0.882874775136248
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 217,
|
||||||
|
"position_mm": [
|
||||||
|
612.3893168517301,
|
||||||
|
25.752911347790675,
|
||||||
|
-81.35457809472312
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -1.9014094956510394,
|
||||||
|
"pitch": -0.7421121932072762,
|
||||||
|
"yaw": -2.150141418143064
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 223,
|
||||||
|
"position_mm": [
|
||||||
|
432.781005859375,
|
||||||
|
-177.96484375,
|
||||||
|
275.8923645019531
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -2.274470910826712,
|
||||||
|
"pitch": -14.074084979235563,
|
||||||
|
"yaw": 0.8872004060360167
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 226,
|
||||||
|
"position_mm": [
|
||||||
|
442.849609375,
|
||||||
|
-63.87300109863281,
|
||||||
|
268.8798522949219
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -4.8454999463535655,
|
||||||
|
"pitch": 2.2873307526536966,
|
||||||
|
"yaw": 0.660174117408432
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 229,
|
||||||
|
"position_mm": [
|
||||||
|
357.96071174966926,
|
||||||
|
-53.345881802605135,
|
||||||
|
287.6518056414521
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -47.898354075997865,
|
||||||
|
"pitch": 1.974847488204686,
|
||||||
|
"yaw": 2.9226765105596173
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 243,
|
||||||
|
"position_mm": [
|
||||||
|
353.41839599609375,
|
||||||
|
-92.26097106933594,
|
||||||
|
263.00689697265625
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 44.821402430458285,
|
||||||
|
"pitch": 2.1320756192699135,
|
||||||
|
"yaw": 0.1658569371921932
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 264 KiB |
BIN
test/snapshots/snapshot_video0_1778054889025_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
test/snapshots/snapshot_video0_1778406621349.jpg
Normal file
|
After Width: | Height: | Size: 190 KiB |
13
test/snapshots/snapshot_video0_1778406621349_two_cam.csv
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
|
||||||
|
camera 0,264.84,-448.46,516.54,-140.171,-1.865,2.388
|
||||||
|
camera 1,389.91,-409.85,935.42,-157.399,8.669,7.846
|
||||||
|
198,379.47,-47.52,91.56,1.884,2.172,1.413,3
|
||||||
|
200,310.61,-28.22,116.65,2.481,-1.302,2.910,3
|
||||||
|
204,309.61,123.65,124.82,0.922,1.511,1.327,3
|
||||||
|
210,-1.38,-0.36,0.53,2.268,0.168,0.630,3
|
||||||
|
211,200.01,-0.03,0.03,1.212,0.080,1.086,3
|
||||||
|
215,200.00,-90.02,0.01,0.329,0.082,1.119,3
|
||||||
|
223,461.70,-239.97,68.70,-6.283,-26.057,3.143,2
|
||||||
|
226,473.32,-128.20,82.36,-7.045,3.550,2.138,3
|
||||||
|
229,382.10,-138.78,91.38,2.122,1.637,1.333,3
|
||||||
|
243,384.75,-153.93,31.47,92.284,1.185,1.570,1
|
||||||
|
175
test/snapshots/snapshot_video0_1778406621349_two_cam.json
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"timestamp": "2026-05-10 09:50:21",
|
||||||
|
"reference_markers": [
|
||||||
|
210,
|
||||||
|
211,
|
||||||
|
215
|
||||||
|
],
|
||||||
|
"dict": "DICT_4X4_250",
|
||||||
|
"marker_size_mm": 25.0,
|
||||||
|
"rms_refs_px_cam1": 3.24786159840821,
|
||||||
|
"rms_refs_px_cam2": 0.35373435298091754,
|
||||||
|
"description": "Two-camera joint optimization with triangulation"
|
||||||
|
},
|
||||||
|
"cameras": [
|
||||||
|
{
|
||||||
|
"id": "camera1",
|
||||||
|
"position_mm": [
|
||||||
|
264.8418896705653,
|
||||||
|
-448.4588280097624,
|
||||||
|
516.5430654974838
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -140.17119986117208,
|
||||||
|
"pitch": -1.865223311233184,
|
||||||
|
"yaw": 2.388475258105415
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "camera2",
|
||||||
|
"position_mm": [
|
||||||
|
389.91429402212697,
|
||||||
|
-409.84642833812615,
|
||||||
|
935.419816456442
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -157.39944112599088,
|
||||||
|
"pitch": 8.668739432057341,
|
||||||
|
"yaw": 7.84617553314689
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"id": 198,
|
||||||
|
"position_mm": [
|
||||||
|
379.4744873046875,
|
||||||
|
-47.51786804199219,
|
||||||
|
91.5611801147461
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 1.883785213403855,
|
||||||
|
"pitch": 2.172404640223496,
|
||||||
|
"yaw": 1.4128404521411706
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 200,
|
||||||
|
"position_mm": [
|
||||||
|
310.6123352050781,
|
||||||
|
-28.22052764892578,
|
||||||
|
116.64888763427734
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 2.4805237147914183,
|
||||||
|
"pitch": -1.3021544214965108,
|
||||||
|
"yaw": 2.9096889693911945
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 204,
|
||||||
|
"position_mm": [
|
||||||
|
309.6077880859375,
|
||||||
|
123.64892578125,
|
||||||
|
124.82405853271484
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 0.9217037882864602,
|
||||||
|
"pitch": 1.510909167972885,
|
||||||
|
"yaw": 1.3270366048715656
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 210,
|
||||||
|
"position_mm": [
|
||||||
|
-1.3822473287582397,
|
||||||
|
-0.35651564598083496,
|
||||||
|
0.5323472619056702
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 2.2680841460779426,
|
||||||
|
"pitch": 0.16754081520133732,
|
||||||
|
"yaw": 0.6300169958322452
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"position_mm": [
|
||||||
|
200.0091094970703,
|
||||||
|
-0.027147645130753517,
|
||||||
|
0.029545657336711884
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 1.2120159665924424,
|
||||||
|
"pitch": 0.07991626682053452,
|
||||||
|
"yaw": 1.0861087648303256
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 215,
|
||||||
|
"position_mm": [
|
||||||
|
199.99989318847656,
|
||||||
|
-90.02400207519531,
|
||||||
|
0.011483968235552311
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 0.3291608166417733,
|
||||||
|
"pitch": 0.08225944124668336,
|
||||||
|
"yaw": 1.1185856551828588
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 223,
|
||||||
|
"position_mm": [
|
||||||
|
461.6983083182723,
|
||||||
|
-239.9714317762591,
|
||||||
|
68.7005685225841
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -6.283431761105847,
|
||||||
|
"pitch": -26.057398472817134,
|
||||||
|
"yaw": 3.1429438658960946
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 226,
|
||||||
|
"position_mm": [
|
||||||
|
473.31671142578125,
|
||||||
|
-128.2008819580078,
|
||||||
|
82.3624267578125
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -7.044637777230225,
|
||||||
|
"pitch": 3.5502536437242425,
|
||||||
|
"yaw": 2.1379181565828254
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 229,
|
||||||
|
"position_mm": [
|
||||||
|
382.09576416015625,
|
||||||
|
-138.7764129638672,
|
||||||
|
91.38326263427734
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 2.1223433653949817,
|
||||||
|
"pitch": 1.636784042225621,
|
||||||
|
"yaw": 1.3329059458000578
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 243,
|
||||||
|
"position_mm": [
|
||||||
|
384.7495384614813,
|
||||||
|
-153.92526815108292,
|
||||||
|
31.465031813878554
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 92.28432644230978,
|
||||||
|
"pitch": 1.185328109849308,
|
||||||
|
"yaw": 1.5702705780719146
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 285 KiB |
BIN
test/snapshots/snapshot_video0_1778406621349_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
201
test/snapshots/snapshot_video0_1778406635059_two_cam.json
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"timestamp": "2026-05-10 09:50:35",
|
||||||
|
"reference_markers": [
|
||||||
|
210,
|
||||||
|
211,
|
||||||
|
215
|
||||||
|
],
|
||||||
|
"dict": "DICT_4X4_250",
|
||||||
|
"marker_size_mm": 25.0,
|
||||||
|
"rms_refs_px_cam1": 3.2482731059855747,
|
||||||
|
"rms_refs_px_cam2": 0.3537390578212888,
|
||||||
|
"description": "Two-camera joint optimization with triangulation"
|
||||||
|
},
|
||||||
|
"cameras": [
|
||||||
|
{
|
||||||
|
"id": "camera1",
|
||||||
|
"position_mm": [
|
||||||
|
265.397015887861,
|
||||||
|
-448.6315082129522,
|
||||||
|
515.3628550421728
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -140.09181177429903,
|
||||||
|
"pitch": -1.842611823442935,
|
||||||
|
"yaw": 2.450610543799479
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "camera2",
|
||||||
|
"position_mm": [
|
||||||
|
383.3214578496451,
|
||||||
|
-385.83974146528055,
|
||||||
|
953.5667818268885
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -159.08748070867932,
|
||||||
|
"pitch": 8.461582940811079,
|
||||||
|
"yaw": 7.425461023601154
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"id": 198,
|
||||||
|
"position_mm": [
|
||||||
|
349.6740417480469,
|
||||||
|
-44.07814407348633,
|
||||||
|
88.61839294433594
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 2.5667577692881807,
|
||||||
|
"pitch": 1.4580715758695812,
|
||||||
|
"yaw": 1.4609442861632849
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 200,
|
||||||
|
"position_mm": [
|
||||||
|
280.2397155761719,
|
||||||
|
-23.60141944885254,
|
||||||
|
112.71051788330078
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 2.633060948359525,
|
||||||
|
"pitch": -0.5171332067681839,
|
||||||
|
"yaw": 3.8143400316997913
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 204,
|
||||||
|
"position_mm": [
|
||||||
|
279.1097717285156,
|
||||||
|
127.85354614257812,
|
||||||
|
122.40876007080078
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 0.11539855528707277,
|
||||||
|
"pitch": 1.8119645874878296,
|
||||||
|
"yaw": 1.2059489621885167
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 210,
|
||||||
|
"position_mm": [
|
||||||
|
-1.3366869688034058,
|
||||||
|
-0.41581201553344727,
|
||||||
|
0.6352185010910034
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 1.392657022348894,
|
||||||
|
"pitch": -0.34765543020625655,
|
||||||
|
"yaw": 0.9545639555981095
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"position_mm": [
|
||||||
|
200.00827026367188,
|
||||||
|
-0.023877479135990143,
|
||||||
|
0.02531452104449272
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 0.5726747013059821,
|
||||||
|
"pitch": -0.4386454622262142,
|
||||||
|
"yaw": 0.6785547309411363
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 214,
|
||||||
|
"position_mm": [
|
||||||
|
402.29820802367976,
|
||||||
|
7.204420898576203,
|
||||||
|
-21.035325233706548
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -4.430514955898216,
|
||||||
|
"pitch": -3.1619089568308882,
|
||||||
|
"yaw": 0.1308589144890069
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 215,
|
||||||
|
"position_mm": [
|
||||||
|
199.99966430664062,
|
||||||
|
-90.02363586425781,
|
||||||
|
0.01089040469378233
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 0.4079874268727783,
|
||||||
|
"pitch": 0.10662199276007521,
|
||||||
|
"yaw": 1.1834191807022583
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 223,
|
||||||
|
"position_mm": [
|
||||||
|
427.94940185546875,
|
||||||
|
-240.49069213867188,
|
||||||
|
92.17993927001953
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -7.682039212213371,
|
||||||
|
"pitch": -28.31260565779191,
|
||||||
|
"yaw": 5.048647103544987
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 226,
|
||||||
|
"position_mm": [
|
||||||
|
443.6652526855469,
|
||||||
|
-125.32998657226562,
|
||||||
|
79.9815902709961
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -5.654114523378114,
|
||||||
|
"pitch": 3.6471568870248174,
|
||||||
|
"yaw": 2.809074607780799
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 228,
|
||||||
|
"position_mm": [
|
||||||
|
481.57039719357545,
|
||||||
|
-236.29591842142963,
|
||||||
|
39.87178136845826
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -16.057635594680953,
|
||||||
|
"pitch": 55.60127692022108,
|
||||||
|
"yaw": -11.892761289401005
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 229,
|
||||||
|
"position_mm": [
|
||||||
|
352.33184814453125,
|
||||||
|
-135.92752075195312,
|
||||||
|
88.81539154052734
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 2.2601297965351503,
|
||||||
|
"pitch": 0.9413138522933149,
|
||||||
|
"yaw": 1.2921332576257998
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 243,
|
||||||
|
"position_mm": [
|
||||||
|
354.5863316838132,
|
||||||
|
-150.94967446548407,
|
||||||
|
26.990575716774543
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 92.20701707845971,
|
||||||
|
"pitch": 2.043955224411742,
|
||||||
|
"yaw": 1.9432810218927754
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 284 KiB |
BIN
test/snapshots/snapshot_video0_1778406635059_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
test/snapshots/snapshot_video0_1778407153025.jpg
Normal file
|
After Width: | Height: | Size: 170 KiB |
17
test/snapshots/snapshot_video0_1778407153025_two_cam.csv
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
|
||||||
|
camera 0,158.36,-593.39,578.95,-128.888,1.436,-15.566
|
||||||
|
camera 1,387.25,-391.56,947.37,-158.603,8.621,7.638
|
||||||
|
0,390.64,-42.76,-57.96,0.869,1.093,1.096,1
|
||||||
|
198,334.11,-6.38,159.48,-30.514,0.703,2.172,2
|
||||||
|
200,263.51,-25.92,115.97,1.396,0.003,3.587,3
|
||||||
|
204,262.09,125.71,123.56,-1.138,2.084,1.523,3
|
||||||
|
208,499.27,-81.15,-32.64,36.786,-9.918,-1.006,2
|
||||||
|
210,-3.29,2.01,-3.86,-0.284,2.089,0.732,3
|
||||||
|
211,199.97,0.04,-0.10,-0.360,0.282,-0.331,3
|
||||||
|
214,416.92,55.17,-54.53,2.603,-0.313,0.497,1
|
||||||
|
215,199.88,-89.84,-0.54,1.273,0.406,0.044,3
|
||||||
|
217,642.91,84.41,-81.51,3.494,2.015,-0.760,1
|
||||||
|
223,407.39,-219.71,161.30,24.607,-26.107,-13.137,3
|
||||||
|
226,427.44,-115.61,205.02,22.093,3.594,0.933,3
|
||||||
|
229,336.88,-83.96,194.87,-29.693,0.904,1.026,2
|
||||||
|
243,336.42,-136.74,196.57,44.605,-22.045,-30.908,3
|
||||||
|
227
test/snapshots/snapshot_video0_1778407153025_two_cam.json
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"timestamp": "2026-05-10 09:59:13",
|
||||||
|
"reference_markers": [
|
||||||
|
210,
|
||||||
|
211,
|
||||||
|
215
|
||||||
|
],
|
||||||
|
"dict": "DICT_4X4_250",
|
||||||
|
"marker_size_mm": 25.0,
|
||||||
|
"rms_refs_px_cam1": 4.037640585863036,
|
||||||
|
"rms_refs_px_cam2": 0.35368062284827945,
|
||||||
|
"description": "Two-camera joint optimization with triangulation"
|
||||||
|
},
|
||||||
|
"cameras": [
|
||||||
|
{
|
||||||
|
"id": "camera1",
|
||||||
|
"position_mm": [
|
||||||
|
158.3637652609236,
|
||||||
|
-593.3933430814283,
|
||||||
|
578.9501861619086
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -128.88780220793933,
|
||||||
|
"pitch": 1.4363565503299847,
|
||||||
|
"yaw": -15.565753425224687
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "camera2",
|
||||||
|
"position_mm": [
|
||||||
|
387.2468230079705,
|
||||||
|
-391.55964302648147,
|
||||||
|
947.3689579287991
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -158.60294191586274,
|
||||||
|
"pitch": 8.621452909290047,
|
||||||
|
"yaw": 7.638107369992987
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"position_mm": [
|
||||||
|
390.6387843924503,
|
||||||
|
-42.7621855424406,
|
||||||
|
-57.962717237959204
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 0.8692799659217282,
|
||||||
|
"pitch": 1.0931707841628564,
|
||||||
|
"yaw": 1.0964523562377044
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 198,
|
||||||
|
"position_mm": [
|
||||||
|
334.1105761644491,
|
||||||
|
-6.383341988162982,
|
||||||
|
159.47917099190266
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -30.513876703780277,
|
||||||
|
"pitch": 0.7030511432366292,
|
||||||
|
"yaw": 2.1723530299232174
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 200,
|
||||||
|
"position_mm": [
|
||||||
|
263.5056457519531,
|
||||||
|
-25.92091941833496,
|
||||||
|
115.9714584350586
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 1.3958934920738213,
|
||||||
|
"pitch": 0.0030810830461071785,
|
||||||
|
"yaw": 3.587025581205188
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 204,
|
||||||
|
"position_mm": [
|
||||||
|
262.0873107910156,
|
||||||
|
125.70845794677734,
|
||||||
|
123.56187438964844
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -1.1384989840329478,
|
||||||
|
"pitch": 2.0838607039127384,
|
||||||
|
"yaw": 1.5234662612083132
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 208,
|
||||||
|
"position_mm": [
|
||||||
|
499.2681534131064,
|
||||||
|
-81.1536514000235,
|
||||||
|
-32.6360145861917
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 36.78623735054579,
|
||||||
|
"pitch": -9.917537883912583,
|
||||||
|
"yaw": -1.0060423963714051
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 210,
|
||||||
|
"position_mm": [
|
||||||
|
-3.2904393672943115,
|
||||||
|
2.0091781616210938,
|
||||||
|
-3.8569560050964355
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -0.2844449975671197,
|
||||||
|
"pitch": 2.088986796376549,
|
||||||
|
"yaw": 0.7318757468677802
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"position_mm": [
|
||||||
|
199.96714782714844,
|
||||||
|
0.036044832319021225,
|
||||||
|
-0.10493536293506622
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -0.3596510701204492,
|
||||||
|
"pitch": 0.2819800595592275,
|
||||||
|
"yaw": -0.33064209912600223
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 214,
|
||||||
|
"position_mm": [
|
||||||
|
416.9196684070423,
|
||||||
|
55.16722846050992,
|
||||||
|
-54.53336540373432
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 2.6025596581543113,
|
||||||
|
"pitch": -0.31274834760090375,
|
||||||
|
"yaw": 0.4965197650165277
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 215,
|
||||||
|
"position_mm": [
|
||||||
|
199.87811279296875,
|
||||||
|
-89.84262084960938,
|
||||||
|
-0.537714421749115
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 1.272501125792174,
|
||||||
|
"pitch": 0.4056540461945203,
|
||||||
|
"yaw": 0.04380828051345797
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 217,
|
||||||
|
"position_mm": [
|
||||||
|
642.9125537201817,
|
||||||
|
84.41179556964696,
|
||||||
|
-81.51024043559329
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 3.4938631545234684,
|
||||||
|
"pitch": 2.0153184255735406,
|
||||||
|
"yaw": -0.7601476308219924
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 223,
|
||||||
|
"position_mm": [
|
||||||
|
407.3850402832031,
|
||||||
|
-219.70761108398438,
|
||||||
|
161.30087280273438
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 24.606665041324728,
|
||||||
|
"pitch": -26.10740646159854,
|
||||||
|
"yaw": -13.137366415947858
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 226,
|
||||||
|
"position_mm": [
|
||||||
|
427.4405822753906,
|
||||||
|
-115.60576629638672,
|
||||||
|
205.0249786376953
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 22.09290336947975,
|
||||||
|
"pitch": 3.5938824646587535,
|
||||||
|
"yaw": 0.9331204880248806
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 229,
|
||||||
|
"position_mm": [
|
||||||
|
336.87580740414757,
|
||||||
|
-83.959242272582,
|
||||||
|
194.86770890959903
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -29.692998825834785,
|
||||||
|
"pitch": 0.9037989541452385,
|
||||||
|
"yaw": 1.0260204426370985
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 243,
|
||||||
|
"position_mm": [
|
||||||
|
336.4207458496094,
|
||||||
|
-136.7364959716797,
|
||||||
|
196.57156372070312
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 44.6053999146273,
|
||||||
|
"pitch": -22.04468899658641,
|
||||||
|
"yaw": -30.908455971021343
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 267 KiB |
BIN
test/snapshots/snapshot_video0_1778407153025_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
test/snapshots/snapshot_video0_1778407171886.jpg
Normal file
|
After Width: | Height: | Size: 175 KiB |
17
test/snapshots/snapshot_video0_1778407171886_two_cam.csv
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
|
||||||
|
camera 0,158.04,-592.18,579.62,-128.975,1.364,-15.554
|
||||||
|
camera 1,388.46,-401.39,943.65,-158.006,8.598,7.755
|
||||||
|
0,390.69,-42.64,-58.10,0.765,1.049,1.109,1
|
||||||
|
198,385.31,-8.17,159.76,-28.970,2.390,1.497,2
|
||||||
|
200,312.76,-26.17,115.22,2.281,-0.327,3.654,3
|
||||||
|
204,311.88,127.59,120.99,0.516,2.065,2.400,3
|
||||||
|
208,523.91,-27.55,-70.87,4.376,1.392,3.328,1
|
||||||
|
210,-3.34,2.13,-3.99,91.337,14.104,14.036,3
|
||||||
|
211,199.97,0.04,-0.11,92.750,-3.786,-5.385,3
|
||||||
|
214,433.21,95.07,-93.91,1.294,-1.762,0.048,1
|
||||||
|
215,199.88,-89.83,-0.55,1.169,0.360,0.057,3
|
||||||
|
223,457.00,-220.65,160.56,32.192,-28.164,-16.125,3
|
||||||
|
226,477.70,-116.40,204.08,24.445,3.521,2.498,3
|
||||||
|
228,507.31,-218.59,145.95,39.614,50.980,31.819,2
|
||||||
|
229,388.41,-88.19,198.82,-28.626,1.389,1.347,2
|
||||||
|
243,385.41,-138.00,196.06,60.074,3.006,0.942,3
|
||||||
|
227
test/snapshots/snapshot_video0_1778407171886_two_cam.json
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"timestamp": "2026-05-10 09:59:32",
|
||||||
|
"reference_markers": [
|
||||||
|
210,
|
||||||
|
211,
|
||||||
|
215
|
||||||
|
],
|
||||||
|
"dict": "DICT_4X4_250",
|
||||||
|
"marker_size_mm": 25.0,
|
||||||
|
"rms_refs_px_cam1": 4.0379342194834145,
|
||||||
|
"rms_refs_px_cam2": 0.3525640978340953,
|
||||||
|
"description": "Two-camera joint optimization with triangulation"
|
||||||
|
},
|
||||||
|
"cameras": [
|
||||||
|
{
|
||||||
|
"id": "camera1",
|
||||||
|
"position_mm": [
|
||||||
|
158.03930225498664,
|
||||||
|
-592.180367667669,
|
||||||
|
579.6243862008779
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -128.9753618664107,
|
||||||
|
"pitch": 1.3642445786373374,
|
||||||
|
"yaw": -15.553542082518831
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "camera2",
|
||||||
|
"position_mm": [
|
||||||
|
388.4601350644073,
|
||||||
|
-401.3948487989071,
|
||||||
|
943.6529198481344
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -158.0062544707651,
|
||||||
|
"pitch": 8.597964890026196,
|
||||||
|
"yaw": 7.754523539624292
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"position_mm": [
|
||||||
|
390.6880896022262,
|
||||||
|
-42.64412449230426,
|
||||||
|
-58.0972316427476
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 0.7647269178228525,
|
||||||
|
"pitch": 1.049185198054671,
|
||||||
|
"yaw": 1.108848865155235
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 198,
|
||||||
|
"position_mm": [
|
||||||
|
385.3133827088088,
|
||||||
|
-8.171522799495012,
|
||||||
|
159.7637737468176
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -28.969920792916543,
|
||||||
|
"pitch": 2.39030770057407,
|
||||||
|
"yaw": 1.4968801274589405
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 200,
|
||||||
|
"position_mm": [
|
||||||
|
312.7627868652344,
|
||||||
|
-26.1728572845459,
|
||||||
|
115.22242736816406
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 2.2808890072502392,
|
||||||
|
"pitch": -0.3274094066131204,
|
||||||
|
"yaw": 3.6541782174556747
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 204,
|
||||||
|
"position_mm": [
|
||||||
|
311.876220703125,
|
||||||
|
127.58633422851562,
|
||||||
|
120.98774719238281
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 0.5158318086332035,
|
||||||
|
"pitch": 2.06453002657979,
|
||||||
|
"yaw": 2.400260110706478
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 208,
|
||||||
|
"position_mm": [
|
||||||
|
523.9084074808294,
|
||||||
|
-27.546175716282264,
|
||||||
|
-70.86775385107103
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 4.376126337936395,
|
||||||
|
"pitch": 1.3924940964670567,
|
||||||
|
"yaw": 3.328036024175951
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 210,
|
||||||
|
"position_mm": [
|
||||||
|
-3.338937520980835,
|
||||||
|
2.1271181106567383,
|
||||||
|
-3.9890851974487305
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 91.33725138238549,
|
||||||
|
"pitch": 14.104010525793678,
|
||||||
|
"yaw": 14.035641296225394
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 211,
|
||||||
|
"position_mm": [
|
||||||
|
199.96713256835938,
|
||||||
|
0.037796709686517715,
|
||||||
|
-0.10643231868743896
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 92.74967187358487,
|
||||||
|
"pitch": -3.786197853433813,
|
||||||
|
"yaw": -5.384933547204122
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 214,
|
||||||
|
"position_mm": [
|
||||||
|
433.21136641262757,
|
||||||
|
95.07263850323223,
|
||||||
|
-93.91074803910848
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 1.2942096661143863,
|
||||||
|
"pitch": -1.7616427894502695,
|
||||||
|
"yaw": 0.04798612599241947
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 215,
|
||||||
|
"position_mm": [
|
||||||
|
199.87725830078125,
|
||||||
|
-89.83390045166016,
|
||||||
|
-0.5476088523864746
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 1.1687892340044546,
|
||||||
|
"pitch": 0.35975660897382916,
|
||||||
|
"yaw": 0.05746662106150169
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 223,
|
||||||
|
"position_mm": [
|
||||||
|
457.0023193359375,
|
||||||
|
-220.65341186523438,
|
||||||
|
160.55662536621094
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 32.19215623582208,
|
||||||
|
"pitch": -28.163885080615586,
|
||||||
|
"yaw": -16.12513107176477
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 226,
|
||||||
|
"position_mm": [
|
||||||
|
477.6986999511719,
|
||||||
|
-116.39785766601562,
|
||||||
|
204.0816192626953
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 24.44540408786654,
|
||||||
|
"pitch": 3.5209180259894635,
|
||||||
|
"yaw": 2.498316767787566
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 228,
|
||||||
|
"position_mm": [
|
||||||
|
507.3054086247164,
|
||||||
|
-218.5947100755589,
|
||||||
|
145.95120715412878
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 39.61414520333383,
|
||||||
|
"pitch": 50.97993589341308,
|
||||||
|
"yaw": 31.81879176756129
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 229,
|
||||||
|
"position_mm": [
|
||||||
|
388.40604224907537,
|
||||||
|
-88.1935956561397,
|
||||||
|
198.81778665267646
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": -28.62629432681035,
|
||||||
|
"pitch": 1.3894110554484702,
|
||||||
|
"yaw": 1.3473468463901406
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 243,
|
||||||
|
"position_mm": [
|
||||||
|
385.4113464355469,
|
||||||
|
-137.99954223632812,
|
||||||
|
196.05523681640625
|
||||||
|
],
|
||||||
|
"orientation_deg": {
|
||||||
|
"roll": 60.07436472666781,
|
||||||
|
"pitch": 3.005858013729151,
|
||||||
|
"yaw": 0.9420958018669331
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 273 KiB |
BIN
test/snapshots/snapshot_video0_1778407171886_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
test/snapshots/snapshot_video1_1777957783463.jpg
Normal file
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 221 KiB |
BIN
test/snapshots/snapshot_video1_1777957783463_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
test/snapshots/snapshot_video1_1777958128576.jpg
Normal file
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 236 KiB |
BIN
test/snapshots/snapshot_video1_1777958128576_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
test/snapshots/snapshot_video1_1778054889025.jpg
Normal file
|
After Width: | Height: | Size: 145 KiB |
BIN
test/snapshots/snapshot_video1_1778406621349.jpg
Normal file
|
After Width: | Height: | Size: 153 KiB |
|
After Width: | Height: | Size: 233 KiB |
BIN
test/snapshots/snapshot_video1_1778406621349_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
test/snapshots/snapshot_video1_1778406635059.jpg
Normal file
|
After Width: | Height: | Size: 155 KiB |
|
After Width: | Height: | Size: 236 KiB |
BIN
test/snapshots/snapshot_video1_1778406635059_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
test/snapshots/snapshot_video1_1778407153025.jpg
Normal file
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 234 KiB |
BIN
test/snapshots/snapshot_video1_1778407171886.jpg
Normal file
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 235 KiB |
BIN
test/snapshots/snapshot_video1_1778407171886_two_cam_overlay.png
Normal file
|
After Width: | Height: | Size: 30 KiB |