copy of main files to this folder
110
appVideoServer/public/GamePad.js
Normal file
@@ -0,0 +1,110 @@
|
||||
var isRunning = false;
|
||||
var gamePadId = 0;
|
||||
var gamepad = {};
|
||||
|
||||
let lastCheckTime = 0;
|
||||
|
||||
|
||||
|
||||
function checkGamePad() {
|
||||
if(isRunning == false){return;}
|
||||
|
||||
const stepSize = "0.01";
|
||||
const stepSizeXYZ = "0.5"; // 3 ist auch ok
|
||||
const stepSizeE = "0.01";
|
||||
var gp = navigator.getGamepads()[gamePadId]
|
||||
var buttons = gp.buttons
|
||||
|
||||
var xyzSpeed = 10; // 100 geht auch
|
||||
|
||||
var psi = gp.axes[0];
|
||||
var z = gp.axes[1];
|
||||
var x = gp.axes[2];
|
||||
var y = gp.axes[3];
|
||||
|
||||
|
||||
// Dreieck zum Dreieck-Setzen
|
||||
if (buttons[3].pressed) {
|
||||
socketDriver.send(`G90 G1 X0 Y300 Z0 A${Math.PI/2} B${-1.0*Math.PI/2} C0 F${xyzSpeed}`);
|
||||
}
|
||||
if (buttons[4].pressed) {
|
||||
//console.log("x=" + robot.x + " y=" + robot.y + " z=" + robot.z);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// X Button setzt eine Marke
|
||||
if(buttons[0].pressed && (Date.now() - lastCheckTime > 500)){
|
||||
lastCheckTime = Date.now()
|
||||
console.log('FPoint!');
|
||||
socketDriver.send('FPoint');
|
||||
socketDriver.send('FShow');
|
||||
}
|
||||
|
||||
// L1 und R1 Button to forward-backward in Point-List
|
||||
if(gp.buttons[4].pressed && (Date.now() - lastCheckTime > 500)){
|
||||
lastCheckTime = Date.now()
|
||||
socketDriver.send('FMinus');
|
||||
socketDriver.send('FShow');
|
||||
}
|
||||
if(gp.buttons[5].pressed && (Date.now() - lastCheckTime > 500)){
|
||||
lastCheckTime = Date.now()
|
||||
socketDriver.send('FPlus');
|
||||
socketDriver.send('FShow');
|
||||
}
|
||||
|
||||
if (x < -0.2) { socketDriver.send(`G91 G1 X+${stepSizeXYZ} F${xyzSpeed}`);}
|
||||
if (x > 0.2) { socketDriver.send(`G91 G1 X-${stepSizeXYZ} F${xyzSpeed}`);}
|
||||
|
||||
if (y < -0.2) { socketDriver.send(`G91 G1 Y${stepSizeXYZ} F${xyzSpeed}`); }
|
||||
if (y > 0.2) { socketDriver.send(`G91 G1 Y-${stepSizeXYZ} F${xyzSpeed}`);}
|
||||
|
||||
if (z < -0.2) { socketDriver.send(`G91 G1 Z${stepSizeXYZ} F${xyzSpeed}`); }
|
||||
if (z > 0.2) { socketDriver.send(`G91 G1 Z-${stepSizeXYZ} F${xyzSpeed}`); }
|
||||
|
||||
|
||||
// Greif-Richtung
|
||||
// LeftRight
|
||||
if(buttons[14].pressed){ socketDriver.send(`G91 G1 A${stepSize} F${xyzSpeed}`);}
|
||||
if(buttons[15].pressed){ socketDriver.send(`G91 G1 A-${stepSize} F${xyzSpeed}`);}
|
||||
// Up - Down
|
||||
if(buttons[12].pressed){ socketDriver.send(`G91 G1 B${stepSize} F${xyzSpeed}`);}
|
||||
if(buttons[13].pressed){ socketDriver.send(`G91 G1 B-${stepSize} F${xyzSpeed}`);}
|
||||
// Drehung
|
||||
if (psi < -0.2) { socketDriver.send(`G91 G1 C${stepSize} F${xyzSpeed}`); }
|
||||
if (psi > 0.2) { socketDriver.send(`G91 G1 C-${stepSize} F${xyzSpeed}`); }
|
||||
|
||||
// Trigger-Buttons für Öffnen und Schliessen
|
||||
if(buttons[6].pressed){socketDriver.send(`G91 G1 E-${stepSizeE} F${xyzSpeed}`);}
|
||||
if(buttons[7].pressed){socketDriver.send(`G91 G1 E${stepSizeE} F${xyzSpeed}`);}
|
||||
|
||||
if (isRunning) { setTimeout(checkGamePad, 15);}
|
||||
}
|
||||
|
||||
function gamepadHandler(event, connecting) {
|
||||
|
||||
gamepad = event.gamepad;
|
||||
if (typeof gamepad === `undefined`) {
|
||||
isRunning = false;
|
||||
gamePadId = 0;
|
||||
console.warn("GamePad kann nicht gefunden werden");
|
||||
return;
|
||||
}
|
||||
|
||||
if (connecting) {
|
||||
console.log("GamePad " + event.gamepad.index + " connected");
|
||||
gamePadId = gamepad.index;
|
||||
isRunning = true;
|
||||
setTimeout(checkGamePad, 20);
|
||||
} else {
|
||||
console.log("GamePad " +gamePadId +" disconnected");
|
||||
isRunning = false;
|
||||
gamePadId = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener("gamepadconnected", function (e) { gamepadHandler(e, true); }, false);
|
||||
window.addEventListener("gamepaddisconnected", function (e) { gamepadHandler(e, false); }, false);
|
||||
|
||||
document.addEventListener("touchstart", e => { console.log("TouchStart"); })
|
||||
64
appVideoServer/public/KeyboardInput.js
Normal file
@@ -0,0 +1,64 @@
|
||||
document.onkeydown = checkKey;
|
||||
|
||||
function checkKey(e) {
|
||||
|
||||
e = e || window.event;
|
||||
|
||||
if(e.key == 'a' || e.key == 'A')
|
||||
{
|
||||
console.log("back to A position");
|
||||
socketDriver.send(`G90 G1 X0 Y300 Z0 A${Math.PI/2} B-${Math.PI/2} C0 F100`);
|
||||
}
|
||||
|
||||
// Hand-Winkel (Eulerwinkel)
|
||||
else if(e.key == 'i' || e.key == 'I'){
|
||||
socketDriver.send('G91 G1 B+0.1 F100');
|
||||
}
|
||||
else if(e.key == 'k' || e.key == 'K'){
|
||||
socketDriver.send('G91 G1 B-0.1 F100');
|
||||
}
|
||||
else if(e.key == 'l' || e.key == 'L'){
|
||||
socketDriver.send('G91 G1 A+0.1 F100');
|
||||
}
|
||||
else if(e.key == 'j' || e.key == 'J'){
|
||||
socketDriver.send('G91 G1 A-0.1 F100');
|
||||
}
|
||||
else if(e.key == 'o' || e.key == 'O'){
|
||||
socketDriver.send('G91 G1 C+0.1 F100');
|
||||
}
|
||||
else if(e.key == 'u' || e.key == 'U'){
|
||||
socketDriver.send('G91 G1 C-0.1 F100');
|
||||
}
|
||||
|
||||
// XYZ Koordinaten
|
||||
else if(e.key == 'e' || e.key == 'E'){
|
||||
socketDriver.send('G91 G1 Z+5 F100');
|
||||
}
|
||||
else if(e.key == 'd' || e.key == 'D'){
|
||||
socketDriver.send('G91 G1 Z-5 F100');
|
||||
}
|
||||
else if(e.key == 's' || e.key == 'S'){
|
||||
socketDriver.send('G91 G1 X5 F100');
|
||||
}
|
||||
else if(e.key == 'f' || e.key == 'S'){
|
||||
socketDriver.send('G91 G1 X-5 F100');
|
||||
}
|
||||
else if(e.key == 'r' || e.key == 'R'){
|
||||
socketDriver.send('G91 G1 Y5 F100');
|
||||
}
|
||||
else if(e.key == 'w' || e.key == 'W'){
|
||||
socketDriver.send('G91 G1 Y-5 F100');
|
||||
}
|
||||
|
||||
// File & Log-Operations
|
||||
else if(e.key == ' '){
|
||||
console.log('FPoint!')
|
||||
socketDriver.send('FPoint');
|
||||
}
|
||||
else if(e.key == 'b'){
|
||||
socketDriver.send('FMinus');
|
||||
}
|
||||
else if(e.key == 'n'){
|
||||
socketDriver.send('FPlus');
|
||||
}
|
||||
}
|
||||
25
appVideoServer/public/WebSocket.js
Normal file
@@ -0,0 +1,25 @@
|
||||
const protocolS = location.protocol === "https:" ? "wss://" : "ws://";
|
||||
const robotURL = protocolS + location.host + "/ws/robot";
|
||||
console.log("socketDriver try to connect to "+ robotURL);
|
||||
|
||||
const socketDriver = new WebSocket(robotURL);
|
||||
|
||||
|
||||
|
||||
socketDriver.onopen = () => { console.log("socketDriver WebSocket connected"); };
|
||||
|
||||
socketDriver.onmessage = (event) => {
|
||||
if(event.data.toString().includes("position")){
|
||||
console.log("Position: " + event.data);
|
||||
}
|
||||
else if(event.data.toString().includes("XYZ__FShow__XYZ")){
|
||||
const content = event.data.toString().split("XYZ__FShow__XYZ")[1];
|
||||
document.querySelectorAll("textarea#GCodeWindow.editor-look")[0].value = content;
|
||||
}
|
||||
else{
|
||||
console.log('DATA SinceStartup: ' + (Date.now() - startTime).toString() +': ', event.data);
|
||||
}
|
||||
}
|
||||
|
||||
socketDriver.onclose = () => {console.log("socketDriver WebSocket is closing");};
|
||||
socketDriver.onerror = (err) => { console.error("socketDriver socket error:", err); };
|
||||
72
appVideoServer/public/app.js
Normal file
@@ -0,0 +1,72 @@
|
||||
// /public/app.js
|
||||
// Small bootstrap moved out of index.html to satisfy CSP (`script-src 'self'`).
|
||||
(function () {
|
||||
const isSecure = location.protocol === 'https:';
|
||||
const wsProto = isSecure ? 'wss' : 'ws';
|
||||
const base = `${wsProto}://${location.host}`;
|
||||
|
||||
// Camera 0 with control channel
|
||||
window.VideoService.attachStream({
|
||||
url: `${base}/ws/video0`,
|
||||
canvas: document.getElementById('canvas0'),
|
||||
statusEl: document.getElementById('status0'),
|
||||
control: {
|
||||
resSelect: document.getElementById('res0'),
|
||||
fpsSelect: document.getElementById('fps0'),
|
||||
qSelect: document.getElementById('q0'),
|
||||
applyBtn: document.getElementById('apply0'),
|
||||
snapshotBtn: document.getElementById('snap0'),
|
||||
startBtn: document.getElementById('start0'),
|
||||
stopBtn: document.getElementById('stop0'),
|
||||
snapshotOutEl: document.getElementById('snapshotLink'),
|
||||
}
|
||||
});
|
||||
|
||||
// Camera 1 (no control)
|
||||
window.VideoService.attachStream({
|
||||
url: `${base}/ws/video1`,
|
||||
canvas: document.getElementById('canvas1'),
|
||||
statusEl: document.getElementById('status1'),
|
||||
});
|
||||
|
||||
// Run an automatic snapshot shortly after the page loads so the client
|
||||
// receives the freshest annotated image/CSV on startup. This uses a
|
||||
// synthetic click on the snapshot button; the handler will no-op if the
|
||||
// WebSocket isn't open yet.
|
||||
setTimeout(() => {
|
||||
const snapBtn = document.getElementById('snap0');
|
||||
if (snapBtn) snapBtn.click();
|
||||
}, 200);
|
||||
|
||||
// Attach handlers for the Point/Up/Down buttons (no inline JS, CSP-safe)
|
||||
const btnPoint = document.getElementById('btnPoint');
|
||||
const btnDown = document.getElementById('btnDown');
|
||||
const btnUp = document.getElementById('btnUp');
|
||||
if (btnPoint) btnPoint.addEventListener('click', () => {
|
||||
console.log('FPoint!');
|
||||
try { socketDriver.send('FPoint'); socketDriver.send('FShow'); } catch (e) { console.error(e); }
|
||||
});
|
||||
if (btnDown) btnDown.addEventListener('click', () => {
|
||||
console.log('FPlus');
|
||||
try { socketDriver.send('FPlus'); socketDriver.send('FShow'); } catch (e) { console.error(e); }
|
||||
});
|
||||
if (btnUp) btnUp.addEventListener('click', () => {
|
||||
console.log('FMinus');
|
||||
try { socketDriver.send('FMinus'); socketDriver.send('FShow'); } catch (e) { console.error(e); }
|
||||
});
|
||||
|
||||
// Other buttons that were previously using inline onclicks.
|
||||
const btnInfo = document.getElementById('b_M114');
|
||||
const btnNull = document.getElementById('b_G28');
|
||||
const btnListFile = document.getElementById('btnListFile');
|
||||
const btnSendGCode = document.getElementById('btnSendGCode');
|
||||
if (btnInfo) btnInfo.addEventListener('click', () => { try { socketDriver.send('M114'); } catch (e) { console.error(e); } });
|
||||
if (btnNull) btnNull.addEventListener('click', () => { try { socketDriver.send('G28'); } catch (e) { console.error(e); } });
|
||||
if (btnListFile) btnListFile.addEventListener('click', () => { try { socketDriver.send('FShow'); } catch (e) { console.error(e); } });
|
||||
if (btnSendGCode) btnSendGCode.addEventListener('click', () => {
|
||||
try {
|
||||
const input = document.getElementById('GKarth');
|
||||
if (input && input.value) socketDriver.send(input.value);
|
||||
} catch (e) { console.error(e); }
|
||||
});
|
||||
})();
|
||||
23
appVideoServer/public/buttonCmd.js
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
|
||||
document.getElementById("b_uparrow").addEventListener('click',() => { socketDriver.send(`G91 G1 Z10 F100`);});
|
||||
document.getElementById("b_downarw").addEventListener('click',() => { socketDriver.send(`G90 G1 Z-10 F100`);});
|
||||
document.getElementById("b_right").addEventListener('click',() => { socketDriver.send(`G90 G1 X10 F100`);});
|
||||
document.getElementById("b_left").addEventListener('click',() => { socketDriver.send(`G90 G1 X-10 F100`);});
|
||||
document.getElementById("b_forward").addEventListener('click',() => { socketDriver.send(`G90 G1 Y10 F100`);});
|
||||
document.getElementById("b_backward").addEventListener('click',() => { socketDriver.send(`G90 G1 Y-10 F100`);});
|
||||
|
||||
document.getElementById("b_aPlus").addEventListener('click',() => { socketDriver.send(`G91 G1 A0.10 F100`);});
|
||||
document.getElementById("b_aMinus").addEventListener('click',() => { socketDriver.send(`G91 G1 A-0.10 F100`);});
|
||||
document.getElementById("b_bPlus").addEventListener('click',() => { socketDriver.send(`G91 G1 B0.10 F100`);});
|
||||
document.getElementById("b_bMinus").addEventListener('click',() => { socketDriver.send(`G91 G1 B-0.10 F100`);});
|
||||
document.getElementById("b_cPlus").addEventListener('click',() => { socketDriver.send(`G91 G1 C0.10 F100`);});
|
||||
document.getElementById("b_cMinus").addEventListener('click',() => { socketDriver.send(`G91 G1 C-0.10 F100`);});
|
||||
|
||||
document.getElementById("b_ePlus").addEventListener('click',() => { socketDriver.send(`G91 G1 E0.10 F100`);});
|
||||
document.getElementById("b_eMinus").addEventListener('click',() => { socketDriver.send(`G91 G1 E-0.10 F100`);});
|
||||
|
||||
|
||||
document.getElementById("b_default").addEventListener('click',() => { socketDriver.send(`G90 G1 X0 Y300 Z0 A${Math.PI/2} B-${Math.PI/2} C0 F100`);});
|
||||
document.getElementById("b_G28").addEventListener('click',() => { socketDriver.send(`G28`);});
|
||||
document.getElementById("b_M114").addEventListener('click',() => { socketDriver.send(`M114`);});
|
||||
108
appVideoServer/public/index.html
Normal file
@@ -0,0 +1,108 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Dual Camera Stream (HTTPS + WSS)</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<script src="WebSocket.js" defer></script>
|
||||
<script src="buttonCmd.js" defer></script>
|
||||
<script src="GamePad.js" defer></script>
|
||||
<script src="KeyboardInput.js" defer></script>
|
||||
<link rel="stylesheet" href="indexA.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Robot Control</h1>
|
||||
|
||||
<div class="grid">
|
||||
<!-- Camera 0 -->
|
||||
<section class="panel">
|
||||
<h2>Camera 0</h2>
|
||||
|
||||
|
||||
<div class="video-wrap">
|
||||
<canvas id="canvas0" width="1280" height="720"></canvas>
|
||||
<img id="overlayImg"
|
||||
src="/snapshots/snapshot_video0_1765356085372_two_cam_overlay.png">
|
||||
</div>
|
||||
<div id="status0" class="status">Connecting…</div>
|
||||
</section>
|
||||
|
||||
<!-- Camera 1 -->
|
||||
<section class="panel">
|
||||
<h2>Camera 1</h2>
|
||||
<div class="video-wrap">
|
||||
<canvas id="canvas1" width="1280" height="720"></canvas>
|
||||
</div>
|
||||
<div id="status1" class="status">Connecting…</div>
|
||||
</section>
|
||||
|
||||
<section class="panel">
|
||||
<div class="controls">
|
||||
|
||||
|
||||
<div style="display:flex; gap:0.5rem; align-items:end;">
|
||||
<button id="snap0">Snapshot</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="snapshotLink" class="status"></div>
|
||||
<div id="csvTable" class="status"></div>
|
||||
|
||||
</section>
|
||||
|
||||
<section class="panel">
|
||||
|
||||
<div id="divButtons">
|
||||
<h3>Controls</h3>
|
||||
<button id="b_uparrow">Up</button>
|
||||
<button id="b_downarw">Down</button>
|
||||
</br/>
|
||||
<button id="b_right">Right</button>
|
||||
<button id="b_left">Left</button>
|
||||
<br/>
|
||||
<button id="b_forward">Forward</button>
|
||||
<button id="b_backward">Backward</button>
|
||||
<br/>
|
||||
<button id="b_M114">Info</button>
|
||||
<button id="b_G28">Null</button>
|
||||
<button id="b_default">△ Default</button>
|
||||
<br/>
|
||||
<br/>
|
||||
<button id="b_aPlus" >a+</button>
|
||||
<button id="b_aMinus">a-</button>
|
||||
<br/>
|
||||
<button id="b_bPlus" >B+</button>
|
||||
<button id="b_bMinus">B-</button>
|
||||
<br/>
|
||||
<button id="b_cPlus" >C+</button>
|
||||
<button id="b_cMinus">C-</button>
|
||||
|
||||
<br/>
|
||||
<button id="b_ePlus" >E+</button>
|
||||
<button id="b_eMinus">E-</button>
|
||||
</div>
|
||||
<div id="divGCodeWindow">
|
||||
<div id="GCode">
|
||||
<form onsubmit="return false;"><input id="GKarth"/><button id="btnSendGCode" type="button">Send GCode</button></form>
|
||||
<br/>
|
||||
</div>
|
||||
|
||||
<button id="btnListFile" type="button">ListFile</button>
|
||||
<br/>
|
||||
<textarea id="GCodeWindow" class="editor-look" readonly>
|
||||
|
||||
</textarea>
|
||||
<br/>
|
||||
<button id="btnPoint">🗙 Point</button>
|
||||
<button id="btnDown">⇩</button>
|
||||
<button id="btnUp">⇧</button>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- External scripts only (CSP-safe, no inline JS) -->
|
||||
<script src="/readCSV.js" defer></script>
|
||||
<script src="/videoService.js" defer></script>
|
||||
<script src="/app.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
203
appVideoServer/public/indexA.css
Normal file
@@ -0,0 +1,203 @@
|
||||
:root { color-scheme: dark light; }
|
||||
/* Overlay opacity is configurable here. Set to 1 to let PNG alpha be authoritative */
|
||||
:root {
|
||||
--overlay-opacity: 1; /* default overlay alpha applied client-side */
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
|
||||
margin: 0;
|
||||
padding: 1rem;
|
||||
background: #0b1020;
|
||||
color: #e7eaf6;
|
||||
|
||||
}
|
||||
|
||||
h1, h2 {
|
||||
margin: 0.5rem 0 0.25rem;
|
||||
}
|
||||
|
||||
.grid {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
/*
|
||||
grid-auto-flow: column;
|
||||
grid-auto-columns: 1280px;
|
||||
justify-content: start;
|
||||
*/
|
||||
grid-template-columns: repeat(auto-fit, minmax(1280px, 1fr));
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.panel {
|
||||
background: #141b34;
|
||||
border: 1px solid #242c4f;
|
||||
border-radius: 12px;
|
||||
padding: 1rem;
|
||||
box-shadow: 0 10px 24px rgba(0,0,0,0.25);
|
||||
}
|
||||
|
||||
.video-wrap {
|
||||
position: relative;
|
||||
background: #000;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
/* Keep a 16:9 box that doesn't stretch beyond the source resolution */
|
||||
width: 100%;
|
||||
max-width: 1280px;
|
||||
aspect-ratio: 16 / 9;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* Ensure canvas and overlay are sized identically and keep the same aspect ratio
|
||||
so overlays align correctly when the window is resized. */
|
||||
.video-wrap canvas,
|
||||
.video-wrap img,
|
||||
#overlayImg {
|
||||
position: absolute;
|
||||
inset: 0; /* top:0; right:0; bottom:0; left:0 */
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
/* Use `contain` so both layers scale uniformly and show letterboxing instead
|
||||
of stretching or cropping when the container size differs from the image. */
|
||||
object-fit: contain;
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.video-wrap canvas {
|
||||
z-index: 1;
|
||||
}
|
||||
.video-wrap img,
|
||||
#overlayImg {
|
||||
z-index: 2;
|
||||
pointer-events: none; /* don't block interactions with the canvas */
|
||||
opacity: var(--overlay-opacity);
|
||||
}
|
||||
|
||||
.status {
|
||||
font-size: 0.9rem;
|
||||
opacity: 0.85;
|
||||
margin: 0.5rem 0 0;
|
||||
}
|
||||
|
||||
.controls {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
||||
gap: 0.5rem;
|
||||
margin-top: 0.75rem;
|
||||
}
|
||||
|
||||
.controls label {
|
||||
display: grid;
|
||||
gap: 0.25rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
select, input, button {
|
||||
padding: 0.5rem 0.6rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid #2d3766;
|
||||
background: #0d1530;
|
||||
color: #e7eaf6;
|
||||
}
|
||||
|
||||
button.primary {
|
||||
background: #355dff;
|
||||
border-color: #355dff;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #9eb8ff;
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 1.25rem;
|
||||
opacity: 0.7;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.muted {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
|
||||
/* Ensure overlay uses contain and respects alpha channel from the PNG
|
||||
(the PNG's transparency is the authoritative source of which pixels
|
||||
are transparent; CSS opacity only adjusts global alpha). */
|
||||
#overlayImg {
|
||||
position: absolute;
|
||||
inset: 0; /* shorthand for top:0; right:0; bottom:0; left:0; */
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
opacity: var(--overlay-opacity);
|
||||
object-fit: contain; /* preserve aspect ratio and don't distort */
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* CSV table styles */
|
||||
.csv-table {
|
||||
width: 440px; /* 4 columns * 200px each */
|
||||
border-collapse: collapse;
|
||||
margin-top: 0.5rem;
|
||||
table-layout: fixed; /* use fixed layout so column widths are respected */
|
||||
}
|
||||
.csv-table th, .csv-table td {
|
||||
border: 1px solid rgba(255,255,255,0.06);
|
||||
padding: 0.35rem 0.5rem;
|
||||
text-align: center;
|
||||
font-size: 0.9rem;
|
||||
width: 110px; /* fixed column width */
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.csv-table th {
|
||||
background: rgba(255,255,255,0.02);
|
||||
font-weight: 600;
|
||||
}
|
||||
.csv-table tr:nth-child(even) td {
|
||||
background: rgba(255,255,255,0.01);
|
||||
}
|
||||
|
||||
/* Right-align CSV numeric data and use tabular digits for stable column alignment */
|
||||
.csv-table td { text-align: right; font-variant-numeric: tabular-nums; }
|
||||
|
||||
#GCodeWindow {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
/* Layout: place the buttons and GCode window side-by-side in their panel.
|
||||
- `#divButtons` gets a fixed ~300px width
|
||||
- `#divGCodeWindow` uses the remaining width
|
||||
- On small screens they stack vertically for usability */
|
||||
/* Use floats for a predictable two-column layout inside the panel. */
|
||||
#divButtons {
|
||||
float: left;
|
||||
width: 300px;
|
||||
box-sizing: border-box;
|
||||
margin-right: 1rem;
|
||||
}
|
||||
#divGCodeWindow {
|
||||
display: block;
|
||||
margin-left: 320px; /* 300px left column + 1rem gap */
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* Clear floats inside panels so subsequent content flows correctly */
|
||||
.panel::after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
#divButtons, #divGCodeWindow {
|
||||
display: block;
|
||||
float: none;
|
||||
width: 100%;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
76
appVideoServer/public/readCSV.js
Normal file
@@ -0,0 +1,76 @@
|
||||
// public/readCSV.js
|
||||
// Fetch a CSV file and render a small table into the given container.
|
||||
// Usage: window.readCSV.renderCSV(containerOrId, csvUrl)
|
||||
|
||||
(function () {
|
||||
async function renderCSV(container, csvUrl) {
|
||||
console.log("readCSV should start");
|
||||
console.log('readCSV.renderCSV', container, csvUrl);
|
||||
|
||||
const el = (typeof container === 'string') ? document.getElementById(container) : container;
|
||||
if (!el) return;
|
||||
if (!csvUrl) {
|
||||
el.innerHTML = '<em>No CSV URL provided</em>';
|
||||
return;
|
||||
}
|
||||
el.innerHTML = 'Loading CSV…';
|
||||
try {
|
||||
const res = await fetch(csvUrl, { cache: 'no-store' });
|
||||
if (!res.ok) {
|
||||
el.innerHTML = `<em>CSV not found (HTTP ${res.status})</em>`;
|
||||
return;
|
||||
}
|
||||
const text = await res.text();
|
||||
const lines = text.trim().split(/\r?\n/).filter(Boolean);
|
||||
if (!lines.length) {
|
||||
el.innerHTML = '<em>CSV is empty</em>';
|
||||
return;
|
||||
}
|
||||
const headers = lines[0].split(',').map(h => h.trim());
|
||||
// Look for id,x,y,z columns (case-insensitive)
|
||||
const lower = headers.map(h => h.toLowerCase());
|
||||
const ids = {
|
||||
id: lower.indexOf('id'),
|
||||
x: lower.indexOf('x_mm'),
|
||||
y: lower.indexOf('y_mm'),
|
||||
z: lower.indexOf('z_mm')
|
||||
};
|
||||
// If any of these are missing, show a helpful message
|
||||
if (ids.id === -1 || ids.x === -1 || ids.y === -1 || ids.z === -1) {
|
||||
el.innerHTML = `<em>CSV does not contain required columns: id, x, y, z</em> ${csvUrl}`;
|
||||
return;
|
||||
}
|
||||
|
||||
// Build table
|
||||
const table = document.createElement('table');
|
||||
table.className = 'csv-table';
|
||||
const thead = table.createTHead();
|
||||
const thr = thead.insertRow();
|
||||
['id', 'x [mm]', 'y [mm]', 'z [mm]'].forEach(h => {
|
||||
const th = document.createElement('th');
|
||||
th.textContent = h;
|
||||
thr.appendChild(th);
|
||||
});
|
||||
const tbody = table.createTBody();
|
||||
|
||||
for (let i = 1; i < lines.length; i++) {
|
||||
const row = lines[i].split(',').map(c => c.trim());
|
||||
// Skip if row doesn't have enough columns
|
||||
if (row.length < headers.length) continue;
|
||||
const tr = tbody.insertRow();
|
||||
['id', 'x', 'y', 'z'].forEach(k => {
|
||||
const td = tr.insertCell();
|
||||
td.textContent = row[ids[k]] ?? '';
|
||||
});
|
||||
}
|
||||
|
||||
el.innerHTML = ''; // clear
|
||||
el.appendChild(table);
|
||||
} catch (err) {
|
||||
console.error('readCSV error', err);
|
||||
el.innerHTML = `<em>Error loading CSV</em>`;
|
||||
}
|
||||
}
|
||||
|
||||
window.readCSV = { renderCSV };
|
||||
})();
|
||||
|
After Width: | Height: | Size: 93 KiB |
@@ -0,0 +1,9 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,461.226,163.150,208.814,-115.601,2.852,108.987
|
||||
camera2,368.003,-324.025,849.279,-147.633,-3.697,60.975
|
||||
20,-27.787,-370.901,-104.452,-0.238,-4.375,143.811
|
||||
25,-67.077,-165.677,-12.623,-2.256,0.110,87.366
|
||||
50,0.002,-0.008,-0.007,-0.557,-0.254,0.228
|
||||
71,140.418,0.009,0.093,0.905,-2.137,1.508
|
||||
76,-204.436,-90.385,-94.522,-52.679,39.273,-87.214
|
||||
101,0.016,-80.028,-0.025,1.056,-2.213,0.260
|
||||
|
@@ -0,0 +1,123 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:29:14",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 0.01816248951344627,
|
||||
"rms_refs_px_cam2": 0.49688754115479944,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
461.2260243096291,
|
||||
163.15047116357306,
|
||||
208.81423321244827
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -115.60069066047194,
|
||||
"pitch": 2.8518474088280343,
|
||||
"yaw": 108.98699397077662
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
368.0032092105987,
|
||||
-324.02483230064206,
|
||||
849.2788823044326
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.6328488975886,
|
||||
"pitch": -3.697144586874371,
|
||||
"yaw": 60.97510432458154
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 20,
|
||||
"position_mm": [
|
||||
-27.78722965547953,
|
||||
-370.90144636184993,
|
||||
-104.45169497289619
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.23809413256188228,
|
||||
"pitch": -4.374834208590023,
|
||||
"yaw": 143.81085305206332
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-67.07681274414062,
|
||||
-165.6768341064453,
|
||||
-12.623200416564941
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.2561967939168364,
|
||||
"pitch": 0.10968211192904707,
|
||||
"yaw": 87.36599578819637
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
0.0022646484430879354,
|
||||
-0.007531278766691685,
|
||||
-0.006839004810899496
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.5572651387919108,
|
||||
"pitch": -0.2540478856154707,
|
||||
"yaw": 0.22792865561204573
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
140.41845703125,
|
||||
0.009271804243326187,
|
||||
0.092652328312397
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.9053221063108222,
|
||||
"pitch": -2.1366085994661774,
|
||||
"yaw": 1.5077277441713781
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-204.43634100254326,
|
||||
-90.3850951365776,
|
||||
-94.52184634518557
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -52.67872835725091,
|
||||
"pitch": 39.27299014262584,
|
||||
"yaw": -87.21449748201128
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
0.01583130471408367,
|
||||
-80.02842712402344,
|
||||
-0.02530261129140854
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.0558520137504372,
|
||||
"pitch": -2.2130377151018776,
|
||||
"yaw": 0.2601617066921372
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 176 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 81 KiB |
@@ -0,0 +1,7 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,744.393,-11.882,212.666,-115.660,2.222,96.551
|
||||
camera2,527.995,-443.448,881.443,-149.405,-0.614,30.363
|
||||
25,146.987,-219.644,-14.453,-1.475,-0.713,75.762
|
||||
50,-1.518,0.089,-0.276,-0.596,-1.297,0.062
|
||||
71,139.840,0.042,-0.031,0.036,-1.975,-0.196
|
||||
101,-2.288,-80.358,-0.673,0.487,-1.568,-0.808
|
||||
|
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:40:45",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 0.45907110184149624,
|
||||
"rms_refs_px_cam2": 1.8220535514255254,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
744.3932024096008,
|
||||
-11.882499535240939,
|
||||
212.66641344590275
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -115.66036055568036,
|
||||
"pitch": 2.2216915445453633,
|
||||
"yaw": 96.55059294849401
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
527.9947219168113,
|
||||
-443.4476403624862,
|
||||
881.4430227800225
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -149.4054202299282,
|
||||
"pitch": -0.6136995548592902,
|
||||
"yaw": 30.363222205495898
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
146.98660278320312,
|
||||
-219.6441650390625,
|
||||
-14.453299522399902
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -1.4751980332876062,
|
||||
"pitch": -0.7130443690892287,
|
||||
"yaw": 75.76221922077491
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-1.5184317827224731,
|
||||
0.08936363458633423,
|
||||
-0.27635297179222107
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.5960699180502376,
|
||||
"pitch": -1.296579669039671,
|
||||
"yaw": 0.06174649369085999
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
139.83982849121094,
|
||||
0.04223456606268883,
|
||||
-0.03088134340941906
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.03560029736445153,
|
||||
"pitch": -1.9746336879120467,
|
||||
"yaw": -0.1957084044000817
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-2.2875027656555176,
|
||||
-80.35816192626953,
|
||||
-0.673177182674408
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.4866379194238045,
|
||||
"pitch": -1.5677675033219693,
|
||||
"yaw": -0.8081315765533771
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 87 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,498.210,88.623,206.052,-119.838,2.196,102.110
|
||||
camera2,334.074,-396.876,854.525,-147.250,-0.513,39.282
|
||||
25,-93.825,-211.994,-12.439,-1.046,-0.406,84.805
|
||||
50,-0.004,0.003,0.012,-0.106,-0.397,-0.042
|
||||
71,140.045,-0.037,-0.014,0.502,-1.471,0.890
|
||||
76,-347.458,-82.554,-72.496,-4.794,0.320,-131.339
|
||||
101,-0.044,-80.081,-0.025,1.333,-0.936,-0.171
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:43:26",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 0.0689596563850227,
|
||||
"rms_refs_px_cam2": 0.15658089852267823,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
498.210011232767,
|
||||
88.62307649604217,
|
||||
206.05227415389444
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -119.83827305973767,
|
||||
"pitch": 2.1955471129077124,
|
||||
"yaw": 102.10968938445795
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
334.0739312137807,
|
||||
-396.87615758651145,
|
||||
854.5248655333136
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.24989987242014,
|
||||
"pitch": -0.5126818772143938,
|
||||
"yaw": 39.28200265150137
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-93.8246078491211,
|
||||
-211.99365234375,
|
||||
-12.43923568725586
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -1.0455208006289969,
|
||||
"pitch": -0.405997221444331,
|
||||
"yaw": 84.80479451113972
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.004142458084970713,
|
||||
0.0031922683119773865,
|
||||
0.011907931417226791
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.10642453044301076,
|
||||
"pitch": -0.3968296567842359,
|
||||
"yaw": -0.04171026817406525
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
140.0451202392578,
|
||||
-0.037084344774484634,
|
||||
-0.014320459216833115
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.5023078026002353,
|
||||
"pitch": -1.4710306891384899,
|
||||
"yaw": 0.8898461679228588
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-347.4584356767253,
|
||||
-82.55446010770595,
|
||||
-72.49557614124402
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -4.793917356113556,
|
||||
"pitch": 0.3203544844260641,
|
||||
"yaw": -131.3390863237459
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.043663639575242996,
|
||||
-80.08061218261719,
|
||||
-0.024777762591838837
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.3330315657696694,
|
||||
"pitch": -0.9363310058749773,
|
||||
"yaw": -0.17089002041329374
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 161 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 87 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,499.822,88.859,207.627,-119.927,2.190,102.072
|
||||
camera2,324.617,-392.143,862.639,-147.982,-0.790,39.250
|
||||
25,-93.860,-212.481,-12.595,-1.949,-0.269,83.807
|
||||
50,-0.004,0.003,0.012,-0.258,-0.650,0.428
|
||||
71,140.046,-0.037,-0.013,0.306,-2.118,0.609
|
||||
76,-340.361,-86.238,-67.321,-4.926,2.286,-131.705
|
||||
101,-0.043,-80.081,-0.024,1.357,-1.022,-0.205
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:45:50",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 0.06868263740095656,
|
||||
"rms_refs_px_cam2": 0.15630357297595754,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
499.822142506545,
|
||||
88.85939416980528,
|
||||
207.62721199733437
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -119.92745477596469,
|
||||
"pitch": 2.190488293707874,
|
||||
"yaw": 102.07241332921645
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
324.6169326616307,
|
||||
-392.1429491628629,
|
||||
862.638817313126
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.98179815319492,
|
||||
"pitch": -0.7895678131424055,
|
||||
"yaw": 39.24991008226242
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-93.85962677001953,
|
||||
-212.4806365966797,
|
||||
-12.594773292541504
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -1.9485429121680113,
|
||||
"pitch": -0.2687673923849189,
|
||||
"yaw": 83.80737730916069
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.003994773142039776,
|
||||
0.003109264886006713,
|
||||
0.012178612872958183
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.25790734082294964,
|
||||
"pitch": -0.6498026480254269,
|
||||
"yaw": 0.428441829560328
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
140.04592895507812,
|
||||
-0.03738624230027199,
|
||||
-0.01319770235568285
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.3055486706690755,
|
||||
"pitch": -2.1177898361268723,
|
||||
"yaw": 0.6091614832951404
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-340.36073770675137,
|
||||
-86.23836578004335,
|
||||
-67.32056820469123
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -4.926387915431779,
|
||||
"pitch": 2.2860961549797616,
|
||||
"yaw": -131.70545931002823
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.04275330901145935,
|
||||
-80.08077239990234,
|
||||
-0.023683607578277588
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.356930847634746,
|
||||
"pitch": -1.0223328395484648,
|
||||
"yaw": -0.20516192462359795
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 91 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,395.016,274.958,206.045,-119.984,2.814,119.358
|
||||
camera2,359.471,-267.295,863.813,-147.768,-2.538,55.530
|
||||
25,-78.352,-188.494,-11.881,-1.886,0.748,102.089
|
||||
50,0.003,-0.035,-0.029,-0.393,-0.996,1.561
|
||||
71,140.373,-0.216,-0.009,0.798,-1.562,1.944
|
||||
76,-459.707,-170.694,-97.767,-2.463,3.181,-112.929
|
||||
101,0.061,-80.295,0.055,0.729,-1.048,0.758
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:51:11",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 0.6323697652065153,
|
||||
"rms_refs_px_cam2": 0.6489014675423443,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
395.01563676863606,
|
||||
274.9583596464833,
|
||||
206.04475397752364
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -119.98431855701496,
|
||||
"pitch": 2.8142321507417067,
|
||||
"yaw": 119.35809543020302
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
359.47129678000016,
|
||||
-267.2947756235871,
|
||||
863.8126650240622
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.76809010492943,
|
||||
"pitch": -2.5376982238056183,
|
||||
"yaw": 55.52992636638746
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-78.35247802734375,
|
||||
-188.4938201904297,
|
||||
-11.880936622619629
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -1.885989573087267,
|
||||
"pitch": 0.7475050867613423,
|
||||
"yaw": 102.08882951321951
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
0.002867116592824459,
|
||||
-0.034943774342536926,
|
||||
-0.02899026684463024
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.39255711964707385,
|
||||
"pitch": -0.9959750123875623,
|
||||
"yaw": 1.5614975288119828
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
140.3726043701172,
|
||||
-0.21625664830207825,
|
||||
-0.00919211097061634
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.7984134246053606,
|
||||
"pitch": -1.562078718233375,
|
||||
"yaw": 1.9439997964972604
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-459.70712987851766,
|
||||
-170.69410468938494,
|
||||
-97.76705043570367
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.4626449410414946,
|
||||
"pitch": 3.1808466940482707,
|
||||
"yaw": -112.9286987372601
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
0.06145252659916878,
|
||||
-80.29531860351562,
|
||||
0.055326566100120544
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.7289847565857819,
|
||||
"pitch": -1.0475664492494143,
|
||||
"yaw": 0.7580539936823688
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 97 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,536.560,19.088,206.377,-106.622,2.737,89.850
|
||||
camera2,265.697,-417.719,863.004,-147.946,-0.838,27.172
|
||||
25,-105.950,-153.015,-13.182,-0.890,-0.149,73.247
|
||||
50,-0.040,-0.018,-0.033,-0.879,-1.449,-0.958
|
||||
71,140.010,-0.012,-0.131,0.402,-1.339,-0.189
|
||||
76,-426.751,36.837,-80.533,-2.174,0.185,-140.318
|
||||
101,-0.154,-80.157,-0.149,1.401,-1.417,-0.671
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:52:57",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 0.24427057867694885,
|
||||
"rms_refs_px_cam2": 0.27827582635161247,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
536.5599698999005,
|
||||
19.08812610913911,
|
||||
206.37737338942568
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -106.62238029916044,
|
||||
"pitch": 2.73698636164054,
|
||||
"yaw": 89.84958179049634
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
265.696908061668,
|
||||
-417.71859377662963,
|
||||
863.0037755691174
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.94607328148066,
|
||||
"pitch": -0.8376675719210364,
|
||||
"yaw": 27.17235921730388
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-105.95045471191406,
|
||||
-153.015380859375,
|
||||
-13.182010650634766
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.8902363626829162,
|
||||
"pitch": -0.14934531032116036,
|
||||
"yaw": 73.24720041399077
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.040261898189783096,
|
||||
-0.018160216510295868,
|
||||
-0.032540079206228256
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.8788475817184255,
|
||||
"pitch": -1.4493986331576718,
|
||||
"yaw": -0.9580865386218039
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
140.0104522705078,
|
||||
-0.011823506094515324,
|
||||
-0.13130724430084229
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.40245628021742036,
|
||||
"pitch": -1.339452511723197,
|
||||
"yaw": -0.18891338256930315
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-426.75066384529714,
|
||||
36.836556193528715,
|
||||
-80.53298420815302
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.1735863467636007,
|
||||
"pitch": 0.18540893221631718,
|
||||
"yaw": -140.3178431469828
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.15381859242916107,
|
||||
-80.15699005126953,
|
||||
-0.14876669645309448
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.401434331782987,
|
||||
"pitch": -1.417352777188989,
|
||||
"yaw": -0.6705647440036173
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 97 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,536.132,19.475,207.265,-106.720,2.751,89.881
|
||||
camera2,268.384,-412.214,863.776,-148.162,-0.584,27.306
|
||||
25,-106.039,-153.152,-13.340,148.790,18.375,132.294
|
||||
50,-0.040,-0.018,-0.032,-0.891,-1.547,-0.922
|
||||
71,140.010,-0.012,-0.133,0.607,-1.246,0.187
|
||||
76,-427.186,35.671,-80.653,-2.018,-0.109,-140.186
|
||||
101,-0.155,-80.158,-0.149,1.389,-1.515,-0.634
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:53:12",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 0.246809770178914,
|
||||
"rms_refs_px_cam2": 0.27880768692475444,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
536.1318738587609,
|
||||
19.474736168499103,
|
||||
207.26462795091985
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -106.7203897853097,
|
||||
"pitch": 2.7507012808548144,
|
||||
"yaw": 89.88105336644603
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
268.3843515238169,
|
||||
-412.2144214770623,
|
||||
863.7760290780072
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -148.1621979629559,
|
||||
"pitch": -0.5838459897877972,
|
||||
"yaw": 27.306333846282612
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-106.03853607177734,
|
||||
-153.15234375,
|
||||
-13.33987045288086
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 148.7903066118052,
|
||||
"pitch": 18.37471840944555,
|
||||
"yaw": 132.29369679166456
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.04027938097715378,
|
||||
-0.018168868497014046,
|
||||
-0.03249623626470566
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.8911896876960713,
|
||||
"pitch": -1.5474788147950507,
|
||||
"yaw": -0.9216004257713646
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
140.00997924804688,
|
||||
-0.011874680407345295,
|
||||
-0.13304609060287476
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.6066041335238053,
|
||||
"pitch": -1.2456305272454657,
|
||||
"yaw": 0.1873499158076866
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-427.1856256100377,
|
||||
35.67064810704457,
|
||||
-80.65343499481803
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.0175816127635513,
|
||||
"pitch": -0.10919350640776791,
|
||||
"yaw": -140.1864457356773
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.15468710660934448,
|
||||
-80.15770721435547,
|
||||
-0.1492648720741272
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.3886002098868537,
|
||||
"pitch": -1.5153698095294952,
|
||||
"yaw": -0.6340729479437016
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 96 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,536.611,18.820,206.461,-106.626,2.661,89.850
|
||||
camera2,268.384,-412.214,863.776,-148.162,-0.584,27.306
|
||||
25,-105.905,-153.052,-13.330,148.800,18.245,132.261
|
||||
50,-0.040,-0.018,-0.032,-0.803,-1.452,-0.960
|
||||
71,140.010,-0.012,-0.132,1.207,-1.367,-0.158
|
||||
76,-427.186,35.671,-80.653,-2.018,-0.109,-140.186
|
||||
101,-0.155,-80.158,-0.149,0.999,-1.889,-0.671
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:53:25",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 0.2441583102735186,
|
||||
"rms_refs_px_cam2": 0.27880768692475444,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
536.6112531658491,
|
||||
18.81997611440784,
|
||||
206.46065124784747
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -106.6257561255132,
|
||||
"pitch": 2.6610643225108683,
|
||||
"yaw": 89.84975075090361
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
268.3843515238169,
|
||||
-412.2144214770623,
|
||||
863.7760290780072
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -148.1621979629559,
|
||||
"pitch": -0.5838459897877972,
|
||||
"yaw": 27.306333846282612
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-105.90450286865234,
|
||||
-153.0524444580078,
|
||||
-13.329595565795898
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 148.80013975261303,
|
||||
"pitch": 18.24478302172668,
|
||||
"yaw": 132.26101573505235
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.04021511226892471,
|
||||
-0.018157418817281723,
|
||||
-0.032385922968387604
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.8028611672479457,
|
||||
"pitch": -1.4516990130367182,
|
||||
"yaw": -0.9596821440114531
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
140.010009765625,
|
||||
-0.011915921233594418,
|
||||
-0.13167670369148254
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.20741490711664,
|
||||
"pitch": -1.3669496548399305,
|
||||
"yaw": -0.1576632529292416
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-427.1856256100377,
|
||||
35.67064810704457,
|
||||
-80.65343499481803
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.0175816127635513,
|
||||
"pitch": -0.10919350640776791,
|
||||
"yaw": -140.1864457356773
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.15451067686080933,
|
||||
-80.15750122070312,
|
||||
-0.14881648123264313
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.9986347088612523,
|
||||
"pitch": -1.8894700986904136,
|
||||
"yaw": -0.6714546601080824
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 97 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,536.485,18.839,206.779,-106.660,2.662,89.850
|
||||
camera2,270.078,-416.213,861.643,-147.875,-0.599,27.290
|
||||
25,-106.002,-152.845,-13.395,-1.656,-0.260,74.773
|
||||
50,-0.040,-0.018,-0.033,-0.803,-1.486,-0.958
|
||||
71,140.010,-0.012,-0.132,0.125,-0.986,-0.226
|
||||
76,-427.338,36.154,-79.282,-2.295,-0.032,-140.199
|
||||
101,-0.155,-80.157,-0.149,0.998,-1.924,-0.670
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:54:28",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 0.24499340599673408,
|
||||
"rms_refs_px_cam2": 0.27883589939730147,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
536.4845116439085,
|
||||
18.839229807721747,
|
||||
206.77874626303299
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -106.65991480567813,
|
||||
"pitch": 2.6616683186812895,
|
||||
"yaw": 89.84996530221618
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
270.0780494525769,
|
||||
-416.21266285199596,
|
||||
861.643153883761
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.87452698748913,
|
||||
"pitch": -0.598847887585048,
|
||||
"yaw": 27.289970873393735
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-106.00161743164062,
|
||||
-152.84478759765625,
|
||||
-13.39499282836914
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -1.6559759933266671,
|
||||
"pitch": -0.2604845235747343,
|
||||
"yaw": 74.7725286291638
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.040440429002046585,
|
||||
-0.018118301406502724,
|
||||
-0.03263949975371361
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.8029835843019023,
|
||||
"pitch": -1.4858259759073,
|
||||
"yaw": -0.9578783681599231
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
140.0098114013672,
|
||||
-0.011588250286877155,
|
||||
-0.13215307891368866
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.12497030142085656,
|
||||
"pitch": -0.9856255500173754,
|
||||
"yaw": -0.2263123773485252
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-427.3379087741667,
|
||||
36.154104540318976,
|
||||
-79.28241714985451
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.2951599547424033,
|
||||
"pitch": -0.03224401177592252,
|
||||
"yaw": -140.19949710822343
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.1550489366054535,
|
||||
-80.1570816040039,
|
||||
-0.14949001371860504
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.9983404931317552,
|
||||
"pitch": -1.9235960141180923,
|
||||
"yaw": -0.6696442337381485
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 98 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,504.143,-126.269,207.847,-108.968,2.548,85.122
|
||||
camera2,270.078,-416.213,861.643,-147.875,-0.599,27.290
|
||||
25,-106.269,-152.549,-13.850,-1.588,-0.375,72.807
|
||||
50,-0.060,0.071,-0.102,-0.330,-0.119,-0.470
|
||||
71,139.927,0.527,-0.717,0.185,-1.331,-0.473
|
||||
76,-427.338,36.154,-79.282,-2.295,-0.032,-140.199
|
||||
101,-0.131,-80.113,-0.116,2.341,-2.488,-1.552
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:56:33",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 1.6352803769089361,
|
||||
"rms_refs_px_cam2": 0.27883589939730147,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
504.1434070874974,
|
||||
-126.26880184835102,
|
||||
207.84717134607124
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -108.96805282221369,
|
||||
"pitch": 2.5480630503117383,
|
||||
"yaw": 85.1220631505837
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
270.0780494525769,
|
||||
-416.21266285199596,
|
||||
861.643153883761
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.87452698748913,
|
||||
"pitch": -0.598847887585048,
|
||||
"yaw": 27.289970873393735
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-106.2688980102539,
|
||||
-152.54945373535156,
|
||||
-13.849575996398926
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -1.5884234657772047,
|
||||
"pitch": -0.3745665819559331,
|
||||
"yaw": 72.80694636666057
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.0595768541097641,
|
||||
0.07062801718711853,
|
||||
-0.10162462294101715
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.32981134855001165,
|
||||
"pitch": -0.11945304564632257,
|
||||
"yaw": -0.4700373514560054
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
139.9272918701172,
|
||||
0.5273333787918091,
|
||||
-0.7168083786964417
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.18548532711350751,
|
||||
"pitch": -1.3314171147799696,
|
||||
"yaw": -0.4728166142447713
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-427.3379087741667,
|
||||
36.154104540318976,
|
||||
-79.28241714985451
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.2951599547424033,
|
||||
"pitch": -0.03224401177592252,
|
||||
"yaw": -140.19949710822343
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.13059137761592865,
|
||||
-80.11270904541016,
|
||||
-0.1164691299200058
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 2.3411360398909618,
|
||||
"pitch": -2.4881518135413483,
|
||||
"yaw": -1.55157097952814
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 186 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 98 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,504.045,-125.440,208.438,-109.022,2.699,85.139
|
||||
camera2,266.610,-418.486,860.306,-147.821,-0.848,27.232
|
||||
25,-140.292,-125.449,-97.313,2.157,-0.941,71.251
|
||||
50,-0.060,0.071,-0.102,-0.757,-0.797,-0.990
|
||||
71,139.929,0.526,-0.716,-0.325,-1.431,0.182
|
||||
76,-433.531,41.246,-90.204,-2.749,1.515,-141.240
|
||||
101,-0.131,-80.112,-0.117,1.895,-2.234,-2.024
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:59:31",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 1.6293581246511548,
|
||||
"rms_refs_px_cam2": 0.2788366800146409,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
504.04506476827214,
|
||||
-125.43959602101629,
|
||||
208.43800067135305
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -109.02184112523827,
|
||||
"pitch": 2.698848284001251,
|
||||
"yaw": 85.13910561624756
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
266.6103702868428,
|
||||
-418.48644100540105,
|
||||
860.3060088273107
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.82070047743667,
|
||||
"pitch": -0.8481476074566079,
|
||||
"yaw": 27.231785358346894
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-140.29239613974138,
|
||||
-125.4489603029717,
|
||||
-97.31344559021105
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 2.1567827057244413,
|
||||
"pitch": -0.9412219288956468,
|
||||
"yaw": 71.25097767397922
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.05961627885699272,
|
||||
0.07056063413619995,
|
||||
-0.10187845677137375
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.7565047680938701,
|
||||
"pitch": -0.7966906440544459,
|
||||
"yaw": -0.9895245611569333
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
139.9290313720703,
|
||||
0.5259146094322205,
|
||||
-0.7162161469459534
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.32549591394932065,
|
||||
"pitch": -1.4313243306475538,
|
||||
"yaw": 0.18202150530705868
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-433.53071815447515,
|
||||
41.246156509784306,
|
||||
-90.20381677655665
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.749193832463117,
|
||||
"pitch": 1.5148995579585318,
|
||||
"yaw": -141.24013438395986
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.13099518418312073,
|
||||
-80.1122055053711,
|
||||
-0.11726970225572586
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.8945374923981935,
|
||||
"pitch": -2.233677355990763,
|
||||
"yaw": -2.0235970532528627
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 98 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,503.865,-126.022,208.384,-109.022,2.675,85.081
|
||||
camera2,266.610,-418.486,860.306,-147.821,-0.848,27.232
|
||||
25,-140.292,-125.449,-97.313,2.157,-0.941,71.251
|
||||
50,-0.059,0.071,-0.102,-0.733,-0.798,-1.047
|
||||
71,139.929,0.528,-0.718,0.055,-1.375,-0.508
|
||||
76,-427.113,37.241,-81.727,-2.294,0.223,-140.257
|
||||
101,-0.131,-80.112,-0.117,1.918,-2.235,-2.082
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 12:59:34",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 1.6351827813311057,
|
||||
"rms_refs_px_cam2": 0.2788366800146409,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
503.86535377102757,
|
||||
-126.0217865863354,
|
||||
208.3841414025093
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -109.02178853785225,
|
||||
"pitch": 2.6749295016696792,
|
||||
"yaw": 85.08147015056912
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
266.6103702868428,
|
||||
-418.48644100540105,
|
||||
860.3060088273107
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.82070047743667,
|
||||
"pitch": -0.8481476074566079,
|
||||
"yaw": 27.231785358346894
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-140.29239613974138,
|
||||
-125.4489603029717,
|
||||
-97.31344559021105
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 2.1567827057244413,
|
||||
"pitch": -0.9412219288956468,
|
||||
"yaw": 71.25097767397922
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.05949229747056961,
|
||||
0.07056579738855362,
|
||||
-0.10178429633378983
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.7326347017887312,
|
||||
"pitch": -0.7982530830682991,
|
||||
"yaw": -1.0474947170476723
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
139.9291534423828,
|
||||
0.5281545519828796,
|
||||
-0.7181304693222046
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 0.054832054132430294,
|
||||
"pitch": -1.3751877946904352,
|
||||
"yaw": -0.5078755386026013
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-427.1134884927447,
|
||||
37.24098158486472,
|
||||
-81.7265624325304
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.2936996824272757,
|
||||
"pitch": 0.22279528833380796,
|
||||
"yaw": -140.257000521589
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.13077759742736816,
|
||||
-80.11217498779297,
|
||||
-0.11710629612207413
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.9184477394460142,
|
||||
"pitch": -2.2348086743383244,
|
||||
"yaw": -2.0821671254702734
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 95 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,504.045,-125.440,208.438,-109.022,2.699,85.139
|
||||
camera2,270.026,-416.227,861.637,-147.885,-0.610,27.284
|
||||
25,-146.564,-122.019,-110.046,2.948,-3.094,70.681
|
||||
50,-0.060,0.070,-0.102,-0.757,-0.797,-0.990
|
||||
71,139.926,0.525,-0.717,-0.325,-1.431,0.182
|
||||
76,-433.546,40.124,-87.968,-2.734,1.269,-141.188
|
||||
101,-0.131,-80.113,-0.117,1.895,-2.234,-2.024
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 13:00:43",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 1.6293581246511548,
|
||||
"rms_refs_px_cam2": 0.27874697491884515,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
504.04506476827214,
|
||||
-125.43959602101629,
|
||||
208.43800067135305
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -109.02184112523827,
|
||||
"pitch": 2.698848284001251,
|
||||
"yaw": 85.13910561624756
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
270.0255615833945,
|
||||
-416.2266954181255,
|
||||
861.6372832306015
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.88471453889258,
|
||||
"pitch": -0.6104471798882228,
|
||||
"yaw": 27.284260513873207
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-146.56390653875772,
|
||||
-122.01936830680177,
|
||||
-110.04647490641418
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 2.9478733960652317,
|
||||
"pitch": -3.094005209248501,
|
||||
"yaw": 70.68106227703957
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.05994195118546486,
|
||||
0.07033900171518326,
|
||||
-0.10183054953813553
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.7565047680938701,
|
||||
"pitch": -0.7966906440544459,
|
||||
"yaw": -0.9895245611569333
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
139.92623901367188,
|
||||
0.5254115462303162,
|
||||
-0.7173581123352051
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.32549591394932065,
|
||||
"pitch": -1.4313243306475538,
|
||||
"yaw": 0.18202150530705868
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-433.54618946861825,
|
||||
40.12437978999722,
|
||||
-87.96843536493381
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.7339747255490496,
|
||||
"pitch": 1.2692023064376108,
|
||||
"yaw": -141.18810429430917
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.1314823478460312,
|
||||
-80.11257934570312,
|
||||
-0.11714237183332443
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.8945374923981935,
|
||||
"pitch": -2.233677355990763,
|
||||
"yaw": -2.0235970532528627
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 95 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,504.346,-126.088,208.972,-109.059,2.680,85.086
|
||||
camera2,264.187,-418.808,860.711,-147.871,-0.997,27.225
|
||||
25,-146.381,-120.960,-112.426,2.692,-3.384,70.637
|
||||
50,-0.059,0.071,-0.102,-0.740,-0.835,-1.041
|
||||
71,139.932,0.527,-0.717,-0.104,-1.611,-0.287
|
||||
76,-433.323,41.407,-91.498,-2.671,1.651,-141.245
|
||||
101,-0.130,-80.112,-0.117,1.765,-2.090,-1.611
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 13:00:46",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 1.6322619128484837,
|
||||
"rms_refs_px_cam2": 0.27891317247078307,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
504.3455544730708,
|
||||
-126.08836092695347,
|
||||
208.97212985670578
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -109.05897102015024,
|
||||
"pitch": 2.6798363329030015,
|
||||
"yaw": 85.08587585610263
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
264.18741185869976,
|
||||
-418.8076518770778,
|
||||
860.7107237997933
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -147.87053756474188,
|
||||
"pitch": -0.9967164816589582,
|
||||
"yaw": 27.225288127020352
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-146.38069430769912,
|
||||
-120.96003565972013,
|
||||
-112.42579787439388
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 2.6923433615306704,
|
||||
"pitch": -3.3843807163200768,
|
||||
"yaw": 70.63672737874518
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.05914720147848129,
|
||||
0.07060958445072174,
|
||||
-0.10182428359985352
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.7400391639105726,
|
||||
"pitch": -0.8349788551011907,
|
||||
"yaw": -1.041246608486316
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
139.931640625,
|
||||
0.5272786021232605,
|
||||
-0.7172355651855469
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.10435540248426062,
|
||||
"pitch": -1.6112172635894972,
|
||||
"yaw": -0.28703867176603404
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-433.3229711848545,
|
||||
41.40696043873204,
|
||||
-91.49844947506591
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -2.670645648451487,
|
||||
"pitch": 1.650511846955434,
|
||||
"yaw": -141.24526443651283
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.13022156059741974,
|
||||
-80.1122055053711,
|
||||
-0.11703384667634964
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 1.764660977086649,
|
||||
"pitch": -2.090428969194846,
|
||||
"yaw": -1.6105724321001378
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 95 KiB |
@@ -0,0 +1,8 @@
|
||||
id,x_mm,y_mm,z_mm,roll_deg,pitch_deg,yaw_deg
|
||||
camera1,504.274,-125.421,208.038,-108.984,2.641,85.170
|
||||
camera2,263.878,-413.788,865.140,-148.233,-0.840,27.182
|
||||
25,-147.036,-121.390,-112.171,6.442,-4.982,69.632
|
||||
50,-0.058,0.070,-0.101,-0.696,-0.763,-0.962
|
||||
71,139.935,0.519,-0.709,-0.489,-1.163,-0.158
|
||||
76,-426.418,36.499,-82.012,-1.893,0.125,-140.312
|
||||
101,-0.130,-80.113,-0.116,2.376,-2.677,-1.947
|
||||
|
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"metadata": {
|
||||
"timestamp": "2025-12-17 13:01:36",
|
||||
"reference_markers": [
|
||||
50,
|
||||
71,
|
||||
101
|
||||
],
|
||||
"dict": "DICT_4X4_250",
|
||||
"marker_size_mm": 25.0,
|
||||
"rms_refs_px_cam1": 1.6245055926073846,
|
||||
"rms_refs_px_cam2": 0.278832396834227,
|
||||
"description": "Two-camera joint optimization with triangulation"
|
||||
},
|
||||
"cameras": [
|
||||
{
|
||||
"id": "camera1",
|
||||
"position_mm": [
|
||||
504.27431986771165,
|
||||
-125.42139468012584,
|
||||
208.03784733754605
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -108.98423816059554,
|
||||
"pitch": 2.6405808944061833,
|
||||
"yaw": 85.16958065172916
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "camera2",
|
||||
"position_mm": [
|
||||
263.87845253528576,
|
||||
-413.78822478509414,
|
||||
865.1404125791126
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -148.23340567731228,
|
||||
"pitch": -0.839630205401846,
|
||||
"yaw": 27.182039752587464
|
||||
}
|
||||
}
|
||||
],
|
||||
"markers": [
|
||||
{
|
||||
"id": 25,
|
||||
"position_mm": [
|
||||
-147.03627839622246,
|
||||
-121.38963611944858,
|
||||
-112.1706024225141
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 6.441739640710501,
|
||||
"pitch": -4.982096863310886,
|
||||
"yaw": 69.63247132329899
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"position_mm": [
|
||||
-0.0584297850728035,
|
||||
0.06957601755857468,
|
||||
-0.10077428072690964
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.6958293982162046,
|
||||
"pitch": -0.7631468591028222,
|
||||
"yaw": -0.961626910653193
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"position_mm": [
|
||||
139.9346160888672,
|
||||
0.5189080834388733,
|
||||
-0.7089385390281677
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -0.48924402278605317,
|
||||
"pitch": -1.1630519362635283,
|
||||
"yaw": -0.15756567408554
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"position_mm": [
|
||||
-426.41843705188467,
|
||||
36.498682396519875,
|
||||
-82.01192295215198
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": -1.8926776139424322,
|
||||
"pitch": 0.1251018751932863,
|
||||
"yaw": -140.31160702344877
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"position_mm": [
|
||||
-0.12956561148166656,
|
||||
-80.11343383789062,
|
||||
-0.1155543327331543
|
||||
],
|
||||
"orientation_deg": {
|
||||
"roll": 2.3760695955706534,
|
||||
"pitch": -2.677028882500984,
|
||||
"yaw": -1.9465300125030265
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 179 KiB |