diff --git a/.gitignore b/.gitignore index e8e5857..14908ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,12 @@ # IDEs .idea/ .vscode/ +*.DS_Store # Python __pycache__/ venv/ +venv_win/ # Logging logs/ @@ -12,3 +14,12 @@ logs/ # Pytorch and Ultralytics *.pt *.pth + +# Model blobs (large binaries, download via scripts/download_model.py) +models/ + +# Cache +.cache/ + +# Context/prompt files +*.txt \ No newline at end of file diff --git a/accuracy_log.csv b/accuracy_log.csv new file mode 100644 index 0000000..5f2ab41 --- /dev/null +++ b/accuracy_log.csv @@ -0,0 +1,951 @@ +timestamp,test_distance,target_id,x_mm,y_mm,z_mm + +1780951068.305,0.5m,0,34,-131,828 +1780951068.351,0.5m,0,34,-129,836 +1780951068.409,0.5m,0,35,-130,827 +1780951068.458,0.5m,0,36,-130,824 +1780951068.512,0.5m,0,33,-132,830 +1780951068.567,0.5m,0,36,-130,827 +1780951068.616,0.5m,0,34,-129,826 +1780951068.674,0.5m,0,34,-130,824 +1780951068.721,0.5m,0,35,-129,833 +1780951068.778,0.5m,0,29,-129,820 +1780951068.828,0.5m,0,30,-126,825 +1780951068.878,0.5m,0,30,-132,832 +1780951068.934,0.5m,0,21,-131,827 +1780951068.983,0.5m,0,24,-130,832 +1780951069.042,0.5m,0,24,-130,828 +1780951069.092,0.5m,0,24,-130,830 +1780951069.144,0.5m,0,24,-127,827 +1780951069.195,0.5m,0,22,-133,829 +1780951069.246,0.5m,0,22,-126,820 +1780951069.303,0.5m,0,24,-128,823 +1780951069.351,0.5m,0,23,-129,824 +1780951069.409,0.5m,0,22,-127,816 +1780951069.46,0.5m,0,20,-126,818 +1780951069.513,0.5m,0,23,-124,815 +1780951069.565,0.5m,0,19,-128,815 +1780951069.613,0.5m,0,24,-124,820 +1780951069.674,0.5m,0,19,-127,815 +1780951069.721,0.5m,0,19,-127,819 +1780951069.778,0.5m,0,19,-127,817 +1780951069.829,0.5m,0,20,-122,805 +1780951069.877,0.5m,0,20,-124,814 +1780951069.936,0.5m,0,20,-124,815 +1780951069.984,0.5m,0,22,-122,805 +1780951070.041,0.5m,0,22,-127,815 +1780951070.091,0.5m,0,20,-125,808 +1780951070.144,0.5m,0,19,-126,811 +1780951070.198,0.5m,0,19,-130,817 +1780951070.246,0.5m,0,18,-127,816 +1780951070.304,0.5m,0,17,-130,814 +1780951070.352,0.5m,0,18,-127,812 +1780951070.408,0.5m,0,18,-132,812 +1780951070.46,0.5m,0,18,-133,814 +1780951070.512,0.5m,0,17,-133,814 +1780951070.571,0.5m,0,17,-130,814 +1780951070.616,0.5m,0,17,-133,812 +1780951070.675,0.5m,0,19,-128,815 +1780951070.725,0.5m,0,18,-131,817 +1780951070.779,0.5m,0,19,-124,807 +1780951070.835,0.5m,0,20,-127,809 +1780951070.88,0.5m,0,19,-127,806 +1780951070.939,0.5m,0,18,-128,815 +1780951070.987,0.5m,0,20,-127,815 +1780951071.042,0.5m,0,20,-127,817 +1780951071.094,0.5m,0,19,-129,808 +1780951071.145,0.5m,0,20,-128,815 +1780951071.203,0.5m,0,19,-124,804 +1780951071.251,0.5m,0,19,-127,810 +1780951071.307,0.5m,0,18,-128,806 +1780951071.358,0.5m,0,19,-127,818 +1780951071.412,0.5m,0,19,-126,805 +1780951071.47,0.5m,0,19,-123,806 +1780951071.516,0.5m,0,22,-126,803 +1780951071.573,0.5m,0,20,-125,814 +1780951071.621,0.5m,0,22,-126,797 +1780951071.68,0.5m,0,20,-124,814 +1780951071.732,0.5m,0,18,-125,805 +1780951071.779,0.5m,0,18,-127,810 +1780951071.835,0.5m,0,14,-127,807 +1780951071.883,0.5m,0,18,-129,802 +1780951071.942,0.5m,0,18,-128,806 +1780951071.993,0.5m,0,18,-126,805 +1780951072.046,0.5m,0,18,-128,817 +1780951072.101,0.5m,0,19,-121,807 +1780951072.149,0.5m,0,19,-129,807 +1780951072.206,0.5m,0,20,-123,804 +1780951072.253,0.5m,0,18,-124,807 +1780951072.308,0.5m,0,16,-127,799 +1780951072.361,0.5m,0,16,-131,817 +1780951072.411,0.5m,0,19,-129,807 +1780951072.469,0.5m,0,18,-127,807 +1780951072.517,0.5m,0,19,-128,801 +1780951072.577,0.5m,0,17,-128,810 +1780951072.624,0.5m,0,20,-130,802 +1780951072.679,0.5m,0,20,-126,805 +1780951072.734,0.5m,0,18,-128,803 +1780951072.782,0.5m,0,20,-128,803 +1780951072.838,0.5m,0,18,-130,806 +1780951072.886,0.5m,0,18,-130,806 +1780951072.942,0.5m,0,19,-128,807 +1780951072.994,0.5m,0,19,-126,801 +1780951073.045,0.5m,0,18,-127,797 +1780951073.104,0.5m,0,20,-126,802 +1780951073.15,0.5m,0,18,-131,804 +1780951073.208,0.5m,0,19,-127,803 +1780951073.259,0.5m,0,19,-128,801 +1780951073.312,0.5m,0,19,-125,805 +1780951073.368,0.5m,0,20,-127,802 +1780951073.414,0.5m,0,20,-129,802 +1780951073.472,0.5m,0,19,-125,799 +1780951073.519,0.5m,0,19,-125,802 +1780951073.578,0.5m,0,20,-126,799 +1780951073.628,0.5m,0,20,-124,797 +1780951073.679,0.5m,0,20,-123,814 +1780951073.735,0.5m,0,19,-128,800 +1780951073.782,0.5m,0,20,-125,808 +1780951073.842,0.5m,0,20,-121,802 +1780951073.89,0.5m,0,19,-128,801 +1780951073.945,0.5m,0,19,-123,807 +1780951074.0,0.5m,0,19,-125,797 +1780951074.048,0.5m,0,16,-127,799 +1780951074.108,0.5m,0,18,-127,796 +1780951074.154,0.5m,0,18,-128,801 +1780951074.212,0.5m,0,16,-124,800 +1780951074.265,0.5m,0,18,-127,797 +1780951074.313,0.5m,0,19,-127,797 +1780951074.369,0.5m,0,17,-129,801 +1780951074.417,0.5m,0,18,-127,797 +1780951074.472,0.5m,0,17,-125,798 +1780951074.524,0.5m,0,18,-126,801 +1780951074.577,0.5m,0,18,-127,798 +1780951074.633,0.5m,0,18,-124,797 +1780951074.682,0.5m,0,19,-126,801 +1780951074.739,0.5m,0,21,-123,796 +1780951074.791,0.5m,0,23,-113,806 +1780951074.843,0.5m,0,20,-123,802 +1780951074.895,0.5m,0,22,-120,802 +1780951074.945,0.5m,0,18,-116,803 +1780951075.004,0.5m,0,23,-108,797 +1780951075.05,0.5m,0,24,-121,796 +1780951075.109,0.5m,0,23,-124,802 +1780951075.16,0.5m,0,28,-122,805 +1780951075.21,0.5m,0,27,-117,797 +1780951075.269,0.5m,0,25,-125,802 +1780951075.317,0.5m,0,27,-121,795 +1780951075.374,0.5m,0,27,-124,796 +1780951075.424,0.5m,0,25,-124,797 +1780951075.477,0.5m,0,25,-122,797 +1780951075.533,0.5m,0,20,-122,797 +1780951075.58,0.5m,0,21,-122,800 +1780951075.639,0.5m,0,22,-122,799 +1780951075.687,0.5m,0,22,-121,791 +1780951075.744,0.5m,0,21,-122,799 +1780951075.8,0.5m,0,22,-122,797 +1780951075.846,0.5m,0,15,-120,795 +1780951075.903,0.5m,0,24,-123,796 +1780951075.949,0.5m,0,24,-121,793 +1780951076.009,0.5m,0,27,-121,786 +1780951076.058,0.5m,0,23,-122,799 +1780951076.111,0.5m,0,25,-124,799 +1780951076.165,0.5m,0,25,-116,800 +1780951076.212,0.5m,0,25,-121,796 +1780951076.272,0.5m,0,23,-110,790 +1780951076.32,0.5m,0,22,-114,790 +1780951076.375,0.5m,0,20,-120,799 +1780951076.427,0.5m,0,20,-122,801 +1780951076.479,0.5m,0,22,-121,801 +1780951076.536,0.5m,0,20,-121,795 +1780951076.582,0.5m,0,25,-117,791 +1780951076.639,0.5m,0,22,-122,800 +1780951076.69,0.5m,0,20,-126,795 +1780951076.743,0.5m,0,19,-127,799 +1780951076.799,0.5m,0,19,-128,797 +1780951076.846,0.5m,0,17,-128,795 +1780951076.903,0.5m,0,17,-127,790 +1780951076.952,0.5m,0,18,-125,793 +1780951077.008,0.5m,0,17,-128,797 +1780951077.059,0.5m,0,17,-128,795 +1780951077.111,0.5m,0,17,-127,788 +1780951077.166,0.5m,0,17,-128,795 +1780951077.214,0.5m,0,17,-128,796 +1780951077.274,0.5m,0,16,-128,797 +1780951077.321,0.5m,0,17,-130,799 +1780951077.373,0.5m,0,17,-127,793 +1780951077.425,0.5m,0,17,-129,798 +1780951077.478,0.5m,0,16,-129,800 +1780951077.535,0.5m,0,17,-127,791 +1780951077.58,0.5m,0,17,-129,799 +1780951077.638,0.5m,0,17,-129,800 +1780951077.691,0.5m,0,17,-128,797 +1780951077.743,0.5m,0,19,-127,793 +1780951077.798,0.5m,0,18,-126,803 +1780951077.846,0.5m,0,17,-124,790 +1780951077.906,0.5m,0,20,-118,795 +1780951077.953,0.5m,0,23,-116,794 +1780951078.005,0.5m,0,24,-117,796 +1780951078.06,0.5m,0,21,-118,797 +1780951078.109,0.5m,0,21,-117,792 +1780951078.168,0.5m,0,21,-118,788 +1780951078.217,0.5m,0,21,-120,786 +1780951078.274,0.5m,0,22,-117,797 +1780951102.202,1.0m,0,219,-125,1038 +1780951102.254,1.0m,0,220,-126,1045 +1780951102.307,1.0m,0,217,-126,1038 +1780951102.365,1.0m,0,219,-129,1040 +1780951102.41,1.0m,0,216,-128,1038 +1780951102.468,1.0m,0,216,-127,1040 +1780951102.52,1.0m,0,216,-128,1038 +1780951102.569,1.0m,0,215,-123,1033 +1780951102.623,1.0m,0,216,-130,1037 +1780951102.673,1.0m,0,213,-126,1031 +1780951102.732,1.0m,0,215,-130,1041 +1780951102.779,1.0m,0,217,-128,1043 +1780951102.837,1.0m,0,213,-130,1032 +1780951102.887,1.0m,0,214,-127,1034 +1780951102.94,1.0m,0,213,-126,1032 +1780951102.994,1.0m,0,214,-126,1035 +1780951103.045,1.0m,0,217,-130,1036 +1780951103.102,1.0m,0,216,-132,1040 +1780951103.153,1.0m,0,215,-132,1039 +1780951103.207,1.0m,0,214,-128,1037 +1780951103.259,1.0m,0,215,-128,1040 +1780951103.308,1.0m,0,214,-125,1037 +1780951103.363,1.0m,0,216,-127,1045 +1780951103.412,1.0m,0,215,-125,1041 +1780951103.47,1.0m,0,215,-128,1040 +1780951103.522,1.0m,0,214,-126,1035 +1780951103.573,1.0m,0,214,-130,1036 +1780951103.627,1.0m,0,216,-125,1038 +1780951103.674,1.0m,0,215,-128,1038 +1780951103.733,1.0m,0,216,-127,1043 +1780951103.781,1.0m,0,217,-126,1043 +1780951103.836,1.0m,0,216,-128,1038 +1780951103.888,1.0m,0,219,-126,1037 +1780951103.94,1.0m,0,218,-132,1040 +1780951103.997,1.0m,0,218,-131,1041 +1780951104.043,1.0m,0,219,-125,1038 +1780951104.101,1.0m,0,220,-126,1043 +1780951104.152,1.0m,0,218,-126,1032 +1780951104.206,1.0m,0,220,-129,1039 +1780951104.271,1.0m,0,223,-126,1043 +1780951104.308,1.0m,0,221,-126,1035 +1780951104.367,1.0m,0,223,-126,1038 +1780951104.414,1.0m,0,222,-125,1042 +1780951104.472,1.0m,0,222,-126,1039 +1780951104.521,1.0m,0,222,-128,1038 +1780951104.573,1.0m,0,223,-128,1038 +1780951104.631,1.0m,0,221,-126,1035 +1780951104.679,1.0m,0,222,-130,1042 +1780951104.737,1.0m,0,218,-124,1033 +1780951104.788,1.0m,0,219,-120,1033 +1780951104.839,1.0m,0,219,-124,1038 +1780951104.896,1.0m,0,218,-122,1036 +1780951104.943,1.0m,0,218,-123,1036 +1780951105.002,1.0m,0,218,-126,1036 +1780951105.049,1.0m,0,217,-128,1037 +1780951105.105,1.0m,0,217,-132,1035 +1780951105.161,1.0m,0,218,-122,1039 +1780951105.208,1.0m,0,217,-132,1035 +1780951105.264,1.0m,0,218,-131,1039 +1780951105.312,1.0m,0,214,-129,1035 +1780951105.37,1.0m,0,217,-127,1041 +1780951105.421,1.0m,0,215,-126,1039 +1780951105.473,1.0m,0,216,-124,1040 +1780951105.529,1.0m,0,216,-125,1039 +1780951105.579,1.0m,0,213,-124,1031 +1780951105.637,1.0m,0,215,-126,1038 +1780951105.687,1.0m,0,217,-125,1042 +1780951105.741,1.0m,0,214,-125,1037 +1780951105.795,1.0m,0,215,-127,1040 +1780951105.842,1.0m,0,216,-125,1040 +1780951105.901,1.0m,0,216,-125,1040 +1780951105.952,1.0m,0,215,-124,1039 +1780951106.003,1.0m,0,216,-122,1039 +1780951106.054,1.0m,0,216,-122,1040 +1780951106.107,1.0m,0,217,-124,1045 +1780951106.163,1.0m,0,215,-125,1040 +1780951106.211,1.0m,0,217,-127,1042 +1780951106.269,1.0m,0,218,-125,1046 +1780951106.32,1.0m,0,217,-126,1043 +1780951106.378,1.0m,0,215,-124,1041 +1780951106.428,1.0m,0,218,-126,1047 +1780951106.476,1.0m,0,215,-127,1041 +1780951106.534,1.0m,0,215,-125,1039 +1780951106.581,1.0m,0,215,-125,1042 +1780951106.639,1.0m,0,215,-125,1042 +1780951106.693,1.0m,0,216,-127,1043 +1780951106.739,1.0m,0,216,-123,1047 +1780951106.798,1.0m,0,215,-123,1042 +1780951106.844,1.0m,0,216,-125,1047 +1780951106.903,1.0m,0,217,-126,1048 +1780951106.953,1.0m,0,217,-122,1049 +1780951107.008,1.0m,0,216,-123,1043 +1780951107.062,1.0m,0,215,-125,1040 +1780951107.109,1.0m,0,214,-123,1044 +1780951107.166,1.0m,0,213,-122,1039 +1780951107.213,1.0m,0,214,-126,1044 +1780951107.272,1.0m,0,214,-125,1042 +1780951107.327,1.0m,0,211,-126,1036 +1780951107.376,1.0m,0,212,-128,1038 +1780951107.43,1.0m,0,212,-128,1039 +1780951107.481,1.0m,0,212,-127,1041 +1780951107.54,1.0m,0,212,-126,1039 +1780951107.594,1.0m,0,211,-126,1039 +1780951107.639,1.0m,0,212,-127,1041 +1780951107.698,1.0m,0,211,-122,1036 +1780951107.746,1.0m,0,210,-125,1035 +1780951107.803,1.0m,0,212,-121,1041 +1780951107.855,1.0m,0,211,-126,1039 +1780951107.906,1.0m,0,210,-125,1038 +1780951107.96,1.0m,0,210,-125,1037 +1780951108.01,1.0m,0,211,-127,1043 +1780951108.067,1.0m,0,211,-127,1043 +1780951108.114,1.0m,0,211,-127,1041 +1780951108.171,1.0m,0,211,-125,1039 +1780951108.222,1.0m,0,210,-122,1035 +1780951108.272,1.0m,0,211,-128,1036 +1780951108.33,1.0m,0,211,-126,1035 +1780951108.378,1.0m,0,212,-125,1039 +1780951108.436,1.0m,0,212,-127,1041 +1780951108.486,1.0m,0,213,-126,1043 +1780951108.538,1.0m,0,211,-125,1041 +1780951108.593,1.0m,0,211,-126,1043 +1780951108.639,1.0m,0,214,-124,1042 +1780951108.696,1.0m,0,214,-126,1044 +1780951108.746,1.0m,0,214,-126,1044 +1780951108.802,1.0m,0,214,-125,1042 +1780951108.853,1.0m,0,215,-126,1045 +1780951108.907,1.0m,0,214,-126,1043 +1780951108.963,1.0m,0,214,-123,1043 +1780951109.012,1.0m,0,214,-126,1043 +1780951109.067,1.0m,0,214,-123,1037 +1780951109.119,1.0m,0,215,-124,1041 +1780951109.171,1.0m,0,216,-126,1043 +1780951109.222,1.0m,0,215,-122,1038 +1780951109.272,1.0m,0,215,-125,1039 +1780951109.331,1.0m,0,215,-122,1039 +1780951109.378,1.0m,0,216,-126,1043 +1780951109.436,1.0m,0,215,-120,1040 +1780951109.485,1.0m,0,216,-125,1040 +1780951109.54,1.0m,0,217,-125,1041 +1780951109.595,1.0m,0,218,-126,1046 +1780951109.642,1.0m,0,214,-122,1037 +1780951109.7,1.0m,0,217,-121,1041 +1780951109.747,1.0m,0,216,-122,1040 +1780951109.801,1.0m,0,217,-125,1041 +1780951109.855,1.0m,0,216,-125,1038 +1780951109.905,1.0m,0,217,-123,1042 +1780951109.963,1.0m,0,217,-121,1042 +1780951110.012,1.0m,0,217,-126,1044 +1780951110.07,1.0m,0,215,-123,1042 +1780951110.119,1.0m,0,215,-125,1041 +1780951110.172,1.0m,0,215,-124,1041 +1780951110.229,1.0m,0,217,-127,1042 +1780951110.278,1.0m,0,216,-122,1039 +1780951110.337,1.0m,0,216,-126,1047 +1780951110.386,1.0m,0,218,-126,1047 +1780951110.44,1.0m,0,216,-127,1043 +1780951110.495,1.0m,0,216,-129,1045 +1780951110.542,1.0m,0,216,-126,1043 +1780951110.599,1.0m,0,217,-126,1048 +1780951110.646,1.0m,0,215,-124,1039 +1780951110.705,1.0m,0,215,-130,1042 +1780951110.754,1.0m,0,215,-127,1042 +1780951110.806,1.0m,0,216,-126,1045 +1780951110.864,1.0m,0,217,-131,1049 +1780951110.912,1.0m,0,217,-129,1048 +1780951110.969,1.0m,0,215,-130,1042 +1780951111.019,1.0m,0,216,-129,1046 +1780951111.072,1.0m,0,216,-127,1045 +1780951111.129,1.0m,0,215,-128,1038 +1780951111.179,1.0m,0,216,-127,1043 +1780951111.236,1.0m,0,214,-126,1037 +1780951111.287,1.0m,0,217,-127,1041 +1780951111.34,1.0m,0,217,-124,1043 +1780951111.394,1.0m,0,218,-127,1046 +1780951111.441,1.0m,0,218,-129,1047 +1780951111.499,1.0m,0,217,-128,1043 +1780951111.546,1.0m,0,218,-127,1043 +1780951111.601,1.0m,0,218,-126,1039 +1780951111.654,1.0m,0,221,-129,1048 +1780951111.705,1.0m,0,219,-127,1046 +1780951111.763,1.0m,0,218,-126,1043 +1780951111.811,1.0m,0,220,-129,1049 +1780951111.869,1.0m,0,220,-127,1045 +1780951111.918,1.0m,0,221,-137,1048 +1780951111.971,1.0m,0,221,-125,1048 +1780951112.026,1.0m,0,221,-133,1043 +1780951112.073,1.0m,0,223,-128,1049 +1780951112.132,1.0m,0,222,-126,1047 +1780951112.18,1.0m,0,223,-128,1051 +1780951131.27,1.5m,0,319,-205,1614 +1780951131.326,1.5m,0,320,-208,1621 +1780951131.373,1.5m,0,317,-206,1604 +1780951131.431,1.5m,0,320,-206,1624 +1780951131.482,1.5m,0,320,-202,1602 +1780951131.536,1.5m,0,326,-205,1631 +1780951131.591,1.5m,0,320,-202,1602 +1780951131.637,1.5m,0,327,-208,1633 +1780951131.694,1.5m,0,325,-207,1626 +1780951131.744,1.5m,0,325,-206,1624 +1780951131.798,1.5m,0,324,-206,1619 +1780951131.852,1.5m,0,327,-206,1624 +1780951131.902,1.5m,0,325,-203,1614 +1780951131.959,1.5m,0,326,-204,1619 +1780951132.006,1.5m,0,327,-204,1624 +1780951132.064,1.5m,0,327,-206,1624 +1780951132.11,1.5m,0,328,-207,1628 +1780951132.169,1.5m,0,330,-205,1626 +1780951132.222,1.5m,0,324,-200,1607 +1780951132.269,1.5m,0,326,-201,1619 +1780951132.326,1.5m,0,328,-201,1619 +1780951132.376,1.5m,0,327,-203,1614 +1780951132.432,1.5m,0,329,-204,1621 +1780951132.481,1.5m,0,330,-205,1626 +1780951132.536,1.5m,0,329,-200,1624 +1780951132.59,1.5m,0,330,-203,1628 +1780951132.637,1.5m,0,326,-201,1619 +1780951132.695,1.5m,0,327,-203,1614 +1780951132.743,1.5m,0,331,-205,1633 +1780951132.799,1.5m,0,329,-205,1633 +1780951132.851,1.5m,0,327,-205,1626 +1780951132.901,1.5m,0,330,-206,1638 +1780951132.96,1.5m,0,327,-202,1626 +1780951133.007,1.5m,0,324,-202,1621 +1780951133.065,1.5m,0,326,-201,1619 +1780951133.115,1.5m,0,328,-204,1638 +1780951133.169,1.5m,0,327,-205,1633 +1780951133.223,1.5m,0,329,-204,1643 +1780951133.269,1.5m,0,330,-206,1638 +1780951133.329,1.5m,0,330,-206,1641 +1780951133.377,1.5m,0,330,-206,1641 +1780951133.431,1.5m,0,329,-206,1636 +1780951133.484,1.5m,0,332,-204,1636 +1780951133.534,1.5m,0,333,-202,1641 +1780951133.593,1.5m,0,328,-201,1616 +1780951133.64,1.5m,0,333,-204,1641 +1780951133.698,1.5m,0,332,-206,1638 +1780951133.748,1.5m,0,329,-200,1621 +1780951133.801,1.5m,0,336,-204,1658 +1780951133.856,1.5m,0,331,-201,1631 +1780951133.902,1.5m,0,333,-206,1641 +1780951133.964,1.5m,0,328,-199,1619 +1780951134.015,1.5m,0,332,-201,1636 +1780951134.064,1.5m,0,330,-200,1628 +1780951134.118,1.5m,0,336,-206,1656 +1780951134.168,1.5m,0,332,-199,1638 +1780951134.225,1.5m,0,329,-202,1624 +1780951134.273,1.5m,0,333,-202,1643 +1780951134.332,1.5m,0,331,-201,1633 +1780951134.382,1.5m,0,335,-195,1641 +1780951134.435,1.5m,0,334,-197,1636 +1780951134.491,1.5m,0,335,-204,1641 +1780951134.538,1.5m,0,335,-202,1643 +1780951134.597,1.5m,0,335,-205,1651 +1780951134.647,1.5m,0,332,-204,1636 +1780951134.7,1.5m,0,332,-202,1638 +1780951134.751,1.5m,0,332,-201,1636 +1780951134.802,1.5m,0,331,-203,1631 +1780951134.859,1.5m,0,331,-203,1631 +1780951134.908,1.5m,0,331,-201,1631 +1780951134.964,1.5m,0,331,-201,1633 +1780951135.015,1.5m,0,331,-203,1633 +1780951135.071,1.5m,0,331,-201,1631 +1780951135.124,1.5m,0,335,-205,1651 +1780951135.17,1.5m,0,333,-202,1643 +1780951135.228,1.5m,0,332,-201,1636 +1780951135.278,1.5m,0,331,-201,1633 +1780951135.331,1.5m,0,331,-201,1633 +1780951135.383,1.5m,0,330,-200,1626 +1780951135.435,1.5m,0,331,-201,1631 +1780951135.491,1.5m,0,326,-199,1619 +1780951135.538,1.5m,0,332,-202,1638 +1780951135.597,1.5m,0,331,-203,1646 +1780951135.647,1.5m,0,329,-201,1633 +1780951135.7,1.5m,0,330,-204,1638 +1780951135.754,1.5m,0,328,-203,1628 +1780951135.801,1.5m,0,330,-202,1641 +1780951135.862,1.5m,0,331,-203,1646 +1780951135.907,1.5m,0,328,-201,1631 +1780951135.967,1.5m,0,333,-204,1653 +1780951136.015,1.5m,0,327,-200,1626 +1780951136.069,1.5m,0,328,-197,1616 +1780951136.123,1.5m,0,332,-201,1636 +1780951136.169,1.5m,0,334,-205,1646 +1780951136.229,1.5m,0,332,-202,1638 +1780951136.275,1.5m,0,332,-201,1636 +1780951136.33,1.5m,0,330,-199,1619 +1780951136.383,1.5m,0,330,-200,1628 +1780951136.434,1.5m,0,332,-204,1638 +1780951136.491,1.5m,0,330,-200,1628 +1780951136.538,1.5m,0,334,-204,1636 +1780951136.595,1.5m,0,335,-204,1641 +1780951136.648,1.5m,0,333,-202,1641 +1780951136.7,1.5m,0,333,-202,1643 +1780951136.754,1.5m,0,331,-199,1631 +1780951136.801,1.5m,0,335,-204,1643 +1780951136.858,1.5m,0,333,-201,1633 +1780951136.904,1.5m,0,331,-203,1633 +1780951136.963,1.5m,0,330,-199,1616 +1780951137.012,1.5m,0,330,-200,1626 +1780951137.064,1.5m,0,333,-201,1633 +1780951137.117,1.5m,0,333,-201,1633 +1780951137.167,1.5m,0,331,-199,1631 +1780951137.224,1.5m,0,336,-198,1626 +1780951137.271,1.5m,0,336,-200,1626 +1780951137.33,1.5m,0,335,-198,1643 +1780951137.375,1.5m,0,333,-199,1631 +1780951137.43,1.5m,0,330,-200,1628 +1780951137.483,1.5m,0,333,-199,1633 +1780951137.534,1.5m,0,337,-205,1651 +1780951137.591,1.5m,0,335,-198,1641 +1780951137.638,1.5m,0,332,-202,1638 +1780951137.699,1.5m,0,336,-200,1646 +1780951137.746,1.5m,0,330,-198,1628 +1780951137.801,1.5m,0,332,-199,1638 +1780951137.851,1.5m,0,332,-199,1638 +1780951137.9,1.5m,0,331,-199,1633 +1780951137.958,1.5m,0,331,-199,1633 +1780951138.006,1.5m,0,336,-201,1648 +1780951138.063,1.5m,0,333,-197,1633 +1780951138.113,1.5m,0,332,-196,1628 +1780951138.167,1.5m,0,334,-199,1636 +1780951138.22,1.5m,0,337,-201,1653 +1780951138.267,1.5m,0,336,-200,1646 +1780951138.327,1.5m,0,336,-197,1633 +1780951138.373,1.5m,0,337,-199,1653 +1780951138.432,1.5m,0,335,-198,1641 +1780951138.481,1.5m,0,341,-198,1641 +1780951138.534,1.5m,0,335,-200,1641 +1780951138.591,1.5m,0,338,-202,1658 +1780951138.638,1.5m,0,338,-198,1646 +1780951138.696,1.5m,0,336,-198,1648 +1780951138.744,1.5m,0,338,-197,1633 +1780951138.799,1.5m,0,335,-200,1641 +1780951138.85,1.5m,0,333,-200,1641 +1780951138.9,1.5m,0,338,-198,1646 +1780951138.959,1.5m,0,334,-197,1638 +1780951139.006,1.5m,0,333,-199,1633 +1780951139.064,1.5m,0,341,-197,1638 +1780951139.114,1.5m,0,335,-195,1641 +1780951139.167,1.5m,0,333,-197,1633 +1780951139.225,1.5m,0,335,-195,1619 +1780951139.272,1.5m,0,338,-197,1636 +1780951139.333,1.5m,0,339,-197,1638 +1780951139.382,1.5m,0,333,-196,1631 +1780951139.434,1.5m,0,336,-193,1624 +1780951139.489,1.5m,0,333,-197,1633 +1780951139.537,1.5m,0,336,-196,1626 +1780951139.594,1.5m,0,342,-196,1643 +1780951139.643,1.5m,0,334,-195,1616 +1780951139.697,1.5m,0,339,-202,1638 +1780951139.749,1.5m,0,339,-196,1628 +1780951139.8,1.5m,0,337,-194,1631 +1780951139.858,1.5m,0,335,-193,1619 +1780951139.904,1.5m,0,338,-197,1633 +1780951139.963,1.5m,0,333,-198,1609 +1780951140.025,1.5m,0,339,-196,1631 +1780951140.067,1.5m,0,336,-196,1626 +1780951140.122,1.5m,0,336,-195,1624 +1780951140.169,1.5m,0,332,-196,1626 +1780951140.228,1.5m,0,333,-194,1609 +1780951140.278,1.5m,0,332,-196,1626 +1780951140.332,1.5m,0,336,-199,1633 +1780951140.389,1.5m,0,335,-196,1631 +1780951140.434,1.5m,0,338,-197,1633 +1780951140.492,1.5m,0,334,-200,1626 +1780951140.541,1.5m,0,334,-200,1626 +1780951140.598,1.5m,0,336,-199,1636 +1780951140.648,1.5m,0,335,-198,1628 +1780951140.7,1.5m,0,334,-195,1624 +1780951140.756,1.5m,0,337,-196,1628 +1780951140.804,1.5m,0,338,-197,1636 +1780951140.862,1.5m,0,339,-197,1638 +1780951140.909,1.5m,0,333,-197,1619 +1780951140.965,1.5m,0,336,-198,1626 +1780951141.02,1.5m,0,335,-195,1621 +1780951141.069,1.5m,0,333,-197,1633 +1780951141.124,1.5m,0,330,-195,1616 +1780951141.172,1.5m,0,335,-195,1641 +1780951141.229,1.5m,0,335,-196,1643 + +1780951406.896,2.0m,0,-636,-242,2204 +1780951406.942,2.0m,0,-636,-242,2204 +1780951406.999,2.0m,0,-609,-231,2110 +1780951407.05,2.0m,0,-614,-233,2127 +1780951407.102,2.0m,0,-626,-235,2169 +1780951407.159,2.0m,0,-643,-244,2227 +1780951407.207,2.0m,0,-637,-242,2209 +1780951407.265,2.0m,0,-625,-237,2165 +1780951407.311,2.0m,0,-620,-234,2139 +1780951407.368,2.0m,0,-610,-232,2114 +1780951407.419,2.0m,0,-611,-232,2118 +1780951407.468,2.0m,0,-632,-240,2191 +1780951407.526,2.0m,0,-619,-235,2143 +1780951407.574,2.0m,0,-635,-241,2200 +1780951407.632,2.0m,0,-617,-234,2139 +1780951407.684,2.0m,0,-615,-234,2131 +1780951407.736,2.0m,0,-630,-239,2182 +1780951407.792,2.0m,0,-631,-237,2187 +1780951407.841,2.0m,0,-620,-235,2148 +1780951407.898,2.0m,0,-631,-240,2187 +1780951407.949,2.0m,0,-608,-231,2106 +1780951408.001,2.0m,0,-619,-235,2143 +1780951408.056,2.0m,0,-614,-233,2127 +1780951408.103,2.0m,0,-644,-245,2232 +1780951408.163,2.0m,0,-616,-234,2135 +1780951408.21,2.0m,0,-625,-237,2165 +1780951408.266,2.0m,0,-635,-241,2200 +1780951408.323,2.0m,0,-630,-239,2182 +1780951408.369,2.0m,0,-616,-234,2135 +1780951408.427,2.0m,0,-641,-241,2222 +1780951408.476,2.0m,0,-622,-236,2156 +1780951408.533,2.0m,0,-632,-237,2191 +1780951408.583,2.0m,0,-626,-238,2169 +1780951408.634,2.0m,0,-605,-227,2098 +1780951408.69,2.0m,0,-607,-230,2102 +1780951408.738,2.0m,0,-617,-234,2139 +1780951408.796,2.0m,0,-644,-244,2222 +1780951408.843,2.0m,0,-633,-239,2182 +1780951408.898,2.0m,0,-634,-240,2187 +1780951408.949,2.0m,0,-619,-234,2135 +1780951409.002,2.0m,0,-631,-240,2187 +1780951409.059,2.0m,0,-615,-231,2110 +1780951409.107,2.0m,0,-623,-232,2139 +1780951409.165,2.0m,0,-617,-232,2118 +1780951409.216,2.0m,0,-612,-231,2110 +1780951409.269,2.0m,0,-621,-234,2131 +1780951409.323,2.0m,0,-634,-240,2187 +1780951409.37,2.0m,0,-629,-239,2178 +1780951409.427,2.0m,0,-619,-234,2135 +1780951409.475,2.0m,0,-609,-228,2110 +1780951409.533,2.0m,0,-636,-239,2204 +1780951409.585,2.0m,0,-631,-240,2187 +1780951409.636,2.0m,0,-624,-235,2143 +1780951409.692,2.0m,0,-646,-243,2218 +1780951409.74,2.0m,0,-626,-237,2160 +1780951409.797,2.0m,0,-619,-233,2127 +1780951409.848,2.0m,0,-637,-241,2195 +1780951409.902,2.0m,0,-645,-240,2213 +1780951409.951,2.0m,0,-612,-228,2102 +1780951410.002,2.0m,0,-641,-241,2200 +1780951410.059,2.0m,0,-606,-229,2090 +1780951410.107,2.0m,0,-610,-230,2094 +1780951410.165,2.0m,0,-607,-230,2102 +1780951410.216,2.0m,0,-626,-237,2160 +1780951410.268,2.0m,0,-623,-234,2139 +1780951410.323,2.0m,0,-623,-234,2139 +1780951410.37,2.0m,0,-612,-231,2110 +1780951410.429,2.0m,0,-629,-238,2169 +1780951410.475,2.0m,0,-617,-230,2127 +1780951410.531,2.0m,0,-629,-237,2160 +1780951410.584,2.0m,0,-615,-231,2110 +1780951410.636,2.0m,0,-621,-234,2131 +1780951410.693,2.0m,0,-632,-235,2169 +1780951410.741,2.0m,0,-624,-236,2152 +1780951410.799,2.0m,0,-623,-233,2148 +1780951410.849,2.0m,0,-629,-235,2169 +1780951410.903,2.0m,0,-649,-244,2227 +1780951410.959,2.0m,0,-633,-235,2173 +1780951411.005,2.0m,0,-624,-235,2143 +1780951411.063,2.0m,0,-637,-234,2187 +1780951411.109,2.0m,0,-629,-234,2160 +1780951411.164,2.0m,0,-613,-231,2106 +1780951411.217,2.0m,0,-650,-242,2232 +1780951411.268,2.0m,0,-629,-237,2160 +1780951411.324,2.0m,0,-646,-240,2218 +1780951411.372,2.0m,0,-636,-239,2182 +1780951411.43,2.0m,0,-642,-242,2204 +1780951411.477,2.0m,0,-629,-238,2169 +1780951411.534,2.0m,0,-626,-235,2148 +1780951411.585,2.0m,0,-642,-242,2204 +1780951411.634,2.0m,0,-635,-240,2191 +1780951411.693,2.0m,0,-628,-236,2156 +1780951411.742,2.0m,0,-643,-242,2209 +1780951411.798,2.0m,0,-629,-234,2160 +1780951411.849,2.0m,0,-621,-234,2131 +1780951411.902,2.0m,0,-616,-232,2114 +1780951411.959,2.0m,0,-634,-239,2178 +1780951412.006,2.0m,0,-632,-238,2169 +1780951412.065,2.0m,0,-612,-230,2102 +1780951412.115,2.0m,0,-631,-237,2165 +1780951412.167,2.0m,0,-628,-236,2156 +1780951412.218,2.0m,0,-626,-234,2139 +1780951412.268,2.0m,0,-631,-236,2156 +1780951412.327,2.0m,0,-624,-235,2143 +1780951412.372,2.0m,0,-637,-240,2187 +1780951412.43,2.0m,0,-651,-245,2236 +1780951412.477,2.0m,0,-642,-242,2204 +1780951412.534,2.0m,0,-617,-232,2118 +1780951412.585,2.0m,0,-626,-235,2148 +1780951412.636,2.0m,0,-633,-238,2173 +1780951412.695,2.0m,0,-632,-238,2169 +1780951412.743,2.0m,0,-649,-244,2227 +1780951412.797,2.0m,0,-618,-233,2122 +1780951412.851,2.0m,0,-653,-245,2232 +1780951412.902,2.0m,0,-632,-238,2169 +1780951412.96,2.0m,0,-646,-244,2227 +1780951413.008,2.0m,0,-630,-238,2173 +1780951413.064,2.0m,0,-633,-238,2173 +1780951413.114,2.0m,0,-631,-239,2178 +1780951413.168,2.0m,0,-639,-242,2204 +1780951413.235,2.0m,0,-615,-233,2122 +1780951413.27,2.0m,0,-605,-230,2098 +1780951413.33,2.0m,0,-624,-237,2160 +1780951413.376,2.0m,0,-611,-232,2118 +1780951413.43,2.0m,0,-622,-236,2156 +1780951413.483,2.0m,0,-627,-238,2173 +1780951413.536,2.0m,0,-624,-234,2160 +1780951413.591,2.0m,0,-635,-241,2200 +1780951413.638,2.0m,0,-646,-244,2227 +1780951413.696,2.0m,0,-611,-232,2118 +1780951413.744,2.0m,0,-625,-236,2156 +1780951413.798,2.0m,0,-622,-236,2156 +1780951413.855,2.0m,0,-622,-236,2156 +1780951413.906,2.0m,0,-626,-238,2169 +1780951413.962,2.0m,0,-640,-243,2218 +1780951414.008,2.0m,0,-621,-236,2152 +1780951414.064,2.0m,0,-622,-236,2156 +1780951414.117,2.0m,0,-640,-240,2218 +1780951414.167,2.0m,0,-614,-233,2127 +1780951414.226,2.0m,0,-609,-231,2110 +1780951414.273,2.0m,0,-627,-238,2173 +1780951414.331,2.0m,0,-635,-241,2200 +1780951414.383,2.0m,0,-616,-234,2135 +1780951414.433,2.0m,0,-626,-238,2169 +1780951414.491,2.0m,0,-617,-234,2139 +1780951414.539,2.0m,0,-625,-237,2165 +1780951414.598,2.0m,0,-631,-240,2187 +1780951414.647,2.0m,0,-625,-237,2165 +1780951414.701,2.0m,0,-609,-228,2110 +1780951414.755,2.0m,0,-614,-230,2127 +1780951414.802,2.0m,0,-608,-228,2106 +1780951414.861,2.0m,0,-622,-236,2156 +1780951414.905,2.0m,0,-637,-241,2195 +1780951414.964,2.0m,0,-617,-234,2139 +1780951415.014,2.0m,0,-615,-234,2131 +1780951415.069,2.0m,0,-605,-229,2086 +1780951415.123,2.0m,0,-624,-237,2160 +1780951415.168,2.0m,0,-631,-236,2178 +1780951415.226,2.0m,0,-631,-237,2187 +1780951415.274,2.0m,0,-631,-239,2178 +1780951415.33,2.0m,0,-626,-232,2169 +1780951415.382,2.0m,0,-631,-237,2187 +1780951415.434,2.0m,0,-621,-233,2152 +1780951415.492,2.0m,0,-603,-229,2090 +1780951415.541,2.0m,0,-615,-228,2131 +1780951415.598,2.0m,0,-634,-235,2195 +1780951415.65,2.0m,0,-624,-230,2152 +1780951415.701,2.0m,0,-622,-231,2156 +1780951415.76,2.0m,0,-617,-232,2139 +1780951415.807,2.0m,0,-604,-224,2094 +1780951415.865,2.0m,0,-625,-229,2165 +1780951415.914,2.0m,0,-611,-226,2118 +1780951415.97,2.0m,0,-622,-231,2156 +1780951416.022,2.0m,0,-604,-221,2094 +1780951416.07,2.0m,0,-616,-228,2135 +1780951416.127,2.0m,0,-617,-232,2139 +1780951416.175,2.0m,0,-648,-237,2245 +1780951416.231,2.0m,0,-624,-231,2160 +1780951416.282,2.0m,0,-629,-230,2178 +1780951416.334,2.0m,0,-616,-228,2135 +1780951416.391,2.0m,0,-627,-229,2173 +1780951416.438,2.0m,0,-624,-225,2160 +1780951416.496,2.0m,0,-624,-228,2160 +1780951416.549,2.0m,0,-627,-232,2173 +1780951416.601,2.0m,0,-632,-234,2191 +1780951416.657,2.0m,0,-611,-226,2118 +1780951416.704,2.0m,0,-648,-237,2245 +1780951416.762,2.0m,0,-644,-242,2232 +1780951416.809,2.0m,0,-619,-232,2143 +1780951416.87,2.0m,0,-620,-233,2148 +1780951456.966,3.0m,1,-716,-451,3237 +1780951457.022,3.0m,1,-702,-418,3153 +1780951457.07,3.0m,1,-690,-425,3081 +1780951457.129,3.0m,1,-696,-435,3125 +1780951457.178,3.0m,1,-708,-430,3180 +1780951457.235,3.0m,1,-677,-416,2988 +1780951457.284,3.0m,1,-690,-431,3064 +1780951457.335,3.0m,1,-686,-414,3064 +1780951457.391,3.0m,1,-665,-396,2988 +1780951457.441,3.0m,1,-687,-429,3144 +1780951457.499,3.0m,1,-652,-225,2963 +1780951457.551,3.0m,1,-694,-438,3117 +1780951457.601,3.0m,1,-663,-407,3013 +1780951457.66,3.0m,1,-647,-206,2980 +1780951457.707,3.0m,1,-642,-231,2884 +1780951457.765,3.0m,1,-666,-348,3029 +1780951457.815,3.0m,1,-655,-230,2980 +1780951457.869,3.0m,1,-676,-304,3038 +1780951457.923,3.0m,1,-665,-275,2988 +1780951457.97,3.0m,1,-603,-149,2884 +1780951458.028,3.0m,1,-645,-230,2931 +1780951458.075,3.0m,1,-661,-412,2988 +1780951458.133,3.0m,1,-658,-362,2971 +1780951458.188,3.0m,1,-678,-428,3046 +1780951458.236,3.0m,1,-674,-408,3081 +1780951458.294,3.0m,1,-644,-185,2963 +1780951458.339,3.0m,1,-678,-346,3046 +1780951458.398,3.0m,1,-654,-210,2971 +1780951458.449,3.0m,1,-631,-218,2923 +1780951458.501,3.0m,1,-660,-339,3021 +1780951458.556,3.0m,1,-653,-231,2988 +1780951458.603,3.0m,1,-659,-236,2996 +1780951458.661,3.0m,1,-664,-223,3038 +1780951458.708,3.0m,1,-657,-175,2931 +1780951458.763,3.0m,1,-663,-397,2996 +1780951458.817,3.0m,1,-650,-193,2955 +1780951458.868,3.0m,1,-645,-234,2931 +1780951458.928,3.0m,1,-663,-401,2996 +1780951458.972,3.0m,1,-671,-389,2996 +1780951459.03,3.0m,1,-640,-233,2908 +1780951459.08,3.0m,1,-650,-232,2955 +1780951459.135,3.0m,1,-637,-219,2931 +1780951459.189,3.0m,1,-652,-224,2947 +1780951459.236,3.0m,1,-607,-151,2996 +1780951459.297,3.0m,1,-668,-325,3038 +1780951459.347,3.0m,1,-660,-224,2947 +1780951459.399,3.0m,1,-654,-246,2971 +1780951459.451,3.0m,1,-650,-366,2939 +1780951459.501,3.0m,1,-657,-227,2988 +1780951459.56,3.0m,1,-669,-388,3021 +1780951459.607,3.0m,1,-672,-407,3038 +1780951459.662,3.0m,1,-661,-390,3004 +1780951459.715,3.0m,1,-659,-419,2980 +1780951459.766,3.0m,1,-632,-231,2892 +1780951459.824,3.0m,1,-646,-223,2939 +1780951459.872,3.0m,1,-663,-399,3013 +1780951459.931,3.0m,1,-650,-235,2939 +1780951459.981,3.0m,1,-658,-396,2955 +1780951460.035,3.0m,1,-659,-304,2996 +1780951460.09,3.0m,1,-641,-221,2915 +1780951460.137,3.0m,1,-631,-218,2869 +1780951460.196,3.0m,1,-667,-415,2980 +1780951460.242,3.0m,1,-650,-216,2955 +1780951460.297,3.0m,1,-618,-157,2955 +1780951460.354,3.0m,1,-658,-390,2971 +1780951460.4,3.0m,1,-636,-233,2908 +1780951460.458,3.0m,1,-631,-218,2923 +1780951460.505,3.0m,1,-626,-221,2862 +1780951460.563,3.0m,1,-658,-228,2955 +1780951460.614,3.0m,1,-643,-222,2923 +1780951460.67,3.0m,1,-648,-212,2947 +1780951460.722,3.0m,1,-682,-427,3064 +1780951460.77,3.0m,1,-672,-376,3055 +1780951460.828,3.0m,1,-659,-389,2996 +1780951460.879,3.0m,1,-639,-234,2923 +1780951460.935,3.0m,1,-628,-220,2892 +1780951460.989,3.0m,1,-664,-388,3021 +1780951461.036,3.0m,1,-615,-151,2996 +1780951461.095,3.0m,1,-636,-192,2947 +1780951461.142,3.0m,1,-648,-283,2947 +1780951461.198,3.0m,1,-659,-395,2980 +1780951461.25,3.0m,1,-659,-413,2996 +1780951461.302,3.0m,1,-634,-287,2900 +1780951461.358,3.0m,1,-655,-411,2980 +1780951461.408,3.0m,1,-643,-289,2923 +1780951461.463,3.0m,1,-676,-430,3055 +1780951461.517,3.0m,1,-656,-397,2963 +1780951461.568,3.0m,1,-663,-219,2996 +1780951461.627,3.0m,1,-684,-429,3108 +1780951461.73,3.0m,1,-659,-411,2980 +1780951461.783,3.0m,1,-657,-412,2988 +1780951461.834,3.0m,1,-668,-386,3038 +1780951461.89,3.0m,1,-626,-229,2862 +1780951461.938,3.0m,1,-656,-389,2963 +1780951461.995,3.0m,1,-649,-339,2915 +1780951462.046,3.0m,1,-679,-437,2996 +1780951462.1,3.0m,1,-598,-156,2877 +1780951462.154,3.0m,1,-662,-382,2971 +1780951462.203,3.0m,1,-661,-424,2988 +1780951462.258,3.0m,1,-625,-226,2824 +1780951462.308,3.0m,1,-641,-234,2931 +1780951462.364,3.0m,1,-658,-410,2971 +1780951462.415,3.0m,1,-653,-353,2931 +1780951462.467,3.0m,1,-639,-231,2939 +1780951462.525,3.0m,1,-640,-228,2947 +1780951462.572,3.0m,1,-664,-407,3038 +1780951462.63,3.0m,1,-629,-217,2915 +1780951462.681,3.0m,1,-657,-412,2988 +1780951462.735,3.0m,1,-663,-401,2996 +1780951462.789,3.0m,1,-634,-219,2884 +1780951462.837,3.0m,1,-659,-381,2996 +1780951462.895,3.0m,1,-607,-156,2939 +1780951462.943,3.0m,1,-622,-154,2971 +1780951462.999,3.0m,1,-673,-417,3021 +1780951463.054,3.0m,1,-656,-425,2963 +1780951463.102,3.0m,1,-657,-235,2988 +1780951463.162,3.0m,1,-657,-382,3004 +1780951463.209,3.0m,1,-660,-381,2963 +1780951463.263,3.0m,1,-662,-426,2971 +1780951463.316,3.0m,1,-661,-424,2988 +1780951463.367,3.0m,1,-661,-247,2988 +1780951463.424,3.0m,1,-622,-161,2955 +1780951463.472,3.0m,1,-641,-230,2931 +1780951463.528,3.0m,1,-661,-418,3004 +1780951463.579,3.0m,1,-657,-400,2988 +1780951463.636,3.0m,1,-657,-392,2988 +1780951463.692,3.0m,1,-643,-226,2923 +1780951463.735,3.0m,1,-670,-418,3029 +1780951463.794,3.0m,1,-659,-417,2996 +1780951463.84,3.0m,1,-666,-435,3064 +1780951463.896,3.0m,1,-658,-234,2971 +1780951463.949,3.0m,1,-640,-192,2892 +1780951464.001,3.0m,1,-678,-336,3064 +1780951464.057,3.0m,1,-645,-363,2915 +1780951464.105,3.0m,1,-668,-415,3038 +1780951464.164,3.0m,1,-669,-384,2988 +1780951464.214,3.0m,1,-666,-404,2955 +1780951464.268,3.0m,1,-672,-407,3038 +1780951464.322,3.0m,1,-666,-397,3029 +1780951464.368,3.0m,1,-663,-409,2996 +1780951464.427,3.0m,1,-665,-414,3004 +1780951464.48,3.0m,1,-666,-406,3029 +1780951464.53,3.0m,1,-659,-401,2996 +1780951464.583,3.0m,1,-656,-233,2963 +1780951464.634,3.0m,1,-667,-428,3013 +1780951464.692,3.0m,1,-614,-159,2915 +1780951464.74,3.0m,1,-655,-393,2996 +1780951464.796,3.0m,1,-661,-426,3004 +1780951464.9,3.0m,1,-620,-159,3081 +1780951464.959,3.0m,1,-610,-165,2955 +1780951465.006,3.0m,1,-620,-156,3021 +1780951465.063,3.0m,1,-669,-384,3021 +1780951465.114,3.0m,1,-659,-409,2996 +1780951465.166,3.0m,1,-650,-234,2971 +1780951465.223,3.0m,1,-661,-215,2988 +1780951465.272,3.0m,1,-668,-435,3038 +1780951465.33,3.0m,1,-616,-165,2963 +1780951465.38,3.0m,1,-654,-234,2971 +1780951465.434,3.0m,1,-628,-155,3004 +1780951465.488,3.0m,1,-633,-230,2877 +1780951465.536,3.0m,1,-664,-237,2963 +1780951465.593,3.0m,1,-608,-163,3004 +1780951465.642,3.0m,1,-655,-415,2980 +1780951465.699,3.0m,1,-622,-168,3013 +1780951465.753,3.0m,1,-614,-162,2915 +1780951465.8,3.0m,1,-670,-406,3029 +1780951465.857,3.0m,1,-680,-419,3038 +1780951465.907,3.0m,1,-663,-413,2996 +1780951465.962,3.0m,1,-657,-416,2988 +1780951466.017,3.0m,1,-626,-157,3029 +1780951466.066,3.0m,1,-667,-383,3013 +1780951466.125,3.0m,1,-655,-232,2996 +1780951466.174,3.0m,1,-658,-246,2971 +1780951466.234,3.0m,1,-622,-153,2955 +1780951466.287,3.0m,1,-611,-154,2980 +1780951466.333,3.0m,1,-643,-233,2908 +1780951466.391,3.0m,1,-654,-222,2971 +1780951466.439,3.0m,1,-639,-230,2923 +1780951466.496,3.0m,1,-628,-164,2947 +1780951466.548,3.0m,1,-667,-399,3013 +1780951466.6,3.0m,1,-615,-163,2996 +1780951466.657,3.0m,1,-655,-385,2996 +1780951466.704,3.0m,1,-636,-224,2892 +1780951466.761,3.0m,1,-616,-167,3064 +1780951466.814,3.0m,1,-678,-420,3046 +1780951466.869,3.0m,1,-647,-234,2923 +1780951466.923,3.0m,1,-648,-212,2947 +1780951531.613,3.0m,0,1350,-605,3499 diff --git a/config.yaml b/config.yaml index 4b0d967..ba6a101 100644 --- a/config.yaml +++ b/config.yaml @@ -86,3 +86,13 @@ communications: auto_landing: enabled: true + +spatial_detection: + # Luxonis model zoo name. Auto-downloaded on first run, cached after. + model_name: "yolov6-nano" + confidence_threshold: 0.5 + depth_lower_mm: 100 # Ignore detections closer than this (mm) + depth_upper_mm: 10000 # Ignore detections farther than this (mm) + +object_tracker: + target_class_id: 0 # COCO class 0 = person diff --git a/documentation/accuracy/accuracy_log_2026-04-30.csv b/documentation/accuracy/accuracy_log_2026-04-30.csv new file mode 100644 index 0000000..c90c71c --- /dev/null +++ b/documentation/accuracy/accuracy_log_2026-04-30.csv @@ -0,0 +1,773 @@ +timestamp,test_distance,target_id,x_mm,y_mm,z_mm +1777584773.933155,0.5m,0,-143,36,686 +1777584773.984818,0.5m,0,-144,36,687 +1777584774.04097,0.5m,0,-143,36,685 +1777584774.093626,0.5m,0,-142,36,686 +1777584774.146431,0.5m,0,-141,36,684 +1777584774.199923,0.5m,0,-143,36,685 +1777584774.255423,0.5m,0,-141,36,684 +1777584774.3112152,0.5m,0,-141,36,685 +1777584774.359117,0.5m,0,-142,36,684 +1777584774.413475,0.5m,0,-142,36,684 +1777584774.468322,0.5m,0,-145,36,683 +1777584774.524756,0.5m,0,-142,36,683 +1777584774.578047,0.5m,0,-141,36,684 +1777584774.6253388,0.5m,0,-142,36,683 +1777584774.684326,0.5m,0,-143,36,684 +1777584774.741537,0.5m,0,-142,36,683 +1777584774.79103,0.5m,0,-139,36,683 +1777584774.846604,0.5m,0,-142,36,682 +1777584774.899203,0.5m,0,-141,36,685 +1777584774.951763,0.5m,0,-142,36,684 +1777584775.006977,0.5m,0,-141,36,682 +1777584775.059201,0.5m,0,-144,36,683 +1777584775.112287,0.5m,0,-146,36,684 +1777584775.166784,0.5m,0,-140,35,680 +1777584775.222338,0.5m,0,-143,36,682 +1777584775.27897,0.5m,0,-141,36,683 +1777584775.32592,0.5m,0,-143,36,683 +1777584775.38127,0.5m,0,-142,36,683 +1777584775.433981,0.5m,0,-142,36,683 +1777584775.490635,0.5m,0,-141,36,683 +1777584775.546562,0.5m,0,-144,36,684 +1777584775.59393,0.5m,0,-139,36,683 +1777584775.6496918,0.5m,0,-143,36,683 +1777584775.701952,0.5m,0,-142,36,682 +1777584775.757418,0.5m,0,-143,36,682 +1777584775.812104,0.5m,0,-141,35,679 +1777584775.8605142,0.5m,0,-140,35,681 +1777584775.919712,0.5m,0,-140,35,683 +1777584775.9708061,0.5m,0,-143,35,682 +1777584776.02426,0.5m,0,-142,35,680 +1777584776.079013,0.5m,0,-143,36,683 +1777584776.129877,0.5m,0,-143,36,683 +1777584776.185218,0.5m,0,-142,35,681 +1777584776.2515929,0.5m,0,-141,34,679 +1777584776.29374,0.5m,0,-142,36,683 +1777584776.346664,0.5m,0,-142,34,680 +1777584776.407134,0.5m,0,-141,35,677 +1777584776.456974,0.5m,0,-140,35,677 +1777584776.513495,0.5m,0,-140,34,680 +1777584776.561706,0.5m,0,-141,34,680 +1777584776.618376,0.5m,0,-142,35,681 +1777584776.677453,0.5m,0,-142,35,682 +1777584776.723658,0.5m,0,-141,34,680 +1777584776.77735,0.5m,0,-142,34,677 +1777584776.8335192,0.5m,0,-139,35,678 +1777584776.887236,0.5m,0,-141,35,678 +1777584776.940537,0.5m,0,-138,34,677 +1777584776.992797,0.5m,0,-139,34,678 +1777584777.045393,0.5m,0,-142,34,678 +1777584777.099277,0.5m,0,-142,34,678 +1777584777.1531038,0.5m,0,-141,35,681 +1777584777.211467,0.5m,0,-140,34,675 +1777584777.260128,0.5m,0,-141,34,677 +1777584777.3143559,0.5m,0,-140,34,681 +1777584777.368305,0.5m,0,-138,34,678 +1777584777.42418,0.5m,0,-140,34,681 +1777584777.479261,0.5m,0,-140,34,679 +1777584777.5271418,0.5m,0,-140,33,676 +1777584777.584167,0.5m,0,-140,33,677 +1777584777.634658,0.5m,0,-140,33,677 +1777584777.689888,0.5m,0,-137,34,678 +1777584777.746012,0.5m,0,-139,33,676 +1777584777.796691,0.5m,0,-138,33,678 +1777584777.85054,0.5m,0,-139,34,679 +1777584777.9076228,0.5m,0,-137,33,674 +1777584777.957373,0.5m,0,-138,34,677 +1777584778.010447,0.5m,0,-139,33,677 +1777584778.066829,0.5m,0,-137,34,677 +1777584778.120429,0.5m,0,-138,34,677 +1777584778.1727319,0.5m,0,-139,33,677 +1777584778.224009,0.5m,0,-139,33,677 +1777584778.278272,0.5m,0,-138,34,677 +1777584778.332188,0.5m,0,-138,34,676 +1777584778.384247,0.5m,0,-138,34,678 +1777584778.439453,0.5m,0,-139,34,678 +1777584778.492364,0.5m,0,-140,35,677 +1777584778.546578,0.5m,0,-138,35,679 +1777584778.5984042,0.5m,0,-138,35,677 +1777584778.652034,0.5m,0,-139,35,677 +1777584778.709323,0.5m,0,-138,35,677 +1777584778.759792,0.5m,0,-139,34,678 +1777584778.8125288,0.5m,0,-140,34,680 +1777584778.8646069,0.5m,0,-140,35,676 +1777584778.92089,0.5m,0,-138,35,678 +1777584778.973851,0.5m,0,-138,35,680 +1777584779.024487,0.5m,0,-139,35,678 +1777584779.080108,0.5m,0,-140,36,682 +1777584779.1333299,0.5m,0,-140,35,681 +1777584779.187129,0.5m,0,-142,35,681 +1777584779.23953,0.5m,0,-139,34,678 +1777584779.292043,0.5m,0,-141,34,677 +1777584779.344332,0.5m,0,-139,34,680 +1777584779.400228,0.5m,0,-142,35,682 +1777584779.4522429,0.5m,0,-140,35,681 +1777584779.5089889,0.5m,0,-139,34,677 +1777584779.559432,0.5m,0,-139,34,677 +1777584779.6173959,0.5m,0,-139,35,677 +1777584779.6675808,0.5m,0,-140,34,677 +1777584779.722684,0.5m,0,-140,35,683 +1777584779.7773561,0.5m,0,-141,35,682 +1777584779.824949,0.5m,0,-138,36,684 +1777584779.879581,0.5m,0,-140,34,680 +1777584779.9365911,0.5m,0,-137,35,681 +1777584779.990707,0.5m,0,-139,34,680 +1777584780.050266,0.5m,0,-140,34,676 +1777584780.095216,0.5m,0,-140,34,677 +1777584780.152396,0.5m,0,-139,33,678 +1777584780.209996,0.5m,0,-139,34,680 +1777584780.258473,0.5m,0,-140,33,677 +1777584780.310036,0.5m,0,-140,34,680 +1777584780.365551,0.5m,0,-139,34,680 +1777584780.4204109,0.5m,0,-139,33,677 +1777584780.476628,0.5m,0,-137,33,677 +1777584780.524916,0.5m,0,-139,34,679 +1777584780.580128,0.5m,0,-139,33,676 +1777584780.633704,0.5m,0,-140,34,679 +1777584780.6897411,0.5m,0,-138,32,676 +1777584780.746529,0.5m,0,-139,32,677 +1777584780.7983942,0.5m,0,-138,32,675 +1777584780.851271,0.5m,0,-137,32,675 +1777584780.9077241,0.5m,0,-138,32,675 +1777584780.9576378,0.5m,0,-138,32,674 +1777584781.0124118,0.5m,0,-139,32,676 +1777584781.065533,0.5m,0,-138,32,674 +1777584781.1191711,0.5m,0,-136,32,674 +1777584781.175822,0.5m,0,-138,32,672 +1777584781.224563,0.5m,0,-137,32,675 +1777584781.278879,0.5m,0,-137,32,675 +1777584781.33247,0.5m,0,-136,32,674 +1777584781.386123,0.5m,0,-138,32,672 +1777584781.4425962,0.5m,0,-135,32,672 +1777584781.491115,0.5m,0,-137,32,672 +1777584781.545863,0.5m,0,-136,32,674 +1777584781.604835,0.5m,0,-136,32,677 +1777584781.655715,0.5m,0,-137,32,673 +1777584781.713494,0.5m,0,-139,32,673 +1777584781.764597,0.5m,0,-137,32,672 +1777584781.818253,0.5m,0,-138,32,675 +1777584781.872355,0.5m,0,-139,32,673 +1777584781.926759,0.5m,0,-138,32,676 +1777584781.978428,0.5m,0,-138,32,673 +1777584782.035033,0.5m,0,-138,32,674 +1777584782.0896692,0.5m,0,-137,32,674 +1777584782.144,0.5m,0,-138,32,675 +1777584782.195932,0.5m,0,-136,33,673 +1777584782.250228,0.5m,0,-138,32,675 +1777584782.30556,0.5m,0,-135,32,676 +1777584782.357902,0.5m,0,-135,33,674 +1777584782.413704,0.5m,0,-138,33,675 +1777584782.464208,0.5m,0,-137,33,677 +1777584782.516848,0.5m,0,-137,33,674 +1777584782.574667,0.5m,0,-136,33,676 +1777584782.6248288,0.5m,0,-137,33,676 +1777584782.6782248,0.5m,0,-138,34,674 +1777584782.732849,0.5m,0,-136,33,673 +1777584782.78512,0.5m,0,-139,33,677 +1777584782.84207,0.5m,0,-136,34,677 +1777584782.890374,0.5m,0,-138,34,675 +1777584782.946177,0.5m,0,-137,33,675 +1777584783.001867,0.5m,0,-138,33,675 +1777584783.057136,0.5m,0,-139,33,676 +1777584783.11158,0.5m,0,-137,34,679 +1777584783.157732,0.5m,0,-138,34,681 +1777584783.217126,0.5m,0,-137,34,683 +1777584783.269973,0.5m,0,-136,34,682 +1777584783.322892,0.5m,0,-135,33,677 +1777584783.376968,0.5m,0,-137,34,682 +1777584783.429974,0.5m,0,-137,34,681 +1777584783.483176,0.5m,0,-136,33,678 +1777584783.536618,0.5m,0,-137,34,679 +1777584783.588802,0.5m,0,-137,33,677 +1777584783.646358,0.5m,0,-136,33,677 +1777584783.698427,0.5m,0,-137,33,675 +1777584783.75029,0.5m,0,-136,32,676 +1777584783.8055491,0.5m,0,-136,33,678 +1777584783.856597,0.5m,0,-137,32,676 +1777584783.9132538,0.5m,0,-136,32,677 +1777584783.964084,0.5m,0,-138,32,677 +1777584784.0196102,0.5m,0,-136,32,674 +1777584784.071839,0.5m,0,-136,32,676 +1777584784.12388,0.5m,0,-136,32,674 +1777584784.177588,0.5m,0,-137,32,674 +1777584784.2322009,0.5m,0,-137,32,676 +1777584784.288994,0.5m,0,-136,32,674 +1777584784.344177,0.5m,0,-136,33,676 +1777584784.3934562,0.5m,0,-135,32,673 +1777584784.451879,0.5m,0,-136,32,674 +1777584784.503586,0.5m,0,-135,32,675 +1777584784.556819,0.5m,0,-137,32,675 +1777584784.609131,0.5m,0,-134,32,673 +1777584784.6658099,0.5m,0,-135,32,674 +1777584784.720178,0.5m,0,-135,32,675 +1777584784.775458,0.5m,0,-135,32,674 +1777584784.8257432,0.5m,0,-133,32,673 +1777584784.878447,0.5m,0,-134,32,673 +1777584784.9333918,0.5m,0,-135,32,674 +1777584784.9864,0.5m,0,-134,31,673 +1777584785.0430238,0.5m,0,-134,32,675 +1777584785.09088,0.5m,0,-134,32,675 +1777584785.149934,0.5m,0,-134,32,672 +1777584785.2031949,0.5m,0,-134,32,673 +1777584785.258479,0.5m,0,-135,32,671 +1777584785.311779,0.5m,0,-134,32,672 +1777584785.364361,0.5m,0,-134,32,672 +1777584785.4190788,0.5m,0,-134,31,672 +1777584785.4742222,0.5m,0,-133,31,672 +1777584785.5235689,0.5m,0,-134,31,673 +1777584785.579542,0.5m,0,-133,31,673 +1777584785.630868,0.5m,0,-135,31,672 +1777584785.6846411,0.5m,0,-134,31,673 +1777584785.741249,0.5m,0,-134,31,673 +1777584785.790445,0.5m,0,-135,31,672 +1777584785.844634,0.5m,0,-136,31,671 +1777584785.8991868,0.5m,0,-135,31,674 +1777584785.95562,0.5m,0,-134,31,674 +1777584786.009505,0.5m,0,-135,31,672 +1777584786.057507,0.5m,0,-136,31,673 +1777584786.1115031,0.5m,0,-133,31,672 +1777584786.165101,0.5m,0,-133,31,671 +1777584786.22083,0.5m,0,-135,31,671 +1777584786.272362,0.5m,0,-135,31,672 +1777584786.322975,0.5m,0,-136,31,672 +1777584786.379523,0.5m,0,-133,31,672 +1777584786.43193,0.5m,0,-135,31,672 +1777584786.4820302,0.5m,0,-135,31,671 +1777584786.539077,0.5m,0,-135,31,673 +1777584786.589986,0.5m,0,-135,31,671 +1777584786.643352,0.5m,0,-135,31,672 +1777584786.698565,0.5m,0,-135,31,671 +1777584786.753993,0.5m,0,-136,31,671 +1777584786.8101382,0.5m,0,-135,31,670 +1777584786.857495,0.5m,0,-133,31,673 +1777584786.916697,0.5m,0,-135,31,672 +1777584786.9710982,0.5m,0,-134,31,671 +1777584787.022645,0.5m,0,-134,31,672 +1777584787.077992,0.5m,0,-134,31,673 +1777584787.130374,0.5m,0,-135,31,673 +1777584787.178565,0.5m,0,-134,31,672 +1777584787.237886,0.5m,0,-135,31,674 +1777584787.289817,0.5m,0,-135,31,673 +1777584787.3431108,0.5m,0,-134,31,672 +1777584787.3950331,0.5m,0,-133,31,672 +1777584787.451406,0.5m,0,-133,31,673 +1777584787.504224,0.5m,0,-134,31,671 +1777584787.558261,0.5m,0,-134,31,673 +1777584787.612345,0.5m,0,-133,31,672 +1777584787.664233,0.5m,0,-133,31,672 +1777584787.717481,0.5m,0,-133,31,673 +1777584787.772305,0.5m,0,-133,31,672 +1777584787.824115,0.5m,0,-135,31,672 +1777584787.876839,0.5m,0,-133,31,672 +1777584787.930592,0.5m,0,-134,31,670 +1777584787.986613,0.5m,0,-133,31,672 +1777584788.041513,0.5m,0,-133,32,671 +1777584788.09169,0.5m,0,-133,32,673 +1777584788.145174,0.5m,0,-133,32,672 +1777584788.198288,0.5m,0,-135,32,672 +1777584788.255679,0.5m,0,-134,32,672 +1777584788.3095171,0.5m,0,-134,31,670 +1777584788.356883,0.5m,0,-133,31,673 +1777584788.412447,0.5m,0,-134,31,672 +1777584788.468817,0.5m,0,-133,31,673 +1777584788.521326,0.5m,0,-133,31,672 +1777584788.577481,0.5m,0,-135,31,673 +1777584788.627222,0.5m,0,-135,31,671 +1777584788.682805,0.5m,0,-133,31,672 +1777584788.740245,0.5m,0,-135,31,671 +1777584788.788786,0.5m,0,-133,31,672 +1777584788.8432589,0.5m,0,-133,31,671 +1777584788.89858,0.5m,0,-133,32,673 +1777584788.950392,0.5m,0,-133,31,672 +1777584789.003659,0.5m,0,-134,32,672 +1777584789.05554,0.5m,0,-135,32,673 +1777584789.114495,0.5m,0,-133,31,671 +1777584789.164675,0.5m,0,-134,32,672 +1777584789.218333,0.5m,0,-133,31,672 +1777584789.271285,0.5m,0,-133,32,673 +1777584789.323593,0.5m,0,-134,32,676 +1777584789.376378,0.5m,0,-134,31,672 +1777584789.431751,0.5m,0,-133,31,673 +1777584789.486576,0.5m,0,-134,31,674 +1777584789.540807,0.5m,0,-134,32,672 +1777584789.5912588,0.5m,0,-136,32,672 +1777584789.6488588,0.5m,0,-135,31,672 +1777584789.701975,0.5m,0,-135,32,672 +1777584789.755071,0.5m,0,-135,31,673 +1777584789.809111,0.5m,0,-134,32,676 +1777584789.8569758,0.5m,0,-133,31,673 +1777584789.916403,0.5m,0,-134,31,671 +1777584789.9706008,0.5m,0,-134,31,672 +1777584790.021185,0.5m,0,-133,31,673 +1777584790.0755782,0.5m,0,-136,31,674 +1777584790.128286,0.5m,0,-139,31,673 +1777584790.1840682,0.5m,0,-141,31,672 +1777584790.235625,0.5m,0,-144,32,673 +1777584790.289154,0.5m,0,-143,31,672 +1777584790.345278,0.5m,0,-141,31,672 +1777584790.397013,0.5m,0,-138,31,672 +1777584790.44825,0.5m,0,-136,36,672 +1777584790.507968,0.5m,0,-134,36,671 +1777584790.556792,0.5m,0,-173,32,672 +1777584790.616708,0.5m,0,-172,32,672 +1777584790.662744,0.5m,0,-116,33,672 +1777584790.718911,0.5m,0,-144,33,672 +1777584790.77498,0.5m,0,-168,32,672 +1777584790.824426,0.5m,0,-173,32,672 +1777584790.882025,0.5m,0,-175,32,672 +1777584790.9375591,0.5m,0,-176,31,671 +1777584790.988567,0.5m,0,-175,31,674 +1777584798.976178,2.0m,0,-162,348,1961 +1777584799.0319018,2.0m,0,-159,348,1961 +1777584799.086516,2.0m,0,-159,348,1961 +1777584799.14208,2.0m,0,-157,345,1961 +1777584799.192898,2.0m,0,-157,343,1961 +1777584799.248054,2.0m,0,-154,345,1961 +1777584799.306137,2.0m,0,-154,345,1958 +1777584799.354464,2.0m,0,-154,346,1965 +1777584799.410398,2.0m,0,-154,344,1954 +1777584799.461392,2.0m,0,-157,346,1965 +1777584799.516317,2.0m,0,-157,346,1968 +1777584799.57147,2.0m,0,-155,346,1968 +1777584799.6213791,2.0m,0,-154,345,1958 +1777584799.674592,2.0m,0,-154,345,1961 +1777584799.7287848,2.0m,0,-155,346,1968 +1777584799.7864609,2.0m,0,-157,346,1965 +1777584799.8413599,2.0m,0,-154,345,1958 +1777584799.889966,2.0m,0,-155,344,1968 +1777584799.948339,2.0m,0,-154,345,1961 +1777584800.000354,2.0m,0,-155,350,1972 +1777584800.055109,2.0m,0,-154,343,1965 +1777584800.110008,2.0m,0,-154,348,1965 +1777584800.156127,2.0m,0,-152,344,1972 +1777584800.21245,2.0m,0,-155,344,1968 +1777584800.2666261,2.0m,0,-155,349,1968 +1777584800.3206122,2.0m,0,-152,348,1961 +1777584800.380276,2.0m,0,-154,348,1961 +1777584800.4281678,2.0m,0,-152,346,1968 +1777584800.480203,2.0m,0,-149,348,1965 +1777584800.5354428,2.0m,0,-149,343,1965 +1777584800.5867362,2.0m,0,-149,349,1968 +1777584800.643758,2.0m,0,-147,348,1965 +1777584800.696814,2.0m,0,-147,349,1968 +1777584800.749491,2.0m,0,-146,348,1961 +1777584800.80175,2.0m,0,-147,349,1968 +1777584800.8558369,2.0m,0,-149,348,1961 +1777584800.908662,2.0m,0,-152,348,1965 +1777584800.961937,2.0m,0,-149,349,1968 +1777584801.017173,2.0m,0,-149,349,1968 +1777584801.0722408,2.0m,0,-152,344,1968 +1777584801.12159,2.0m,0,-149,346,1968 +1777584801.178545,2.0m,0,-152,343,1961 +1777584801.230446,2.0m,0,-152,349,1968 +1777584801.285303,2.0m,0,-152,349,1968 +1777584801.339935,2.0m,0,-152,343,1961 +1777584801.3877382,2.0m,0,-149,348,1965 +1777584801.4467509,2.0m,0,-149,346,1965 +1777584801.496288,2.0m,0,-152,348,1965 +1777584801.552364,2.0m,0,-152,349,1968 +1777584801.6089442,2.0m,0,-152,348,1961 +1777584801.660774,2.0m,0,-154,348,1965 +1777584801.712079,2.0m,0,-152,348,1961 +1777584801.768961,2.0m,0,-154,342,1958 +1777584801.8204002,2.0m,0,-154,348,1965 +1777584801.8755572,2.0m,0,-154,347,1958 +1777584801.926541,2.0m,0,-154,347,1954 +1777584801.979806,2.0m,0,-152,348,1965 +1777584802.034421,2.0m,0,-155,349,1968 +1777584802.087796,2.0m,0,-152,348,1961 +1777584802.143271,2.0m,0,-152,348,1961 +1777584802.195265,2.0m,0,-152,348,1965 +1777584802.250279,2.0m,0,-152,345,1961 +1777584802.305374,2.0m,0,-152,349,1968 +1777584802.355615,2.0m,0,-154,346,1965 +1777584802.408118,2.0m,0,-152,348,1961 +1777584802.4609542,2.0m,0,-152,348,1965 +1777584802.514868,2.0m,0,-149,345,1961 +1777584802.572622,2.0m,0,-149,349,1968 +1777584802.6210618,2.0m,0,-149,347,1958 +1777584802.676082,2.0m,0,-149,345,1961 +1777584802.73168,2.0m,0,-152,349,1968 +1777584802.78412,2.0m,0,-149,348,1961 +1777584802.83886,2.0m,0,-149,350,1958 +1777584802.887667,2.0m,0,-152,351,1965 +1777584802.9465148,2.0m,0,-149,351,1965 +1777584802.999108,2.0m,0,-149,353,1961 +1777584803.0522501,2.0m,0,-149,350,1961 +1777584803.106913,2.0m,0,-147,354,1968 +1777584803.15814,2.0m,0,-150,352,1972 +1777584803.213449,2.0m,0,-147,353,1975 +1777584803.2735,2.0m,0,-148,354,1979 +1777584803.3216472,2.0m,0,-148,354,1979 +1777584803.372993,2.0m,0,-147,352,1968 +1777584803.4289558,2.0m,0,-148,354,1979 +1777584803.4828649,2.0m,0,-148,354,1979 +1777584803.5383182,2.0m,0,-145,354,1979 +1777584803.586684,2.0m,0,-144,355,1972 +1777584803.642241,2.0m,0,-144,355,1972 +1777584803.695818,2.0m,0,-144,352,1972 +1777584803.750209,2.0m,0,-144,352,1972 +1777584803.805256,2.0m,0,-145,354,1979 +1777584803.856931,2.0m,0,-145,355,1986 +1777584803.914279,2.0m,0,-144,352,1968 +1777584803.973118,2.0m,0,-144,355,1972 +1777584804.020166,2.0m,0,-145,356,1975 +1777584804.079415,2.0m,0,-145,353,1975 +1777584804.12829,2.0m,0,-145,356,1979 +1777584804.181772,2.0m,0,-148,354,1983 +1777584804.2358022,2.0m,0,-147,353,1975 +1777584804.287113,2.0m,0,-153,353,1975 +1777584804.340132,2.0m,0,-153,356,1979 +1777584804.39488,2.0m,0,-150,355,1972 +1777584804.449087,2.0m,0,-150,353,1975 +1777584804.505614,2.0m,0,-153,356,1975 +1777584804.554952,2.0m,0,-153,356,1979 +1777584804.6131158,2.0m,0,-151,354,1983 +1777584804.664236,2.0m,0,-150,350,1975 +1777584804.719483,2.0m,0,-156,356,1979 +1777584804.775402,2.0m,0,-156,358,1986 +1777584804.824217,2.0m,0,-156,352,1983 +1777584804.881152,2.0m,0,-156,352,1983 +1777584804.94117,2.0m,0,-155,356,1975 +1777584804.9871008,2.0m,0,-156,356,1979 +1777584805.04054,2.0m,0,-161,351,1979 +1777584805.099494,2.0m,0,-161,352,1983 +1777584805.152417,2.0m,0,-158,352,1972 +1777584805.2058089,2.0m,0,-156,352,1983 +1777584805.2599812,2.0m,0,-155,344,1972 +1777584805.3128572,2.0m,0,-156,351,1979 +1777584805.3689952,2.0m,0,-158,346,1979 +1777584805.4200718,2.0m,0,-161,348,1979 +1777584805.47472,2.0m,0,-161,348,1975 +1777584805.528073,2.0m,0,-160,349,1968 +1777584805.581367,2.0m,0,-160,349,1968 +1777584805.63846,2.0m,0,-160,350,1972 +1777584805.687265,2.0m,0,-160,350,1972 +1777584805.742054,2.0m,0,-159,348,1961 +1777584805.799375,2.0m,0,-160,348,1965 +1777584805.852801,2.0m,0,-160,349,1968 +1777584805.9082508,2.0m,0,-163,346,1968 +1777584805.954462,2.0m,0,-159,348,1961 +1777584806.012699,2.0m,0,-160,346,1965 +1777584806.0654132,2.0m,0,-162,348,1965 +1777584806.119432,2.0m,0,-162,347,1958 +1777584806.1719491,2.0m,0,-162,349,1954 +1777584806.227658,2.0m,0,-162,348,1961 +1777584806.2806358,2.0m,0,-162,346,1965 +1777584806.3391712,2.0m,0,-157,346,1965 +1777584806.387094,2.0m,0,-159,347,1958 +1777584806.442146,2.0m,0,-159,347,1958 +1777584806.495224,2.0m,0,-159,349,1954 +1777584806.550148,2.0m,0,-159,348,1961 +1777584806.605227,2.0m,0,-159,345,1961 +1777584806.653858,2.0m,0,-159,347,1958 +1777584806.712831,2.0m,0,-157,345,1961 +1777584806.762538,2.0m,0,-160,346,1965 +1777584806.8163998,2.0m,0,-162,344,1954 +1777584806.871742,2.0m,0,-159,345,1958 +1777584806.9210198,2.0m,0,-159,347,1958 +1777584806.975132,2.0m,0,-159,345,1958 +1777584807.030993,2.0m,0,-159,345,1958 +1777584807.0848472,2.0m,0,-159,348,1961 +1777584807.141279,2.0m,0,-157,345,1961 +1777584807.190497,2.0m,0,-159,343,1961 +1777584807.246121,2.0m,0,-154,348,1961 +1777584807.305571,2.0m,0,-154,345,1961 +1777584807.3532438,2.0m,0,-159,347,1958 +1777584807.4049878,2.0m,0,-157,345,1961 +1777584807.462444,2.0m,0,-154,345,1958 +1777584807.517497,2.0m,0,-154,347,1958 +1777584807.573781,2.0m,0,-157,345,1958 +1777584807.6239748,2.0m,0,-154,345,1961 +1777584807.677511,2.0m,0,-154,345,1958 +1777584807.734507,2.0m,0,-154,348,1961 +1777584807.785234,2.0m,0,-154,344,1954 +1777584807.841133,2.0m,0,-154,345,1958 +1777584807.894214,2.0m,0,-154,345,1958 +1777584807.9461372,2.0m,0,-151,344,1954 +1777584808.00444,2.0m,0,-154,345,1961 +1777584808.0541701,2.0m,0,-154,345,1961 +1777584808.1076028,2.0m,0,-160,346,1965 +1777584808.161082,2.0m,0,-157,345,1958 +1777584808.21563,2.0m,0,-154,345,1961 +1777584808.271934,2.0m,0,-154,345,1958 +1777584808.321737,2.0m,0,-154,345,1958 +1777584808.374004,2.0m,0,-154,345,1961 +1777584808.432837,2.0m,0,-154,345,1961 +1777584808.485107,2.0m,0,-154,345,1958 +1777584808.540839,2.0m,0,-154,344,1954 +1777584808.593305,2.0m,0,-154,345,1961 +1777584808.646079,2.0m,0,-157,345,1958 +1777584808.701925,2.0m,0,-154,344,1954 +1777584808.753494,2.0m,0,-154,345,1958 +1777584808.806498,2.0m,0,-154,345,1961 +1777584808.8598258,2.0m,0,-154,344,1954 +1777584808.916489,2.0m,0,-157,345,1958 +1777584808.973429,2.0m,0,-154,345,1961 +1777584809.021678,2.0m,0,-154,345,1961 +1777584809.080481,2.0m,0,-154,342,1958 +1777584809.130469,2.0m,0,-159,344,1954 +1777584809.184693,2.0m,0,-154,344,1954 +1777584809.238965,2.0m,0,-156,344,1954 +1777584809.289768,2.0m,0,-157,348,1961 +1777584809.3420742,2.0m,0,-154,345,1958 +1777584809.401519,2.0m,0,-157,345,1958 +1777584809.452118,2.0m,0,-153,343,1951 +1777584809.507127,2.0m,0,-159,345,1958 +1777584809.5588732,2.0m,0,-156,343,1947 +1777584809.611377,2.0m,0,-159,345,1958 +1777584809.666374,2.0m,0,-157,345,1958 +1777584809.718369,2.0m,0,-159,345,1958 +1777584809.7734022,2.0m,0,-159,345,1958 +1777584809.8222048,2.0m,0,-160,346,1965 +1777584809.8786528,2.0m,0,-159,347,1958 +1777584809.938794,2.0m,0,-159,345,1961 +1777584809.986579,2.0m,0,-160,346,1965 +1777584810.037916,2.0m,0,-158,342,1944 +1777584810.093993,2.0m,0,-159,345,1961 +1777584810.147219,2.0m,0,-156,344,1954 +1777584810.204278,2.0m,0,-162,345,1958 +1777584810.253261,2.0m,0,-159,345,1958 +1777584810.3071308,2.0m,0,-161,343,1951 +1777584810.362085,2.0m,0,-159,347,1958 +1777584810.416003,2.0m,0,-162,345,1958 +1777584810.471296,2.0m,0,-159,344,1954 +1777584810.5198112,2.0m,0,-159,345,1958 +1777584810.5742311,2.0m,0,-159,343,1951 +1777584810.627875,2.0m,0,-159,344,1954 +1777584810.6829178,2.0m,0,-159,345,1958 +1777584810.738587,2.0m,0,-159,344,1954 +1777584810.7870789,2.0m,0,-162,345,1958 +1777584810.845255,2.0m,0,-159,344,1954 +1777584810.899117,2.0m,0,-162,344,1954 +1777584810.951572,2.0m,0,-159,345,1958 +1777584811.006026,2.0m,0,-162,345,1958 +1777584811.055495,2.0m,0,-156,341,1951 +1777584811.1121652,2.0m,0,-159,344,1954 +1777584811.171799,2.0m,0,-159,341,1954 +1777584811.219357,2.0m,0,-159,344,1954 +1777584811.272536,2.0m,0,-159,344,1954 +1777584811.326657,2.0m,0,-162,344,1954 +1777584811.378307,2.0m,0,-159,344,1954 +1777584811.437464,2.0m,0,-159,345,1958 +1777584811.489713,2.0m,0,-158,343,1947 +1777584811.541599,2.0m,0,-159,345,1958 +1777584811.594472,2.0m,0,-159,341,1954 +1777584811.649121,2.0m,0,-159,341,1954 +1777584811.703251,2.0m,0,-159,344,1954 +1777584811.753099,2.0m,0,-157,343,1961 +1777584811.811948,2.0m,0,-158,343,1947 +1777584811.8645902,2.0m,0,-156,344,1954 +1777584811.917753,2.0m,0,-159,345,1958 +1777584811.972487,2.0m,0,-159,345,1958 +1777584812.027688,2.0m,0,-159,344,1954 +1777584812.080343,2.0m,0,-159,343,1951 +1777584812.1331809,2.0m,0,-159,344,1954 +1777584812.185931,2.0m,0,-159,341,1954 +1777584812.241438,2.0m,0,-159,344,1954 +1777584812.292862,2.0m,0,-157,345,1958 +1777584812.345064,2.0m,0,-159,345,1958 +1777584812.399986,2.0m,0,-159,344,1954 +1777584812.451911,2.0m,0,-159,344,1954 +1777584812.508588,2.0m,0,-156,344,1954 +1777584812.559409,2.0m,0,-159,343,1951 +1777584812.611845,2.0m,0,-158,343,1947 +1777584812.666657,2.0m,0,-158,343,1947 +1777584812.718102,2.0m,0,-156,343,1947 +1777584812.772222,2.0m,0,-156,343,1951 +1777584812.8271391,2.0m,0,-156,341,1951 +1777584812.879086,2.0m,0,-159,343,1951 +1777584812.933147,2.0m,0,-159,343,1951 +1777584812.986777,2.0m,0,-156,343,1947 +1777584813.039228,2.0m,0,-156,341,1951 +1777584813.092872,2.0m,0,-158,340,1947 +1777584813.148747,2.0m,0,-156,341,1951 +1777584813.204949,2.0m,0,-155,341,1940 +1777584813.253215,2.0m,0,-158,343,1947 +1777584813.306828,2.0m,0,-158,339,1944 +1777584813.3610072,2.0m,0,-158,341,1940 +1777584813.416647,2.0m,0,-158,339,1944 +1777584813.4716291,2.0m,0,-158,339,1944 +1777584813.522793,2.0m,0,-158,341,1940 +1777584813.573992,2.0m,0,-157,341,1937 +1777584813.634451,2.0m,0,-158,342,1944 +1777584813.684489,2.0m,0,-157,341,1937 +1777584813.7395551,2.0m,0,-158,342,1944 +1777584813.792306,2.0m,0,-160,339,1940 +1777584813.844821,2.0m,0,-158,339,1940 +1777584813.9013178,2.0m,0,-163,336,1940 +1777584813.952239,2.0m,0,-163,341,1940 +1777584814.005044,2.0m,0,-163,339,1940 +1777584814.060163,2.0m,0,-162,340,1933 +1777584814.11433,2.0m,0,-162,338,1933 +1777584814.170464,2.0m,0,-163,341,1937 +1777584814.21906,2.0m,0,-163,341,1937 +1777584814.273576,2.0m,0,-163,338,1937 +1777584814.328761,2.0m,0,-162,334,1930 +1777584814.3808699,2.0m,0,-162,340,1933 +1777584814.433471,2.0m,0,-162,340,1933 +1777584814.484661,2.0m,0,-162,338,1933 +1777584814.5387719,2.0m,0,-162,340,1930 +1777584814.5940769,2.0m,0,-162,340,1930 +1777584814.644423,2.0m,0,-162,340,1930 +1777584814.705602,2.0m,0,-162,340,1930 +1777584814.7572448,2.0m,0,-162,340,1930 +1777584814.811834,2.0m,0,-162,336,1926 +1777584814.8666298,2.0m,0,-157,341,1937 +1777584814.918219,2.0m,0,-157,337,1930 +1777584814.978177,2.0m,0,-157,335,1933 +1777584815.0260322,2.0m,0,-157,337,1930 +1777584815.080569,2.0m,0,-157,338,1933 +1777584815.139332,2.0m,0,-157,339,1926 +1777584815.1867032,2.0m,0,-157,338,1933 +1777584815.238792,2.0m,0,-157,337,1930 +1777584815.294369,2.0m,0,-158,341,1940 +1777584815.3481212,2.0m,0,-157,341,1937 +1777584815.40424,2.0m,0,-157,338,1937 +1777584815.452233,2.0m,0,-157,341,1937 +1777584815.5074172,2.0m,0,-157,338,1937 +1777584815.559792,2.0m,0,-157,341,1937 +1777584815.615478,2.0m,0,-155,340,1933 +1777584815.669823,2.0m,0,-158,339,1940 +1777584815.7181592,2.0m,0,-157,341,1937 +1777584815.7731571,2.0m,0,-155,339,1940 +1777584815.826905,2.0m,0,-158,339,1940 +1777584815.882329,2.0m,0,-155,340,1933 +1777584815.9368808,2.0m,0,-157,338,1937 +1777584815.98719,2.0m,0,-158,341,1940 +1777584816.0445771,2.0m,0,-157,338,1937 +1777584816.0981162,2.0m,0,-157,341,1937 +1777584816.15032,2.0m,0,-157,338,1933 +1777584816.206209,2.0m,0,-157,340,1933 +1777584816.257021,2.0m,0,-158,339,1940 +1777584816.3113658,2.0m,0,-157,340,1933 +1777584816.366623,2.0m,0,-158,339,1940 +1777584816.419926,2.0m,0,-160,340,1933 +1777584816.473449,2.0m,0,-158,342,1944 +1777584816.529601,2.0m,0,-158,339,1940 +1777584816.584337,2.0m,0,-157,338,1933 +1777584816.640769,2.0m,0,-158,339,1940 +1777584816.69153,2.0m,0,-160,341,1940 +1777584816.744545,2.0m,0,-161,342,1944 +1777584816.800413,2.0m,0,-163,341,1940 +1777584816.8508182,2.0m,0,-160,341,1940 +1777584816.905309,2.0m,0,-163,341,1940 +1777584816.9614348,2.0m,0,-163,342,1944 +1777584817.014134,2.0m,0,-163,341,1940 +1777584817.0700428,2.0m,0,-163,341,1937 +1777584817.118651,2.0m,0,-163,341,1940 +1777584817.17309,2.0m,0,-163,339,1944 +1777584817.227461,2.0m,0,-163,341,1940 +1777584817.282075,2.0m,0,-163,341,1940 +1777584817.34023,2.0m,0,-163,341,1937 +1777584817.390134,2.0m,0,-166,339,1944 +1777584817.444198,2.0m,0,-163,341,1940 +1777584817.499846,2.0m,0,-164,343,1947 +1777584817.551302,2.0m,0,-166,339,1944 +1777584817.6064918,2.0m,0,-166,341,1951 +1777584817.660535,2.0m,0,-164,340,1947 +1777584817.714143,2.0m,0,-166,339,1944 +1777584817.768146,2.0m,0,-163,342,1944 +1777584817.819456,2.0m,0,-163,339,1944 +1777584817.8773592,2.0m,0,-163,339,1944 +1777584817.928406,2.0m,0,-163,339,1944 +1777584817.98398,2.0m,0,-163,339,1944 +1777584818.0391748,2.0m,0,-166,341,1940 +1777584818.08993,2.0m,0,-166,342,1944 +1777584818.140726,2.0m,0,-166,342,1944 +1777584818.197887,2.0m,0,-160,341,1940 +1777584818.2508092,2.0m,0,-161,342,1944 +1777584818.306493,2.0m,0,-160,341,1940 +1777584818.354074,2.0m,0,-163,341,1940 +1777584818.4085078,2.0m,0,-160,339,1940 +1777584818.4690711,2.0m,0,-161,343,1947 +1777584818.5178041,2.0m,0,-161,339,1944 +1777584818.572711,2.0m,0,-158,343,1947 +1777584818.6251168,2.0m,0,-161,339,1944 +1777584818.679286,2.0m,0,-161,340,1947 +1777584818.7369988,2.0m,0,-161,343,1947 +1777584818.784462,2.0m,0,-161,343,1947 +1777584818.839125,2.0m,0,-158,342,1944 +1777584818.893216,2.0m,0,-161,340,1947 +1777584818.947103,2.0m,0,-161,342,1944 +1777584819.003631,2.0m,0,-157,341,1937 +1777584819.0536351,2.0m,0,-158,339,1944 +1777584819.108886,2.0m,0,-158,342,1944 +1777584819.1603498,2.0m,0,-158,339,1944 +1777584819.21909,2.0m,0,-161,342,1944 +1777584819.2710578,2.0m,0,-158,339,1944 +1777584819.320541,2.0m,0,-160,339,1940 +1777584819.3774002,2.0m,0,-161,343,1947 +1777584819.4380941,2.0m,0,-161,340,1947 +1777584819.4834921,2.0m,0,-161,341,1951 +1777584819.5370262,2.0m,0,-164,340,1947 +1777584819.590053,2.0m,0,-166,339,1944 +1777584819.6439118,2.0m,0,-166,341,1951 +1777584819.699931,2.0m,0,-164,340,1947 +1777584819.7496378,2.0m,0,-166,340,1947 +1777584819.804906,2.0m,0,-166,342,1944 +1777584819.854379,2.0m,0,-169,343,1951 +1777584819.912427,2.0m,0,-168,341,1937 +1777584819.97003,2.0m,0,-168,342,1944 +1777584820.0186439,2.0m,0,-171,343,1947 +1777584820.070424,2.0m,0,-175,344,1954 +1777584820.1279511,2.0m,0,-174,343,1947 +1777584820.183182,2.0m,0,-173,344,1940 +1777584820.2374132,2.0m,0,-174,342,1944 +1777584820.2863848,2.0m,0,-174,343,1947 +1777584820.34202,2.0m,0,-174,345,1944 +1777584820.3959522,2.0m,0,-174,342,1944 +1777584820.449999,2.0m,0,-171,341,1940 +1777584820.505744,2.0m,0,-171,343,1947 +1777584820.55842,2.0m,0,-173,347,1940 +1777584820.6110249,2.0m,0,-168,342,1944 +1777584820.668035,2.0m,0,-173,341,1940 +1777584820.716651,2.0m,0,-174,343,1947 +1777584820.771436,2.0m,0,-174,342,1944 +1777584820.826236,2.0m,0,-171,339,1940 +1777584820.8796952,2.0m,0,-174,343,1947 +1777584820.93693,2.0m,0,-174,343,1951 +1777584820.985976,2.0m,0,-174,340,1947 +1777584821.044956,2.0m,0,-171,341,1940 +1777584821.096736,2.0m,0,-174,342,1944 +1777584821.149945,2.0m,0,-174,342,1944 +1777584821.206183,2.0m,0,-174,342,1944 +1777584821.258454,2.0m,0,-173,341,1940 +1777584821.310765,2.0m,0,-174,339,1944 +1777584821.369879,2.0m,0,-179,339,1940 +1777584821.4187331,2.0m,0,-176,337,1944 +1777584821.472991,2.0m,0,-176,336,1937 +1777584821.527663,2.0m,0,-179,339,1944 +1777584821.5822442,2.0m,0,-196,357,1926 +1777584821.637543,2.0m,0,-231,398,1923 +1777584821.6861079,2.0m,0,-227,421,1909 +1777584821.7402618,2.0m,0,-228,477,1876 +1777584821.796366,2.0m,0,-232,501,1863 +1777584821.849995,2.0m,0,-183,588,1851 +1777584821.905969,2.0m,0,-176,636,1832 +1777584821.9577842,2.0m,0,-152,673,1838 +1777584822.010422,2.0m,0,-128,725,1820 +1777584822.065115,2.0m,0,-97,749,1826 +1777584822.119009,2.0m,0,-194,762,1793 +1777584822.171586,2.0m,0,0,0,0 +1777584822.226274,2.0m,0,0,0,0 +1777584822.280361,2.0m,0,0,0,0 +1777584822.336731,2.0m,0,0,0,0 +1777584822.385938,2.0m,0,-150,616,1390 +1777584822.443136,2.0m,0,0,0,0 +1777584822.496385,2.0m,0,-372,1909,4287 +1777584822.548223,2.0m,0,-101,657,1458 +1777584823.19211,2.0m,0,18,936,2384 +1777584823.247315,2.0m,0,73,884,2415 +1777584823.302185,2.0m,0,100,915,2607 +1777584823.350789,2.0m,0,-86,856,2620 +1777584823.406139,2.0m,0,-172,811,2588 +1777584823.460309,2.0m,0,-245,805,2626 +1777584823.515142,2.0m,0,-449,752,2576 +1777584823.570189,2.0m,0,-505,719,2546 +1777584823.619143,2.0m,0,-524,532,2588 +1777584823.6777751,2.0m,0,-457,670,2505 +1777584823.730809,2.0m,0,-502,582,2564 +1777584823.783803,2.0m,0,-312,460,1851 +1777584823.843458,2.0m,0,-283,449,1749 diff --git a/documentation/accuracy/accuracy_log_2026-05-07.csv b/documentation/accuracy/accuracy_log_2026-05-07.csv new file mode 100644 index 0000000..9c9bfa1 --- /dev/null +++ b/documentation/accuracy/accuracy_log_2026-05-07.csv @@ -0,0 +1,841 @@ +timestamp,test_distance,target_id,x_mm,y_mm,z_mm +1777927757.421504,0.5m,0,-80,5,528 +1777927757.474611,0.5m,0,-80,5,527 +1777927757.5312269,0.5m,0,-80,5,527 +1777927757.587393,0.5m,0,-81,5,530 +1777927757.638231,0.5m,0,-80,5,529 +1777927757.692152,0.5m,0,-81,5,528 +1777927757.747607,0.5m,0,-81,5,528 +1777927757.798514,0.5m,0,-80,5,527 +1777927757.854979,0.5m,0,-80,5,528 +1777927757.907249,0.5m,0,-79,5,525 +1777927757.964525,0.5m,0,-80,5,529 +1777927758.01958,0.5m,0,-81,5,530 +1777927758.066565,0.5m,0,-80,5,530 +1777927758.122171,0.5m,0,-80,5,529 +1777927758.177431,0.5m,0,-80,5,529 +1777927758.23169,0.5m,0,-80,5,527 +1777927758.2870011,0.5m,0,-79,5,525 +1777927758.335659,0.5m,0,-80,5,528 +1777927758.387723,0.5m,0,-80,5,526 +1777927758.44861,0.5m,0,-80,5,528 +1777927758.498871,0.5m,0,-80,5,525 +1777927758.553525,0.5m,0,-79,5,525 +1777927758.6045609,0.5m,0,-80,5,527 +1777927758.6587882,0.5m,0,-80,5,526 +1777927758.714358,0.5m,0,-80,5,530 +1777927758.7659252,0.5m,0,-80,5,527 +1777927758.819177,0.5m,0,-79,5,523 +1777927758.87259,0.5m,0,-81,5,529 +1777927758.925929,0.5m,0,-79,5,521 +1777927758.981504,0.5m,0,-80,5,531 +1777927759.032594,0.5m,0,-80,5,529 +1777927759.08574,0.5m,0,-80,5,531 +1777927759.139617,0.5m,0,-80,5,528 +1777927759.1952698,0.5m,0,-80,5,528 +1777927759.2478662,0.5m,0,-79,5,525 +1777927759.3003578,0.5m,0,-80,5,527 +1777927759.3527849,0.5m,0,-81,5,528 +1777927759.4074361,0.5m,0,-80,5,529 +1777927759.461015,0.5m,0,-81,5,530 +1777927759.517388,0.5m,0,-81,5,532 +1777927759.56572,0.5m,0,-80,5,527 +1777927759.620959,0.5m,0,-79,5,525 +1777927759.672954,0.5m,0,-80,5,529 +1777927759.729044,0.5m,0,-80,5,527 +1777927759.784393,0.5m,0,-80,5,530 +1777927759.8327732,0.5m,0,-80,5,528 +1777927759.887541,0.5m,0,-81,5,529 +1777927759.9406762,0.5m,0,-81,5,528 +1777927759.9952362,0.5m,0,-80,5,526 +1777927760.051321,0.5m,0,-81,5,528 +1777927760.099413,0.5m,0,-81,5,530 +1777927760.156849,0.5m,0,-80,6,528 +1777927760.211572,0.5m,0,-81,5,533 +1777927760.2650418,0.5m,0,-80,5,530 +1777927760.31937,0.5m,0,-80,5,529 +1777927760.3704472,0.5m,0,-81,5,529 +1777927760.425208,0.5m,0,-80,5,530 +1777927760.4804292,0.5m,0,-80,4,528 +1777927760.531465,0.5m,0,-78,4,527 +1777927760.586671,0.5m,0,-80,5,529 +1777927760.639162,0.5m,0,-79,5,531 +1777927760.693821,0.5m,0,-78,5,528 +1777927760.750129,0.5m,0,-79,5,530 +1777927760.799648,0.5m,0,-78,5,528 +1777927760.8517592,0.5m,0,-79,5,529 +1777927760.905617,0.5m,0,-78,5,526 +1777927760.961184,0.5m,0,-78,5,527 +1777927761.018029,0.5m,0,-78,5,528 +1777927761.067363,0.5m,0,-78,4,529 +1777927761.12001,0.5m,0,-78,5,529 +1777927761.174952,0.5m,0,-78,5,527 +1777927761.2317371,0.5m,0,-77,5,526 +1777927761.28615,0.5m,0,-77,5,526 +1777927761.3356102,0.5m,0,-77,4,525 +1777927761.386622,0.5m,0,-77,6,526 +1777927761.449087,0.5m,0,-77,6,528 +1777927761.497398,0.5m,0,-77,6,522 +1777927761.5497768,0.5m,0,-78,6,528 +1777927761.605555,0.5m,0,-78,5,527 +1777927761.6564329,0.5m,0,-77,6,526 +1777927761.712659,0.5m,0,-78,5,528 +1777927761.7644439,0.5m,0,-77,5,525 +1777927761.81887,0.5m,0,-77,6,525 +1777927761.868573,0.5m,0,-77,5,524 +1777927761.921449,0.5m,0,-77,6,526 +1777927761.981853,0.5m,0,-76,5,518 +1777927762.032084,0.5m,0,-77,5,525 +1777927762.083022,0.5m,0,-77,6,526 +1777927762.140597,0.5m,0,-78,5,528 +1777927762.194147,0.5m,0,-77,5,526 +1777927762.250731,0.5m,0,-77,5,526 +1777927762.299414,0.5m,0,-77,5,525 +1777927762.352108,0.5m,0,-78,5,528 +1777927762.406021,0.5m,0,-78,6,529 +1777927762.457713,0.5m,0,-78,6,525 +1777927762.5275662,0.5m,0,-78,5,527 +1777927762.5662348,0.5m,0,-79,5,528 +1777927762.6185899,0.5m,0,-79,5,530 +1777927762.674457,0.5m,0,-80,5,527 +1777927762.728039,0.5m,0,-79,5,528 +1777927762.783166,0.5m,0,-80,5,533 +1777927762.832778,0.5m,0,-80,5,533 +1777927762.886053,0.5m,0,-80,5,532 +1777927762.940767,0.5m,0,-78,5,527 +1777927762.99722,0.5m,0,-78,6,530 +1777927763.0503192,0.5m,0,-77,6,523 +1777927763.09846,0.5m,0,-78,5,527 +1777927763.153041,0.5m,0,-78,7,528 +1777927763.208064,0.5m,0,-78,6,527 +1777927763.262989,0.5m,0,-77,6,530 +1777927763.318937,0.5m,0,-78,6,530 +1777927763.36848,0.5m,0,-77,6,527 +1777927763.426301,0.5m,0,-78,6,529 +1777927763.483829,0.5m,0,-78,6,528 +1777927763.531494,0.5m,0,-78,6,527 +1777927763.584577,0.5m,0,-77,6,525 +1777927763.639822,0.5m,0,-77,5,525 +1777927763.692681,0.5m,0,-77,6,526 +1777927763.750025,0.5m,0,-78,6,529 +1777927763.7984262,0.5m,0,-77,6,526 +1777927763.8523772,0.5m,0,-77,6,525 +1777927763.907027,0.5m,0,-77,6,525 +1777927763.958751,0.5m,0,-78,6,527 +1777927764.0167959,0.5m,0,-77,6,523 +1777927764.0660632,0.5m,0,-77,7,525 +1777927764.1197371,0.5m,0,-77,5,525 +1777927764.173683,0.5m,0,-77,7,525 +1777927764.230345,0.5m,0,-77,7,525 +1777927764.282478,0.5m,0,-77,6,526 +1777927764.331823,0.5m,0,-77,6,526 +1777927764.386772,0.5m,0,-77,5,526 +1777927764.441113,0.5m,0,-77,7,525 +1777927764.496852,0.5m,0,-77,6,525 +1777927764.5518231,0.5m,0,-78,6,526 +1777927764.6030989,0.5m,0,-78,6,528 +1777927764.652591,0.5m,0,-80,6,526 +1777927764.714837,0.5m,0,-78,6,525 +1777927764.763375,0.5m,0,-78,7,523 +1777927764.818756,0.5m,0,-78,7,524 +1777927764.870076,0.5m,0,-78,7,523 +1777927764.924308,0.5m,0,-78,7,522 +1777927764.98316,0.5m,0,-78,7,525 +1777927765.030984,0.5m,0,-80,7,528 +1777927765.0833101,0.5m,0,-78,7,529 +1777927765.1384692,0.5m,0,-78,6,528 +1777927765.1953259,0.5m,0,-78,7,528 +1777927765.2501829,0.5m,0,-77,7,520 +1777927765.299705,0.5m,0,-78,5,526 +1777927765.352465,0.5m,0,-78,7,526 +1777927765.409524,0.5m,0,-77,6,526 +1777927765.463617,0.5m,0,-78,6,527 +1777927765.52021,0.5m,0,-78,6,525 +1777927765.56941,0.5m,0,-78,6,526 +1777927765.623945,0.5m,0,-78,6,528 +1777927765.6790028,0.5m,0,-80,6,526 +1777927765.73051,0.5m,0,-80,6,529 +1777927765.785332,0.5m,0,-79,6,529 +1777927765.8346372,0.5m,0,-78,6,528 +1777927765.889218,0.5m,0,-78,6,528 +1777927765.949504,0.5m,0,-78,6,526 +1777927765.997343,0.5m,0,-78,7,525 +1777927766.0513139,0.5m,0,-77,6,526 +1777927766.103646,0.5m,0,-78,7,528 +1777927766.157832,0.5m,0,-78,6,528 +1777927766.215998,0.5m,0,-78,6,528 +1777927766.264873,0.5m,0,-78,6,527 +1777927766.319812,0.5m,0,-78,5,528 +1777927766.372759,0.5m,0,-78,7,528 +1777927766.429193,0.5m,0,-77,6,524 +1777927766.4852412,0.5m,0,-78,7,528 +1777927766.534789,0.5m,0,-77,7,526 +1777927766.58544,0.5m,0,-78,6,527 +1777927766.645167,0.5m,0,-77,7,524 +1777927766.696712,0.5m,0,-77,6,525 +1777927766.750336,0.5m,0,-78,7,527 +1777927766.806184,0.5m,0,-77,7,525 +1777927766.859122,0.5m,0,-78,6,529 +1777927766.9162922,0.5m,0,-77,7,526 +1777927766.966092,0.5m,0,-77,7,525 +1777927767.0186088,0.5m,0,-78,7,527 +1777927767.072316,0.5m,0,-77,7,525 +1777927767.127717,0.5m,0,-77,7,526 +1777927767.182818,0.5m,0,-78,7,527 +1777927767.230978,0.5m,0,-77,6,526 +1777927767.287242,0.5m,0,-77,6,524 +1777927767.344631,0.5m,0,-77,6,522 +1777927767.396651,0.5m,0,-77,7,525 +1777927767.451818,0.5m,0,-78,7,528 +1777927767.50474,0.5m,0,-77,6,525 +1777927767.556652,0.5m,0,-78,7,529 +1777927767.612375,0.5m,0,-78,6,527 +1777927767.664656,0.5m,0,-78,7,529 +1777927767.72041,0.5m,0,-78,7,529 +1777927767.7708359,0.5m,0,-78,7,529 +1777927767.824825,0.5m,0,-78,8,528 +1777927767.8782852,0.5m,0,-78,8,528 +1777927767.929773,0.5m,0,-77,7,523 +1777927767.985931,0.5m,0,-78,7,529 +1777927768.037482,0.5m,0,-78,7,525 +1777927768.090993,0.5m,0,-78,7,529 +1777927768.149272,0.5m,0,-78,6,527 +1777927768.200146,0.5m,0,-77,8,524 +1777927768.253033,0.5m,0,-78,6,527 +1777927768.313604,0.5m,0,-78,7,528 +1777927768.362947,0.5m,0,-77,6,525 +1777927768.4150798,0.5m,0,-78,7,525 +1777927768.472233,0.5m,0,-77,7,526 +1777927768.5221388,0.5m,0,-78,6,528 +1777927768.578337,0.5m,0,-79,6,529 +1777927768.630501,0.5m,0,-78,7,525 +1777927768.68589,0.5m,0,-78,7,528 +1777927768.737715,0.5m,0,-78,7,529 +1777927768.791392,0.5m,0,-79,6,531 +1777927768.847998,0.5m,0,-79,7,529 +1777927768.897148,0.5m,0,-79,7,529 +1777927768.9579918,0.5m,0,-78,7,528 +1777927769.007259,0.5m,0,-78,6,528 +1777927769.059632,0.5m,0,-78,7,527 +1777927769.1144729,0.5m,0,-78,7,528 +1777927769.164659,0.5m,0,-78,6,528 +1777927769.221056,0.5m,0,-78,7,530 +1777927769.2717571,0.5m,0,-78,7,526 +1777927769.3243399,0.5m,0,-78,7,526 +1777927769.380043,0.5m,0,-79,8,531 +1777927769.4316301,0.5m,0,-78,7,530 +1777927769.486868,0.5m,0,-78,7,526 +1777927769.5378308,0.5m,0,-79,8,530 +1777927769.594387,0.5m,0,-78,7,530 +1777927769.6474729,0.5m,0,-77,8,526 +1777927769.698236,0.5m,0,-78,7,528 +1777927769.758144,0.5m,0,-79,8,530 +1777927769.805975,0.5m,0,-78,8,530 +1777927769.8609438,0.5m,0,-78,8,526 +1777927769.919671,0.5m,0,-78,8,532 +1777927769.9666,0.5m,0,-77,7,525 +1777927770.0254989,0.5m,0,-78,7,528 +1777927770.073964,0.5m,0,-78,8,526 +1777927770.1283379,0.5m,0,-78,7,531 +1777927770.182954,0.5m,0,-78,7,527 +1777927770.231752,0.5m,0,-77,6,526 +1777927770.290922,0.5m,0,-78,8,527 +1777927770.344026,0.5m,0,-78,7,532 +1777927770.397634,0.5m,0,-77,8,525 +1777927770.453449,0.5m,0,-78,8,532 +1777927770.5010529,0.5m,0,-78,8,528 +1777927770.559838,0.5m,0,-78,8,527 +1777927770.615135,0.5m,0,-78,8,528 +1777927770.664553,0.5m,0,-78,8,524 +1777927770.721378,0.5m,0,-78,8,531 +1777927770.774122,0.5m,0,-77,7,525 +1777927770.827042,0.5m,0,-78,7,531 +1777927770.881057,0.5m,0,-78,8,530 +1777927770.932433,0.5m,0,-78,8,528 +1777927770.986614,0.5m,0,-78,8,532 +1777927771.041194,0.5m,0,-79,7,529 +1777927771.0970109,0.5m,0,-78,8,530 +1777927771.151107,0.5m,0,-78,8,530 +1777927771.200872,0.5m,0,-79,8,532 +1777927771.25669,0.5m,0,-78,7,527 +1777927771.3098161,0.5m,0,-78,8,527 +1777927771.364628,0.5m,0,-78,7,528 +1777927771.421223,0.5m,0,-78,8,532 +1777927771.470498,0.5m,0,-78,8,529 +1777927771.524683,0.5m,0,-78,8,527 +1777927771.5801961,0.5m,0,-78,8,528 +1777927771.63248,0.5m,0,-78,8,528 +1777927771.690148,0.5m,0,-78,7,533 +1777927771.73959,0.5m,0,-77,7,525 +1777927771.7960598,0.5m,0,-78,8,528 +1777927771.8477912,0.5m,0,-78,8,532 +1777927771.900352,0.5m,0,-79,7,530 +1777927771.953964,0.5m,0,-79,7,530 +1777927772.006408,0.5m,0,-78,7,531 +1777927772.064163,0.5m,0,-79,8,531 +1777927772.115829,0.5m,0,-78,7,533 +1777927772.168103,0.5m,0,-78,8,532 +1777927772.221502,0.5m,0,-78,8,529 +1777927772.275352,0.5m,0,-77,8,526 +1777927772.3313081,0.5m,0,-79,7,531 +1777927772.384806,0.5m,0,-78,7,529 +1777927885.2976909,1.0m,2,355,308,1069 +1777927885.3516319,1.0m,2,352,309,1073 +1777927885.403924,1.0m,2,347,310,1076 +1777927885.456853,1.0m,2,347,311,1075 +1777927885.515191,1.0m,2,350,310,1076 +1777927885.5653079,1.0m,2,348,312,1080 +1777927885.620126,1.0m,2,340,312,1080 +1777927885.67611,1.0m,2,344,311,1076 +1777927885.724285,1.0m,2,353,311,1080 +1777927885.78301,1.0m,2,351,309,1075 +1777927885.836169,1.0m,2,348,312,1078 +1777927885.8920739,1.0m,2,353,312,1080 +1777927885.947009,1.0m,2,355,312,1078 +1777927885.9957561,1.0m,2,353,311,1076 +1777927886.048408,1.0m,2,351,309,1070 +1777927886.1040761,1.0m,2,350,311,1076 +1777927886.156482,1.0m,2,349,313,1082 +1777927886.21062,1.0m,2,349,313,1081 +1777927886.263653,1.0m,2,347,311,1076 +1777927886.31806,1.0m,2,348,311,1076 +1777927886.3716621,1.0m,2,343,312,1078 +1777927886.423598,1.0m,2,350,311,1075 +1777927886.481438,1.0m,2,343,311,1077 +1777927886.537062,1.0m,2,346,311,1076 +1777927886.588948,1.0m,2,338,312,1079 +1777927886.642408,1.0m,2,344,309,1070 +1777927886.694433,1.0m,2,347,311,1077 +1777927886.748265,1.0m,2,341,312,1079 +1777927886.808824,1.0m,2,348,312,1078 +1777927886.856565,1.0m,2,342,310,1074 +1777927886.908586,1.0m,2,348,310,1074 +1777927886.96316,1.0m,2,344,312,1079 +1777927887.019617,1.0m,2,339,312,1078 +1777927887.082031,1.0m,2,352,312,1079 +1777927887.12448,1.0m,2,341,311,1075 +1777927887.178496,1.0m,2,347,312,1075 +1777927887.237922,1.0m,2,350,312,1079 +1777927887.288414,1.0m,2,347,311,1075 +1777927887.3446,1.0m,2,347,311,1076 +1777927887.398164,1.0m,2,336,310,1073 +1777927887.451165,1.0m,2,349,312,1078 +1777927887.510006,1.0m,2,348,312,1080 +1777927887.5557609,1.0m,2,336,312,1078 +1777927887.614808,1.0m,2,345,312,1078 +1777927887.66528,1.0m,2,341,310,1072 +1777927887.7199109,1.0m,2,341,311,1076 +1777927887.7757702,1.0m,2,340,312,1078 +1777927887.8226938,1.0m,2,338,311,1076 +1777927887.877866,1.0m,2,336,311,1077 +1777927887.9326222,1.0m,2,347,311,1075 +1777927887.9871302,1.0m,2,346,310,1072 +1777927888.043124,1.0m,2,338,310,1074 +1777927888.090549,1.0m,2,334,310,1073 +1777927888.1476429,1.0m,2,343,310,1072 +1777927888.200525,1.0m,2,341,311,1075 +1777927888.2546072,1.0m,2,340,312,1078 +1777927888.308953,1.0m,2,339,310,1078 +1777927888.360117,1.0m,2,343,311,1076 +1777927888.416959,1.0m,2,338,312,1079 +1777927888.471012,1.0m,2,341,313,1081 +1777927888.524512,1.0m,2,338,312,1079 +1777927888.577523,1.0m,2,346,310,1072 +1777927888.6300118,1.0m,2,345,310,1071 +1777927888.682265,1.0m,2,339,311,1077 +1777927888.7384388,1.0m,2,336,309,1070 +1777927888.788678,1.0m,2,334,311,1076 +1777927888.846148,1.0m,2,335,311,1075 +1777927888.902348,1.0m,2,340,310,1072 +1777927888.9564512,1.0m,2,335,312,1080 +1777927889.016587,1.0m,2,333,312,1078 +1777927889.065034,1.0m,2,342,311,1075 +1777927889.116692,1.0m,2,333,311,1077 +1777927889.169423,1.0m,2,340,311,1077 +1777927889.222611,1.0m,2,343,310,1073 +1777927889.2769542,1.0m,2,341,310,1071 +1777927889.334864,1.0m,2,342,310,1073 +1777927889.388588,1.0m,2,338,312,1078 +1777927889.4429739,1.0m,2,336,313,1081 +1777927889.492827,1.0m,2,345,312,1079 +1777927889.548038,1.0m,2,344,311,1076 +1777927889.608223,1.0m,2,338,312,1078 +1777927889.656916,1.0m,2,338,312,1079 +1777927889.7087958,1.0m,2,336,313,1083 +1777927889.765001,1.0m,2,335,311,1076 +1777927889.817877,1.0m,2,340,311,1077 +1777927889.874465,1.0m,2,337,312,1080 +1777927889.9229171,1.0m,2,341,311,1075 +1777927889.981193,1.0m,2,337,311,1075 +1777927890.031929,1.0m,2,344,311,1076 +1777927890.086072,1.0m,2,340,312,1078 +1777927890.141483,1.0m,2,347,313,1083 +1777927890.190718,1.0m,2,343,311,1076 +1777927890.243923,1.0m,2,344,311,1075 +1777927890.297915,1.0m,2,342,312,1079 +1777927890.354442,1.0m,2,345,312,1078 +1777927890.4099898,1.0m,2,339,311,1077 +1777927890.458693,1.0m,2,343,311,1076 +1777927890.515511,1.0m,2,341,312,1080 +1777927890.573644,1.0m,2,343,312,1080 +1777927890.620865,1.0m,2,342,311,1075 +1777927890.6753511,1.0m,2,336,313,1081 +1777927890.7286441,1.0m,2,339,313,1081 +1777927890.7815151,1.0m,2,344,311,1077 +1777927890.838368,1.0m,2,335,313,1082 +1777927890.88914,1.0m,2,339,312,1079 +1777927890.942444,1.0m,2,342,312,1078 +1777927890.997484,1.0m,2,347,311,1075 +1777927891.049767,1.0m,2,344,310,1072 +1777927891.108394,1.0m,2,336,310,1072 +1777927891.1566541,1.0m,2,340,310,1073 +1777927891.2098439,1.0m,2,341,310,1072 +1777927891.263942,1.0m,2,344,312,1080 +1777927891.317861,1.0m,2,345,311,1075 +1777927891.376075,1.0m,2,343,311,1076 +1777927891.423299,1.0m,2,337,311,1075 +1777927891.4811242,1.0m,2,341,310,1074 +1777927891.533608,1.0m,2,342,309,1073 +1777927891.5894341,1.0m,2,340,311,1071 +1777927891.647202,1.0m,2,340,311,1077 +1777927891.695841,1.0m,2,342,311,1075 +1777927891.7586272,1.0m,2,345,314,1087 +1777927891.823036,1.0m,2,338,315,1089 +1777927891.8563251,1.0m,2,341,311,1076 +1777927891.9089642,1.0m,2,343,310,1072 +1777927891.963722,1.0m,2,343,312,1078 +1777927892.0199769,1.0m,2,335,311,1076 +1777927892.0755358,1.0m,2,341,310,1072 +1777927892.1250172,1.0m,2,338,314,1086 +1777927892.182354,1.0m,2,341,312,1079 +1777927892.2331111,1.0m,2,343,312,1078 +1777927892.2878778,1.0m,2,338,313,1083 +1777927892.343693,1.0m,2,340,311,1077 +1777927892.391156,1.0m,2,333,311,1077 +1777927892.448225,1.0m,2,341,311,1076 +1777927892.500749,1.0m,2,337,310,1073 +1777927892.553809,1.0m,2,338,311,1075 +1777927892.612811,1.0m,2,342,311,1075 +1777927892.6623008,1.0m,2,335,311,1076 +1777927892.7155042,1.0m,2,339,313,1082 +1777927892.7704651,1.0m,2,345,315,1088 +1777927892.8220851,1.0m,2,339,315,1089 +1777927892.876719,1.0m,2,340,313,1082 +1777927892.9294772,1.0m,2,344,311,1075 +1777927892.9849741,1.0m,2,338,312,1080 +1777927893.0410721,1.0m,2,336,312,1078 +1777927893.089018,1.0m,2,341,311,1076 +1777927893.14367,1.0m,2,340,310,1072 +1777927893.197271,1.0m,2,334,312,1079 +1777927893.252774,1.0m,2,342,312,1078 +1777927893.3107588,1.0m,2,342,313,1079 +1777927893.360673,1.0m,2,344,311,1077 +1777927893.4139662,1.0m,2,338,311,1076 +1777927893.4746208,1.0m,2,343,311,1077 +1777927893.523232,1.0m,2,344,311,1075 +1777927893.5734751,1.0m,2,341,315,1088 +1777927893.629527,1.0m,2,339,312,1078 +1777927893.685516,1.0m,2,344,311,1077 +1777927893.740031,1.0m,2,345,311,1075 +1777927893.788599,1.0m,2,336,310,1073 +1777927893.847401,1.0m,2,339,311,1075 +1777927893.898417,1.0m,2,345,310,1073 +1777927893.952458,1.0m,2,339,310,1073 +1777927894.008272,1.0m,2,344,311,1070 +1777927894.055382,1.0m,2,347,313,1079 +1777927894.1104069,1.0m,2,334,312,1075 +1777927894.165644,1.0m,2,346,314,1082 +1777927894.218844,1.0m,2,336,313,1083 +1777927894.274256,1.0m,2,346,313,1076 +1777927894.322038,1.0m,2,345,313,1082 +1777927894.377238,1.0m,2,343,312,1078 +1777927894.431241,1.0m,2,345,310,1071 +1777927894.483556,1.0m,2,346,310,1074 +1777927894.5422678,1.0m,2,345,311,1075 +1777927894.591678,1.0m,2,342,310,1074 +1777927894.649059,1.0m,2,344,310,1071 +1777927894.707627,1.0m,2,342,309,1070 +1777927894.755397,1.0m,2,344,309,1070 +1777927894.807692,1.0m,2,342,310,1071 +1777927894.861839,1.0m,2,339,311,1077 +1777927894.917239,1.0m,2,344,311,1076 +1777927894.972231,1.0m,2,342,315,1089 +1777927895.021348,1.0m,2,342,311,1075 +1777927895.075764,1.0m,2,342,312,1078 +1777927895.130691,1.0m,2,342,312,1078 +1777927895.183667,1.0m,2,343,311,1076 +1777927895.239752,1.0m,2,338,311,1076 +1777927895.288752,1.0m,2,340,310,1072 +1777927895.3425999,1.0m,2,341,310,1074 +1777927895.398091,1.0m,2,340,310,1073 +1777927895.4522471,1.0m,2,342,310,1073 +1777927895.507942,1.0m,2,342,310,1071 +1777927895.559642,1.0m,2,341,310,1072 +1777927895.613791,1.0m,2,340,310,1072 +1777927895.67059,1.0m,2,340,310,1071 +1777927895.721023,1.0m,2,342,311,1077 +1777927895.776614,1.0m,2,341,310,1071 +1777927895.828906,1.0m,2,344,311,1075 +1777927895.882113,1.0m,2,339,309,1070 +1777927895.938245,1.0m,2,341,311,1075 +1777927895.98846,1.0m,2,341,310,1072 +1777927896.043206,1.0m,2,338,311,1072 +1777927896.0953228,1.0m,2,340,310,1071 +1777927896.150323,1.0m,2,340,311,1071 +1777927896.208671,1.0m,2,338,313,1076 +1777927896.257088,1.0m,2,340,312,1073 +1777927896.313619,1.0m,2,335,312,1074 +1777927896.368751,1.0m,2,337,313,1076 +1777927896.420071,1.0m,2,338,309,1065 +1777927896.480382,1.0m,2,341,311,1072 +1777927896.524516,1.0m,2,342,310,1074 +1777927896.5803578,1.0m,2,338,311,1071 +1777927896.641027,1.0m,2,344,311,1070 +1777927896.688319,1.0m,2,337,313,1072 +1777927896.74092,1.0m,2,340,313,1073 +1777927896.7952461,1.0m,2,344,311,1070 +1777927896.849024,1.0m,2,337,313,1077 +1777927896.906433,1.0m,2,341,311,1071 +1777927896.9546702,1.0m,2,345,312,1075 +1777927897.0135932,1.0m,2,341,309,1065 +1777927897.0637949,1.0m,2,341,308,1061 +1777927897.120091,1.0m,2,340,310,1069 +1777927897.176276,1.0m,2,342,314,1075 +1777927897.222581,1.0m,2,342,311,1071 +1777927897.280002,1.0m,2,341,312,1071 +1777927897.3326862,1.0m,2,340,310,1071 +1777927897.3871622,1.0m,2,345,309,1069 +1777927897.443991,1.0m,2,343,310,1069 +1777927897.49464,1.0m,2,339,310,1067 +1777927897.5518951,1.0m,2,337,311,1066 +1777927897.6076438,1.0m,2,340,312,1069 +1777927897.655942,1.0m,2,335,312,1071 +1777927897.707076,1.0m,2,340,311,1071 +1777927897.76542,1.0m,2,342,311,1070 +1777927897.817177,1.0m,2,340,310,1066 +1777927897.873155,1.0m,2,344,309,1070 +1777927897.9234712,1.0m,2,343,310,1069 +1777927897.9797308,1.0m,2,338,309,1065 +1777927898.03189,1.0m,2,343,310,1067 +1777927898.084479,1.0m,2,339,310,1073 +1777927898.14158,1.0m,2,346,313,1076 +1777927898.188545,1.0m,2,335,312,1074 +1777927898.2451031,1.0m,2,346,312,1078 +1777927898.297164,1.0m,2,339,310,1069 +1777927898.352501,1.0m,2,340,310,1069 +1777927898.408371,1.0m,2,342,310,1074 +1777927898.457361,1.0m,2,342,309,1065 +1777927898.512127,1.0m,2,341,309,1070 +1777927898.573743,1.0m,2,342,312,1075 +1777927898.621264,1.0m,2,343,310,1067 +1777927898.6741068,1.0m,2,339,309,1065 +1777927898.72948,1.0m,2,342,310,1074 +1777927898.780711,1.0m,2,343,309,1069 +1777927898.834295,1.0m,2,341,310,1072 +1777927898.889055,1.0m,2,342,313,1078 +1777927898.941844,1.0m,2,341,312,1074 +1777927898.995774,1.0m,2,344,312,1075 +1777927899.051245,1.0m,2,342,312,1075 +1777927899.106571,1.0m,2,339,312,1075 +1777927899.1556852,1.0m,2,340,310,1069 +1777927899.2129521,1.0m,2,345,309,1073 +1777927899.267081,1.0m,2,341,310,1067 +1777927899.320503,1.0m,2,343,308,1072 +1777927899.375417,1.0m,2,344,311,1072 +1777927899.4277818,1.0m,2,343,310,1066 +1777927899.479371,1.0m,2,341,310,1067 +1777927899.535681,1.0m,2,341,311,1071 +1777927899.5872908,1.0m,2,343,312,1074 +1777927899.642945,1.0m,2,344,311,1070 +1777927899.696553,1.0m,2,342,312,1073 +1777927899.749303,1.0m,2,340,313,1077 +1777927899.804115,1.0m,2,346,313,1076 +1777927899.853407,1.0m,2,345,312,1075 +1777927899.911155,1.0m,2,344,312,1075 +1777927899.9686248,1.0m,2,345,312,1075 +1777927900.0184572,1.0m,2,346,312,1074 +1777927900.076385,1.0m,2,344,313,1077 +1777927900.126614,1.0m,2,338,312,1074 +1777927900.1795452,1.0m,2,338,313,1076 +1777927900.236009,1.0m,2,346,313,1077 +1777927900.291397,1.0m,2,342,312,1075 +1777927995.876537,1.5m,0,285,455,1574 +1777927995.92975,1.5m,0,287,461,1586 +1777927995.9906209,1.5m,0,289,458,1586 +1777927996.039427,1.5m,0,284,459,1581 +1777927996.097014,1.5m,0,284,456,1576 +1777927996.1494248,1.5m,0,284,456,1579 +1777927996.203072,1.5m,0,284,456,1576 +1777927996.255784,1.5m,0,283,455,1574 +1777927996.3049111,1.5m,0,284,457,1581 +1777927996.359391,1.5m,0,281,453,1565 +1777927996.415833,1.5m,0,284,455,1581 +1777927996.471123,1.5m,0,286,456,1576 +1777927996.526714,1.5m,0,284,454,1570 +1777927996.578957,1.5m,0,285,455,1574 +1777927996.629903,1.5m,0,286,455,1581 +1777927996.687114,1.5m,0,289,453,1574 +1777927996.738105,1.5m,0,287,452,1570 +1777927996.792764,1.5m,0,286,454,1576 +1777927996.847801,1.5m,0,284,454,1570 +1777927996.901435,1.5m,0,284,450,1565 +1777927996.958133,1.5m,0,284,454,1570 +1777927997.005147,1.5m,0,285,454,1572 +1777927997.0593421,1.5m,0,283,455,1574 +1777927997.1180851,1.5m,0,282,454,1570 +1777927997.1704519,1.5m,0,282,454,1570 +1777927997.226419,1.5m,0,282,453,1567 +1777927997.2764878,1.5m,0,281,454,1572 +1777927997.329906,1.5m,0,283,457,1572 +1777927997.387452,1.5m,0,283,455,1574 +1777927997.43859,1.5m,0,283,457,1574 +1777927997.4937532,1.5m,0,283,457,1572 +1777927997.546504,1.5m,0,282,455,1567 +1777927997.5997791,1.5m,0,284,454,1579 +1777927997.6579998,1.5m,0,284,456,1576 +1777927997.7064588,1.5m,0,280,453,1567 +1777927997.759892,1.5m,0,283,453,1574 +1777927997.81264,1.5m,0,283,454,1572 +1777927997.869623,1.5m,0,284,456,1576 +1777927997.9254,1.5m,0,281,453,1565 +1777927997.976137,1.5m,0,283,454,1572 +1777927998.030414,1.5m,0,283,454,1572 +1777927998.08,1.5m,0,286,454,1576 +1777927998.135954,1.5m,0,284,453,1567 +1777927998.191742,1.5m,0,283,454,1572 +1777927998.240618,1.5m,0,283,454,1572 +1777927998.293198,1.5m,0,283,455,1574 +1777927998.348225,1.5m,0,282,454,1570 +1777927998.40316,1.5m,0,283,455,1574 +1777927998.4583008,1.5m,0,281,456,1576 +1777927998.508252,1.5m,0,282,454,1570 +1777927998.562077,1.5m,0,283,454,1572 +1777927998.623737,1.5m,0,281,454,1576 +1777927998.674005,1.5m,0,280,456,1570 +1777927998.7247941,1.5m,0,281,456,1576 +1777927998.780355,1.5m,0,281,454,1572 +1777927998.8334038,1.5m,0,282,456,1579 +1777927998.891186,1.5m,0,281,454,1572 +1777927998.940214,1.5m,0,281,455,1574 +1777927998.997834,1.5m,0,281,452,1572 +1777927999.048754,1.5m,0,280,454,1570 +1777927999.104189,1.5m,0,284,454,1570 +1777927999.159463,1.5m,0,285,458,1583 +1777927999.208834,1.5m,0,286,456,1576 +1777927999.263136,1.5m,0,284,451,1567 +1777927999.318825,1.5m,0,285,453,1574 +1777927999.3713942,1.5m,0,283,452,1572 +1777927999.4300108,1.5m,0,285,454,1572 +1777927999.478302,1.5m,0,285,452,1572 +1777927999.532873,1.5m,0,284,451,1567 +1777927999.590327,1.5m,0,284,454,1576 +1777927999.6381388,1.5m,0,285,453,1574 +1777927999.691935,1.5m,0,284,456,1576 +1777927999.741981,1.5m,0,280,454,1570 +1777927999.79854,1.5m,0,283,454,1572 +1777927999.853329,1.5m,0,284,453,1567 +1777927999.905605,1.5m,0,280,454,1570 +1777927999.958154,1.5m,0,281,454,1572 +1777928000.011062,1.5m,0,283,454,1572 +1777928000.065165,1.5m,0,281,456,1576 +1777928000.124904,1.5m,0,280,454,1570 +1777928000.171551,1.5m,0,283,453,1574 +1777928000.2259352,1.5m,0,281,458,1576 +1777928000.278833,1.5m,0,282,456,1579 +1777928000.33433,1.5m,0,280,453,1567 +1777928000.391016,1.5m,0,281,456,1576 +1777928000.4411259,1.5m,0,280,456,1570 +1777928000.4953542,1.5m,0,281,457,1574 +1777928000.557129,1.5m,0,281,457,1572 +1777928000.603719,1.5m,0,280,456,1570 +1777928000.658849,1.5m,0,281,456,1576 +1777928000.71071,1.5m,0,281,457,1572 +1777928000.763881,1.5m,0,281,455,1574 +1777928000.822657,1.5m,0,284,456,1576 +1777928000.8736231,1.5m,0,283,454,1572 +1777928000.926049,1.5m,0,282,457,1581 +1777928000.978424,1.5m,0,281,454,1572 +1777928001.032736,1.5m,0,283,460,1583 +1777928001.089972,1.5m,0,281,457,1574 +1777928001.1402218,1.5m,0,281,457,1572 +1777928001.1965382,1.5m,0,281,457,1574 +1777928001.249501,1.5m,0,281,454,1572 +1777928001.304252,1.5m,0,281,457,1572 +1777928001.357437,1.5m,0,281,454,1572 +1777928001.407905,1.5m,0,281,457,1574 +1777928001.4633348,1.5m,0,281,454,1572 +1777928001.5229492,1.5m,0,280,453,1567 +1777928001.571231,1.5m,0,280,453,1567 +1777928001.62181,1.5m,0,280,454,1570 +1777928001.678494,1.5m,0,281,454,1572 +1777928001.729941,1.5m,0,281,456,1576 +1777928001.788783,1.5m,0,279,454,1563 +1777928001.839692,1.5m,0,281,457,1574 +1777928001.8945029,1.5m,0,281,457,1574 +1777928001.95046,1.5m,0,279,452,1563 +1777928002.0011818,1.5m,0,281,457,1574 +1777928002.059435,1.5m,0,280,456,1570 +1777928002.1144161,1.5m,0,279,455,1565 +1777928002.1645708,1.5m,0,279,455,1565 +1777928002.223653,1.5m,0,281,457,1572 +1777928002.270993,1.5m,0,280,456,1570 +1777928002.325345,1.5m,0,280,455,1567 +1777928002.379394,1.5m,0,281,454,1572 +1777928002.4328902,1.5m,0,282,457,1581 +1777928002.489014,1.5m,0,281,457,1574 +1777928002.5377731,1.5m,0,281,457,1574 +1777928002.593097,1.5m,0,281,457,1572 +1777928002.653549,1.5m,0,280,455,1567 +1777928002.702488,1.5m,0,280,454,1570 +1777928002.763485,1.5m,0,281,457,1574 +1777928002.807982,1.5m,0,281,457,1574 +1777928002.862494,1.5m,0,281,457,1574 +1777928002.922548,1.5m,0,281,457,1574 +1777928002.97343,1.5m,0,281,458,1576 +1777928003.0247612,1.5m,0,281,454,1572 +1777928003.075158,1.5m,0,281,454,1572 +1777928003.130047,1.5m,0,280,456,1570 +1777928003.1846788,1.5m,0,281,454,1572 +1777928003.237518,1.5m,0,280,452,1570 +1777928003.294858,1.5m,0,282,456,1579 +1777928003.343938,1.5m,0,280,455,1567 +1777928003.399721,1.5m,0,281,453,1565 +1777928003.454998,1.5m,0,279,455,1565 +1777928003.505452,1.5m,0,280,456,1570 +1777928003.558559,1.5m,0,281,457,1572 +1777928003.614174,1.5m,0,281,452,1572 +1777928003.6672971,1.5m,0,281,457,1572 +1777928003.723613,1.5m,0,281,455,1574 +1777928003.772543,1.5m,0,281,456,1576 +1777928003.824393,1.5m,0,281,457,1574 +1777928003.8819609,1.5m,0,281,456,1576 +1777928003.93151,1.5m,0,281,458,1576 +1777928003.989546,1.5m,0,281,455,1574 +1777928004.037777,1.5m,0,282,459,1579 +1777928004.09257,1.5m,0,281,457,1572 +1777928004.148454,1.5m,0,280,456,1570 +1777928004.203361,1.5m,0,281,457,1572 +1777928004.261312,1.5m,0,278,457,1572 +1777928004.30959,1.5m,0,278,457,1572 +1777928004.365132,1.5m,0,282,456,1579 +1777928004.421587,1.5m,0,278,456,1570 +1777928004.4724941,1.5m,0,279,457,1574 +1777928004.5274198,1.5m,0,281,457,1572 +1777928004.578916,1.5m,0,278,456,1570 +1777928004.63404,1.5m,0,281,458,1576 +1777928004.690806,1.5m,0,279,457,1574 +1777928004.7383418,1.5m,0,281,458,1576 +1777928004.7928681,1.5m,0,279,458,1576 +1777928004.848085,1.5m,0,280,459,1579 +1777928004.903336,1.5m,0,278,457,1572 +1777928004.961349,1.5m,0,281,457,1574 +1777928005.012086,1.5m,0,279,458,1576 +1777928005.06481,1.5m,0,282,459,1579 +1777928005.1187499,1.5m,0,280,459,1579 +1777928005.171798,1.5m,0,279,458,1576 +1777928005.222225,1.5m,0,279,457,1574 +1777928005.27817,1.5m,0,278,457,1572 +1777928005.3310468,1.5m,0,278,456,1570 +1777928005.389819,1.5m,0,279,458,1576 +1777928005.4385972,1.5m,0,279,458,1576 +1777928005.491932,1.5m,0,278,455,1567 +1777928005.547214,1.5m,0,278,456,1570 +1777928005.601992,1.5m,0,279,458,1576 +1777928005.656637,1.5m,0,278,457,1572 +1777928005.7071621,1.5m,0,278,455,1567 +1777928005.763347,1.5m,0,278,457,1572 +1777928005.8235562,1.5m,0,279,458,1576 +1777928005.869217,1.5m,0,278,457,1572 +1777928005.924884,1.5m,0,278,456,1570 +1777928005.978215,1.5m,0,279,458,1576 +1777928006.0379388,1.5m,0,280,459,1579 +1777928006.089321,1.5m,0,280,459,1579 +1777928006.1395688,1.5m,0,280,459,1579 +1777928006.195586,1.5m,0,278,457,1572 +1777928006.254793,1.5m,0,280,459,1581 +1777928006.3041558,1.5m,0,278,455,1567 +1777928006.35685,1.5m,0,280,459,1579 +1777928006.4096599,1.5m,0,278,456,1570 +1777928006.464077,1.5m,0,278,457,1572 +1777928006.517269,1.5m,0,278,457,1572 +1777928006.570029,1.5m,0,279,457,1574 +1777928006.624737,1.5m,0,278,457,1572 +1777928006.6775491,1.5m,0,279,457,1574 +1777928006.73429,1.5m,0,279,457,1574 +1777928006.7905128,1.5m,0,278,457,1572 +1777928006.839707,1.5m,0,279,457,1574 +1777928006.894896,1.5m,0,279,458,1576 +1777928006.953644,1.5m,0,278,456,1570 +1777928007.002413,1.5m,0,278,457,1572 +1777928007.0551739,1.5m,0,279,458,1576 +1777928007.111855,1.5m,0,278,455,1567 +1777928007.1638799,1.5m,0,279,457,1574 +1777928007.21837,1.5m,0,280,459,1579 +1777928007.271494,1.5m,0,278,457,1572 +1777928007.323384,1.5m,0,274,457,1572 +1777928007.377716,1.5m,0,277,457,1574 +1777928007.430496,1.5m,0,276,457,1572 +1777928007.487639,1.5m,0,276,457,1572 +1777928007.536161,1.5m,0,275,457,1574 +1777928007.5952482,1.5m,0,274,457,1572 +1777928007.646073,1.5m,0,277,457,1574 +1777928007.701199,1.5m,0,279,458,1576 +1777928007.75765,1.5m,0,274,457,1572 +1777928007.805551,1.5m,0,277,457,1574 +1777928007.863471,1.5m,0,278,460,1583 +1777928007.920373,1.5m,0,276,457,1572 +1777928007.968346,1.5m,0,277,457,1574 +1777928008.023548,1.5m,0,276,457,1572 +1777928008.0765948,1.5m,0,279,458,1576 +1777928008.1287181,1.5m,0,280,459,1581 +1777928008.1855948,1.5m,0,280,459,1581 +1777928008.2368152,1.5m,0,278,457,1572 +1777928008.295357,1.5m,0,280,459,1579 +1777928008.3413088,1.5m,0,279,458,1576 +1777928008.39528,1.5m,0,278,456,1570 +1777928008.4539719,1.5m,0,278,457,1572 +1777928008.503743,1.5m,0,278,457,1572 +1777928008.558037,1.5m,0,278,457,1572 +1777928008.612604,1.5m,0,281,457,1572 +1777928008.668239,1.5m,0,280,456,1570 +1777928008.7234051,1.5m,0,279,458,1576 +1777928008.775559,1.5m,0,281,457,1574 +1777928008.824255,1.5m,0,278,456,1570 +1777928008.8847558,1.5m,0,281,457,1574 +1777928008.935669,1.5m,0,278,456,1570 +1777928008.991035,1.5m,0,278,457,1572 +1777928009.0428421,1.5m,0,279,457,1574 +1777928009.09707,1.5m,0,278,456,1570 +1777928009.151893,1.5m,0,279,458,1576 +1777928009.204052,1.5m,0,278,456,1570 +1777928009.257643,1.5m,0,279,457,1574 +1777928009.3109288,1.5m,0,278,455,1567 +1777928009.3647518,1.5m,0,278,457,1572 +1777928009.421576,1.5m,0,278,455,1567 +1777928009.470224,1.5m,0,278,455,1567 +1777928009.528634,1.5m,0,279,457,1574 +1777928009.5781918,1.5m,0,278,455,1567 +1777928009.6332319,1.5m,0,279,458,1576 +1777928009.690568,1.5m,0,279,459,1574 +1777928009.73921,1.5m,0,278,457,1572 +1777928009.793211,1.5m,0,278,456,1570 +1777928009.853097,1.5m,0,279,457,1574 +1777928009.902436,1.5m,0,278,457,1572 +1777928009.954124,1.5m,0,280,459,1581 +1777928010.0116491,1.5m,0,278,457,1572 +1777928010.068426,1.5m,0,280,459,1581 +1777928010.1299992,1.5m,0,278,455,1567 +1777928010.176041,1.5m,0,279,457,1574 +1777928010.2307909,1.5m,0,279,457,1574 +1777928010.2841358,1.5m,0,279,458,1576 +1777928010.337165,1.5m,0,279,458,1576 +1777928010.389399,1.5m,0,279,458,1576 +1777928010.443349,1.5m,0,279,457,1574 +1777928010.4967759,1.5m,0,279,458,1576 +1777928010.554434,1.5m,0,279,458,1576 +1777928010.6048388,1.5m,0,280,459,1579 +1777928010.6553721,1.5m,0,279,458,1576 +1777928010.710398,1.5m,0,278,455,1567 +1777928010.765104,1.5m,0,280,459,1579 +1777928010.823093,1.5m,0,281,457,1574 +1777928010.8708212,1.5m,0,278,457,1572 diff --git a/documentation/accuracy/calibration.png b/documentation/accuracy/calibration.png new file mode 100644 index 0000000..3219712 Binary files /dev/null and b/documentation/accuracy/calibration.png differ diff --git a/graph.py b/graph.py new file mode 100644 index 0000000..26aacad --- /dev/null +++ b/graph.py @@ -0,0 +1,98 @@ +""" +Generates z-accuracy graphs from accuracy_log.csv. +Shows raw z vs nominal per distance. +Run: python3 graph.py +""" + +import pathlib + +import matplotlib.pyplot as plt +import pandas as pd + +from main_2025 import calibrate_z + +REPO_DIR = pathlib.Path(__file__).parent +LOG_FILE = REPO_DIR / "accuracy_log.csv" +OUT_DIR = REPO_DIR / "graphs" + +NOMINAL_MM = { + "0.5m": 500, + "1.0m": 1000, + "1.5m": 1500, + "2.0m": 2000, + "2.5m": 2500, + "3.0m": 3000, +} + +COLORS = ["tab:orange", "tab:blue", "tab:green", "tab:red", "tab:purple"] + +Y_MARGIN_MM = 150 # fixed ±margin around nominal for consistent scale across all panels +Y_LIMITS = { + "0.5m": (250, 750), # nominal ±250 — keeps the 500mm nominal line centered + "2.0m": (1800, 2200), + "3.0m": (2700, 3300), +} # per-distance overrides + + +def plot_distance(ax, dist, raw_z, nominal, color): + """Plot a single distance panel — usual pipeline calibration applied.""" + z = raw_z.apply(calibrate_z) + mean_z = z.mean() + ax.plot( + z.index, z, color=color, linewidth=0.8, alpha=0.85, label=f"measured z (μ={mean_z:.0f}mm)" + ) + if nominal: + ax.axhline( + nominal, color="red", linestyle="--", linewidth=1.2, label=f"nominal ({nominal}mm)" + ) + ax.axhline(mean_z, color="gray", linestyle=":", linewidth=1.2, label=f"mean ({mean_z:.0f}mm)") + ymin, ymax = Y_LIMITS.get(dist, (nominal - Y_MARGIN_MM, nominal + Y_MARGIN_MM)) + ax.set_ylim(ymin, ymax) + ax.set_title(f"Distance: {dist} (bad lighting)") + ax.set_xlabel("Frame") + ax.set_ylabel("z (mm)") + ax.legend(fontsize=7) + ax.grid(True, alpha=0.3) + + +def main() -> None: + """Read CSV and produce combined + individual PNGs per distance.""" + df = pd.read_csv(LOG_FILE) + OUT_DIR.mkdir(exist_ok=True) + + distances = sorted(df["test_distance"].unique()) + n = len(distances) + + fig, axes = plt.subplots(1, n, figsize=(5 * n, 4), sharey=False) + if n == 1: + axes = [axes] + fig.suptitle("OAK-D SpatialDetectionNetwork — z accuracy over time (bad lighting)", fontsize=13) + + for ax, dist, color in zip(axes, distances, COLORS): + subset = df[df["test_distance"] == dist].copy().sort_values("timestamp") + raw_z = subset["z_mm"].reset_index(drop=True) + nominal = NOMINAL_MM.get(dist) + plot_distance(ax, dist, raw_z, nominal, color) + + fig.tight_layout() + out_path = OUT_DIR / "z_accuracy_all_bad_lighting.png" + fig.savefig(out_path, dpi=150) + plt.close(fig) + print(f"Saved {out_path}") + + for dist, color in zip(distances, COLORS): + subset = df[df["test_distance"] == dist].copy().sort_values("timestamp") + raw_z = subset["z_mm"].reset_index(drop=True) + nominal = NOMINAL_MM.get(dist) + + fig2, ax2 = plt.subplots(figsize=(8, 4)) + plot_distance(ax2, dist, raw_z, nominal, color) + fig2.tight_layout() + fname = OUT_DIR / f"z_{dist.replace('.', '_')}_bad_lighting.png" + fig2.savefig(fname, dpi=150) + plt.close(fig2) + print(f"Saved {fname}") + + +if __name__ == "__main__": + main() diff --git a/graph1_z_over_time.png b/graph1_z_over_time.png new file mode 100644 index 0000000..c6f1d07 Binary files /dev/null and b/graph1_z_over_time.png differ diff --git a/graphs/z_0_5m_bad_lighting.png b/graphs/z_0_5m_bad_lighting.png new file mode 100644 index 0000000..804b195 Binary files /dev/null and b/graphs/z_0_5m_bad_lighting.png differ diff --git a/graphs/z_1_0m_bad_lighting.png b/graphs/z_1_0m_bad_lighting.png new file mode 100644 index 0000000..3b382ce Binary files /dev/null and b/graphs/z_1_0m_bad_lighting.png differ diff --git a/graphs/z_1_5m_bad_lighting.png b/graphs/z_1_5m_bad_lighting.png new file mode 100644 index 0000000..0c0aa77 Binary files /dev/null and b/graphs/z_1_5m_bad_lighting.png differ diff --git a/graphs/z_2_0m_bad_lighting.png b/graphs/z_2_0m_bad_lighting.png new file mode 100644 index 0000000..5762e37 Binary files /dev/null and b/graphs/z_2_0m_bad_lighting.png differ diff --git a/graphs/z_3_0m_bad_lighting.png b/graphs/z_3_0m_bad_lighting.png new file mode 100644 index 0000000..342a651 Binary files /dev/null and b/graphs/z_3_0m_bad_lighting.png differ diff --git a/graphs/z_accuracy_all_bad_lighting.png b/graphs/z_accuracy_all_bad_lighting.png new file mode 100644 index 0000000..f535d61 Binary files /dev/null and b/graphs/z_accuracy_all_bad_lighting.png differ diff --git a/main_2025.py b/main_2025.py index 1b7c348..e26aee3 100644 --- a/main_2025.py +++ b/main_2025.py @@ -1,15 +1,106 @@ """ -for target tracking +Target tracking pipeline for OAK-D. +Runs YOLOv4-tiny spatial detection + object tracking on-device. """ import pathlib +import cv2 +import depthai as dai +import yaml + +from modules.target_tracking.stereo_node import create_stereo_depth +from modules.target_tracking.spatial_detection_node import create_spatial_detection_network +from modules.target_tracking.object_tracker_node import create_object_tracker CONFIG_FILE_PATH = pathlib.Path("config.yaml") +OUTPUT_QUEUE_SIZE = 4 + +# Z-bias calibration anchors: (raw_z_mm, offset_mm_to_subtract). +# Measured at 0.5/1.0/1.5/2.0/2.5m; final anchor tapers smoothly to factory calibration. +# Beyond the last anchor the raw camera value is trusted as-is. +Z_CALIBRATION_ANCHORS = ( + (527.5, 27.5), # 0.5m + (1075.1, 75.1), # 1.0m + (1573.2, 73.2), # 1.5m + (1893.1, -106.9), # 2.0m + (2599.2, 99.2), # 2.5m + (2800.0, 0.0), # taper end — trust factory beyond this +) + + +def calibrate_z(raw_z: float) -> float: + """Apply piecewise-linear bias correction to a raw stereo-depth z value (mm).""" + if raw_z <= Z_CALIBRATION_ANCHORS[0][0]: + return raw_z - Z_CALIBRATION_ANCHORS[0][1] + if raw_z >= Z_CALIBRATION_ANCHORS[-1][0]: + return raw_z + for (z0, o0), (z1, o1) in zip(Z_CALIBRATION_ANCHORS, Z_CALIBRATION_ANCHORS[1:]): + if z0 <= raw_z <= z1: + t = (raw_z - z0) / (z1 - z0) + return raw_z - (o0 + t * (o1 - o0)) + return raw_z def main() -> int: - """Main Function for target tracking""" + """Run the OAK-D target tracking pipeline.""" + with open(CONFIG_FILE_PATH, "r", encoding="utf-8") as config_file: + config = yaml.safe_load(config_file) + + model_name: str = config["spatial_detection"]["model_name"] + + with dai.Pipeline() as pipeline: + stereo = create_stereo_depth(pipeline) + spatial_detection = create_spatial_detection_network(pipeline, stereo, model_name) + tracker = create_object_tracker(pipeline, spatial_detection) + + tracklet_queue = tracker.out.createOutputQueue(maxSize=OUTPUT_QUEUE_SIZE, blocking=False) + preview_queue = tracker.passthroughTrackerFrame.createOutputQueue( + maxSize=OUTPUT_QUEUE_SIZE, blocking=False + ) + + pipeline.start() + while pipeline.isRunning(): + tracklets_msg = tracklet_queue.get() + frame_msg = preview_queue.get() + frame = frame_msg.getCvFrame() + + for tracklet in tracklets_msg.tracklets: + if tracklet.status != dai.Tracklet.TrackingStatus.TRACKED: + continue + + roi = tracklet.roi.denormalize(frame.shape[1], frame.shape[0]) + x_mm = tracklet.spatialCoordinates.x + y_mm = tracklet.spatialCoordinates.y + z_mm = calibrate_z(tracklet.spatialCoordinates.z) + + print( + f"Target ID {tracklet.id}: " + f"xyz=({x_mm:.0f}mm, {y_mm:.0f}mm, {z_mm:.0f}mm) " + f"bbox=({int(roi.topLeft().x)}, {int(roi.topLeft().y)}, " + f"{int(roi.bottomRight().x)}, {int(roi.bottomRight().y)})" + ) + + cv2.rectangle( + frame, + (int(roi.topLeft().x), int(roi.topLeft().y)), + (int(roi.bottomRight().x), int(roi.bottomRight().y)), + (0, 255, 0), + 2, + ) + cv2.putText( + frame, + f"ID {tracklet.id} | {z_mm:.0f}mm", + (int(roi.topLeft().x), int(roi.topLeft().y) - 8), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (0, 255, 0), + 1, + ) + + cv2.imshow("Target Tracking", frame) + if cv2.waitKey(1) == ord("q"): + break return 0 @@ -18,5 +109,4 @@ def main() -> int: result_main = main() if result_main < 0: print(f"ERROR: Status code: {result_main}") - print("Done!") diff --git a/modules/target_tracking/__init__.py b/modules/target_tracking/__init__.py index e69de29..603a418 100644 --- a/modules/target_tracking/__init__.py +++ b/modules/target_tracking/__init__.py @@ -0,0 +1 @@ +from .depthai_detector import DepthAIDetector \ No newline at end of file diff --git a/modules/target_tracking/depthai_detector.py b/modules/target_tracking/depthai_detector.py new file mode 100644 index 0000000..1c8cd11 --- /dev/null +++ b/modules/target_tracking/depthai_detector.py @@ -0,0 +1,99 @@ +""" +DepthAI detector implementation using Pipeline 2.0 API. +""" +import depthai as dai +import numpy as np +import cv2 +from .stereo_node import create_stereo_depth + +class DepthAIDetector: + """ + DepthAI detector class using SpatialDetectionNetwork. + """ + def __init__(self, pipeline: "dai.Pipeline"): + self.pipeline = pipeline + self.latest_detections = [] + self.latest_frames = {} + + class DataCollector(dai.node.HostNode): + """ + Host node to collect data from the pipeline and make it available to the detector class. + """ + def __init__(self, detector): + dai.node.HostNode.__init__(self) + self.detector = detector + self.sendProcessingToPipeline(True) + + def build(self, depth: dai.Node.Output, detections: dai.Node.Output, rgb: dai.Node.Output): + self.link_args(depth, detections, rgb) + + def process(self, depthPreview, detections, rgbPreview): + # Store data in the parent detector instance + self.detector.latest_frames["depth"] = depthPreview.getCvFrame() + self.detector.latest_frames["rgb"] = rgbPreview.getCvFrame() + self.detector.latest_detections = detections.detections + + @classmethod + def create(cls, config: dict) -> "tuple[bool, DepthAIDetector | None]": + try: + model_name = config.get("model_path", "yolov6-nano") + size = config.get("input_size", (640, 400)) + depth_source_type = config.get("depth_source", "stereo") + fps = config.get("fps", 30) + + p = dai.Pipeline() + platform = p.getDefaultDevice().getPlatform() + + # Define sources + cam_rgb = p.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A, sensorFps=fps) + + # Define depth source + if depth_source_type == "stereo": + depth_source = create_stereo_depth(p) + if platform == dai.Platform.RVC2: + depth_source.setOutputSize(*size) + else: + print(f"Invalid depth source: {depth_source_type}") + return False, None + + # Spatial Detection Network + model_description = dai.NNModelDescription(model_name) + spatial_nn = p.create(dai.node.SpatialDetectionNetwork).build( + cam_rgb, depth_source, model_description + ) + + # Settings + spatial_nn.input.setBlocking(False) + spatial_nn.setBoundingBoxScaleFactor(0.5) + spatial_nn.setDepthLowerThreshold(100) + spatial_nn.setDepthUpperThreshold(5000) + + # Create detector instance + detector = cls(p) + + # Use HostNode to collect data + collector = p.create(cls.DataCollector, detector) + collector.build( + spatial_nn.passthroughDepth, + spatial_nn.out, + spatial_nn.passthrough, + ) + + # Start the pipeline in the background + p.start() + + return True, detector + except Exception as e: + print(f"Error creating DepthAIDetector: {e}") + return False, None + + def run(self) -> "tuple[bool, list, dict]": + """ + Returns the latest detections and frames collected by the HostNode. + """ + # Since the pipeline is running in the background, we just return the latest captured data. + return True, self.latest_detections, self.latest_frames + + def __del__(self): + if hasattr(self, 'pipeline'): + self.pipeline.stop() \ No newline at end of file diff --git a/modules/target_tracking/object_tracker_node.py b/modules/target_tracking/object_tracker_node.py new file mode 100644 index 0000000..2bd3859 --- /dev/null +++ b/modules/target_tracking/object_tracker_node.py @@ -0,0 +1,46 @@ +""" +Module for initializing the Object Tracker node. +Wraps DepthAI's ObjectTracker to track detections across frames with persistent IDs. +""" + +import depthai as dai + + +# Track only class 0 (person in COCO dataset) +PERSON_CLASS_ID = 0 + +# ZERO_TERM_COLOR_HISTOGRAM: lightweight, works without re-identification network +TRACKER_TYPE = dai.TrackerType.ZERO_TERM_COLOR_HISTOGRAM + +# SMALLEST_ID: reuse lowest available ID, keeps IDs stable across frames +ASSIGNMENT_POLICY = dai.TrackerIdAssignmentPolicy.SMALLEST_ID + + +def create_object_tracker( + pipeline: dai.Pipeline, + spatial_detection: dai.node.SpatialDetectionNetwork, +) -> dai.node.ObjectTracker: + """ + Creates the ObjectTracker node and links it to the spatial detection network. + + Args: + pipeline: The DepthAI pipeline object. + spatial_detection: The configured SpatialDetectionNetwork node. + + Returns: + Configured ObjectTracker node. + """ + tracker = pipeline.create(dai.node.ObjectTracker) + + # Only track humans (COCO class 0) + tracker.setDetectionLabelsToTrack([PERSON_CLASS_ID]) + tracker.setTrackerType(TRACKER_TYPE) + tracker.setTrackerIdAssignmentPolicy(ASSIGNMENT_POLICY) + tracker.setRunOnHost(True) + + # passthrough provides the preview frame used to extract appearance features + spatial_detection.passthrough.link(tracker.inputTrackerFrame) + spatial_detection.passthrough.link(tracker.inputDetectionFrame) + spatial_detection.out.link(tracker.inputDetections) + + return tracker diff --git a/modules/target_tracking/spatial_detection_node.py b/modules/target_tracking/spatial_detection_node.py new file mode 100644 index 0000000..b6d062a --- /dev/null +++ b/modules/target_tracking/spatial_detection_node.py @@ -0,0 +1,48 @@ +""" +Module for initializing the Spatial Detection Network. +Integrates the stereo depth node with YOLO for 3D object localization. +""" + +import depthai as dai + + +# Detection thresholds +CONFIDENCE_THRESHOLD = 0.5 + +# Depth ROI scale (fraction of bounding box used to sample depth) +BOUNDING_BOX_SCALE_FACTOR = 0.5 + +# Valid depth range in mm +DEPTH_LOWER_THRESHOLD_MM = 100 +DEPTH_UPPER_THRESHOLD_MM = 10000 + + +def create_spatial_detection_network( + pipeline: dai.Pipeline, + stereo: dai.node.StereoDepth, + model_name: str, +) -> dai.node.SpatialDetectionNetwork: + """ + Creates the SpatialDetectionNetwork and links it with stereo depth + color camera. + + Args: + pipeline: The DepthAI pipeline object. + stereo: Configured StereoDepth node with depth aligned to CAM_A. + model_name: Luxonis model zoo name (e.g. "yolov6-nano"). + + Returns: + Configured SpatialDetectionNetwork node. + """ + # CAM_A is the RGB sensor — must match stereo's setDepthAlign(CAM_A) + cam = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_A) + + spatial_detection = pipeline.create(dai.node.SpatialDetectionNetwork).build( + cam, stereo, model_name + ) + spatial_detection.setConfidenceThreshold(CONFIDENCE_THRESHOLD) + spatial_detection.setBoundingBoxScaleFactor(BOUNDING_BOX_SCALE_FACTOR) + spatial_detection.setDepthLowerThreshold(DEPTH_LOWER_THRESHOLD_MM) + spatial_detection.setDepthUpperThreshold(DEPTH_UPPER_THRESHOLD_MM) + spatial_detection.input.setBlocking(False) + + return spatial_detection diff --git a/modules/target_tracking/stereo_node.py b/modules/target_tracking/stereo_node.py index 20b1660..f0dfa66 100644 --- a/modules/target_tracking/stereo_node.py +++ b/modules/target_tracking/stereo_node.py @@ -1,6 +1,6 @@ """ Module for initializing and configuring the StereoDepth node. -This setup aligns the depth map to the RGB camera for spatial logic. +Depth aligned to CAM_A (RGB) for spatial detection. """ import depthai as dai @@ -8,42 +8,24 @@ def create_stereo_depth(pipeline: dai.Pipeline) -> dai.node.StereoDepth: """ - Creates the StereoDepth node and links it to the Mono cameras. + Creates the StereoDepth node and links it to the mono cameras. Args: - pipeline (dai.Pipeline): The DepthAI pipeline object. + pipeline: The DepthAI pipeline object. Returns: - dai.node.StereoDepth: The configured stereo node. + Configured StereoDepth node with depth aligned to CAM_A. """ - # --- 1. Define Sources --- - mono_left = pipeline.create(dai.node.MonoCamera) - mono_right = pipeline.create(dai.node.MonoCamera) + mono_left = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_B) + mono_right = pipeline.create(dai.node.Camera).build(dai.CameraBoardSocket.CAM_C) - # Configure the hardware sockets (Left vs Right) - mono_left.setBoardSocket(dai.CameraBoardSocket.LEFT) - mono_right.setBoardSocket(dai.CameraBoardSocket.RIGHT) - - # Set Resolution (400p is standard) - # Breaking line to satisfy flake8 line length limit - mono_left.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P) - mono_right.setResolution(dai.MonoCameraProperties.SensorResolution.THE_400_P) - - # --- 2. Define the Processor --- stereo = pipeline.create(dai.node.StereoDepth) - - # --- 3. Configuration --- - # CRITICAL: Align depth to RGB (bc mono cams are 20 pixels off) - stereo.setDepthAlign(dai.CameraBoardSocket.RGB) - - # Improve quality + stereo.setDepthAlign(dai.CameraBoardSocket.CAM_A) stereo.setSubpixel(True) - stereo.setLeftRightCheck(True) # Removes ghost pixels at edges - # Change to True if <50cm need tracking needed + stereo.setLeftRightCheck(True) stereo.setExtendedDisparity(False) - # --- 4. Linking --- - mono_left.out.link(stereo.left) - mono_right.out.link(stereo.right) + mono_left.requestOutput((640, 400)).link(stereo.left) + mono_right.requestOutput((640, 400)).link(stereo.right) return stereo diff --git a/record.py b/record.py new file mode 100644 index 0000000..5a3343f --- /dev/null +++ b/record.py @@ -0,0 +1,163 @@ +""" +Accuracy recording script for OAK-D depth calibration. + +Controls: + Press 1 → 5s countdown then record 10s at 0.5m + Press 2 → 5s countdown then record 10s at 1.0m + Press 3 → 5s countdown then record 10s at 1.5m + Press 4 → 5s countdown then record 10s at 2.0m + Press 5 → 5s countdown then record 10s at 3.0m + Press s → stop recording early + Press q → quit +""" + +import csv +import pathlib +import time + +import cv2 +import depthai as dai +import yaml + +from modules.target_tracking.stereo_node import create_stereo_depth +from modules.target_tracking.spatial_detection_node import create_spatial_detection_network +from modules.target_tracking.object_tracker_node import create_object_tracker + +REPO_DIR = pathlib.Path(__file__).parent +CONFIG_FILE_PATH = REPO_DIR / "config.yaml" +LOG_FILE = REPO_DIR / "accuracy_log.csv" +OUTPUT_QUEUE_SIZE = 4 +COUNTDOWN_SECS = 5 +RECORD_SECS = 10 + +DISTANCE_KEYS = { + ord("1"): "0.5m", + ord("2"): "1.0m", + ord("3"): "1.5m", + ord("4"): "2.0m", + ord("5"): "3.0m", +} + + +def main() -> None: + """Run the recording pipeline.""" + with open(CONFIG_FILE_PATH, "r", encoding="utf-8") as f: + config = yaml.safe_load(f) + model_name: str = config["spatial_detection"]["model_name"] + + write_header = not LOG_FILE.exists() or LOG_FILE.stat().st_size == 0 + log_file = open(LOG_FILE, "a", newline="", encoding="utf-8") # noqa: SIM115 + writer = csv.writer(log_file) + if write_header: + writer.writerow(["timestamp", "test_distance", "target_id", "x_mm", "y_mm", "z_mm"]) + + active_distance: str = "" + countdown_until: float = 0.0 + countdown_target: str = "" + logging_until: float = 0.0 + + print("Controls: [1]=0.5m [2]=1.0m [3]=1.5m [4]=2.0m [5]=3.0m [s]=stop [q]=quit") + + with dai.Pipeline() as pipeline: + stereo = create_stereo_depth(pipeline) + spatial_detection = create_spatial_detection_network(pipeline, stereo, model_name) + tracker = create_object_tracker(pipeline, spatial_detection) + + tracklet_queue = tracker.out.createOutputQueue(maxSize=OUTPUT_QUEUE_SIZE, blocking=False) + preview_queue = tracker.passthroughTrackerFrame.createOutputQueue( + maxSize=OUTPUT_QUEUE_SIZE, blocking=False + ) + + pipeline.start() + while pipeline.isRunning(): + tracklets_msg = tracklet_queue.get() + frame_msg = preview_queue.get() + frame = frame_msg.getCvFrame() + now = time.time() + + if countdown_until and now >= countdown_until: + active_distance = countdown_target + logging_until = now + RECORD_SECS + countdown_until = 0.0 + countdown_target = "" + print(f"\n--- Recording {active_distance} for {RECORD_SECS}s ---") + + if active_distance and now >= logging_until: + print(f"\n--- Done recording {active_distance} ---") + active_distance = "" + logging_until = 0.0 + + for tracklet in tracklets_msg.tracklets: + if tracklet.status != dai.Tracklet.TrackingStatus.TRACKED: + continue + + roi = tracklet.roi.denormalize(frame.shape[1], frame.shape[0]) + x_mm = tracklet.spatialCoordinates.x + y_mm = tracklet.spatialCoordinates.y + z_mm = tracklet.spatialCoordinates.z + + if active_distance: + writer.writerow( + [ + round(now, 3), + active_distance, + tracklet.id, + round(x_mm), + round(y_mm), + round(z_mm), + ] + ) + log_file.flush() + + cv2.rectangle( + frame, + (int(roi.topLeft().x), int(roi.topLeft().y)), + (int(roi.bottomRight().x), int(roi.bottomRight().y)), + (0, 255, 0), + 2, + ) + cv2.putText( + frame, + f"ID {tracklet.id} | {z_mm:.0f}mm", + (int(roi.topLeft().x), int(roi.topLeft().y) - 8), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (0, 255, 0), + 1, + ) + + if countdown_until: + secs_left = max(0, int(countdown_until - now) + 1) + label = f"Get ready ({countdown_target})... {secs_left}s" + color = (0, 140, 255) + elif active_distance: + secs_left = max(0, int(logging_until - now) + 1) + label = f"Recording {active_distance}... {secs_left}s" + color = (0, 200, 100) + else: + label = "Idle [1]=0.5m [2]=1.0m [3]=1.5m [4]=2.0m [5]=3.0m" + color = (160, 160, 160) + cv2.putText(frame, label, (10, 24), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2) + + cv2.imshow("Record Accuracy", frame) + key = cv2.waitKey(1) & 0xFF + + if key == ord("q"): + break + elif key in DISTANCE_KEYS: + countdown_until = time.time() + COUNTDOWN_SECS + countdown_target = DISTANCE_KEYS[key] + active_distance = "" + print(f"\n--- {COUNTDOWN_SECS}s countdown — stand at {DISTANCE_KEYS[key]} ---") + elif key == ord("s"): + print(f"\n--- Stopped ({active_distance or countdown_target}) ---") + active_distance = "" + countdown_until = 0.0 + countdown_target = "" + + log_file.close() + print(f"Saved to {LOG_FILE}") + + +if __name__ == "__main__": + main() diff --git a/requirements-pytorch.txt b/requirements-pytorch.txt index b805223..092d3e1 100644 --- a/requirements-pytorch.txt +++ b/requirements-pytorch.txt @@ -1,4 +1,6 @@ # Runtime dependencies for target tracking pipeline -depthai>=2.24.0 -pymavlink>=2.4.40 \ No newline at end of file +depthai>=3.5.0 +opencv-python>=4.9.0 +pymavlink>=2.4.40 +pyyaml>=6.0 diff --git a/requirements.txt b/requirements.txt index 2309fad..0aa13df 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ - black==24.2.0 flake8-annotations==3.0.1 pylint==3.0.3 +ultralytics +depthai \ No newline at end of file diff --git a/tests/unit/test_pipeline_nodes.py b/tests/unit/test_pipeline_nodes.py new file mode 100644 index 0000000..88a17cc --- /dev/null +++ b/tests/unit/test_pipeline_nodes.py @@ -0,0 +1,206 @@ +""" +Unit tests for the target tracking pipeline nodes. +Mocks depthai and blobconverter so no OAK-D hardware is required. +""" + +import sys +from unittest.mock import MagicMock, call, patch + +import pytest + + +# --------------------------------------------------------------------------- +# Mock depthai + blobconverter BEFORE importing any project modules that +# import them at module level. This must happen at collection time. +# --------------------------------------------------------------------------- +_dai = MagicMock() + +# Give TrackerType / TrackerIdAssignmentPolicy real-ish sentinel values so +# the modules can assign them to constants without blowing up. +_dai.TrackerType.ZERO_TERM_COLOR_HISTOGRAM = "ZERO_TERM_COLOR_HISTOGRAM" +_dai.TrackerIdAssignmentPolicy.SMALLEST_ID = "SMALLEST_ID" +_dai.MonoCameraProperties.SensorResolution.THE_400_P = "400P" +_dai.ColorCameraProperties.ColorOrder.BGR = "BGR" +_dai.CameraBoardSocket.LEFT = "LEFT" +_dai.CameraBoardSocket.RIGHT = "RIGHT" +_dai.CameraBoardSocket.RGB = "RGB" + +sys.modules["depthai"] = _dai +sys.modules["blobconverter"] = MagicMock() + +# Now safe to import project modules +from modules.target_tracking.stereo_node import create_stereo_depth # noqa: E402 +from modules.target_tracking.spatial_detection_node import ( # noqa: E402 + create_spatial_detection_network, +) +from modules.target_tracking.object_tracker_node import create_object_tracker # noqa: E402 + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _make_pipeline(): + """Return a fresh mock pipeline whose create() returns distinct mocks.""" + pipeline = MagicMock() + pipeline.create.side_effect = lambda node_type: MagicMock(name=str(node_type)) + return pipeline + + +# --------------------------------------------------------------------------- +# stereo_node tests +# --------------------------------------------------------------------------- + + +class TestCreateStereoDepth: + def test_returns_stereo_node(self): + pipeline = _make_pipeline() + stereo = create_stereo_depth(pipeline) + assert stereo is not None + + def test_creates_three_nodes(self): + """Expects: mono_left, mono_right, stereo = 3 pipeline.create() calls.""" + pipeline = _make_pipeline() + create_stereo_depth(pipeline) + assert pipeline.create.call_count == 3 + + def test_depth_aligned_to_rgb(self): + pipeline = _make_pipeline() + stereo = create_stereo_depth(pipeline) + stereo.setDepthAlign.assert_called_once_with(_dai.CameraBoardSocket.RGB) + + def test_quality_flags_set(self): + pipeline = _make_pipeline() + stereo = create_stereo_depth(pipeline) + stereo.setSubpixel.assert_called_once_with(True) + stereo.setLeftRightCheck.assert_called_once_with(True) + stereo.setExtendedDisparity.assert_called_once_with(False) + + def test_mono_cameras_linked_to_stereo(self): + """mono_left.out.link and mono_right.out.link must each be called once.""" + nodes = [] + pipeline = MagicMock() + pipeline.create.side_effect = lambda _: (nodes.append(MagicMock()) or nodes[-1]) + + create_stereo_depth(pipeline) + + # nodes[0]=mono_left, nodes[1]=mono_right, nodes[2]=stereo + mono_left, mono_right, _ = nodes + mono_left.out.link.assert_called_once() + mono_right.out.link.assert_called_once() + + +# --------------------------------------------------------------------------- +# spatial_detection_node tests +# --------------------------------------------------------------------------- + + +class TestCreateSpatialDetectionNetwork: + def test_returns_network_and_camera(self): + pipeline = _make_pipeline() + stereo = MagicMock() + network, cam = create_spatial_detection_network(pipeline, stereo) + assert network is not None + assert cam is not None + + def test_creates_two_nodes(self): + """Expects: color_cam + YoloSpatialDetectionNetwork = 2 calls.""" + pipeline = _make_pipeline() + stereo = MagicMock() + create_spatial_detection_network(pipeline, stereo) + assert pipeline.create.call_count == 2 + + def test_color_camera_preview_size(self): + pipeline = _make_pipeline() + stereo = MagicMock() + _, cam = create_spatial_detection_network(pipeline, stereo) + cam.setPreviewSize.assert_called_once_with(416, 416) + + def test_confidence_threshold_set(self): + pipeline = _make_pipeline() + stereo = MagicMock() + network, _ = create_spatial_detection_network(pipeline, stereo) + network.setConfidenceThreshold.assert_called_once_with(0.5) + + def test_depth_linked_to_network(self): + """stereo.depth.link(spatial_detection.inputDepth) must be called.""" + pipeline = _make_pipeline() + stereo = MagicMock() + network, _ = create_spatial_detection_network(pipeline, stereo) + stereo.depth.link.assert_called_once_with(network.inputDepth) + + def test_color_preview_linked_to_network(self): + pipeline = _make_pipeline() + stereo = MagicMock() + network, cam = create_spatial_detection_network(pipeline, stereo) + cam.preview.link.assert_called_once_with(network.input) + + def test_custom_model_path_used(self): + pipeline = _make_pipeline() + stereo = MagicMock() + network, _ = create_spatial_detection_network( + pipeline, stereo, model_path="/fake/model.blob" + ) + network.setBlobPath.assert_called_once_with("/fake/model.blob") + + def test_default_model_downloaded_when_no_path(self): + import blobconverter + + blobconverter.from_zoo.reset_mock() + blobconverter.from_zoo.return_value = "/mocked/zoo_model.blob" + pipeline = _make_pipeline() + stereo = MagicMock() + network, _ = create_spatial_detection_network(pipeline, stereo, model_path=None) + blobconverter.from_zoo.assert_called_once() + network.setBlobPath.assert_called_once_with("/mocked/zoo_model.blob") + + +# --------------------------------------------------------------------------- +# object_tracker_node tests +# --------------------------------------------------------------------------- + + +class TestCreateObjectTracker: + def test_returns_tracker(self): + pipeline = _make_pipeline() + spatial_detection = MagicMock() + tracker = create_object_tracker(pipeline, spatial_detection) + assert tracker is not None + + def test_creates_one_node(self): + pipeline = _make_pipeline() + spatial_detection = MagicMock() + create_object_tracker(pipeline, spatial_detection) + assert pipeline.create.call_count == 1 + + def test_tracks_only_person_class(self): + pipeline = _make_pipeline() + spatial_detection = MagicMock() + tracker = create_object_tracker(pipeline, spatial_detection) + tracker.setDetectionLabelsToTrack.assert_called_once_with([0]) + + def test_tracker_type_set(self): + pipeline = _make_pipeline() + spatial_detection = MagicMock() + tracker = create_object_tracker(pipeline, spatial_detection) + tracker.setTrackerType.assert_called_once_with( + _dai.TrackerType.ZERO_TERM_COLOR_HISTOGRAM + ) + + def test_detections_linked_to_tracker(self): + """spatial_detection.out.link(tracker.inputDetections) must be called.""" + pipeline = _make_pipeline() + spatial_detection = MagicMock() + tracker = create_object_tracker(pipeline, spatial_detection) + spatial_detection.out.link.assert_called_once_with(tracker.inputDetections) + + def test_passthrough_linked_twice(self): + """passthrough links to both inputTrackerFrame and inputDetectionFrame.""" + pipeline = _make_pipeline() + spatial_detection = MagicMock() + tracker = create_object_tracker(pipeline, spatial_detection) + assert spatial_detection.passthrough.link.call_count == 2 + link_targets = {c.args[0] for c in spatial_detection.passthrough.link.call_args_list} + assert tracker.inputTrackerFrame in link_targets + assert tracker.inputDetectionFrame in link_targets