diff --git a/DepthCamera/BOVandBeaconKPModel.pt b/DepthCamera/BOVandBeaconKPModel.pt new file mode 100644 index 0000000..d3032d0 Binary files /dev/null and b/DepthCamera/BOVandBeaconKPModel.pt differ diff --git a/DepthCamera/BOVandBeaconKPModel2.pt b/DepthCamera/BOVandBeaconKPModel2.pt new file mode 100644 index 0000000..ed7453c Binary files /dev/null and b/DepthCamera/BOVandBeaconKPModel2.pt differ diff --git a/DepthCamera/detectBackAndCoordinates.py b/DepthCamera/detectBackAndCoordinates.py index 253c397..954e9dc 100644 --- a/DepthCamera/detectBackAndCoordinates.py +++ b/DepthCamera/detectBackAndCoordinates.py @@ -1,14 +1,14 @@ -# This script currently utilizes the YOLOv8 keypoint model to identify the back of the compartment holding -# the jetson nano of the lead vehicle WITHOUT LED beacon attachments. The YOLOv8 model is trained to -# identify the back of the vehicle and mark the 4 corners of the back in order to construct the necessary +# This script currently utilizes the YOLO26 keypoint model to identify the back of the compartment holding +# the jetson nano of the lead vehicle WITH LED beacon attachments. The YOLO26 model is trained to +# identify the back of the vehicle and mark the center of each beacon in order to construct the necessary # points needed for its yaw, in relation to the follower vehicle. The depth camera also utilizes these points # to calculate the xyz coordinates/position of the lead vehicle. The formatData function currently -# converts the xyz and yaw data into hexadecimal digits for serial communication with CAN. +# converts the xyz and yaw data into hexadecimal digits for possible serial communication with CAN. +# This script is currently made to run on a pc with a keyboard. -# Notes concerning current YOLOv8 model: -# Keypoint location is somewhat inconsistent with movement which is likely due to not having a -# consistent point when annotating/training the model leading to floating in tests. Could also -# be due to lack of image data/variation used in training. +# Notes concerning current YOLO26 model: +# still has floating points when in unfamiliar positions (mostly at different heights and rotations +# of the depth camera (pitch and roll)) import pyrealsense2 as rs import numpy as np @@ -17,6 +17,7 @@ import math import serial import time +import csv # to convert metrics for testing (meters to inches) MTI = 39.37 @@ -46,7 +47,7 @@ def main(): pipeline.start(config) # select machine learning model - model = YOLO("BOVKeypointModel2.pt") + model = YOLO("BOVandBeaconKPModel2.pt") # for color and depth stream alignment align = rs.align(rs.stream.color) @@ -72,27 +73,26 @@ def main(): # initialize array of keypoint coordinates in meters (x, y, z) points_mc = [[-1, -1, -1] for _ in range(4)] + centerFound = False + # extract data from keypoints and translate into 3D coordinates for result in results: - boxes = result.boxes - for box in boxes: - box_conf = box.conf - # continue code if back identified is more than 70% confident - if box_conf <= 0.7: - continue - print(f"back detected") - # get box dimensions and display on stream - x1, y1, x2, y2 = map(int, box.xyxy[0]) - cv2.rectangle(color_image, (x1, y1), (x2, y2), (0, 0, 255), 2) - - for kps in result.keypoints.xy: - confs = result.keypoints.conf - for i in range(4): - if confs[0][i] <= 0.7: + for i, box in enumerate(result.boxes): + # check if it's a beacon or the center of the vehicle + if model.names[int(box.cls)] == 'beacons': + if float(box.conf) < 0.7: + continue + print(f"beacons detected") + # get box dimensions and display on stream + x1, y1, x2, y2 = map(int, box.xyxy[0]) + cv2.rectangle(color_image, (x1, y1), (x2, y2), (0, 0, 255), 2) + for j, kp in enumerate(result.keypoints.xy[i]): + # confidence of keypoint j of object i + if result.keypoints.conf[i][j] < 0.7: continue - x = int(kps[i][0]) - y = int(kps[i][1]) - + x = int(kp[0]) + y = int(kp[1]) + # convert to 3D coordinates if x == RES_WIDTH: x -= 1 @@ -101,38 +101,91 @@ def main(): depth = depth_frame.get_distance(x, y) depth_intrin = depth_frame.profile.as_video_stream_profile().intrinsics point = rs.rs2_deproject_pixel_to_point(depth_intrin, [x, y], depth) - - # 0 = tr, 1 = br, 2 = bl, 3 = tl - cv2.circle(color_image, (x, y), 2, (0, 0, 255), 1) + + if j == 0: + cv2.circle(color_image, (x, y), 4, (0, 0, 255), 3) # red + elif j == 1: + cv2.circle(color_image, (x, y), 4, (255, 0, 0), 3) # blue + elif j == 2: + cv2.circle(color_image, (x, y), 4, (0, 255, 0), 3) # green + elif j == 3: + cv2.circle(color_image, (x, y), 4, (255, 0, 255), 3) # purple + else: + cv2.circle(color_image, (x, y), 4, (0, 0, 0), 3) # black # add into arrays - points_rc[i] = [x, y] - points_mc[i] = point - print(f"Keypoint {i} depth: {depth}, coords: {points_mc[i]}") - - # use 3D coordinates to find direction/angle of vehicle + points_rc[j] = [x, y] + points_mc[j] = point + print(f"Keypoint {j} depth: {depth}, coords: {points_mc[j]}") + elif model.names[int(box.cls)] == 'vehicle': + if float(box.conf) < 0.7: + continue + if result.keypoints.conf[i][0] < 0.7: + continue + print(f"vehicle with center detected") + centerFound = True + # get box dimensions and display on stream + x1, y1, x2, y2 = map(int, box.xyxy[0]) + cv2.rectangle(color_image, (x1, y1), (x2, y2), (0, 0, 255), 3) + + cx = int(result.keypoints.xy[i][0][0]) + cy = int(result.keypoints.xy[i][0][1]) + cz = depth_frame.get_distance(cx, cy) + cv2.circle(color_image, (cx, cy), 4, (255, 255, 255), 3) # white + # convert center coordinates to meters and display + depth_intrin = depth_frame.profile.as_video_stream_profile().intrinsics + centerCoords = rs.rs2_deproject_pixel_to_point(depth_intrin, [cx, cy], cz) + # calculate yaw using detected beacon positions # first check if the points exist (need 3 existing) n = calculateNormal(points_mc) if n[0] == -1: - print(f"3 points could not be identified\n") + print(f"3 points could not be identified for yaw") + yaw = -1 else: yaw = getYaw(n) - p1 = int((points_rc[0][0] + points_rc[3][0]) / 2) - p2 = int((points_rc[0][1] + points_rc[1][1]) / 2) - z = depth_frame.get_distance(p1, p2) - cv2.circle(color_image, (p1, p1), 2, (255, 0, 0), 1) - depth_intrin = depth_frame.profile.as_video_stream_profile().intrinsics - point = rs.rs2_deproject_pixel_to_point(depth_intrin, [x, y], z) - print(f"X: {round(point[0] * MTI, 2)}, Y: {round(point[1] * MTI, 2)}, Z: {round(point[2] * MTI, 2)}, Yaw: {round(yaw, 2)}") - + + # edge cases + # vehicle center detected and 0-2 beacons, move towards center + translate = translateDetections(points_rc, centerFound) + if translate == 0: + locatable = True + # no vehicle center but bottom left beacon detected, look/move more right + elif translate == 1: + locatable = False + print("move/look more right, left beacon detected") + # no vehicle center but bottom right beacon detected, look/move more left + elif translate == 2: + locatable = False + print("move/look more left, right beacon detected") + # 3+ beacons and center + elif translate == 3: + locatable = True + # none detected + else: + locatable = False + + # MAYBE IMPORTANT: assuming that if 3 beacons are detected, then center should be in view as well + if locatable: + # for writing to csv file + # with open("output.csv", mode="a", newline="", encoding="utf-8") as file: + # writer = csv.writer(file) + # data = (f"{centerCoords[0]} {centerCoords[1]} {centerCoords[2]} {yaw}") + # writer.writerow([data]) + # print coords to center with yaw + print(f"Inches: X: {round(centerCoords[0] * MTI, 2)}, Y: {round(centerCoords[1] * MTI, 2)}, Z: {round(centerCoords[2] * MTI, 2)}, Yaw: {round(yaw, 2)}") + print(f"Meters: X: {round(centerCoords[0], 2)}, Y: {round(centerCoords[1], 2)}, Z: {round(centerCoords[2], 2)}, Yaw: {round(yaw, 2)}") + # format data for CAN bus (x = left and right, y = up and down, z = back and forth) - data = formatData(x, y, z, yaw) - + data = formatData(centerCoords[0], centerCoords[1], centerCoords[2], yaw, translate) + + # write the serial data and display # ser.write(data) - print(f"Data in hex: {data}\n") + print(f"Data in hex: {data}") cv2.imshow('RBG Stream', color_image) key = cv2.waitKey(1) + + # stop when 'q' or 'esc' is pressed if key & 0xFF == ord('q') or key == 27: cv2.destroyAllWindows() break @@ -153,6 +206,7 @@ def calculateNormal(points): p3 = point i += 1 + # return vector outside of range if less than 3 valid points if i < 3: return [-1, -1, -1] @@ -161,7 +215,7 @@ def calculateNormal(points): v = [p3[0] - p1[0], p3[1] - p1[1], p3[2] - p1[2]] n = [u[1]*v[2] - u[2]*v[1], u[2]*v[0] - u[0]*v[2], u[0]*v[1] - u[1]*v[0]] - # keep normal plane consistent + # keep normal plane consistent (only viewing from the back) if n[2] < 0: n[2] = -n[2] @@ -169,52 +223,69 @@ def calculateNormal(points): def getYaw(n): yaw_rad = math.atan2(n[2], n[0]) - yaw_deg = math.degrees(yaw_rad) + yaw_deg = math.degrees(yaw_rad) - 90 return yaw_deg +def translateDetections(points_rc, centerFound): + # 0 = center and < two beacons, 1 = bottom left, 2 = bottom right, 3 = all, -1 = none + count = 0 + for point in points_rc: + if point[0] != -1: + count += 1 + if centerFound and count <= 2: + return 0 + elif not centerFound and count == 1: + if points_rc[3] == -1: + return 1 + elif points_rc[2] == -1: + return 2 + else: + return -1 + elif centerFound and count >= 3: + return 3 + else: + return -1 + # format data into CAN bus hex number 0x370 00(x) 0(y) 000(z) 00(yaw angle) # for depth up to ~10m (0.00245m per bit for 4096), left/right from -2.5m to 2.5m (0.0196m per bit for 256), # up/down from -0.5m to 0.5m (0.0625m per bit for 16), yaw angle from -80 to 80 degrees (0.625 degrees per bit for 256) -def formatData(x, y, z, yaw): +def formatData(x, y, z, yaw, translate): # format distance (depth) - z_hex = hex(round(z / DIST_MPB)) + if z >= 4096 * DIST_MPB: + z_hex = hex(4096) + else: + z_hex = hex(round(z / DIST_MPB)) # format left/right, can be negative so normalize: 0m = 128 bits - if abs(x) >= (256 * LR_MPB / 2): + if abs(x) >= (256 * LR_MPB) / 2: if x < 0: x_hex = hex(0) else: x_hex = hex(255) else: - if x < 0: - x_hex = hex(128 + round(x / LR_MPB)) - else: - x_hex = hex(round(x / LR_MPB) + 128) + x_hex = hex(128 + round(x / LR_MPB)) # format up/down (0m = 8 bits) - if abs(y) >= (16 * UD_MPB / 2): + if abs(y) >= (16 * UD_MPB) / 2: if y < 0: y_hex = hex(0) else: y_hex = hex(15) else: - if y < 0: - y_hex = hex(8 + round(y / UD_MPB)) - else: - y_hex = hex(round(y / UD_MPB) + 8) + y_hex = hex(8 + round(y / UD_MPB)) - # format yaw angle (0m = 128 bits) - if abs(yaw) >= 2.5088: + # format yaw angle (0 degrees = 128 bits) + if abs(yaw) >= (256 * YAW_MPB) / 2: if yaw < 0: yaw_hex = hex(0) else: yaw_hex = hex(255) else: - if yaw < 0: - yaw_hex = hex(128 + round(yaw / YAW_MPB)) - else: - yaw_hex = hex(round(yaw / YAW_MPB) + 128) + yaw_hex = hex(128 + round(yaw / YAW_MPB)) + + if translate == 0: + yaw_hex = hex(128) - return "370" + x_hex.removeprefix("0x") + y_hex.removeprefix("0x") + z_hex.removeprefix("0x") + yaw_hex.removeprefix("0x") + return "0x370 " + x_hex.removeprefix("0x") + y_hex.removeprefix("0x") + z_hex.removeprefix("0x") + yaw_hex.removeprefix("0x") main() \ No newline at end of file diff --git a/DepthCamera/image_capture.py b/DepthCamera/image_capture.py new file mode 100644 index 0000000..41ad7c2 --- /dev/null +++ b/DepthCamera/image_capture.py @@ -0,0 +1,53 @@ +import pyrealsense2 as rs +import numpy as np +import cv2 +import os + +# change save location accordingly +saveLocation = r"C:\Users\ethan\Intel RealSense\code\beacon image data" +os.makedirs(saveLocation, exist_ok = True) + +pipeline = rs.pipeline() +config = rs.config() +config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30) +config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) + +i = 0 +pipeline.start(config) +align = rs.align(rs.stream.color) + +try: + while True: + frames = pipeline.wait_for_frames() + aligned_frames = align.process(frames) + color_frame = aligned_frames.get_color_frame() + depth_frame = aligned_frames.get_depth_frame() + if not color_frame or not depth_frame: + continue + + color_image = np.asanyarray(color_frame.get_data()) + depth_image = np.asanyarray(depth_frame.get_data()) + depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET) + + cv2.imshow('Color', color_image) + + key = cv2.waitKey(1) + + # save frame as image after clicking space bar + if key & 0xFF == ord(' '): + # naming file + color_filename = os.path.join(saveLocation, f"color_im_{i}.jpg") + depth_filename = os.path.join(saveLocation, f'depth_im_{i}.png') + + # writing file + cv2.imwrite(color_filename, color_image) + cv2.imwrite(depth_filename, depth_colormap) + + i += 1 + # ends when pressing 'q' or reaching 2000 images + elif key == ord('q') or i == 2000: + cv2.destroyAllWindows() + break + +finally: + pipeline.stop() \ No newline at end of file diff --git a/DepthCamera/output.csv b/DepthCamera/output.csv new file mode 100644 index 0000000..9ec91c9 --- /dev/null +++ b/DepthCamera/output.csv @@ -0,0 +1,205 @@ +starts at 16ft and each space = +1ft +x, y, z, yaw +-0.05527135357260704 0.43838056921958923 5.070000171661377 -57.941746813440474 +-0.055740129202604294 0.44209858775138855 5.113000392913818 -53.157565876658126 +-0.055740129202604294 0.43361353874206543 5.113000392913818 -71.13630496470527 +-0.05482438951730728 0.42648983001708984 5.029000282287598 -63.91572963263546 +-0.05482438951730728 0.42648983001708984 5.029000282287598 -55.903472529658906 +-0.05482438951730728 0.4348354637622833 5.029000282287598 -53.85625931369656 +-0.054377421736717224 0.42301279306411743 4.988000392913818 -55.60411761442025 +-0.05527135357260704 0.43838056921958923 5.070000171661377 -33.77847867456297 +-0.05482438951730728 0.42648983001708984 5.029000282287598 -58.59776105939386 +-0.055740129202604294 0.43361353874206543 5.113000392913818 -55.83250221580392 +-0.05482438951730728 0.42648983001708984 5.029000282287598 -62.8218353979766 + +-0.14321425557136536 0.41731885075569153 4.648000240325928 39.77699919806187 +-0.1442926675081253 0.4204612970352173 4.683000087738037 54.879013793457744 +-0.14654195308685303 0.4270155727863312 4.75600004196167 39.94785851614998 +-0.1442926675081253 0.4204612970352173 4.683000087738037 29.96661784253837 +-0.1442926675081253 0.4204612970352173 4.683000087738037 29.386713555089443 +-0.1442926675081253 0.4204612970352173 4.683000087738037 45.136098495982 +-0.1442926675081253 0.4204612970352173 4.683000087738037 24.816186604246496 +-0.1442926675081253 0.4204612970352173 4.683000087738037 45.58858135371378 +-0.1442926675081253 0.4204612970352173 4.683000087738037 6.827382676340292 +-0.14321425557136536 0.41731885075569153 4.648000240325928 23.897059372743726 +-0.14654195308685303 0.4270155727863312 4.75600004196167 48.97977861387781 + +-0.21813493967056274 0.4139386713504791 4.446000099182129 30.888038014968316 +-0.21970495581626892 0.40948671102523804 4.478000164031982 -17.554510547315672 +-0.21656490862369537 0.40363427996635437 4.414000034332275 10.651696478208123 +-0.21813493967056274 0.4065605103969574 4.446000099182129 49.9849580739876 +-0.21813493967056274 0.4065605103969574 4.446000099182129 45.190319400615806 +-0.21813493967056274 0.4065605103969574 4.446000099182129 47.68810983458255 +-0.21970495581626892 0.40948671102523804 4.478000164031982 54.41309572396679 +-0.21656490862369537 0.40363427996635437 4.414000034332275 49.790742038703854 +-0.21813493967056274 0.4065605103969574 4.446000099182129 34.313478073162244 +-0.21813493967056274 0.4065605103969574 4.446000099182129 50.06548963204142 +-0.21813493967056274 0.4065605103969574 4.446000099182129 49.45428128704063 + +-0.2840331196784973 0.36973297595977783 4.118000030517578 -53.59134633532932 +-0.2802395820617676 0.36479485034942627 4.063000202178955 -35.85200908388515 +-0.2783772945404053 0.36237066984176636 4.0360002517700195 -46.706803514839514 +-0.2716807723045349 0.36237066984176636 4.0360002517700195 -24.65530258659099 +-0.2802395820617676 0.36479485034942627 4.063000202178955 -35.177881242181144 +-0.2821018695831299 0.3672190308570862 4.090000152587891 -55.609150715005285 +-0.2802395820617676 0.36479485034942627 4.063000202178955 -22.516685098595474 +-0.2802395820617676 0.36479485034942627 4.063000202178955 -37.10297227204435 +-0.2802395820617676 0.36479485034942627 4.063000202178955 -28.678350262881523 +-0.2802395820617676 0.36479485034942627 4.063000202178955 -40.34674178914366 +-0.2821018695831299 0.3672190308570862 4.090000152587891 -40.14091297851499 +-0.2840331196784973 0.36289915442466736 4.118000030517578 -47.983346718605326 + +-0.3408043384552002 0.3379492461681366 3.764000177383423 -2.96352741074935 +-0.3408043384552002 0.3379492461681366 3.764000177383423 7.785304575930908 +-0.3450598418712616 0.3421691060066223 3.811000108718872 11.608216326525607 +-0.3408043384552002 0.3379492461681366 3.764000177383423 4.0622926396349754 +-0.3408043384552002 0.3379492461681366 3.764000177383423 8.04589632604143 +-0.3428868055343628 0.33372974395751953 3.7870001792907715 8.696828456247331 +-0.3450598418712616 0.3421691060066223 3.811000108718872 -6.680459640933094 +-0.3428868055343628 0.3400143086910248 3.7870001792907715 18.869755078794284 +-0.3450598418712616 0.3358447551727295 3.811000108718872 -9.812303166794436 +-0.3450598418712616 0.3358447551727295 3.811000108718872 -9.923654776824193 +-0.3428868055343628 0.33372974395751953 3.7870001792907715 28.545558131742695 +-0.3450598418712616 0.3358447551727295 3.811000108718872 4.357102321930242 +-0.3428868055343628 0.33372974395751953 3.7870001792907715 -6.475336489418794 + +-0.2169463336467743 0.3381241261959076 3.390000104904175 22.73772490239719 +-0.2101372331380844 0.33622902631759644 3.371000051498413 17.126843727909417 +-0.2113216370344162 0.3381241261959076 3.390000104904175 14.611826319083804 +-0.21809826791286469 0.3399195075035095 3.4080002307891846 11.42470697586738 +-0.21809826791286469 0.3399195075035095 3.4080002307891846 25.13685019070357 +-0.21244370937347412 0.3399195075035095 3.4080002307891846 36.73454079105041 +-0.21244370937347412 0.3399195075035095 3.4080002307891846 40.84342100831887 +-0.2113216370344162 0.3381241261959076 3.390000104904175 17.133471951383385 +-0.20901519060134888 0.3344337046146393 3.3530001640319824 14.220357215553065 +-0.2113216370344162 0.3381241261959076 3.390000104904175 17.133471951383385 +-0.2113216370344162 0.3381241261959076 3.390000104904175 11.819757115327036 +-0.21244370937347412 0.3399195075035095 3.4080002307891846 8.701023861719136 + +-0.08086175471544266 0.31738555431365967 3.130000114440918 8.123930402286263 +-0.08086175471544266 0.31738555431365967 3.130000114440918 10.544572947971346 +-0.0812751054763794 0.3190079927444458 3.1460001468658447 10.306143436857198 +-0.08086175471544266 0.31738555431365967 3.130000114440918 7.648084680158931 +-0.08044839650392532 0.3157631456851959 3.114000082015991 22.244113453491295 +-0.08171428740024567 0.3259808123111725 3.1630001068115234 22.547308726223406 +-0.08086175471544266 0.32257983088493347 3.130000114440918 20.561984203751592 +-0.08044839650392532 0.3209308385848999 3.114000082015991 18.08381816971867 +-0.0812751054763794 0.32422879338264465 3.1460001468658447 20.29412430583163 +-0.08086175471544266 0.32257983088493347 3.130000114440918 20.29412430583163 +-0.08171428740024567 0.3259808123111725 3.1630001068115234 22.44717151805925 +-0.08086175471544266 0.32257983088493347 3.130000114440918 17.7700679133268 + +-0.012056753970682621 0.35703232884407043 2.827000141143799 2.390231813651809 +-0.08320214599370956 0.3414973318576813 2.8540000915527344 4.092980704637654 +-0.06834337115287781 0.3241923749446869 2.827000141143799 -1.5985324691885126 +-0.06802909076213837 0.31336188316345215 2.814000129699707 2.308514672144071 +-0.06802909076213837 0.31336188316345215 2.814000129699707 -3.425667839784424 +-0.06834337115287781 0.31480953097343445 2.827000141143799 -1.5902118204867293 +-0.06834337115287781 0.31480953097343445 2.827000141143799 0.2594393910196118 +-0.06802909076213837 0.31336188316345215 2.814000129699707 4.080210577680887 +-0.06834337115287781 0.31480953097343445 2.827000141143799 2.303458059925447 +-0.06834337115287781 0.31480953097343445 2.827000141143799 2.3708919703628197 +-0.06802909076213837 0.31336188316345215 2.814000129699707 4.147083597183411 +-0.06802909076213837 0.31336188316345215 2.814000129699707 4.199359323081552 +-0.06834337115287781 0.31480953097343445 2.827000141143799 -1.5703737273720293 + +-0.044284556061029434 0.28955987095832825 2.5250000953674316 3.2551593765362696 +-0.04445994272828102 0.2864997982978821 2.5350000858306885 6.282832706784234 +-0.04465286061167717 0.2877429723739624 2.5460000038146973 3.197593944372599 +-0.04445994272828102 0.2864997982978821 2.5350000858306885 7.72387403721531 +-0.04409163445234299 0.2841264307498932 2.514000177383423 4.895061616733898 +-0.04445994272828102 0.2864997982978821 2.5350000858306885 6.189605305918732 +-0.04409163445234299 0.2841264307498932 2.514000177383423 4.599595608223723 +-0.04445994272828102 0.2864997982978821 2.5350000858306885 6.136257048866639 +-0.04465286061167717 0.2877429723739624 2.5460000038146973 3.2766527174363347 +-0.04445994272828102 0.2864997982978821 2.5350000858306885 7.72387403721531 +-0.04465286061167717 0.2877429723739624 2.5460000038146973 6.135170891761277 + +-0.016501160338521004 0.2748151123523712 2.1760001182556152 -3.3630217762390515 +-0.020250212401151657 0.27307355403900146 2.19100022315979 -2.376979899988683 +-0.016501160338521004 0.27120402455329895 2.1760001182556152 -4.5677206478482475 +-0.016554241999983788 0.27207645773887634 2.183000087738037 0.824868299386992 +-0.020111573860049248 0.27120402455329895 2.1760001182556152 -5.750409228672481 +-0.01644049398601055 0.2702069580554962 2.1680002212524414 3.2710649366200784 +-0.016554241999983788 0.27207645773887634 2.183000087738037 -4.747152851548009 +-0.016554241999983788 0.27207645773887634 2.183000087738037 -0.19855887094652758 +-0.016554241999983788 0.27207645773887634 2.183000087738037 -4.666140455571423 +-0.01661490835249424 0.27670952677726746 2.19100022315979 -2.444685682765339 +-0.016554241999983788 0.27207645773887634 2.183000087738037 -1.497010414125711 +-0.020176270976662636 0.27207645773887634 2.183000087738037 -5.8019656725732744 +-0.016554241999983788 0.27207645773887634 2.183000087738037 -2.43066331142208 +-0.016675574705004692 0.2777198553085327 2.199000120162964 -3.6107989670369562 + +-0.008098965510725975 0.2650429606437683 1.8990000486373901 -5.905759523375266 +-0.004948149900883436 0.2650429606437683 1.8990000486373901 -5.05142369348583 +-0.008098965510725975 0.2650429606437683 1.8990000486373901 -4.330641780660201 +-0.008052052929997444 0.2603745460510254 1.8880001306533813 -5.119842831754966 +-0.004948149900883436 0.2650429606437683 1.8990000486373901 -4.99941608306149 +-0.008052052929997444 0.2635076940059662 1.8880001306533813 -5.8450266366023556 +-0.0049194879829883575 0.2603745460510254 1.8880001306533813 -4.331905027768926 +-0.004948149900883436 0.2650429606437683 1.8990000486373901 -4.197683161030696 +-0.008077641017735004 0.26434510946273804 1.8940000534057617 -4.3280014379022305 +-0.008098965510725975 0.2650429606437683 1.8990000486373901 -4.33192525611598 +-0.008098965510725975 0.2650429606437683 1.8990000486373901 -3.511332126366 +-0.008052052929997444 0.2635076940059662 1.8880001306533813 -3.5638832177764357 + +0.03505006060004234 0.23781602084636688 1.5730000734329224 -3.4864616915029387 +0.03505006060004234 0.23781602084636688 1.5730000734329224 -2.9950655366101984 +0.035228319466114044 0.24164918065071106 1.5810000896453857 -1.9202350457678818 +0.035139188170433044 0.2410377860069275 1.5770000219345093 -1.3618435668249447 +0.035139188170433044 0.2410377860069275 1.5770000219345093 -1.853153893500874 +0.035139188170433044 0.2410377860069275 1.5770000219345093 -2.979354517893171 +0.03505006060004234 0.24042640626430511 1.5730000734329224 -1.8464174621272633 +0.03496093302965164 0.23981502652168274 1.5690001249313354 -2.9671645379160054 +0.035228319466114044 0.24164918065071106 1.5810000896453857 -2.959120013773628 +0.03505006060004234 0.24042640626430511 1.5730000734329224 -1.8490249501314366 +0.035139188170433044 0.2410377860069275 1.5770000219345093 -2.2792757727450237 +0.03505006060004234 0.24042640626430511 1.5730000734329224 -2.2761924414835306 +0.035139188170433044 0.2410377860069275 1.5770000219345093 -1.86099560135537 +0.035139188170433044 0.2410377860069275 1.5770000219345093 -3.4845423909073787 +0.03505006060004234 0.24042640626430511 1.5730000734329224 -2.9870732462060516 + +0.04677935317158699 0.22967511415481567 1.2570000886917114 -2.5385873092975686 +0.046593278646469116 0.22876152396202087 1.252000093460083 -3.041079600702389 +0.046593278646469116 0.23083922266960144 1.252000093460083 -2.048736943335527 +0.046891000121831894 0.23231422901153564 1.2600001096725464 -1.7716952757196083 +0.04670492559671402 0.23139235377311707 1.255000114440918 -2.38106348136796 +0.04651884734630585 0.2304704487323761 1.25 -3.1380224178237768 +0.04651884734630585 0.2304704487323761 1.25 -2.858989798260666 +0.04670492559671402 0.23139235377311707 1.255000114440918 -2.3400402750547897 +0.046891000121831894 0.23231422901153564 1.2600001096725464 -2.8306645450541197 +0.04677935317158699 0.23176109790802002 1.2570000886917114 -2.335027200020221 +0.046965427696704865 0.2326829731464386 1.2620000839233398 -3.419497761400649 +0.046891000121831894 0.23231422901153564 1.2600001096725464 -2.688999779114269 + +0.05756951868534088 0.2047608345746994 0.9270000457763672 -0.6459299729065009 +0.05825265124440193 0.20719057321548462 0.9380000233650208 1.8732544970111888 +0.05819054692983627 0.20696969330310822 0.937000036239624 1.59753644639558 +0.05775582790374756 0.205423504114151 0.9300000667572021 0.3033006394515212 +0.058066342025995255 0.2065279334783554 0.9350000619888306 0.7143600723996997 +0.05756951868534088 0.2047608345746994 0.9270000457763672 1.7269010198777721 +0.058004237711429596 0.2063070386648178 0.9340000152587891 0.8360781319078683 +0.05788003280758858 0.2058652639389038 0.9320000410079956 1.197783678768488 +0.05781793221831322 0.2056443840265274 0.9310000538825989 1.0613810577378189 +0.05775582790374756 0.205423504114151 0.9300000667572021 1.9125303988259645 +0.058004237711429596 0.2063070386648178 0.9340000152587891 0.8783676748475671 +0.05775582790374756 0.205423504114151 0.9300000667572021 1.0531929179267365 +0.05788003280758858 0.2058652639389038 0.9320000410079956 1.9639764290345738 +0.05781793221831322 0.2056443840265274 0.9310000538825989 1.7677042617549006 +0.058004237711429596 0.2063070386648178 0.9340000152587891 0.8828780112664703 + +0.06459353864192963 0.1867215484380722 0.5950000286102295 -1 +0.0654236376285553 0.19104084372520447 0.612000048160553 -1 +0.06488913297653198 0.18948006629943848 0.6070000529289246 -1 +0.06535346806049347 0.1879192739725113 0.6020000576972961 -1 +0.06546202301979065 0.18723073601722717 0.6030000448226929 -1 +0.06654762476682663 0.1903357207775116 0.6130000352859497 -1 +0.06654762476682663 0.1903357207775116 0.6130000352859497 -1 +0.06589626520872116 0.18847273290157318 0.6070000529289246 -1 +0.06546202301979065 0.18723073601722717 0.6030000448226929 -1 +0.06488913297653198 0.18948006629943848 0.6070000529289246 -1 +0.06488913297653198 0.18948006629943848 0.6070000529289246 -1 +0.0654236376285553 0.19104084372520447 0.612000048160553 -1 +0.06553053855895996 0.19135300815105438 0.6130000352859497 -1 +0.06546202301979065 0.1882314234972 0.6030000448226929 -1 +0.06557058542966843 0.18754123151302338 0.6040000319480896 -1 \ No newline at end of file