X-Position

X-Position from Fotos. Kallibrierung
This commit is contained in:
chk
2026-05-10 13:31:39 +02:00
parent 6e8fabd230
commit 92b2a7b97b
54 changed files with 1934 additions and 59 deletions

View File

@@ -1,3 +1,3 @@
const { calculate } = require('./calculateAngles.js');
module.exports = { calculate };
const { calculate, optimizeRobot } = require('./calculateAngles.js');
module.exports = { calculate, optimizeRobot };

View File

@@ -4,24 +4,127 @@
* Browser + Server + Jest (CJS) kompatibel
*/
function calculateXPos(listIdAndX, jsonRobot){
const partsMovingFixedX = new Set(['Base', 'Arm1', 'Joint1']);
const markersMovingFixedX = jsonRobot.Marker.filter(m => partsMovingFixedX.has(m.on));
// Join: Robot-Marker ↔ Found-Marker
const markersListeWithRobotInfo = jsonRobot.Marker
.filter(m => partsMovingFixedX.has(m.on)) // nur relevante Teile
.map(m => {
const found = listIdAndX.get(m.id);
if (!found) return null;
return {
id: m.id,
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) {
// --- X of the Hand-Joint ---
const validOns = new Set(['Base', 'Arm1', 'Joint1']);
const foundById = new Map(foundMarkers.map(f => [f.id, f]));
const markersMovingFixedX = jsonRobot.Marker.filter(m => validOns.has(m.on));
const markersXPosition = new Map();
const foundById = new Map(foundMarkers.markers.map(f => [f.id, f.position_mm ]));
const { meanPx: x, stdDevPx: varx } = calculateXPos(foundById, jsonRobot);
const xs = markersMovingFixedX
.map(m => {
const f = foundById.get(m.id);
return f ? f.position[0] - m.relPos[0] : null;
})
.filter(x => x !== null);
const xAvg = xs.length
? xs.reduce((a, b) => a + b, 0) / xs.length
: 0;
const { meanY: y, stdDevY: vary } = calculateRotAngle(foundById, jsonRobot, "jointB");
return {
meta: {
@@ -34,10 +137,11 @@ function calculate(foundMarkers, jsonRobot) {
},
status: 'ok',
result: {
xAvg
x: x,
varx: varx
}
};
}
module.exports = { calculate };
module.exports = { calculate, optimizeRobot };

View File

@@ -2,7 +2,7 @@
"Elements":["Board","Base","Arm1","Joint1","Arm2","Finger1","Finger2"],
"Joints":{
"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"},
"jointD":{"name":"EllbowTwist","type":"revolute","axis":[0,1,0],"parent":"Joint1","child":"Arm2"}
},
@@ -15,13 +15,14 @@
{"id":214,"on":"Board","position":[0.40, 0.0, 0.0]},
{"id":215,"on":"Board","position":[0.20, -0.090, 0.0]},
{"id":200,"on":"Base","relPos":[-166, 6.5, 55]},
{"id":201,"on":"Base","relPos":[-190, 97.5, 74.5]},
{"id":200,"on":"Base","relPos":[-163.8, 6.5, 55], "relPosSource":["226_FotoAverage_5_2026",null,null]},
{"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":198,"on":"Arm1", "relPos":[-89.5,-160, 35]},
{"id":229,"on":"Arm1", "relPos":[-89.5,-250, 35]},
{"id":243,"on":"Arm1", "relPos":[-89.5,-285, 0]},
{"id":198,"on":"Arm1", "relPos":[-93.4,-160, 35], "relPosSource":["226_FotoAverage_5_2026",null,null]},
{"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":222,"on":"Joint1", "relPos":[0,0, -35]},
{"id":226,"on":"Joint1", "relPos":[0,0, 35]},

View File

@@ -2,38 +2,7 @@ const fs = require('fs');
const path = require('path');
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
@@ -41,11 +10,28 @@ function loadJSON(filePath) {
describe('calculateAngles.calculate', () => {
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 foundMarkers = loadMarkersFromCSV(markersPath);
const jsonRobot = loadJSON(robotPath);
const foundMarkers = JSON.parse(fs.readFileSync(markersPath, 'utf8'));
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);

View 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();
});
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

View 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
1 id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
2 camera 0,52.51,-848.87,600.02,-121.404,-2.306,-21.261
3 camera 1,353.00,-480.56,1185.56,-166.739,1.583,0.395
4 0,396.47,-42.96,-40.41,-0.938,-1.625,-1.286,1
5 178,434.70,-346.30,161.82,14.660,-9.061,127.657,3
6 179,410.47,-291.22,139.29,-4.164,55.412,-152.725,1
7 187,397.52,-341.22,141.15,-27.505,19.727,93.759,3
8 200,257.99,-24.24,118.95,-0.938,-0.465,2.088,3
9 204,258.36,127.36,126.23,131.455,-8.390,-19.321,3
10 205,805.33,-88.85,-1.77,-1.373,-0.755,-1.917,3
11 208,498.96,-80.59,-31.57,-3.711,0.412,1.079,2
12 210,-4.17,2.35,-2.53,-3.329,2.596,-0.816,3
13 211,200.91,-0.39,0.35,112.239,-7.122,-11.633,3
14 214,431.62,65.62,-47.50,114.928,-19.137,-29.993,1
15 215,199.30,-89.61,-0.57,-2.325,-0.729,-2.726,3
16 217,615.09,30.80,-73.14,-0.531,0.733,-1.364,2
17 226,420.76,-77.03,270.10,26.782,2.029,-0.030,3
18 228,400.09,-176.95,215.07,27.186,-28.754,-17.246,3
19 229,333.70,-35.80,258.29,-46.300,1.911,1.507,2
20 242,343.11,-34.31,190.43,135.274,0.085,-2.030,1
21 243,329.38,-87.08,265.66,42.490,1.111,-1.823,3

View 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
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View 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
1 id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
2 camera 0,256.17,-822.43,643.20,-123.532,-0.788,-9.098
3 camera 1,629.68,-270.32,1205.64,-171.411,10.923,11.668
4 0,385.87,-56.31,-33.55,100.596,-9.989,-12.304,1
5 178,494.28,-336.90,276.53,16.619,-4.277,132.262,3
6 179,425.50,-337.67,297.09,-14.032,53.897,-146.912,1
7 187,456.07,-335.85,259.58,-115.447,-36.884,-147.096,3
8 200,268.20,-14.01,117.32,-3.139,0.850,3.172,1
9 204,272.97,143.23,115.44,-2.727,3.637,0.923,3
10 205,804.71,-90.62,-1.30,-1.466,1.393,-0.486,3
11 207,799.64,-5.60,0.22,-2.190,2.670,2.302,3
12 208,499.89,-82.94,-54.66,29.194,-1.655,0.389,2
13 210,-31.34,6.71,-22.45,36.767,44.126,13.395,2
14 211,199.74,0.05,-0.18,107.619,3.693,4.245,3
15 214,409.79,26.15,-22.96,-3.559,0.080,-0.908,1
16 215,199.60,-89.94,-0.50,-2.825,0.115,0.368,3
17 217,604.05,19.26,-100.39,-10.000,4.687,0.680,2
18 226,461.88,-22.14,258.77,137.748,-9.547,-25.264,3
19 228,471.30,-140.24,256.77,-9.794,-8.559,3.734,2
20 229,383.65,-6.45,251.30,-52.687,10.507,3.203,2
21 243,366.01,-50.21,251.71,41.338,1.927,-0.577,3

View 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
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View 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
1 id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
2 camera 0,147.42,-751.09,594.62,-121.791,-0.822,-16.558
3 camera 1,393.29,-388.36,1179.31,-166.014,1.894,3.112
4 0,372.49,-94.59,0.47,-1.368,-0.236,-0.161,3
5 178,456.12,-359.81,245.47,50.538,-32.792,83.890,1
6 179,435.62,-348.24,284.44,-52.619,25.235,147.081,3
7 187,404.37,-362.35,274.95,13.506,10.207,73.990,3
8 200,280.33,-27.04,118.17,-0.012,-0.778,3.812,3
9 204,278.61,125.53,123.01,126.488,-7.084,-15.783,3
10 208,518.66,-28.70,-54.78,105.248,-29.214,-36.129,1
11 210,-4.16,1.46,-2.90,-0.317,2.970,-0.772,3
12 211,199.76,0.13,-0.34,-3.856,1.306,-0.502,3
13 214,426.36,88.57,-71.53,0.908,-0.975,-0.593,1
14 215,199.65,-89.81,-0.78,-1.530,-0.638,-0.883,3
15 217,612.39,25.75,-81.35,-1.901,-0.742,-2.150,2
16 223,432.78,-177.96,275.89,-2.274,-14.074,0.887,3
17 226,442.85,-63.87,268.88,-4.845,2.287,0.660,3
18 229,357.96,-53.35,287.65,-47.898,1.975,2.923,2
19 243,353.42,-92.26,263.01,44.821,2.132,0.166,3

View 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
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

View 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
1 id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
2 camera 0,264.84,-448.46,516.54,-140.171,-1.865,2.388
3 camera 1,389.91,-409.85,935.42,-157.399,8.669,7.846
4 198,379.47,-47.52,91.56,1.884,2.172,1.413,3
5 200,310.61,-28.22,116.65,2.481,-1.302,2.910,3
6 204,309.61,123.65,124.82,0.922,1.511,1.327,3
7 210,-1.38,-0.36,0.53,2.268,0.168,0.630,3
8 211,200.01,-0.03,0.03,1.212,0.080,1.086,3
9 215,200.00,-90.02,0.01,0.329,0.082,1.119,3
10 223,461.70,-239.97,68.70,-6.283,-26.057,3.143,2
11 226,473.32,-128.20,82.36,-7.045,3.550,2.138,3
12 229,382.10,-138.78,91.38,2.122,1.637,1.333,3
13 243,384.75,-153.93,31.47,92.284,1.185,1.570,1

View 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
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View 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
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

View 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
1 id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
2 camera 0,158.36,-593.39,578.95,-128.888,1.436,-15.566
3 camera 1,387.25,-391.56,947.37,-158.603,8.621,7.638
4 0,390.64,-42.76,-57.96,0.869,1.093,1.096,1
5 198,334.11,-6.38,159.48,-30.514,0.703,2.172,2
6 200,263.51,-25.92,115.97,1.396,0.003,3.587,3
7 204,262.09,125.71,123.56,-1.138,2.084,1.523,3
8 208,499.27,-81.15,-32.64,36.786,-9.918,-1.006,2
9 210,-3.29,2.01,-3.86,-0.284,2.089,0.732,3
10 211,199.97,0.04,-0.10,-0.360,0.282,-0.331,3
11 214,416.92,55.17,-54.53,2.603,-0.313,0.497,1
12 215,199.88,-89.84,-0.54,1.273,0.406,0.044,3
13 217,642.91,84.41,-81.51,3.494,2.015,-0.760,1
14 223,407.39,-219.71,161.30,24.607,-26.107,-13.137,3
15 226,427.44,-115.61,205.02,22.093,3.594,0.933,3
16 229,336.88,-83.96,194.87,-29.693,0.904,1.026,2
17 243,336.42,-136.74,196.57,44.605,-22.045,-30.908,3

View 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
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

View 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
1 id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg,seen_by
2 camera 0,158.04,-592.18,579.62,-128.975,1.364,-15.554
3 camera 1,388.46,-401.39,943.65,-158.006,8.598,7.755
4 0,390.69,-42.64,-58.10,0.765,1.049,1.109,1
5 198,385.31,-8.17,159.76,-28.970,2.390,1.497,2
6 200,312.76,-26.17,115.22,2.281,-0.327,3.654,3
7 204,311.88,127.59,120.99,0.516,2.065,2.400,3
8 208,523.91,-27.55,-70.87,4.376,1.392,3.328,1
9 210,-3.34,2.13,-3.99,91.337,14.104,14.036,3
10 211,199.97,0.04,-0.11,92.750,-3.786,-5.385,3
11 214,433.21,95.07,-93.91,1.294,-1.762,0.048,1
12 215,199.88,-89.83,-0.55,1.169,0.360,0.057,3
13 223,457.00,-220.65,160.56,32.192,-28.164,-16.125,3
14 226,477.70,-116.40,204.08,24.445,3.521,2.498,3
15 228,507.31,-218.59,145.95,39.614,50.980,31.819,2
16 229,388.41,-88.19,198.82,-28.626,1.389,1.347,2
17 243,385.41,-138.00,196.06,60.074,3.006,0.942,3

View 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
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB