The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

d/ns: fix polynomial distortion math again, document nonsensical parts of polynomial math, update config files

+311 -217
+56 -47
src/xrt/drivers/north_star/ns_hmd.c
··· 33 33 #include "../realsense/rs_interface.h" 34 34 #endif 35 35 36 - DEBUG_GET_ONCE_LOG_OPTION(ns_log, "NS_LOG", U_LOGGING_WARN) 36 + DEBUG_GET_ONCE_LOG_OPTION(ns_log, "NS_LOG", U_LOGGING_INFO) 37 37 38 38 /* 39 39 * 40 40 * Common functions 41 41 * 42 42 */ 43 + 44 + 45 + static double map(double value, double fromLow, double fromHigh, double toLow, double toHigh) { 46 + return (value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow; 47 + } // Math copied from https://www.arduino.cc/reference/en/language/functions/math/map/ 48 + // This is pure math so it is still under the Boost Software License. 43 49 44 50 static void 45 51 ns_hmd_destroy(struct xrt_device *xdev) ··· 224 230 fov->angle_left = 225 231 projection.z; // atanf(fabsf(projection.z) / near_plane); 226 232 fov->angle_right = 227 - projection.w; // atanf(fabsf(projection.w) / near_plane); 233 + projection.w; // atanf(fabsf(projection.w) / near_plane); 228 234 } 229 235 230 236 /* 231 - * 237 + * 232 238 * V2 optics. 233 - * 234 - */ 239 + * 240 + * 241 + */ 235 242 236 243 237 244 static void ··· 305 312 float v, 306 313 struct xrt_uv_triplet *result) 307 314 { 308 - u = 1.0 - u; // Not sure why these are necessary: somewhat concerning. 309 - v = 1.0 - v; // They make it work though, so hey. 315 + /*! @todo (Moses Turner) It should not be necessary to reverse the U and V coords. 316 + * I have no idea why it is like this. It shouldn't be like this. 317 + * It must be something wrong with the undistortion calibrator. 318 + * The V2 undistortion calibrator software is here if you want to look: 319 + * https://github.com/BryanChrisBrown/ProjectNorthStar/tree/feat-gen-2-software/Software/North%20Star%20Gen%202/North%20Star%20Calibrator 320 + */ 321 + //u = 1.0 - u; 322 + v = 1.0 - v; 323 + 310 324 311 325 struct ns_hmd *ns = ns_hmd(xdev); 312 326 ··· 321 335 float up_ray_bound = tan(ns->eye_configs_v2[view].fov.angle_up); 322 336 float down_ray_bound = tan(ns->eye_configs_v2[view].fov.angle_down); 323 337 324 - 338 + float u_eye = map(x_ray, left_ray_bound, right_ray_bound, 0, 1); 325 339 326 - // Both of these are very concise implementations of map() in Arduino. 327 - // https://www.arduino.cc/reference/en/language/functions/math/map/ 328 - // In other words, a one-axis linear transformation. 329 - // I wish I was better at linear algebra so I had could describe this 330 - // better 331 - 332 - // map(x_ray, left_ray_bound, right_ray_bound, 0, 1) 333 - float u_eye = 334 - (x_ray + right_ray_bound) / (right_ray_bound - left_ray_bound); 335 - 336 - // map(y_ray, down_ray_bound, up_ray_bound, 0, 1) 337 - float v_eye = (y_ray + up_ray_bound) / (up_ray_bound - down_ray_bound); 340 + float v_eye = map(y_ray, down_ray_bound, up_ray_bound, 0, 1); 338 341 339 342 340 343 // boilerplate, put the UV coordinates in all the RGB slots ··· 404 407 cJSON_GetObjectItemCaseSensitive(config_json, "baseline"), 405 408 &ns->ipd); 406 409 ns->ipd = ns->ipd / 1000.0f; // converts from mm to m 410 + /*! @todo (Moses Turner) Next four u_json_get_float_array calls don't make any sense. 411 + * They put the X coefficients from the JSON file into the Y coefficients in the structs, which is totally wrong, but the distortion looks totally wrong if we don't do this. 412 + */ 407 413 u_json_get_float_array(cJSON_GetObjectItemCaseSensitive( 408 414 config_json, "left_uv_to_rect_x"), 409 415 ns->eye_configs_v2[0].y_coefficients, ··· 423 429 424 430 if (!u_json_get_float( 425 431 cJSON_GetObjectItemCaseSensitive(config_json, 426 - "leftEyeAngleLeft"), 432 + "left_fov_radians_left"), 427 433 &ns->eye_configs_v2[0] 428 434 .fov 429 435 .angle_left)) { // not putting this directly in ··· 437 443 "example in " 438 444 "src/xrt/drivers/north_star/" 439 445 "v2_example_config.json."); 440 - ns->eye_configs_v2[0].fov.angle_left = -0.6; 441 - ns->eye_configs_v2[0].fov.angle_right = 0.6; 442 - ns->eye_configs_v2[0].fov.angle_up = 0.6; 443 - ns->eye_configs_v2[0].fov.angle_down = -0.6; 446 + ns->eye_configs_v2[0].fov.angle_left = -0.8; 447 + ns->eye_configs_v2[0].fov.angle_right = 0.8; 448 + ns->eye_configs_v2[0].fov.angle_up = 0.8; 449 + ns->eye_configs_v2[0].fov.angle_down = -0.8; 444 450 445 - ns->eye_configs_v2[1].fov.angle_left = -0.6; 446 - ns->eye_configs_v2[1].fov.angle_right = 0.6; 447 - ns->eye_configs_v2[1].fov.angle_up = 0.6; 448 - ns->eye_configs_v2[1].fov.angle_down = -0.6; 451 + ns->eye_configs_v2[1].fov.angle_left = -0.8; 452 + ns->eye_configs_v2[1].fov.angle_right = 0.8; 453 + ns->eye_configs_v2[1].fov.angle_up = 0.8; 454 + ns->eye_configs_v2[1].fov.angle_down = -0.8; 449 455 450 456 451 457 452 458 } else { 453 - u_json_get_float( 454 - cJSON_GetObjectItemCaseSensitive( 455 - config_json, "leftEyeAngleRight"), 456 - &ns->eye_configs_v2[0].fov.angle_right); 459 + 460 + 461 + u_json_get_float(cJSON_GetObjectItemCaseSensitive( 462 + config_json, "left_fov_radians_left"), 463 + &ns->eye_configs_v2[0].fov.angle_left); 464 + u_json_get_float(cJSON_GetObjectItemCaseSensitive( 465 + config_json, "left_fov_radians_right"), 466 + &ns->eye_configs_v2[0].fov.angle_right); 457 467 u_json_get_float(cJSON_GetObjectItemCaseSensitive( 458 - config_json, "leftEyeAngleUp"), 459 - &ns->eye_configs_v2[0].fov.angle_up); 468 + config_json, "left_fov_radians_up"), 469 + &ns->eye_configs_v2[0].fov.angle_up); 460 470 u_json_get_float(cJSON_GetObjectItemCaseSensitive( 461 - config_json, "leftEyeAngleDown"), 462 - &ns->eye_configs_v2[0].fov.angle_down); 471 + config_json, "left_fov_radians_down"), 472 + &ns->eye_configs_v2[0].fov.angle_down); 463 473 464 474 u_json_get_float(cJSON_GetObjectItemCaseSensitive( 465 - config_json, "rightEyeAngleLeft"), 466 - &ns->eye_configs_v2[1].fov.angle_left); 467 - u_json_get_float( 468 - cJSON_GetObjectItemCaseSensitive( 469 - config_json, "rightEyeAngleRight"), 470 - &ns->eye_configs_v2[1].fov.angle_right); 475 + config_json, "right_fov_radians_left"), 476 + &ns->eye_configs_v2[1].fov.angle_left); 477 + u_json_get_float(cJSON_GetObjectItemCaseSensitive( 478 + config_json, "right_fov_radians_right"), 479 + &ns->eye_configs_v2[1].fov.angle_right); 471 480 u_json_get_float(cJSON_GetObjectItemCaseSensitive( 472 - config_json, "rightEyeAngleUp"), 473 - &ns->eye_configs_v2[1].fov.angle_up); 481 + config_json, "right_fov_radians_up"), 482 + &ns->eye_configs_v2[1].fov.angle_up); 474 483 u_json_get_float(cJSON_GetObjectItemCaseSensitive( 475 - config_json, "rightEyeAngleDown"), 476 - &ns->eye_configs_v2[1].fov.angle_down); 484 + config_json, "right_fov_radians_down"), 485 + &ns->eye_configs_v2[1].fov.angle_down); 477 486 } 478 487 479 488 ns->is_v2 = true;
-153
src/xrt/drivers/north_star/v1_example_config.json
··· 1 - { 2 - "leftEye": { 3 - "ellipseMinorAxis": 0.24494899809360505, 4 - "ellipseMajorAxis": 0.3099985122680664, 5 - "screenForward": { 6 - "x": 0.2824554741382599, 7 - "y": -0.20611988008022309, 8 - "z": 0.9368743300437927 9 - }, 10 - "screenPosition": { 11 - "x": -0.07859157025814057, 12 - "y": -0.005049339961260557, 13 - "z": 0.012514465488493443 14 - }, 15 - "eyePosition": { 16 - "x": -0.03200000151991844, 17 - "y": 0.001083331648260355, 18 - "z": -0.012499995529651642 19 - }, 20 - "eyeRotation": { 21 - "x": 7.395533370627759e-32, 22 - "y": 1.7763568394002506e-15, 23 - "z": 1.1241009818395605e-14, 24 - "w": 1.0 25 - }, 26 - "cameraProjection": { 27 - "x": -0.699999988079071, 28 - "y": 0.699999988079071, 29 - "z": 0.30000001192092898, 30 - "w": -1.399999976158142 31 - }, 32 - "sphereToWorldSpace": { 33 - "e00": 0.05101080238819122, 34 - "e01": 0.06071346998214722, 35 - "e02": 0.29330453276634219, 36 - "e03": -0.11532726138830185, 37 - "e10": 0.0, 38 - "e11": 0.23695310950279237, 39 - "e12": -0.07855913043022156, 40 - "e13": 0.026422245427966119, 41 - "e20": -0.23957861959934236, 42 - "e21": 0.012927045114338398, 43 - "e22": 0.062450066208839419, 44 - "e23": -0.05475877597928047, 45 - "e30": 0.0, 46 - "e31": 0.0, 47 - "e32": 0.0, 48 - "e33": 1.0 49 - }, 50 - "worldToScreenSpace": { 51 - "e00": 1.3777992725372315, 52 - "e01": 14.81815242767334, 53 - "e02": 2.8447227478027345, 54 - "e03": 0.14750510454177857, 55 - "e10": -16.076780319213868, 56 - "e11": 0.5414643883705139, 57 - "e12": 4.966066360473633, 58 - "e13": -1.3229130506515504, 59 - "e20": 0.2824554145336151, 60 - "e21": -0.2061198651790619, 61 - "e22": 0.9368743300437927, 62 - "e23": 0.009433363564312458, 63 - "e30": 0.0, 64 - "e31": 0.0, 65 - "e32": 0.0, 66 - "e33": 1.0 67 - } 68 - }, 69 - "rightEye": { 70 - "ellipseMinorAxis": 0.24494899809360505, 71 - "ellipseMajorAxis": 0.3099985122680664, 72 - "screenForward": { 73 - "x": -0.2919599413871765, 74 - "y": -0.20477625727653504, 75 - "z": 0.934251606464386 76 - }, 77 - "screenPosition": { 78 - "x": 0.07982077449560166, 79 - "y": -0.005731542594730854, 80 - "z": 0.01401037909090519 81 - }, 82 - "eyePosition": { 83 - "x": 0.03200000151991844, 84 - "y": 0.001083331648260355, 85 - "z": -0.012499995529651642 86 - }, 87 - "eyeRotation": { 88 - "x": 7.395533370627759e-32, 89 - "y": 1.7763568394002506e-15, 90 - "z": 1.1241009818395605e-14, 91 - "w": 1.0 92 - }, 93 - "cameraProjection": { 94 - "x": -0.699999988079071, 95 - "y": 0.699999988079071, 96 - "z": 0.30000001192092898, 97 - "w": -1.399999976158142 98 - }, 99 - "sphereToWorldSpace": { 100 - "e00": 0.05101081356406212, 101 - "e01": -0.060713451355695727, 102 - "e02": -0.29330453276634219, 103 - "e03": 0.11689796298742295, 104 - "e10": 0.0, 105 - "e11": 0.23695312440395356, 106 - "e12": -0.07855910062789917, 107 - "e13": 0.026351751759648324, 108 - "e20": 0.23957861959934236, 109 - "e21": 0.0129270413890481, 110 - "e22": 0.062450066208839419, 111 - "e23": -0.052946362644433978, 112 - "e30": 0.0, 113 - "e31": 0.0, 114 - "e32": 0.0, 115 - "e33": 1.0 116 - }, 117 - "worldToScreenSpace": { 118 - "e00": -1.4188950061798096, 119 - "e01": 14.821781158447266, 120 - "e02": 2.805335283279419, 121 - "e03": 0.15890516340732575, 122 - "e10": -16.02415657043457, 123 - "e11": -0.5628440976142883, 124 - "e12": -5.131026744842529, 125 - "e13": 1.3477222919464112, 126 - "e20": -0.2919600307941437, 127 - "e21": -0.2047763168811798, 128 - "e22": 0.9342517256736755, 129 - "e23": 0.00904157105833292, 130 - "e30": 0.0, 131 - "e31": 0.0, 132 - "e32": 0.0, 133 - "e33": 1.0 134 - } 135 - }, 136 - "leapTracker": { 137 - "name": "Leap Odometry Origin", 138 - "serial": "", 139 - "localPose": { 140 - "position": { 141 - "x": 0.0, 142 - "y": 0.039777886122465137, 143 - "z": 0.0804821103811264 144 - }, 145 - "rotation": { 146 - "x": 0.3123600482940674, 147 - "y": 0.0, 148 - "z": 0.0, 149 - "w": 0.9499638080596924 150 - } 151 - } 152 - } 153 - }
+3
src/xrt/drivers/north_star/v1_example_config.json.license
··· 1 + Copyright 2020, CombineReality. 2 + 3 + SPDX-License-Identifier: BSL-1.0
+153
src/xrt/drivers/north_star/v1_example_config_deckx_50cm.json
··· 1 + { 2 + "leftEye": { 3 + "ellipseMinorAxis": 0.24494899809360505, 4 + "ellipseMajorAxis": 0.3099985122680664, 5 + "screenForward": { 6 + "x": 0.37583938241004946, 7 + "y": -0.2950916886329651, 8 + "z": 0.878445029258728 9 + }, 10 + "screenPosition": { 11 + "x": -0.07663544267416, 12 + "y": -0.006479046773165464, 13 + "z": 0.015394501388072968 14 + }, 15 + "eyePosition": { 16 + "x": -0.030106136575341226, 17 + "y": -0.014616160653531552, 18 + "z": -0.004279683344066143 19 + }, 20 + "eyeRotation": { 21 + "x": 7.395533370627759e-32, 22 + "y": 1.7763568394002506e-15, 23 + "z": 1.1241009818395605e-14, 24 + "w": 1.0 25 + }, 26 + "cameraProjection": { 27 + "x": -0.699999988079071, 28 + "y": 0.699999988079071, 29 + "z": 0.30000001192092898, 30 + "w": -1.399999976158142 31 + }, 32 + "sphereToWorldSpace": { 33 + "e00": 0.05101080238819122, 34 + "e01": 0.06071346998214722, 35 + "e02": 0.29330453276634219, 36 + "e03": -0.1151043102145195, 37 + "e10": 0.0, 38 + "e11": 0.23695310950279237, 39 + "e12": -0.07855913043022156, 40 + "e13": 0.026667742058634759, 41 + "e20": -0.23957861959934236, 42 + "e21": 0.012927045114338398, 43 + "e22": 0.062450066208839419, 44 + "e23": -0.05541845038533211, 45 + "e30": 0.0, 46 + "e31": 0.0, 47 + "e32": 0.0, 48 + "e33": 1.0 49 + }, 50 + "worldToScreenSpace": { 51 + "e00": 2.027873992919922, 52 + "e01": 14.474093437194825, 53 + "e02": 3.994591236114502, 54 + "e03": 0.1876906156539917, 55 + "e10": -15.437186241149903, 56 + "e11": 0.3111684322357178, 57 + "e12": 6.709270000457764, 58 + "e13": -1.284305453300476, 59 + "e20": 0.37583935260772707, 60 + "e21": -0.2950916290283203, 61 + "e22": 0.8784450888633728, 62 + "e23": 0.013367477804422379, 63 + "e30": 0.0, 64 + "e31": 0.0, 65 + "e32": 0.0, 66 + "e33": 1.0 67 + } 68 + }, 69 + "rightEye": { 70 + "ellipseMinorAxis": 0.24494899809360505, 71 + "ellipseMajorAxis": 0.3099985122680664, 72 + "screenForward": { 73 + "x": -0.35585933923721316, 74 + "y": -0.27381938695907595, 75 + "z": 0.8935251235961914 76 + }, 77 + "screenPosition": { 78 + "x": 0.07577500492334366, 79 + "y": -0.009351296350359917, 80 + "z": 0.014919517561793328 81 + }, 82 + "eyePosition": { 83 + "x": 0.0300484336912632, 84 + "y": 0.006817266810685396, 85 + "z": 0.0022060188930481674 86 + }, 87 + "eyeRotation": { 88 + "x": 7.395533370627759e-32, 89 + "y": 1.7763568394002506e-15, 90 + "z": 1.1241009818395605e-14, 91 + "w": 1.0 92 + }, 93 + "cameraProjection": { 94 + "x": -0.699999988079071, 95 + "y": 0.699999988079071, 96 + "z": 0.30000001192092898, 97 + "w": -1.399999976158142 98 + }, 99 + "sphereToWorldSpace": { 100 + "e00": 0.05101081356406212, 101 + "e01": -0.060713451355695727, 102 + "e02": -0.29330453276634219, 103 + "e03": 0.1155824139714241, 104 + "e10": 0.0, 105 + "e11": 0.23695312440395356, 106 + "e12": -0.07855910062789917, 107 + "e13": 0.02368796430528164, 108 + "e20": 0.23957861959934236, 109 + "e21": 0.0129270413890481, 110 + "e22": 0.062450066208839419, 111 + "e23": -0.0545220747590065, 112 + "e30": 0.0, 113 + "e31": 0.0, 114 + "e32": 0.0, 115 + "e33": 1.0 116 + }, 117 + "worldToScreenSpace": { 118 + "e00": -1.7429742813110352, 119 + "e01": 14.570849418640137, 120 + "e02": 3.7710490226745607, 121 + "e03": 0.21206799149513246, 122 + "e10": -15.61334228515625, 123 + "e11": -0.23936468362808228, 124 + "e12": -6.291592597961426, 125 + "e13": 1.2747303247451783, 126 + "e20": -0.35585933923721316, 127 + "e21": -0.27381935715675356, 128 + "e22": 0.8935251235961914, 129 + "e23": 0.011073712259531021, 130 + "e30": 0.0, 131 + "e31": 0.0, 132 + "e32": 0.0, 133 + "e33": 1.0 134 + } 135 + }, 136 + "leapTracker": { 137 + "name": "Leap Odometry Origin", 138 + "serial": "", 139 + "localPose": { 140 + "position": { 141 + "x": 0.0, 142 + "y": 0.02151, 143 + "z": 0.06684 144 + }, 145 + "rotation": { 146 + "x": 0.3255681, 147 + "y": 0, 148 + "z": 0, 149 + "w": 0.9455186 150 + } 151 + } 152 + } 153 + }
-17
src/xrt/drivers/north_star/v2_example_config.json
··· 1 - {"baseline": 64.0, 2 - "left_uv_to_rect_x": [-0.6496146862315304, 1.522223227078294, -0.4813404618897057, 0.35702657717980785, -0.07956037872995925, 1.1454020997970913, -3.2505199559593336, 1.6279076622052455, 0.38831554051443307, -3.5783949261594095, 7.668716710704405, -4.166750433790205, -0.2855168004377634, 2.304654520623994, -4.773857525576798, 2.6771905826607756], 3 - "left_uv_to_rect_y": [0.5735680823264238, -0.07201032485360503, -0.3760147865913098, 0.12237851205003134, -1.1789607449622186, -0.3639051399896993, 1.9433544351592553, -1.428768695251512, 0.43448180786102064, 1.4198893425729027, -4.061494083054925, 2.5833812097228908, -0.20318807476847794, -0.8824999019236596, 2.2256952824902, -1.3778198332457088], 4 - "right_uv_to_rect_x": [-0.6265143917747795, 1.2911622275040877, -0.5517955125123675, 0.34277683878971815, -0.008660007647723567, 0.5057868616188462, -0.7608772693869136, 0.441561492954449, 0.01102824175518119, -0.32306477445426557, 0.7580684800480195, -0.4808991141180218, -0.0517219007106306, 0.2799238117904546, -0.4494394376437649, 0.3706889336770174], 5 - "right_uv_to_rect_y": [0.5259106471825626, -0.1663727700922601, 0.28233333974385694, 0.1745576324081204, -1.0358003574621981, 0.13565673296823005, 0.03669780270514961, -0.28419296928833887, 0.4258466087687195, -0.03876248767088333, -0.37766287840406676, 0.43848943099165466, -0.34808893357030296, 0.22156250909608152, 0.13817451999521518, -0.2468046426038312], 6 - 7 - "leftEyeAngleLeft": -0.6, 8 - "leftEyeAngleRight": 0.6, 9 - "leftEyeAngleUp": 0.6, 10 - "leftEyeAngleDown": -0.6, 11 - 12 - "rightEyeAngleLeft": -0.6, 13 - "rightEyeAngleRight": 0.6, 14 - "rightEyeAngleUp": 0.6, 15 - "rightEyeAngleDown": -0.6 16 - 17 - }
+96
src/xrt/drivers/north_star/v2_example_config_lonestar_50cm.json
··· 1 + { 2 + "baseline": 64.0, 3 + "left_fov_radians_left": -0.8, 4 + "left_fov_radians_right": 0.8, 5 + "left_fov_radians_up": 0.8, 6 + "left_fov_radians_down": -0.8, 7 + "right_fov_radians_left": -0.8, 8 + "right_fov_radians_right": 0.8, 9 + "right_fov_radians_up": 0.8, 10 + "right_fov_radians_down": -0.8, 11 + "t265_to_eyes_center": { 12 + "translation_meters": { 13 + "x": 0, 14 + "y": -0.0683, 15 + "z": 0.0744 16 + }, 17 + "rotation_quaternion": { 18 + "x": 0.102931, 19 + "y": 0, 20 + "z": 0, 21 + "w": 0.994689 22 + } 23 + }, 24 + "left_uv_to_rect_x": [ 25 + -0.7801988839098829, 26 + 1.5908068712799723, 27 + -0.9827824328911254, 28 + 0.5263358892466966, 29 + 0.18664841081239514, 30 + -0.5246668149574745, 31 + 1.4048420164308815, 32 + -0.9330577906613924, 33 + -0.15392100230529293, 34 + 1.106540330862997, 35 + -2.87151330241086, 36 + 2.0315485110726668, 37 + -0.06427965195537277, 38 + -0.3146940276594198, 39 + 1.5763979534056192, 40 + -1.1327966252705322 41 + ], 42 + "left_uv_to_rect_y": [ 43 + -0.4409536269756768, 44 + 0.2888996614465091, 45 + -0.3848014983107932, 46 + -0.1223362997546647, 47 + 0.9670157125483582, 48 + -0.3256816024594271, 49 + 0.533926353628004, 50 + -0.23310084856690347, 51 + -0.17082017203715041, 52 + -0.059688885588560045, 53 + -0.9941995171671563, 54 + 1.0721046441395208, 55 + 0.2547327106222003, 56 + -0.25419242442834455, 57 + 1.0488819862049827, 58 + -0.9515005068294279 59 + ], 60 + "right_uv_to_rect_x": [ 61 + -0.6710613688416264, 62 + 1.1362689645641848, 63 + 0.3956957345987107, 64 + -0.21326295396259742, 65 + -0.5335462524956397, 66 + 4.546071135245812, 67 + -10.207643227900032, 68 + 5.846282899290887, 69 + 1.3039161130160792, 70 + -10.66129593656746, 71 + 22.158725872611857, 72 + -12.912719005943362, 73 + -0.9563087974847321, 74 + 6.870750205887958, 75 + -13.828097816218262, 76 + 8.10122851327323 77 + ], 78 + "right_uv_to_rect_y": [ 79 + -0.36496330390320814, 80 + -0.34773830007498274, 81 + 1.1607448604832324, 82 + -0.5639076806706572, 83 + 0.5129009330129037, 84 + 4.133391411431411, 85 + -9.131958871130214, 86 + 5.601050711809029, 87 + 1.1111421772677867, 88 + -10.247117862137081, 89 + 20.539322154891007, 90 + -12.003706549179878, 91 + -0.671733941602777, 92 + 6.353458803843707, 93 + -12.784556822147636, 94 + 7.548883311524131 95 + ] 96 + }
+3
src/xrt/drivers/north_star/v2_example_config_lonestar_50cm.json.license
··· 1 + Copyright 2021, Moses Turner 2 + 3 + SPDX-License-Identifier: BSL-1.0