diff --git a/build.gradle b/build.gradle index 21118ed..3d13dc0 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "java" - id "edu.wpi.first.GradleRIO" version "2026.1.1" + id "edu.wpi.first.GradleRIO" version "2026.2.1" id "com.peterabeles.gversion" version "1.10" id "com.diffplug.spotless" version "6.12.0" id "io.freefair.lombok" version "8.4" @@ -207,7 +207,6 @@ spotless { include "**/*.java" exclude "**/build/**", "**/build-*/**" exclude "src/main/java/org/team2342/frc/commands/DriveCommands.java" - exclude "src/main/java/org/team2342/frc/commands/DriveCommands.java" exclude "src/main/java/org/team2342/frc/subsystems/vision/Vision.java" exclude "src/main/java/org/team2342/frc/subsystems/vision/VisionIO.java" exclude "src/main/java/org/team2342/frc/subsystems/vision/VisionIOSim.java" @@ -215,7 +214,7 @@ spotless { exclude "src/main/java/org/team2342/lib/util/Elastic.java" } - licenseHeader("// Copyright (c) $currentYear Team 2342\n// https://github.com/FRCTeamPhoenix\n//\n// This source code is licensed under the MIT License.\n// See the LICENSE file in the root directory of this project.\n\n", "package ") // Your actual license header + licenseHeader("// Copyright (c) $currentYear Team 2342\n// https://github.com/FRCTeamPhoenix\n//\n// This source code is licensed under the MIT License.\n// See the LICENSE file in the root directory of this project.\n\n", "package ") } groovyGradle { target fileTree(".") { diff --git a/src/main/deploy/calibrations/left_arducam_800.json b/src/main/deploy/calibrations/left_arducam_800.json new file mode 100644 index 0000000..0e4edc7 --- /dev/null +++ b/src/main/deploy/calibrations/left_arducam_800.json @@ -0,0 +1 @@ +{"resolution":{"width":800.0,"height":600.0},"cameraIntrinsics":{"rows":3,"cols":3,"type":6,"data":[682.7516943236313,0.0,394.5499847505025,0.0,683.1022199586625,306.9550449132658,0.0,0.0,1.0]},"distCoeffs":{"rows":1,"cols":8,"type":6,"data":[0.04877412168568248,-0.08583346617497362,3.3239861329365287E-4,-1.0087681700342245E-4,0.0373919549435751,-0.001607828934539453,0.003334945484145628,-0.0015418411274107935]},"calobjectWarp":[-1.7967371837738374E-4,-1.0056455082665219E-4],"observations":[{"locationInObjectSpace":[{"x":0.09083039313554764,"y":0.0,"z":-1.7600689898245037E-4},{"x":0.10596879571676254,"y":0.0,"z":-1.796737196855247E-4},{"x":0.12110719084739685,"y":0.0,"z":-1.760069135343656E-4},{"x":0.16652239859104156,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.18166080117225647,"y":0.0,"z":-8.800344949122518E-5},{"x":0.19679918885231018,"y":0.0,"z":-4.766857091453858E-5},{"x":0.07569199800491333,"y":0.015138399787247181,"z":-2.012097102124244E-4},{"x":0.09083039313554764,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.10596879571676254,"y":0.015138399787247181,"z":-2.1587694936897606E-4},{"x":0.12110719084739685,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.16652239859104156,"y":0.015138399787247181,"z":-1.5720799274276942E-4},{"x":0.18166080117225647,"y":0.015138399787247181,"z":-1.2420669372659177E-4},{"x":0.19679918885231018,"y":0.015138399787247181,"z":-8.387180423596874E-5},{"x":0.03027680143713951,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.060553599148988724,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.03027680143713951,"z":-2.2936778259463608E-4},{"x":0.09083039313554764,"y":0.03027680143713951,"z":-2.4036821560002863E-4},{"x":0.10596879571676254,"y":0.03027680143713951,"z":-2.4403503630310297E-4},{"x":0.12110719084739685,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.13624559342861176,"y":0.03027680143713951,"z":-2.293677971465513E-4},{"x":0.15138399600982666,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.16652239859104156,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.18166080117225647,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.19679918885231018,"y":0.03027680143713951,"z":-1.1202988389413804E-4},{"x":0.015138399787247181,"y":0.04541520029306412,"z":-1.3214275531936437E-4},{"x":0.060553599148988724,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.07569199800491333,"y":0.04541520029306412,"z":-2.4948068312369287E-4},{"x":0.12110719084739685,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.04541520029306412,"z":-2.494807122275233E-4},{"x":0.15138399600982666,"y":0.04541520029306412,"z":-2.3114665236789733E-4},{"x":0.16652239859104156,"y":0.04541520029306412,"z":-2.0547898020595312E-4},{"x":0.18166080117225647,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.19679918885231018,"y":0.04541520029306412,"z":-1.3214279897511005E-4},{"x":0.0,"y":0.060553599148988724,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.060553599148988724,"z":-1.442104985471815E-4},{"x":0.060553599148988724,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.13624559342861176,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.15138399600982666,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.16652239859104156,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.18166080117225647,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.060553599148988724,"z":-1.4421054220292717E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138399787247181,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.03027680143713951,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.04541520029306412,"y":0.07569199800491333,"z":-2.2156929480843246E-4},{"x":0.060553599148988724,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.09083039313554764,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.15138399600982666,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.16652239859104156,"y":0.07569199800491333,"z":-2.215693093603477E-4},{"x":0.18166080117225647,"y":0.07569199800491333,"z":-1.885679957922548E-4},{"x":0.19679918885231018,"y":0.07569199800491333,"z":-1.482331135775894E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.04541520029306412,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.15138399600982666,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.16652239859104156,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.18166080117225647,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.09083039313554764,"z":-1.4421054220292717E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.060553599148988724,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083039313554764,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.15138399600982666,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.16652239859104156,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.18166080117225647,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.19679918885231018,"y":0.10596879571676254,"z":-1.3214279897511005E-4},{"x":0.0,"y":0.12110719084739685,"z":-6.436132389353588E-5},{"x":0.015138399787247181,"y":0.12110719084739685,"z":-1.120298620662652E-4},{"x":0.03027680143713951,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.04541520029306412,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.060553599148988724,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.07569199800491333,"y":0.12110719084739685,"z":-2.293677971465513E-4},{"x":0.09083039313554764,"y":0.12110719084739685,"z":-2.4036823015194386E-4},{"x":0.10596879571676254,"y":0.12110719084739685,"z":-2.440350508550182E-4},{"x":0.15138399600982666,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.16652239859104156,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.18166080117225647,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.19679918885231018,"y":0.12110719084739685,"z":-1.1202989844605327E-4},{"x":0.0,"y":0.13624559342861176,"z":-3.62032515113242E-5},{"x":0.015138399787247181,"y":0.13624559342861176,"z":-8.387178968405351E-5},{"x":0.03027680143713951,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.04541520029306412,"y":0.13624559342861176,"z":-1.5720800729468465E-4},{"x":0.060553599148988724,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.07569199800491333,"y":0.13624559342861176,"z":-2.0120972476433963E-4},{"x":0.09083039313554764,"y":0.13624559342861176,"z":-2.1221015776973218E-4},{"x":0.10596879571676254,"y":0.13624559342861176,"z":-2.1587696392089128E-4},{"x":0.12110719084739685,"y":0.13624559342861176,"z":-2.1221015776973218E-4},{"x":0.13624559342861176,"y":0.13624559342861176,"z":-2.0120973931625485E-4},{"x":0.15138399600982666,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.16652239859104156,"y":0.13624559342861176,"z":-1.5720800729468465E-4},{"x":0.18166080117225647,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.19679918885231018,"y":0.13624559342861176,"z":-8.387181878788397E-5}],"locationInImageSpace":[{"x":458.0697937011719,"y":188.22500610351562},{"x":480.5665588378906,"y":185.16612243652344},{"x":503.3921813964844,"y":182.11317443847656},{"x":572.5305786132812,"y":172.48153686523438},{"x":596.0140380859375,"y":169.4591522216797},{"x":619.4346923828125,"y":166.13946533203125},{"x":437.92462158203125,"y":211.02813720703125},{"x":460.43060302734375,"y":207.95982360839844},{"x":483.4458923339844,"y":205.10855102539062},{"x":506.5277099609375,"y":201.68521118164062},{"x":576.2572021484375,"y":192.322265625},{"x":600.1422119140625,"y":189.33209228515625},{"x":623.8291625976562,"y":186.02777099609375},{"x":372.8437805175781,"y":240.04116821289062},{"x":394.9493408203125,"y":236.83200073242188},{"x":417.27783203125,"y":233.9010467529297},{"x":440.1217346191406,"y":230.94065856933594},{"x":463.04608154296875,"y":228.01536560058594},{"x":486.0346374511719,"y":224.79617309570312},{"x":508.018310546875,"y":222.53338623046875},{"x":532.98681640625,"y":218.9586639404297},{"x":556.2896728515625,"y":215.91390991210938},{"x":580.267578125,"y":212.73960876464844},{"x":604.584716796875,"y":209.42185974121094},{"x":628.7138061523438,"y":206.427001953125},{"x":351.20623779296875,"y":263.21295166015625},{"x":419.5162353515625,"y":254.6029815673828},{"x":442.317626953125,"y":251.33287048339844},{"x":512.7411499023438,"y":242.56640625},{"x":536.2963256835938,"y":239.54922485351562},{"x":560.367431640625,"y":236.51229858398438},{"x":584.680908203125,"y":233.850341796875},{"x":608.9337158203125,"y":230.45712280273438},{"x":633.218017578125,"y":227.4756317138672},{"x":329.9703674316406,"y":286.9299011230469},{"x":352.12774658203125,"y":284.38458251953125},{"x":421.4462890625,"y":275.7034912109375},{"x":444.9581298828125,"y":272.6667175292969},{"x":540.0498657226562,"y":260.9295959472656},{"x":564.3477172851562,"y":257.67987060546875},{"x":588.88720703125,"y":254.80421447753906},{"x":613.5059204101562,"y":251.833251953125},{"x":638.2518310546875,"y":248.75604248046875},{"x":330.9082946777344,"y":308.326171875},{"x":353.8084411621094,"y":305.8206787109375},{"x":376.80902099609375,"y":302.98028564453125},{"x":400.1733093261719,"y":299.97906494140625},{"x":423.5917053222656,"y":297.1226806640625},{"x":447.1124267578125,"y":294.26715087890625},{"x":470.99090576171875,"y":291.3049011230469},{"x":568.1796264648438,"y":279.60589599609375},{"x":593.0707397460938,"y":276.7436828613281},{"x":618.2527465820312,"y":273.681884765625},{"x":643.2560424804688,"y":270.7465515136719},{"x":331.91082763671875,"y":330.7736511230469},{"x":401.9180908203125,"y":322.14105224609375},{"x":425.7900390625,"y":319.3580627441406},{"x":449.63641357421875,"y":316.5155944824219},{"x":473.766357421875,"y":313.9094543457031},{"x":572.5194091796875,"y":302.09490966796875},{"x":598.0172729492188,"y":299.1690368652344},{"x":623.1375122070312,"y":296.1230163574219},{"x":648.7464599609375,"y":293.24908447265625},{"x":332.8150634765625,"y":353.03717041015625},{"x":404.0612487792969,"y":344.95526123046875},{"x":427.9584045410156,"y":342.008544921875},{"x":452.18505859375,"y":339.0807800292969},{"x":476.7786865234375,"y":336.4750061035156},{"x":577.1005249023438,"y":325.04083251953125},{"x":602.4990234375,"y":322.24346923828125},{"x":628.1435546875,"y":319.3319396972656},{"x":654.0064697265625,"y":316.44598388671875},{"x":333.9119567871094,"y":376.5509033203125},{"x":357.63348388671875,"y":373.6996154785156},{"x":381.7432861328125,"y":370.7982482910156},{"x":406.03265380859375,"y":368.04193115234375},{"x":430.4234619140625,"y":365.1866149902344},{"x":455.0362548828125,"y":362.68603515625},{"x":479.81640625,"y":359.9466857910156},{"x":504.9034118652344,"y":357.2443542480469},{"x":581.4649658203125,"y":348.795654296875},{"x":607.29931640625,"y":346.03082275390625},{"x":633.5387573242188,"y":343.2580261230469},{"x":659.6691284179688,"y":340.3973693847656},{"x":334.7090759277344,"y":400.03662109375},{"x":358.9177551269531,"y":397.7298278808594},{"x":383.200927734375,"y":394.9403076171875},{"x":407.97686767578125,"y":392.2448425292969},{"x":432.908203125,"y":389.49456787109375},{"x":457.9516906738281,"y":386.73577880859375},{"x":482.90899658203125,"y":383.8548583984375},{"x":508.2190856933594,"y":381.5206604003906},{"x":534.306396484375,"y":378.81768798828125},{"x":559.9483642578125,"y":376.14654541015625},{"x":586.1402587890625,"y":373.2123107910156},{"x":612.1219482421875,"y":370.6105041503906},{"x":638.601806640625,"y":367.8280029296875},{"x":665.3864135742188,"y":364.96502685546875}],"reprojectionErrors":[{"x":0.19384765625,"y":-0.2371826171875},{"x":0.347930908203125,"y":-0.2126312255859375},{"x":0.146240234375,"y":-0.4201812744140625},{"x":-0.160400390625,"y":-0.1642608642578125},{"x":-0.1015625,"y":-0.0093994140625},{"x":-0.417205810546875,"y":-0.2486572265625},{"x":1.672943115234375,"y":-0.7783660888671875},{"x":0.13372802734375,"y":-0.2636566162109375},{"x":0.4193115234375,"y":-0.2943115234375},{"x":0.18951416015625,"y":-0.2108612060546875},{"x":0.0120849609375,"y":-0.029815673828125},{"x":0.03240966796875,"y":-0.2237548828125},{"x":0.327667236328125,"y":0.08056640625},{"x":0.18756103515625,"y":-0.1625213623046875},{"x":-0.0545654296875,"y":-0.5604095458984375},{"x":-0.07147216796875,"y":-0.2427978515625},{"x":0.04510498046875,"y":-0.3526763916015625},{"x":-0.34674072265625,"y":0.0850830078125},{"x":0.244384765625,"y":-0.236572265625},{"x":0.03985595703125,"y":-0.14459228515625},{"x":0.216552734375,"y":-0.287689208984375},{"x":0.1534423828125,"y":-0.0479736328125},{"x":0.01708984375,"y":-0.1983795166015625},{"x":-0.02960205078125,"y":-0.26953125},{"x":-0.39532470703125,"y":0.160430908203125},{"x":-0.02392578125,"y":-0.022857666015625},{"x":0.10516357421875,"y":-0.04205322265625},{"x":0.37176513671875,"y":-0.118988037109375},{"x":0.22430419921875,"y":-0.246063232421875},{"x":-0.04058837890625,"y":-0.189910888671875},{"x":0.04742431640625,"y":-0.276611328125},{"x":-0.4825439453125,"y":-0.251983642578125},{"x":0.0721435546875,"y":-0.022491455078125},{"x":0.0650634765625,"y":-0.073211669921875},{"x":0.256866455078125,"y":-0.080841064453125},{"x":-0.21435546875,"y":-0.181488037109375},{"x":-0.06292724609375,"y":-0.101470947265625},{"x":0.11383056640625,"y":0.0784912109375},{"x":0.255645751953125,"y":0.201141357421875},{"x":0.209259033203125,"y":-0.014862060546875},{"x":-0.1204833984375,"y":-0.03582763671875},{"x":-0.06640625,"y":-0.144439697265625},{"x":-0.0750732421875,"y":-0.1558837890625},{"x":-0.11810302734375,"y":-0.209869384765625},{"x":-0.5711669921875,"y":-0.183013916015625},{"x":-0.311614990234375,"y":-0.02099609375},{"x":-0.259979248046875,"y":0.17437744140625},{"x":-0.20672607421875,"y":0.2078857421875},{"x":-0.0728759765625,"y":0.323577880859375},{"x":-0.09783935546875,"y":-0.08001708984375},{"x":-0.1104736328125,"y":-0.1741943359375},{"x":-0.33966064453125,"y":-0.277679443359375},{"x":-0.2705078125,"y":-0.310577392578125},{"x":-0.36895751953125,"y":0.18792724609375},{"x":-0.152130126953125,"y":0.02081298828125},{"x":-0.215728759765625,"y":0.08404541015625},{"x":-0.20355224609375,"y":0.138671875},{"x":0.08355712890625,"y":0.2982177734375},{"x":-0.2647705078125,"y":-0.117767333984375},{"x":-0.04522705078125,"y":-0.32415771484375},{"x":-0.1298828125,"y":-0.36737060546875},{"x":-0.32452392578125,"y":-0.347686767578125}],"optimisedCameraToObject":{"translation":{"x":-0.046819463306286405,"y":-0.06897090555053786,"z":0.46842308759731155},"rotation":{"quaternion":{"W":0.9791219412951526,"X":-0.1876859750074441,"Y":0.06066460115427716,"Z":-0.049132525140778316}}},"cornersUsed":[false,false,false,false,false,false,true,true,true,false,false,true,true,true,false,false,false,false,false,true,true,true,true,false,false,true,true,true,false,false,true,true,true,true,true,true,false,true,true,true,true,true,false,true,false,false,true,true,false,false,true,true,true,true,true,true,true,true,false,false,true,true,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,true,true,true,true,true,false,false,true,true,true,true,false,false,false,true,true,true,true,true,false,false,true,true,true,true,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],"snapshotName":"img0.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img0.png"},{"locationInObjectSpace":[{"x":0.015138402581214905,"y":0.0,"z":-4.766854544868693E-5},{"x":0.10596880316734314,"y":0.0,"z":-1.796737196855247E-4},{"x":0.0,"y":0.015138400718569756,"z":-3.6203240597387776E-5},{"x":0.015138402581214905,"y":0.015138400718569756,"z":-8.38717824080959E-5},{"x":0.0,"y":0.030276799574494362,"z":-6.436130934162065E-5},{"x":0.015138402581214905,"y":0.030276799574494362,"z":-1.1202985479030758E-4},{"x":0.030276797711849213,"y":0.030276799574494362,"z":-1.5236476610880345E-4},{"x":0.13624559342861176,"y":0.030276799574494362,"z":-2.293677971465513E-4},{"x":0.015138402581214905,"y":0.04541520029306412,"z":-1.321427698712796E-4},{"x":0.030276797711849213,"y":0.04541520029306412,"z":-1.7247766663786024E-4},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.060553595423698425,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.07569199800491333,"y":0.04541520029306412,"z":-2.4948068312369287E-4},{"x":0.12110720574855804,"y":0.04541520029306412,"z":-2.604811161290854E-4},{"x":0.030276797711849213,"y":0.06055360287427902,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.06055360287427902,"z":-2.1754672343377024E-4},{"x":0.060553595423698425,"y":0.06055360287427902,"z":-2.4321438104379922E-4},{"x":0.07569199800491333,"y":0.06055360287427902,"z":-2.615484409034252E-4},{"x":0.09083040058612823,"y":0.06055360287427902,"z":-2.7254887390881777E-4},{"x":0.10596880316734314,"y":0.06055360287427902,"z":-2.762156946118921E-4},{"x":0.12110720574855804,"y":0.06055360287427902,"z":-2.7254887390881777E-4},{"x":0.030276797711849213,"y":0.07569199800491333,"z":-1.885679957922548E-4},{"x":0.04541520029306412,"y":0.07569199800491333,"z":-2.2156929480843246E-4},{"x":0.060553595423698425,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.09083040058612823,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.10596880316734314,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.12110720574855804,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.13624559342861176,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.015138402581214905,"y":0.09083040058612823,"z":-1.4421051309909672E-4},{"x":0.030276797711849213,"y":0.09083040058612823,"z":-1.8454540986567736E-4},{"x":0.04541520029306412,"y":0.09083040058612823,"z":-2.1754672343377024E-4},{"x":0.060553595423698425,"y":0.09083040058612823,"z":-2.4321438104379922E-4},{"x":0.07569199800491333,"y":0.09083040058612823,"z":-2.615484409034252E-4},{"x":0.09083040058612823,"y":0.09083040058612823,"z":-2.7254887390881777E-4},{"x":0.10596880316734314,"y":0.09083040058612823,"z":-2.762156946118921E-4},{"x":0.12110720574855804,"y":0.09083040058612823,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.09083040058612823,"z":-2.615484409034252E-4},{"x":0.015138402581214905,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.030276797711849213,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.060553595423698425,"y":0.10596879571676254,"z":-2.311466378159821E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083040058612823,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.10596880316734314,"y":0.10596879571676254,"z":-2.6414793683215976E-4},{"x":0.12110720574855804,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.015138402581214905,"y":0.12110719829797745,"z":-1.120298620662652E-4},{"x":0.030276797711849213,"y":0.12110719829797745,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.12110719829797745,"z":-1.853660651249811E-4},{"x":0.060553595423698425,"y":0.12110719829797745,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.12110719829797745,"z":-2.2936778259463608E-4},{"x":0.09083040058612823,"y":0.12110719829797745,"z":-2.4036823015194386E-4},{"x":0.10596880316734314,"y":0.12110719829797745,"z":-2.4403503630310297E-4},{"x":0.12110720574855804,"y":0.12110719829797745,"z":-2.4036821560002863E-4},{"x":0.13624559342861176,"y":0.12110719829797745,"z":-2.293677971465513E-4}],"locationInImageSpace":[{"x":365.1298522949219,"y":40.00737762451172},{"x":505.7548522949219,"y":27.945817947387695},{"x":342.236572265625,"y":60.297386169433594},{"x":365.5314025878906,"y":58.40753173828125},{"x":342.1869201660156,"y":79.59735870361328},{"x":365.9314270019531,"y":77.94554138183594},{"x":389.15386962890625,"y":75.91256713867188},{"x":558.9563598632812,"y":61.62605285644531},{"x":365.9764709472656,"y":97.63445281982422},{"x":390.01129150390625,"y":95.81075286865234},{"x":414.0498046875,"y":93.74298858642578},{"x":437.9288330078125,"y":91.3733901977539},{"x":462.9100646972656,"y":89.7154312133789},{"x":536.6268310546875,"y":83.50675201416016},{"x":390.4664001464844,"y":115.62908935546875},{"x":414.9228210449219,"y":113.85478210449219},{"x":439.3782043457031,"y":111.93830871582031},{"x":464.13531494140625,"y":109.82633209228516},{"x":489.0034484863281,"y":108.08576202392578},{"x":513.7706298828125,"y":105.97297668457031},{"x":539.2047119140625,"y":103.74186706542969},{"x":391.13568115234375,"y":136.31309509277344},{"x":415.9981689453125,"y":134.52891540527344},{"x":440.5655517578125,"y":132.7245330810547},{"x":465.656494140625,"y":130.71768188476562},{"x":490.76824951171875,"y":128.7725067138672},{"x":516.1844482421875,"y":126.81050109863281},{"x":541.5548095703125,"y":124.80411529541016},{"x":567.28271484375,"y":122.71430969238281},{"x":366.9726257324219,"y":159.21934509277344},{"x":391.7458801269531,"y":157.55397033691406},{"x":416.8453063964844,"y":155.7328643798828},{"x":441.95166015625,"y":154.0059814453125},{"x":467.2168273925781,"y":151.9442596435547},{"x":492.41741943359375,"y":150.18418884277344},{"x":518.3015747070312,"y":148.060791015625},{"x":544.1095581054688,"y":146.153564453125},{"x":570.0598754882812,"y":144.05450439453125},{"x":367.63397216796875,"y":181.1631622314453},{"x":392.09954833984375,"y":179.27816772460938},{"x":417.6607971191406,"y":177.46572875976562},{"x":443.0783386230469,"y":175.76634216308594},{"x":468.8329162597656,"y":173.81394958496094},{"x":494.67840576171875,"y":172.06008911132812},{"x":520.6168823242188,"y":170.0739288330078},{"x":546.954833984375,"y":168.13331604003906},{"x":573.216552734375,"y":166.08169555664062},{"x":367.74688720703125,"y":203.26966857910156},{"x":392.8927917480469,"y":201.5155487060547},{"x":418.55474853515625,"y":200.00404357910156},{"x":444.1979675292969,"y":197.8770751953125},{"x":470.4451904296875,"y":196.20135498046875},{"x":496.6421813964844,"y":194.18995666503906},{"x":522.8888549804688,"y":192.51388549804688},{"x":549.6306762695312,"y":190.8389129638672},{"x":576.4472045898438,"y":188.91021728515625}],"reprojectionErrors":[{"x":0.1705322265625,"y":-0.37511444091796875},{"x":0.07183837890625,"y":-0.3860015869140625},{"x":-0.037628173828125,"y":-0.4411773681640625},{"x":0.0445556640625,"y":-0.2835540771484375},{"x":-0.033203125,"y":-0.0136871337890625},{"x":-0.42303466796875,"y":0.0659942626953125},{"x":9.46044921875E-4,"y":0.01312255859375},{"x":-0.146728515625,"y":-0.162567138671875}],"optimisedCameraToObject":{"translation":{"x":-0.03414136860382011,"y":-0.17318560140350425,"z":0.4466612275745274},"rotation":{"quaternion":{"W":0.9823273132191163,"X":-0.18077771325781525,"Y":0.04378225872242183,"Z":-0.020870599276262846}}},"cornersUsed":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,true,false,false,false,false,false,true,true,true,true,true,false,false,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true],"snapshotName":"img1.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img1.png"},{"locationInObjectSpace":[{"x":0.03027680143713951,"y":0.0,"z":-8.80034567671828E-5},{"x":0.015138399787247181,"y":0.015138399787247181,"z":-8.387177513213828E-5},{"x":0.03027680143713951,"y":0.015138399787247181,"z":-1.2420669372659177E-4},{"x":0.07569199800491333,"y":0.015138399787247181,"z":-2.012097102124244E-4},{"x":0.09083039313554764,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.10596879571676254,"y":0.015138399787247181,"z":-2.1587694936897606E-4},{"x":0.12110719084739685,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.0,"y":0.03027680143713951,"z":-6.436131661757827E-5},{"x":0.015138399787247181,"y":0.03027680143713951,"z":-1.1202985479030758E-4},{"x":0.03027680143713951,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.060553599148988724,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.03027680143713951,"z":-2.2936778259463608E-4},{"x":0.09083039313554764,"y":0.03027680143713951,"z":-2.4036821560002863E-4},{"x":0.10596879571676254,"y":0.03027680143713951,"z":-2.4403503630310297E-4},{"x":0.12110719084739685,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.04541520029306412,"z":-1.3214275531936437E-4},{"x":0.03027680143713951,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.060553599148988724,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.07569199800491333,"y":0.04541520029306412,"z":-2.4948068312369287E-4},{"x":0.09083039313554764,"y":0.04541520029306412,"z":-2.604811161290854E-4},{"x":0.10596879571676254,"y":0.04541520029306412,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.0,"y":0.060553599148988724,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.060553599148988724,"z":-1.442104985471815E-4},{"x":0.03027680143713951,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.060553599148988724,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138399787247181,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.03027680143713951,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.04541520029306412,"y":0.07569199800491333,"z":-2.2156929480843246E-4},{"x":0.060553599148988724,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.09083039313554764,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.10596879571676254,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.12110719084739685,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.015138399787247181,"y":0.09083039313554764,"z":-1.4421051309909672E-4},{"x":0.03027680143713951,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.03027680143713951,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.060553599148988724,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.0,"y":0.12110719084739685,"z":-6.436132389353588E-5},{"x":0.015138399787247181,"y":0.12110719084739685,"z":-1.120298620662652E-4},{"x":0.03027680143713951,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.04541520029306412,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.060553599148988724,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.0,"y":0.13624559342861176,"z":-3.62032515113242E-5},{"x":0.015138399787247181,"y":0.13624559342861176,"z":-8.387178968405351E-5},{"x":0.03027680143713951,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.04541520029306412,"y":0.13624559342861176,"z":-1.5720800729468465E-4}],"locationInImageSpace":[{"x":558.137939453125,"y":22.877365112304688},{"x":535.2265625,"y":47.393516540527344},{"x":561.8321533203125,"y":43.528892517089844},{"x":643.2020263671875,"y":32.16866683959961},{"x":670.8301391601562,"y":28.33759307861328},{"x":698.30908203125,"y":24.82256507873535},{"x":725.9634399414062,"y":20.887453079223633},{"x":512.1043090820312,"y":72.14006805419922},{"x":539.0265502929688,"y":68.36539459228516},{"x":565.7794799804688,"y":64.77849578857422},{"x":593.160400390625,"y":60.63166427612305},{"x":620.4461669921875,"y":57.21889114379883},{"x":648.34228515625,"y":53.317344665527344},{"x":675.9873657226562,"y":49.7095832824707},{"x":704.5243530273438,"y":45.58319854736328},{"x":732.2513427734375,"y":42.19216537475586},{"x":515.3950805664062,"y":93.58560943603516},{"x":542.4566040039062,"y":90.12291717529297},{"x":570.1375122070312,"y":86.23074340820312},{"x":597.5751342773438,"y":82.50093078613281},{"x":625.4989624023438,"y":78.82056427001953},{"x":653.5914306640625,"y":75.08053588867188},{"x":681.833740234375,"y":71.49560546875},{"x":710.317626953125,"y":67.83444213867188},{"x":738.996337890625,"y":63.70845031738281},{"x":518.7913208007812,"y":115.9002685546875},{"x":546.2973022460938,"y":112.19408416748047},{"x":574.07958984375,"y":108.71598052978516},{"x":602.2593383789062,"y":104.91374206542969},{"x":630.2532958984375,"y":101.1832275390625},{"x":659.1666870117188,"y":97.30784606933594},{"x":687.6517333984375,"y":93.48084259033203},{"x":716.7442626953125,"y":89.9105224609375},{"x":745.6995239257812,"y":86.23795318603516},{"x":522.2706909179688,"y":138.7532196044922},{"x":550.0237426757812,"y":135.21681213378906},{"x":578.5408325195312,"y":131.6767578125},{"x":606.8974609375,"y":127.9819107055664},{"x":635.6918334960938,"y":124.1731185913086},{"x":664.8388061523438,"y":120.60562896728516},{"x":693.7510375976562,"y":116.77987670898438},{"x":723.348876953125,"y":112.92757415771484},{"x":752.8070678710938,"y":109.29080963134766},{"x":525.7637329101562,"y":162.35548400878906},{"x":553.9654541015625,"y":158.96978759765625},{"x":582.7544555664062,"y":155.1926727294922},{"x":611.7468872070312,"y":151.76394653320312},{"x":640.9434204101562,"y":148.0216827392578},{"x":529.2388305664062,"y":186.54261779785156},{"x":558.174560546875,"y":183.07061767578125},{"x":587.2980346679688,"y":179.49420166015625},{"x":616.7968139648438,"y":176.07278442382812},{"x":646.5482788085938,"y":172.44383239746094},{"x":533.3035278320312,"y":211.81234741210938},{"x":562.2549438476562,"y":208.1697998046875},{"x":592.05517578125,"y":204.852783203125},{"x":621.8523559570312,"y":201.28341674804688},{"x":651.4462280273438,"y":197.68911743164062},{"x":537.1612548828125,"y":236.93255615234375},{"x":566.537109375,"y":233.76502990722656},{"x":596.9017944335938,"y":230.60350036621094},{"x":627.0811157226562,"y":227.2668914794922}],"reprojectionErrors":[{"x":0.20855712890625,"y":-0.05670928955078125},{"x":0.4066162109375,"y":-0.6713180541992188},{"x":0.04632568359375,"y":-0.07283782958984375},{"x":0.05267333984375,"y":-0.12030792236328125},{"x":-0.01202392578125,"y":-0.1965179443359375},{"x":-0.01104736328125,"y":-0.23615264892578125},{"x":0.0758056640625,"y":-0.45406341552734375},{"x":-0.05133056640625,"y":-0.2147216796875},{"x":0.24700927734375,"y":-0.20053863525390625},{"x":-0.1326904296875,"y":-0.06497955322265625},{"x":0.158935546875,"y":-0.00138092041015625},{"x":0.087646484375,"y":-0.21816253662109375},{"x":0.399658203125,"y":-0.35646820068359375},{"x":-0.086181640625,"y":-0.18408203125},{"x":0.16253662109375,"y":-0.2485198974609375},{"x":-0.10882568359375,"y":-0.3328704833984375},{"x":0.31402587890625,"y":-0.194061279296875},{"x":-0.0567626953125,"y":-0.2309722900390625},{"x":0.180419921875,"y":-0.3959808349609375},{"x":0.0816650390625,"y":-0.1934814453125},{"x":0.03271484375,"y":-0.3633880615234375},{"x":0.0345458984375,"y":-0.2438812255859375},{"x":0.0970458984375,"y":-0.1381683349609375},{"x":0.050537109375,"y":-0.161865234375},{"x":0.07550048828125,"y":-0.105377197265625},{"x":0.0880126953125,"y":-0.2226104736328125},{"x":0.65576171875,"y":-0.1378021240234375},{"x":-0.22918701171875,"y":0.335418701171875},{"x":0.22705078125,"y":0.1333465576171875},{"x":-0.029541015625,"y":-0.0995330810546875},{"x":0.17730712890625,"y":-0.1822967529296875}],"optimisedCameraToObject":{"translation":{"x":0.0655934022001534,"y":-0.16249833324622767,"z":0.4017522145924247},"rotation":{"quaternion":{"W":0.9802582683545559,"X":-0.18366359586330966,"Y":0.06089068964443614,"Z":-0.04066613814602245}}},"cornersUsed":[false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,false,false,false,false,false,false,false,false,false,false],"snapshotName":"img2.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img2.png"},{"locationInObjectSpace":[{"x":0.060553599148988724,"y":0.0,"z":-1.4667242066934705E-4},{"x":0.07569199800491333,"y":0.0,"z":-1.6500648052897304E-4},{"x":0.09083039313554764,"y":0.0,"z":-1.7600689898245037E-4},{"x":0.10596879571676254,"y":0.0,"z":-1.796737196855247E-4},{"x":0.12110719084739685,"y":0.0,"z":-1.760069135343656E-4},{"x":0.13624559342861176,"y":0.0,"z":-1.6500648052897304E-4},{"x":0.15138399600982666,"y":0.0,"z":-1.4667243522126228E-4},{"x":0.16652239859104156,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.18166080117225647,"y":0.0,"z":-8.800344949122518E-5},{"x":0.19679918885231018,"y":0.0,"z":-4.766857091453858E-5},{"x":0.060553599148988724,"y":0.015138399787247181,"z":-1.8287566490471363E-4},{"x":0.07569199800491333,"y":0.015138399787247181,"z":-2.012097102124244E-4},{"x":0.09083039313554764,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.10596879571676254,"y":0.015138399787247181,"z":-2.1587694936897606E-4},{"x":0.12110719084739685,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.13624559342861176,"y":0.015138399787247181,"z":-2.0120972476433963E-4},{"x":0.15138399600982666,"y":0.015138399787247181,"z":-1.8287566490471363E-4},{"x":0.16652239859104156,"y":0.015138399787247181,"z":-1.5720799274276942E-4},{"x":0.060553599148988724,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.03027680143713951,"z":-2.2936778259463608E-4},{"x":0.09083039313554764,"y":0.03027680143713951,"z":-2.4036821560002863E-4},{"x":0.10596879571676254,"y":0.03027680143713951,"z":-2.4403503630310297E-4},{"x":0.12110719084739685,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.13624559342861176,"y":0.03027680143713951,"z":-2.293677971465513E-4},{"x":0.15138399600982666,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.16652239859104156,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.060553599148988724,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.07569199800491333,"y":0.04541520029306412,"z":-2.4948068312369287E-4},{"x":0.09083039313554764,"y":0.04541520029306412,"z":-2.604811161290854E-4},{"x":0.10596879571676254,"y":0.04541520029306412,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.04541520029306412,"z":-2.494807122275233E-4},{"x":0.18166080117225647,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.19679918885231018,"y":0.04541520029306412,"z":-1.3214279897511005E-4},{"x":0.03027680143713951,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.060553599148988724,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.18166080117225647,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.060553599148988724,"z":-1.4421054220292717E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138399787247181,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.060553599148988724,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.09083039313554764,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.10596879571676254,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.015138399787247181,"y":0.09083039313554764,"z":-1.4421051309909672E-4},{"x":0.07569199800491333,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.03027680143713951,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083039313554764,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.19679918885231018,"y":0.10596879571676254,"z":-1.3214279897511005E-4},{"x":0.015138399787247181,"y":0.12110719084739685,"z":-1.120298620662652E-4},{"x":0.03027680143713951,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.04541520029306412,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.060553599148988724,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.07569199800491333,"y":0.12110719084739685,"z":-2.293677971465513E-4},{"x":0.09083039313554764,"y":0.12110719084739685,"z":-2.4036823015194386E-4},{"x":0.10596879571676254,"y":0.12110719084739685,"z":-2.440350508550182E-4},{"x":0.015138399787247181,"y":0.13624559342861176,"z":-8.387178968405351E-5},{"x":0.03027680143713951,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.04541520029306412,"y":0.13624559342861176,"z":-1.5720800729468465E-4},{"x":0.060553599148988724,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.07569199800491333,"y":0.13624559342861176,"z":-2.0120972476433963E-4},{"x":0.09083039313554764,"y":0.13624559342861176,"z":-2.1221015776973218E-4},{"x":0.10596879571676254,"y":0.13624559342861176,"z":-2.1587696392089128E-4},{"x":0.12110719084739685,"y":0.13624559342861176,"z":-2.1221015776973218E-4}],"locationInImageSpace":[{"x":528.307373046875,"y":274.7949523925781},{"x":549.9556274414062,"y":272.2611083984375},{"x":571.2125244140625,"y":270.3226623535156},{"x":593.2522583007812,"y":267.8631286621094},{"x":615.77587890625,"y":265.78338623046875},{"x":638.6861572265625,"y":263.22186279296875},{"x":661.2365112304688,"y":261.00897216796875},{"x":684.7418212890625,"y":258.76995849609375},{"x":708.6629638671875,"y":256.068359375},{"x":732.3875122070312,"y":254.05368041992188},{"x":529.7793579101562,"y":293.7116394042969},{"x":551.7725219726562,"y":291.3599548339844},{"x":573.5811767578125,"y":289.10650634765625},{"x":595.7408447265625,"y":286.9660949707031},{"x":618.9957275390625,"y":285.1078796386719},{"x":641.4423217773438,"y":282.46087646484375},{"x":665.0226440429688,"y":280.29571533203125},{"x":689.0665283203125,"y":278.2348937988281},{"x":531.512939453125,"y":312.7163391113281},{"x":553.5891723632812,"y":310.5579833984375},{"x":575.992919921875,"y":308.9488220214844},{"x":598.7822875976562,"y":306.8076477050781},{"x":621.5939331054688,"y":304.2615966796875},{"x":645.1847534179688,"y":302.5587463378906},{"x":668.7240600585938,"y":300.347900390625},{"x":692.9080810546875,"y":298.0234375},{"x":511.16864013671875,"y":334.1908264160156},{"x":533.238525390625,"y":332.3530578613281},{"x":555.7392578125,"y":330.8931884765625},{"x":578.1386108398438,"y":328.6977233886719},{"x":601.4945068359375,"y":326.9735412597656},{"x":624.9711303710938,"y":324.9736633300781},{"x":648.5176391601562,"y":322.94024658203125},{"x":721.86328125,"y":316.6202697753906},{"x":746.8681640625,"y":314.8149719238281},{"x":491.0425109863281,"y":356.19384765625},{"x":512.9415893554688,"y":354.7389831542969},{"x":534.984619140625,"y":352.83148193359375},{"x":557.9813842773438,"y":351.0308837890625},{"x":580.824951171875,"y":349.3463439941406},{"x":604.1525268554688,"y":347.5060729980469},{"x":628.1882934570312,"y":345.848388671875},{"x":726.872314453125,"y":338.0292663574219},{"x":752.0193481445312,"y":336.0814208984375},{"x":447.79327392578125,"y":380.7911682128906},{"x":469.9198913574219,"y":378.6308288574219},{"x":537.0505981445312,"y":373.81201171875},{"x":560.07666015625,"y":372.00189208984375},{"x":583.5030517578125,"y":370.6822509765625},{"x":606.9530029296875,"y":368.61480712890625},{"x":449.2855529785156,"y":401.18994140625},{"x":470.9940490722656,"y":399.8943176269531},{"x":562.3297119140625,"y":394.0592346191406},{"x":585.9244384765625,"y":392.231201171875},{"x":449.5760803222656,"y":422.6255187988281},{"x":471.8785400390625,"y":421.86102294921875},{"x":494.685546875,"y":420.06341552734375},{"x":564.8964233398438,"y":416.0641784667969},{"x":588.8307495117188,"y":414.94482421875},{"x":768.9838256835938,"y":404.9325866699219},{"x":473.3303527832031,"y":444.021728515625},{"x":496.1233215332031,"y":443.0205993652344},{"x":519.8238525390625,"y":441.7005310058594},{"x":543.2627563476562,"y":440.576904296875},{"x":567.4541625976562,"y":439.31622314453125},{"x":591.4789428710938,"y":438.0569763183594},{"x":616.7256469726562,"y":437.00262451171875},{"x":474.2317199707031,"y":467.2280578613281},{"x":497.85101318359375,"y":466.11627197265625},{"x":521.3065795898438,"y":465.0653991699219},{"x":545.2451782226562,"y":464.087646484375},{"x":569.9932250976562,"y":462.9776306152344},{"x":594.881103515625,"y":462.0904846191406},{"x":620.0166625976562,"y":461.0064697265625},{"x":645.225830078125,"y":459.99053955078125}],"reprojectionErrors":[{"x":0.16864013671875,"y":-0.227264404296875},{"x":-0.11627197265625,"y":0.0277099609375},{"x":0.2603759765625,"y":-0.09173583984375},{"x":-0.01116943359375,"y":-0.21124267578125},{"x":-0.38653564453125,"y":0.105224609375},{"x":-0.2479248046875,"y":-0.2923126220703125},{"x":0.25128173828125,"y":-0.411651611328125},{"x":0.0303955078125,"y":-0.1734619140625},{"x":0.2840576171875,"y":-0.0570068359375},{"x":0.481689453125,"y":-0.077484130859375},{"x":0.23486328125,"y":-0.128387451171875},{"x":0.243408203125,"y":0.016632080078125},{"x":0.22271728515625,"y":-0.4102783203125},{"x":0.1197509765625,"y":-0.328277587890625},{"x":0.30322265625,"y":0.13507080078125},{"x":0.02154541015625,"y":-0.268646240234375},{"x":0.1109619140625,"y":-0.188690185546875},{"x":-0.119140625,"y":-0.01983642578125},{"x":0.14862060546875,"y":-0.278411865234375},{"x":-0.2000732421875,"y":-0.089691162109375},{"x":-0.1864013671875,"y":-0.37689208984375},{"x":-0.260772705078125,"y":0.141693115234375},{"x":-0.03851318359375,"y":-0.155731201171875},{"x":0.3446044921875,"y":-0.02069091796875},{"x":0.08428955078125,"y":-0.013092041015625},{"x":0.29290771484375,"y":-0.1424560546875},{"x":-0.05780029296875,"y":0.060638427734375},{"x":0.14697265625,"y":-0.021087646484375},{"x":0.197265625,"y":0.1170654296875},{"x":0.17230224609375,"y":-0.25506591796875},{"x":0.45477294921875,"y":0.1004638671875},{"x":-0.640167236328125,"y":0.185516357421875},{"x":-0.2027587890625,"y":0.0091552734375},{"x":-0.2955322265625,"y":0.44287109375},{"x":-0.1297607421875,"y":-0.13262939453125},{"x":0.18756103515625,"y":-0.16204833984375},{"x":-0.8209228515625,"y":-0.61767578125},{"x":-0.5946044921875,"y":0.170196533203125},{"x":-0.2578125,"y":-0.0428466796875},{"x":-0.49237060546875,"y":0.048309326171875},{"x":-0.122802734375,"y":-0.07208251953125},{"x":-0.15679931640625,"y":-0.070709228515625},{"x":-0.616851806640625,"y":0.141815185546875},{"x":-0.245361328125,"y":0.1163330078125},{"x":-0.00384521484375,"y":0.004364013671875},{"x":-0.21209716796875,"y":0.011016845703125},{"x":0.40399169921875,"y":-0.396270751953125}],"optimisedCameraToObject":{"translation":{"x":0.03742692968792968,"y":-0.017590727997023162,"z":0.5043301537547901},"rotation":{"quaternion":{"W":0.9685121738835984,"X":-0.220537664822406,"Y":0.11329957573618059,"Z":-0.022594547394182436}}},"cornersUsed":[false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,false,false,true,true,false,false,true,true,true,true,true,true,true,false,false,false,true,true,true,true,false,false,true,true,true,true,false,false,false,false,false,false,true,true,false,false,false,true,true,false,false,false,false,false,false,false,true,true,true,false,false,true,true,false,false,false,false,false,false,true,false,true,true,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false],"snapshotName":"img3.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img3.png"},{"locationInObjectSpace":[{"x":0.0,"y":0.0,"z":-0.0},{"x":0.09083039313554764,"y":0.0,"z":-1.7600689898245037E-4},{"x":0.10596879571676254,"y":0.0,"z":-1.796737196855247E-4},{"x":0.12110719084739685,"y":0.0,"z":-1.760069135343656E-4},{"x":0.13624559342861176,"y":0.0,"z":-1.6500648052897304E-4},{"x":0.15138399600982666,"y":0.0,"z":-1.4667243522126228E-4},{"x":0.16652239859104156,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.18166080117225647,"y":0.0,"z":-8.800344949122518E-5},{"x":0.19679918885231018,"y":0.0,"z":-4.766857091453858E-5},{"x":0.0,"y":0.015138399787247181,"z":-3.620323695940897E-5},{"x":0.09083039313554764,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.10596879571676254,"y":0.015138399787247181,"z":-2.1587694936897606E-4},{"x":0.12110719084739685,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.13624559342861176,"y":0.015138399787247181,"z":-2.0120972476433963E-4},{"x":0.15138399600982666,"y":0.015138399787247181,"z":-1.8287566490471363E-4},{"x":0.16652239859104156,"y":0.015138399787247181,"z":-1.5720799274276942E-4},{"x":0.18166080117225647,"y":0.015138399787247181,"z":-1.2420669372659177E-4},{"x":0.19679918885231018,"y":0.015138399787247181,"z":-8.387180423596874E-5},{"x":0.0,"y":0.03027680143713951,"z":-6.436131661757827E-5},{"x":0.015138399787247181,"y":0.03027680143713951,"z":-1.1202985479030758E-4},{"x":0.03027680143713951,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.09083039313554764,"y":0.03027680143713951,"z":-2.4036821560002863E-4},{"x":0.10596879571676254,"y":0.03027680143713951,"z":-2.4403503630310297E-4},{"x":0.12110719084739685,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.13624559342861176,"y":0.03027680143713951,"z":-2.293677971465513E-4},{"x":0.15138399600982666,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.16652239859104156,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.18166080117225647,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.19679918885231018,"y":0.03027680143713951,"z":-1.1202988389413804E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.04541520029306412,"z":-1.3214275531936437E-4},{"x":0.03027680143713951,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.060553599148988724,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.07569199800491333,"y":0.04541520029306412,"z":-2.4948068312369287E-4},{"x":0.09083039313554764,"y":0.04541520029306412,"z":-2.604811161290854E-4},{"x":0.10596879571676254,"y":0.04541520029306412,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.04541520029306412,"z":-2.494807122275233E-4},{"x":0.15138399600982666,"y":0.04541520029306412,"z":-2.3114665236789733E-4},{"x":0.16652239859104156,"y":0.04541520029306412,"z":-2.0547898020595312E-4},{"x":0.18166080117225647,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.19679918885231018,"y":0.04541520029306412,"z":-1.3214279897511005E-4},{"x":0.0,"y":0.060553599148988724,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.060553599148988724,"z":-1.442104985471815E-4},{"x":0.03027680143713951,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.060553599148988724,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.15138399600982666,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.16652239859104156,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.18166080117225647,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.060553599148988724,"z":-1.4421054220292717E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138399787247181,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.03027680143713951,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.04541520029306412,"y":0.07569199800491333,"z":-2.2156929480843246E-4},{"x":0.060553599148988724,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.09083039313554764,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.10596879571676254,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.12110719084739685,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.13624559342861176,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.15138399600982666,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.16652239859104156,"y":0.07569199800491333,"z":-2.215693093603477E-4},{"x":0.18166080117225647,"y":0.07569199800491333,"z":-1.885679957922548E-4},{"x":0.19679918885231018,"y":0.07569199800491333,"z":-1.482331135775894E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.015138399787247181,"y":0.09083039313554764,"z":-1.4421051309909672E-4},{"x":0.03027680143713951,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.09083039313554764,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.15138399600982666,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.16652239859104156,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.18166080117225647,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.09083039313554764,"z":-1.4421054220292717E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.03027680143713951,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.060553599148988724,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083039313554764,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.10596879571676254,"y":0.10596879571676254,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.15138399600982666,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.16652239859104156,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.18166080117225647,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.19679918885231018,"y":0.10596879571676254,"z":-1.3214279897511005E-4},{"x":0.16652239859104156,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.18166080117225647,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.19679918885231018,"y":0.12110719084739685,"z":-1.1202989844605327E-4}],"locationInImageSpace":[{"x":342.7744445800781,"y":422.9861755371094},{"x":460.25482177734375,"y":406.7327575683594},{"x":480.8957214355469,"y":404.24774169921875},{"x":501.45526123046875,"y":401.1860046386719},{"x":522.2667236328125,"y":398.3022155761719},{"x":543.3924560546875,"y":395.1812744140625},{"x":564.7644653320312,"y":392.3099060058594},{"x":586.5451049804688,"y":389.4791564941406},{"x":608.2172241210938,"y":386.5677185058594},{"x":343.939208984375,"y":442.885986328125},{"x":463.0870056152344,"y":426.6966857910156},{"x":483.6993408203125,"y":424.2520751953125},{"x":504.400146484375,"y":421.4656677246094},{"x":525.5316772460938,"y":418.7244567871094},{"x":547.0831909179688,"y":416.00433349609375},{"x":568.8133544921875,"y":413.165283203125},{"x":590.773681640625,"y":410.3506164550781},{"x":612.6106567382812,"y":407.6275329589844},{"x":344.9212341308594,"y":463.0124206542969},{"x":364.1722412109375,"y":460.38995361328125},{"x":383.8548583984375,"y":457.9842224121094},{"x":403.8147277832031,"y":455.50457763671875},{"x":465.12445068359375,"y":447.9605407714844},{"x":486.25079345703125,"y":444.96917724609375},{"x":507.2002868652344,"y":442.1766662597656},{"x":528.9012451171875,"y":439.9765930175781},{"x":550.60009765625,"y":437.1607666015625},{"x":572.9046630859375,"y":434.4134521484375},{"x":595.0099487304688,"y":431.6478271484375},{"x":617.2257080078125,"y":428.8395080566406},{"x":345.33843994140625,"y":483.772216796875},{"x":365.0399475097656,"y":481.1308898925781},{"x":385.4454345703125,"y":478.8917236328125},{"x":405.3395080566406,"y":476.32177734375},{"x":426.13067626953125,"y":473.98565673828125},{"x":446.715087890625,"y":471.703369140625},{"x":467.3533630371094,"y":468.983642578125},{"x":488.9335632324219,"y":466.1452941894531},{"x":510.3573303222656,"y":463.9790344238281},{"x":532.0797119140625,"y":461.33795166015625},{"x":554.2045288085938,"y":458.861328125},{"x":576.8139038085938,"y":456.12701416015625},{"x":599.2818603515625,"y":453.49395751953125},{"x":622.2294921875,"y":450.6594543457031},{"x":346.1457824707031,"y":505.16302490234375},{"x":366.326904296875,"y":502.4986572265625},{"x":386.6182556152344,"y":500.40948486328125},{"x":407.073486328125,"y":498.1714782714844},{"x":427.81805419921875,"y":496.0325012207031},{"x":448.94415283203125,"y":493.24798583984375},{"x":470.1167297363281,"y":490.9620666503906},{"x":491.8778991699219,"y":488.5472717285156},{"x":513.5202026367188,"y":486.1206970214844},{"x":535.75,"y":483.5254211425781},{"x":558.4537963867188,"y":480.8907470703125},{"x":580.7623901367188,"y":478.5961608886719},{"x":604.0098876953125,"y":476.0467224121094},{"x":627.4522094726562,"y":473.51318359375},{"x":347.0906677246094,"y":526.876708984375},{"x":367.27325439453125,"y":525.0610961914062},{"x":388.06982421875,"y":522.4514770507812},{"x":408.8840026855469,"y":520.1282348632812},{"x":430.07904052734375,"y":518.0780029296875},{"x":451.06036376953125,"y":515.7879638671875},{"x":473.0257568359375,"y":513.3065185546875},{"x":494.55712890625,"y":510.87353515625},{"x":516.8287963867188,"y":508.4520568847656},{"x":539.3373413085938,"y":506.11700439453125},{"x":562.169189453125,"y":504.10076904296875},{"x":585.08984375,"y":501.5392761230469},{"x":608.3443603515625,"y":499.111083984375},{"x":632.026611328125,"y":496.6085205078125},{"x":348.1119689941406,"y":549.591552734375},{"x":369.0688171386719,"y":547.2720947265625},{"x":389.4714660644531,"y":545.078125},{"x":410.92181396484375,"y":542.772216796875},{"x":431.9920959472656,"y":541.032958984375},{"x":453.46063232421875,"y":538.78076171875},{"x":475.9687194824219,"y":536.3364868164062},{"x":497.9583740234375,"y":534.2424926757812},{"x":520.0700073242188,"y":532.10009765625},{"x":543.205078125,"y":529.892578125},{"x":566.1095581054688,"y":527.8761596679688},{"x":589.5203247070312,"y":525.468994140625},{"x":613.3394165039062,"y":522.960205078125},{"x":637.368408203125,"y":520.7373046875},{"x":348.9916076660156,"y":572.2523803710938},{"x":369.76397705078125,"y":570.665771484375},{"x":391.25506591796875,"y":568.421875},{"x":412.4739074707031,"y":566.1716918945312},{"x":434.0899658203125,"y":564.1782836914062},{"x":455.98486328125,"y":562.494873046875},{"x":478.0699157714844,"y":560.147705078125},{"x":500.9654235839844,"y":558.0880737304688},{"x":523.6394653320312,"y":556.0183715820312},{"x":546.9857788085938,"y":553.9234619140625},{"x":570.2828979492188,"y":551.7709350585938},{"x":593.9518432617188,"y":549.853759765625},{"x":618.2899780273438,"y":547.5555419921875},{"x":642.6498413085938,"y":545.1014404296875},{"x":598.8231201171875,"y":574.8338012695312},{"x":623.23046875,"y":572.648193359375},{"x":647.988037109375,"y":570.7882080078125}],"reprojectionErrors":[{"x":-0.114501953125,"y":0.10150146484375},{"x":0.5125732421875,"y":0.01885986328125},{"x":0.4581298828125,"y":-0.135498046875},{"x":0.77618408203125,"y":-0.242645263671875},{"x":-0.443359375,"y":-0.036834716796875},{"x":-0.275543212890625,"y":0.343780517578125},{"x":-0.15423583984375,"y":0.0499267578125},{"x":0.130401611328125,"y":0.06707763671875},{"x":0.23980712890625,"y":0.0078125},{"x":0.18853759765625,"y":-0.104217529296875},{"x":-0.1839599609375,"y":0.13519287109375},{"x":-0.12799072265625,"y":0.085052490234375},{"x":0.0853271484375,"y":-0.133575439453125},{"x":-0.02923583984375,"y":0.211029052734375},{"x":0.2913818359375,"y":0.326446533203125},{"x":0.122802734375,"y":-0.18133544921875},{"x":0.2225341796875,"y":-0.1046142578125},{"x":-0.01318359375,"y":-0.12811279296875},{"x":0.2247314453125,"y":-0.165496826171875},{"x":0.63079833984375,"y":-0.192840576171875},{"x":-0.0986328125,"y":0.069244384765625},{"x":-0.013153076171875,"y":0.33111572265625},{"x":-0.27398681640625,"y":0.172576904296875},{"x":-0.079803466796875,"y":-0.036163330078125},{"x":0.31781005859375,"y":0.16357421875},{"x":0.034698486328125,"y":0.45257568359375},{"x":0.1732177734375,"y":0.0396728515625},{"x":0.28240966796875,"y":0.071319580078125},{"x":0.26251220703125,"y":-0.092193603515625},{"x":0.03570556640625,"y":-0.029205322265625},{"x":0.23223876953125,"y":-0.09912109375},{"x":0.2353515625,"y":2.44140625E-4},{"x":0.0037841796875,"y":-0.055816650390625},{"x":-0.13671875,"y":0.32891845703125},{"x":-0.138916015625,"y":0.11175537109375},{"x":-0.05267333984375,"y":0.016357421875},{"x":3.96728515625E-4,"y":-0.205535888671875},{"x":-0.0679931640625,"y":0.190155029296875},{"x":0.081207275390625,"y":0.058929443359375},{"x":-0.089996337890625,"y":0.027801513671875},{"x":0.12994384765625,"y":-0.020721435546875},{"x":0.0389404296875,"y":0.06976318359375},{"x":-0.2452392578125,"y":0.1695556640625},{"x":0.15106201171875,"y":-0.101318359375},{"x":-0.10174560546875,"y":-0.148406982421875},{"x":-0.25506591796875,"y":-0.242950439453125},{"x":-0.004913330078125,"y":0.03387451171875},{"x":0.113037109375,"y":-0.3243408203125},{"x":-0.128082275390625,"y":0.0853271484375},{"x":-0.127960205078125,"y":0.18231201171875},{"x":-0.245819091796875,"y":-0.0206298828125},{"x":0.11700439453125,"y":-0.01092529296875},{"x":-0.233184814453125,"y":0.16253662109375},{"x":0.126068115234375,"y":0.259429931640625},{"x":0.024658203125,"y":0.316314697265625},{"x":-0.02947998046875,"y":0.2578125},{"x":-0.1182861328125,"y":-0.148895263671875},{"x":-0.002685546875,"y":-0.040252685546875},{"x":0.0770263671875,"y":-0.09527587890625},{"x":0.0316162109375,"y":-0.10675048828125},{"x":-0.062652587890625,"y":-0.3201904296875},{"x":-0.4525146484375,"y":-0.06268310546875},{"x":-0.026611328125,"y":0.04412841796875},{"x":-0.382781982421875,"y":0.23724365234375},{"x":-0.08905029296875,"y":-0.162353515625},{"x":0.08050537109375,"y":-0.075439453125},{"x":-0.511077880859375,"y":0.17669677734375},{"x":-0.30133056640625,"y":0.05120849609375},{"x":0.07379150390625,"y":-0.0535888671875},{"x":-0.28253173828125,"y":-0.12139892578125},{"x":-0.11151123046875,"y":-0.408935546875},{"x":-0.145263671875,"y":-0.33477783203125},{"x":-0.28094482421875,"y":-0.1885986328125},{"x":-0.31512451171875,"y":-0.35833740234375},{"x":0.049652099609375,"y":-0.04241943359375},{"x":0.117523193359375,"y":-0.399169921875},{"x":-0.264892578125,"y":-0.12298583984375},{"x":-0.10235595703125,"y":0.13470458984375},{"x":-0.05999755859375,"y":0.1104736328125},{"x":-0.01495361328125,"y":-0.2493896484375},{"x":0.125946044921875,"y":0.028564453125},{"x":-0.2529296875,"y":-0.0074462890625},{"x":-0.114990234375,"y":-0.0601806640625},{"x":-0.34906005859375,"y":-0.114990234375},{"x":-0.22882080078125,"y":-0.139892578125},{"x":-0.17022705078125,"y":-0.42828369140625},{"x":-0.465576171875,"y":-0.36431884765625},{"x":-0.46209716796875,"y":-0.17352294921875},{"x":-0.51153564453125,"y":-0.43450927734375},{"x":-0.50604248046875,"y":-0.34649658203125},{"x":-0.52081298828125,"y":-0.61212158203125}],"optimisedCameraToObject":{"translation":{"x":-0.03942295159851743,"y":0.08818535212873384,"z":0.5187139392797832},"rotation":{"quaternion":{"W":0.9709184236941156,"X":-0.20193317787513174,"Y":0.11314114367896098,"Z":-0.06115135167435715}}},"cornersUsed":[true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false],"snapshotName":"img4.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img4.png"},{"locationInObjectSpace":[{"x":0.0,"y":0.0,"z":-0.0},{"x":0.015138399787247181,"y":0.0,"z":-4.766853817272931E-5},{"x":0.03027680143713951,"y":0.0,"z":-8.80034567671828E-5},{"x":0.07569199800491333,"y":0.0,"z":-1.6500648052897304E-4},{"x":0.09083039313554764,"y":0.0,"z":-1.7600689898245037E-4},{"x":0.10596879571676254,"y":0.0,"z":-1.796737196855247E-4},{"x":0.12110719084739685,"y":0.0,"z":-1.760069135343656E-4},{"x":0.16652239859104156,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.0,"y":0.015138399787247181,"z":-3.620323695940897E-5},{"x":0.015138399787247181,"y":0.015138399787247181,"z":-8.387177513213828E-5},{"x":0.03027680143713951,"y":0.015138399787247181,"z":-1.2420669372659177E-4},{"x":0.07569199800491333,"y":0.015138399787247181,"z":-2.012097102124244E-4},{"x":0.09083039313554764,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.10596879571676254,"y":0.015138399787247181,"z":-2.1587694936897606E-4},{"x":0.12110719084739685,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.0,"y":0.03027680143713951,"z":-6.436131661757827E-5},{"x":0.015138399787247181,"y":0.03027680143713951,"z":-1.1202985479030758E-4},{"x":0.03027680143713951,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.060553599148988724,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.03027680143713951,"z":-2.2936778259463608E-4},{"x":0.09083039313554764,"y":0.03027680143713951,"z":-2.4036821560002863E-4},{"x":0.10596879571676254,"y":0.03027680143713951,"z":-2.4403503630310297E-4},{"x":0.12110719084739685,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.04541520029306412,"z":-1.3214275531936437E-4},{"x":0.03027680143713951,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.060553599148988724,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.07569199800491333,"y":0.04541520029306412,"z":-2.4948068312369287E-4},{"x":0.09083039313554764,"y":0.04541520029306412,"z":-2.604811161290854E-4},{"x":0.10596879571676254,"y":0.04541520029306412,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.0,"y":0.060553599148988724,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.060553599148988724,"z":-1.442104985471815E-4},{"x":0.03027680143713951,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.060553599148988724,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138399787247181,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.03027680143713951,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.04541520029306412,"y":0.07569199800491333,"z":-2.2156929480843246E-4},{"x":0.060553599148988724,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.09083039313554764,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.10596879571676254,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.12110719084739685,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.13624559342861176,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.015138399787247181,"y":0.09083039313554764,"z":-1.4421051309909672E-4},{"x":0.03027680143713951,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.09083039313554764,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.03027680143713951,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.060553599148988724,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083039313554764,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.10596879571676254,"y":0.10596879571676254,"z":-2.6414793683215976E-4},{"x":0.0,"y":0.12110719084739685,"z":-6.436132389353588E-5},{"x":0.015138399787247181,"y":0.12110719084739685,"z":-1.120298620662652E-4},{"x":0.03027680143713951,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.04541520029306412,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.060553599148988724,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.07569199800491333,"y":0.12110719084739685,"z":-2.293677971465513E-4},{"x":0.09083039313554764,"y":0.12110719084739685,"z":-2.4036823015194386E-4},{"x":0.0,"y":0.13624559342861176,"z":-3.62032515113242E-5},{"x":0.015138399787247181,"y":0.13624559342861176,"z":-8.387178968405351E-5},{"x":0.03027680143713951,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.04541520029306412,"y":0.13624559342861176,"z":-1.5720800729468465E-4},{"x":0.060553599148988724,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.07569199800491333,"y":0.13624559342861176,"z":-2.0120972476433963E-4},{"x":0.09083039313554764,"y":0.13624559342861176,"z":-2.1221015776973218E-4},{"x":0.13624559342861176,"y":0.13624559342861176,"z":-2.0120973931625485E-4},{"x":0.15138399600982666,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.19679918885231018,"y":0.13624559342861176,"z":-8.387181878788397E-5}],"locationInImageSpace":[{"x":315.29290771484375,"y":421.31890869140625},{"x":330.87396240234375,"y":407.5302429199219},{"x":345.4388732910156,"y":392.68133544921875},{"x":392.7151184082031,"y":352.5052490234375},{"x":407.53802490234375,"y":337.66510009765625},{"x":423.2727966308594,"y":325.3955078125},{"x":438.67431640625,"y":311.95635986328125},{"x":484.49774169921875,"y":271.3263244628906},{"x":326.07818603515625,"y":436.2390441894531},{"x":341.8666076660156,"y":422.2398376464844},{"x":357.58563232421875,"y":408.187255859375},{"x":404.48394775390625,"y":366.3390808105469},{"x":420.0838317871094,"y":352.4261779785156},{"x":435.81976318359375,"y":338.67950439453125},{"x":451.1897888183594,"y":324.96502685546875},{"x":336.9405822753906,"y":451.8191223144531},{"x":352.9322204589844,"y":437.5078125},{"x":368.9204406738281,"y":423.10491943359375},{"x":384.8755798339844,"y":408.88311767578125},{"x":400.802734375,"y":394.8055725097656},{"x":416.66998291015625,"y":380.48052978515625},{"x":432.371337890625,"y":366.4314880371094},{"x":448.4696044921875,"y":352.22821044921875},{"x":464.24200439453125,"y":338.2129211425781},{"x":348.36553955078125,"y":467.4915466308594},{"x":364.6340637207031,"y":453.0838928222656},{"x":380.88092041015625,"y":438.4759826660156},{"x":396.971923828125,"y":424.0755310058594},{"x":413.0622253417969,"y":409.7403259277344},{"x":429.1858825683594,"y":395.17578125},{"x":445.36407470703125,"y":380.9874267578125},{"x":461.6615295410156,"y":366.5951843261719},{"x":477.5059814453125,"y":352.234619140625},{"x":359.9377136230469,"y":484.2501525878906},{"x":376.42498779296875,"y":469.3724060058594},{"x":392.9847717285156,"y":454.64239501953125},{"x":409.7103576660156,"y":439.9002990722656},{"x":425.9883117675781,"y":425.16644287109375},{"x":442.28704833984375,"y":410.42608642578125},{"x":458.76885986328125,"y":395.9587707519531},{"x":475.1712646484375,"y":381.2016906738281},{"x":491.5317077636719,"y":366.8017578125},{"x":507.9325256347656,"y":352.2386474609375},{"x":372.02874755859375,"y":501.47662353515625},{"x":388.9684143066406,"y":486.34771728515625},{"x":405.7710266113281,"y":471.3106994628906},{"x":422.5150451660156,"y":456.2147216796875},{"x":439.1475830078125,"y":441.1832275390625},{"x":456.0331726074219,"y":426.19091796875},{"x":472.7373352050781,"y":411.2598571777344},{"x":489.2166748046875,"y":396.3513488769531},{"x":505.96160888671875,"y":381.5052795410156},{"x":522.4794311523438,"y":366.8887939453125},{"x":384.6270446777344,"y":519.4572143554688},{"x":401.8417053222656,"y":504.0591125488281},{"x":418.93670654296875,"y":488.52197265625},{"x":435.97125244140625,"y":473.0582580566406},{"x":453.0401916503906,"y":457.92401123046875},{"x":470.0804138183594,"y":442.7356262207031},{"x":486.97528076171875,"y":427.5995178222656},{"x":504.01470947265625,"y":412.0977478027344},{"x":520.8173828125,"y":397.2879943847656},{"x":397.87860107421875,"y":537.8987426757812},{"x":415.2188720703125,"y":522.1643676757812},{"x":432.5986022949219,"y":506.70147705078125},{"x":449.99468994140625,"y":490.8010559082031},{"x":467.2859802246094,"y":475.26043701171875},{"x":484.61376953125,"y":459.8034362792969},{"x":501.9126281738281,"y":444.02410888671875},{"x":518.9378662109375,"y":428.5255432128906},{"x":411.2889099121094,"y":557.1781616210938},{"x":429.1729736328125,"y":541.0665283203125},{"x":446.91796875,"y":525.0857543945312},{"x":464.4822998046875,"y":509.1266784667969},{"x":482.0394592285156,"y":493.2948303222656},{"x":499.8591003417969,"y":477.41363525390625},{"x":517.2202758789062,"y":461.77203369140625},{"x":425.3810119628906,"y":577.1795654296875},{"x":443.6087341308594,"y":560.8740234375},{"x":461.75494384765625,"y":544.3479614257812},{"x":479.6517028808594,"y":528.1582641601562},{"x":497.8642272949219,"y":512.076171875},{"x":515.4520263671875,"y":495.85003662109375},{"x":533.4877319335938,"y":479.80584716796875},{"x":587.4869384765625,"y":431.4142150878906},{"x":605.1578979492188,"y":415.1940002441406},{"x":658.7562866210938,"y":368.0403747558594}],"reprojectionErrors":[{"x":-0.122711181640625,"y":-0.165374755859375},{"x":-0.222503662109375,"y":-0.17083740234375},{"x":-0.03887939453125,"y":-0.389892578125},{"x":0.12744140625,"y":-0.79736328125},{"x":-0.296661376953125,"y":-0.093658447265625},{"x":-0.19439697265625,"y":-0.15228271484375},{"x":0.010772705078125,"y":-0.50360107421875},{"x":-0.185760498046875,"y":-0.1744384765625},{"x":-0.1881103515625,"y":-0.139190673828125},{"x":-0.182891845703125,"y":-0.145538330078125},{"x":-0.12420654296875,"y":-0.015106201171875},{"x":0.08306884765625,"y":-0.139068603515625},{"x":-0.124420166015625,"y":-0.086639404296875},{"x":-0.02801513671875,"y":-0.059478759765625},{"x":0.03759765625,"y":0.058807373046875},{"x":0.03057861328125,"y":-0.176971435546875},{"x":-0.114410400390625,"y":-0.18621826171875},{"x":0.174346923828125,"y":-0.203948974609375},{"x":-0.07666015625,"y":0.01873779296875},{"x":-0.03314208984375,"y":0.104461669921875},{"x":-0.07861328125,"y":0.062957763671875},{"x":-0.306976318359375,"y":0.0545654296875},{"x":0.060791015625,"y":-0.3145751953125},{"x":0.0052490234375,"y":-0.026763916015625},{"x":-0.119293212890625,"y":0.03826904296875},{"x":-0.124053955078125,"y":0.032379150390625},{"x":-0.088165283203125,"y":0.106964111328125},{"x":0.040679931640625,"y":0.139190673828125},{"x":-0.102752685546875,"y":0.1549072265625},{"x":-0.084625244140625,"y":0.132568359375},{"x":0.137908935546875,"y":0.1114501953125},{"x":-0.049713134765625,"y":0.220428466796875},{"x":-0.06591796875,"y":0.075164794921875},{"x":-0.073516845703125,"y":0.00726318359375},{"x":0.043426513671875,"y":-0.089141845703125},{"x":-0.005615234375,"y":0.204498291015625},{"x":0.1600341796875,"y":-0.1689453125},{"x":-0.148406982421875,"y":-0.19403076171875},{"x":-0.075286865234375,"y":-0.09759521484375},{"x":-0.060699462890625,"y":-0.25067138671875},{"x":-0.082183837890625,"y":0.056365966796875},{"x":0.013671875,"y":-0.3306884765625},{"x":-0.142059326171875,"y":-0.160400390625},{"x":-0.178741455078125,"y":-0.098388671875},{"x":-0.05548095703125,"y":-0.03497314453125},{"x":0.053497314453125,"y":-0.074951171875},{"x":-0.122161865234375,"y":-0.04119873046875},{"x":0.1378173828125,"y":-0.22198486328125},{"x":0.012603759765625,"y":-0.46234130859375},{"x":-0.1605224609375,"y":-0.4132080078125},{"x":-0.273193359375,"y":-0.1204833984375},{"x":-0.42132568359375,"y":-0.1185302734375},{"x":-0.25341796875,"y":0.076446533203125},{"x":-0.50335693359375,"y":-0.669952392578125}],"optimisedCameraToObject":{"translation":{"x":-0.05814003396727581,"y":0.08359932270089303,"z":0.5000668757598635},"rotation":{"quaternion":{"W":0.896728613117393,"X":-0.26465684753474183,"Y":0.08933379445465589,"Z":-0.34329873381336923}}},"cornersUsed":[true,true,false,false,false,true,false,true,true,false,false,true,false,false,true,true,true,false,false,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,true,true,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,false,false,true,true,false,false,true],"snapshotName":"img5.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img5.png"},{"locationInObjectSpace":[{"x":0.0,"y":0.0,"z":-0.0},{"x":0.015138395130634308,"y":0.0,"z":-4.7668523620814085E-5},{"x":0.030276797711849213,"y":0.0,"z":-8.800344949122518E-5},{"x":0.04541519284248352,"y":0.0,"z":-1.2100473395548761E-4},{"x":0.060553595423698425,"y":0.0,"z":-1.4667242066934705E-4},{"x":0.07569199800491333,"y":0.0,"z":-1.6500648052897304E-4},{"x":0.09083040058612823,"y":0.0,"z":-1.760069135343656E-4},{"x":0.10596880316734314,"y":0.0,"z":-1.796737196855247E-4},{"x":0.12110719084739685,"y":0.0,"z":-1.760069135343656E-4},{"x":0.0,"y":0.015138399787247181,"z":-3.620323695940897E-5},{"x":0.015138395130634308,"y":0.015138399787247181,"z":-8.387176058022305E-5},{"x":0.030276797711849213,"y":0.015138399787247181,"z":-1.2420667917467654E-4},{"x":0.04541519284248352,"y":0.015138399787247181,"z":-1.572079781908542E-4},{"x":0.060553595423698425,"y":0.015138399787247181,"z":-1.828756503527984E-4},{"x":0.07569199800491333,"y":0.015138399787247181,"z":-2.012097102124244E-4},{"x":0.09083040058612823,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.10596880316734314,"y":0.015138399787247181,"z":-2.1587694936897606E-4},{"x":0.12110719084739685,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.0,"y":0.03027680143713951,"z":-6.436131661757827E-5},{"x":0.015138395130634308,"y":0.03027680143713951,"z":-1.1202984023839235E-4},{"x":0.030276797711849213,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.04541519284248352,"y":0.03027680143713951,"z":-1.8536605057306588E-4},{"x":0.060553595423698425,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.03027680143713951,"z":-2.2936778259463608E-4},{"x":0.09083040058612823,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.10596880316734314,"y":0.03027680143713951,"z":-2.4403503630310297E-4},{"x":0.12110719084739685,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.015138395130634308,"y":0.04541520029306412,"z":-1.3214274076744914E-4},{"x":0.030276797711849213,"y":0.04541520029306412,"z":-1.7247766663786024E-4},{"x":0.04541519284248352,"y":0.04541520029306412,"z":-2.0547895110212266E-4},{"x":0.060553595423698425,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.07569199800491333,"y":0.04541520029306412,"z":-2.4948068312369287E-4},{"x":0.09083040058612823,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.10596880316734314,"y":0.04541520029306412,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.0,"y":0.060553599148988724,"z":-9.654196765040979E-5},{"x":0.015138395130634308,"y":0.060553599148988724,"z":-1.442104985471815E-4},{"x":0.030276797711849213,"y":0.060553599148988724,"z":-1.8454540986567736E-4},{"x":0.04541519284248352,"y":0.060553599148988724,"z":-2.17546708881855E-4},{"x":0.060553595423698425,"y":0.060553599148988724,"z":-2.4321438104379922E-4},{"x":0.07569199800491333,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.09083040058612823,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.10596880316734314,"y":0.060553599148988724,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138395130634308,"y":0.07569199800491333,"z":-1.482330699218437E-4},{"x":0.030276797711849213,"y":0.07569199800491333,"z":-1.885679957922548E-4},{"x":0.04541519284248352,"y":0.07569199800491333,"z":-2.2156928025651723E-4},{"x":0.060553595423698425,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.09083040058612823,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.10596880316734314,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.12110719084739685,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.015138395130634308,"y":0.09083039313554764,"z":-1.442104985471815E-4},{"x":0.030276797711849213,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.04541519284248352,"y":0.09083039313554764,"z":-2.17546708881855E-4},{"x":0.060553595423698425,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.09083040058612823,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.10596880316734314,"y":0.09083039313554764,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.015138395130634308,"y":0.10596879571676254,"z":-1.3214275531936437E-4},{"x":0.030276797711849213,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541519284248352,"y":0.10596879571676254,"z":-2.054789656540379E-4},{"x":0.060553595423698425,"y":0.10596879571676254,"z":-2.311466378159821E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083040058612823,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.10596880316734314,"y":0.10596879571676254,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.015138395130634308,"y":0.12110719084739685,"z":-1.1202984751434997E-4},{"x":0.030276797711849213,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.04541519284248352,"y":0.12110719084739685,"z":-1.853660651249811E-4},{"x":0.060553595423698425,"y":0.12110719084739685,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.12110719084739685,"z":-2.293677971465513E-4},{"x":0.09083040058612823,"y":0.12110719084739685,"z":-2.4036823015194386E-4},{"x":0.10596880316734314,"y":0.12110719084739685,"z":-2.440350508550182E-4},{"x":0.12110719084739685,"y":0.12110719084739685,"z":-2.403682447038591E-4},{"x":0.015138395130634308,"y":0.13624559342861176,"z":-8.387177513213828E-5},{"x":0.030276797711849213,"y":0.13624559342861176,"z":-1.2420669372659177E-4},{"x":0.04541519284248352,"y":0.13624559342861176,"z":-1.5720799274276942E-4},{"x":0.060553595423698425,"y":0.13624559342861176,"z":-1.8287566490471363E-4},{"x":0.07569199800491333,"y":0.13624559342861176,"z":-2.0120972476433963E-4},{"x":0.09083040058612823,"y":0.13624559342861176,"z":-2.1221015776973218E-4},{"x":0.10596880316734314,"y":0.13624559342861176,"z":-2.1587696392089128E-4},{"x":0.12110719084739685,"y":0.13624559342861176,"z":-2.1221015776973218E-4}],"locationInImageSpace":[{"x":42.943660736083984,"y":235.81753540039062},{"x":64.76944732666016,"y":238.18511962890625},{"x":85.9918441772461,"y":240.5672149658203},{"x":107.02295684814453,"y":242.21990966796875},{"x":127.43121337890625,"y":245.57017517089844},{"x":147.86634826660156,"y":247.78590393066406},{"x":167.95819091796875,"y":249.9010772705078},{"x":186.8430938720703,"y":251.87957763671875},{"x":206.6502685546875,"y":254.2009735107422},{"x":40.16501998901367,"y":255.00013732910156},{"x":61.875274658203125,"y":257.2237243652344},{"x":83.44496154785156,"y":259.7817687988281},{"x":104.36585998535156,"y":261.63922119140625},{"x":125.20450592041016,"y":264.01983642578125},{"x":145.49588012695312,"y":266.10467529296875},{"x":165.05398559570312,"y":268.10406494140625},{"x":185.67323303222656,"y":270.12493896484375},{"x":205.0342559814453,"y":271.4648132324219},{"x":37.30868911743164,"y":274.10260009765625},{"x":59.027732849121094,"y":276.0899658203125},{"x":80.94441223144531,"y":278.31817626953125},{"x":101.88838195800781,"y":280.2178039550781},{"x":122.9339599609375,"y":282.6501770019531},{"x":143.63389587402344,"y":284.6412048339844},{"x":163.368896484375,"y":285.85882568359375},{"x":183.81394958496094,"y":288.3890380859375},{"x":202.36314392089844,"y":290.3094177246094},{"x":34.45012664794922,"y":293.99163818359375},{"x":56.21334457397461,"y":295.6567687988281},{"x":77.97874450683594,"y":297.7824401855469},{"x":99.29908752441406,"y":299.8050842285156},{"x":120.63346099853516,"y":301.4132995605469},{"x":141.27439880371094,"y":303.42205810546875},{"x":161.77410888671875,"y":305.04278564453125},{"x":181.7728729248047,"y":306.7863464355469},{"x":202.1416778564453,"y":308.8076171875},{"x":31.608396530151367,"y":313.2879638671875},{"x":53.44818115234375,"y":315.18218994140625},{"x":75.40428161621094,"y":316.9874572753906},{"x":96.93924713134766,"y":318.7965087890625},{"x":117.37202453613281,"y":320.23748779296875},{"x":139.1352996826172,"y":322.2193908691406},{"x":159.20704650878906,"y":323.7998352050781},{"x":179.9351348876953,"y":325.4576416015625},{"x":199.4601593017578,"y":327.1622314453125},{"x":28.201751708984375,"y":333.34027099609375},{"x":50.61978530883789,"y":334.8735656738281},{"x":72.84522247314453,"y":336.68792724609375},{"x":94.22162628173828,"y":338.1852722167969},{"x":115.1474609375,"y":339.79083251953125},{"x":136.59080505371094,"y":340.35906982421875},{"x":157.31631469726562,"y":342.9120178222656},{"x":177.51736450195312,"y":343.86090087890625},{"x":197.0598907470703,"y":346.095947265625},{"x":25.37320899963379,"y":353.4205017089844},{"x":47.78795623779297,"y":355.07379150390625},{"x":70.16394805908203,"y":356.3779602050781},{"x":91.7781982421875,"y":358.0063171386719},{"x":113.39429473876953,"y":359.3797607421875},{"x":134.33706665039062,"y":360.9725646972656},{"x":155.11610412597656,"y":362.1781311035156},{"x":175.65191650390625,"y":363.9893493652344},{"x":195.85350036621094,"y":364.983154296875},{"x":44.98505783081055,"y":375.0645446777344},{"x":67.38919830322266,"y":376.6589050292969},{"x":89.25773620605469,"y":378.03741455078125},{"x":110.72035217285156,"y":379.1757507324219},{"x":132.17880249023438,"y":380.3443298339844},{"x":153.12269592285156,"y":381.9870300292969},{"x":173.60704040527344,"y":382.7431335449219},{"x":193.20152282714844,"y":384.0321044921875},{"x":41.85401153564453,"y":395.80126953125},{"x":64.67501831054688,"y":397.05059814453125},{"x":86.38931274414062,"y":398.1304626464844},{"x":108.28888702392578,"y":399.16131591796875},{"x":129.84532165527344,"y":400.4811706542969},{"x":150.70509338378906,"y":401.43798828125},{"x":171.54832458496094,"y":402.83282470703125},{"x":191.91139221191406,"y":403.88348388671875},{"x":38.9325065612793,"y":416.6858215332031},{"x":61.75645446777344,"y":417.6645202636719},{"x":83.8613510131836,"y":418.77215576171875},{"x":105.68753814697266,"y":419.8223876953125},{"x":127.04224395751953,"y":420.22705078125},{"x":148.36289978027344,"y":421.44317626953125},{"x":169.11856079101562,"y":422.3404235839844},{"x":189.76947021484375,"y":422.9569091796875}],"reprojectionErrors":[{"x":-0.2898406982421875,"y":-0.2640380859375},{"x":-0.4568023681640625,"y":-0.16387939453125},{"x":0.28424072265625,"y":0.0422210693359375},{"x":0.18595123291015625,"y":-0.0999908447265625},{"x":0.15016555786132812,"y":-0.07818603515625},{"x":-0.0808563232421875,"y":-0.4232177734375},{"x":0.00804901123046875,"y":-0.09942626953125},{"x":-0.14286041259765625,"y":-0.329864501953125},{"x":0.22736358642578125,"y":0.1041259765625},{"x":-0.19364166259765625,"y":-0.04638671875},{"x":0.02471923828125,"y":0.10162353515625},{"x":-0.1849365234375,"y":-0.312591552734375},{"x":-0.3686370849609375,"y":-0.314361572265625},{"x":0.0994415283203125,"y":0.429046630859375},{"x":-0.449310302734375,"y":-0.167877197265625},{"x":0.5972137451171875,"y":-0.18212890625},{"x":0.00109100341796875,"y":-0.469329833984375},{"x":-0.3592681884765625,"y":-0.13702392578125},{"x":-0.324188232421875,"y":-0.07794189453125},{"x":-0.9636383056640625,"y":-0.32208251953125},{"x":-0.16133689880371094,"y":-0.07391357421875},{"x":0.16440200805664062,"y":-0.145172119140625},{"x":0.02388763427734375,"y":-0.154541015625},{"x":-0.03803253173828125,"y":-0.1942138671875},{"x":0.6669082641601562,"y":0.108184814453125},{"x":-0.12731170654296875,"y":-0.199371337890625},{"x":0.1275787353515625,"y":-0.072174072265625},{"x":0.493133544921875,"y":-0.0772705078125},{"x":0.0084228515625,"y":0.931304931640625},{"x":-0.0842742919921875,"y":-0.06793212890625},{"x":0.0284576416015625,"y":0.514251708984375},{"x":0.4872283935546875,"y":-0.2119140625},{"x":-0.04592323303222656,"y":-0.041015625},{"x":-0.0937347412109375,"y":-0.427764892578125},{"x":-0.155670166015625,"y":-0.052032470703125},{"x":-0.09893798828125,"y":0.161834716796875},{"x":-0.19231414794921875,"y":-0.0888671875},{"x":0.03472900390625,"y":0.020294189453125},{"x":-0.1611480712890625,"y":0.13494873046875},{"x":-0.1771087646484375,"y":-0.24383544921875},{"x":-0.0611114501953125,"y":0.2451171875},{"x":-0.1610107421875,"y":-0.032135009765625},{"x":0.0573883056640625,"y":0.124359130859375},{"x":-0.039642333984375,"y":-0.174072265625},{"x":0.01849365234375,"y":-0.144866943359375},{"x":-0.045742034912109375,"y":-0.00103759765625},{"x":-0.0386505126953125,"y":-0.06103515625},{"x":0.06049346923828125,"y":-0.1219482421875},{"x":0.27979278564453125,"y":0.44720458984375}],"optimisedCameraToObject":{"translation":{"x":-0.2691917130177804,"y":-0.05437199594286835,"z":0.5231707944360371},"rotation":{"quaternion":{"W":0.9835011567878835,"X":-0.10615569820677091,"Y":-0.1428916927510533,"Z":0.032224315010044954}}},"cornersUsed":[false,false,false,false,false,true,true,true,false,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,true,true,true,true,false,true,true,true,true,false,false,false,false,false,true,true,true,true,true,false,true,true,true,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,true,true,true,true,true,true,true,true],"snapshotName":"img6.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img6.png"},{"locationInObjectSpace":[{"x":0.16652239859104156,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.18166080117225647,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.19679918885231018,"y":0.04541520029306412,"z":-1.3214279897511005E-4},{"x":0.13624559342861176,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.18166080117225647,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.060553599148988724,"z":-1.4421054220292717E-4},{"x":0.13624559342861176,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.15138399600982666,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.16652239859104156,"y":0.07569199800491333,"z":-2.215693093603477E-4},{"x":0.13624559342861176,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.15138399600982666,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.13624559342861176,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.15138399600982666,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.13624559342861176,"y":0.12110719084739685,"z":-2.2936781169846654E-4},{"x":0.15138399600982666,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.16652239859104156,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.0,"y":0.13624559342861176,"z":-3.62032515113242E-5},{"x":0.13624559342861176,"y":0.13624559342861176,"z":-2.0120973931625485E-4},{"x":0.15138399600982666,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.16652239859104156,"y":0.13624559342861176,"z":-1.5720800729468465E-4},{"x":0.18166080117225647,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.19679918885231018,"y":0.13624559342861176,"z":-8.387181878788397E-5}],"locationInImageSpace":[{"x":415.24456787109375,"y":305.4486083984375},{"x":433.210205078125,"y":346.61114501953125},{"x":449.0751953125,"y":345.5312194824219},{"x":385.76611328125,"y":363.67706298828125},{"x":433.782470703125,"y":361.1416931152344},{"x":450.5112609863281,"y":359.82537841796875},{"x":385.2857971191406,"y":378.9815673828125},{"x":402.0686950683594,"y":378.6631164550781},{"x":418.4653625488281,"y":377.2247619628906},{"x":386.421142578125,"y":394.50836181640625},{"x":402.2799377441406,"y":393.8023681640625},{"x":386.04766845703125,"y":409.74884033203125},{"x":403.0951843261719,"y":410.0962829589844},{"x":386.28643798828125,"y":427.0662841796875},{"x":402.9533996582031,"y":425.763671875},{"x":419.62738037109375,"y":424.267822265625},{"x":234.9291229248047,"y":451.77490234375},{"x":386.6434326171875,"y":443.3494873046875},{"x":404.127197265625,"y":442.48175048828125},{"x":421.3000793457031,"y":441.9045104980469},{"x":437.56732177734375,"y":439.6221923828125},{"x":455.66357421875,"y":440.0033874511719}],"reprojectionErrors":[{"x":-0.054718017578125,"y":0.673614501953125}],"optimisedCameraToObject":{"translation":{"x":-0.1454124303567602,"y":0.009976428811875718,"z":0.6762345175248935},"rotation":{"quaternion":{"W":0.9667604071244109,"X":-0.24992526318801275,"Y":0.048454862056485616,"Z":-0.023744565275718645}}},"cornersUsed":[false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false,false,false,false,true,false,false,true,true,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,true,false,false,false,false,false,false,false,false,true,true,true,false,true],"snapshotName":"img7.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img7.png"},{"locationInObjectSpace":[{"x":0.16652239859104156,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.16652239859104156,"y":0.015138399787247181,"z":-1.5720799274276942E-4},{"x":0.18166080117225647,"y":0.015138399787247181,"z":-1.2420669372659177E-4},{"x":0.060553599148988724,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.04541520029306412,"z":-1.3214275531936437E-4},{"x":0.03027680143713951,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.060553599148988724,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.015138399787247181,"y":0.060553599148988724,"z":-1.442104985471815E-4},{"x":0.03027680143713951,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.07569199800491333,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.12110719084739685,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.03027680143713951,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.09083039313554764,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.10596879571676254,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.12110719084739685,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.13624559342861176,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.15138399600982666,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.16652239859104156,"y":0.07569199800491333,"z":-2.215693093603477E-4},{"x":0.04541520029306412,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.09083039313554764,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.09083039313554764,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.060553599148988724,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083039313554764,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.10596879571676254,"y":0.10596879571676254,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.0,"y":0.12110719084739685,"z":-6.436132389353588E-5},{"x":0.015138399787247181,"y":0.12110719084739685,"z":-1.120298620662652E-4},{"x":0.03027680143713951,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.04541520029306412,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.060553599148988724,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.10596879571676254,"y":0.12110719084739685,"z":-2.440350508550182E-4},{"x":0.12110719084739685,"y":0.12110719084739685,"z":-2.403682447038591E-4},{"x":0.19679918885231018,"y":0.12110719084739685,"z":-1.1202989844605327E-4},{"x":0.03027680143713951,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.04541520029306412,"y":0.13624559342861176,"z":-1.5720800729468465E-4},{"x":0.060553599148988724,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.10596879571676254,"y":0.13624559342861176,"z":-2.1587696392089128E-4},{"x":0.12110719084739685,"y":0.13624559342861176,"z":-2.1221015776973218E-4},{"x":0.19679918885231018,"y":0.13624559342861176,"z":-8.387181878788397E-5}],"locationInImageSpace":[{"x":459.0503845214844,"y":255.7950897216797},{"x":460.8182373046875,"y":277.0452575683594},{"x":483.6236572265625,"y":276.2339782714844},{"x":301.48876953125,"y":304.430908203125},{"x":207.8666229248047,"y":330.34716796875},{"x":231.09376525878906,"y":329.1644287109375},{"x":255.01930236816406,"y":328.43597412109375},{"x":278.2096252441406,"y":327.7037353515625},{"x":301.9004821777344,"y":326.81494140625},{"x":231.0047607421875,"y":352.3703918457031},{"x":254.39590454101562,"y":351.19158935546875},{"x":325.40484619140625,"y":348.85919189453125},{"x":395.523193359375,"y":346.2060241699219},{"x":419.0628967285156,"y":345.3354797363281},{"x":254.1528778076172,"y":374.6970520019531},{"x":349.3731384277344,"y":371.0594482421875},{"x":373.01495361328125,"y":370.16998291015625},{"x":396.8268127441406,"y":369.2407531738281},{"x":420.2146911621094,"y":368.28082275390625},{"x":443.6742248535156,"y":367.517333984375},{"x":467.05657958984375,"y":366.64068603515625},{"x":277.9989929199219,"y":397.511474609375},{"x":349.96173095703125,"y":394.845947265625},{"x":373.9201965332031,"y":393.75732421875},{"x":397.63519287109375,"y":392.8481750488281},{"x":204.3361358642578,"y":425.1429748535156},{"x":277.8862609863281,"y":421.69537353515625},{"x":302.2000732421875,"y":420.7810363769531},{"x":326.27569580078125,"y":419.7662353515625},{"x":350.4150695800781,"y":418.8134460449219},{"x":374.683837890625,"y":417.75164794921875},{"x":398.67755126953125,"y":416.83502197265625},{"x":203.70379638671875,"y":449.9243469238281},{"x":228.53549194335938,"y":448.641357421875},{"x":253.2888946533203,"y":447.6372375488281},{"x":277.9111328125,"y":446.3881530761719},{"x":302.1412048339844,"y":445.53887939453125},{"x":375.4747009277344,"y":442.24725341796875},{"x":399.5386047363281,"y":441.2862243652344},{"x":520.551513671875,"y":436.49920654296875},{"x":252.7680206298828,"y":472.6872253417969},{"x":277.4142150878906,"y":471.6868896484375},{"x":302.3121032714844,"y":470.72747802734375},{"x":376.116455078125,"y":467.36761474609375},{"x":400.7468566894531,"y":466.4833984375},{"x":522.7824096679688,"y":461.48681640625}],"reprojectionErrors":[{"x":-0.1773681640625,"y":-0.096160888671875},{"x":0.247406005859375,"y":-0.439910888671875},{"x":-0.13720703125,"y":0.0509033203125},{"x":0.0808563232421875,"y":-0.461883544921875},{"x":0.01470947265625,"y":-0.236236572265625},{"x":0.205413818359375,"y":-0.008026123046875},{"x":0.135162353515625,"y":-0.1622314453125},{"x":0.066650390625,"y":-0.314483642578125}],"optimisedCameraToObject":{"translation":{"x":-0.12280240453634607,"y":-0.02861763115167417,"z":0.45396309766501475},"rotation":{"quaternion":{"W":0.9904192062857176,"X":-0.13613992921934776,"Y":-0.012486794042284735,"Z":-0.019488341824427984}}},"cornersUsed":[false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,true,true,false,false,true,false,false,true,true,false,false,false,false,false,false,true,false,false,false,true,true,true,true,true,true,false,false,false,false,false,true,false,false,true,true,true,false,false,false,false,false,true,false,false,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,true,false,false,true,true,false,false,false,false,true,false,false,true,true,true,false,false,true,true,false,false,false,false,true],"snapshotName":"img8.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img8.png"},{"locationInObjectSpace":[{"x":0.0,"y":0.0,"z":-0.0},{"x":0.015138399787247181,"y":0.0,"z":-4.766853817272931E-5},{"x":0.03027680143713951,"y":0.0,"z":-8.80034567671828E-5},{"x":0.0,"y":0.015138400718569756,"z":-3.6203240597387776E-5},{"x":0.015138399787247181,"y":0.015138400718569756,"z":-8.387177513213828E-5},{"x":0.03027680143713951,"y":0.015138400718569756,"z":-1.2420669372659177E-4},{"x":0.04541520029306412,"y":0.015138400718569756,"z":-1.5720799274276942E-4},{"x":0.060553599148988724,"y":0.015138400718569756,"z":-1.8287566490471363E-4},{"x":0.07569199800491333,"y":0.015138400718569756,"z":-2.012097102124244E-4},{"x":0.09083039313554764,"y":0.015138400718569756,"z":-2.1221014321781695E-4},{"x":0.10596879571676254,"y":0.015138400718569756,"z":-2.1587696392089128E-4},{"x":0.12110719084739685,"y":0.015138400718569756,"z":-2.1221015776973218E-4},{"x":0.0,"y":0.030276799574494362,"z":-6.436130934162065E-5},{"x":0.015138399787247181,"y":0.030276799574494362,"z":-1.1202984751434997E-4},{"x":0.03027680143713951,"y":0.030276799574494362,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.030276799574494362,"z":-1.853660651249811E-4},{"x":0.09083039313554764,"y":0.030276799574494362,"z":-2.4036821560002863E-4},{"x":0.10596879571676254,"y":0.030276799574494362,"z":-2.4403503630310297E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.04541520029306412,"z":-1.3214275531936437E-4},{"x":0.03027680143713951,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.09083039313554764,"y":0.04541520029306412,"z":-2.604811161290854E-4},{"x":0.10596879571676254,"y":0.04541520029306412,"z":-2.6414793683215976E-4},{"x":0.15138399600982666,"y":0.04541520029306412,"z":-2.3114665236789733E-4},{"x":0.16652239859104156,"y":0.04541520029306412,"z":-2.0547898020595312E-4},{"x":0.0,"y":0.06055360287427902,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.06055360287427902,"z":-1.4421051309909672E-4},{"x":0.03027680143713951,"y":0.06055360287427902,"z":-1.8454542441759259E-4},{"x":0.09083039313554764,"y":0.06055360287427902,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.06055360287427902,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.06055360287427902,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.06055360287427902,"z":-2.615484409034252E-4},{"x":0.15138399600982666,"y":0.06055360287427902,"z":-2.4321439559571445E-4},{"x":0.16652239859104156,"y":0.06055360287427902,"z":-2.1754672343377024E-4},{"x":0.18166080117225647,"y":0.06055360287427902,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.06055360287427902,"z":-1.4421054220292717E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138399787247181,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.03027680143713951,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.04541520029306412,"y":0.07569199800491333,"z":-2.2156929480843246E-4},{"x":0.09083039313554764,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.16652239859104156,"y":0.07569199800491333,"z":-2.215693093603477E-4},{"x":0.18166080117225647,"y":0.07569199800491333,"z":-1.885679957922548E-4},{"x":0.19679918885231018,"y":0.07569199800491333,"z":-1.482331135775894E-4},{"x":0.0,"y":0.09083040058612823,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.09083040058612823,"z":-1.442104985471815E-4},{"x":0.03027680143713951,"y":0.09083040058612823,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.09083040058612823,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.09083040058612823,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.09083040058612823,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.09083040058612823,"z":-2.7254887390881777E-4},{"x":0.16652239859104156,"y":0.09083040058612823,"z":-2.1754672343377024E-4},{"x":0.18166080117225647,"y":0.09083040058612823,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.09083040058612823,"z":-1.4421054220292717E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.03027680143713951,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.060553599148988724,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083039313554764,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.10596879571676254,"y":0.10596879571676254,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.15138399600982666,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.16652239859104156,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.18166080117225647,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.19679918885231018,"y":0.10596879571676254,"z":-1.3214279897511005E-4},{"x":0.0,"y":0.12110719829797745,"z":-6.436131661757827E-5},{"x":0.015138399787247181,"y":0.12110719829797745,"z":-1.1202985479030758E-4},{"x":0.03027680143713951,"y":0.12110719829797745,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.12110719829797745,"z":-1.853660651249811E-4},{"x":0.060553599148988724,"y":0.12110719829797745,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.12110719829797745,"z":-2.2936778259463608E-4},{"x":0.09083039313554764,"y":0.12110719829797745,"z":-2.4036821560002863E-4},{"x":0.10596879571676254,"y":0.12110719829797745,"z":-2.4403503630310297E-4},{"x":0.12110719084739685,"y":0.12110719829797745,"z":-2.4036823015194386E-4},{"x":0.13624559342861176,"y":0.12110719829797745,"z":-2.293677971465513E-4},{"x":0.15138399600982666,"y":0.12110719829797745,"z":-2.1103373728692532E-4},{"x":0.16652239859104156,"y":0.12110719829797745,"z":-1.853660651249811E-4},{"x":0.18166080117225647,"y":0.12110719829797745,"z":-1.5236476610880345E-4},{"x":0.19679918885231018,"y":0.12110719829797745,"z":-1.1202988389413804E-4}],"locationInImageSpace":[{"x":89.84513854980469,"y":44.48374938964844},{"x":114.85655212402344,"y":45.37851333618164},{"x":139.82728576660156,"y":46.73008728027344},{"x":89.57010650634766,"y":67.09235382080078},{"x":114.85440063476562,"y":68.05982208251953},{"x":139.67689514160156,"y":69.16963195800781},{"x":164.0467529296875,"y":69.88844299316406},{"x":188.22425842285156,"y":70.42243194580078},{"x":212.6475372314453,"y":71.48052978515625},{"x":236.7676544189453,"y":72.33086395263672},{"x":260.51092529296875,"y":73.49735260009766},{"x":284.07379150390625,"y":74.02632141113281},{"x":89.32404327392578,"y":90.38697052001953},{"x":114.4288101196289,"y":90.83980560302734},{"x":139.34205627441406,"y":91.5943603515625},{"x":163.9855194091797,"y":92.16388702392578},{"x":237.0146026611328,"y":94.68756103515625},{"x":260.7945251464844,"y":95.35595703125},{"x":88.51202392578125,"y":113.2040786743164},{"x":113.96504211425781,"y":114.15188598632812},{"x":139.00540161132812,"y":114.42864227294922},{"x":236.94570922851562,"y":117.05653381347656},{"x":260.9693298339844,"y":117.80135345458984},{"x":331.0879821777344,"y":119.47208404541016},{"x":354.0040588378906,"y":120.16133117675781},{"x":88.17675018310547,"y":136.4105682373047},{"x":113.6041259765625,"y":137.0061492919922},{"x":138.89532470703125,"y":137.54554748535156},{"x":237.18409729003906,"y":139.71702575683594},{"x":261.2226867675781,"y":140.3055419921875},{"x":284.9264221191406,"y":140.69845581054688},{"x":308.6977844238281,"y":141.0904998779297},{"x":331.77703857421875,"y":141.892822265625},{"x":354.53131103515625,"y":142.0728759765625},{"x":377.25537109375,"y":142.85073852539062},{"x":399.7962646484375,"y":143.3336944580078},{"x":87.50408935546875,"y":160.02842712402344},{"x":113.1971206665039,"y":160.4134979248047},{"x":138.34848022460938,"y":160.4881591796875},{"x":163.63897705078125,"y":161.462890625},{"x":237.29896545410156,"y":162.15928649902344},{"x":355.1903381347656,"y":164.5071563720703},{"x":378.2635803222656,"y":164.7843017578125},{"x":400.5794372558594,"y":165.1732177734375},{"x":87.08612060546875,"y":183.69039916992188},{"x":112.83544921875,"y":183.94888305664062},{"x":138.4605255126953,"y":184.2325439453125},{"x":163.5741729736328,"y":184.33946228027344},{"x":188.2486114501953,"y":184.699462890625},{"x":213.1068878173828,"y":185.04483032226562},{"x":237.6880645751953,"y":185.24176025390625},{"x":355.8578796386719,"y":186.69534301757812},{"x":378.6834716796875,"y":187.034912109375},{"x":401.3058776855469,"y":187.0369415283203},{"x":86.46389770507812,"y":207.41287231445312},{"x":112.24982452392578,"y":207.51231384277344},{"x":138.28627014160156,"y":207.8258056640625},{"x":163.44772338867188,"y":208.05357360839844},{"x":188.30239868164062,"y":208.10357666015625},{"x":213.27040100097656,"y":208.2925262451172},{"x":237.85479736328125,"y":208.6721954345703},{"x":262.1484680175781,"y":208.9122314453125},{"x":285.7904357910156,"y":208.87245178222656},{"x":309.8672180175781,"y":209.1800079345703},{"x":333.05853271484375,"y":209.23606872558594},{"x":356.24542236328125,"y":209.20701599121094},{"x":379.31610107421875,"y":209.516845703125},{"x":401.9725646972656,"y":209.60720825195312},{"x":86.19705200195312,"y":231.5227813720703},{"x":112.04492950439453,"y":231.64564514160156},{"x":138.0272216796875,"y":231.68687438964844},{"x":163.1608123779297,"y":231.5714569091797},{"x":188.20098876953125,"y":231.7162628173828},{"x":213.2987060546875,"y":231.76206970214844},{"x":237.85028076171875,"y":231.932861328125},{"x":262.14453125,"y":231.85311889648438},{"x":286.3357849121094,"y":231.92298889160156},{"x":310.043212890625,"y":232.09153747558594},{"x":333.7401123046875,"y":231.89585876464844},{"x":356.8160400390625,"y":232.1086883544922},{"x":380.01031494140625,"y":231.88587951660156},{"x":402.9971008300781,"y":231.9920654296875}],"reprojectionErrors":[{"x":-0.0237884521484375,"y":-0.07427215576171875},{"x":0.111175537109375,"y":0.11244964599609375},{"x":-0.1083831787109375,"y":-0.160125732421875},{"x":0.0140838623046875,"y":-0.2161407470703125},{"x":-0.05914306640625,"y":-0.289154052734375},{"x":-0.0467529296875,"y":-0.1678314208984375},{"x":-0.3485107421875,"y":-0.04693603515625},{"x":-0.201934814453125,"y":-0.33758544921875},{"x":0.028472900390625,"y":-0.00726318359375},{"x":0.05059814453125,"y":-0.2760467529296875},{"x":0.01995849609375,"y":-0.251220703125},{"x":0.0265045166015625,"y":-0.1495208740234375},{"x":-0.250396728515625,"y":-0.1273345947265625},{"x":0.0302734375,"y":-0.12091064453125},{"x":-0.0399627685546875,"y":-0.1082305908203125},{"x":-0.04640960693359375,"y":-0.0913543701171875},{"x":0.1553192138671875,"y":-0.0123443603515625},{"x":-0.0259552001953125,"y":-0.080108642578125},{"x":-0.2882232666015625,"y":-0.03515625},{"x":-0.1382293701171875,"y":-0.1115570068359375},{"x":0.05133056640625,"y":-0.0087127685546875},{"x":0.127532958984375,"y":-0.151947021484375},{"x":-0.196807861328125,"y":-0.2996673583984375},{"x":0.1240234375,"y":-0.1492919921875},{"x":0.237396240234375,"y":-0.07476806640625},{"x":-0.2914581298828125,"y":-0.035003662109375},{"x":-0.005706787109375,"y":0.1044464111328125},{"x":0.1039886474609375,"y":-0.013885498046875},{"x":-0.065826416015625,"y":-0.0909271240234375},{"x":0.0740966796875,"y":-0.2212982177734375},{"x":-0.027252197265625,"y":0.0147552490234375},{"x":0.243408203125,"y":-0.1555023193359375},{"x":0.1495361328125,"y":0.1120147705078125},{"x":0.0196533203125,"y":0.0526580810546875}],"optimisedCameraToObject":{"translation":{"x":-0.19302779085299304,"y":-0.16628172352478715,"z":0.4326618038591473},"rotation":{"quaternion":{"W":0.995170513202104,"X":-0.060940279925585206,"Y":-0.07595528566438424,"Z":-0.012358256968276759}}},"cornersUsed":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,true,true,true,true,false,false,true,true,false,false,false,false,false,false,true,true,true,false,false,false,true,true,false,false,true,true,false,false,true,true,true,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],"snapshotName":"img9.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img9.png"},{"locationInObjectSpace":[{"x":0.0,"y":0.0,"z":-0.0},{"x":0.015138400718569756,"y":0.0,"z":-4.766853817272931E-5},{"x":0.030276799574494362,"y":0.0,"z":-8.800344949122518E-5},{"x":0.04541520029306412,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.06055360287427902,"y":0.0,"z":-1.4667242066934705E-4},{"x":0.07569199800491333,"y":0.0,"z":-1.6500648052897304E-4},{"x":0.09083040058612823,"y":0.0,"z":-1.760069135343656E-4},{"x":0.10596879571676254,"y":0.0,"z":-1.796737196855247E-4},{"x":0.15138399600982666,"y":0.0,"z":-1.4667243522126228E-4},{"x":0.16652239859104156,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.18166078627109528,"y":0.0,"z":-8.800348587101325E-5},{"x":0.0,"y":0.015138399787247181,"z":-3.620323695940897E-5},{"x":0.015138400718569756,"y":0.015138399787247181,"z":-8.387177513213828E-5},{"x":0.030276799574494362,"y":0.015138399787247181,"z":-1.2420669372659177E-4},{"x":0.04541520029306412,"y":0.015138399787247181,"z":-1.5720799274276942E-4},{"x":0.06055360287427902,"y":0.015138399787247181,"z":-1.8287566490471363E-4},{"x":0.07569199800491333,"y":0.015138399787247181,"z":-2.012097102124244E-4},{"x":0.09083040058612823,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.10596879571676254,"y":0.015138399787247181,"z":-2.1587694936897606E-4},{"x":0.15138399600982666,"y":0.015138399787247181,"z":-1.8287566490471363E-4},{"x":0.16652239859104156,"y":0.015138399787247181,"z":-1.5720799274276942E-4},{"x":0.18166078627109528,"y":0.015138399787247181,"z":-1.2420672283042222E-4},{"x":0.0,"y":0.03027680143713951,"z":-6.436131661757827E-5},{"x":0.015138400718569756,"y":0.03027680143713951,"z":-1.1202985479030758E-4},{"x":0.030276799574494362,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.06055360287427902,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.03027680143713951,"z":-2.2936778259463608E-4},{"x":0.09083040058612823,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.10596879571676254,"y":0.03027680143713951,"z":-2.4403503630310297E-4},{"x":0.12110719829797745,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.13624559342861176,"y":0.03027680143713951,"z":-2.293677971465513E-4},{"x":0.15138399600982666,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.16652239859104156,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.18166078627109528,"y":0.03027680143713951,"z":-1.523647952126339E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.015138400718569756,"y":0.04541520029306412,"z":-1.321427698712796E-4},{"x":0.030276799574494362,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.06055360287427902,"y":0.04541520029306412,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.04541520029306412,"z":-2.4948068312369287E-4},{"x":0.09083040058612823,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.10596879571676254,"y":0.04541520029306412,"z":-2.6414793683215976E-4},{"x":0.12110719829797745,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.04541520029306412,"z":-2.494807122275233E-4},{"x":0.15138399600982666,"y":0.04541520029306412,"z":-2.3114665236789733E-4},{"x":0.16652239859104156,"y":0.04541520029306412,"z":-2.0547898020595312E-4},{"x":0.18166078627109528,"y":0.04541520029306412,"z":-1.7247771029360592E-4},{"x":0.0,"y":0.060553599148988724,"z":-9.654196765040979E-5},{"x":0.015138400718569756,"y":0.060553599148988724,"z":-1.4421051309909672E-4},{"x":0.030276799574494362,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.06055360287427902,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.09083040058612823,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.060553599148988724,"z":-2.762156946118921E-4},{"x":0.12110719829797745,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.15138399600982666,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.16652239859104156,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.18166078627109528,"y":0.060553599148988724,"z":-1.8454545352142304E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138400718569756,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.030276799574494362,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.04541520029306412,"y":0.07569199800491333,"z":-2.2156929480843246E-4},{"x":0.06055360287427902,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.09083040058612823,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.10596879571676254,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.12110719829797745,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.13624559342861176,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.15138399600982666,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.16652239859104156,"y":0.07569199800491333,"z":-2.215693093603477E-4},{"x":0.18166078627109528,"y":0.07569199800491333,"z":-1.885680394480005E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.015138400718569756,"y":0.09083039313554764,"z":-1.4421051309909672E-4},{"x":0.030276799574494362,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.06055360287427902,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.09083040058612823,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.09083039313554764,"z":-2.762156946118921E-4},{"x":0.12110719829797745,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.15138399600982666,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.16652239859104156,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.18166078627109528,"y":0.09083039313554764,"z":-1.8454545352142304E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.015138400718569756,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.030276799574494362,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.06055360287427902,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083040058612823,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.10596879571676254,"y":0.10596879571676254,"z":-2.6414793683215976E-4},{"x":0.12110719829797745,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.15138399600982666,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.16652239859104156,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.18166078627109528,"y":0.10596879571676254,"z":-1.7247771029360592E-4},{"x":0.0,"y":0.12110719084739685,"z":-6.436132389353588E-5},{"x":0.015138400718569756,"y":0.12110719084739685,"z":-1.1202986934222281E-4},{"x":0.030276799574494362,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.04541520029306412,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.06055360287427902,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.07569199800491333,"y":0.12110719084739685,"z":-2.293677971465513E-4},{"x":0.09083040058612823,"y":0.12110719084739685,"z":-2.4036823015194386E-4},{"x":0.10596879571676254,"y":0.12110719084739685,"z":-2.440350508550182E-4},{"x":0.12110719829797745,"y":0.12110719084739685,"z":-2.4036823015194386E-4},{"x":0.13624559342861176,"y":0.12110719084739685,"z":-2.2936781169846654E-4},{"x":0.15138399600982666,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.16652239859104156,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.18166078627109528,"y":0.12110719084739685,"z":-1.5236480976454914E-4},{"x":0.04541520029306412,"y":0.13624559342861176,"z":-1.5720800729468465E-4},{"x":0.06055360287427902,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.07569199800491333,"y":0.13624559342861176,"z":-2.0120972476433963E-4},{"x":0.09083040058612823,"y":0.13624559342861176,"z":-2.1221015776973218E-4},{"x":0.10596879571676254,"y":0.13624559342861176,"z":-2.1587696392089128E-4},{"x":0.12110719829797745,"y":0.13624559342861176,"z":-2.1221015776973218E-4},{"x":0.13624559342861176,"y":0.13624559342861176,"z":-2.0120973931625485E-4},{"x":0.15138399600982666,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.16652239859104156,"y":0.13624559342861176,"z":-1.5720800729468465E-4},{"x":0.18166078627109528,"y":0.13624559342861176,"z":-1.2420673738233745E-4}],"locationInImageSpace":[{"x":39.17151641845703,"y":323.23370361328125},{"x":69.86163330078125,"y":318.97064208984375},{"x":99.99446105957031,"y":314.5672607421875},{"x":129.4698486328125,"y":310.2395935058594},{"x":158.61863708496094,"y":306.052001953125},{"x":186.9306182861328,"y":302.043212890625},{"x":214.86227416992188,"y":298.0179443359375},{"x":242.32376098632812,"y":294.2716369628906},{"x":321.07647705078125,"y":282.88885498046875},{"x":346.4421691894531,"y":279.2837219238281},{"x":371.340087890625,"y":275.77056884765625},{"x":41.991451263427734,"y":351.2996520996094},{"x":72.99131774902344,"y":346.3694763183594},{"x":103.13245391845703,"y":341.8072509765625},{"x":132.7690887451172,"y":337.27984619140625},{"x":162.17210388183594,"y":332.91265869140625},{"x":190.54000854492188,"y":328.2376708984375},{"x":219.0601348876953,"y":324.2601623535156},{"x":246.3241424560547,"y":319.9750671386719},{"x":325.7081298828125,"y":307.94549560546875},{"x":351.23504638671875,"y":304.04949951171875},{"x":376.0793762207031,"y":300.34088134765625},{"x":44.74879837036133,"y":379.5136413574219},{"x":75.80901336669922,"y":374.3301696777344},{"x":106.5994644165039,"y":369.4881591796875},{"x":136.3170928955078,"y":364.7544860839844},{"x":165.9165802001953,"y":359.79998779296875},{"x":194.46209716796875,"y":355.267578125},{"x":222.89337158203125,"y":350.3947448730469},{"x":250.6103057861328,"y":346.0489196777344},{"x":277.78900146484375,"y":341.5914611816406},{"x":304.1627502441406,"y":337.3564147949219},{"x":330.3387451171875,"y":333.3121032714844},{"x":355.8689880371094,"y":329.08203125},{"x":380.9988708496094,"y":325.1272277832031},{"x":47.603546142578125,"y":408.1377258300781},{"x":79.02261352539062,"y":402.7216491699219},{"x":109.84500122070312,"y":397.4296875},{"x":139.7162322998047,"y":392.22491455078125},{"x":169.4086456298828,"y":387.24603271484375},{"x":198.40953063964844,"y":382.3076171875},{"x":226.88597106933594,"y":377.2179260253906},{"x":254.701904296875,"y":372.67169189453125},{"x":281.9798278808594,"y":367.887939453125},{"x":308.73883056640625,"y":363.36444091796875},{"x":334.8026428222656,"y":358.9043273925781},{"x":360.75439453125,"y":354.4738464355469},{"x":385.8128356933594,"y":350.1699523925781},{"x":50.481449127197266,"y":437.3083801269531},{"x":82.0540771484375,"y":431.7572021484375},{"x":113.18767547607422,"y":425.932861328125},{"x":143.28564453125,"y":420.3483581542969},{"x":173.2036590576172,"y":415.07958984375},{"x":202.2880859375,"y":409.85638427734375},{"x":230.96798706054688,"y":404.5475769042969},{"x":259.0675964355469,"y":399.425048828125},{"x":286.3381042480469,"y":394.629638671875},{"x":313.20050048828125,"y":389.6411437988281},{"x":339.7806701660156,"y":385.04949951171875},{"x":365.7013854980469,"y":380.21087646484375},{"x":390.9210510253906,"y":375.7923889160156},{"x":53.649635314941406,"y":466.9408874511719},{"x":85.23328399658203,"y":460.9164123535156},{"x":116.46454620361328,"y":455.0192565917969},{"x":146.88394165039062,"y":449.1644287109375},{"x":177.05172729492188,"y":443.431884765625},{"x":206.14334106445312,"y":437.88348388671875},{"x":235.1621856689453,"y":432.221923828125},{"x":263.09576416015625,"y":426.763916015625},{"x":290.93994140625,"y":421.6300048828125},{"x":317.9030456542969,"y":416.3426513671875},{"x":344.41082763671875,"y":411.1966247558594},{"x":370.3866271972656,"y":406.3551025390625},{"x":396.039794921875,"y":401.645751953125},{"x":56.70054244995117,"y":497.0484619140625},{"x":88.52723693847656,"y":490.7149658203125},{"x":119.71290588378906,"y":484.3636169433594},{"x":150.55136108398438,"y":478.08831787109375},{"x":180.7813262939453,"y":472.0699157714844},{"x":210.25555419921875,"y":466.21099853515625},{"x":239.1253662109375,"y":460.2196044921875},{"x":267.6572265625,"y":454.667236328125},{"x":295.3708190917969,"y":449.2869567871094},{"x":322.5729675292969,"y":443.660888671875},{"x":349.2206115722656,"y":438.3403015136719},{"x":375.594482421875,"y":432.9798278808594},{"x":401.17041015625,"y":428.0036315917969},{"x":59.67277145385742,"y":527.6234741210938},{"x":91.82234191894531,"y":520.8809814453125},{"x":123.30662536621094,"y":514.2711181640625},{"x":154.06724548339844,"y":507.925048828125},{"x":184.6517791748047,"y":501.4294738769531},{"x":214.30809020996094,"y":495.1563720703125},{"x":243.4779815673828,"y":489.018798828125},{"x":271.96063232421875,"y":482.96636962890625},{"x":299.998291015625,"y":477.0646667480469},{"x":327.28125,"y":471.15704345703125},{"x":354.0586242675781,"y":465.4509582519531},{"x":380.4966735839844,"y":460.1003723144531},{"x":406.41455078125,"y":454.7059631347656},{"x":62.839385986328125,"y":559.0115356445312},{"x":95.20453643798828,"y":551.6788940429688},{"x":126.87381744384766,"y":544.8309936523438},{"x":157.94931030273438,"y":537.99267578125},{"x":188.41494750976562,"y":531.3504028320312},{"x":218.1594696044922,"y":524.6863403320312},{"x":247.68157958984375,"y":517.9797973632812},{"x":276.2038879394531,"y":511.71270751953125},{"x":304.5798034667969,"y":505.3286437988281},{"x":332.0699768066406,"y":499.259765625},{"x":359.10009765625,"y":493.5082092285156},{"x":385.71099853515625,"y":487.7696838378906},{"x":411.8456726074219,"y":482.0045166015625},{"x":161.67193603515625,"y":568.5549926757812},{"x":192.6066131591797,"y":561.5014038085938},{"x":222.41822814941406,"y":554.6473388671875},{"x":252.03472900390625,"y":547.7960815429688},{"x":281.00909423828125,"y":541.0855712890625},{"x":309.28533935546875,"y":534.3490600585938},{"x":337.0098571777344,"y":528.1146240234375},{"x":364.1638488769531,"y":521.7708129882812},{"x":391.03277587890625,"y":515.8125},{"x":417.1324157714844,"y":509.7148742675781}],"reprojectionErrors":[{"x":0.092803955078125,"y":-0.367950439453125},{"x":-0.02445220947265625,"y":-0.257537841796875},{"x":-0.0547027587890625,"y":-0.137847900390625},{"x":-0.314239501953125,"y":-0.075469970703125},{"x":-0.278778076171875,"y":-0.111175537109375},{"x":-0.3911590576171875,"y":-0.051788330078125},{"x":-0.54840087890625,"y":-0.194671630859375},{"x":-0.3531494140625,"y":-0.038177490234375},{"x":0.1121063232421875,"y":-0.51959228515625},{"x":-0.06450653076171875,"y":-0.277252197265625},{"x":0.02301025390625,"y":-0.309539794921875},{"x":-0.281890869140625,"y":-0.33343505859375},{"x":-0.1143798828125,"y":0.012908935546875},{"x":-0.6349639892578125,"y":-0.254119873046875},{"x":-0.4218597412109375,"y":-0.13153076171875},{"x":-0.380767822265625,"y":-0.117767333984375},{"x":-0.394073486328125,"y":-0.076171875},{"x":-0.1861572265625,"y":-0.14959716796875},{"x":0.154998779296875,"y":-0.47357177734375},{"x":-0.0653533935546875,"y":-0.432769775390625},{"x":-0.381622314453125,"y":-0.19171142578125},{"x":-0.201934814453125,"y":-0.280548095703125},{"x":-0.5171356201171875,"y":-0.037139892578125},{"x":-0.5609130859375,"y":0.061767578125},{"x":-0.303497314453125,"y":0.021514892578125},{"x":-0.33953857421875,"y":-0.128387451171875},{"x":-0.209014892578125,"y":-0.01336669921875},{"x":-0.145660400390625,"y":-0.096405029296875},{"x":0.15158843994140625,"y":-0.365142822265625},{"x":0.0076141357421875,"y":-0.281097412109375},{"x":-0.15301513671875,"y":-0.214691162109375},{"x":0.0404052734375,"y":-0.13177490234375},{"x":-0.1688232421875,"y":-0.173797607421875},{"x":-0.2528839111328125,"y":-0.157958984375},{"x":-0.3642120361328125,"y":0.10498046875},{"x":-0.32708740234375,"y":0.05902099609375},{"x":-0.29339599609375,"y":0.0286865234375},{"x":-0.062530517578125,"y":0.02142333984375},{"x":-0.205291748046875,"y":0.06884765625},{"x":0.07147216796875,"y":0.071868896484375},{"x":0.177215576171875,"y":-0.32073974609375},{"x":0.10943603515625,"y":-0.438751220703125},{"x":-0.14231109619140625,"y":-0.17010498046875},{"x":0.03521728515625,"y":-0.030792236328125},{"x":-0.1976318359375,"y":-0.09967041015625},{"x":-0.1717529296875,"y":-0.109375},{"x":-0.30120849609375,"y":0.068511962890625},{"x":-0.395843505859375,"y":0.159515380859375},{"x":-0.099700927734375,"y":0.168365478515625},{"x":-0.229278564453125,"y":0.011627197265625},{"x":-0.19171142578125,"y":0.1915283203125},{"x":0.066741943359375,"y":0.038787841796875},{"x":-0.034114837646484375,"y":-0.245391845703125},{"x":0.1194305419921875,"y":-0.237762451171875},{"x":-0.007476806640625,"y":-0.236572265625},{"x":0.061676025390625,"y":-0.16015625},{"x":-0.2169189453125,"y":-0.091583251953125},{"x":-0.00286865234375,"y":-0.095733642578125},{"x":-0.284210205078125,"y":0.121795654296875},{"x":-0.033721923828125,"y":0.24139404296875},{"x":-0.23291015625,"y":0.13983154296875},{"x":0.023529052734375,"y":0.400634765625},{"x":0.1563720703125,"y":0.29998779296875},{"x":0.125213623046875,"y":0.16009521484375},{"x":-0.0736846923828125,"y":-0.141754150390625},{"x":0.07181549072265625,"y":-0.183563232421875},{"x":0.21543121337890625,"y":-0.079010009765625},{"x":0.080841064453125,"y":0.074493408203125},{"x":-0.0538482666015625,"y":0.092742919921875},{"x":-0.0251617431640625,"y":0.06988525390625},{"x":0.03131103515625,"y":0.29473876953125},{"x":-0.13580322265625,"y":0.192840576171875},{"x":-0.031524658203125,"y":0.028106689453125},{"x":0.051422119140625,"y":0.215667724609375},{"x":0.05596923828125,"y":0.32830810546875},{"x":0.246917724609375,"y":0.169403076171875},{"x":0.02109527587890625,"y":0.0086669921875},{"x":0.08139801025390625,"y":0.00616455078125},{"x":0.15380859375,"y":0.00762939453125},{"x":0.31463623046875,"y":-0.122039794921875},{"x":0.033538818359375,"y":0.0269775390625},{"x":0.0793304443359375,"y":0.079193115234375},{"x":0.0262603759765625,"y":0.1181640625},{"x":0.09063720703125,"y":0.191070556640625},{"x":0.045196533203125,"y":0.22918701171875},{"x":0.214111328125,"y":0.38616943359375},{"x":0.36224365234375,"y":0.45159912109375},{"x":0.331573486328125,"y":0.234130859375},{"x":-0.0216064453125,"y":-0.128662109375},{"x":0.063507080078125,"y":0.07781982421875},{"x":0.18083953857421875,"y":-0.05560302734375},{"x":0.246673583984375,"y":-0.0577392578125},{"x":0.294769287109375,"y":-0.11895751953125},{"x":0.4534454345703125,"y":-0.025146484375},{"x":0.2404632568359375,"y":0.2408447265625},{"x":0.4490966796875,"y":0.19354248046875},{"x":0.241241455078125,"y":0.3861083984375},{"x":0.37103271484375,"y":0.38311767578125},{"x":0.427093505859375,"y":0.179351806640625},{"x":0.382354736328125,"y":0.0760498046875},{"x":0.4039459228515625,"y":0.013916015625},{"x":0.1954345703125,"y":-0.0037841796875},{"x":0.490081787109375,"y":-0.07989501953125},{"x":0.3768157958984375,"y":-0.0213623046875},{"x":0.318878173828125,"y":0.02996826171875},{"x":0.38800048828125,"y":0.23748779296875},{"x":0.452911376953125,"y":0.0694580078125},{"x":0.5469970703125,"y":0.13421630859375},{"x":0.398895263671875,"y":-0.06646728515625},{"x":0.506500244140625,"y":-0.010833740234375}],"optimisedCameraToObject":{"translation":{"x":-0.18837712909234292,"y":0.008495932097555557,"z":0.3620946563498533},"rotation":{"quaternion":{"W":0.9840492749490121,"X":-0.10782431261297157,"Y":-0.11104313197718103,"Z":-0.0876947257397055}}},"cornersUsed":[false,true,true,true,true,true,true,true,true,false,false,true,true,true,false,true,true,true,true,true,true,true,true,false,false,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,true,true,true,true],"snapshotName":"img10.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img10.png"},{"locationInObjectSpace":[{"x":0.03027680143713951,"y":0.0,"z":-8.80034567671828E-5},{"x":0.04541520029306412,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.015138399787247181,"y":0.015138399787247181,"z":-8.387177513213828E-5},{"x":0.03027680143713951,"y":0.015138399787247181,"z":-1.2420669372659177E-4},{"x":0.04541520029306412,"y":0.015138399787247181,"z":-1.5720799274276942E-4},{"x":0.060553599148988724,"y":0.015138399787247181,"z":-1.8287566490471363E-4},{"x":0.0,"y":0.03027680143713951,"z":-6.436131661757827E-5},{"x":0.015138399787247181,"y":0.03027680143713951,"z":-1.1202985479030758E-4},{"x":0.03027680143713951,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.060553599148988724,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.04541520029306412,"z":-1.3214275531936437E-4},{"x":0.03027680143713951,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.060553599148988724,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.0,"y":0.060553599148988724,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.060553599148988724,"z":-1.442104985471815E-4},{"x":0.03027680143713951,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138399787247181,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.03027680143713951,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.04541520029306412,"y":0.07569199800491333,"z":-2.2156929480843246E-4},{"x":0.060553599148988724,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.015138399787247181,"y":0.09083039313554764,"z":-1.4421051309909672E-4},{"x":0.03027680143713951,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.060553599148988724,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.03027680143713951,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.0,"y":0.12110719084739685,"z":-6.436132389353588E-5},{"x":0.015138399787247181,"y":0.12110719084739685,"z":-1.120298620662652E-4},{"x":0.03027680143713951,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.04541520029306412,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.0,"y":0.13624559342861176,"z":-3.62032515113242E-5},{"x":0.015138399787247181,"y":0.13624559342861176,"z":-8.387178968405351E-5},{"x":0.03027680143713951,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.04541520029306412,"y":0.13624559342861176,"z":-1.5720800729468465E-4}],"locationInImageSpace":[{"x":695.8687744140625,"y":331.31121826171875},{"x":720.4450073242188,"y":328.8446044921875},{"x":674.1835327148438,"y":354.9635009765625},{"x":698.5634765625,"y":353.1105651855469},{"x":723.6292724609375,"y":351.0498046875},{"x":749.0966796875,"y":349.057373046875},{"x":652.76123046875,"y":378.4397277832031},{"x":676.867919921875,"y":377.0224914550781},{"x":701.7291259765625,"y":375.2709655761719},{"x":726.8463134765625,"y":373.62725830078125},{"x":752.8696899414062,"y":371.935791015625},{"x":655.311767578125,"y":400.8829650878906},{"x":679.9224243164062,"y":399.4931945800781},{"x":704.8001708984375,"y":398.1195373535156},{"x":730.0814208984375,"y":396.6780700683594},{"x":756.2823486328125,"y":395.3584899902344},{"x":658.0413818359375,"y":423.3209533691406},{"x":682.6307983398438,"y":422.485107421875},{"x":707.8818969726562,"y":421.3363952636719},{"x":733.608154296875,"y":420.1712646484375},{"x":759.9989013671875,"y":419.1002502441406},{"x":660.6958618164062,"y":446.4526062011719},{"x":685.4485473632812,"y":445.858154296875},{"x":710.9008178710938,"y":444.849609375},{"x":737.1593017578125,"y":444.0711364746094},{"x":763.7926635742188,"y":443.37738037109375},{"x":663.311767578125,"y":470.22882080078125},{"x":688.5281372070312,"y":469.6835021972656},{"x":714.2255249023438,"y":469.1806945800781},{"x":740.5036010742188,"y":468.60418701171875},{"x":767.47607421875,"y":468.320068359375},{"x":666.0018920898438,"y":494.060546875},{"x":691.4533081054688,"y":494.17791748046875},{"x":717.442626953125,"y":493.74310302734375},{"x":744.0438842773438,"y":493.3177795410156},{"x":669.0294189453125,"y":518.9141845703125},{"x":694.454833984375,"y":518.883056640625},{"x":720.8811645507812,"y":519.0459594726562},{"x":747.887939453125,"y":518.9967651367188},{"x":671.8126220703125,"y":543.8754272460938},{"x":697.6804809570312,"y":544.1983032226562},{"x":724.2589721679688,"y":544.7203979492188},{"x":751.2757568359375,"y":544.985107421875}],"reprojectionErrors":[{"x":0.2110595703125,"y":-0.141632080078125},{"x":0.14898681640625,"y":-0.162872314453125},{"x":-0.02362060546875,"y":-0.170562744140625},{"x":0.0791015625,"y":0.163421630859375},{"x":0.04302978515625,"y":-0.095184326171875},{"x":-0.06524658203125,"y":-0.06585693359375},{"x":-0.0347900390625,"y":-0.04681396484375},{"x":0.04559326171875,"y":-0.0465087890625},{"x":0.0908203125,"y":-0.352294921875},{"x":0.05902099609375,"y":0.26690673828125},{"x":2.44140625E-4,"y":-0.111602783203125},{"x":0.285888671875,"y":0.051025390625}],"optimisedCameraToObject":{"translation":{"x":0.1752178586904724,"y":0.0195113362166437,"z":0.47158241983605687},"rotation":{"quaternion":{"W":0.9720041589084603,"X":-0.14398321045272952,"Y":0.18360786692350636,"Z":-0.027656850438575794}}},"cornersUsed":[false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,false,false,false,false,false,false,false,false,false,false,true,true,true,true,false,false,false,false,false,false,false,false,false,false,true,true,true,true,false,false,false,false,false,false,false,false,false,false],"snapshotName":"img11.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img11.png"},{"locationInObjectSpace":[{"x":0.06055360287427902,"y":0.0,"z":-1.4667242066934705E-4},{"x":0.06055360287427902,"y":0.015138400718569756,"z":-1.8287566490471363E-4},{"x":0.0,"y":0.030276799574494362,"z":-6.436130934162065E-5},{"x":0.06055360287427902,"y":0.030276799574494362,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.030276799574494362,"z":-2.2936778259463608E-4},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.06055360287427902,"y":0.04541520029306412,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.04541520029306412,"z":-2.4948068312369287E-4},{"x":0.030276799574494362,"y":0.06055360287427902,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.06055360287427902,"z":-2.1754672343377024E-4},{"x":0.06055360287427902,"y":0.06055360287427902,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.06055360287427902,"z":-2.615484409034252E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138400718569756,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.06055360287427902,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.015138400718569756,"y":0.09083040058612823,"z":-1.4421051309909672E-4},{"x":0.06055360287427902,"y":0.09083040058612823,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.09083040058612823,"z":-2.615484409034252E-4},{"x":0.015138400718569756,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.030276799574494362,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.06055360287427902,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.0,"y":0.12110719829797745,"z":-6.436131661757827E-5},{"x":0.015138400718569756,"y":0.12110719829797745,"z":-1.1202985479030758E-4},{"x":0.030276799574494362,"y":0.12110719829797745,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.12110719829797745,"z":-1.853660651249811E-4},{"x":0.06055360287427902,"y":0.12110719829797745,"z":-2.1103373728692532E-4},{"x":0.07569199800491333,"y":0.12110719829797745,"z":-2.2936778259463608E-4}],"locationInImageSpace":[{"x":726.3853149414062,"y":115.88086700439453},{"x":726.773193359375,"y":135.99151611328125},{"x":632.8651123046875,"y":162.272705078125},{"x":726.309326171875,"y":157.0055389404297},{"x":751.0694580078125,"y":155.28553771972656},{"x":701.7883911132812,"y":178.75889587402344},{"x":726.3238525390625,"y":177.39154052734375},{"x":751.1889038085938,"y":176.3183135986328},{"x":677.742919921875,"y":200.34829711914062},{"x":701.628173828125,"y":199.29132080078125},{"x":726.2393188476562,"y":198.5946807861328},{"x":751.3489990234375,"y":197.47854614257812},{"x":630.7745971679688,"y":222.37086486816406},{"x":653.803955078125,"y":222.02650451660156},{"x":726.2476806640625,"y":219.85745239257812},{"x":751.3478393554688,"y":219.14500427246094},{"x":653.225341796875,"y":242.61968994140625},{"x":725.9064331054688,"y":241.3304901123047},{"x":751.2797241210938,"y":241.0029296875},{"x":652.5405883789062,"y":263.7134704589844},{"x":676.7761840820312,"y":263.46630859375},{"x":700.971435546875,"y":263.3917541503906},{"x":726.18896484375,"y":263.1636962890625},{"x":751.6013793945312,"y":262.9449462890625},{"x":628.4839477539062,"y":284.8269958496094},{"x":652.0487060546875,"y":284.8564453125},{"x":676.2115478515625,"y":284.9716491699219},{"x":700.8026733398438,"y":285.06134033203125},{"x":726.0464477539062,"y":285.3333435058594},{"x":751.421630859375,"y":285.34490966796875}],"reprojectionErrors":[{"x":0.164306640625,"y":-0.1461181640625}],"optimisedCameraToObject":{"translation":{"x":0.1741760079974631,"y":-0.13340752809940568,"z":0.49641856938546186},"rotation":{"quaternion":{"W":0.9752374878674577,"X":-0.10722800713072572,"Y":0.19106807135000117,"Z":0.030116255665905572}}},"cornersUsed":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,true,true,true,true,false,false,false,false,false,false,false,false,true,true,false,false,true,true,false,false,false,false,false,false,false,false,false,true,false,false,true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,false,false,false,false,false,false,false],"snapshotName":"img12.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img12.png"},{"locationInObjectSpace":[{"x":0.18166080117225647,"y":0.0,"z":-8.800344949122518E-5},{"x":0.19679918885231018,"y":0.0,"z":-4.766857091453858E-5},{"x":0.07569199800491333,"y":0.015138399787247181,"z":-2.012097102124244E-4},{"x":0.18166080117225647,"y":0.015138399787247181,"z":-1.2420669372659177E-4},{"x":0.19679918885231018,"y":0.015138399787247181,"z":-8.387180423596874E-5},{"x":0.03027680143713951,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.04541520029306412,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.060553599148988724,"y":0.03027680143713951,"z":-2.1103373728692532E-4},{"x":0.12110719084739685,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.13624559342861176,"y":0.03027680143713951,"z":-2.293677971465513E-4},{"x":0.18166080117225647,"y":0.03027680143713951,"z":-1.5236476610880345E-4},{"x":0.19679918885231018,"y":0.03027680143713951,"z":-1.1202988389413804E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.04541520029306412,"z":-1.3214275531936437E-4},{"x":0.060553599148988724,"y":0.04541520029306412,"z":-2.311466378159821E-4},{"x":0.10596879571676254,"y":0.04541520029306412,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.04541520029306412,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.04541520029306412,"z":-2.494807122275233E-4},{"x":0.18166080117225647,"y":0.04541520029306412,"z":-1.7247768118977547E-4},{"x":0.19679918885231018,"y":0.04541520029306412,"z":-1.3214279897511005E-4},{"x":0.0,"y":0.060553599148988724,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.060553599148988724,"z":-1.442104985471815E-4},{"x":0.10596879571676254,"y":0.060553599148988724,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.18166080117225647,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.060553599148988724,"z":-1.4421054220292717E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138399787247181,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.03027680143713951,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.10596879571676254,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.12110719084739685,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.13624559342861176,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.15138399600982666,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.16652239859104156,"y":0.07569199800491333,"z":-2.215693093603477E-4},{"x":0.18166080117225647,"y":0.07569199800491333,"z":-1.885679957922548E-4},{"x":0.19679918885231018,"y":0.07569199800491333,"z":-1.482331135775894E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.015138399787247181,"y":0.09083039313554764,"z":-1.4421051309909672E-4},{"x":0.03027680143713951,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.09083039313554764,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.09083039313554764,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.15138399600982666,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.16652239859104156,"y":0.09083039313554764,"z":-2.1754672343377024E-4},{"x":0.18166080117225647,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.19679918885231018,"y":0.09083039313554764,"z":-1.4421054220292717E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.03027680143713951,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.04541520029306412,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.060553599148988724,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.09083039313554764,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.10596879571676254,"y":0.10596879571676254,"z":-2.6414793683215976E-4},{"x":0.12110719084739685,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.15138399600982666,"y":0.10596879571676254,"z":-2.3114665236789733E-4},{"x":0.16652239859104156,"y":0.10596879571676254,"z":-2.0547898020595312E-4},{"x":0.18166080117225647,"y":0.10596879571676254,"z":-1.7247768118977547E-4},{"x":0.19679918885231018,"y":0.10596879571676254,"z":-1.3214279897511005E-4},{"x":0.0,"y":0.12110719084739685,"z":-6.436132389353588E-5},{"x":0.015138399787247181,"y":0.12110719084739685,"z":-1.120298620662652E-4},{"x":0.03027680143713951,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.04541520029306412,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.060553599148988724,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.10596879571676254,"y":0.12110719084739685,"z":-2.440350508550182E-4},{"x":0.12110719084739685,"y":0.12110719084739685,"z":-2.403682447038591E-4},{"x":0.13624559342861176,"y":0.12110719084739685,"z":-2.2936781169846654E-4},{"x":0.15138399600982666,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.16652239859104156,"y":0.12110719084739685,"z":-1.8536607967689633E-4},{"x":0.18166080117225647,"y":0.12110719084739685,"z":-1.5236478066071868E-4},{"x":0.19679918885231018,"y":0.12110719084739685,"z":-1.1202989844605327E-4},{"x":0.0,"y":0.13624559342861176,"z":-3.62032515113242E-5},{"x":0.015138399787247181,"y":0.13624559342861176,"z":-8.387178968405351E-5},{"x":0.03027680143713951,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.04541520029306412,"y":0.13624559342861176,"z":-1.5720800729468465E-4},{"x":0.060553599148988724,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.10596879571676254,"y":0.13624559342861176,"z":-2.1587696392089128E-4},{"x":0.12110719084739685,"y":0.13624559342861176,"z":-2.1221015776973218E-4},{"x":0.13624559342861176,"y":0.13624559342861176,"z":-2.0120973931625485E-4},{"x":0.18166080117225647,"y":0.13624559342861176,"z":-1.24206708278507E-4},{"x":0.19679918885231018,"y":0.13624559342861176,"z":-8.387181878788397E-5}],"locationInImageSpace":[{"x":423.3897399902344,"y":173.48013305664062},{"x":442.972900390625,"y":172.7267608642578},{"x":290.38787841796875,"y":198.4581298828125},{"x":424.0234680175781,"y":192.596435546875},{"x":443.03521728515625,"y":192.0249481201172},{"x":234.6740264892578,"y":219.08505249023438},{"x":253.085205078125,"y":218.36309814453125},{"x":271.4374694824219,"y":217.64419555664062},{"x":346.87664794921875,"y":214.85775756835938},{"x":366.1274719238281,"y":214.41029357910156},{"x":424.1193542480469,"y":211.9219970703125},{"x":443.55511474609375,"y":211.2221221923828},{"x":196.69229125976562,"y":238.25863647460938},{"x":216.16500854492188,"y":238.31895446777344},{"x":271.68377685546875,"y":236.20614624023438},{"x":327.88983154296875,"y":234.40293884277344},{"x":347.12884521484375,"y":234.09881591796875},{"x":366.1667175292969,"y":233.29840087890625},{"x":424.2355651855469,"y":231.4538116455078},{"x":444.12158203125,"y":230.46688842773438},{"x":197.2330780029297,"y":256.76690673828125},{"x":216.08665466308594,"y":257.00213623046875},{"x":328.0366516113281,"y":253.78515625},{"x":347.00042724609375,"y":253.07435607910156},{"x":366.24505615234375,"y":252.31100463867188},{"x":424.661376953125,"y":250.7879638671875},{"x":444.19866943359375,"y":250.08523559570312},{"x":197.2081298828125,"y":276.2799377441406},{"x":215.76817321777344,"y":276.1237487792969},{"x":233.94638061523438,"y":275.31781005859375},{"x":328.0650634765625,"y":272.8179626464844},{"x":347.2374572753906,"y":272.173583984375},{"x":366.73431396484375,"y":271.9756164550781},{"x":386.0237731933594,"y":271.1842346191406},{"x":405.2734069824219,"y":270.6026306152344},{"x":424.8783874511719,"y":269.904541015625},{"x":444.70416259765625,"y":269.3650207519531},{"x":197.026123046875,"y":295.5208435058594},{"x":214.78485107421875,"y":293.681396484375},{"x":233.7113037109375,"y":293.8584289550781},{"x":252.37889099121094,"y":294.0794372558594},{"x":309.0799560546875,"y":292.6269836425781},{"x":328.1746826171875,"y":292.04620361328125},{"x":347.2156982421875,"y":290.7677001953125},{"x":366.6750793457031,"y":291.1441650390625},{"x":386.10247802734375,"y":290.7586364746094},{"x":405.763671875,"y":290.162109375},{"x":425.1170959472656,"y":289.6654052734375},{"x":444.9590759277344,"y":289.1470642089844},{"x":196.8206787109375,"y":314.405029296875},{"x":215.41165161132812,"y":314.08203125},{"x":233.96974182128906,"y":313.5118408203125},{"x":252.6078643798828,"y":313.0881652832031},{"x":271.1347961425781,"y":312.72113037109375},{"x":290.11065673828125,"y":312.3273620605469},{"x":309.2467041015625,"y":311.80523681640625},{"x":328.2076416015625,"y":311.4145812988281},{"x":347.101806640625,"y":310.500732421875},{"x":366.7896728515625,"y":310.58062744140625},{"x":386.28070068359375,"y":310.12847900390625},{"x":405.8565368652344,"y":309.68939208984375},{"x":425.4317626953125,"y":309.591552734375},{"x":445.2892150878906,"y":308.9874572753906},{"x":196.33749389648438,"y":333.61859130859375},{"x":214.6002655029297,"y":333.1589660644531},{"x":233.46090698242188,"y":332.9014587402344},{"x":252.4772491455078,"y":332.3299560546875},{"x":271.0500183105469,"y":332.12811279296875},{"x":328.1911315917969,"y":331.0886535644531},{"x":347.6840515136719,"y":330.77581787109375},{"x":366.9793701171875,"y":330.3049011230469},{"x":386.5837097167969,"y":328.66925048828125},{"x":404.6912841796875,"y":328.8954162597656},{"x":425.9605407714844,"y":329.022216796875},{"x":445.69464111328125,"y":328.5645446777344},{"x":196.25186157226562,"y":352.6695861816406},{"x":214.72816467285156,"y":352.4706726074219},{"x":233.1695098876953,"y":352.18011474609375},{"x":252.07229614257812,"y":351.9699401855469},{"x":271.19793701171875,"y":351.5841369628906},{"x":328.3217468261719,"y":350.5903625488281},{"x":347.856689453125,"y":349.9689636230469},{"x":367.1235046386719,"y":349.9009094238281},{"x":426.0580139160156,"y":349.033447265625},{"x":446.0525207519531,"y":348.81683349609375}],"reprojectionErrors":[{"x":0.9501800537109375,"y":0.55389404296875},{"x":-0.2587127685546875,"y":-0.1300506591796875},{"x":-0.228118896484375,"y":0.086456298828125},{"x":0.0684814453125,"y":-0.109832763671875},{"x":-0.0919036865234375,"y":0.052764892578125},{"x":-0.07464599609375,"y":-0.12548828125},{"x":-0.093353271484375,"y":-0.008453369140625},{"x":-0.321441650390625,"y":-0.339599609375},{"x":-0.06097412109375,"y":0.136505126953125},{"x":-0.1690673828125,"y":-0.28350830078125},{"x":0.0219879150390625,"y":-0.22479248046875},{"x":-0.1055908203125,"y":-0.170867919921875},{"x":0.0498046875,"y":0.747283935546875},{"x":-0.193328857421875,"y":-0.071929931640625},{"x":-0.2201080322265625,"y":-0.166839599609375},{"x":-0.364898681640625,"y":-0.246978759765625},{"x":-0.36236572265625,"y":-0.08160400390625},{"x":-0.132080078125,"y":-0.121795654296875},{"x":-0.247039794921875,"y":-0.011260986328125},{"x":0.287567138671875,"y":0.464996337890625},{"x":0.009307861328125,"y":-0.283416748046875},{"x":0.23822021484375,"y":-0.170379638671875},{"x":-0.0157318115234375,"y":-0.261077880859375},{"x":0.022125244140625,"y":-0.2135009765625},{"x":-0.168365478515625,"y":-0.258575439453125},{"x":-0.04443359375,"y":-0.14715576171875},{"x":-0.112396240234375,"y":1.127349853515625},{"x":1.4337158203125,"y":0.5384521484375},{"x":0.116119384765625,"y":-0.232391357421875},{"x":-0.018096923828125,"y":-0.31475830078125},{"x":-0.259033203125,"y":-0.222991943359375},{"x":-0.02923583984375,"y":-0.120635986328125},{"x":-0.212249755859375,"y":0.200531005859375},{"x":-0.009674072265625,"y":-0.033203125},{"x":0.170989990234375,"y":-0.08038330078125},{"x":0.11798095703125,"y":-0.1717529296875}],"optimisedCameraToObject":{"translation":{"x":-0.15821167947099832,"y":-0.09974840072298209,"z":0.5508410385166929},"rotation":{"quaternion":{"W":0.9975714434813825,"X":-0.044902712196075355,"Y":0.05254354797316882,"Z":-0.008610293508279004}}},"cornersUsed":[false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,true,false,false,false,false,false,false,true,true,false,false,true,true,true,false,false,false,true,true,false,false,true,true,false,true,false,false,true,false,false,true,true,true,false,false,true,true,false,true,false,false,false,false,false,true,true,true,false,false,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,true,true,false,true,true,false,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,false,true,true,true,false,false,true,true,true,true,true,true,true,false,false,true,true,true,false,false,true,true],"snapshotName":"img13.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img13.png"},{"locationInObjectSpace":[{"x":0.04541520029306412,"y":0.0,"z":-1.2100474850740284E-4},{"x":0.0,"y":0.015138399787247181,"z":-3.620323695940897E-5},{"x":0.04541520029306412,"y":0.015138399787247181,"z":-1.5720799274276942E-4},{"x":0.09083039313554764,"y":0.015138399787247181,"z":-2.1221014321781695E-4},{"x":0.0,"y":0.03027680143713951,"z":-6.436131661757827E-5},{"x":0.04541520029306412,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.19679918885231018,"y":0.03027680143713951,"z":-1.1202988389413804E-4},{"x":0.0,"y":0.04541520029306412,"z":-8.447422442259267E-5},{"x":0.04541520029306412,"y":0.04541520029306412,"z":-2.054789656540379E-4},{"x":0.0,"y":0.060553599148988724,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.060553599148988724,"z":-1.442104985471815E-4},{"x":0.03027680143713951,"y":0.060553599148988724,"z":-1.8454542441759259E-4},{"x":0.04541520029306412,"y":0.060553599148988724,"z":-2.1754672343377024E-4},{"x":0.10596879571676254,"y":0.060553599148988724,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.0,"y":0.07569199800491333,"z":-1.0056455357698724E-4},{"x":0.015138399787247181,"y":0.07569199800491333,"z":-1.4823308447375894E-4},{"x":0.03027680143713951,"y":0.07569199800491333,"z":-1.8856801034417003E-4},{"x":0.04541520029306412,"y":0.07569199800491333,"z":-2.2156929480843246E-4},{"x":0.12110719084739685,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.13624559342861176,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.15138399600982666,"y":0.07569199800491333,"z":-2.472369815222919E-4},{"x":0.16652239859104156,"y":0.07569199800491333,"z":-2.215693093603477E-4},{"x":0.0,"y":0.09083039313554764,"z":-9.65419749263674E-5},{"x":0.015138399787247181,"y":0.09083039313554764,"z":-1.4421051309909672E-4},{"x":0.03027680143713951,"y":0.09083039313554764,"z":-1.8454542441759259E-4},{"x":0.12110719084739685,"y":0.09083039313554764,"z":-2.7254887390881777E-4},{"x":0.13624559342861176,"y":0.09083039313554764,"z":-2.615484409034252E-4},{"x":0.15138399600982666,"y":0.09083039313554764,"z":-2.4321439559571445E-4},{"x":0.0,"y":0.10596879571676254,"z":-8.447422442259267E-5},{"x":0.015138399787247181,"y":0.10596879571676254,"z":-1.321427698712796E-4},{"x":0.07569199800491333,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.12110719084739685,"y":0.10596879571676254,"z":-2.604811452329159E-4},{"x":0.13624559342861176,"y":0.10596879571676254,"z":-2.494807122275233E-4},{"x":0.060553599148988724,"y":0.12110719084739685,"z":-2.1103375183884054E-4},{"x":0.12110719084739685,"y":0.12110719084739685,"z":-2.403682447038591E-4},{"x":0.13624559342861176,"y":0.12110719084739685,"z":-2.2936781169846654E-4},{"x":0.19679918885231018,"y":0.12110719084739685,"z":-1.1202989844605327E-4},{"x":0.060553599148988724,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.15138399600982666,"y":0.13624559342861176,"z":-1.8287567945662886E-4},{"x":0.19679918885231018,"y":0.13624559342861176,"z":-8.387181878788397E-5}],"locationInImageSpace":[{"x":301.60760498046875,"y":45.22820281982422},{"x":243.15762329101562,"y":66.91693115234375},{"x":302.7160339355469,"y":66.0751953125},{"x":362.1037902832031,"y":65.04930114746094},{"x":243.92860412597656,"y":87.1152572631836},{"x":303.1773376464844,"y":86.28119659423828},{"x":500.3439636230469,"y":82.36405181884766},{"x":244.814208984375,"y":107.6163330078125},{"x":303.7970886230469,"y":106.76351928710938},{"x":305.2392272949219,"y":166.33348083496094},{"x":265.3044738769531,"y":127.43755340576172},{"x":284.9887390136719,"y":126.87232971191406},{"x":304.72332763671875,"y":126.81134033203125},{"x":383.1479187011719,"y":125.42845916748047},{"x":402.4729309082031,"y":124.7552261352539},{"x":422.15350341796875,"y":124.56531524658203},{"x":306.0045166015625,"y":186.90203857421875},{"x":265.990966796875,"y":147.3282928466797},{"x":285.4687805175781,"y":146.93075561523438},{"x":305.1423034667969,"y":146.7398681640625},{"x":403.0187683105469,"y":144.837158203125},{"x":422.27679443359375,"y":144.45468139648438},{"x":441.8232421875,"y":144.20404052734375},{"x":461.4884948730469,"y":143.9822998046875},{"x":247.21522521972656,"y":167.75921630859375},{"x":266.58306884765625,"y":167.17857360839844},{"x":286.1919860839844,"y":166.93679809570312},{"x":403.4565124511719,"y":164.78514099121094},{"x":422.4806213378906,"y":164.37503051757812},{"x":441.58917236328125,"y":163.7661895751953},{"x":247.90480041503906,"y":187.33056640625},{"x":267.36773681640625,"y":187.13479614257812},{"x":345.178466796875,"y":185.7676239013672},{"x":403.84735107421875,"y":184.40618896484375},{"x":423.04437255859375,"y":184.5384521484375},{"x":326.3033752441406,"y":205.42123413085938},{"x":403.8284606933594,"y":204.37759399414062},{"x":423.3018493652344,"y":203.8394775390625},{"x":500.69927978515625,"y":202.3909454345703},{"x":326.7899475097656,"y":225.2276611328125},{"x":442.83294677734375,"y":222.90455627441406},{"x":500.8946838378906,"y":221.91018676757812}],"reprojectionErrors":[{"x":-2.20587158203125,"y":-0.5668716430664062},{"x":-1.92242431640625,"y":-0.41704559326171875},{"x":7.547271728515625,"y":3.96075439453125},{"x":-1.819549560546875,"y":0.0994415283203125},{"x":8.65716552734375,"y":2.517578125},{"x":1.10992431640625,"y":1.645294189453125}],"optimisedCameraToObject":{"translation":{"x":-0.11399837940699524,"y":-0.19924717881820653,"z":0.537215032661504},"rotation":{"quaternion":{"W":0.9862009379116198,"X":0.09225346542167978,"Y":0.1373939476741499,"Z":-0.0044622104886915944}}},"cornersUsed":[false,false,false,true,false,false,false,false,false,false,false,false,false,false,true,false,false,true,false,false,true,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,true,true,true,false,false,false,false,false,true,true,true,false,false,false,false,true,true,true,true,false,false,false,false,true,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,true,false,false,true,true,false,false,false,false,false,false,false,false,true,false,false,false,true,true,false,false,false,true,false,false,false,false,true,false,false,false,false,false,true,false,false,true],"snapshotName":"img14.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img14.png"},{"locationInObjectSpace":[{"x":0.0,"y":0.0,"z":-0.0},{"x":0.12110719084739685,"y":0.0,"z":-1.760069135343656E-4},{"x":0.0,"y":0.015138398855924606,"z":-3.620323695940897E-5},{"x":0.015138399787247181,"y":0.015138398855924606,"z":-8.387177513213828E-5},{"x":0.12110719084739685,"y":0.015138398855924606,"z":-2.1221014321781695E-4},{"x":0.12110719084739685,"y":0.03027680143713951,"z":-2.4036823015194386E-4},{"x":0.16652239859104156,"y":0.03027680143713951,"z":-1.853660651249811E-4},{"x":0.16652239859104156,"y":0.04541519656777382,"z":-2.054789656540379E-4},{"x":0.060553599148988724,"y":0.060553599148988724,"z":-2.4321439559571445E-4},{"x":0.07569199800491333,"y":0.060553599148988724,"z":-2.615484409034252E-4},{"x":0.09083039313554764,"y":0.060553599148988724,"z":-2.7254887390881777E-4},{"x":0.07569199800491333,"y":0.07569199800491333,"z":-2.6557102683000267E-4},{"x":0.09083039313554764,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.10596879571676254,"y":0.07569199800491333,"z":-2.8023828053846955E-4},{"x":0.12110719084739685,"y":0.07569199800491333,"z":-2.765714598353952E-4},{"x":0.0,"y":0.09083040058612823,"z":-9.654196765040979E-5},{"x":0.015138399787247181,"y":0.09083040058612823,"z":-1.442104985471815E-4},{"x":0.03027680143713951,"y":0.09083040058612823,"z":-1.8454542441759259E-4},{"x":0.09083039313554764,"y":0.09083040058612823,"z":-2.7254887390881777E-4},{"x":0.10596879571676254,"y":0.09083040058612823,"z":-2.762156946118921E-4},{"x":0.12110719084739685,"y":0.09083040058612823,"z":-2.7254887390881777E-4},{"x":0.19679918885231018,"y":0.09083040058612823,"z":-1.4421054220292717E-4}],"locationInImageSpace":[{"x":114.17156982421875,"y":67.28117370605469},{"x":270.4309997558594,"y":72.11009979248047},{"x":113.83846282958984,"y":86.57022094726562},{"x":133.40855407714844,"y":87.21183776855469},{"x":270.01611328125,"y":91.7333755493164},{"x":269.7028503417969,"y":111.4118881225586},{"x":327.98236083984375,"y":112.9396743774414},{"x":327.69970703125,"y":132.42373657226562},{"x":191.32101440429688,"y":147.1307830810547},{"x":210.68605041503906,"y":148.06642150878906},{"x":230.0892791748047,"y":148.92433166503906},{"x":210.32156372070312,"y":167.81781005859375},{"x":229.60076904296875,"y":168.17388916015625},{"x":249.34869384765625,"y":168.89419555664062},{"x":268.828369140625,"y":169.74481201171875},{"x":111.43255615234375,"y":184.91949462890625},{"x":131.4401092529297,"y":184.6986541748047},{"x":151.146484375,"y":185.2243194580078},{"x":229.64414978027344,"y":187.56214904785156},{"x":248.9082489013672,"y":187.97756958007812},{"x":268.59063720703125,"y":188.58273315429688},{"x":364.78778076171875,"y":191.34783935546875}],"reprojectionErrors":[],"optimisedCameraToObject":{"translation":{"x":-0.21793888425465613,"y":-0.18617200802691564,"z":0.5303268717633165},"rotation":{"quaternion":{"W":0.999790376710533,"X":0.005325900489983016,"Y":-0.01630326977547809,"Z":0.011182165068059568}}},"cornersUsed":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,true,true,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,false,false,false,false,false,true,true,true,false,false,false,true,true,true,false,false,false,false,true],"snapshotName":"img15.png","snapshotDataLocation":"file:///opt/photonvision/photonvision_config/calibration/98f92f78-fa5c-4cd5-909e-5be344c42733/imgs/800x600/img15.png"}],"calobjectSize":{"width":14.0,"height":10.0},"calobjectSpacing":0.015138399999999998,"lensmodel":"LENSMODEL_OPENCV"} \ No newline at end of file diff --git a/src/main/java/org/team2342/frc/Constants.java b/src/main/java/org/team2342/frc/Constants.java index 86b9e6a..6c95a36 100644 --- a/src/main/java/org/team2342/frc/Constants.java +++ b/src/main/java/org/team2342/frc/Constants.java @@ -10,9 +10,10 @@ import edu.wpi.first.math.geometry.Transform3d; import edu.wpi.first.math.geometry.Translation3d; import edu.wpi.first.math.util.Units; +import org.team2342.lib.util.CameraParameters; public final class Constants { - public static final Mode CURRENT_MODE = Mode.REAL; + public static final Mode CURRENT_MODE = Mode.SIM; public static final boolean TUNING = true; public static enum Mode { @@ -27,24 +28,18 @@ public static enum Mode { } public static final class VisionConstants { - public static final String LEFT_CAMERA_NAME = "left_arducam"; - public static final String RIGHT_CAMERA_NAME = "right_arducam"; + public static final String CAMERA_NAME = "left_arducam"; - public static final Transform3d FRONT_LEFT_TRANSFORM = + public static final Transform3d CAMERA_TRANSFORM = new Transform3d( new Translation3d( - Units.inchesToMeters(6.2944), - Units.inchesToMeters(8.9822), - Units.inchesToMeters(12.125)), - new Rotation3d(0, 0.0, Units.degreesToRadians(-35))); + Units.inchesToMeters(7.883 + 0.5), + Units.inchesToMeters(-10.895 - 0.5), + Units.inchesToMeters(8)), + new Rotation3d(0, Units.degreesToRadians(-22.0), Units.degreesToRadians(90 - 61.475))); - public static final Transform3d FRONT_RIGHT_TRANSFORM = - new Transform3d( - new Translation3d( - Units.inchesToMeters(6.2944), - Units.inchesToMeters(-8.9822), - Units.inchesToMeters(12.125)), - new Rotation3d(0, 0.0, Units.degreesToRadians(35))); + public static final CameraParameters LEFT_PARAMETERS = + CameraParameters.loadFromName(CAMERA_NAME, 800, 600).withTransform(CAMERA_TRANSFORM); // Basic filtering thresholds public static final double MAX_AMBIGUITY = 0.1; diff --git a/src/main/java/org/team2342/frc/RobotContainer.java b/src/main/java/org/team2342/frc/RobotContainer.java index c7f42d4..bc96c39 100644 --- a/src/main/java/org/team2342/frc/RobotContainer.java +++ b/src/main/java/org/team2342/frc/RobotContainer.java @@ -22,6 +22,7 @@ import lombok.Getter; import org.littletonrobotics.junction.LoggedPowerDistribution; import org.littletonrobotics.junction.networktables.LoggedDashboardChooser; +import org.photonvision.PhotonPoseEstimator.PoseStrategy; import org.team2342.frc.Constants.CANConstants; import org.team2342.frc.Constants.DriveConstants; import org.team2342.frc.Constants.VisionConstants; @@ -36,6 +37,7 @@ import org.team2342.frc.subsystems.drive.ModuleIOTalonFX; import org.team2342.frc.subsystems.vision.Vision; import org.team2342.frc.subsystems.vision.VisionIO; +import org.team2342.frc.subsystems.vision.VisionIOPhoton; import org.team2342.frc.subsystems.vision.VisionIOSim; import org.team2342.lib.util.AllianceUtils; import org.team2342.lib.util.EnhancedXboxController; @@ -63,7 +65,14 @@ public RobotContainer() { new ModuleIOTalonFX(CANConstants.FR_IDS, DriveConstants.ENCODER_OFFSETS[1]), new ModuleIOTalonFX(CANConstants.BL_IDS, DriveConstants.ENCODER_OFFSETS[2]), new ModuleIOTalonFX(CANConstants.BR_IDS, DriveConstants.ENCODER_OFFSETS[3])); - vision = new Vision(drive::addVisionMeasurement, new VisionIO() {}); + vision = + new Vision( + drive::addVisionMeasurement, + drive::getTimestampedHeading, + new VisionIOPhoton( + VisionConstants.LEFT_PARAMETERS, + PoseStrategy.CONSTRAINED_SOLVEPNP, + PoseStrategy.MULTI_TAG_PNP_ON_COPROCESSOR)); LoggedPowerDistribution.getInstance(CANConstants.PDH_ID, ModuleType.kRev); break; @@ -79,13 +88,11 @@ public RobotContainer() { vision = new Vision( drive::addVisionMeasurement, + drive::getTimestampedHeading, new VisionIOSim( - VisionConstants.RIGHT_CAMERA_NAME, - VisionConstants.FRONT_RIGHT_TRANSFORM, - drive::getRawOdometryPose), - new VisionIOSim( - VisionConstants.LEFT_CAMERA_NAME, - VisionConstants.FRONT_LEFT_TRANSFORM, + VisionConstants.LEFT_PARAMETERS, + PoseStrategy.CONSTRAINED_SOLVEPNP, + PoseStrategy.MULTI_TAG_PNP_ON_COPROCESSOR, drive::getRawOdometryPose)); break; @@ -98,7 +105,12 @@ public RobotContainer() { new ModuleIO() {}, new ModuleIO() {}, new ModuleIO() {}); - vision = new Vision(drive::addVisionMeasurement, new VisionIO() {}, new VisionIO() {}); + vision = + new Vision( + drive::addVisionMeasurement, + drive::getTimestampedHeading, + new VisionIO() {}, + new VisionIO() {}); break; } @@ -108,6 +120,12 @@ public RobotContainer() { autoChooser = new LoggedDashboardChooser<>("Auto Choices", AutoBuilder.buildAutoChooser()); autoChooser.get(); + SmartDashboard.putData( + "Calculate Vision Heading Offset", + Commands.runOnce(() -> drive.calculateVisionHeadingOffset()) + .alongWith(Commands.print("Calculated Vision Offset")) + .ignoringDisable(true)); + if (Constants.TUNING) setupDevelopmentRoutines(); configureBindings(); diff --git a/src/main/java/org/team2342/frc/subsystems/drive/Drive.java b/src/main/java/org/team2342/frc/subsystems/drive/Drive.java index 979a276..3733381 100644 --- a/src/main/java/org/team2342/frc/subsystems/drive/Drive.java +++ b/src/main/java/org/team2342/frc/subsystems/drive/Drive.java @@ -32,6 +32,7 @@ import edu.wpi.first.wpilibj.Alert; import edu.wpi.first.wpilibj.Alert.AlertType; import edu.wpi.first.wpilibj.DriverStation; +import edu.wpi.first.wpilibj.Timer; import edu.wpi.first.wpilibj.smartdashboard.Field2d; import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; import edu.wpi.first.wpilibj2.command.Command; @@ -49,6 +50,7 @@ import org.team2342.lib.util.SwerveSetpointGenerator; import org.team2342.lib.util.SwerveSetpointGenerator.ModuleLimits; import org.team2342.lib.util.SwerveSetpointGenerator.SwerveSetpoint; +import org.team2342.lib.util.Timestamped; public class Drive extends SubsystemBase { private final GyroIO gyroIO; @@ -68,6 +70,9 @@ public class Drive extends SubsystemBase { private SwerveDriveKinematics kinematics = new SwerveDriveKinematics(getModuleTranslations()); private Rotation2d rawGyroRotation = new Rotation2d(); + @AutoLogOutput(key = "Vision/Heading/Offset") + private Rotation2d visionHeadingOffset = new Rotation2d(); + private SwerveModulePosition[] lastModulePositions = // For delta tracking new SwerveModulePosition[] { new SwerveModulePosition(), @@ -357,6 +362,15 @@ public void addVisionMeasurement( visionRobotPoseMeters, timestampSeconds, visionMeasurementStdDevs); } + public Timestamped getTimestampedHeading() { + return new Timestamped( + rawGyroRotation.minus(visionHeadingOffset), Timer.getFPGATimestamp()); + } + + public void calculateVisionHeadingOffset() { + visionHeadingOffset = rawGyroRotation.minus(getRotation()); + } + /** Returns an array of module translations. */ public static Translation2d[] getModuleTranslations() { return new Translation2d[] { diff --git a/src/main/java/org/team2342/frc/subsystems/vision/Vision.java b/src/main/java/org/team2342/frc/subsystems/vision/Vision.java index c217b0a..be01292 100644 --- a/src/main/java/org/team2342/frc/subsystems/vision/Vision.java +++ b/src/main/java/org/team2342/frc/subsystems/vision/Vision.java @@ -19,11 +19,13 @@ import edu.wpi.first.wpilibj2.command.SubsystemBase; import java.util.LinkedList; import java.util.List; +import java.util.function.Supplier; import org.littletonrobotics.junction.Logger; import org.team2342.frc.Constants.VisionConstants; import org.team2342.frc.subsystems.vision.VisionIO.PoseObservationType; import org.team2342.lib.logging.ExecutionLogger; import org.team2342.lib.util.AllianceUtils; +import org.team2342.lib.util.Timestamped; public class Vision extends SubsystemBase { private final VisionConsumer consumer; @@ -31,10 +33,17 @@ public class Vision extends SubsystemBase { private final VisionIOInputsAutoLogged[] inputs; private final Alert[] disconnectedAlerts; - public Vision(VisionConsumer consumer, VisionIO... io) { + private final Supplier> timestampedHeading; + + public Vision( + VisionConsumer consumer, + Supplier> timestampedHeading, + VisionIO... io) { this.consumer = consumer; this.io = io; + this.timestampedHeading = timestampedHeading; + // Initialize inputs this.inputs = new VisionIOInputsAutoLogged[io.length]; for (int i = 0; i < inputs.length; i++) { @@ -61,8 +70,12 @@ public Rotation2d getTargetX(int cameraIndex) { @Override public void periodic() { + Timestamped heading = timestampedHeading.get(); + Logger.recordOutput("Vision/Heading/Rotation", heading.get()); + Logger.recordOutput("Vision/Heading/Timestamp", heading.getTimestamp()); + for (int i = 0; i < io.length; i++) { - io[i].updateInputs(inputs[i]); + io[i].updateInputs(inputs[i], heading); Logger.processInputs("Vision/Camera" + Integer.toString(i), inputs[i]); } @@ -175,12 +188,6 @@ public void periodic() { ExecutionLogger.log("Vision"); } - public void toggleHeadingsFree() { - for (VisionIO vis : io) { - vis.toggleHeadingFree(); - } - } - @FunctionalInterface public static interface VisionConsumer { public void accept( diff --git a/src/main/java/org/team2342/frc/subsystems/vision/VisionIO.java b/src/main/java/org/team2342/frc/subsystems/vision/VisionIO.java index 8b5f7b4..bfedffd 100644 --- a/src/main/java/org/team2342/frc/subsystems/vision/VisionIO.java +++ b/src/main/java/org/team2342/frc/subsystems/vision/VisionIO.java @@ -10,6 +10,7 @@ import edu.wpi.first.math.geometry.Pose3d; import edu.wpi.first.math.geometry.Rotation2d; import org.littletonrobotics.junction.AutoLog; +import org.team2342.lib.util.Timestamped; public interface VisionIO { @AutoLog @@ -40,7 +41,5 @@ public static enum PoseObservationType { PHOTONVISION_CONSTRAINED } - public default void updateInputs(VisionIOInputs inputs) {} - - public default void toggleHeadingFree() {} + public default void updateInputs(VisionIOInputs inputs, Timestamped heading) {} } diff --git a/src/main/java/org/team2342/frc/subsystems/vision/VisionIOConstrainedSim.java b/src/main/java/org/team2342/frc/subsystems/vision/VisionIOConstrainedSim.java deleted file mode 100644 index da16e78..0000000 --- a/src/main/java/org/team2342/frc/subsystems/vision/VisionIOConstrainedSim.java +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2026 Team 2342 -// https://github.com/FRCTeamPhoenix -// -// This source code is licensed under the MIT License. -// See the LICENSE file in the root directory of this project. - -package org.team2342.frc.subsystems.vision; - -import edu.wpi.first.math.Matrix; -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.geometry.Transform3d; -import edu.wpi.first.math.numbers.N1; -import edu.wpi.first.math.numbers.N3; -import edu.wpi.first.math.numbers.N8; -import java.util.function.Supplier; -import org.photonvision.simulation.PhotonCameraSim; -import org.photonvision.simulation.SimCameraProperties; -import org.photonvision.simulation.VisionSystemSim; -import org.team2342.lib.util.AllianceUtils; - -public class VisionIOConstrainedSim extends VisionIOPhotonConstrained { - private static VisionSystemSim visionSim; - - private final Supplier poseSupplier; - private final PhotonCameraSim cameraSim; - - /** - * Creates a new VisionIOPhotonVisionSim. - * - * @param name The name of the camera. - * @param poseSupplier Supplier for the robot pose to use in simulation. - */ - public VisionIOConstrainedSim( - String name, - Transform3d robotToCamera, - Supplier rotationSupplier, - Supplier poseSupplier, - Matrix cameraMatrix, - Matrix distCoeffs) { - super(name, robotToCamera, rotationSupplier, cameraMatrix, distCoeffs); - this.poseSupplier = poseSupplier; - - // Initialize vision sim - if (visionSim == null) { - visionSim = new VisionSystemSim("main"); - visionSim.addAprilTags(AllianceUtils.getFieldLayout()); - } - - // Add sim camera - var cameraProperties = new SimCameraProperties(); - cameraProperties.setCalibration(800, 600, cameraMatrix, distCoeffs); - cameraSim = new PhotonCameraSim(camera, cameraProperties, AllianceUtils.getFieldLayout()); - visionSim.addCamera(cameraSim, robotToCamera); - } - - @Override - public void updateInputs(VisionIOInputs inputs) { - visionSim.update(poseSupplier.get()); - super.updateInputs(inputs); - } -} diff --git a/src/main/java/org/team2342/frc/subsystems/vision/VisionIOPhoton.java b/src/main/java/org/team2342/frc/subsystems/vision/VisionIOPhoton.java index 3a76a88..70490e2 100644 --- a/src/main/java/org/team2342/frc/subsystems/vision/VisionIOPhoton.java +++ b/src/main/java/org/team2342/frc/subsystems/vision/VisionIOPhoton.java @@ -1,26 +1,43 @@ -// Copyright (c) 2021-2026 Littleton Robotics -// http://github.com/Mechanical-Advantage +// Copyright (c) 2025 Team 2342 +// https://github.com/FRCTeamPhoenix // -// Use of this source code is governed by a BSD -// license that can be found in the AdvantageKit-License file -// at the root directory of this project. +// This source code is licensed under the MIT License. +// See the LICENSE file in the root directory of this project. package org.team2342.frc.subsystems.vision; -import edu.wpi.first.math.geometry.Pose3d; +import edu.wpi.first.apriltag.AprilTagFieldLayout; +import edu.wpi.first.apriltag.AprilTagFields; import edu.wpi.first.math.geometry.Rotation2d; import edu.wpi.first.math.geometry.Transform3d; +import edu.wpi.first.wpilibj.DriverStation; import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.Set; +import org.photonvision.EstimatedRobotPose; import org.photonvision.PhotonCamera; -import org.team2342.lib.util.AllianceUtils; +import org.photonvision.PhotonPoseEstimator; +import org.photonvision.PhotonPoseEstimator.ConstrainedSolvepnpParams; +import org.photonvision.PhotonPoseEstimator.PoseStrategy; +import org.photonvision.targeting.PhotonTrackedTarget; +import org.team2342.lib.util.CameraParameters; +import org.team2342.lib.util.Timestamped; /** IO implementation for real PhotonVision hardware. */ public class VisionIOPhoton implements VisionIO { protected final PhotonCamera camera; + protected final CameraParameters parameters; protected final Transform3d robotToCamera; + private final PhotonPoseEstimator poseEstimator; + + private final PoseStrategy primaryStrategy; + + private boolean hasEnabled = false; + + public static final Optional CONSTRAINED_SOLVEPNP_PARAMETERS = + Optional.of(new ConstrainedSolvepnpParams(false, 0.5)); /** * Creates a new VisionIOPhotonVision. @@ -28,84 +45,84 @@ public class VisionIOPhoton implements VisionIO { * @param name The configured name of the camera. * @param robotToCamera The 3D position of the camera relative to the robot. */ - public VisionIOPhoton(String name, Transform3d robotToCamera) { - camera = new PhotonCamera(name); - this.robotToCamera = robotToCamera; + public VisionIOPhoton( + CameraParameters parameters, PoseStrategy primaryStrategy, PoseStrategy disabledStrategy) { + camera = new PhotonCamera(parameters.getCameraName()); + this.robotToCamera = parameters.getTransform(); + this.parameters = parameters; + poseEstimator = + new PhotonPoseEstimator( + AprilTagFieldLayout.loadField(AprilTagFields.kDefaultField), + disabledStrategy, + robotToCamera); + this.primaryStrategy = primaryStrategy; } @Override - public void updateInputs(VisionIOInputs inputs) { + public void updateInputs(VisionIOInputs inputs, Timestamped heading) { + if (!hasEnabled) { + if (DriverStation.isEnabled()) { + poseEstimator.setPrimaryStrategy(primaryStrategy); + hasEnabled = true; + } + } + inputs.connected = camera.isConnected(); + poseEstimator.addHeadingData(heading.getTimestamp(), heading.get()); + // Read new camera observations Set tagIds = new HashSet<>(); List poseObservations = new LinkedList<>(); for (var result : camera.getAllUnreadResults()) { - // Update latest target observation - if (result.hasTargets()) { - inputs.latestTargetObservation = - new TargetObservation( - Rotation2d.fromDegrees(result.getBestTarget().getYaw()), - Rotation2d.fromDegrees(result.getBestTarget().getPitch())); - } else { - inputs.latestTargetObservation = new TargetObservation(new Rotation2d(), new Rotation2d()); + if (!result.hasTargets()) { + continue; + } + + Optional optional = + poseEstimator.update( + result, + Optional.of(parameters.getCameraMatrix()), + Optional.of(parameters.getDistCoeffs()), + CONSTRAINED_SOLVEPNP_PARAMETERS); + if (optional.isEmpty()) { + continue; + } + + EstimatedRobotPose poseEstimate = optional.get(); + + double distance = 0; + double ambiguity = 0; + int tagCount = poseEstimate.targetsUsed.size(); + + for (PhotonTrackedTarget target : poseEstimate.targetsUsed) { + distance += target.getBestCameraToTarget().getTranslation().getNorm(); + ambiguity += target.poseAmbiguity; + tagIds.add((short) target.fiducialId); } - // Add pose observation - if (result.multitagResult.isPresent()) { // Multitag result - var multitagResult = result.multitagResult.get(); - - // Calculate robot pose - Transform3d fieldToCamera = multitagResult.estimatedPose.best; - Transform3d fieldToRobot = fieldToCamera.plus(robotToCamera.inverse()); - Pose3d robotPose = new Pose3d(fieldToRobot.getTranslation(), fieldToRobot.getRotation()); - - // Calculate average tag distance - double totalTagDistance = 0.0; - for (var target : result.targets) { - totalTagDistance += target.bestCameraToTarget.getTranslation().getNorm(); - } - - // Add tag IDs - tagIds.addAll(multitagResult.fiducialIDsUsed); - - // Add observation - poseObservations.add( - new PoseObservation( - result.getTimestampSeconds(), // Timestamp - robotPose, // 3D pose estimate - multitagResult.estimatedPose.ambiguity, // Ambiguity - multitagResult.fiducialIDsUsed.size(), // Tag count - totalTagDistance / result.targets.size(), // Average tag distance - PoseObservationType.PHOTONVISION)); // Observation type - - } else if (!result.targets.isEmpty()) { // Single tag result - var target = result.targets.get(0); - - // Calculate robot pose - var tagPose = AllianceUtils.getFieldLayout().getTagPose(target.fiducialId); - if (tagPose.isPresent()) { - Transform3d fieldToTarget = - new Transform3d(tagPose.get().getTranslation(), tagPose.get().getRotation()); - Transform3d cameraToTarget = target.bestCameraToTarget; - Transform3d fieldToCamera = fieldToTarget.plus(cameraToTarget.inverse()); - Transform3d fieldToRobot = fieldToCamera.plus(robotToCamera.inverse()); - Pose3d robotPose = new Pose3d(fieldToRobot.getTranslation(), fieldToRobot.getRotation()); - - // Add tag ID - tagIds.add((short) target.fiducialId); - - // Add observation - poseObservations.add( - new PoseObservation( - result.getTimestampSeconds(), // Timestamp - robotPose, // 3D pose estimate - target.poseAmbiguity, // Ambiguity - 1, // Tag count - cameraToTarget.getTranslation().getNorm(), // Average tag distance - PoseObservationType.PHOTONVISION)); // Observation type - } + distance /= tagCount; + ambiguity /= tagCount; + + inputs.latestTargetObservation = + new TargetObservation( + Rotation2d.fromDegrees(result.getBestTarget().getYaw()), + Rotation2d.fromDegrees(result.getBestTarget().getPitch())); + + PoseObservationType type = PoseObservationType.PHOTONVISION; + if (poseEstimate.strategy == PoseStrategy.CONSTRAINED_SOLVEPNP) { + type = PoseObservationType.PHOTONVISION_CONSTRAINED; } + + // Add observation + poseObservations.add( + new PoseObservation( + result.getTimestampSeconds(), // Timestamp + poseEstimate.estimatedPose, // 3D pose estimate + ambiguity, // Ambiguity + tagCount, // Tag count + distance, // Average tag distance + type)); // Observation type } // Save pose observations to inputs object diff --git a/src/main/java/org/team2342/frc/subsystems/vision/VisionIOPhotonConstrained.java b/src/main/java/org/team2342/frc/subsystems/vision/VisionIOPhotonConstrained.java deleted file mode 100644 index c1a7690..0000000 --- a/src/main/java/org/team2342/frc/subsystems/vision/VisionIOPhotonConstrained.java +++ /dev/null @@ -1,409 +0,0 @@ -// Copyright (c) 2026 Team 2342 -// https://github.com/FRCTeamPhoenix -// -// This source code is licensed under the MIT License. -// See the LICENSE file in the root directory of this project. - -package org.team2342.frc.subsystems.vision; - -import edu.wpi.first.apriltag.AprilTag; -import edu.wpi.first.apriltag.AprilTagFieldLayout; -import edu.wpi.first.cscore.OpenCvLoader; -import edu.wpi.first.math.MatBuilder; -import edu.wpi.first.math.Matrix; -import edu.wpi.first.math.Nat; -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Pose3d; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.geometry.Rotation3d; -import edu.wpi.first.math.geometry.Transform3d; -import edu.wpi.first.math.geometry.Translation3d; -import edu.wpi.first.math.interpolation.TimeInterpolatableBuffer; -import edu.wpi.first.math.numbers.N1; -import edu.wpi.first.math.numbers.N3; -import edu.wpi.first.math.numbers.N8; -import edu.wpi.first.wpilibj.Timer; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.function.Supplier; -import org.ejml.simple.SimpleMatrix; -import org.littletonrobotics.junction.Logger; -import org.opencv.calib3d.Calib3d; -import org.opencv.core.MatOfDouble; -import org.opencv.core.MatOfPoint2f; -import org.opencv.core.Point; -import org.photonvision.PhotonCamera; -import org.photonvision.estimation.OpenCVHelp; -import org.photonvision.estimation.TargetModel; -import org.photonvision.jni.ConstrainedSolvepnpJni; -import org.photonvision.targeting.PhotonPipelineResult; -import org.photonvision.targeting.PhotonTrackedTarget; -import org.photonvision.targeting.TargetCorner; -import org.team2342.lib.util.AllianceUtils; - -/** IO implementation for real PhotonVision hardware. */ -public class VisionIOPhotonConstrained implements VisionIO { - protected final PhotonCamera camera; - protected final Transform3d robotToCamera; - private final Supplier rotationSupplier; - private final Matrix cameraMatrix; - private final Matrix distCoeffs; - - private final TimeInterpolatableBuffer headingBuffer = - TimeInterpolatableBuffer.createBuffer(1.0); - - private double scalingFactor = 1.0; - private boolean headingFree = true; - - /** - * Creates a new VisionIOPhotonVision. - * - * @param name The configured name of the camera. - * @param robotToCamera The 3D position of the camera relative to the robot. - */ - public VisionIOPhotonConstrained( - String name, - Transform3d robotToCamera, - Supplier rotationSupplier, - Matrix cameraMatrix, - Matrix distCoeffs) { - camera = new PhotonCamera(name); - this.robotToCamera = robotToCamera; - this.rotationSupplier = rotationSupplier; - this.cameraMatrix = cameraMatrix; - this.distCoeffs = distCoeffs; - } - - @Override - public void updateInputs(VisionIOInputs inputs) { - inputs.connected = camera.isConnected(); - - Rotation2d gyro = rotationSupplier.get(); - if (gyro != null) headingBuffer.addSample(Timer.getFPGATimestamp(), gyro); - - // Read new camera observations - Set tagIds = new HashSet<>(); - List poseObservations = new LinkedList<>(); - for (var result : camera.getAllUnreadResults()) { - // Update latest target observation - if (result.hasTargets()) { - inputs.latestTargetObservation = - new TargetObservation( - Rotation2d.fromDegrees(result.getBestTarget().getYaw()), - Rotation2d.fromDegrees(result.getBestTarget().getPitch())); - } else { - inputs.latestTargetObservation = new TargetObservation(new Rotation2d(), new Rotation2d()); - } - - if (!result.targets.isEmpty()) { - PoseObservation observation = constrainedPNP(result, tagIds); - if (observation != null) poseObservations.add(observation); - } - } - - // Save pose observations to inputs object - inputs.poseObservations = new PoseObservation[poseObservations.size()]; - for (int i = 0; i < poseObservations.size(); i++) { - inputs.poseObservations[i] = poseObservations.get(i); - } - - // Save tag IDs to inputs objects - inputs.tagIds = new int[tagIds.size()]; - int i = 0; - for (int id : tagIds) { - inputs.tagIds[i++] = id; - } - } - - private PoseObservation multitag(PhotonPipelineResult result, Set tagIds) { - if (!result.multitagResult.isPresent() - && !result.targets.isEmpty()) { // Check for Multitag result - return basic(result, tagIds); // Fallback - } - var multitagResult = result.multitagResult.get(); - - // Calculate robot pose - Transform3d fieldToCamera = multitagResult.estimatedPose.best; - Transform3d fieldToRobot = fieldToCamera.plus(robotToCamera.inverse()); - Pose3d robotPose = new Pose3d(fieldToRobot.getTranslation(), fieldToRobot.getRotation()); - - // Calculate average tag distance - double totalTagDistance = 0.0; - for (var target : result.targets) { - totalTagDistance += target.bestCameraToTarget.getTranslation().getNorm(); - } - - // Add tag IDs - tagIds.addAll(multitagResult.fiducialIDsUsed); - - // Add observation - return new PoseObservation( - result.getTimestampSeconds(), // Timestamp - robotPose, // 3D pose estimate - multitagResult.estimatedPose.ambiguity, // Ambiguity - multitagResult.fiducialIDsUsed.size(), // Tag count - totalTagDistance / result.targets.size(), // Average tag distance - PoseObservationType.PHOTONVISION); // Observation type - } - - private PoseObservation basic(PhotonPipelineResult result, Set tagIds) { - var target = result.targets.get(0); - - // Calculate robot pose - var tagPose = AllianceUtils.getFieldLayout().getTagPose(target.fiducialId); - if (tagPose.isPresent()) { - Transform3d fieldToTarget = - new Transform3d(tagPose.get().getTranslation(), tagPose.get().getRotation()); - Transform3d cameraToTarget = target.bestCameraToTarget; - Transform3d fieldToCamera = fieldToTarget.plus(cameraToTarget.inverse()); - Transform3d fieldToRobot = fieldToCamera.plus(robotToCamera.inverse()); - Pose3d robotPose = new Pose3d(fieldToRobot.getTranslation(), fieldToRobot.getRotation()); - - // Add tag ID - tagIds.add((short) target.fiducialId); - - // Add observation - return new PoseObservation( - result.getTimestampSeconds(), // Timestamp - robotPose, // 3D pose estimate - target.poseAmbiguity, // Ambiguity - 1, // Tag count - cameraToTarget.getTranslation().getNorm(), // Average tag distance - PoseObservationType.PHOTONVISION); // Observation type - } else { - // It's so over, just give up - return null; - } - } - - private PoseObservation constrainedPNP(PhotonPipelineResult result, Set tagIds) { - // Need calibrations - if (distCoeffs == null || cameraMatrix == null) { - return multitag(result, tagIds); - } - - // Need heading - if (headingBuffer.getSample(result.getTimestampSeconds()).isEmpty()) { - return multitag(result, tagIds); - } - - Pose3d fieldToRobotSeed; - var multitagResult = result.getMultiTagResult(); - - double tagDist; - int tagCount; - PoseObservationType type; - - // Attempt to use multi-tag to get a pose estimate seed - if (multitagResult.isPresent()) { - fieldToRobotSeed = - Pose3d.kZero.plus(multitagResult.get().estimatedPose.best.plus(robotToCamera.inverse())); - tagIds.addAll(multitagResult.get().fiducialIDsUsed); - - tagCount = multitagResult.get().fiducialIDsUsed.size(); // Tag count - double totalTagDistance = 0.0; - for (var target : result.targets) { - totalTagDistance += target.bestCameraToTarget.getTranslation().getNorm(); - } - tagDist = totalTagDistance / result.targets.size(); // Average tag distance - } else { - var target = result.targets.get(0); - var tagPose = AllianceUtils.getFieldLayout().getTagPose(target.fiducialId); - if (tagPose.isPresent()) { - Transform3d fieldToTarget = - new Transform3d(tagPose.get().getTranslation(), tagPose.get().getRotation()); - Transform3d cameraToTarget = target.bestCameraToTarget; - Transform3d fieldToCamera = fieldToTarget.plus(cameraToTarget.inverse()); - Transform3d fieldToRobot = fieldToCamera.plus(robotToCamera.inverse()); - - tagCount = 1; - tagDist = cameraToTarget.getTranslation().getNorm(); // Average tag distance - fieldToRobotSeed = Pose3d.kZero.plus(fieldToRobot); - } else { - // It's so over, just give up - return null; - } - tagIds.add((short) target.fiducialId); - } - - if (!headingFree) { - fieldToRobotSeed = - new Pose3d( - fieldToRobotSeed.getTranslation(), - new Rotation3d(headingBuffer.getSample(result.getTimestampSeconds()).get())); - type = PoseObservationType.PHOTONVISION_CONSTRAINED; - } else { - type = PoseObservationType.PHOTONVISION; - } - - Logger.recordOutput("Vision/Constrained/Seed", fieldToRobotSeed); - - var constrainedResult = - estimatePoseConstrained( - cameraMatrix, - distCoeffs, - result.getTargets(), - robotToCamera, - fieldToRobotSeed, - AllianceUtils.getFieldLayout(), - TargetModel.kAprilTag36h11, - headingFree, - headingBuffer.getSample(result.getTimestampSeconds()), - scalingFactor); - - // go to fallback if solvePNP fails for some reason - if (!constrainedResult.isPresent()) { - return multitag(result, tagIds); - } - - return new PoseObservation( - result.getTimestampSeconds(), // Timestamp - constrainedResult.get(), // 3D pose estimate - 0.0, // Ambiguity - tagCount, // Tag count - tagDist, // Average tag distance - type); // Observation type - } - - @Override - public void toggleHeadingFree() { - headingFree = !headingFree; - } - - /** - * "Borrowed" from PhotonVision - * - *

Performs constrained solvePNP using 3d-2d point correspondences of visible AprilTags to - * estimate the field-to-camera transformation. * - * - * @param cameraMatrix The camera intrinsics matrix in standard opencv form - * @param distCoeffs The camera distortion matrix in standard opencv form - * @param visTags The visible tags reported by PV. Non-tag targets are automatically excluded. - * @param robot2camera The {@link Transform3d} from the robot odometry frame to the camera optical - * frame - * @param robotPoseSeed An initial guess at robot pose, refined via optimizaiton. Better guesses - * will converge faster. - * @param tagLayout The known tag layout on the field - * @param tagModel The physical size of the AprilTags - * @param headingFree If heading is completely free, or if our measured gyro is taken into account - * @param gyro If headingFree is false, the best estimate at robot yaw. Excursions from this are - * penalized in our cost function. - * @param gyroErrorScaleFac A relative weight for gyro heading excursions against tag corner - * reprojection error. - * @return The camera pose. Ensure the {@link Pose3d} is present before utilizing it. - */ - public static Optional estimatePoseConstrained( - Matrix cameraMatrix, - Matrix distCoeffs, - List visTags, - Transform3d robot2camera, - Pose3d robotPoseSeed, - AprilTagFieldLayout tagLayout, - TargetModel tagModel, - boolean headingFree, - Optional gyro, - double gyroErrorScaleFac) { - if (tagLayout == null - || visTags == null - || tagLayout.getTags().isEmpty() - || visTags.isEmpty()) { - return Optional.empty(); - } - - var corners = new ArrayList(); - var knownTags = new ArrayList(); - // ensure these are AprilTags in our layout - for (var tgt : visTags) { - int id = tgt.getFiducialId(); - tagLayout - .getTagPose(id) - .ifPresent( - pose -> { - knownTags.add(new AprilTag(id, pose)); - corners.addAll(tgt.getDetectedCorners()); - }); - } - if (knownTags.isEmpty() || corners.isEmpty() || corners.size() % 4 != 0) { - return Optional.empty(); - } - OpenCvLoader.forceStaticLoad(); - - Point[] points = OpenCVHelp.cornersToPoints(corners); - - // Undistort - { - MatOfPoint2f temp = new MatOfPoint2f(); - MatOfDouble cameraMatrixMat = new MatOfDouble(); - MatOfDouble distCoeffsMat = new MatOfDouble(); - OpenCVHelp.matrixToMat(cameraMatrix.getStorage()).assignTo(cameraMatrixMat); - OpenCVHelp.matrixToMat(distCoeffs.getStorage()).assignTo(distCoeffsMat); - - temp.fromArray(points); - Calib3d.undistortImagePoints(temp, temp, cameraMatrixMat, distCoeffsMat); - points = temp.toArray(); - - temp.release(); - cameraMatrixMat.release(); - distCoeffsMat.release(); - } - - // Rotate from wpilib to opencv camera CS - var robot2cameraBase = - MatBuilder.fill(Nat.N4(), Nat.N4(), 0, 0, 1, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1); - var robotToCamera = robot2camera.toMatrix().times(robot2cameraBase); - - // Where we saw corners - var point_observations = new SimpleMatrix(2, points.length); - for (int i = 0; i < points.length; i++) { - point_observations.set(0, i, points[i].x); - point_observations.set(1, i, points[i].y); - } - - // Affine corner locations - var objectTrls = new ArrayList(); - for (var tag : knownTags) objectTrls.addAll(tagModel.getFieldVertices(tag.pose)); - var field2points = new SimpleMatrix(4, points.length); - for (int i = 0; i < objectTrls.size(); i++) { - field2points.set(0, i, objectTrls.get(i).getX()); - field2points.set(1, i, objectTrls.get(i).getY()); - field2points.set(2, i, objectTrls.get(i).getZ()); - field2points.set(3, i, 1); - } - - // fx fy cx cy - double[] cameraCal = - new double[] { - cameraMatrix.get(0, 0), - cameraMatrix.get(1, 1), - cameraMatrix.get(0, 2), - cameraMatrix.get(1, 2), - }; - - var guess2 = robotPoseSeed.toPose2d(); - - var ret = - ConstrainedSolvepnpJni.do_optimization( - headingFree, - knownTags.size(), - cameraCal, - robotToCamera.getData(), - new double[] { - guess2.getX(), guess2.getY(), guess2.getRotation().getRadians(), - }, - field2points.getDDRM().getData(), - point_observations.getDDRM().getData(), - gyro.orElse(Rotation2d.kZero).getRadians(), - gyroErrorScaleFac); - - if (ret == null) { - return Optional.empty(); - } else { - Pose3d poseResult = new Pose3d(new Pose2d(ret[0], ret[1], new Rotation2d(ret[2]))); - return Optional.of(poseResult); - } - } -} diff --git a/src/main/java/org/team2342/frc/subsystems/vision/VisionIOSim.java b/src/main/java/org/team2342/frc/subsystems/vision/VisionIOSim.java index 4083d54..26647de 100644 --- a/src/main/java/org/team2342/frc/subsystems/vision/VisionIOSim.java +++ b/src/main/java/org/team2342/frc/subsystems/vision/VisionIOSim.java @@ -1,19 +1,21 @@ -// Copyright (c) 2021-2026 Littleton Robotics -// http://github.com/Mechanical-Advantage +// Copyright (c) 2025 Team 2342 +// https://github.com/FRCTeamPhoenix // -// Use of this source code is governed by a BSD -// license that can be found in the AdvantageKit-License file -// at the root directory of this project. +// This source code is licensed under the MIT License. +// See the LICENSE file in the root directory of this project. package org.team2342.frc.subsystems.vision; import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Transform3d; +import edu.wpi.first.math.geometry.Rotation2d; import java.util.function.Supplier; +import org.photonvision.PhotonPoseEstimator.PoseStrategy; import org.photonvision.simulation.PhotonCameraSim; import org.photonvision.simulation.SimCameraProperties; import org.photonvision.simulation.VisionSystemSim; import org.team2342.lib.util.AllianceUtils; +import org.team2342.lib.util.CameraParameters; +import org.team2342.lib.util.Timestamped; /** IO implementation for physics sim using PhotonVision simulator. */ public class VisionIOSim extends VisionIOPhoton { @@ -28,25 +30,38 @@ public class VisionIOSim extends VisionIOPhoton { * @param name The name of the camera. * @param poseSupplier Supplier for the robot pose to use in simulation. */ - public VisionIOSim(String name, Transform3d robotToCamera, Supplier poseSupplier) { - super(name, robotToCamera); + public VisionIOSim( + CameraParameters parameters, + PoseStrategy primaryStrategy, + PoseStrategy disabledStrategy, + Supplier poseSupplier) { + super(parameters, primaryStrategy, disabledStrategy); this.poseSupplier = poseSupplier; - // Initialize vision sim if (visionSim == null) { visionSim = new VisionSystemSim("main"); visionSim.addAprilTags(AllianceUtils.getFieldLayout()); } // Add sim camera - var cameraProperties = new SimCameraProperties(); - cameraSim = new PhotonCameraSim(camera, cameraProperties, AllianceUtils.getFieldLayout()); + SimCameraProperties properties = new SimCameraProperties(); + properties.setCalibration( + parameters.getResWidth(), + parameters.getResHeight(), + parameters.getCameraMatrix(), + parameters.getDistCoeffs()); + properties.setCalibError(parameters.getAvgErrorPx(), parameters.getErrorStdDevPx()); + properties.setFPS(60.0); + properties.setAvgLatencyMs(35); + properties.setLatencyStdDevMs(7); + + cameraSim = new PhotonCameraSim(camera, properties, AllianceUtils.getFieldLayout()); visionSim.addCamera(cameraSim, robotToCamera); } @Override - public void updateInputs(VisionIOInputs inputs) { + public void updateInputs(VisionIOInputs inputs, Timestamped heading) { visionSim.update(poseSupplier.get()); - super.updateInputs(inputs); + super.updateInputs(inputs, heading); } } diff --git a/src/main/java/org/team2342/lib/util/CameraParameters.java b/src/main/java/org/team2342/lib/util/CameraParameters.java new file mode 100644 index 0000000..dcbc312 --- /dev/null +++ b/src/main/java/org/team2342/lib/util/CameraParameters.java @@ -0,0 +1,170 @@ +// Copyright (c) 2026 Team 2342 +// https://github.com/FRCTeamPhoenix +// +// This source code is licensed under the MIT License. +// See the LICENSE file in the root directory of this project. + +package org.team2342.lib.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import edu.wpi.first.math.MatBuilder; +import edu.wpi.first.math.MathUtil; +import edu.wpi.first.math.Matrix; +import edu.wpi.first.math.Nat; +import edu.wpi.first.math.VecBuilder; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.geometry.Transform3d; +import edu.wpi.first.math.numbers.N1; +import edu.wpi.first.math.numbers.N3; +import edu.wpi.first.math.numbers.N8; +import edu.wpi.first.wpilibj.DriverStation; +import edu.wpi.first.wpilibj.Filesystem; +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; +import lombok.Getter; +import lombok.Setter; + +public class CameraParameters { + + @Getter @Setter private String cameraName; + @Getter @Setter private int resWidth, resHeight; + @Getter @Setter private Matrix cameraMatrix; + @Getter @Setter private Matrix distCoeffs; + @Getter @Setter private double avgErrorPx; + @Getter @Setter private double errorStdDevPx; + @Getter @Setter private Transform3d transform; + + public CameraParameters( + String cameraName, + int resWidth, + int resHeight, + double avgErrorPx, + double errorStdDevPx, + Matrix cameraMatrix, + Matrix distCoeffs, + Transform3d transform) { + this.cameraName = cameraName; + this.resWidth = resWidth; + this.resHeight = resHeight; + this.avgErrorPx = avgErrorPx; + this.errorStdDevPx = errorStdDevPx; + this.cameraMatrix = cameraMatrix; + this.distCoeffs = distCoeffs; + this.transform = transform; + } + + public CameraParameters(String cameraName, int resWidth, int resHeight) { + this(cameraName, resWidth, resHeight, 0.02, 0.05, Rotation2d.kCCW_90deg); + } + + public CameraParameters( + String cameraName, + int resWidth, + int resHeight, + double avgErrorPx, + double errorStdDevPx, + Rotation2d fovDiag) { + this.cameraName = cameraName; + this.resWidth = resWidth; + this.resHeight = resHeight; + this.avgErrorPx = avgErrorPx; + this.errorStdDevPx = errorStdDevPx; + + if (fovDiag.getDegrees() < 1 || fovDiag.getDegrees() > 179) { + fovDiag = Rotation2d.fromDegrees(MathUtil.clamp(fovDiag.getDegrees(), 1, 179)); + DriverStation.reportError( + "Requested invalid FOV! Clamping between (1, 179) degrees...", false); + } + double resDiag = Math.hypot(resWidth, resHeight); + double diagRatio = Math.tan(fovDiag.getRadians() / 2); + var fovWidth = new Rotation2d(Math.atan(diagRatio * (resWidth / resDiag)) * 2); + var fovHeight = new Rotation2d(Math.atan(diagRatio * (resHeight / resDiag)) * 2); + + // assume no distortion + distCoeffs = VecBuilder.fill(0, 0, 0, 0, 0, 0, 0, 0); + + // assume centered principal point (pixels) + double cx = resWidth / 2.0 - 0.5; + double cy = resHeight / 2.0 - 0.5; + + // use given fov to determine focal point (pixels) + double fx = cx / Math.tan(fovWidth.getRadians() / 2.0); + double fy = cy / Math.tan(fovHeight.getRadians() / 2.0); + + // create camera intrinsics matrix + cameraMatrix = MatBuilder.fill(Nat.N3(), Nat.N3(), fx, 0, cx, 0, fy, cy, 0, 0, 1); + } + + public CameraParameters(String cameraName, int resWidth, int resHeight, Path path) + throws IOException { + this.cameraName = cameraName; + var mapper = new ObjectMapper(); + var json = mapper.readTree(path.toFile()); + // json = json.get("calibrations"); + boolean success = false; + try { + for (int i = 0; i < json.size() && !success; i++) { + // check if this calibration entry is our desired resolution + int jsonWidth = json.get("resolution").get("width").asInt(); + int jsonHeight = json.get("resolution").get("height").asInt(); + if (jsonWidth != resWidth || jsonHeight != resHeight) continue; + // get the relevant calibration values + var jsonIntrinsicsNode = json.get("cameraIntrinsics").get("data"); + double[] jsonIntrinsics = new double[jsonIntrinsicsNode.size()]; + for (int j = 0; j < jsonIntrinsicsNode.size(); j++) { + jsonIntrinsics[j] = jsonIntrinsicsNode.get(j).asDouble(); + } + var jsonDistortNode = json.get("distCoeffs").get("data"); + double[] jsonDistortion = new double[8]; + Arrays.fill(jsonDistortion, 0); + for (int j = 0; j < jsonDistortNode.size(); j++) { + jsonDistortion[j] = jsonDistortNode.get(j).asDouble(); + } + + // not working + // var jsonViewErrors = json.get("perViewErrors"); + // double jsonAvgError = 0; + // for (int j = 0; j < jsonViewErrors.size(); j++) { + // jsonAvgError += jsonViewErrors.get(j).asDouble(); + // } + // jsonAvgError /= jsonViewErrors.size(); + // double jsonErrorStdDev = json.get("standardDeviation").asDouble(); + + // assign the read JSON values to this CameraProperties + this.resWidth = jsonWidth; + this.resHeight = jsonHeight; + this.cameraMatrix = MatBuilder.fill(Nat.N3(), Nat.N3(), jsonIntrinsics); + this.distCoeffs = MatBuilder.fill(Nat.N8(), Nat.N1(), jsonDistortion); + avgErrorPx = 0.02; // jsonAvgError; + errorStdDevPx = 0.05; // jsonErrorStdDev; + success = true; + } + } catch (Exception e) { + throw new IOException("Invalid calibration JSON"); + } + if (!success) throw new IOException("Requested resolution not found in calibration"); + } + + public static CameraParameters loadFromName(String cameraName, int resWidth, int resHeight) { + try { + return new CameraParameters( + cameraName, + resWidth, + resHeight, + Filesystem.getDeployDirectory() + .toPath() + .resolve("calibrations/" + cameraName + "_" + resWidth + ".json")); + } catch (Exception e) { + System.out.println(e); + DriverStation.reportError( + "Error while loading camera " + cameraName + ". Resorting to basic parameters", false); + return new CameraParameters(cameraName, resWidth, resHeight); + } + } + + public CameraParameters withTransform(Transform3d transform) { + this.transform = transform; + return this; + } +} diff --git a/src/main/java/org/team2342/lib/util/Timestamped.java b/src/main/java/org/team2342/lib/util/Timestamped.java new file mode 100644 index 0000000..2b8f3e1 --- /dev/null +++ b/src/main/java/org/team2342/lib/util/Timestamped.java @@ -0,0 +1,26 @@ +// Copyright (c) 2026 Team 2342 +// https://github.com/FRCTeamPhoenix +// +// This source code is licensed under the MIT License. +// See the LICENSE file in the root directory of this project. + +package org.team2342.lib.util; + +import java.util.function.Supplier; +import lombok.Getter; + +public class Timestamped implements Supplier { + private T object; + + @Getter private double timestamp; + + public Timestamped(T object, double timestamp) { + this.object = object; + this.timestamp = timestamp; + } + + @Override + public T get() { + return object; + } +} diff --git a/vendordeps/PathplannerLib.json b/vendordeps/PathplannerLib-2026.1.2.json similarity index 87% rename from vendordeps/PathplannerLib.json rename to vendordeps/PathplannerLib-2026.1.2.json index 2a55642..5f04ffa 100644 --- a/vendordeps/PathplannerLib.json +++ b/vendordeps/PathplannerLib-2026.1.2.json @@ -1,7 +1,7 @@ { - "fileName": "PathplannerLib.json", + "fileName": "PathplannerLib-2026.1.2.json", "name": "PathplannerLib", - "version": "2025.2.7", + "version": "2026.1.2", "uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786", "frcYear": "2026", "mavenUrls": [ @@ -12,7 +12,7 @@ { "groupId": "com.pathplanner.lib", "artifactId": "PathplannerLib-java", - "version": "2025.2.7" + "version": "2026.1.2" } ], "jniDependencies": [], @@ -20,7 +20,7 @@ { "groupId": "com.pathplanner.lib", "artifactId": "PathplannerLib-cpp", - "version": "2025.2.7", + "version": "2026.1.2", "libName": "PathplannerLib", "headerClassifier": "headers", "sharedLibrary": false, diff --git a/vendordeps/REVLib.json b/vendordeps/REVLib.json index 082b01d..bb613bf 100644 --- a/vendordeps/REVLib.json +++ b/vendordeps/REVLib.json @@ -1,7 +1,7 @@ { "fileName": "REVLib.json", "name": "REVLib", - "version": "2026.0.0", + "version": "2026.0.1", "frcYear": "2026", "uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb", "mavenUrls": [ @@ -12,14 +12,14 @@ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-java", - "version": "2026.0.0" + "version": "2026.0.1" } ], "jniDependencies": [ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-driver", - "version": "2026.0.0", + "version": "2026.0.1", "skipInvalidPlatforms": true, "isJar": false, "validPlatforms": [ @@ -34,7 +34,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "RevLibBackendDriver", - "version": "2026.0.0", + "version": "2026.0.1", "skipInvalidPlatforms": true, "isJar": false, "validPlatforms": [ @@ -49,7 +49,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "RevLibWpiBackendDriver", - "version": "2026.0.0", + "version": "2026.0.1", "skipInvalidPlatforms": true, "isJar": false, "validPlatforms": [ @@ -66,7 +66,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-cpp", - "version": "2026.0.0", + "version": "2026.0.1", "libName": "REVLib", "headerClassifier": "headers", "sharedLibrary": false, @@ -83,7 +83,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "REVLib-driver", - "version": "2026.0.0", + "version": "2026.0.1", "libName": "REVLibDriver", "headerClassifier": "headers", "sharedLibrary": false, @@ -100,7 +100,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "RevLibBackendDriver", - "version": "2026.0.0", + "version": "2026.0.1", "libName": "BackendDriver", "sharedLibrary": true, "skipInvalidPlatforms": true, @@ -116,7 +116,7 @@ { "groupId": "com.revrobotics.frc", "artifactId": "RevLibWpiBackendDriver", - "version": "2026.0.0", + "version": "2026.0.1", "libName": "REVLibWpi", "sharedLibrary": true, "skipInvalidPlatforms": true, diff --git a/vendordeps/ReduxLib-2026.0.0-beta1.json b/vendordeps/ReduxLib-2026.1.1.json similarity index 87% rename from vendordeps/ReduxLib-2026.0.0-beta1.json rename to vendordeps/ReduxLib-2026.1.1.json index 0a08300..9081f8b 100644 --- a/vendordeps/ReduxLib-2026.0.0-beta1.json +++ b/vendordeps/ReduxLib-2026.1.1.json @@ -1,7 +1,7 @@ { - "fileName": "ReduxLib-2026.0.0-beta1.json", + "fileName": "ReduxLib-2026.1.1.json", "name": "ReduxLib", - "version": "2026.0.0-beta1", + "version": "2026.1.1", "frcYear": "2026", "uuid": "151ecca8-670b-4026-8160-cdd2679ef2bd", "mavenUrls": [ @@ -12,14 +12,14 @@ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-java", - "version": "2026.0.0-beta1" + "version": "2026.1.1" } ], "jniDependencies": [ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-fifo", - "version": "2026.0.0-beta1", + "version": "2026.1.1", "isJar": false, "skipInvalidPlatforms": true, "validPlatforms": [ @@ -35,7 +35,7 @@ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-cpp", - "version": "2026.0.0-beta1", + "version": "2026.1.1", "libName": "ReduxLib", "headerClassifier": "headers", "sourcesClassifier": "sources", @@ -52,7 +52,7 @@ { "groupId": "com.reduxrobotics.frc", "artifactId": "ReduxLib-fifo", - "version": "2026.0.0-beta1", + "version": "2026.1.1", "libName": "reduxfifo", "headerClassifier": "headers", "sharedLibrary": true, diff --git a/vendordeps/photonlib.json b/vendordeps/photonlib.json index 8b1d42b..7508481 100644 --- a/vendordeps/photonlib.json +++ b/vendordeps/photonlib.json @@ -1,7 +1,7 @@ { "fileName": "photonlib.json", "name": "photonlib", - "version": "v2026.0.1-beta", + "version": "v2026.1.1-rc-3", "uuid": "515fe07e-bfc6-11fa-b3de-0242ac130004", "frcYear": "2026", "mavenUrls": [ @@ -13,7 +13,7 @@ { "groupId": "org.photonvision", "artifactId": "photontargeting-cpp", - "version": "v2026.0.1-beta", + "version": "v2026.1.1-rc-3", "skipInvalidPlatforms": true, "isJar": false, "validPlatforms": [ @@ -28,7 +28,7 @@ { "groupId": "org.photonvision", "artifactId": "photonlib-cpp", - "version": "v2026.0.1-beta", + "version": "v2026.1.1-rc-3", "libName": "photonlib", "headerClassifier": "headers", "sharedLibrary": true, @@ -43,7 +43,7 @@ { "groupId": "org.photonvision", "artifactId": "photontargeting-cpp", - "version": "v2026.0.1-beta", + "version": "v2026.1.1-rc-3", "libName": "photontargeting", "headerClassifier": "headers", "sharedLibrary": true, @@ -60,12 +60,12 @@ { "groupId": "org.photonvision", "artifactId": "photonlib-java", - "version": "v2026.0.1-beta" + "version": "v2026.1.1-rc-3" }, { "groupId": "org.photonvision", "artifactId": "photontargeting-java", - "version": "v2026.0.1-beta" + "version": "v2026.1.1-rc-3" } ] }