diff --git a/.gitignore b/.gitignore index 8b32ee8..0418c31 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,7 @@ __pycache__ *.so demonstrations/* plan.txt + +# Jetbrains +.idea/ +*.iml diff --git a/README.md b/README.md index a00ba56..16b9301 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,48 @@ Currently, the main script in the repo is `spot_localization.py`. Here is an exa python spot_utils/spot_localization.py --hostname 192.168.80.3 --map_name b45-621 ``` You can 'hijack' the robot via the tablet when prompted, move it around, and then have it print out its pose! We can then command it to navigate to any saved pose via other utilities (which are forthcoming). + +## Mapping +> Last Updated: 05/17/2025 + +Our code is currently designed to operate given a saved map of a particular +environment. The map is required to define a coordinate system that persists +between robot runs. Moreover, each map contains associated metadata information +that we use for visualization, collision checking, and a variety of other +functions. + +To create a new map of a new environment: +1. Print out and tape april tags around the environment. The tags are [here](https://support.bostondynamics.com/s/article/About-Fiducials) +2. Run the interactive script from the spot SDK to create a map, while walking + the spot around the environment. The script is [here](https://github.com/boston-dynamics/spot-sdk/blob/master/python/examples/graph_nav_command_line/recording_command_line.py) + - `python/examples/graph_nav_command_line/recording_command_line.py` + - See the Google doc for authentication info: https://docs.google.com/document/d/1BFIRWoBJyJk-XPf_4wVe616g_d3o7oDfB2ZuQyszcFU/edit?tab=t.0 + - Set the `BOSDYN_CLIENT_USERNAME` and `BOSDYN_CLIENT_PASSWORD` environment variable according to the authentication details in the doc. + - Run it with the `hostname` (i.e., the IP address). +3. Make sure to `(0) Clear map` first, otherwise the map construction may have dreams and do weird stuff +4. `(1) Start recording a map` +5. Hijack controls on the tablet, walk Spot around, create a bunch of waypoints using `(4) Create a default waypoint in the current robot's location.` +6. `(9) Automatically find and close loops.` then `(0) Close all loops.` +7. `(a) Optimize the map's anchoring.` +8. `(2) Stop recording a map.` +9. `(5) Download the map after recording.` +5. Save the map files to `spot_utils / graph_nav_maps / ` +6. Create a file named `metadata.yaml` if one doesn't already exist within the folder +associated with a map. See below for more details. +7. Set `--spot_graph_nav_map` to your new env name. + + +**Converting a map to a pointcloud** +1. Run [this script](https://github.com/boston-dynamics/spot-sdk/tree/master/python/examples/graph_nav_extract_point_cloud) on the pre-made map to yield an output `.ply` pointcloud file. +[Optional] + - `python/examples/graph_nav_extract_point_cloud/extract_point_cloud.py` +2. Install the [Open3D package](http://www.open3d.org/docs/release/getting_started.html) with `pip install open3d`. +3. Open up a python interpreter in your terminal, and run the following commands: +``` +import open3d as o3d + +pcd = o3d.io.read_point_cloud("") +o3d.visualization.draw_geometries_with_editing([pcd]) +``` +4. Within the window, do SHIFT + left click on a point to print out its 3D coords to the terminal. Copy the first two (x, y) of all the +boundary points into the yaml. Note that you can do SHIFT + right click to unselect a point. \ No newline at end of file diff --git a/exec_plan.py b/exec_plan.py index 25ec313..9574ace 100644 --- a/exec_plan.py +++ b/exec_plan.py @@ -22,8 +22,12 @@ close_gripper, move_hand_to_relative_pose, open_gripper, + stow_arm, ) -from skills.spot_navigation import navigate_to_absolute_pose +from skills.spot_navigation import ( + navigate_to_absolute_pose_precise, +) +from spot_utils.gemini_utils import get_pixel_from_gemini from spot_utils.perception.spot_cameras import capture_images from spot_utils.spot_localization import SpotLocalizer from spot_utils.utils import ( @@ -32,6 +36,9 @@ get_pixel_from_user, verify_estop, ) +import rerun as rr +from PIL import Image +import cv2 DEFAULT_HAND_LOOK_FLOOR_POSE = math_helpers.SE3Pose( x=0.80, y=0.0, z=0.25, rot=math_helpers.Quat.from_pitch(np.pi / 3) @@ -85,10 +92,13 @@ def map_to_spot(pose: math_helpers.SE2Pose) -> math_helpers.SE2Pose: def move_to(x_abs: float, y_abs: float, yaw_abs: float) -> None: """Move the robot to the specified absolute pose.""" + print(f"move_to(x_abs={x_abs}, y_abs={y_abs}, yaw_abs={yaw_abs}") desired_pose = math_helpers.SE2Pose(x=x_abs, y=y_abs, angle=yaw_abs) desired_pose_spot = map_to_spot(desired_pose) if ROBOT is not None and LOCALIZER is not None: - navigate_to_absolute_pose(ROBOT, LOCALIZER, desired_pose_spot) + navigate_to_absolute_pose_precise( + ROBOT, LOCALIZER, desired_pose_spot, tolerance=0.05 + ) def gaze(direction: str) -> None: @@ -102,20 +112,43 @@ def grasp(text_prompt: Optional[str]) -> None: """Grasp an object at a specified pixel.""" # Capture an image. camera = "hand_color_image" - if ROBOT is not None and LOCALIZER is not None: - rgbd = capture_images(ROBOT, LOCALIZER, [camera])[camera] - - if text_prompt and SAM_ENDPOINT: - # Select a pixel by querying GroundedSAM. - pixel = get_pixel_from_grounded_sam(rgbd.rgb, text_prompt, SAM_ENDPOINT) - else: - # Select a pixel by querying the user. - pixel = get_pixel_from_user(rgbd.rgb) - - if pixel is not None: - # Grasp at the pixel with a top-down grasp. - top_down_rot = math_helpers.Quat.from_pitch(np.pi / 2) - grasp_at_pixel(ROBOT, rgbd, pixel, grasp_rot=top_down_rot) + assert ROBOT is not None, "Sahit why!" + assert LOCALIZER is not None, "SAHIT WHY!!!!" + + images = capture_images(ROBOT, LOCALIZER, [camera]) + rgbd = images[camera] + rgb_np = rgbd.rgb + rr.log("rgb_raw", rr.Image(rgb_np)) + + # FIXME: Don't do this!!! Hiding implementation + # if text_prompt and SAM_ENDPOINT: + # # Select a pixel by querying GroundedSAM. + # pixel = get_pixel_from_grounded_sam(rgbd.rgb, text_prompt, SAM_ENDPOINT) + # else: + # # Select a pixel by querying the user. + # pixel = get_pixel_from_user(rgbd.rgb) + + # Call Gemini to point + vlm_query_template = f""" + Point to the {text_prompt}. If you cannot see the {text_prompt} fully, point to the best guess. + The answer should follow the json format: [{{"point": , "label": }}, ...]. The points are in [y, x] format normalized to 0-1000. + """ + image_pil = Image.fromarray(rgb_np) + pixel = get_pixel_from_gemini(vlm_query_template, image_pil) + + # Draw pixel on the image + bgr = cv2.cvtColor(rgb_np, cv2.COLOR_RGB2BGR) + cv2.circle(bgr, pixel, 5, (0, 0, 255), -1) + rgb_annotated = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB) + rr.log("pointing", rr.Image(rgb_annotated)) + + if pixel is not None: + # Grasp at the pixel with a top-down grasp. + top_down_rot = math_helpers.Quat.from_pitch(np.pi / 2) + grasp_at_pixel(ROBOT, rgbd, pixel, grasp_rot=top_down_rot) + return + else: + raise RuntimeError("WTF. Grasp failed!") def grasp_at_pose(X_RobEE: NDArray) -> None: @@ -148,6 +181,7 @@ def place_at_pose(X_RobEE: NDArray) -> None: if __name__ == "__main__": # running this script standalone initializes a bosdyn robot and localizer. # It then executes the list of commands provided in the plan file + rr.init("exec_plan", spawn=True) parser = argparse.ArgumentParser(description="Parse the robot's hostname.") parser.add_argument( "--hostname", @@ -178,7 +212,27 @@ def place_at_pose(X_RobEE: NDArray) -> None: SPOT_ROOM_POSE = metadata["spot-room-pose"] else: print("spot-room-pose not found in metadata.yaml, using default val") - SPOT_ROOM_POSE = {"x": 0.0, "y": 0.0, "z": 0.0} + SPOT_ROOM_POSE = {"x": 0.0, "y": 0.0, "z": 0.0, "angle": 0.0} + # Stow before running plan + + # grasp("teddy bear") + stow_arm(ROBOT) + # open_gripper(ROBOT) + # close_gripper(ROBOT) + # gaze("DOWN") + # move_to(x_abs=2.454116588554405, y_abs=-2.759339339399913, yaw_abs=-2.401609411896162) + # move_to(x_abs=2.542117893278808, y_abs=-0.752019696769485, yaw_abs=-1.933767708350784) + # + # move_to(x_abs=2.723552922357717, y_abs=-3.172621984462674, yaw_abs=-2.753087971468099) + # gaze("AHEAD") + # grasp("caterpillar") + # + # move_to(x_abs=4.471199645580120, y_abs=-3.217432928943325, yaw_abs=-0.023820034339159) + # place_at_pose([0.9594754639330341, 0.0, 0.09019530213554317, 0.0, 0.0, -0.18379480399141906, 0.9829646331510385]) + + # move_to(x_abs=4.483301381932474, y_abs=-3.486604871046227, yaw_abs=0.130814244458979) + # place_at_pose([0.8673816028445435, 0.0, -0.011952195088877238, 0.0, 0.0, 0.1621424933557064, 0.9867673544703406]) + # print() with open(args.plan, "r") as plan_file: exec(plan_file.read()) print("done") diff --git a/skills/spot_navigation.py b/skills/spot_navigation.py index 807831a..4cc87b0 100644 --- a/skills/spot_navigation.py +++ b/skills/spot_navigation.py @@ -18,7 +18,12 @@ from bosdyn.client.sdk import Robot from spot_utils.spot_localization import SpotLocalizer -from spot_utils.utils import get_graph_nav_dir, get_robot_state, verify_estop +from spot_utils.utils import ( + get_graph_nav_dir, + get_robot_state, + get_se2_distance, + verify_estop, +) def navigate_to_relative_pose( @@ -106,6 +111,57 @@ def navigate_to_absolute_pose( ) +def navigate_to_absolute_pose_precise( + robot: Robot, + localizer: SpotLocalizer, + target_pose: math_helpers.SE2Pose, + max_xytheta_vel: Tuple[float, float, float] = (2.0, 2.0, 1.0), + min_xytheta_vel: Tuple[float, float, float] = (-2.0, -2.0, -1.0), + timeout: float = 20.0, + tolerance: float = 0.05, + max_num_tries: int = 5, +) -> None: + """Move to the specific target absolute pose; potentially trying multiple + times. + """ + # First, localize the robot. + localizer.localize() + robot_pose = localizer.get_last_robot_pose() + robot_se2 = robot_pose.get_closest_se2_transform() + curr_dist_to_target = get_se2_distance(robot_se2, target_pose) + curr_tries = 0 + prev_dist_to_target = float("inf") + while curr_dist_to_target > tolerance and max_num_tries > curr_tries: + prev_dist_to_target = curr_dist_to_target + localizer.localize() + navigate_to_absolute_pose( + robot, localizer, target_pose, max_xytheta_vel, min_xytheta_vel, timeout + ) + # Re-localize the robot. + localizer.localize() + robot_pose = localizer.get_last_robot_pose() + robot_se2 = robot_pose.get_closest_se2_transform() + curr_dist_to_target = get_se2_distance(robot_se2, target_pose) + print(curr_dist_to_target) + # If the robot is not moving, we should move randomly backwards + # to avoid getting stuck. + if abs(curr_dist_to_target - prev_dist_to_target) < 0.01: + # Move backwards. + rel_pose = math_helpers.SE2Pose(x=-0.25, y=0, angle=0) + navigate_to_relative_pose( + robot, rel_pose, max_xytheta_vel, min_xytheta_vel, timeout + ) + curr_tries += 1 + if curr_dist_to_target > tolerance: + navigate_to_absolute_pose( + robot, localizer, target_pose, max_xytheta_vel, min_xytheta_vel, timeout + ) + print( + f"Failed to reach the target pose after {curr_tries} tries. " + f"Current distance to target: {curr_dist_to_target}" + ) + + if __name__ == "__main__": # Run this file alone to test manually. # Make sure to pass in --spot_robot_ip. diff --git a/spot_utils/388885845015.jpg b/spot_utils/388885845015.jpg new file mode 100644 index 0000000..1e6fe35 Binary files /dev/null and b/spot_utils/388885845015.jpg differ diff --git a/spot_utils/gemini_utils.py b/spot_utils/gemini_utils.py new file mode 100644 index 0000000..f518422 --- /dev/null +++ b/spot_utils/gemini_utils.py @@ -0,0 +1,98 @@ +import json +from typing import Tuple + +import PIL + +from spot_utils.pretrained_model_interface import GoogleGeminiVLM + + +def get_pixel_from_gemini( + vlm_query_str: str, pil_image: PIL.Image.Image +) -> Tuple[int, int]: + # Assuming create_vlm_by_name exists and works like create_llm_by_name + # Use the specific model name from CFG or hardcode if necessary + vlm = GoogleGeminiVLM("gemini-1.5-flash") + + # 2. Construct the query + # Adjust prompt as needed for better VLM performance + def parse_json_output(json_output_str): + # Parsing out the markdown fencing + lines = json_output_str.splitlines() + for i, line in enumerate(lines): + if line.strip() == "```json": + json_output_str = "\n".join(lines[i + 1 :]) + json_output_str = json_output_str.split("```")[0] + break + json_output_str = json_output_str.strip() + return json_output_str + + # 3. Query the VLM + # Assuming sample_completions takes a list of images + vlm_output_list = vlm.sample_completions( + prompt=vlm_query_str, + imgs=[pil_image], + temperature=0.0, # Low temp for deterministic output + seed=42, + num_completions=1, + ) + vlm_output_str = vlm_output_list[0] + # 4. Parse the JSON string + json_string_to_parse = parse_json_output(vlm_output_str) + parsed_data = json.loads(json_string_to_parse) + # 5. Extract and denormalize coordinates + if not isinstance(parsed_data, list) or not parsed_data: + raise ValueError("Parsed JSON is not a non-empty list.") + # Assuming the first point is the desired one + first_point_obj = parsed_data[0] + if ( + "point" not in first_point_obj + or not isinstance(first_point_obj["point"], list) + or len(first_point_obj["point"]) != 2 + ): + raise ValueError( + "First element in JSON does not contain a valid 'point' list [y, x]." + ) + y_norm, x_norm = first_point_obj["point"] + if not isinstance(y_norm, (int, float)) or not isinstance(x_norm, (int, float)): + raise ValueError("Normalized coordinates are not numbers.") + # Denormalize from 0-1000 range to image pixel coordinates + img_height = pil_image.height + img_width = pil_image.width + y = int(y_norm * img_height / 1000.0) + x = int(x_norm * img_width / 1000.0) + # Clamp coordinates to be within image bounds + y = max(0, min(y, img_height - 1)) + x = max(0, min(x, img_width - 1)) + # Assign to the 'pixel' variable in (x, y) format + pixel = (x, y) + return pixel + + + +if __name__ == "__main__": + import logging + import rerun as rr + from PIL import Image + import cv2 + import numpy as np + + + rr.init("gemini_test", spawn=True) + logging.basicConfig(level=logging.DEBUG) + + pil_image = Image.open("388885845015.jpg") + + vlm_query_template = """ + Point to the human. + The answer should follow the json format: [{"point": , "label": }, ...]. The points are in [y, x] format normalized to 0-1000. + """ + + pixel = get_pixel_from_gemini(vlm_query_template, pil_image) + + image_np = np.asarray(pil_image) + bgr = cv2.cvtColor(image_np, cv2.COLOR_RGB2BGR) + cv2.circle(bgr, pixel, 5, (0, 0, 255), -1) + + rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB) + rr.log("rgb", rr.Image(rgb)) + print() diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_adept-howler-YbvTcqCtXriq5lEM+pZLSw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_adept-howler-YbvTcqCtXriq5lEM+pZLSw== deleted file mode 100644 index 3c55058..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_adept-howler-YbvTcqCtXriq5lEM+pZLSw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_afeard-virus-2IW0gjb5GvG+pLT4WCuFgw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_afeard-virus-2IW0gjb5GvG+pLT4WCuFgw== new file mode 100644 index 0000000..21d1706 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_afeard-virus-2IW0gjb5GvG+pLT4WCuFgw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_agape-vole-jyULRdSe9cwI+JzyijgyWw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_agape-vole-jyULRdSe9cwI+JzyijgyWw== new file mode 100644 index 0000000..b6caafc Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_agape-vole-jyULRdSe9cwI+JzyijgyWw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_alpine-redbug-Ufs0bUnx5yFGS.onKGHGcQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_alpine-redbug-Ufs0bUnx5yFGS.onKGHGcQ== new file mode 100644 index 0000000..20bf697 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_alpine-redbug-Ufs0bUnx5yFGS.onKGHGcQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_amuck-pincer-CaANgemgb8FUWKm1Wfctvw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_amuck-pincer-CaANgemgb8FUWKm1Wfctvw== new file mode 100644 index 0000000..ff7f33e Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_amuck-pincer-CaANgemgb8FUWKm1Wfctvw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ane-syphon-WgF8TQA5by29Onmt7bAc7w== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ane-syphon-WgF8TQA5by29Onmt7bAc7w== new file mode 100644 index 0000000..fd16db9 --- /dev/null +++ b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ane-syphon-WgF8TQA5by29Onmt7bAc7w== @@ -0,0 +1,2 @@ + +4edge_snapshot_id_ane-syphon-WgF8TQA5by29Onmt7bAc7w== \ No newline at end of file diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_bass-swan-pOGVlHoh+p9.sfg21c+1PQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_bass-swan-pOGVlHoh+p9.sfg21c+1PQ== new file mode 100644 index 0000000..faae3d3 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_bass-swan-pOGVlHoh+p9.sfg21c+1PQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_bay-otter-ZBKRwUdyG0ZPTEEP.cSLyw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_bay-otter-ZBKRwUdyG0ZPTEEP.cSLyw== deleted file mode 100644 index 0632e26..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_bay-otter-ZBKRwUdyG0ZPTEEP.cSLyw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_blamed-oxen-u.QhCK43qTi8CfqPZC0h8w== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_blamed-oxen-u.QhCK43qTi8CfqPZC0h8w== new file mode 100644 index 0000000..4144f1d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_blamed-oxen-u.QhCK43qTi8CfqPZC0h8w== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_bogus-horse-EaZCYpJtWDVHX2x4sES4UQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_bogus-horse-EaZCYpJtWDVHX2x4sES4UQ== new file mode 100644 index 0000000..409bf19 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_bogus-horse-EaZCYpJtWDVHX2x4sES4UQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_broke-gnu-WZG.9vvJTOaMhHRjiL9FJw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_broke-gnu-WZG.9vvJTOaMhHRjiL9FJw== new file mode 100644 index 0000000..a191908 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_broke-gnu-WZG.9vvJTOaMhHRjiL9FJw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_calico-cicada-aZ6Ch+oC72x3lAXeq76FKQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_calico-cicada-aZ6Ch+oC72x3lAXeq76FKQ== new file mode 100644 index 0000000..3390597 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_calico-cicada-aZ6Ch+oC72x3lAXeq76FKQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_canty-algae-.+XOQfS8wjcSaSWpcKURJg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_canty-algae-.+XOQfS8wjcSaSWpcKURJg== new file mode 100644 index 0000000..e49fd62 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_canty-algae-.+XOQfS8wjcSaSWpcKURJg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_carven-angler-6dUv3NnhHWdPOOU36y+eEw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_carven-angler-6dUv3NnhHWdPOOU36y+eEw== new file mode 100644 index 0000000..2f46593 --- /dev/null +++ b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_carven-angler-6dUv3NnhHWdPOOU36y+eEw== @@ -0,0 +1,2 @@ + +7edge_snapshot_id_carven-angler-6dUv3NnhHWdPOOU36y+eEw== \ No newline at end of file diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_cedarn-donkey-ZPVlN1hBjFTQpLVu28D.BA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_cedarn-donkey-ZPVlN1hBjFTQpLVu28D.BA== new file mode 100644 index 0000000..194f13f Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_cedarn-donkey-ZPVlN1hBjFTQpLVu28D.BA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_chance-medusa-i6872KHXf.wn4p1QmkHUKQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_chance-medusa-i6872KHXf.wn4p1QmkHUKQ== deleted file mode 100644 index 75213cc..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_chance-medusa-i6872KHXf.wn4p1QmkHUKQ== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_cheesy-deer-DbEFgb6dP3VNbKrM+27XIQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_cheesy-deer-DbEFgb6dP3VNbKrM+27XIQ== new file mode 100644 index 0000000..2fca572 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_cheesy-deer-DbEFgb6dP3VNbKrM+27XIQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_craven-marten-HMbnyT9HYhX1f+kxrj5sDw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_craven-marten-HMbnyT9HYhX1f+kxrj5sDw== new file mode 100644 index 0000000..db8e091 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_craven-marten-HMbnyT9HYhX1f+kxrj5sDw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_crispy-heron-YQ217HRbaiubpDleBLetVw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_crispy-heron-YQ217HRbaiubpDleBLetVw== new file mode 100644 index 0000000..7abf860 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_crispy-heron-YQ217HRbaiubpDleBLetVw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_crispy-wren-fpPS1a1rjyX9lC6hoGlpEA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_crispy-wren-fpPS1a1rjyX9lC6hoGlpEA== deleted file mode 100644 index d0850ff..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_crispy-wren-fpPS1a1rjyX9lC6hoGlpEA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_croaky-botfly-u4d29npl+3LnsMnEX.AC0w== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_croaky-botfly-u4d29npl+3LnsMnEX.AC0w== deleted file mode 100644 index 84612e8..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_croaky-botfly-u4d29npl+3LnsMnEX.AC0w== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_cusped-moa-+QAF995jsnyScMbk5LUaWg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_cusped-moa-+QAF995jsnyScMbk5LUaWg== new file mode 100644 index 0000000..192efc2 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_cusped-moa-+QAF995jsnyScMbk5LUaWg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_daft-gerbil-lQJjcmGBydZLtAK2XuTuTQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_daft-gerbil-lQJjcmGBydZLtAK2XuTuTQ== new file mode 100644 index 0000000..5cdcff9 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_daft-gerbil-lQJjcmGBydZLtAK2XuTuTQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dandy-earwig-pmpgzruMc+mIplotCK93rg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dandy-earwig-pmpgzruMc+mIplotCK93rg== new file mode 100644 index 0000000..fb513db Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dandy-earwig-pmpgzruMc+mIplotCK93rg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dexter-vole-..IzJb6AIbZlo5iDiSqezg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dexter-vole-..IzJb6AIbZlo5iDiSqezg== new file mode 100644 index 0000000..3002b27 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dexter-vole-..IzJb6AIbZlo5iDiSqezg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dilute-sponge-zFFUJaeCHqMsroI2Yxt78A== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dilute-sponge-zFFUJaeCHqMsroI2Yxt78A== deleted file mode 100644 index 58109e4..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dilute-sponge-zFFUJaeCHqMsroI2Yxt78A== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_doughy-biped-pongY1K1gaR8GuXurDkDkQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_doughy-biped-pongY1K1gaR8GuXurDkDkQ== new file mode 100644 index 0000000..ebd1627 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_doughy-biped-pongY1K1gaR8GuXurDkDkQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dovish-baboon-zhcbBhRPf3hK0z2TL9h1.A== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dovish-baboon-zhcbBhRPf3hK0z2TL9h1.A== deleted file mode 100644 index 82ffb27..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_dovish-baboon-zhcbBhRPf3hK0z2TL9h1.A== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_earned-cocoon-dQk3x7UuaL3UNwSRsEp4Yg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_earned-cocoon-dQk3x7UuaL3UNwSRsEp4Yg== new file mode 100644 index 0000000..56057f8 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_earned-cocoon-dQk3x7UuaL3UNwSRsEp4Yg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_eight-beagle-jxYWPrZUPnxHomt.9Hsc+A== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_eight-beagle-jxYWPrZUPnxHomt.9Hsc+A== deleted file mode 100644 index c259efd..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_eight-beagle-jxYWPrZUPnxHomt.9Hsc+A== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_eroded-mamba-ynF16.qX6EGwZLi0f9oZyw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_eroded-mamba-ynF16.qX6EGwZLi0f9oZyw== new file mode 100644 index 0000000..3ac2487 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_eroded-mamba-ynF16.qX6EGwZLi0f9oZyw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_fazed-pug-U9BfDdVyN.WVrWLcbNWtGw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_fazed-pug-U9BfDdVyN.WVrWLcbNWtGw== new file mode 100644 index 0000000..ca2d10c Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_fazed-pug-U9BfDdVyN.WVrWLcbNWtGw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_fitter-owl-HAxwkm+dCvDVITomlqX0tA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_fitter-owl-HAxwkm+dCvDVITomlqX0tA== new file mode 100644 index 0000000..73b8876 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_fitter-owl-HAxwkm+dCvDVITomlqX0tA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_foster-cicada-jkwK1k2HnnAfgtSGk.ukAw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_foster-cicada-jkwK1k2HnnAfgtSGk.ukAw== deleted file mode 100644 index 84a9a20..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_foster-cicada-jkwK1k2HnnAfgtSGk.ukAw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_found-mayfly-J0fepk5OSM9NXOZUAd3S8g== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_found-mayfly-J0fepk5OSM9NXOZUAd3S8g== deleted file mode 100644 index cbd489e..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_found-mayfly-J0fepk5OSM9NXOZUAd3S8g== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_foxy-tern-zxMPJyAiydACbMHEWxSakQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_foxy-tern-zxMPJyAiydACbMHEWxSakQ== new file mode 100644 index 0000000..fb9e079 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_foxy-tern-zxMPJyAiydACbMHEWxSakQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_frumpy-agouti-ZAVsmjiVjIUhsT5Wn4fDoA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_frumpy-agouti-ZAVsmjiVjIUhsT5Wn4fDoA== new file mode 100644 index 0000000..e2fe818 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_frumpy-agouti-ZAVsmjiVjIUhsT5Wn4fDoA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_furred-snake-fG7HKJz04+c2HBYluXXvSA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_furred-snake-fG7HKJz04+c2HBYluXXvSA== deleted file mode 100644 index 7544d00..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_furred-snake-fG7HKJz04+c2HBYluXXvSA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_fused-basset-IS8SX9qwgtxi3oSD81t4Lw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_fused-basset-IS8SX9qwgtxi3oSD81t4Lw== deleted file mode 100644 index c270539..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_fused-basset-IS8SX9qwgtxi3oSD81t4Lw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_garbed-turtle-0Rx9ca5rcZ0q6HqYBTuUNg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_garbed-turtle-0Rx9ca5rcZ0q6HqYBTuUNg== new file mode 100644 index 0000000..0b162ca Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_garbed-turtle-0Rx9ca5rcZ0q6HqYBTuUNg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_garish-hydra-aJeii9l8.vdpYz0fS5GCYg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_garish-hydra-aJeii9l8.vdpYz0fS5GCYg== new file mode 100644 index 0000000..c1e9a7f Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_garish-hydra-aJeii9l8.vdpYz0fS5GCYg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_glary-cicada-pmNy8PJLwbdDxU0v9BMsoQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_glary-cicada-pmNy8PJLwbdDxU0v9BMsoQ== new file mode 100644 index 0000000..7f7482b Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_glary-cicada-pmNy8PJLwbdDxU0v9BMsoQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_greyed-conger-sbzlVD2p5H2YAdXvQALpkw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_greyed-conger-sbzlVD2p5H2YAdXvQALpkw== new file mode 100644 index 0000000..04ecaeb Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_greyed-conger-sbzlVD2p5H2YAdXvQALpkw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_humped-hydra-LlYuqGUn.bYEThxlOf7.2w== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_humped-hydra-LlYuqGUn.bYEThxlOf7.2w== new file mode 100644 index 0000000..7550176 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_humped-hydra-LlYuqGUn.bYEThxlOf7.2w== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_inky-guinea-vo.4MI9QVWyHU+ioiSdDRw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_inky-guinea-vo.4MI9QVWyHU+ioiSdDRw== new file mode 100644 index 0000000..7305420 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_inky-guinea-vo.4MI9QVWyHU+ioiSdDRw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ivied-snail-N.8pjg9qjnOBpqYzF4PrBg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ivied-snail-N.8pjg9qjnOBpqYzF4PrBg== deleted file mode 100644 index de3edbc..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ivied-snail-N.8pjg9qjnOBpqYzF4PrBg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_jovial-mule-JSNKZQ26IOcvRkuh9QG3.w== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_jovial-mule-JSNKZQ26IOcvRkuh9QG3.w== new file mode 100644 index 0000000..f8b7f17 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_jovial-mule-JSNKZQ26IOcvRkuh9QG3.w== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_joyous-embryo-imOlceOSoiDt0arlYMPp5Q== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_joyous-embryo-imOlceOSoiDt0arlYMPp5Q== deleted file mode 100644 index d156a2b..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_joyous-embryo-imOlceOSoiDt0arlYMPp5Q== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_jural-fowl-vA.Vyn4dBkZ0Ib0symwjpw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_jural-fowl-vA.Vyn4dBkZ0Ib0symwjpw== new file mode 100644 index 0000000..a92748e Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_jural-fowl-vA.Vyn4dBkZ0Ib0symwjpw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_larval-otus-oOpEdF74zgUh6hOOWD1nrQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_larval-otus-oOpEdF74zgUh6hOOWD1nrQ== new file mode 100644 index 0000000..134dbb9 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_larval-otus-oOpEdF74zgUh6hOOWD1nrQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_latter-nasua-mwjPMxxeQ0vMH56lOI8sHA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_latter-nasua-mwjPMxxeQ0vMH56lOI8sHA== new file mode 100644 index 0000000..961148d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_latter-nasua-mwjPMxxeQ0vMH56lOI8sHA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_legged-guppy-zqZCa09C9Sm6e1551JpksQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_legged-guppy-zqZCa09C9Sm6e1551JpksQ== new file mode 100644 index 0000000..7d79e78 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_legged-guppy-zqZCa09C9Sm6e1551JpksQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_lithe-lion-9zIOzpbRL117agmYPigpKQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_lithe-lion-9zIOzpbRL117agmYPigpKQ== new file mode 100644 index 0000000..5b660d7 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_lithe-lion-9zIOzpbRL117agmYPigpKQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_loamy-gecko-MSLy5sojuEy4jukJvqzGnA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_loamy-gecko-MSLy5sojuEy4jukJvqzGnA== new file mode 100644 index 0000000..bbe3974 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_loamy-gecko-MSLy5sojuEy4jukJvqzGnA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_lunate-colt-yW.dhLlnQWKvntYjjTHAdw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_lunate-colt-yW.dhLlnQWKvntYjjTHAdw== new file mode 100644 index 0000000..83d2239 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_lunate-colt-yW.dhLlnQWKvntYjjTHAdw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_madcap-drone-5HViY5xw4nX6Q9cXuCY58A== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_madcap-drone-5HViY5xw4nX6Q9cXuCY58A== new file mode 100644 index 0000000..4ff5b4d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_madcap-drone-5HViY5xw4nX6Q9cXuCY58A== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_manky-crake-FjteFOCvEtsThEDyO5Nktw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_manky-crake-FjteFOCvEtsThEDyO5Nktw== deleted file mode 100644 index 99810e9..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_manky-crake-FjteFOCvEtsThEDyO5Nktw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_melted-hornet-Zd5DeRA1vo2ZqqJR.mGaAA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_melted-hornet-Zd5DeRA1vo2ZqqJR.mGaAA== new file mode 100644 index 0000000..a460442 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_melted-hornet-Zd5DeRA1vo2ZqqJR.mGaAA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_menial-mink-cbV+Wrywl8o5SCLlfWPCvA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_menial-mink-cbV+Wrywl8o5SCLlfWPCvA== new file mode 100644 index 0000000..83212cb Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_menial-mink-cbV+Wrywl8o5SCLlfWPCvA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_metal-vermin-PnsjTI0Nn3gw8+Ho3ZpcnQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_metal-vermin-PnsjTI0Nn3gw8+Ho3ZpcnQ== new file mode 100644 index 0000000..6694aea Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_metal-vermin-PnsjTI0Nn3gw8+Ho3ZpcnQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_mimic-beagle-T0fqGm7fF76+VDADOH3sTA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_mimic-beagle-T0fqGm7fF76+VDADOH3sTA== new file mode 100644 index 0000000..ae07d19 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_mimic-beagle-T0fqGm7fF76+VDADOH3sTA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_missed-angler-Qn1l0yjLJo4HJ2Cy4rNizA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_missed-angler-Qn1l0yjLJo4HJ2Cy4rNizA== deleted file mode 100644 index 735773b..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_missed-angler-Qn1l0yjLJo4HJ2Cy4rNizA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_moved-goose-mZQIBzwuxQt+8+5zVo0Vvg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_moved-goose-mZQIBzwuxQt+8+5zVo0Vvg== new file mode 100644 index 0000000..703d858 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_moved-goose-mZQIBzwuxQt+8+5zVo0Vvg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_musing-jackal-fzsmz4sDYn5h8riOmlnd2Q== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_musing-jackal-fzsmz4sDYn5h8riOmlnd2Q== new file mode 100644 index 0000000..24201ee Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_musing-jackal-fzsmz4sDYn5h8riOmlnd2Q== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_naming-antler-hR8qvO3cR7hmSO.08vwvDA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_naming-antler-hR8qvO3cR7hmSO.08vwvDA== deleted file mode 100644 index a20fc04..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_naming-antler-hR8qvO3cR7hmSO.08vwvDA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_napped-finch-c6wXr6YdnUvk4yVcQuzQXw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_napped-finch-c6wXr6YdnUvk4yVcQuzQXw== deleted file mode 100644 index 585ac86..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_napped-finch-c6wXr6YdnUvk4yVcQuzQXw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_nonfat-crest-cFRYN99hvn6LeZTxjo4gdw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_nonfat-crest-cFRYN99hvn6LeZTxjo4gdw== new file mode 100644 index 0000000..05379b4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_nonfat-crest-cFRYN99hvn6LeZTxjo4gdw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_oaken-lemur-ddZMiCm+XZwn45Mn72m1lQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_oaken-lemur-ddZMiCm+XZwn45Mn72m1lQ== new file mode 100644 index 0000000..1971a06 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_oaken-lemur-ddZMiCm+XZwn45Mn72m1lQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_oozing-jay-UfZyUE0PIYMkoQGsozmy6w== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_oozing-jay-UfZyUE0PIYMkoQGsozmy6w== new file mode 100644 index 0000000..02984d0 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_oozing-jay-UfZyUE0PIYMkoQGsozmy6w== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_palmy-beetle-Ga4wEbxEykiHItmAJHmmZQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_palmy-beetle-Ga4wEbxEykiHItmAJHmmZQ== deleted file mode 100644 index c9bc45b..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_palmy-beetle-Ga4wEbxEykiHItmAJHmmZQ== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_passe-bee-wbZUqg2YwGXuxBz2iE63ig== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_passe-bee-wbZUqg2YwGXuxBz2iE63ig== new file mode 100644 index 0000000..194cff4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_passe-bee-wbZUqg2YwGXuxBz2iE63ig== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pebbly-wren-oObEJfK+cYqhDTlm0YUeOg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pebbly-wren-oObEJfK+cYqhDTlm0YUeOg== deleted file mode 100644 index 215b8ea..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pebbly-wren-oObEJfK+cYqhDTlm0YUeOg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_peeved-coyote-4O3bJfZE.hEEbDev03do4g== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_peeved-coyote-4O3bJfZE.hEEbDev03do4g== new file mode 100644 index 0000000..dab39bd Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_peeved-coyote-4O3bJfZE.hEEbDev03do4g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pesky-angler-j1ve5lyqmkMSfHTE+IJt8A== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pesky-angler-j1ve5lyqmkMSfHTE+IJt8A== new file mode 100644 index 0000000..1c730a4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pesky-angler-j1ve5lyqmkMSfHTE+IJt8A== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_piggy-cougar-K3hFLiCFTuw+Chm5qpDOCA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_piggy-cougar-K3hFLiCFTuw+Chm5qpDOCA== new file mode 100644 index 0000000..1a72535 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_piggy-cougar-K3hFLiCFTuw+Chm5qpDOCA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_plowed-algae-2PwiwfRnD4PvmrgCQ8lhxA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_plowed-algae-2PwiwfRnD4PvmrgCQ8lhxA== new file mode 100644 index 0000000..2f5a18e Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_plowed-algae-2PwiwfRnD4PvmrgCQ8lhxA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_prima-grouse-anq9JpaSKUKLqS4S3vQAzg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_prima-grouse-anq9JpaSKUKLqS4S3vQAzg== deleted file mode 100644 index dd0d0f1..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_prima-grouse-anq9JpaSKUKLqS4S3vQAzg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_punic-volvox-dXd6SoaLsFJFb3QQzO3QYA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_punic-volvox-dXd6SoaLsFJFb3QQzO3QYA== new file mode 100644 index 0000000..a3fc52c Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_punic-volvox-dXd6SoaLsFJFb3QQzO3QYA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pupal-mamba-rt.0403WQduCYkVXHzOeSA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pupal-mamba-rt.0403WQduCYkVXHzOeSA== new file mode 100644 index 0000000..ffc5a71 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pupal-mamba-rt.0403WQduCYkVXHzOeSA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pursy-pike-7RftO76.ECrHTEkM5154dA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pursy-pike-7RftO76.ECrHTEkM5154dA== deleted file mode 100644 index e660703..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_pursy-pike-7RftO76.ECrHTEkM5154dA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_rabid-afghan-4Gu3yYElft5N5PzOZ5LE5g== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_rabid-afghan-4Gu3yYElft5N5PzOZ5LE5g== new file mode 100644 index 0000000..f4f74af Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_rabid-afghan-4Gu3yYElft5N5PzOZ5LE5g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ranked-drill-3SPxS0.uiJrLOizKUMY++w== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ranked-drill-3SPxS0.uiJrLOizKUMY++w== new file mode 100644 index 0000000..44d7f18 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ranked-drill-3SPxS0.uiJrLOizKUMY++w== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_reefy-gadfly-xNKhOLsoKW9SaPvB2VOwmQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_reefy-gadfly-xNKhOLsoKW9SaPvB2VOwmQ== deleted file mode 100644 index 2dc05cb..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_reefy-gadfly-xNKhOLsoKW9SaPvB2VOwmQ== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_regal-virus-GYMuXc1qzpZaDehr5xv5MQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_regal-virus-GYMuXc1qzpZaDehr5xv5MQ== new file mode 100644 index 0000000..cc456b8 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_regal-virus-GYMuXc1qzpZaDehr5xv5MQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_rigged-cod-nOAEJCCWqp4OL6F7lKTLAA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_rigged-cod-nOAEJCCWqp4OL6F7lKTLAA== new file mode 100644 index 0000000..ad5b818 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_rigged-cod-nOAEJCCWqp4OL6F7lKTLAA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ritzy-otter-YsCMD0wnIDGBrP+uKFK+zg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ritzy-otter-YsCMD0wnIDGBrP+uKFK+zg== deleted file mode 100644 index 96283e0..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ritzy-otter-YsCMD0wnIDGBrP+uKFK+zg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_roomy-hornet-WtPnY.BE9uaqEh306pVYRA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_roomy-hornet-WtPnY.BE9uaqEh306pVYRA== new file mode 100644 index 0000000..b6f5b1b Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_roomy-hornet-WtPnY.BE9uaqEh306pVYRA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ruled-ocelot-c48ThRLIOgLGBWDsdHp4PA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ruled-ocelot-c48ThRLIOgLGBWDsdHp4PA== new file mode 100644 index 0000000..10d3469 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_ruled-ocelot-c48ThRLIOgLGBWDsdHp4PA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_satiny-algae-PMgZJwjZpm40KFSOWg6HuA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_satiny-algae-PMgZJwjZpm40KFSOWg6HuA== new file mode 100644 index 0000000..640fa0c Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_satiny-algae-PMgZJwjZpm40KFSOWg6HuA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_satiny-mudcat-b+lCNngcUW669yR1VoTPCw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_satiny-mudcat-b+lCNngcUW669yR1VoTPCw== new file mode 100644 index 0000000..2d55057 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_satiny-mudcat-b+lCNngcUW669yR1VoTPCw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_scenic-rodent-10aiKj10G9ZGolCGWJNpXQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_scenic-rodent-10aiKj10G9ZGolCGWJNpXQ== new file mode 100644 index 0000000..fb17315 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_scenic-rodent-10aiKj10G9ZGolCGWJNpXQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_senile-squid-cDWNejNmR.s0WhrjfWBM0g== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_senile-squid-cDWNejNmR.s0WhrjfWBM0g== deleted file mode 100644 index 94d06d2..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_senile-squid-cDWNejNmR.s0WhrjfWBM0g== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sewed-worm-.C9QTJZDaxTd+yv837Buwg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sewed-worm-.C9QTJZDaxTd+yv837Buwg== new file mode 100644 index 0000000..848d574 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sewed-worm-.C9QTJZDaxTd+yv837Buwg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_size-corgi-9J69fMGAtACS6UcvgB2SUQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_size-corgi-9J69fMGAtACS6UcvgB2SUQ== new file mode 100644 index 0000000..64fced3 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_size-corgi-9J69fMGAtACS6UcvgB2SUQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sneaky-puffin-H+lAUEvcwafm9mAtCuqYxQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sneaky-puffin-H+lAUEvcwafm9mAtCuqYxQ== new file mode 100644 index 0000000..714df6d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sneaky-puffin-H+lAUEvcwafm9mAtCuqYxQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sniffy-turkey-cae+GaTXQWlQ3stsgwSERg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sniffy-turkey-cae+GaTXQWlQ3stsgwSERg== new file mode 100644 index 0000000..57b3724 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sniffy-turkey-cae+GaTXQWlQ3stsgwSERg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_snoopy-pincer-A3I7J5t5tsNF+.QzHqhx3w== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_snoopy-pincer-A3I7J5t5tsNF+.QzHqhx3w== new file mode 100644 index 0000000..2246769 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_snoopy-pincer-A3I7J5t5tsNF+.QzHqhx3w== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sought-warble-ofSrbJYr+AoqxFpwaoFZLg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sought-warble-ofSrbJYr+AoqxFpwaoFZLg== new file mode 100644 index 0000000..7ce298e Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_sought-warble-ofSrbJYr+AoqxFpwaoFZLg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_spry-cattle-ydCpEVUGM30d0iv3nVOqDw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_spry-cattle-ydCpEVUGM30d0iv3nVOqDw== deleted file mode 100644 index c7bc355..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_spry-cattle-ydCpEVUGM30d0iv3nVOqDw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_stereo-salmon-qS3mcNoD6blXe+ELAPtixw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_stereo-salmon-qS3mcNoD6blXe+ELAPtixw== new file mode 100644 index 0000000..5209cb5 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_stereo-salmon-qS3mcNoD6blXe+ELAPtixw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_strait-koala-MVxHIELRai6egM1Rulqing== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_strait-koala-MVxHIELRai6egM1Rulqing== new file mode 100644 index 0000000..4b6688f Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_strait-koala-MVxHIELRai6egM1Rulqing== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_stumpy-gull-1YbboKKZzdzB0XaKC9rBIg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_stumpy-gull-1YbboKKZzdzB0XaKC9rBIg== new file mode 100644 index 0000000..eedba6d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_stumpy-gull-1YbboKKZzdzB0XaKC9rBIg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_swell-trout-0KSqbuOLhGe+p31Xhf0mSA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_swell-trout-0KSqbuOLhGe+p31Xhf0mSA== deleted file mode 100644 index 158f960..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_swell-trout-0KSqbuOLhGe+p31Xhf0mSA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_tangy-crake-LZEwlrx.cwP.Qr+9roBnsg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_tangy-crake-LZEwlrx.cwP.Qr+9roBnsg== new file mode 100644 index 0000000..efaaebb Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_tangy-crake-LZEwlrx.cwP.Qr+9roBnsg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_thirty-seal-7uHWEYyxZoTEKXadUTe1kw== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_thirty-seal-7uHWEYyxZoTEKXadUTe1kw== deleted file mode 100644 index e771781..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_thirty-seal-7uHWEYyxZoTEKXadUTe1kw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_trusty-cuscus-a4pSATWKy+qKahCZqIj1aA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_trusty-cuscus-a4pSATWKy+qKahCZqIj1aA== deleted file mode 100644 index 5a34902..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_trusty-cuscus-a4pSATWKy+qKahCZqIj1aA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_trusty-walrus-exybucjeKyJfHJLZvJ1jrA== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_trusty-walrus-exybucjeKyJfHJLZvJ1jrA== new file mode 100644 index 0000000..63395c7 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_trusty-walrus-exybucjeKyJfHJLZvJ1jrA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_tubed-pika-7+F54Z5OiiCTKVBMzuvpvQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_tubed-pika-7+F54Z5OiiCTKVBMzuvpvQ== new file mode 100644 index 0000000..e9815bc Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_tubed-pika-7+F54Z5OiiCTKVBMzuvpvQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unawed-algae-SWG5jBpqSHD2aVAvhsPFDQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unawed-algae-SWG5jBpqSHD2aVAvhsPFDQ== new file mode 100644 index 0000000..d9a3223 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unawed-algae-SWG5jBpqSHD2aVAvhsPFDQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unawed-coyote-Piqbc6tTZHcd2KF8gtOQ.g== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unawed-coyote-Piqbc6tTZHcd2KF8gtOQ.g== new file mode 100644 index 0000000..a8f6491 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unawed-coyote-Piqbc6tTZHcd2KF8gtOQ.g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unkept-bedbug-DD1FcJ2664y5Urku2oI+vg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unkept-bedbug-DD1FcJ2664y5Urku2oI+vg== new file mode 100644 index 0000000..94f0ccd Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unkept-bedbug-DD1FcJ2664y5Urku2oI+vg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unmade-doe-idzDoSoBE.W.jkAacPdl4g== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unmade-doe-idzDoSoBE.W.jkAacPdl4g== deleted file mode 100644 index 57e7d6d..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_unmade-doe-idzDoSoBE.W.jkAacPdl4g== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_upbeat-shrimp-z8wisSAxJ12hRmFai4ufmg== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_upbeat-shrimp-z8wisSAxJ12hRmFai4ufmg== new file mode 100644 index 0000000..1d2ccec Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_upbeat-shrimp-z8wisSAxJ12hRmFai4ufmg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_warmed-marlin-W2QHo+Tl+8zgZ7GQrNbH.Q== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_warmed-marlin-W2QHo+Tl+8zgZ7GQrNbH.Q== new file mode 100644 index 0000000..feda438 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_warmed-marlin-W2QHo+Tl+8zgZ7GQrNbH.Q== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_whippy-amoeba-ddIe28ll7NJFb4eBjHSB3A== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_whippy-amoeba-ddIe28ll7NJFb4eBjHSB3A== new file mode 100644 index 0000000..b78dbf3 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_whippy-amoeba-ddIe28ll7NJFb4eBjHSB3A== differ diff --git a/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_wifely-tiger-hz.+SXAcbsaGAIsQD.s2WQ== b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_wifely-tiger-hz.+SXAcbsaGAIsQD.s2WQ== new file mode 100644 index 0000000..5592391 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/edge_snapshots/edge_snapshot_id_wifely-tiger-hz.+SXAcbsaGAIsQD.s2WQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/graph b/spot_utils/graph_nav_maps/outside-621/graph index d7e7cd2..b8a1dd5 100644 Binary files a/spot_utils/graph_nav_maps/outside-621/graph and b/spot_utils/graph_nav_maps/outside-621/graph differ diff --git a/spot_utils/graph_nav_maps/outside-621/metadata.yaml b/spot_utils/graph_nav_maps/outside-621/metadata.yaml new file mode 100644 index 0000000..cb37e2d --- /dev/null +++ b/spot_utils/graph_nav_maps/outside-621/metadata.yaml @@ -0,0 +1,49 @@ +# Additional info associated with the map. +--- +# NOTE: close to the center of the room +#spot-home-pose: +# x: 2.85 +# y: 0.0 +# angle: -1.45769 +# NOTE: a place closer to the corner that the cable can reach - easier for debug +spot-home-pose: + x: 3.5 + y: 0.45 + angle: 0. +april-tag-offsets: [] + +# Allowed regions. Each region is defined by a set of points +# that form the boundary of the region. We will check +# whether a pose is within the region by checking whether the +# robot will be within the convex hull of these boundary +# points. +allowed-regions: + spot-room: + - [0.25, 1.9] + - [1.2, -2.5] + - [5.7, -1.5] + - [5.0, 2.7] + +# Known immovable objects. Assuming default rotations. +# TODO note: later we can add static objects like tables, chairs, etc. here +known-immovable-objects: + floor: + x: 1.4 + y: 0.5 + z: -0.5 + +# Static object features, including the shapes and sizes of known objects. +static-object-features: + floor: + shape: 1 + height: 0.0001 + length: 10000000 # effectively infinite + width: 10000000 + flat_top_surface: 1 + red_block: + shape: 2 + height: 0.1 + length: 0.1 + width: 0.1 + placeable: 1 + is_sweeper: 0 \ No newline at end of file diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_aboral-leech-UJ4upMkilyzOv95JhDJgDg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_aboral-leech-UJ4upMkilyzOv95JhDJgDg== new file mode 100644 index 0000000..402503a Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_aboral-leech-UJ4upMkilyzOv95JhDJgDg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_acold-ermine-8jwhEOATO30kDsjTYL7WMw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_acold-ermine-8jwhEOATO30kDsjTYL7WMw== new file mode 100644 index 0000000..639594b Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_acold-ermine-8jwhEOATO30kDsjTYL7WMw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_aglow-sow-RGscthbBnlLXXrGhEaYfjA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_aglow-sow-RGscthbBnlLXXrGhEaYfjA== new file mode 100644 index 0000000..41fb2e8 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_aglow-sow-RGscthbBnlLXXrGhEaYfjA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_alary-canary-eKnjQC1VA5.bkMvCy9d4Zw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_alary-canary-eKnjQC1VA5.bkMvCy9d4Zw== new file mode 100644 index 0000000..b705ca4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_alary-canary-eKnjQC1VA5.bkMvCy9d4Zw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_animal-turtle-9oyzMgrc7X9XY6RYAsA5VA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_animal-turtle-9oyzMgrc7X9XY6RYAsA5VA== new file mode 100644 index 0000000..cec9fa7 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_animal-turtle-9oyzMgrc7X9XY6RYAsA5VA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_arced-condor-hUU.c5vjoFch9ABEGQemRA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_arced-condor-hUU.c5vjoFch9ABEGQemRA== deleted file mode 100644 index f7ad6c7..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_arced-condor-hUU.c5vjoFch9ABEGQemRA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_ariled-dog-0qCvruQi4tm.+nf96eeIZQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_ariled-dog-0qCvruQi4tm.+nf96eeIZQ== new file mode 100644 index 0000000..b604e81 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_ariled-dog-0qCvruQi4tm.+nf96eeIZQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_azonal-lion-Y67A+5OQaMN05A+AZ+9uGA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_azonal-lion-Y67A+5OQaMN05A+AZ+9uGA== deleted file mode 100644 index f07eb0c..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_azonal-lion-Y67A+5OQaMN05A+AZ+9uGA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_azure-shad-iCVe8qXDRnPNEZKz0sBcbw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_azure-shad-iCVe8qXDRnPNEZKz0sBcbw== new file mode 100644 index 0000000..8f748ec Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_azure-shad-iCVe8qXDRnPNEZKz0sBcbw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_banned-mako-F5a4AmDqoo0bC5qh03dAHA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_banned-mako-F5a4AmDqoo0bC5qh03dAHA== deleted file mode 100644 index 6d2c975..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_banned-mako-F5a4AmDqoo0bC5qh03dAHA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_biped-buck-oxb0dclFT7s3PFqsNcdCaA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_biped-buck-oxb0dclFT7s3PFqsNcdCaA== deleted file mode 100644 index 77d4243..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_biped-buck-oxb0dclFT7s3PFqsNcdCaA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_blabby-finch-905paNu.8LpJ7E6+nrlYTA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_blabby-finch-905paNu.8LpJ7E6+nrlYTA== deleted file mode 100644 index c3f9159..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_blabby-finch-905paNu.8LpJ7E6+nrlYTA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_bowlegged-baboon-yce0Gd30sDMhsUGSfVvw7A== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_bowlegged-baboon-yce0Gd30sDMhsUGSfVvw7A== deleted file mode 100644 index fab87a2..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_bowlegged-baboon-yce0Gd30sDMhsUGSfVvw7A== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_buff-simian-XWU4XA7PXcYNmWx8X+jCyA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_buff-simian-XWU4XA7PXcYNmWx8X+jCyA== new file mode 100644 index 0000000..3b02ce4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_buff-simian-XWU4XA7PXcYNmWx8X+jCyA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_bugged-fawn-AYE25dFh+jluP12uDwMSFA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_bugged-fawn-AYE25dFh+jluP12uDwMSFA== new file mode 100644 index 0000000..5411417 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_bugged-fawn-AYE25dFh+jluP12uDwMSFA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_bugged-syphon-QCnBZIZEiGbK7WaxLW1Q1g== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_bugged-syphon-QCnBZIZEiGbK7WaxLW1Q1g== new file mode 100644 index 0000000..eb822ce Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_bugged-syphon-QCnBZIZEiGbK7WaxLW1Q1g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_built-pike-W2xVkYxmIUhrDmue9YuRNw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_built-pike-W2xVkYxmIUhrDmue9YuRNw== new file mode 100644 index 0000000..2c5a3e4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_built-pike-W2xVkYxmIUhrDmue9YuRNw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_canty-carp-9oc8uuAIbwhf1KIWz8YsSQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_canty-carp-9oc8uuAIbwhf1KIWz8YsSQ== new file mode 100644 index 0000000..f48a273 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_canty-carp-9oc8uuAIbwhf1KIWz8YsSQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_chirpy-cobra-6YWF+s0wotTDlQqkzlhbag== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_chirpy-cobra-6YWF+s0wotTDlQqkzlhbag== new file mode 100644 index 0000000..159211b Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_chirpy-cobra-6YWF+s0wotTDlQqkzlhbag== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_chubby-algae-2EpeUB2lq87KlunZcu36AA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_chubby-algae-2EpeUB2lq87KlunZcu36AA== deleted file mode 100644 index f9c5777..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_chubby-algae-2EpeUB2lq87KlunZcu36AA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_clammy-fish-EUo6PUlaN6duw5FonwCrCg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_clammy-fish-EUo6PUlaN6duw5FonwCrCg== new file mode 100644 index 0000000..69d98e0 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_clammy-fish-EUo6PUlaN6duw5FonwCrCg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_corky-viper-RQwdP3YIJvIJWXw1Ca++0Q== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_corky-viper-RQwdP3YIJvIJWXw1Ca++0Q== new file mode 100644 index 0000000..48985dd Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_corky-viper-RQwdP3YIJvIJWXw1Ca++0Q== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_cranky-ermine-5Aav4jmSDKfNNOBqQrv1fA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_cranky-ermine-5Aav4jmSDKfNNOBqQrv1fA== new file mode 100644 index 0000000..897f5d7 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_cranky-ermine-5Aav4jmSDKfNNOBqQrv1fA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dandy-merino-SCKkDVsWWWI2XnP5wcN.Pg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dandy-merino-SCKkDVsWWWI2XnP5wcN.Pg== deleted file mode 100644 index 1012aad..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dandy-merino-SCKkDVsWWWI2XnP5wcN.Pg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dandy-minnow-1NITU728QvVZiUMPkbIJHQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dandy-minnow-1NITU728QvVZiUMPkbIJHQ== deleted file mode 100644 index f3b709a..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dandy-minnow-1NITU728QvVZiUMPkbIJHQ== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dank-tsetse-kywYKgJxk6ta0LRrGgJVQQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dank-tsetse-kywYKgJxk6ta0LRrGgJVQQ== new file mode 100644 index 0000000..67ae02b Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dank-tsetse-kywYKgJxk6ta0LRrGgJVQQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_darned-marlin-nsR.zLgG+eKXx+u33YbadA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_darned-marlin-nsR.zLgG+eKXx+u33YbadA== new file mode 100644 index 0000000..2977684 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_darned-marlin-nsR.zLgG+eKXx+u33YbadA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_devoid-spider-8i5Yvv6.3NRb0YyuZrjaNQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_devoid-spider-8i5Yvv6.3NRb0YyuZrjaNQ== new file mode 100644 index 0000000..0a1210e Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_devoid-spider-8i5Yvv6.3NRb0YyuZrjaNQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dovish-dog-D5sSVynXoY7BSPnQtsyGhw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dovish-dog-D5sSVynXoY7BSPnQtsyGhw== new file mode 100644 index 0000000..ba251ec Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_dovish-dog-D5sSVynXoY7BSPnQtsyGhw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_east-shrew-ZUR032tH459SL1iq9sPhdA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_east-shrew-ZUR032tH459SL1iq9sPhdA== deleted file mode 100644 index b8ef806..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_east-shrew-ZUR032tH459SL1iq9sPhdA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_elder-otus-lAx1yDxHeucLANQ0Q+fk4g== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_elder-otus-lAx1yDxHeucLANQ0Q+fk4g== new file mode 100644 index 0000000..1364efd Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_elder-otus-lAx1yDxHeucLANQ0Q+fk4g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_elite-mink-CyibwDXVfWQd3Mcf5FJy1A== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_elite-mink-CyibwDXVfWQd3Mcf5FJy1A== new file mode 100644 index 0000000..06a04cf Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_elite-mink-CyibwDXVfWQd3Mcf5FJy1A== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_enate-monkey-2oGK6uP6YfMJot8NTp1F4g== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_enate-monkey-2oGK6uP6YfMJot8NTp1F4g== new file mode 100644 index 0000000..7e609b5 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_enate-monkey-2oGK6uP6YfMJot8NTp1F4g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_extant-equid-BzyrXnwc2ZIAEiuAUwP2Cg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_extant-equid-BzyrXnwc2ZIAEiuAUwP2Cg== new file mode 100644 index 0000000..bfadbcd Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_extant-equid-BzyrXnwc2ZIAEiuAUwP2Cg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_feral-drake-ARppIjCf1EwMqyjZS7RfSw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_feral-drake-ARppIjCf1EwMqyjZS7RfSw== new file mode 100644 index 0000000..7d94b6d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_feral-drake-ARppIjCf1EwMqyjZS7RfSw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_flinty-monkey-UXJ65jQ24Ai74y4uCodzQg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_flinty-monkey-UXJ65jQ24Ai74y4uCodzQg== deleted file mode 100644 index b865c28..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_flinty-monkey-UXJ65jQ24Ai74y4uCodzQg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fly-chick-9uhZWEIuBAS5DWQ6aoXtrg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fly-chick-9uhZWEIuBAS5DWQ6aoXtrg== new file mode 100644 index 0000000..cd569bf Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fly-chick-9uhZWEIuBAS5DWQ6aoXtrg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fly-egg-zBgdi2kksiF.VeYqdj398A== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fly-egg-zBgdi2kksiF.VeYqdj398A== deleted file mode 100644 index c48c8ff..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fly-egg-zBgdi2kksiF.VeYqdj398A== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_forged-tomcat-mMztKV6+ZUNLGseE+dh.Mw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_forged-tomcat-mMztKV6+ZUNLGseE+dh.Mw== deleted file mode 100644 index e75c2d9..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_forged-tomcat-mMztKV6+ZUNLGseE+dh.Mw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fringy-embryo-L2CEPD.LcGHFINyGB3hfKg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fringy-embryo-L2CEPD.LcGHFINyGB3hfKg== new file mode 100644 index 0000000..6bac721 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fringy-embryo-L2CEPD.LcGHFINyGB3hfKg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fumed-dugong-o.K2qS8ga6Nqt+.Ex3PGrQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fumed-dugong-o.K2qS8ga6Nqt+.Ex3PGrQ== deleted file mode 100644 index b827778..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_fumed-dugong-o.K2qS8ga6Nqt+.Ex3PGrQ== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_galled-ermine-j9QRkuOEg3HUReNvP.9L4Q== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_galled-ermine-j9QRkuOEg3HUReNvP.9L4Q== new file mode 100644 index 0000000..c182ab7 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_galled-ermine-j9QRkuOEg3HUReNvP.9L4Q== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gilled-gecko-j1xm9sWZawakx24Qe4XkKA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gilled-gecko-j1xm9sWZawakx24Qe4XkKA== new file mode 100644 index 0000000..70c9ba1 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gilled-gecko-j1xm9sWZawakx24Qe4XkKA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_giving-gull-38rO4K.fVP7aQnUqE8eJtw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_giving-gull-38rO4K.fVP7aQnUqE8eJtw== new file mode 100644 index 0000000..350d5b9 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_giving-gull-38rO4K.fVP7aQnUqE8eJtw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_glace-shrew-nunfuKOEz+9CLxJ2exTzAA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_glace-shrew-nunfuKOEz+9CLxJ2exTzAA== new file mode 100644 index 0000000..b253793 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_glace-shrew-nunfuKOEz+9CLxJ2exTzAA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_glary-snail-qIKTLa33ZH6.I39a2CQkrg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_glary-snail-qIKTLa33ZH6.I39a2CQkrg== deleted file mode 100644 index 2e6e1f1..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_glary-snail-qIKTLa33ZH6.I39a2CQkrg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_glary-tiger-BUDTjJI5LGcim6bP1ZbLvQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_glary-tiger-BUDTjJI5LGcim6bP1ZbLvQ== new file mode 100644 index 0000000..cd3cc9f Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_glary-tiger-BUDTjJI5LGcim6bP1ZbLvQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gnarly-hound-H3vF.5YgmxfaH4tLjkbRjQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gnarly-hound-H3vF.5YgmxfaH4tLjkbRjQ== deleted file mode 100644 index 65a809b..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gnarly-hound-H3vF.5YgmxfaH4tLjkbRjQ== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_grapey-beagle-yy+h3CiDjl4OCQpMTBj6jA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_grapey-beagle-yy+h3CiDjl4OCQpMTBj6jA== new file mode 100644 index 0000000..661a331 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_grapey-beagle-yy+h3CiDjl4OCQpMTBj6jA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gravid-leech-bFNV4Wr5.a2.vNeDsbLidw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gravid-leech-bFNV4Wr5.a2.vNeDsbLidw== new file mode 100644 index 0000000..03b665b Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gravid-leech-bFNV4Wr5.a2.vNeDsbLidw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_grisly-cows-Hbb8kJdhkMCUsILJ8garZg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_grisly-cows-Hbb8kJdhkMCUsILJ8garZg== deleted file mode 100644 index 6e6d622..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_grisly-cows-Hbb8kJdhkMCUsILJ8garZg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gummed-hornet-DDvkbktTgkD6WWA5KWqJ5A== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gummed-hornet-DDvkbktTgkD6WWA5KWqJ5A== new file mode 100644 index 0000000..5d44bf6 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_gummed-hornet-DDvkbktTgkD6WWA5KWqJ5A== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_heard-horse-PWuhkMmoOPfCskc3pMsNbw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_heard-horse-PWuhkMmoOPfCskc3pMsNbw== new file mode 100644 index 0000000..56bb841 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_heard-horse-PWuhkMmoOPfCskc3pMsNbw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hip-cicala-FmH.17ldcBMDXhAOtdlGHQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hip-cicala-FmH.17ldcBMDXhAOtdlGHQ== new file mode 100644 index 0000000..c5fc461 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hip-cicala-FmH.17ldcBMDXhAOtdlGHQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hoarse-kudu-quf5OfLQwtsCkhHO+6rtEQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hoarse-kudu-quf5OfLQwtsCkhHO+6rtEQ== new file mode 100644 index 0000000..723e59d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hoarse-kudu-quf5OfLQwtsCkhHO+6rtEQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hogged-beetle-TnnEUwCMHcte+1ScgsRJlg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hogged-beetle-TnnEUwCMHcte+1ScgsRJlg== new file mode 100644 index 0000000..13fab02 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hogged-beetle-TnnEUwCMHcte+1ScgsRJlg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_humid-sponge-PcwJKb5HM3bfcYtWGAbkfQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_humid-sponge-PcwJKb5HM3bfcYtWGAbkfQ== new file mode 100644 index 0000000..c612857 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_humid-sponge-PcwJKb5HM3bfcYtWGAbkfQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hydric-vole-VER58+O0lansf.UFRsENEA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hydric-vole-VER58+O0lansf.UFRsENEA== deleted file mode 100644 index 6873258..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_hydric-vole-VER58+O0lansf.UFRsENEA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jade-pig-8At1I0CqGA+QSCVW3e0EbA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jade-pig-8At1I0CqGA+QSCVW3e0EbA== new file mode 100644 index 0000000..ac89c7d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jade-pig-8At1I0CqGA+QSCVW3e0EbA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jet-emu-S3J1hPH.lPTJP7VABcxEAg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jet-emu-S3J1hPH.lPTJP7VABcxEAg== new file mode 100644 index 0000000..7db909a Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jet-emu-S3J1hPH.lPTJP7VABcxEAg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jinxed-mantis-xEEOqK5sbistWmooOLT+DA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jinxed-mantis-xEEOqK5sbistWmooOLT+DA== new file mode 100644 index 0000000..1716038 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jinxed-mantis-xEEOqK5sbistWmooOLT+DA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_joking-swan-E8V1Q+HAX0Px4BxbrG.ABQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_joking-swan-E8V1Q+HAX0Px4BxbrG.ABQ== new file mode 100644 index 0000000..801d286 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_joking-swan-E8V1Q+HAX0Px4BxbrG.ABQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jumbo-angus-SjSms+Bfxop0rBuCyw9vNg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jumbo-angus-SjSms+Bfxop0rBuCyw9vNg== new file mode 100644 index 0000000..679debd Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jumbo-angus-SjSms+Bfxop0rBuCyw9vNg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jumbo-toad-ObsGVat794NjAa2oTtoVFw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jumbo-toad-ObsGVat794NjAa2oTtoVFw== deleted file mode 100644 index 73752de..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_jumbo-toad-ObsGVat794NjAa2oTtoVFw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_kept-rodent-1dUgcqy+w.tCslZTh3Inig== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_kept-rodent-1dUgcqy+w.tCslZTh3Inig== new file mode 100644 index 0000000..969c9f2 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_kept-rodent-1dUgcqy+w.tCslZTh3Inig== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_khaki-mammut-4gLbXaKP3IezB0uKyuJDtg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_khaki-mammut-4gLbXaKP3IezB0uKyuJDtg== deleted file mode 100644 index 505e036..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_khaki-mammut-4gLbXaKP3IezB0uKyuJDtg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_known-wren-DkvWkcC5gR6wmMM1XVSIvA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_known-wren-DkvWkcC5gR6wmMM1XVSIvA== new file mode 100644 index 0000000..dff6835 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_known-wren-DkvWkcC5gR6wmMM1XVSIvA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_lapsed-cod-EbZGd44kJJGU+yVSrI33rw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_lapsed-cod-EbZGd44kJJGU+yVSrI33rw== new file mode 100644 index 0000000..1dcedcf Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_lapsed-cod-EbZGd44kJJGU+yVSrI33rw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_largo-volvox-OAf+MXQOtcEl69scsJAr1g== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_largo-volvox-OAf+MXQOtcEl69scsJAr1g== new file mode 100644 index 0000000..b250fe7 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_largo-volvox-OAf+MXQOtcEl69scsJAr1g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_leafed-slug-fUMGWXpM+0pNSw7fyXfdsQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_leafed-slug-fUMGWXpM+0pNSw7fyXfdsQ== new file mode 100644 index 0000000..74b92a2 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_leafed-slug-fUMGWXpM+0pNSw7fyXfdsQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_leaved-dog-srxWA8w6iA+RLzbfwFQ5Pg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_leaved-dog-srxWA8w6iA+RLzbfwFQ5Pg== new file mode 100644 index 0000000..c513601 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_leaved-dog-srxWA8w6iA+RLzbfwFQ5Pg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_lemony-egg-CwWDH.R6JEVAdC7rx4zDEA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_lemony-egg-CwWDH.R6JEVAdC7rx4zDEA== new file mode 100644 index 0000000..9d3c077 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_lemony-egg-CwWDH.R6JEVAdC7rx4zDEA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_loamy-iguana-UdXNv0qlbjG+LAADWGFWFw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_loamy-iguana-UdXNv0qlbjG+LAADWGFWFw== new file mode 100644 index 0000000..8b2cbd4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_loamy-iguana-UdXNv0qlbjG+LAADWGFWFw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_motile-embryo-3LLPyTcz2pssMnW8nWIRCw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_motile-embryo-3LLPyTcz2pssMnW8nWIRCw== deleted file mode 100644 index 896fa30..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_motile-embryo-3LLPyTcz2pssMnW8nWIRCw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_much-earwig-+dPSTfW+0e3zpv+KUQeJAw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_much-earwig-+dPSTfW+0e3zpv+KUQeJAw== new file mode 100644 index 0000000..8a91977 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_much-earwig-+dPSTfW+0e3zpv+KUQeJAw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_napped-okapi-64rk4SnwYeCt+DDVF.Qi.A== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_napped-okapi-64rk4SnwYeCt+DDVF.Qi.A== new file mode 100644 index 0000000..f7343d6 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_napped-okapi-64rk4SnwYeCt+DDVF.Qi.A== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_nasal-goat-pOJeCPjeWd2a4JO9lMgXlA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_nasal-goat-pOJeCPjeWd2a4JO9lMgXlA== new file mode 100644 index 0000000..d8ea6e7 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_nasal-goat-pOJeCPjeWd2a4JO9lMgXlA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_nifty-skate-.vWP28efc.wfD+Cvty5Mqg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_nifty-skate-.vWP28efc.wfD+Cvty5Mqg== new file mode 100644 index 0000000..a5106ba Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_nifty-skate-.vWP28efc.wfD+Cvty5Mqg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_none-merino-cCIlPfFvee0bmchoR+eO+Q== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_none-merino-cCIlPfFvee0bmchoR+eO+Q== new file mode 100644 index 0000000..5603c77 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_none-merino-cCIlPfFvee0bmchoR+eO+Q== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_nordic-puppy-JC4BjD1H993hFNNH6NLS3w== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_nordic-puppy-JC4BjD1H993hFNNH6NLS3w== new file mode 100644 index 0000000..6f5b6e6 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_nordic-puppy-JC4BjD1H993hFNNH6NLS3w== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_ocular-minnow-wFt2h+OPTsTCHHntk6jZyw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_ocular-minnow-wFt2h+OPTsTCHHntk6jZyw== new file mode 100644 index 0000000..9d30056 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_ocular-minnow-wFt2h+OPTsTCHHntk6jZyw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_offish-virus-I31JE++yBPTOIHHv2d90oQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_offish-virus-I31JE++yBPTOIHHv2d90oQ== new file mode 100644 index 0000000..e8c70f2 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_offish-virus-I31JE++yBPTOIHHv2d90oQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_orange-corgi-o95Xxj3UEcml3vTPIaI2tw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_orange-corgi-o95Xxj3UEcml3vTPIaI2tw== new file mode 100644 index 0000000..0b1fba4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_orange-corgi-o95Xxj3UEcml3vTPIaI2tw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_over-merino-kW7JgUQTwVM.NuIzb0t.8g== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_over-merino-kW7JgUQTwVM.NuIzb0t.8g== new file mode 100644 index 0000000..307776f Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_over-merino-kW7JgUQTwVM.NuIzb0t.8g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_pet-hydra-G5hIM5IzvnuNmkrA1UKq5Q== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_pet-hydra-G5hIM5IzvnuNmkrA1UKq5Q== deleted file mode 100644 index 0065a73..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_pet-hydra-G5hIM5IzvnuNmkrA1UKq5Q== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_plowed-gibbon-KxNQAtqKN4d0oJJSgw8TbA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_plowed-gibbon-KxNQAtqKN4d0oJJSgw8TbA== deleted file mode 100644 index d946651..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_plowed-gibbon-KxNQAtqKN4d0oJJSgw8TbA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_portly-gecko-NriD5dRN6rNqNgHjABJL2A== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_portly-gecko-NriD5dRN6rNqNgHjABJL2A== deleted file mode 100644 index edc0850..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_portly-gecko-NriD5dRN6rNqNgHjABJL2A== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_pro-macaw-XfK6uz3Q34bqWj5uwDe4Pg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_pro-macaw-XfK6uz3Q34bqWj5uwDe4Pg== new file mode 100644 index 0000000..7a8a3cf Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_pro-macaw-XfK6uz3Q34bqWj5uwDe4Pg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_pulpy-giant-.EzbzfxuDiP2Qn3xRVJv3g== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_pulpy-giant-.EzbzfxuDiP2Qn3xRVJv3g== new file mode 100644 index 0000000..83f156e Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_pulpy-giant-.EzbzfxuDiP2Qn3xRVJv3g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_quack-cayman-YB1BBzQF6aDaAgiXXk74og== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_quack-cayman-YB1BBzQF6aDaAgiXXk74og== new file mode 100644 index 0000000..d665fb6 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_quack-cayman-YB1BBzQF6aDaAgiXXk74og== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_rigged-insect-ebBL9yU7E2YHit6KDcx7RQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_rigged-insect-ebBL9yU7E2YHit6KDcx7RQ== new file mode 100644 index 0000000..d8d0399 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_rigged-insect-ebBL9yU7E2YHit6KDcx7RQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_riming-shad-0PBsN73pFhDK8RpSqmTW.A== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_riming-shad-0PBsN73pFhDK8RpSqmTW.A== new file mode 100644 index 0000000..45d0b6e Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_riming-shad-0PBsN73pFhDK8RpSqmTW.A== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_rouged-amoeba-rWNJ1OytAvOnACWD6Eh+nA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_rouged-amoeba-rWNJ1OytAvOnACWD6Eh+nA== new file mode 100644 index 0000000..8103bf4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_rouged-amoeba-rWNJ1OytAvOnACWD6Eh+nA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_satiny-beef-Yox.39uKwXYvW+4V3Ytw0w== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_satiny-beef-Yox.39uKwXYvW+4V3Ytw0w== new file mode 100644 index 0000000..98b39f6 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_satiny-beef-Yox.39uKwXYvW+4V3Ytw0w== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_seated-wrasse-..XJaLgxwrWEE+F8PC3RKA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_seated-wrasse-..XJaLgxwrWEE+F8PC3RKA== new file mode 100644 index 0000000..bb3103b Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_seated-wrasse-..XJaLgxwrWEE+F8PC3RKA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_shaped-hydra-yfqsuwY3AZrL67yB3SbUfw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_shaped-hydra-yfqsuwY3AZrL67yB3SbUfw== new file mode 100644 index 0000000..1045177 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_shaped-hydra-yfqsuwY3AZrL67yB3SbUfw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_six-finch-iM3JP3pTVaGVUgfiwHB7Rw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_six-finch-iM3JP3pTVaGVUgfiwHB7Rw== new file mode 100644 index 0000000..8da8a0d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_six-finch-iM3JP3pTVaGVUgfiwHB7Rw== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_skimpy-virus-0bUSP5COhSGsfVapLkZUPg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_skimpy-virus-0bUSP5COhSGsfVapLkZUPg== new file mode 100644 index 0000000..8c33ccb Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_skimpy-virus-0bUSP5COhSGsfVapLkZUPg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_snuffed-algae-xeIYQAm8nseysKVXgORfRw== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_snuffed-algae-xeIYQAm8nseysKVXgORfRw== deleted file mode 100644 index 598d94b..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_snuffed-algae-xeIYQAm8nseysKVXgORfRw== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_spayed-syphon-0KlbFjPu6rVSQNeczaO9Og== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_spayed-syphon-0KlbFjPu6rVSQNeczaO9Og== deleted file mode 100644 index e91d876..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_spayed-syphon-0KlbFjPu6rVSQNeczaO9Og== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_spry-spider-zLaPWAcbiL8pB+z6jMWP.g== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_spry-spider-zLaPWAcbiL8pB+z6jMWP.g== new file mode 100644 index 0000000..7a28aeb Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_spry-spider-zLaPWAcbiL8pB+z6jMWP.g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_stumpy-hare-lNdOPh2F2Y4TuhV19zdgJg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_stumpy-hare-lNdOPh2F2Y4TuhV19zdgJg== new file mode 100644 index 0000000..ea7fe9d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_stumpy-hare-lNdOPh2F2Y4TuhV19zdgJg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_swift-iguana-Pyi4L7yqW8qBNuN.He7CkA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_swift-iguana-Pyi4L7yqW8qBNuN.He7CkA== new file mode 100644 index 0000000..0265dfe Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_swift-iguana-Pyi4L7yqW8qBNuN.He7CkA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_swingy-puppy-s4+FRaikmLHFB1MnMlcq3g== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_swingy-puppy-s4+FRaikmLHFB1MnMlcq3g== new file mode 100644 index 0000000..4bafcac Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_swingy-puppy-s4+FRaikmLHFB1MnMlcq3g== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tailed-puppy-6l2W6zEt9JdWjfSmDUHqvQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tailed-puppy-6l2W6zEt9JdWjfSmDUHqvQ== new file mode 100644 index 0000000..56b0c63 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tailed-puppy-6l2W6zEt9JdWjfSmDUHqvQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tiled-cobra-+XizU23JWsKVu5TF1VnxhQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tiled-cobra-+XizU23JWsKVu5TF1VnxhQ== new file mode 100644 index 0000000..13d88a6 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tiled-cobra-+XizU23JWsKVu5TF1VnxhQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_timed-tapir-ZnMmJ2TwJ+fXYC8WxBaong== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_timed-tapir-ZnMmJ2TwJ+fXYC8WxBaong== new file mode 100644 index 0000000..27ba5ef Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_timed-tapir-ZnMmJ2TwJ+fXYC8WxBaong== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tippy-hydra-BLGOv0WKdqZjJmwfK9rG0g== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tippy-hydra-BLGOv0WKdqZjJmwfK9rG0g== deleted file mode 100644 index 3974d81..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tippy-hydra-BLGOv0WKdqZjJmwfK9rG0g== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_truant-brahma-uOaEdPmYkw1sRB2iXtdYCA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_truant-brahma-uOaEdPmYkw1sRB2iXtdYCA== new file mode 100644 index 0000000..366f7f3 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_truant-brahma-uOaEdPmYkw1sRB2iXtdYCA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tubed-canary-+Sc0Dy4IeRa8lUpejMwoyg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tubed-canary-+Sc0Dy4IeRa8lUpejMwoyg== deleted file mode 100644 index 72443ca..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tubed-canary-+Sc0Dy4IeRa8lUpejMwoyg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tusked-leech-kgXymM.qlArp4blSfLODTg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tusked-leech-kgXymM.qlArp4blSfLODTg== deleted file mode 100644 index 55fa551..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_tusked-leech-kgXymM.qlArp4blSfLODTg== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_unkept-setter-ey+RKX0fj0X.x.ho4b0CuA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_unkept-setter-ey+RKX0fj0X.x.ho4b0CuA== deleted file mode 100644 index 3b6e27a..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_unkept-setter-ey+RKX0fj0X.x.ho4b0CuA== and /dev/null differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_vatic-ewe-E4BTR1moZvuE07B0KAZ6gg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_vatic-ewe-E4BTR1moZvuE07B0KAZ6gg== new file mode 100644 index 0000000..e156a10 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_vatic-ewe-E4BTR1moZvuE07B0KAZ6gg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_velar-lynx-CG9qGqDnKSXbn05C6TEC4w== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_velar-lynx-CG9qGqDnKSXbn05C6TEC4w== new file mode 100644 index 0000000..8131861 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_velar-lynx-CG9qGqDnKSXbn05C6TEC4w== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_vested-cub-SAtFKbWWAZEGRVfSx4j5Kg== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_vested-cub-SAtFKbWWAZEGRVfSx4j5Kg== new file mode 100644 index 0000000..6b2990b Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_vested-cub-SAtFKbWWAZEGRVfSx4j5Kg== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_waxing-canine-szk6HKwz5NnEWdkzgJZxzA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_waxing-canine-szk6HKwz5NnEWdkzgJZxzA== new file mode 100644 index 0000000..002075d Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_waxing-canine-szk6HKwz5NnEWdkzgJZxzA== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_wilted-dog-KV8CrH4Mmo4Gfhgvx.RiTQ== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_wilted-dog-KV8CrH4Mmo4Gfhgvx.RiTQ== new file mode 100644 index 0000000..8c267c4 Binary files /dev/null and b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_wilted-dog-KV8CrH4Mmo4Gfhgvx.RiTQ== differ diff --git a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_yucky-fowl-SAkABgm151DiVOYbmKWCKA== b/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_yucky-fowl-SAkABgm151DiVOYbmKWCKA== deleted file mode 100644 index 5e85b34..0000000 Binary files a/spot_utils/graph_nav_maps/outside-621/waypoint_snapshots/snapshot_yucky-fowl-SAkABgm151DiVOYbmKWCKA== and /dev/null differ diff --git a/spot_utils/pretrained_model_interface.py b/spot_utils/pretrained_model_interface.py new file mode 100644 index 0000000..f555092 --- /dev/null +++ b/spot_utils/pretrained_model_interface.py @@ -0,0 +1,449 @@ +"""Interface to pretrained large models. + +These might be joint Vision-Language Models (VLM's) or Large Language +Models (LLM's) +""" + +import abc +import base64 +import logging +import os +from io import BytesIO +from typing import Collection, Dict, List, Optional, Union + +import google.generativeai as genai +import imagehash +import openai +import PIL.Image +from tenacity import retry, stop_after_attempt, wait_random_exponential + +# This is a special string that we assume will never appear in a prompt, and +# which we use to separate prompt and completion in the cache. The reason to +# do it this way, rather than saving the prompt and responses separately, +# is that we want it to be easy to browse the cache as text files. +_CACHE_SEP = "\n####$$$###$$$####$$$$###$$$####$$$###$$$###\n" + +pretrained_model_prompt_cache_dir = "cache-fixme" + + +class PretrainedLargeModel(abc.ABC): + """A pretrained large vision or language model.""" + + @abc.abstractmethod + def get_id(self) -> str: + """Get a string identifier for this model. + + This identifier should include sufficient information so that + querying the same model with the same prompt and same identifier + should yield the same result (assuming temperature 0). + """ + raise NotImplementedError("Override me!") + + @abc.abstractmethod + def _sample_completions(self, + prompt: str, + imgs: Optional[List[PIL.Image.Image]], + temperature: float, + seed: int, + stop_token: Optional[str] = None, + num_completions: int = 1) -> List[str]: + """This is the main method that subclasses must implement. + + This helper method is called by sample_completions(), which + caches the prompts and responses to disk. + """ + raise NotImplementedError("Override me!") + + def sample_completions(self, + prompt: str, + imgs: Optional[List[PIL.Image.Image]], + temperature: float, + seed: int, + stop_token: Optional[str] = None, + num_completions: int = 1) -> List[str]: + """Sample one or more completions from a prompt. + + Higher temperatures will increase the variance in the responses. + The seed may not be used and the results may therefore not be + reproducible for models where we only have access through an API + that does not expose the ability to set a random seed. Responses + are saved to disk. + """ + # Set up the cache file. + assert _CACHE_SEP not in prompt + os.makedirs(pretrained_model_prompt_cache_dir, exist_ok=True) + model_id = self.get_id() + prompt_id = hash(prompt) + config_id = f"{temperature}_{seed}_{num_completions}_" + \ + f"{stop_token}" + # If the temperature is 0, the seed does not matter. + if temperature == 0.0: + config_id = f"most_likely_{num_completions}_{stop_token}" + cache_foldername = f"{model_id}_{config_id}_{prompt_id}" + if imgs is not None: + # We also need to hash all the images in the prompt. + img_hash_list: List[str] = [] + for img in imgs: + img_hash_list.append(str(imagehash.phash(img))) + # NOTE: it's possible that this string (the concatenated hashes of + # each image) is very long. This would make the final cache + # foldername long. In many operating systems, the maximum folder + # name length is 255 characters. To shorten this foldername more, we + # can hash this string into a shorter string. For example, look at + # https://stackoverflow.com/questions/57263436/hash-like-string-shortener-with-decoder # pylint:disable=line-too-long + imgs_id = hash("".join(img_hash_list)) + cache_foldername += f"{imgs_id}" + cache_folderpath = os.path.join(pretrained_model_prompt_cache_dir, + cache_foldername) + os.makedirs(cache_folderpath, exist_ok=True) + cache_filename = "prompt.txt" + cache_filepath = os.path.join(pretrained_model_prompt_cache_dir, + cache_foldername, cache_filename) + if not os.path.exists(cache_filepath): + llm_use_cache_only = False + if llm_use_cache_only: + raise ValueError("No cached response found for prompt.") + logging.debug(f"Querying model {model_id} with new prompt.") + # Query the model. + completions = self._sample_completions(prompt, imgs, temperature, + seed, stop_token, + num_completions) + # Cache the completion. + cache_str = prompt + _CACHE_SEP + _CACHE_SEP.join(completions) + with open(cache_filepath, 'w', encoding='utf-8') as f: + f.write(cache_str) + if imgs is not None: + # Also save the images for easy debugging. + imgs_folderpath = os.path.join(cache_folderpath, "imgs") + os.makedirs(imgs_folderpath, exist_ok=True) + for i, img in enumerate(imgs): + filename_suffix = str(i) + ".jpg" + img.save(os.path.join(imgs_folderpath, filename_suffix)) + logging.debug(f"Saved model response to {cache_filepath}.") + # Load the saved completion. + with open(cache_filepath, 'r', encoding='utf-8') as f: + cache_str = f.read() + logging.debug(f"Loaded model response from {cache_filepath}.") + assert cache_str.count(_CACHE_SEP) == num_completions + cached_prompt, completion_strs = cache_str.split(_CACHE_SEP, 1) + assert cached_prompt == prompt + completions = completion_strs.split(_CACHE_SEP) + return completions + + +class VisionLanguageModel(PretrainedLargeModel): + """A class for all VLM's.""" + + def sample_completions( + self, + prompt: str, + imgs: Optional[List[PIL.Image.Image]], + temperature: float, + seed: int, + stop_token: Optional[str] = None, + num_completions: int = 1) -> List[str]: # pragma: no cover + assert imgs is not None + return super().sample_completions(prompt, imgs, temperature, seed, + stop_token, num_completions) + + +class LargeLanguageModel(PretrainedLargeModel): + """A class for all LLM's.""" + + def sample_completions( + self, + prompt: str, + imgs: Optional[List[PIL.Image.Image]], + temperature: float, + seed: int, + stop_token: Optional[str] = None, + num_completions: int = 1) -> List[str]: # pragma: no cover + assert imgs is None + return super().sample_completions(prompt, imgs, temperature, seed, + stop_token, num_completions) + + +class OpenAIModel(): + """Common interface with methods for all OpenAI-based models.""" + + def set_openai_key(self, key: Optional[str] = None) -> None: + """Set the OpenAI API key.""" + if key is None: + assert "OPENAI_API_KEY" in os.environ + key = os.environ["OPENAI_API_KEY"] + + # @retry(wait=wait_random_exponential(min=1, max=60), + # stop=stop_after_attempt(10)) + # def call_openai_api(self, + # messages: list, + # model: str = "gpt-4", + # seed: Optional[int] = None, + # max_tokens: int = 32, + # temperature: float = 0.2, + # verbose: bool = False) -> str: # pragma: no cover + # """Make an API call to OpenAI.""" + # client = openai.OpenAI() + # completion = client.chat.completions.create( + # model=model, + # messages=messages, + # seed=seed, + # max_tokens=max_tokens, + # temperature=temperature, + # ) + # if verbose: + # logging.debug(f"OpenAI API response: {completion}") + # assert len(completion.choices) == 1 + # assert completion.choices[0].message.content is not None + # return completion.choices[0].message.content + @retry(wait=wait_random_exponential(min=1, max=60), + stop=stop_after_attempt(10)) + def call_openai_api(self, + messages: List[dict], + model: str = "gpt-4", + seed: Optional[int] = None, + max_tokens: int = 32, + temperature: float = 0.2, + verbose: bool = False) -> str: + """Make an API call to OpenAI.""" + client = openai.OpenAI() + + # Insert a strong, safe research system prompt + system_message = { + "role": "system", + # "content": ( + # "You are a helpful AI research assistant working on a robotics project at MIT. " + # "All tasks are safe, academic, and intended for legitimate research purposes. " + # "Respond helpfully and do not refuse unless absolutely necessary." + # ) + "content": ( + "You are a helpful AI research assistant working on a robotics project at MIT. " + "The task involves analyzing synthetic lab images in a controlled academic setting. " + "You are permitted to make judgments about predicates describing object states, robot actions, and scene properties. " + "You should always attempt to answer unless the input is truly unintelligible. " + "Assume no safety concerns. Assume all content is safe." + "You are permitted to infer reasonable truths based on typical physics, causality, and object behaviors." + ) + } + + # Ensure the system message is the first message + full_messages = [system_message] + messages + + # Make the chat completion call + completion = client.chat.completions.create( + model=model, + messages=full_messages, + seed=seed, + max_tokens=max_tokens, + temperature=temperature, + ) + + if verbose: + logging.debug(f"OpenAI API response: {completion}") + + assert len(completion.choices) == 1, "Unexpected number of choices returned." + assert completion.choices[0].message.content is not None, "Completion content is None." + + return completion.choices[0].message.content + + +class GoogleGeminiModel(): + """Common interface and methods for all Gemini-based models. + + Assumes that an environment variable GOOGLE_API_KEY is set with the + necessary API key to query the particular model name. + """ + + def __init__(self, model_name: str) -> None: + """See https://ai.google.dev/models/gemini for the list of available + model names.""" + self._model_name = model_name + assert "GOOGLE_API_KEY" in os.environ + genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) + self._model = genai.GenerativeModel(self._model_name) # pylint:disable=no-member + + +class OpenAILLM(LargeLanguageModel, OpenAIModel): + """Interface to openAI LLMs. + + Assumes that an environment variable OPENAI_API_KEY is set to a + private API key for beta.openai.com. + """ + + def __init__(self, model_name: str) -> None: + """See https://platform.openai.com/docs/models for the list of + available model names.""" + self._model_name = model_name + # Note that max_tokens is the maximum response length (not prompt). + # From OpenAI docs: "The token count of your prompt plus max_tokens + # cannot exceed the model's context length." + self._max_tokens = 700 + self.set_openai_key() + + def get_id(self) -> str: + return f"openai-{self._model_name}" + + def _sample_completions( + self, + prompt: str, + imgs: Optional[List[PIL.Image.Image]], + temperature: float, + seed: int, + stop_token: Optional[str] = None, + num_completions: int = 1) -> List[str]: # pragma: no cover + del imgs, seed, stop_token # unused + messages = [{"role": "user", "content": prompt, "type": "text"}] + responses = [ + self.call_openai_api(messages, + model=self._model_name, + temperature=temperature, + max_tokens=self._max_tokens) + for _ in range(num_completions) + ] + return responses + + +class GoogleGeminiLLM(LargeLanguageModel, GoogleGeminiModel): + """Interface to the Google Gemini VLM (1.5). + + Assumes that an environment variable GOOGLE_API_KEY is set with the + necessary API key to query the particular model name. + """ + + @retry(wait=wait_random_exponential(min=1, max=60), + stop=stop_after_attempt(10)) + def _sample_completions( + self, + prompt: str, + imgs: Optional[List[PIL.Image.Image]], + temperature: float, + seed: int, + stop_token: Optional[str] = None, + num_completions: int = 1) -> List[str]: # pragma: no cover + del seed, stop_token # unused + assert imgs is None + generation_config = genai.types.GenerationConfig( # pylint:disable=no-member + candidate_count=num_completions, + temperature=temperature) + response = self._model.generate_content( + [prompt], generation_config=generation_config) # type: ignore + response.resolve() # type: ignore + return [response.text] + + def get_id(self) -> str: + return f"Google-{self._model_name}" + + +class GoogleGeminiVLM(VisionLanguageModel, GoogleGeminiModel): + """Interface to the Google Gemini VLM (1.5). + + Assumes that an environment variable GOOGLE_API_KEY is set with the + necessary API key to query the particular model name. + """ + + @retry(wait=wait_random_exponential(min=1, max=60), + stop=stop_after_attempt(20)) + def _sample_completions( + self, + prompt: str, + imgs: Optional[List[PIL.Image.Image]], + temperature: float, + seed: int, + stop_token: Optional[str] = None, + num_completions: int = 1) -> List[str]: # pragma: no cover + del seed, stop_token # unused + assert imgs is not None + generation_config = genai.types.GenerationConfig( # pylint:disable=no-member + candidate_count=num_completions, + temperature=temperature) + response = self._model.generate_content( + [prompt] + imgs, # type: ignore + generation_config=generation_config) # type: ignore + # import pdb; pdb.set_trace() + response.resolve() # type: ignore + return [response.text] + + def get_id(self) -> str: + return f"Google-{self._model_name}" + + +class OpenAIVLM(VisionLanguageModel, OpenAIModel): + """Interface for OpenAI's VLMs, including GPT-4 Turbo (and preview + versions).""" + + def __init__(self, model_name: str): + """Initialize with a specific model name.""" + self.model_name = model_name + # Note that max_tokens is the maximum response length (not prompt). + # From OpenAI docs: "The token count of your prompt plus max_tokens + # cannot exceed the model's context length." + self._max_tokens = 700 + self.set_openai_key() + + def prepare_vision_messages( + self, + images: List[PIL.Image.Image], + prefix: Optional[str] = None, + suffix: Optional[str] = None, + image_size: Optional[int] = 512, + detail: str = "auto" + ) -> List[Dict[str, Union[str, List[Dict[str, str]], List[Dict[ + str, Collection[str]]]]]]: + """Prepare text and image messages for the OpenAI API.""" + content: List[Dict[str, Union[str, Collection[str]]]] = [] + if prefix: + content.append({"text": prefix, "type": "text"}) + assert images + assert detail in ["auto", "low", "high"] + for img in images: + img_resized = img + if image_size: + factor = image_size / max(img.size) + img_resized = img.resize( + (int(img.size[0] * factor), int(img.size[1] * factor))) + # Convert the image to PNG format and encode it in base64 + buffer = BytesIO() + img_resized.save(buffer, format="PNG") + buf = buffer.getvalue() + frame = base64.b64encode(buf).decode("utf-8") + content_str = { + "image_url": { + "url": f"data:image/png;base64,{frame}", + "detail": detail + }, + "type": "image_url" + } + content.append(content_str) + if suffix: + content.append({"text": suffix, "type": "text"}) + return [{"role": "user", "content": content}] + + def get_id(self) -> str: + """Get an identifier for the model.""" + return f"OpenAI-{self.model_name}" + + def _sample_completions( + self, + prompt: str, + imgs: Optional[List[PIL.Image.Image]], + temperature: float, + seed: int, + stop_token: Optional[str] = None, + num_completions: int = 1, + ) -> List[str]: # pragma: no cover + """Query the model and get responses.""" + del seed, stop_token # unused. + if imgs is None: + raise ValueError("images cannot be None") + messages = self.prepare_vision_messages(prefix=prompt, + images=imgs, + detail="auto") + responses = [ + self.call_openai_api(messages, model=self.model_name, max_tokens=self._max_tokens, temperature=temperature) + for _ in range(num_completions) + ] + # while any("sorry" in response.lower() for response in responses): + # responses = [ + # self.call_openai_api(messages, model=self.model_name, max_tokens=self._max_tokens, temperature=temperature) + # for _ in range(num_completions) + # ] + return responses diff --git a/spot_utils/utils.py b/spot_utils/utils.py index 82d41f5..4254b5d 100644 --- a/spot_utils/utils.py +++ b/spot_utils/utils.py @@ -168,3 +168,10 @@ def get_robot_gripper_open_percentage(robot: Robot) -> float: """Get the current state of how open the gripper is.""" robot_state = get_robot_state(robot) return float(robot_state.manipulator_state.gripper_open_percentage) + + +def get_se2_distance(pose1: math_helpers.SE2Pose, pose2: math_helpers.SE2Pose) -> float: + """Get the Euclidean distance between two SE2Poses, ignoring rotation.""" + dx = pose2.x - pose1.x + dy = pose2.y - pose1.y + return (dx * dx + dy * dy) ** 0.5