From 94f1cb786d98de2ed1fcf090206a15949b7473ba Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sat, 2 Mar 2024 22:05:29 -0500
Subject: [PATCH 01/24] clean up, remove lincense from top of file

---
 gym/f110_gym/envs/base_classes.py     |  28 --
 gym/f110_gym/envs/collision_models.py |  29 --
 gym/f110_gym/envs/dynamic_models.py   |  28 --
 gym/f110_gym/envs/f110_env.py         |  26 --
 gym/f110_gym/envs/f110_env_backup.py  | 624 --------------------------
 gym/f110_gym/envs/laser_models.py     |  27 --
 6 files changed, 762 deletions(-)
 delete mode 100644 gym/f110_gym/envs/f110_env_backup.py

diff --git a/gym/f110_gym/envs/base_classes.py b/gym/f110_gym/envs/base_classes.py
index b1e28483..bda02aec 100644
--- a/gym/f110_gym/envs/base_classes.py
+++ b/gym/f110_gym/envs/base_classes.py
@@ -1,31 +1,3 @@
-# MIT License
-
-# Copyright (c) 2020 Joseph Auckley, Matthew O'Kelly, Aman Sinha, Hongrui Zheng
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-
-"""
-Prototype of base classes
-Replacement of the old RaceCar, Simulator classes in C++
-Author: Hongrui Zheng
-"""
 from __future__ import annotations
 import numpy as np
 from f110_gym.envs.dynamic_models import DynamicModel
diff --git a/gym/f110_gym/envs/collision_models.py b/gym/f110_gym/envs/collision_models.py
index 87547ab6..3f7ac235 100644
--- a/gym/f110_gym/envs/collision_models.py
+++ b/gym/f110_gym/envs/collision_models.py
@@ -1,32 +1,3 @@
-# MIT License
-
-# Copyright (c) 2020 Joseph Auckley, Matthew O'Kelly, Aman Sinha, Hongrui Zheng
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-
-"""
-Prototype of Utility functions and GJK algorithm for Collision checks between vehicles
-Originally from https://github.com/kroitor/gjk.c
-Author: Hongrui Zheng
-"""
-
 import numpy as np
 from numba import njit
 
diff --git a/gym/f110_gym/envs/dynamic_models.py b/gym/f110_gym/envs/dynamic_models.py
index 790de252..112126ec 100644
--- a/gym/f110_gym/envs/dynamic_models.py
+++ b/gym/f110_gym/envs/dynamic_models.py
@@ -1,31 +1,3 @@
-# Copyright 2020 Technical University of Munich, Professorship of Cyber-Physical Systems, Matthew O'Kelly, Aman Sinha, Hongrui Zheng
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-
-"""
-Prototype of vehicle dynamics functions and classes for simulating 2D Single
-Track dynamic model
-Following the implementation of commanroad's Single Track Dynamics model
-Original implementation: https://gitlab.lrz.de/tum-cps/commonroad-vehicle-models/
-Author: Hongrui Zheng, Renukanandan Tumu
-"""
 import warnings
 from enum import Enum
 
diff --git a/gym/f110_gym/envs/f110_env.py b/gym/f110_gym/envs/f110_env.py
index ba3458f9..5ce8a61e 100644
--- a/gym/f110_gym/envs/f110_env.py
+++ b/gym/f110_gym/envs/f110_env.py
@@ -1,29 +1,3 @@
-# MIT License
-
-# Copyright (c) 2020 Joseph Auckley, Matthew O'Kelly, Aman Sinha, Hongrui Zheng
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-"""
-Author: Hongrui Zheng
-"""
-
 # gym imports
 import gymnasium as gym
 
diff --git a/gym/f110_gym/envs/f110_env_backup.py b/gym/f110_gym/envs/f110_env_backup.py
deleted file mode 100644
index b488492d..00000000
--- a/gym/f110_gym/envs/f110_env_backup.py
+++ /dev/null
@@ -1,624 +0,0 @@
-# MIT License
-
-# Copyright (c) 2020 Joseph Auckley, Matthew O'Kelly, Aman Sinha, Hongrui Zheng
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-"""
-Author: Hongrui Zheng
-"""
-
-import os
-import signal
-import subprocess
-import sys
-
-# others
-import numpy as np
-
-# protobuf import
-import sim_requests_pb2
-import yaml
-
-# zmq imports
-import zmq
-from PIL import Image
-
-# gym imports
-import gym
-from gym import utils
-
-# from matplotlib.pyplot import imshow
-# import matplotlib.pyplot as plt
-
-
-class F110Env(gym.Env, utils.EzPickle):
-    """
-    OpenAI gym environment for F1/10 simulator
-    Use 0mq's REQ-REP pattern to communicate to the C++ simulator
-    ONE env has ONE corresponding C++ instance
-    Need to create env with map input, full path to map yaml file, map pgm image and yaml should be in same directory
-
-    should be initialized with a map, a timestep, and number of agents
-    """
-
-    metadata = {"render.modes": []}
-
-    def __init__(self):
-        # simualtor params
-        self.params_set = False
-        self.map_inited = False
-        # params list is [mu, h_cg, l_r, cs_f, cs_r, I_z, mass]
-        self.params = []
-        # TODO: add multi agent stuff, need a _add_agent function of sth
-        self.num_agents = 2
-        self.timestep = 0.01
-
-        # TODO: clean up the map path stuff, right now it's a init_map function
-        self.map_path = None
-        self.map_img = None
-
-        # current_dir = os.path.dirname(os.path.abspath(__file__))
-        # map_path = current_dir + '/../../../maps/Levine_map.yaml'
-
-        # default
-        self.ego_idx = 0
-
-        # TODO: also set these things in init function?
-        self.timeout = 120.0
-        # radius to consider done
-        self.start_thresh = 0.5  # 10cm
-
-        # env states
-        # more accurate description should be ego car state
-        # might not need to keep scan
-        self.x = None
-        self.y = None
-        self.theta = None
-
-        self.in_collision = False
-        self.collision_angle = None
-
-        # loop completion
-        self.near_start = True
-        self.num_toggles = 0
-
-        # race info
-        self.lap_times = [0.0, 0.0]
-        self.lap_counts = [0, 0]
-
-        # TODO: load the map (same as ROS .yaml format)
-        # if not map_path.endswith('.yaml'):
-        #     print('Gym env - Please use a yaml file for map input.')
-        #     sys.exit()
-        # load map img
-        # map_img_path = 'levine.png'
-        # self.map_img = cv2.imread(map_img_path, 0)
-        # self.map_img = cv2.flip(self.map_img, 0)
-        # self.map_img = np.array(Image.open(map_img_path).transpose(Image.FLIP_TOP_BOTTOM))
-        # self.map_img = self.map_img.astype(np.float64)
-        # self.map_img = self.map_img[::-1]
-        # self.map_img = np.dot(self.map_img[..., :3], [0.29, 0.57, 0.14])
-        # plt.imshow(self.map_img)
-        # plt.show()
-
-        # map metadata
-        # self.map_height = self.map_img.shape[0]
-        # self.map_width = self.map_img.shape[1]
-        self.map_height = 0.0
-        self.map_width = 0.0
-        self.map_resolution = 0.0
-        self.free_thresh = 0.0
-        self.origin = []
-        # load map metadata
-        # with open(map_path, 'r') as yaml_stream:
-        #     try:
-        #         map_metadata = yaml.safe_load(yaml_stream)
-        #         self.map_resolution = map_metadata['resolution']
-        #         self.origin = map_metadata['origin']
-        #         # print(self.origin)
-        #         # self.free_thresh?????
-        #     except yaml.YAMLError as ex:
-        #         print(ex)
-
-        # create zmq stuff
-        # port number range from 6666 - 6766
-        # max 100 tries to connect/bind
-        tries = 0
-        max_tries = 100
-        min_port = 6666
-        self.port = min_port
-        self.context = zmq.Context()
-        self.socket = self.context.socket(zmq.PAIR)
-        while tries < max_tries:
-            try:
-                self.socket.bind("tcp://*:%s" % str(min_port + tries))
-                # self.socket.connect('tcp://localhost:6666')
-                self.port = min_port + tries
-                break
-            except Exception as _:  # noqa: F841
-                tries = tries + 1
-                # print('Gym env - retrying for ' + str(tries) + ' times')
-
-        print("Gym env - Connected env to port: " + str(self.port))
-
-        # create cpp instance if create then need to pass port number
-        # subprocess call assumes directory structure
-        # init sim with arguments: [ex timestep num_agents port_num]
-        # TODO: include other car params in argument
-        # args = ['../build/sim_server', str(self.timestep), str(self.num_agents), str(self.port)]
-        # self.sim_p = subprocess.Popen(args)
-        self.sim_p = None
-
-        # print('Gym env - env created, waiting for params...')
-
-    def __del__(self):
-        """
-        Finalizer, does cleanup
-        """
-        if self.sim_p is None:
-            pass
-        else:
-            os.kill(self.sim_p.pid, signal.SIGTERM)
-            # print('Gym env - Sim child process killed.')
-
-    def _start_executable(self, path):
-        mu = self.params[0]
-        h_cg = self.params[1]
-        l_r = self.params[2]
-        cs_f = self.params[3]
-        cs_r = self.params[4]
-        I_z = self.params[5]
-        mass = self.params[6]
-        args = [
-            path + "sim_server",
-            str(self.timestep),
-            str(self.num_agents),
-            str(self.port),
-            str(mu),
-            str(h_cg),
-            str(l_r),
-            str(cs_f),
-            str(cs_r),
-            str(I_z),
-            str(mass),
-        ]
-        self.sim_p = subprocess.Popen(args)
-
-    def _set_map(self):
-        """
-        Sets the map for the simulator instance
-        """
-        if not self.map_inited:
-            print("Gym env - Sim map not initialized, call env.init_map() to init map.")
-        # create and fill in protobuf
-        map_request_proto = sim_requests_pb2.SimRequest()
-        map_request_proto.type = 1
-        map_request_proto.map_request.map.extend(
-            (1.0 - self.map_img / 255.0).flatten().tolist()
-        )
-        map_request_proto.map_request.origin_x = self.origin[0]
-        map_request_proto.map_request.origin_y = self.origin[1]
-        map_request_proto.map_request.map_resolution = self.map_resolution
-        # TODO: double check if this value is valid
-        map_request_proto.map_request.free_threshold = self.free_thresh
-        map_request_proto.map_request.map_height = self.map_height
-        map_request_proto.map_request.map_width = self.map_width
-        # serialization
-        map_request_string = map_request_proto.SerializeToString()
-        # send set map request
-        # print('Gym env - Sending set map request...')
-        self.socket.send(map_request_string)
-        # print('Gym env - Map request sent.')
-        # receive response from sim instance
-        sim_response_string = self.socket.recv()
-        # parse map response proto
-        sim_response_proto = sim_requests_pb2.SimResponse()
-        sim_response_proto.ParseFromString(sim_response_string)
-        # get results
-        set_map_result = sim_response_proto.map_result.result
-        if set_map_result == 1:
-            print("Gym env - Set map failed, exiting...")
-            sys.exit()
-
-    def _check_done(self):
-        """
-        Check if the episode is done
-        This is in terms of the ego car
-        For our case, whether the car ends up close enough to the starting point
-        And if accumulated time is over the timeout
-        return true if done, false if not
-        This assumes start is always (0, 0)
-
-        """
-        # TODO: start not always 0, 0
-        # dist_to_start = math.sqrt((self.x-self.start_x) ** 2 + (self.y-self.start_y) ** 2)
-        left_t = 2
-        right_t = 2
-        timeout = self.current_time >= self.timeout
-        if self.double_finish:
-            poses_x = np.array(self.all_x) - self.start_xs
-            poses_y = np.array(self.all_y) - self.start_ys
-            delta_pt = np.dot(self.start_rot, np.stack((poses_x, poses_y), axis=0))
-            temp_y = delta_pt[1, :]
-            idx1 = temp_y > left_t
-            idx2 = temp_y < -right_t
-            temp_y[idx1] -= left_t
-            temp_y[idx2] = -right_t - temp_y[idx2]
-            temp_y[np.invert(np.logical_or(idx1, idx2))] = 0
-
-            dist2 = delta_pt[0, :] ** 2 + temp_y**2
-            closes = dist2 <= 0.1
-            for i in range(self.num_agents):
-                if closes[i] and not self.near_starts[i]:
-                    self.near_starts[i] = True
-                    self.toggle_list[i] += 1
-                elif not closes[i] and self.near_starts[i]:
-                    self.near_starts[i] = False
-                    self.toggle_list[i] += 1
-            done = self.in_collision | (timeout) | np.all(self.toggle_list >= 4)
-            # only for two cars atm
-            self.lap_counts[0] = np.floor(self.toggle_list[0] / 2)
-            self.lap_counts[1] = np.floor(self.toggle_list[1] / 2)
-            if self.toggle_list[0] < 4:
-                self.lap_times[0] = self.current_time
-            if self.toggle_list[1] < 4:
-                self.lap_times[1] = self.current_time
-            return done, self.toggle_list >= 4
-
-        delta_pt = np.dot(
-            self.start_rot, np.array([self.x - self.start_x, self.y - self.start_y])
-        )
-        if delta_pt[1] > left_t:  # left
-            temp_y = delta_pt[1] - left_t
-        elif delta_pt[1] < -right_t:  # right
-            temp_y = -right_t - delta_pt[1]
-        else:
-            temp_y = 0
-        dist2 = delta_pt[0] ** 2 + temp_y**2
-        close = dist2 <= 0.1
-        # close = dist_to_start <= self.start_thresh
-        if close and not self.near_start:
-            self.near_start = True
-            self.num_toggles += 1
-        elif not close and self.near_start:
-            self.near_start = False
-            self.num_toggles += 1
-        done = self.in_collision | (timeout) | (self.num_toggles >= 4)
-        return done
-
-    def _check_passed(self):
-        """
-        Returns the times that the ego car overtook the other car
-        """
-        return 0
-
-    def _update_state(self, obs_dict):
-        """
-        Update the env's states according to observations
-        obs is observation dictionary
-        """
-        self.x = obs_dict["poses_x"][obs_dict["ego_idx"]]
-        self.y = obs_dict["poses_y"][obs_dict["ego_idx"]]
-        if self.double_finish:
-            self.all_x = obs_dict["poses_x"]
-            self.all_y = obs_dict["poses_y"]
-
-        self.theta = obs_dict["poses_theta"][obs_dict["ego_idx"]]
-        self.in_collision = obs_dict["collisions"][obs_dict["ego_idx"]]
-        self.collision_angle = obs_dict["collision_angles"][obs_dict["ego_idx"]]
-
-    # TODO: do we do the ray casting here or in C++?
-    # if speed is a concern do it in C++?
-    # numba shouldn't be a dependency of gym env
-    def _raycast_opponents(self, obs_dict):
-        # find the angle of beam of each car in each other's fov
-
-        # set range of beams to raycast, ego and op
-
-        # raycast beams, two set
-        new_obs = {}
-        return new_obs
-
-    def step(self, action):
-        # can't step if params not set
-        if not self.params_set:
-            print(
-                "ERROR - Gym Env - Params not set, call update params before stepping."
-            )
-            sys.exit()
-        # action is a list of steering angles + command velocities
-        # also a ego car index
-        # action should a DICT with {'ego_idx': int, 'speed':[], 'steer':[]}
-        step_request_proto = sim_requests_pb2.SimRequest()
-        step_request_proto.type = 0
-        step_request_proto.step_request.ego_idx = action["ego_idx"]
-        step_request_proto.step_request.requested_vel.extend(action["speed"])
-        step_request_proto.step_request.requested_ang.extend(action["steer"])
-        # serialization
-        step_request_string = step_request_proto.SerializeToString()
-        # send step request
-        self.socket.send(step_request_string)
-        # receive response from sim instance
-        sim_response_string = self.socket.recv()
-        # print('Gym env - Received response for step request.')
-        # parse map response proto
-        sim_response_proto = sim_requests_pb2.SimResponse()
-        sim_response_proto.ParseFromString(sim_response_string)
-        # get results
-        # make sure we have the right type of response
-        response_type = sim_response_proto.type
-        # TODO: also check for stepping fail
-        if not response_type == 0:
-            print("Gym env - Wrong response type for stepping, exiting...")
-            sys.exit()
-        observations_proto = sim_response_proto.sim_obs
-        # make sure the ego idx matches
-        if not observations_proto.ego_idx == action["ego_idx"]:
-            print("Gym env - Ego index mismatch, exiting...")
-            sys.exit()
-        # get observations
-        carobs_list = observations_proto.observations
-        # construct observation dict
-        # Observation DICT, assume indices consistent: {'ego_idx':int, 'scans':[[]], 'poses_x':[], 'poses_y':[], 'poses_theta':[], 'linear_vels_x':[], 'linear_vels_y':[], 'ang_vels_z':[], 'collisions':[], 'collision_angles':[]}
-        obs = {
-            "ego_idx": observations_proto.ego_idx,
-            "scans": [],
-            "poses_x": [],
-            "poses_y": [],
-            "poses_theta": [],
-            "linear_vels_x": [],
-            "linear_vels_y": [],
-            "ang_vels_z": [],
-            "collisions": [],
-            "collision_angles": [],
-            "lap_times": [],
-            "lap_counts": [],
-        }
-        for car_obs in carobs_list:
-            obs["scans"].append(car_obs.scan)
-            obs["poses_x"].append(car_obs.pose_x)
-            obs["poses_y"].append(car_obs.pose_y)
-            if abs(car_obs.theta) < np.pi:
-                obs["poses_theta"].append(car_obs.theta)
-            else:
-                obs["poses_theta"].append(-((2 * np.pi) - car_obs.theta))
-            obs["linear_vels_x"].append(car_obs.linear_vel_x)
-            obs["linear_vels_y"].append(car_obs.linear_vel_y)
-            obs["ang_vels_z"].append(car_obs.ang_vel_z)
-            obs["collisions"].append(car_obs.collision)
-            obs["collision_angles"].append(car_obs.collision_angle)
-
-        obs["lap_times"] = self.lap_times
-        obs["lap_counts"] = self.lap_counts
-
-        # TODO: do we need step reward?
-        reward = self.timestep
-        # update accumulated time in env
-        self.current_time = self.current_time + self.timestep
-        # TODO: donezo should be done in simulator? could be done here as well
-        self._update_state(obs)
-        if self.double_finish:
-            done, temp = self._check_done()
-            info = {"checkpoint_done": temp}
-        else:
-            done = self._check_done()
-            info = {}
-
-        # TODO: return obs, reward, done, info
-        return obs, reward, done, info
-
-    def reset(self, poses=None):
-        self.current_time = 0.0
-        self.in_collision = False
-        self.collision_angles = None
-        self.num_toggles = 0
-        self.near_start = True
-        self.near_starts = np.array([True] * self.num_agents)
-        self.toggle_list = np.zeros((self.num_agents,))
-        if poses:
-            pose_x = poses["x"]
-            pose_y = poses["y"]
-            pose_theta = poses["theta"]
-            self.start_x = pose_x[0]
-            self.start_y = pose_y[0]
-            self.start_theta = pose_theta[0]
-            self.start_xs = np.array(pose_x)
-            self.start_ys = np.array(pose_y)
-            self.start_thetas = np.array(pose_theta)
-            self.start_rot = np.array(
-                [
-                    [np.cos(-self.start_theta), -np.sin(-self.start_theta)],
-                    [np.sin(-self.start_theta), np.cos(-self.start_theta)],
-                ]
-            )
-            # create reset by pose proto
-            reset_request_proto = sim_requests_pb2.SimRequest()
-            reset_request_proto.type = 4
-            reset_request_proto.reset_bypose_request.num_cars = self.num_agents
-            reset_request_proto.reset_bypose_request.ego_idx = 0
-            reset_request_proto.reset_bypose_request.car_x.extend(pose_x)
-            reset_request_proto.reset_bypose_request.car_y.extend(pose_y)
-            reset_request_proto.reset_bypose_request.car_theta.extend(pose_theta)
-            reset_request_string = reset_request_proto.SerializeToString()
-            self.socket.send(reset_request_string)
-        else:
-            # create reset proto
-            self.start_x = 0.0
-            self.start_y = 0.0
-            self.start_theta = 0.0
-            self.start_rot = np.array(
-                [
-                    [np.cos(-self.start_theta), -np.sin(-self.start_theta)],
-                    [np.sin(-self.start_theta), np.cos(-self.start_theta)],
-                ]
-            )
-            reset_request_proto = sim_requests_pb2.SimRequest()
-            reset_request_proto.type = 2
-            reset_request_proto.reset_request.num_cars = self.num_agents
-            reset_request_proto.reset_request.ego_idx = 0
-            # serialize reset proto
-            reset_request_string = reset_request_proto.SerializeToString()
-            # send reset proto string
-            self.socket.send(reset_request_string)
-        # receive response from sim
-        reset_response_string = self.socket.recv()
-        reset_response_proto = sim_requests_pb2.SimResponse()
-        reset_response_proto.ParseFromString(reset_response_string)
-        if reset_response_proto.reset_resp.result:
-            print("Gym env - Reset failed")
-            # TODO: failure handling
-            return None
-        # TODO: return with gym convention, one step?
-        vels = [0.0] * self.num_agents
-        angs = [0.0] * self.num_agents
-        action = {"ego_idx": self.ego_idx, "speed": vels, "steer": angs}
-        # print('Gym env - Reset done')
-        obs, reward, done, info = self.step(action)
-        # print('Gym env - step done for reset')
-        return obs, reward, done, info
-
-    def init_map(self, map_path, img_ext, rgb, flip):
-        """
-        init a map for the gym env
-        map_path: full path for the yaml, same as ROS, img and yaml in same dir
-        rgb: map grayscale or rgb
-        flip: if map needs flipping
-        """
-
-        self.map_path = map_path
-        if not map_path.endswith(".yaml"):
-            print("Gym env - Please use a yaml file for map initialization.")
-            print("Exiting...")
-            sys.exit()
-
-        # split yaml ext name
-        map_img_path = os.path.splitext(self.map_path)[0] + img_ext
-        self.map_img = np.array(
-            Image.open(map_img_path).transpose(Image.FLIP_TOP_BOTTOM)
-        )
-        self.map_img = self.map_img.astype(np.float64)
-        if flip:
-            self.map_img = self.map_img[::-1]
-
-        if rgb:
-            self.map_img = np.dot(self.map_img[..., :3], [0.29, 0.57, 0.14])
-
-        # update map metadata
-        self.map_height = self.map_img.shape[0]
-        self.map_width = self.map_img.shape[1]
-        self.free_thresh = 0.6  # TODO: double check
-        with open(self.map_path, "r") as yaml_stream:
-            try:
-                map_metadata = yaml.safe_load(yaml_stream)
-                self.map_resolution = map_metadata["resolution"]
-                self.origin = map_metadata["origin"]
-            except yaml.YAMLError as ex:
-                print(ex)
-        self.map_inited = True
-
-        # load waypoints
-        # self.csv_path = os.path.splitext(self.map_path)[0] + '.csv'
-        # with open(self.csv_path) as f:
-        #     self.waypoints = [tuple(line) for line in csv.reader(f)]
-        #     # waypoints are [x, y, speed, theta]
-        #     self.waypoints = np.array([(float(pt[0]), float(pt[1]), float(pt[2]), float(pt[3])) for pt in self.waypoints])
-
-    def render(self, mode="human", close=False):
-        return
-
-    # def get_min_dist(self, position):
-    #     wpts = self.waypoints[:, 0:2]
-    #      # = position[0:2]
-    #     nearest_point, nearest_dist, t, i = self.nearest_point_on_trajectory(position, wpts)
-    #     # speed = self.waypoints[i, 2]
-    #     return nearest_dist
-
-    # def nearest_point_on_trajectory(self, point, trajectory):
-    #     '''
-    #     Return the nearest point along the given piecewise linear trajectory.
-
-    #     Same as nearest_point_on_line_segment, but vectorized. This method is quite fast, time constraints should
-    #     not be an issue so long as trajectories are not insanely long.
-
-    #         Order of magnitude: trajectory length: 1000 --> 0.0002 second computation (5000fps)
-
-    #     point: size 2 numpy array
-    #     trajectory: Nx2 matrix of (x,y) trajectory waypoints
-    #         - these must be unique. If they are not unique, a divide by 0 error will destroy the world
-    #     '''
-    #     diffs = trajectory[1:,:] - trajectory[:-1,:]
-    #     l2s   = diffs[:,0]**2 + diffs[:,1]**2
-    #     # this is equivalent to the elementwise dot product
-    #     dots = np.sum((point - trajectory[:-1,:]) * diffs[:,:], axis=1)
-    #     t = np.clip(dots / l2s, 0.0, 1.0)
-    #     projections = trajectory[:-1,:] + (t*diffs.T).T
-    #     dists = np.linalg.norm(point - projections,axis=1)
-    #     min_dist_segment = np.argmin(dists)
-    #     return projections[min_dist_segment], dists[min_dist_segment], t[min_dist_segment], min_dist_segment
-
-    def update_params(
-        self, mu, h_cg, l_r, cs_f, cs_r, I_z, mass, exe_path, double_finish=False
-    ):
-        # if not self.sim_p is None:
-        #     print('Gym env - Sim server exists, killing...')
-        #     self.socket.send(b'dead')
-        #     self.sim_p.kill()
-        #     os.kill(self.sim_p.pid, signal.SIGINT)
-        #     self.sim_p = None
-        # print('in update params')
-
-        self.params = [mu, h_cg, l_r, cs_f, cs_r, I_z, mass]
-        self.params_set = True
-        if self.sim_p is None:
-            # print('starting ex and setting map')
-            self._start_executable(exe_path)
-            self._set_map()
-        self.double_finish = double_finish
-        # print('before creating proto')
-
-        # create update proto
-        update_param_proto = sim_requests_pb2.SimRequest()
-        update_param_proto.type = 3
-        update_param_proto.update_request.mu = mu
-        update_param_proto.update_request.h_cg = h_cg
-        update_param_proto.update_request.l_r = l_r
-        update_param_proto.update_request.cs_f = cs_f
-        update_param_proto.update_request.cs_r = cs_r
-        update_param_proto.update_request.I_z = I_z
-        update_param_proto.update_request.mass = mass
-        # serialize reset proto
-        update_param_string = update_param_proto.SerializeToString()
-        # print('proto serialized')
-        # send update param request
-        self.socket.send(update_param_string)
-        # print('Gym env - Update param request sent.')
-        # receive response
-        update_response_string = self.socket.recv()
-        update_response_proto = sim_requests_pb2.SimResponse()
-        update_response_proto.ParseFromString(update_response_string)
-        if update_response_proto.update_resp.result:
-            print("Gym env - Update param failed")
-            return None
-
-        # print('Gym env - params updated.')
-        # start executable
-        # self._start_executable()
-        # call set map
-        # self._set_map()
diff --git a/gym/f110_gym/envs/laser_models.py b/gym/f110_gym/envs/laser_models.py
index d23a3bee..7cd0420b 100644
--- a/gym/f110_gym/envs/laser_models.py
+++ b/gym/f110_gym/envs/laser_models.py
@@ -1,30 +1,3 @@
-# MIT License
-
-# Copyright (c) 2020 Joseph Auckley, Matthew O'Kelly, Aman Sinha, Hongrui Zheng
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-
-"""
-Prototype of Utility functions and classes for simulating 2D LIDAR scans
-Author: Hongrui Zheng
-"""
 from __future__ import annotations
 import unittest
 

From 471222030c3370b5d8caaf96e71ff860d8357631 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:27:30 -0500
Subject: [PATCH 02/24] rehaul documentation

---
 .gitignore                                    |    1 +
 .readthedocs.yml                              |   35 +
 docs/Doxyfile                                 |   11 -
 docs/Makefile                                 |    2 +-
 docs/_static/css/custom.css                   |  651 ------
 docs/_static/js/custom.js                     |   48 -
 docs/api/dynamic_models.rst                   |    7 -
 docs/api/env.rst                              |    7 -
 docs/api/rendering.rst                        |    7 -
 docs/conf.py                                  |   82 -
 docs/html/annotated.html                      |  111 --
 docs/html/bc_s.png                            |  Bin 676 -> 0 bytes
 docs/html/bdwn.png                            |  Bin 147 -> 0 bytes
 docs/html/classes.html                        |  118 --
 ...1_1base__classes_1_1_race_car-members.html |  110 -
 ...1_1envs_1_1base__classes_1_1_race_car.html |  538 -----
 ..._1_1envs_1_1base__classes_1_1_race_car.png |  Bin 671 -> 0 bytes
 ...ase__classes_1_1_race_car__coll__graph.map |    4 -
 ...ase__classes_1_1_race_car__coll__graph.md5 |    1 -
 ...ase__classes_1_1_race_car__coll__graph.png |  Bin 4645 -> 0 bytes
 ...__classes_1_1_race_car__inherit__graph.map |    4 -
 ...__classes_1_1_race_car__inherit__graph.md5 |    1 -
 ...__classes_1_1_race_car__inherit__graph.png |  Bin 4645 -> 0 bytes
 ..._1base__classes_1_1_simulator-members.html |   97 -
 ..._1envs_1_1base__classes_1_1_simulator.html |  394 ----
 ...1_1envs_1_1base__classes_1_1_simulator.png |  Bin 678 -> 0 bytes
 ...se__classes_1_1_simulator__coll__graph.map |    4 -
 ...se__classes_1_1_simulator__coll__graph.md5 |    1 -
 ...se__classes_1_1_simulator__coll__graph.png |  Bin 4834 -> 0 bytes
 ..._classes_1_1_simulator__inherit__graph.map |    4 -
 ..._classes_1_1_simulator__inherit__graph.md5 |    1 -
 ..._classes_1_1_simulator__inherit__graph.png |  Bin 4834 -> 0 bytes
 ...n__models_1_1_collision_tests-members.html |   92 -
 ...collision__models_1_1_collision_tests.html |  139 --
 ...1collision__models_1_1_collision_tests.png |  Bin 876 -> 0 bytes
 ...odels_1_1_collision_tests__coll__graph.map |    4 -
 ...odels_1_1_collision_tests__coll__graph.md5 |    1 -
 ...odels_1_1_collision_tests__coll__graph.png |  Bin 4618 -> 0 bytes
 ...ls_1_1_collision_tests__inherit__graph.map |    4 -
 ...ls_1_1_collision_tests__inherit__graph.md5 |    1 -
 ...ls_1_1_collision_tests__inherit__graph.png |  Bin 4618 -> 0 bytes
 ...mic__models_1_1_dynamics_test-members.html |  105 -
 ..._1_1dynamic__models_1_1_dynamics_test.html |  178 --
 ...s_1_1dynamic__models_1_1_dynamics_test.png |  Bin 890 -> 0 bytes
 ..._models_1_1_dynamics_test__coll__graph.map |    4 -
 ..._models_1_1_dynamics_test__coll__graph.md5 |    1 -
 ..._models_1_1_dynamics_test__coll__graph.png |  Bin 4885 -> 0 bytes
 ...dels_1_1_dynamics_test__inherit__graph.map |    4 -
 ...dels_1_1_dynamics_test__inherit__graph.md5 |    1 -
 ...dels_1_1_dynamics_test__inherit__graph.png |  Bin 4885 -> 0 bytes
 ...nvs_1_1f110__env_1_1_f110_env-members.html |  117 --
 ...gym_1_1envs_1_1f110__env_1_1_f110_env.html |  470 -----
 ..._gym_1_1envs_1_1f110__env_1_1_f110_env.png |  Bin 942 -> 0 bytes
 ...1_1f110__env_1_1_f110_env__coll__graph.map |    5 -
 ...1_1f110__env_1_1_f110_env__coll__graph.md5 |    1 -
 ...1_1f110__env_1_1_f110_env__coll__graph.png |  Bin 5514 -> 0 bytes
 ...f110__env_1_1_f110_env__inherit__graph.map |    5 -
 ...f110__env_1_1_f110_env__inherit__graph.md5 |    1 -
 ...f110__env_1_1_f110_env__inherit__graph.png |  Bin 5514 -> 0 bytes
 ...110__env__backup_1_1_f110_env-members.html |  133 --
 ...nvs_1_1f110__env__backup_1_1_f110_env.html |  344 ----
 ...envs_1_1f110__env__backup_1_1_f110_env.png |  Bin 1062 -> 0 bytes
 ..._env__backup_1_1_f110_env__coll__graph.map |    5 -
 ..._env__backup_1_1_f110_env__coll__graph.md5 |    1 -
 ..._env__backup_1_1_f110_env__coll__graph.png |  Bin 7347 -> 0 bytes
 ...v__backup_1_1_f110_env__inherit__graph.map |    5 -
 ...v__backup_1_1_f110_env__inherit__graph.md5 |    1 -
 ...v__backup_1_1_f110_env__inherit__graph.png |  Bin 7347 -> 0 bytes
 ..._models_1_1_scan_simulator2_d-members.html |  108 -
 ..._1laser__models_1_1_scan_simulator2_d.html |  277 ---
 ...1_1laser__models_1_1_scan_simulator2_d.png |  Bin 822 -> 0 bytes
 ...els_1_1_scan_simulator2_d__coll__graph.map |    4 -
 ...els_1_1_scan_simulator2_d__coll__graph.md5 |    1 -
 ...els_1_1_scan_simulator2_d__coll__graph.png |  Bin 5204 -> 0 bytes
 ..._1_1_scan_simulator2_d__inherit__graph.map |    4 -
 ..._1_1_scan_simulator2_d__inherit__graph.md5 |    1 -
 ..._1_1_scan_simulator2_d__inherit__graph.png |  Bin 5204 -> 0 bytes
 ...1laser__models_1_1_scan_tests-members.html |   93 -
 ...1envs_1_1laser__models_1_1_scan_tests.html |  142 --
 ..._1envs_1_1laser__models_1_1_scan_tests.png |  Bin 775 -> 0 bytes
 ...er__models_1_1_scan_tests__coll__graph.map |    4 -
 ...er__models_1_1_scan_tests__coll__graph.md5 |    1 -
 ...er__models_1_1_scan_tests__coll__graph.png |  Bin 4911 -> 0 bytes
 ..._models_1_1_scan_tests__inherit__graph.map |    4 -
 ..._models_1_1_scan_tests__inherit__graph.md5 |    1 -
 ..._models_1_1_scan_tests__inherit__graph.png |  Bin 4911 -> 0 bytes
 ...1_1rendering_1_1_env_renderer-members.html |  106 -
 ...1_1envs_1_1rendering_1_1_env_renderer.html |  531 -----
 ...endering_1_1_env_renderer__coll__graph.map |    4 -
 ...endering_1_1_env_renderer__coll__graph.md5 |    1 -
 ...endering_1_1_env_renderer__coll__graph.png |  Bin 4378 -> 0 bytes
 ...ering_1_1_env_renderer__inherit__graph.map |    4 -
 ...ering_1_1_env_renderer__inherit__graph.md5 |    1 -
 ...ering_1_1_env_renderer__inherit__graph.png |  Bin 4378 -> 0 bytes
 ...n__checks_1_1_collision_tests-members.html |   91 -
 ...collision__checks_1_1_collision_tests.html |  136 --
 ...1collision__checks_1_1_collision_tests.png |  Bin 906 -> 0 bytes
 ...hecks_1_1_collision_tests__coll__graph.map |    4 -
 ...hecks_1_1_collision_tests__coll__graph.md5 |    1 -
 ...hecks_1_1_collision_tests__coll__graph.png |  Bin 5073 -> 0 bytes
 ...ks_1_1_collision_tests__inherit__graph.map |    4 -
 ...ks_1_1_collision_tests__inherit__graph.md5 |    1 -
 ...ks_1_1_collision_tests__inherit__graph.png |  Bin 5073 -> 0 bytes
 ...amics__test_1_1_dynamics_test-members.html |  105 -
 ...t_1_1dynamics__test_1_1_dynamics_test.html |  178 --
 ...st_1_1dynamics__test_1_1_dynamics_test.png |  Bin 883 -> 0 bytes
 ...s__test_1_1_dynamics_test__coll__graph.map |    4 -
 ...s__test_1_1_dynamics_test__coll__graph.md5 |    1 -
 ...s__test_1_1_dynamics_test__coll__graph.png |  Bin 4626 -> 0 bytes
 ...test_1_1_dynamics_test__inherit__graph.map |    4 -
 ...test_1_1_dynamics_test__inherit__graph.md5 |    1 -
 ...test_1_1_dynamics_test__inherit__graph.png |  Bin 4626 -> 0 bytes
 ...st_1_1pyglet__test_1_1_camera-members.html |   98 -
 ..._1unittest_1_1pyglet__test_1_1_camera.html |  255 ---
 ...yglet__test_1_1_camera__inherit__graph.map |    4 -
 ...yglet__test_1_1_camera__inherit__graph.md5 |    1 -
 ...yglet__test_1_1_camera__inherit__graph.png |  Bin 5903 -> 0 bytes
 ...let__test_1_1_centered_camera-members.html |   98 -
 ...t_1_1pyglet__test_1_1_centered_camera.html |  155 --
 ..._test_1_1_centered_camera__coll__graph.map |    4 -
 ..._test_1_1_centered_camera__coll__graph.md5 |    1 -
 ..._test_1_1_centered_camera__coll__graph.png |  Bin 5857 -> 0 bytes
 ...st_1_1_centered_camera__inherit__graph.map |    4 -
 ...st_1_1_centered_camera__inherit__graph.md5 |    1 -
 ...st_1_1_centered_camera__inherit__graph.png |  Bin 5857 -> 0 bytes
 ...1pyglet__test__camera_1_1_app-members.html |   97 -
 ...ttest_1_1pyglet__test__camera_1_1_app.html |  154 --
 ...let__test__camera_1_1_app__coll__graph.map |    4 -
 ...let__test__camera_1_1_app__coll__graph.md5 |    1 -
 ...let__test__camera_1_1_app__coll__graph.png |  Bin 5726 -> 0 bytes
 ...__test__camera_1_1_app__inherit__graph.map |    4 -
 ...__test__camera_1_1_app__inherit__graph.md5 |    1 -
 ...__test__camera_1_1_app__inherit__graph.png |  Bin 5726 -> 0 bytes
 ...an__sim_1_1_scan_simulator2_d-members.html |  108 -
 ...st_1_1scan__sim_1_1_scan_simulator2_d.html |  277 ---
 ...est_1_1scan__sim_1_1_scan_simulator2_d.png |  Bin 758 -> 0 bytes
 ...sim_1_1_scan_simulator2_d__coll__graph.map |    4 -
 ...sim_1_1_scan_simulator2_d__coll__graph.md5 |    1 -
 ...sim_1_1_scan_simulator2_d__coll__graph.png |  Bin 5160 -> 0 bytes
 ..._1_1_scan_simulator2_d__inherit__graph.map |    4 -
 ..._1_1_scan_simulator2_d__inherit__graph.md5 |    1 -
 ..._1_1_scan_simulator2_d__inherit__graph.png |  Bin 5160 -> 0 bytes
 ...t_1_1scan__sim_1_1_scan_tests-members.html |   93 -
 ...1unittest_1_1scan__sim_1_1_scan_tests.html |  142 --
 ..._1unittest_1_1scan__sim_1_1_scan_tests.png |  Bin 757 -> 0 bytes
 ...1scan__sim_1_1_scan_tests__coll__graph.map |    4 -
 ...1scan__sim_1_1_scan_tests__coll__graph.md5 |    1 -
 ...1scan__sim_1_1_scan_tests__coll__graph.png |  Bin 4768 -> 0 bytes
 ...an__sim_1_1_scan_tests__inherit__graph.map |    4 -
 ...an__sim_1_1_scan_tests__inherit__graph.md5 |    1 -
 ...an__sim_1_1_scan_tests__inherit__graph.png |  Bin 4768 -> 0 bytes
 docs/html/closed.png                          |  Bin 132 -> 0 bytes
 .../dir_0d9aa0052a6017cb7aea189bf393af42.html |   84 -
 .../dir_70fc25f479e8e19f7e6bd12b95eca2dc.html |   80 -
 .../dir_87aab0849a7ff80b67f27d7f0ecafd88.html |   80 -
 .../dir_cc06cd2fc16f827f09405fcedd02c7bb.html |   84 -
 docs/html/doc.png                             |  Bin 746 -> 0 bytes
 docs/html/doxygen.css                         | 1771 -----------------
 docs/html/doxygen.png                         |  Bin 3779 -> 0 bytes
 docs/html/doxygen.svg                         |   26 -
 docs/html/dynsections.js                      |  120 --
 docs/html/folderclosed.png                    |  Bin 616 -> 0 bytes
 docs/html/folderopen.png                      |  Bin 597 -> 0 bytes
 docs/html/functions.html                      |  200 --
 docs/html/functions_func.html                 |  200 --
 docs/html/graph_legend.html                   |  136 --
 docs/html/graph_legend.md5                    |    1 -
 docs/html/graph_legend.png                    |  Bin 20608 -> 0 bytes
 docs/html/hierarchy.html                      |  105 -
 docs/html/index.html                          |   76 -
 docs/html/inherit_graph_0.map                 |    7 -
 docs/html/inherit_graph_0.md5                 |    1 -
 docs/html/inherit_graph_0.png                 |  Bin 18513 -> 0 bytes
 docs/html/inherit_graph_1.map                 |    9 -
 docs/html/inherit_graph_1.md5                 |    1 -
 docs/html/inherit_graph_1.png                 |  Bin 29112 -> 0 bytes
 docs/html/inherit_graph_2.map                 |    6 -
 docs/html/inherit_graph_2.md5                 |    1 -
 docs/html/inherit_graph_2.png                 |  Bin 8565 -> 0 bytes
 docs/html/inherit_graph_3.map                 |    5 -
 docs/html/inherit_graph_3.md5                 |    1 -
 docs/html/inherit_graph_3.png                 |  Bin 7298 -> 0 bytes
 docs/html/inherit_graph_4.map                 |    4 -
 docs/html/inherit_graph_4.md5                 |    1 -
 docs/html/inherit_graph_4.png                 |  Bin 3393 -> 0 bytes
 docs/html/inherits.html                       |  121 --
 docs/html/jquery.js                           |   35 -
 docs/html/menu.js                             |   50 -
 docs/html/menudata.js                         |   51 -
 ...__gym_1_1unittest_1_1random__trackgen.html |  111 --
 docs/html/namespaces.html                     |  105 -
 docs/html/nav_f.png                           |  Bin 153 -> 0 bytes
 docs/html/nav_g.png                           |  Bin 95 -> 0 bytes
 docs/html/nav_h.png                           |  Bin 98 -> 0 bytes
 docs/html/open.png                            |  Bin 123 -> 0 bytes
 docs/html/search/all_0.html                   |   30 -
 docs/html/search/all_0.js                     |    5 -
 docs/html/search/all_1.html                   |   30 -
 docs/html/search/all_1.js                     |    4 -
 docs/html/search/all_2.html                   |   30 -
 docs/html/search/all_2.js                     |    8 -
 docs/html/search/all_3.html                   |   30 -
 docs/html/search/all_3.js                     |    4 -
 docs/html/search/all_4.html                   |   30 -
 docs/html/search/all_4.js                     |    4 -
 docs/html/search/all_5.html                   |   30 -
 docs/html/search/all_5.js                     |    4 -
 docs/html/search/all_6.html                   |   30 -
 docs/html/search/all_6.js                     |    4 -
 docs/html/search/all_7.html                   |   30 -
 docs/html/search/all_7.js                     |    4 -
 docs/html/search/all_8.html                   |   30 -
 docs/html/search/all_8.js                     |    8 -
 docs/html/search/all_9.html                   |   30 -
 docs/html/search/all_9.js                     |    4 -
 docs/html/search/all_a.html                   |   30 -
 docs/html/search/all_a.js                     |    7 -
 docs/html/search/all_b.html                   |   30 -
 docs/html/search/all_b.js                     |    9 -
 docs/html/search/all_c.html                   |   30 -
 docs/html/search/all_c.js                     |    9 -
 docs/html/search/all_d.html                   |   30 -
 docs/html/search/all_d.js                     |    4 -
 docs/html/search/classes_0.html               |   30 -
 docs/html/search/classes_0.js                 |    4 -
 docs/html/search/classes_1.html               |   30 -
 docs/html/search/classes_1.js                 |    6 -
 docs/html/search/classes_2.html               |   30 -
 docs/html/search/classes_2.js                 |    4 -
 docs/html/search/classes_3.html               |   30 -
 docs/html/search/classes_3.js                 |    4 -
 docs/html/search/classes_4.html               |   30 -
 docs/html/search/classes_4.js                 |    4 -
 docs/html/search/classes_5.html               |   30 -
 docs/html/search/classes_5.js                 |    4 -
 docs/html/search/classes_6.html               |   30 -
 docs/html/search/classes_6.js                 |    6 -
 docs/html/search/close.png                    |  Bin 273 -> 0 bytes
 docs/html/search/close.svg                    |   31 -
 docs/html/search/functions_0.html             |   30 -
 docs/html/search/functions_0.js               |    5 -
 docs/html/search/functions_1.html             |   30 -
 docs/html/search/functions_1.js               |    5 -
 docs/html/search/functions_2.html             |   30 -
 docs/html/search/functions_2.js               |    4 -
 docs/html/search/functions_3.html             |   30 -
 docs/html/search/functions_3.js               |    4 -
 docs/html/search/functions_4.html             |   30 -
 docs/html/search/functions_4.js               |    8 -
 docs/html/search/functions_5.html             |   30 -
 docs/html/search/functions_5.js               |    4 -
 docs/html/search/functions_6.html             |   30 -
 docs/html/search/functions_6.js               |    6 -
 docs/html/search/functions_7.html             |   30 -
 docs/html/search/functions_7.js               |    6 -
 docs/html/search/functions_8.html             |   30 -
 docs/html/search/functions_8.js               |    9 -
 docs/html/search/functions_9.html             |   30 -
 docs/html/search/functions_9.js               |    4 -
 docs/html/search/mag_sel.png                  |  Bin 465 -> 0 bytes
 docs/html/search/mag_sel.svg                  |   74 -
 docs/html/search/namespaces_0.html            |   37 -
 docs/html/search/namespaces_0.js              |    4 -
 docs/html/search/nomatches.html               |   12 -
 docs/html/search/search.css                   |  271 ---
 docs/html/search/search.js                    |  814 --------
 docs/html/search/search_l.png                 |  Bin 567 -> 0 bytes
 docs/html/search/search_m.png                 |  Bin 158 -> 0 bytes
 docs/html/search/search_r.png                 |  Bin 553 -> 0 bytes
 docs/html/search/searchdata.js                |   21 -
 docs/html/splitbar.png                        |  Bin 314 -> 0 bytes
 docs/html/sync_off.png                        |  Bin 853 -> 0 bytes
 docs/html/sync_on.png                         |  Bin 845 -> 0 bytes
 docs/html/tab_a.png                           |  Bin 142 -> 0 bytes
 docs/html/tab_b.png                           |  Bin 169 -> 0 bytes
 docs/html/tab_h.png                           |  Bin 177 -> 0 bytes
 docs/html/tab_s.png                           |  Bin 184 -> 0 bytes
 docs/html/tabs.css                            |    1 -
 docs/index.rst                                |   94 -
 docs/installation.rst                         |   42 -
 docs/requirements.txt                         |    6 +-
 docs/src/_static/switcher.json                |   10 +
 .../src/_templates/autosummary/attributes.rst |   13 +
 docs/src/_templates/autosummary/base.rst      |   17 +
 docs/src/_templates/autosummary/class.rst     |   17 +
 docs/src/_templates/autosummary/member.rst    |   13 +
 docs/src/_templates/autosummary/method.rst    |   13 +
 .../_templates/autosummary/minimal_module.rst |    6 +
 docs/src/_templates/autosummary/module.rst    |   40 +
 docs/{ => src}/api/base_classes.rst           |   10 +-
 docs/{ => src}/api/collision_models.rst       |   16 +-
 docs/src/api/dynamic_models.rst               |   18 +
 docs/src/api/env.rst                          |   11 +
 docs/src/api/index.rst                        |   16 +
 docs/{ => src}/api/laser_models.rst           |   20 +-
 docs/{ => src}/api/obv.rst                    |    0
 docs/src/api/rendering.rst                    |   16 +
 docs/src/api/reset.rst                        |   15 +
 docs/src/api/track.rst                        |   16 +
 docs/{ => src}/assets/docker_logo.png         |  Bin
 docs/{ => src}/assets/f110cover.png           |  Bin
 docs/{ => src}/assets/f1_stickers_01.png      |  Bin
 docs/{ => src}/assets/f1_stickers_02.png      |  Bin
 docs/{ => src}/assets/f1tenth_gym.svg         |    0
 docs/{ => src}/assets/f1tenth_gym_color.svg   |    0
 docs/{ => src}/assets/gym.svg                 |    0
 docs/{ => src}/assets/pip_logo.svg            |    0
 docs/src/conf.py                              |   86 +
 docs/src/index.rst                            |  121 ++
 docs/src/install/installation.rst             |   38 +
 docs/{ => src/usage}/basic_usage.rst          |    0
 docs/{ => src/usage}/customized_usage.rst     |    0
 docs/src/usage/index.rst                      |   10 +
 docs/{ => src/usage}/reproduce.rst            |    0
 docs/xml/____init_____8py.xml                 |   19 -
 docs/xml/base__classes_8py.xml                |  510 -----
 ..._1_1envs_1_1base__classes_1_1_race_car.xml |  603 ------
 ...1_1envs_1_1base__classes_1_1_simulator.xml |  365 ----
 ...1collision__models_1_1_collision_tests.xml |  190 --
 ...s_1_1dynamic__models_1_1_dynamics_test.xml |  372 ----
 ..._gym_1_1envs_1_1f110__env_1_1_f110_env.xml |  741 -------
 ...envs_1_1f110__env__backup_1_1_f110_env.xml | 1003 ----------
 ...1_1laser__models_1_1_scan_simulator2_d.xml |  482 -----
 ..._1envs_1_1laser__models_1_1_scan_tests.xml |  196 --
 ..._1_1envs_1_1rendering_1_1_env_renderer.xml |  552 -----
 ...1collision__checks_1_1_collision_tests.xml |  172 --
 ...st_1_1dynamics__test_1_1_dynamics_test.xml |  372 ----
 ...1_1unittest_1_1pyglet__test_1_1_camera.xml |  365 ----
 ...st_1_1pyglet__test_1_1_centered_camera.xml |   92 -
 ...ittest_1_1pyglet__test__camera_1_1_app.xml |  336 ----
 ...est_1_1scan__sim_1_1_scan_simulator2_d.xml |  482 -----
 ..._1unittest_1_1scan__sim_1_1_scan_tests.xml |  196 --
 docs/xml/collision__checks_8py.xml            |  311 ---
 docs/xml/collision__models_8py.xml            |  354 ----
 docs/xml/combine.xslt                         |   15 -
 docs/xml/compound.xsd                         | 1187 -----------
 .../dir_0d9aa0052a6017cb7aea189bf393af42.xml  |   14 -
 .../dir_70fc25f479e8e19f7e6bd12b95eca2dc.xml  |   19 -
 .../dir_87aab0849a7ff80b67f27d7f0ecafd88.xml  |   19 -
 .../dir_cc06cd2fc16f827f09405fcedd02c7bb.xml  |   12 -
 docs/xml/dynamic__models_8py.xml              |  441 ----
 docs/xml/dynamics__test_8py.xml               |  411 ----
 docs/xml/envs_2____init_____8py.xml           |   19 -
 docs/xml/f110__env_8py.xml                    |  380 ----
 docs/xml/f110__env__backup_8py.xml            |  602 ------
 docs/xml/f110__gym_2____init_____8py.xml      |   19 -
 .../xml/f110__gym_2envs_2____init_____8py.xml |   19 -
 .../f110__gym_2unittest_2____init_____8py.xml |   16 -
 docs/xml/index.xml                            |  572 ------
 docs/xml/index.xsd                            |   67 -
 docs/xml/laser__models_8py.xml                |  596 ------
 docs/xml/legacy__scan__gen_8py.xml            |  116 --
 docs/xml/namespacef110__gym.xml               |   41 -
 docs/xml/namespacef110__gym_1_1envs.xml       |   18 -
 ...pacef110__gym_1_1envs_1_1base__classes.xml |   13 -
 ...f110__gym_1_1envs_1_1collision__models.xml |  292 ---
 ...cef110__gym_1_1envs_1_1dynamic__models.xml |  566 ------
 ...amespacef110__gym_1_1envs_1_1f110__env.xml |   70 -
 ...f110__gym_1_1envs_1_1f110__env__backup.xml |   12 -
 ...pacef110__gym_1_1envs_1_1laser__models.xml |  555 ------
 ...amespacef110__gym_1_1envs_1_1rendering.xml |   70 -
 docs/xml/namespacef110__gym_1_1unittest.xml   |   18 -
 ...__gym_1_1unittest_1_1collision__checks.xml |  266 ---
 ...110__gym_1_1unittest_1_1dynamics__test.xml |  542 -----
 ...__gym_1_1unittest_1_1legacy__scan__gen.xml |  384 ----
 ...ef110__gym_1_1unittest_1_1pyglet__test.xml |  484 -----
 ...ym_1_1unittest_1_1pyglet__test__camera.xml |   42 -
 ...0__gym_1_1unittest_1_1random__trackgen.xml |  204 --
 ...pacef110__gym_1_1unittest_1_1scan__sim.xml |  363 ----
 docs/xml/namespacegym.xml                     |   11 -
 ...cegym_1_1envs_1_1unittest_1_1scan__sim.xml |   11 -
 docs/xml/namespacepyglet_1_1gl.xml            |   11 -
 docs/xml/namespaceunittest.xml                |   11 -
 docs/xml/namespaceutils.xml                   |   11 -
 docs/xml/pyglet__test_8py.xml                 |  196 --
 docs/xml/pyglet__test__camera_8py.xml         |  146 --
 docs/xml/random__trackgen_8py.xml             |  248 ---
 docs/xml/rendering_8py.xml                    |  352 ----
 docs/xml/scan__sim_8py.xml                    |  446 -----
 docs/xml/unittest_2____init_____8py.xml       |   16 -
 docs/xml/xml.xsd                              |   23 -
 gym/f110_gym/envs/f110_env.py                 |   61 +-
 poetry.lock                                   |  389 +++-
 pyproject.toml                                |    3 +
 384 files changed, 989 insertions(+), 30819 deletions(-)
 create mode 100644 .readthedocs.yml
 delete mode 100644 docs/Doxyfile
 delete mode 100644 docs/_static/css/custom.css
 delete mode 100644 docs/_static/js/custom.js
 delete mode 100644 docs/api/dynamic_models.rst
 delete mode 100644 docs/api/env.rst
 delete mode 100644 docs/api/rendering.rst
 delete mode 100644 docs/conf.py
 delete mode 100644 docs/html/annotated.html
 delete mode 100644 docs/html/bc_s.png
 delete mode 100644 docs/html/bdwn.png
 delete mode 100644 docs/html/classes.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car-members.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator-members.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests-members.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test-members.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env-members.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env-members.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d-members.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests-members.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer-members.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests-members.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test-members.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera-members.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera-members.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app-members.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d-members.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests-members.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.png
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.map
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.md5
 delete mode 100644 docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.png
 delete mode 100644 docs/html/closed.png
 delete mode 100644 docs/html/dir_0d9aa0052a6017cb7aea189bf393af42.html
 delete mode 100644 docs/html/dir_70fc25f479e8e19f7e6bd12b95eca2dc.html
 delete mode 100644 docs/html/dir_87aab0849a7ff80b67f27d7f0ecafd88.html
 delete mode 100644 docs/html/dir_cc06cd2fc16f827f09405fcedd02c7bb.html
 delete mode 100644 docs/html/doc.png
 delete mode 100644 docs/html/doxygen.css
 delete mode 100644 docs/html/doxygen.png
 delete mode 100644 docs/html/doxygen.svg
 delete mode 100644 docs/html/dynsections.js
 delete mode 100644 docs/html/folderclosed.png
 delete mode 100644 docs/html/folderopen.png
 delete mode 100644 docs/html/functions.html
 delete mode 100644 docs/html/functions_func.html
 delete mode 100644 docs/html/graph_legend.html
 delete mode 100644 docs/html/graph_legend.md5
 delete mode 100644 docs/html/graph_legend.png
 delete mode 100644 docs/html/hierarchy.html
 delete mode 100644 docs/html/index.html
 delete mode 100644 docs/html/inherit_graph_0.map
 delete mode 100644 docs/html/inherit_graph_0.md5
 delete mode 100644 docs/html/inherit_graph_0.png
 delete mode 100644 docs/html/inherit_graph_1.map
 delete mode 100644 docs/html/inherit_graph_1.md5
 delete mode 100644 docs/html/inherit_graph_1.png
 delete mode 100644 docs/html/inherit_graph_2.map
 delete mode 100644 docs/html/inherit_graph_2.md5
 delete mode 100644 docs/html/inherit_graph_2.png
 delete mode 100644 docs/html/inherit_graph_3.map
 delete mode 100644 docs/html/inherit_graph_3.md5
 delete mode 100644 docs/html/inherit_graph_3.png
 delete mode 100644 docs/html/inherit_graph_4.map
 delete mode 100644 docs/html/inherit_graph_4.md5
 delete mode 100644 docs/html/inherit_graph_4.png
 delete mode 100644 docs/html/inherits.html
 delete mode 100644 docs/html/jquery.js
 delete mode 100644 docs/html/menu.js
 delete mode 100644 docs/html/menudata.js
 delete mode 100644 docs/html/namespacef110__gym_1_1unittest_1_1random__trackgen.html
 delete mode 100644 docs/html/namespaces.html
 delete mode 100644 docs/html/nav_f.png
 delete mode 100644 docs/html/nav_g.png
 delete mode 100644 docs/html/nav_h.png
 delete mode 100644 docs/html/open.png
 delete mode 100644 docs/html/search/all_0.html
 delete mode 100644 docs/html/search/all_0.js
 delete mode 100644 docs/html/search/all_1.html
 delete mode 100644 docs/html/search/all_1.js
 delete mode 100644 docs/html/search/all_2.html
 delete mode 100644 docs/html/search/all_2.js
 delete mode 100644 docs/html/search/all_3.html
 delete mode 100644 docs/html/search/all_3.js
 delete mode 100644 docs/html/search/all_4.html
 delete mode 100644 docs/html/search/all_4.js
 delete mode 100644 docs/html/search/all_5.html
 delete mode 100644 docs/html/search/all_5.js
 delete mode 100644 docs/html/search/all_6.html
 delete mode 100644 docs/html/search/all_6.js
 delete mode 100644 docs/html/search/all_7.html
 delete mode 100644 docs/html/search/all_7.js
 delete mode 100644 docs/html/search/all_8.html
 delete mode 100644 docs/html/search/all_8.js
 delete mode 100644 docs/html/search/all_9.html
 delete mode 100644 docs/html/search/all_9.js
 delete mode 100644 docs/html/search/all_a.html
 delete mode 100644 docs/html/search/all_a.js
 delete mode 100644 docs/html/search/all_b.html
 delete mode 100644 docs/html/search/all_b.js
 delete mode 100644 docs/html/search/all_c.html
 delete mode 100644 docs/html/search/all_c.js
 delete mode 100644 docs/html/search/all_d.html
 delete mode 100644 docs/html/search/all_d.js
 delete mode 100644 docs/html/search/classes_0.html
 delete mode 100644 docs/html/search/classes_0.js
 delete mode 100644 docs/html/search/classes_1.html
 delete mode 100644 docs/html/search/classes_1.js
 delete mode 100644 docs/html/search/classes_2.html
 delete mode 100644 docs/html/search/classes_2.js
 delete mode 100644 docs/html/search/classes_3.html
 delete mode 100644 docs/html/search/classes_3.js
 delete mode 100644 docs/html/search/classes_4.html
 delete mode 100644 docs/html/search/classes_4.js
 delete mode 100644 docs/html/search/classes_5.html
 delete mode 100644 docs/html/search/classes_5.js
 delete mode 100644 docs/html/search/classes_6.html
 delete mode 100644 docs/html/search/classes_6.js
 delete mode 100644 docs/html/search/close.png
 delete mode 100644 docs/html/search/close.svg
 delete mode 100644 docs/html/search/functions_0.html
 delete mode 100644 docs/html/search/functions_0.js
 delete mode 100644 docs/html/search/functions_1.html
 delete mode 100644 docs/html/search/functions_1.js
 delete mode 100644 docs/html/search/functions_2.html
 delete mode 100644 docs/html/search/functions_2.js
 delete mode 100644 docs/html/search/functions_3.html
 delete mode 100644 docs/html/search/functions_3.js
 delete mode 100644 docs/html/search/functions_4.html
 delete mode 100644 docs/html/search/functions_4.js
 delete mode 100644 docs/html/search/functions_5.html
 delete mode 100644 docs/html/search/functions_5.js
 delete mode 100644 docs/html/search/functions_6.html
 delete mode 100644 docs/html/search/functions_6.js
 delete mode 100644 docs/html/search/functions_7.html
 delete mode 100644 docs/html/search/functions_7.js
 delete mode 100644 docs/html/search/functions_8.html
 delete mode 100644 docs/html/search/functions_8.js
 delete mode 100644 docs/html/search/functions_9.html
 delete mode 100644 docs/html/search/functions_9.js
 delete mode 100644 docs/html/search/mag_sel.png
 delete mode 100644 docs/html/search/mag_sel.svg
 delete mode 100644 docs/html/search/namespaces_0.html
 delete mode 100644 docs/html/search/namespaces_0.js
 delete mode 100644 docs/html/search/nomatches.html
 delete mode 100644 docs/html/search/search.css
 delete mode 100644 docs/html/search/search.js
 delete mode 100644 docs/html/search/search_l.png
 delete mode 100644 docs/html/search/search_m.png
 delete mode 100644 docs/html/search/search_r.png
 delete mode 100644 docs/html/search/searchdata.js
 delete mode 100644 docs/html/splitbar.png
 delete mode 100644 docs/html/sync_off.png
 delete mode 100644 docs/html/sync_on.png
 delete mode 100644 docs/html/tab_a.png
 delete mode 100644 docs/html/tab_b.png
 delete mode 100644 docs/html/tab_h.png
 delete mode 100644 docs/html/tab_s.png
 delete mode 100644 docs/html/tabs.css
 delete mode 100644 docs/index.rst
 delete mode 100644 docs/installation.rst
 create mode 100644 docs/src/_static/switcher.json
 create mode 100644 docs/src/_templates/autosummary/attributes.rst
 create mode 100644 docs/src/_templates/autosummary/base.rst
 create mode 100644 docs/src/_templates/autosummary/class.rst
 create mode 100644 docs/src/_templates/autosummary/member.rst
 create mode 100644 docs/src/_templates/autosummary/method.rst
 create mode 100644 docs/src/_templates/autosummary/minimal_module.rst
 create mode 100644 docs/src/_templates/autosummary/module.rst
 rename docs/{ => src}/api/base_classes.rst (73%)
 rename docs/{ => src}/api/collision_models.rst (56%)
 create mode 100644 docs/src/api/dynamic_models.rst
 create mode 100644 docs/src/api/env.rst
 create mode 100644 docs/src/api/index.rst
 rename docs/{ => src}/api/laser_models.rst (63%)
 rename docs/{ => src}/api/obv.rst (100%)
 create mode 100644 docs/src/api/rendering.rst
 create mode 100644 docs/src/api/reset.rst
 create mode 100644 docs/src/api/track.rst
 rename docs/{ => src}/assets/docker_logo.png (100%)
 rename docs/{ => src}/assets/f110cover.png (100%)
 rename docs/{ => src}/assets/f1_stickers_01.png (100%)
 rename docs/{ => src}/assets/f1_stickers_02.png (100%)
 rename docs/{ => src}/assets/f1tenth_gym.svg (100%)
 rename docs/{ => src}/assets/f1tenth_gym_color.svg (100%)
 rename docs/{ => src}/assets/gym.svg (100%)
 rename docs/{ => src}/assets/pip_logo.svg (100%)
 create mode 100644 docs/src/conf.py
 create mode 100644 docs/src/index.rst
 create mode 100644 docs/src/install/installation.rst
 rename docs/{ => src/usage}/basic_usage.rst (100%)
 rename docs/{ => src/usage}/customized_usage.rst (100%)
 create mode 100644 docs/src/usage/index.rst
 rename docs/{ => src/usage}/reproduce.rst (100%)
 delete mode 100644 docs/xml/____init_____8py.xml
 delete mode 100644 docs/xml/base__classes_8py.xml
 delete mode 100644 docs/xml/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.xml
 delete mode 100644 docs/xml/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.xml
 delete mode 100644 docs/xml/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.xml
 delete mode 100644 docs/xml/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.xml
 delete mode 100644 docs/xml/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.xml
 delete mode 100644 docs/xml/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.xml
 delete mode 100644 docs/xml/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.xml
 delete mode 100644 docs/xml/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.xml
 delete mode 100644 docs/xml/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.xml
 delete mode 100644 docs/xml/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.xml
 delete mode 100644 docs/xml/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.xml
 delete mode 100644 docs/xml/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.xml
 delete mode 100644 docs/xml/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.xml
 delete mode 100644 docs/xml/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.xml
 delete mode 100644 docs/xml/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.xml
 delete mode 100644 docs/xml/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.xml
 delete mode 100644 docs/xml/collision__checks_8py.xml
 delete mode 100644 docs/xml/collision__models_8py.xml
 delete mode 100644 docs/xml/combine.xslt
 delete mode 100644 docs/xml/compound.xsd
 delete mode 100644 docs/xml/dir_0d9aa0052a6017cb7aea189bf393af42.xml
 delete mode 100644 docs/xml/dir_70fc25f479e8e19f7e6bd12b95eca2dc.xml
 delete mode 100644 docs/xml/dir_87aab0849a7ff80b67f27d7f0ecafd88.xml
 delete mode 100644 docs/xml/dir_cc06cd2fc16f827f09405fcedd02c7bb.xml
 delete mode 100644 docs/xml/dynamic__models_8py.xml
 delete mode 100644 docs/xml/dynamics__test_8py.xml
 delete mode 100644 docs/xml/envs_2____init_____8py.xml
 delete mode 100644 docs/xml/f110__env_8py.xml
 delete mode 100644 docs/xml/f110__env__backup_8py.xml
 delete mode 100644 docs/xml/f110__gym_2____init_____8py.xml
 delete mode 100644 docs/xml/f110__gym_2envs_2____init_____8py.xml
 delete mode 100644 docs/xml/f110__gym_2unittest_2____init_____8py.xml
 delete mode 100644 docs/xml/index.xml
 delete mode 100644 docs/xml/index.xsd
 delete mode 100644 docs/xml/laser__models_8py.xml
 delete mode 100644 docs/xml/legacy__scan__gen_8py.xml
 delete mode 100644 docs/xml/namespacef110__gym.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1envs.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1envs_1_1base__classes.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1envs_1_1collision__models.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1envs_1_1dynamic__models.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1envs_1_1f110__env.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1envs_1_1f110__env__backup.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1envs_1_1laser__models.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1envs_1_1rendering.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1unittest.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1unittest_1_1collision__checks.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1unittest_1_1dynamics__test.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1unittest_1_1legacy__scan__gen.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1unittest_1_1pyglet__test.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1unittest_1_1pyglet__test__camera.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1unittest_1_1random__trackgen.xml
 delete mode 100644 docs/xml/namespacef110__gym_1_1unittest_1_1scan__sim.xml
 delete mode 100644 docs/xml/namespacegym.xml
 delete mode 100644 docs/xml/namespacegym_1_1envs_1_1unittest_1_1scan__sim.xml
 delete mode 100644 docs/xml/namespacepyglet_1_1gl.xml
 delete mode 100644 docs/xml/namespaceunittest.xml
 delete mode 100644 docs/xml/namespaceutils.xml
 delete mode 100644 docs/xml/pyglet__test_8py.xml
 delete mode 100644 docs/xml/pyglet__test__camera_8py.xml
 delete mode 100644 docs/xml/random__trackgen_8py.xml
 delete mode 100644 docs/xml/rendering_8py.xml
 delete mode 100644 docs/xml/scan__sim_8py.xml
 delete mode 100644 docs/xml/unittest_2____init_____8py.xml
 delete mode 100644 docs/xml/xml.xsd

diff --git a/.gitignore b/.gitignore
index 07706deb..ed3d2114 100644
--- a/.gitignore
+++ b/.gitignore
@@ -79,6 +79,7 @@ instance/
 
 # Sphinx documentation
 docs/_build/
+docs/src/api/_generated
 
 # PyBuilder
 .pybuilder/
diff --git a/.readthedocs.yml b/.readthedocs.yml
new file mode 100644
index 00000000..98c960de
--- /dev/null
+++ b/.readthedocs.yml
@@ -0,0 +1,35 @@
+# Read the Docs configuration file for Sphinx projects
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+# Required
+version: 2
+
+# Set the OS, Python version and other tools you might need
+build:
+  os: ubuntu-22.04
+  tools:
+    python: "3.12"
+    # You can also specify other tool versions:
+    # nodejs: "20"
+    # rust: "1.70"
+    # golang: "1.20"
+
+# Build documentation in the "docs/" directory with Sphinx
+sphinx:
+  configuration: docs/src/conf.py
+  # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs
+  # builder: "dirhtml"
+  # Fail on all warnings to avoid broken references
+  # fail_on_warning: true
+
+# Optionally build your docs in additional formats such as PDF and ePub
+# formats:
+#   - pdf
+#   - epub
+
+# Optional but recommended, declare the Python requirements required
+# to build your documentation
+# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
+python:
+  install:
+    - requirements: docs/src/requirements.txt
\ No newline at end of file
diff --git a/docs/Doxyfile b/docs/Doxyfile
deleted file mode 100644
index 0faf1511..00000000
--- a/docs/Doxyfile
+++ /dev/null
@@ -1,11 +0,0 @@
-PROJECT_NAME      = "f1tenth_gym"
-INPUT             = ../gym/f110_gym
-GENERATE_LATEX    = NO
-GENERATE_MAN      = NO
-GENERATE_RTF      = NO
-CASE_SENSE_NAMES  = NO
-GENERATE_HTML     = YES
-GENERATE_XML      = YES
-RECURSIVE         = YES
-QUIET             = YES
-JAVADOC_AUTOBRIEF = YES
\ No newline at end of file
diff --git a/docs/Makefile b/docs/Makefile
index d4bb2cbb..cf551fee 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -5,7 +5,7 @@
 # from the environment for the first two.
 SPHINXOPTS    ?=
 SPHINXBUILD   ?= sphinx-build
-SOURCEDIR     = .
+SOURCEDIR     = ./src
 BUILDDIR      = _build
 
 # Put it first so that "make" without argument is like "make help".
diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css
deleted file mode 100644
index f09cf5d6..00000000
--- a/docs/_static/css/custom.css
+++ /dev/null
@@ -1,651 +0,0 @@
-/**
- * Various tweaks to the Read the Docs theme to better conform with Godot's
- * visual identity. Many colors are also overridden to use CSS variables.
- * This makes it possible to provide an automatically-used dark theme
- * based on browser preferences.
- */
-
- /* Default (light) theme colors */
- :root {
-    --body-color: #404040;
-    --content-wrap-background-color: #efefef;
-    --content-background-color: #fcfcfc;
-    --logo-opacity: 1.0;
-    --navbar-background-color: #333f67;
-    --navbar-background-color-hover: #29355c;
-    --navbar-background-color-active: #212d51;
-    --navbar-current-background-color: #212d51;
-    --navbar-current-background-color-hover: #182343;
-    --navbar-current-background-color-active: #131e3b;
-    --navbar-level-1-color: #c3e3ff;
-    --navbar-level-2-color: #b8d6f0;
-    --navbar-level-3-color: #a3c4e1;
-    --navbar-heading-color: #ff7381;
-
-    --link-color: #2980b9;
-    --link-color-hover: #3091d1;
-    --link-color-active: #105078;
-    --link-color-visited: #9b59b6;
-
-    --hr-color: #e1e4e5;
-    --table-row-odd-background-color: #f3f6f6;
-    --code-background-color: #fff;
-    --code-border-color: #e1e4e5;
-    --code-literal-color: #d04c60;
-    --input-background-color: #fcfcfc;
-    --input-focus-border-color: #5f8cff;
-
-    --highlight-background-color: #f5ffe1;
-    --highlight-comment-color: #408090;
-    --highlight-keyword-color: #007020;
-    --highlight-keyword2-color: #902000;
-    --highlight-number-color: #208050;
-    --highlight-decorator-color: #4070a0;
-    --highlight-type-color: #007020;
-    --highlight-type2-color: #0e84b5;
-    --highlight-function-color: #06287e;
-    --highlight-operator-color: #666666;
-    --highlight-string-color: #4070a0;
-
-    --admonition-note-background-color: #e7f2fa;
-    --admonition-note-color: #404040;
-    --admonition-note-title-background-color: #6ab0de;
-    --admonition-note-title-color: #fff;
-    --admonition-attention-background-color: #ffedcc;
-    --admonition-attention-color: #404040;
-    --admonition-attention-title-background-color: #f0b37e;
-    --admonition-attention-title-color: #fff;
-    --admonition-tip-background-color: #dbfaf4;
-    --admonition-tip-color: #404040;
-    --admonition-tip-title-background-color: #1abc9c;
-    --admonition-tip-title-color: #fff;
-
-    --btn-neutral-background-color: #f3f6f6;
-    --btn-neutral-hover-background-color: #e5ebeb;
-    --footer-color: #808080;
-}
-
-
-/* Dark theme colors */
-/*@media (prefers-color-scheme: light) {
-    :root {
-        --body-color: rgba(255, 255, 255, 0.85);
-        --content-wrap-background-color: #202326;
-        --content-background-color: #2e3236;
-        /* Decrease the logo opacity when using the dark theme to be less distracting */
-        --logo-opacity: 0.85;
-        --navbar-background-color: #25282b;
-        --navbar-background-color-hover: #333639;
-        --navbar-background-color-active: #111417;
-        --navbar-current-background-color: #333639;
-        --navbar-current-background-color-hover: #44474a;
-        --navbar-current-background-color-active: #222528;
-        --navbar-level-1-color: #ddd;
-        --navbar-level-2-color: #ccc;
-        --navbar-level-3-color: #bbb;
-        --navbar-heading-color: #ee7381;
-
-        --link-color: #8cf;
-        --link-color-hover: #9df;
-        --link-color-active: #6ad;
-        --link-color-visited: #cb99f6;
-
-        --hr-color: #555;
-        --table-row-odd-background-color: #3b3e41;
-        --code-background-color: #434649;
-        --code-border-color: #505356;
-        --code-literal-color: #faa;
-        --input-background-color: #333537;
-        --input-focus-border-color: #5f8cff;
-
-         Colors taken from the Godot script editor with the Adaptive theme 
-        --highlight-background-color: #202531;
-        --highlight-comment-color: rgba(204, 206, 211, 0.5);
-        --highlight-keyword-color: #ff7085;
-        --highlight-keyword2-color: #42ffc2;
-        --highlight-number-color: #a1ffe0;
-        --highlight-decorator-color: #abc8ff;
-        --highlight-type-color: #8effda;
-        --highlight-type2-color: #c6ffed;
-        --highlight-function-color: #57b3ff;
-        --highlight-operator-color: #abc8ff;
-        --highlight-string-color: #ffeca1;
-
-        --admonition-note-background-color: #303d4f;
-        --admonition-note-color: #bfeeff;
-        --admonition-note-title-background-color: #305070;
-        --admonition-note-title-color: #bfefff;
-        --admonition-attention-background-color: #444033;
-        --admonition-attention-color: #ffeeaf;
-        --admonition-attention-title-background-color: #665022;
-        --admonition-attention-title-color: #ffeeaf;
-        --admonition-tip-background-color: #28382d;
-        --admonition-tip-color: #dfd;
-        --admonition-tip-title-background-color: #336648;
-        --admonition-tip-title-color: #dfd;
-
-        --btn-neutral-background-color: #404040;
-        --btn-neutral-hover-background-color: #505050;
-        --footer-color: #aaa;
-    }
-}*/
-
-
-body,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-input[type="text"],
-input[type="button"],
-input[type="reset"],
-input[type="submit"],
-textarea,
-legend,
-.btn,
-.rst-content .toctree-wrapper p.caption,
-.rst-versions {
-    /* Use a system font stack for better performance (no Web fonts required) */
-    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-legend,
-.rst-content .toctree-wrapper p.caption {
-    /* Use a lighter font for headers (Medium instead of Bold) */
-    font-weight: 500;
-}
-
-p,
-article ul,
-article ol,
-.wy-plain-list-disc,
-.wy-plain-list-decimal,
-.rst-content ol.arabic,
-.rst-content .section ul,
-.rst-content .toctree-wrapper ul,
-.rst-content .section ol {
-    /* Increase the line height slightly to account for the different font */
-    line-height: 25px;
-}
-
-body,
-.rst-content table.docutils thead {
-    color: var(--body-color);
-}
-
-a {
-    color: var(--link-color);
-}
-
-.sphinx-tabs .sphinx-menu a.item {
-    /* Original definition has `!important` */
-    color: var(--link-color) !important;
-}
-
-a:hover {
-    color: var(--link-color-hover);
-    text-decoration: underline;
-}
-
-a:active {
-    /* Add visual feedback when clicking on a link */
-    color: var(--link-color-active);
-}
-
-a:visited {
-    color: var(--link-color-visited);
-}
-
-a.btn:hover {
-    text-decoration: none;
-}
-
-hr,
-#search-results .search li:first-child,
-#search-results .search li {
-    border-color: var(--hr-color);
-}
-
-/* Doesn't seem to be used on Read the Docs online builds, but is present when building locally */
-.rst-content dl:not(.docutils) dt {
-    background-color: var(--admonition-note-background-color);
-    border-color: var(--admonition-note-title-background-color);
-    color: var(--admonition-note-color);
-}
-
-footer,
-#search-results .context {
-    color: var(--footer-color);
-}
-
-.footer {
-    padding: 1vw;
-}
-.footer-print {
-    font-size: 12px;
-    font-family: Montserrat;
-    text-align: center;
-    padding: 2vw;
-    border: 1px;
-    border-style: solid;
-    border-top-color: rgb(223,210,255);
-    border-left-color: #fff;
-    border-right-color: #fff;
-    border-bottom-color: #fff;
-    margin:0vw 10vw;
-}
-
-/* Main sections */
-
-.wy-nav-content-wrap {
-    background-color: var(--content-wrap-background-color);
-}
-
-.wy-nav-content {
-    background-color: var(--content-background-color);
-}
-
-.wy-body-for-nav {
-    background-color: var(--content-wrap-background-color);
-}
-
-@media only screen and (min-width: 768px) {
-    .wy-body-for-nav {
-        /* Center the page on wide displays for better readability */
-        max-width: 1100px;
-        margin: 0 auto;
-    }
-}
-
-/* Table display tweaks */
-
-.rst-content table.docutils,
-.wy-table-bordered-all td,
-.rst-content table.docutils td,
-.wy-table thead th,
-.rst-content table.docutils thead th,
-.rst-content table.field-list thead th {
-    border-color: var(--code-border-color);
-}
-
-.wy-table-odd td,
-.wy-table-striped tr:nth-child(2n-1) td,
-.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td {
-    background-color: var(--table-row-odd-background-color);
-}
-
-/* Code display tweaks */
-
-code,
-.rst-content tt,
-.rst-content code {
-    font-size: 14px;
-    background-color: var(--code-background-color);
-    border: 1px solid var(--code-border-color);
-}
-
-.rst-content tt.literal,
-.rst-content code.literal {
-    color: var(--code-literal-color);
-}
-
-.rst-content div[class^="highlight"] {
-    border-color: var(--code-border-color);
-}
-
-.rst-content pre.literal-block,
-.rst-content div[class^="highlight"] pre,
-.rst-content .linenodiv pre {
-    /* Increase the font size and line height in code blocks */
-    font-size: 14px;
-    line-height: 1.5;
-}
-
-/* Code tab display tweaks */
-
-.ui.tabular.menu .active.item,
-.ui.segment {
-    background-color: var(--code-background-color);
-}
-
-/* Syntax highlighting */
-
-.highlight {
-    background-color: var(--highlight-background-color);
-}
-
-.highlight .c1,
-.highlight .cm {
-    color: var(--highlight-comment-color);
-}
-
-.highlight .bp,
-.highlight .k,
-.highlight .kd,
-.highlight .kn,
-.highlight .kt,
-.highlight .ow {
-    color: var(--highlight-keyword-color);
-}
-
-.highlight .cp {
-    color: var(--highlight-keyword2-color);
-}
-
-.highlight .m,
-.highlight .mf,
-.highlight .mi {
-    color: var(--highlight-number-color);
-}
-
-.highlight .na {
-    color: var(--highlight-decorator-color);
-}
-
-.highlight .nb {
-    color: var(--highlight-type-color);
-}
-
-.highlight .nc,
-.highlight .nn,
-.highlight .nv {
-    color: var(--highlight-type2-color);
-}
-
-.highlight .nf {
-    color: var(--highlight-function-color);
-}
-
-.highlight .o {
-    color: var(--highlight-operator-color);
-}
-
-.highlight .cpf,
-.highlight .s,
-.highlight .s1,
-.highlight .s2,
-.highlight .se {
-    color: var(--highlight-string-color);
-}
-
-/* Admonition tweaks */
-
-.rst-content .admonition.note,
-.rst-content .admonition.seealso {
-    background-color: var(--admonition-note-background-color);
-    color: var(--admonition-note-color);
-}
-
-.rst-content .admonition.note .admonition-title,
-.rst-content .admonition.seealso .admonition-title {
-    background-color: var(--admonition-note-title-background-color);
-    color: var(--admonition-note-title-color);
-}
-
-.rst-content .admonition.attention,
-.rst-content .admonition.caution,
-.rst-content .admonition.warning {
-    background-color: var(--admonition-attention-background-color);
-    color: var(--admonition-attention-color);
-}
-
-.rst-content .admonition.attention .admonition-title,
-.rst-content .admonition.caution .admonition-title,
-.rst-content .admonition.warning .admonition-title {
-    background-color: var(--admonition-attention-title-background-color);
-    color: var(--admonition-attention-title-color);
-}
-
-.rst-content .admonition.tip,
-.rst-content .admonition.important {
-    background-color: var(--admonition-tip-background-color);
-    color: var(--admonition-tip-color);
-}
-
-.rst-content .admonition.tip .admonition-title,
-.rst-content .admonition.important .admonition-title {
-    background-color: var(--admonition-tip-title-background-color);
-    color: var(--admonition-tip-title-color);
-}
-
-/* Buttons */
-
-.btn-neutral {
-    background-color: var(--btn-neutral-background-color) !important;
-    color: var(--body-color) !important;
-}
-
-.btn-neutral:hover {
-    background-color: var(--btn-neutral-hover-background-color) !important;
-}
-
-.btn-neutral:visited {
-    color: var(--body-color) !important;
-}
-
-/* Navigation bar logo and search */
-
-.logo {
-    opacity: var(--logo-opacity);
-}
-
-.wy-side-nav-search {
-    background-color: var(--navbar-background-color);
-}
-
-.wy-side-nav-search.fixed {
-    position: fixed;
-}
-
-@media only screen and (min-width: 768px) {
-    /* Simulate a drop shadow that only affects the bottom edge */
-    /* This is used to indicate the search bar is fixed */
-    .wy-side-nav-search.fixed::after {
-        content: '';
-        position: absolute;
-        left: 0;
-        bottom: -8px;
-        width: 300px;
-        height: 8px;
-        pointer-events: none;
-        background: linear-gradient(hsla(0, 0%, 0%, 0.2), transparent);
-    }
-}
-
-.wy-side-nav-search > a:hover,
-.wy-side-nav-search .wy-dropdown > a:hover {
-    background-color: var(--navbar-background-color-hover);
-}
-
-.wy-side-nav-search > a:active,
-.wy-side-nav-search .wy-dropdown > a:active {
-    background-color: var(--navbar-background-color-active);
-}
-
-.wy-side-nav-search input[type="text"] {
-    background-color: var(--input-background-color);
-    color: var(--body-color);
-    /* Avoid reflowing when toggling the focus state */
-    border: 2px solid transparent;
-    box-shadow: none;
-    /* Make visual feedback instant */
-    transition: none;
-    font-size: 14px;
-}
-
-.wy-side-nav-search input[type="text"]:focus {
-    border: 2px solid var(--input-focus-border-color);
-}
-
-.wy-side-nav-search input[type="text"]::placeholder {
-    color: var(--body-color);
-    opacity: 0.55;
-}
-
-/* Navigation bar */
-
-.wy-nav-side {
-    background-color: var(--navbar-background-color);
-}
-
-@media only screen and (min-width: 768px) {
-    .wy-nav-side {
-        /* Required to center the page on wide displays */
-        left: inherit;
-    }
-}
-
-.wy-menu-vertical header,
-.wy-menu-vertical p.caption {
-    color: var(--navbar-heading-color);
-
-    /* Improves the appearance of uppercase text */
-    letter-spacing: 0.75px;
-}
-
-/* Mobile navigation */
-
-.wy-nav-top,
-.wy-nav-top a {
-    background-color: var(--navbar-background-color);
-    color: var(--navbar-level-1-color);
-}
-
-/* Version branch label below the logo */
-.wy-side-nav-search > div.version {
-    color: var(--navbar-level-3-color);
-    opacity: 0.9;
-}
-
-/* First level of navigation items */
-
-.wy-menu-vertical {
-    /* Account for the increased `toctree-expand` button margins */
-    width: 308px;
-}
-
-.wy-menu-vertical a {
-    color: var(--navbar-level-1-color);
-}
-
-.wy-menu-vertical a:hover {
-    background-color: var(--navbar-background-color-hover);
-    color: var(--navbar-level-1-color);
-}
-
-.wy-menu-vertical a:active {
-    background-color: var(--navbar-background-color-active);
-}
-
-.wy-menu-vertical li.toctree-l1.current > a {
-    border: none;
-}
-
-.wy-side-nav-search, .wy-menu-vertical a, .wy-menu-vertical a span.toctree-expand,
-.wy-menu-vertical li.toctree-l2 a span.toctree-expand {
-    color: var(--navbar-level-3-color);
-    opacity: 0.9;
-    margin-right: 8px;
-}
-
-.wy-side-nav-search, .wy-menu-vertical a, .wy-menu-vertical a:hover span.toctree-expand,
-.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand {
-    color: var(--navbar-level-2-color);
-    opacity: 1;
-}
-
-.wy-side-nav-search, .wy-menu-vertical a, .wy-menu-vertical a:active span.toctree-expand,
-.wy-menu-vertical li.toctree-l2 a:active span.toctree-expand {
-    color: var(--navbar-level-1-color);
-    opacity: 1;
-}
-
-/* Second (and higher) levels of navigation items */
-
-.wy-menu-vertical li.current a {
-    /* Make long words always display on a single line, keep wrapping for multiple words */
-    /* This fixes the class reference titles' display with very long class names */
-    display: flex;
-}
-
-.wy-menu-vertical li.current a,
-.wy-menu-vertical li.toctree-l2.current > a,
-.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
-.wy-menu-vertical li.toctree-l2.current li.toctree-l4 > a {
-    background-color: var(--navbar-current-background-color);
-    color: var(--navbar-level-2-color);
-    border-color: var(--navbar-current-background-color);
-}
-
-.wy-menu-vertical li.current a:hover,
-.wy-menu-vertical li.toctree-l2.current > a:hover,
-.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a:hover,
-.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a:hover {
-    background-color: var(--navbar-current-background-color-hover);
-}
-
-.wy-menu-vertical li.current a:active,
-.wy-menu-vertical li.toctree-l2.current > a:active,
-.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a:active,
-.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a:active {
-    background-color: var(--navbar-current-background-color-active);
-}
-
-/* Version selector (only visible on Read the Docs) */
-
-.rst-versions {
-    background-color: var(--navbar-current-background-color);
-}
-
-@media only screen and (min-width: 768px) {
-    .rst-versions {
-        /* Required to center the page on wide displays */
-        left: inherit;
-    }
-}
-
-.rst-versions a,
-.rst-versions .rst-current-version,
-.rst-versions .rst-current-version .fa,
-.rst-versions .rst-other-versions dd a {
-    color: var(--navbar-level-1-color);
-}
-
-.rst-versions .rst-other-versions small {
-    color: var(--navbar-level-3-color);
-}
-
-.rst-versions .rst-other-versions dd a:hover {
-    text-decoration: underline;
-}
-
-.rst-versions .rst-other-versions {
-    color: var(--navbar-heading-color);
-}
-
-.rst-versions .rst-current-version {
-    background-color: var(--navbar-current-background-color);
-}
-
-.rst-versions .rst-current-version:hover {
-    background-color: var(--navbar-current-background-color-hover);
-}
-
-.rst-versions .rst-current-version:active {
-    background-color: var(--navbar-current-background-color-active);
-}
-
-/* Hide the obnoxious automatic highlight in search results */
-.rst-content .highlighted {
-    background-color: transparent;
-    font-weight: inherit;
-    padding: 0;
-}
diff --git a/docs/_static/js/custom.js b/docs/_static/js/custom.js
deleted file mode 100644
index 7f05c957..00000000
--- a/docs/_static/js/custom.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// The number of pixels the user must scroll by before the logo is hidden.
-const scrollTopPixels = 234;
-
-// The margin to apply to the menu when the search bar is made fixed.
-// Should roughly match the logo's height as to not hide the top menu items
-// behind it.
-const menuTopMargin = '330px';
-
-// Hide the navigation bar logo when scrolling down on desktop platforms.
-// The logo is quite tall, so this helps make the rest of the navigation bar
-// more readable.
-function registerOnScrollEvent(mediaQuery) {
-  // The navigation bar that contains the logo.
-  const $navbar = $('.wy-side-scroll');
-  const $menu = $('.wy-menu-vertical');
-  const $search = $('.wy-side-nav-search');
-
-  // The anchor that contains the logo. This element will be hidden
-  // (instead of hiding just the logo), otherwise, a small clickable area
-  // would remain visible.
-  const $logo = $('.wy-side-nav-search > a');
-
-  if (mediaQuery.matches) {
-    // We're on desktop; register the scroll event.
-    $navbar.scroll(function() {
-      if ($(this).scrollTop() >= scrollTopPixels) {
-        $logo.hide();
-        $search.addClass('fixed');
-        $menu.css('margin-top', menuTopMargin);
-      } else {
-        $logo.show();
-        $search.removeClass('fixed');
-        $menu.css('margin-top', 0);
-      }
-    });
-  } else {
-    // We're on mobile; unregister the scroll event so the logo isn't hidden
-    // when scrolling.
-    $logo.show();
-    $navbar.unbind('scroll');
-  }
-}
-
-$(document).ready(() => {
-  const mediaQuery = window.matchMedia('only screen and (min-width: 768px)');
-  registerOnScrollEvent(mediaQuery);
-  mediaQuery.addListener(registerOnScrollEvent);
-});
diff --git a/docs/api/dynamic_models.rst b/docs/api/dynamic_models.rst
deleted file mode 100644
index c7c9da68..00000000
--- a/docs/api/dynamic_models.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Dynamic Models
-========================================
-
-This file contains all numba just-in-time compiled function for the dynamic models.
-
-.. doxygenfile:: dynamic_models.py
-    :project: f1tenth_gym
\ No newline at end of file
diff --git a/docs/api/env.rst b/docs/api/env.rst
deleted file mode 100644
index da9c8413..00000000
--- a/docs/api/env.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Gym Environment
-========================================
-
-This is the top level file that conforms to the OpenAI gym convention.
-
-.. doxygenfile:: f110_env.py
-    :project: f1tenth_gym
\ No newline at end of file
diff --git a/docs/api/rendering.rst b/docs/api/rendering.rst
deleted file mode 100644
index dc439563..00000000
--- a/docs/api/rendering.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Rendering Engine
-========================================
-
-This is the rendering engine using pyglet to visualize the running environment.
-
-.. doxygenfile:: rendering.py
-    :project: f1tenth_gym
\ No newline at end of file
diff --git a/docs/conf.py b/docs/conf.py
deleted file mode 100644
index c3decdd4..00000000
--- a/docs/conf.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# flake8: noqa
-import os
-
-import sphinx_rtd_theme
-
-source_suffix = ".rst"
-source_encoding = "utf-8-sig"
-
-# -- Language ----------------------------------------------------------------
-env_tags = os.getenv("SPHINX_TAGS")
-if env_tags is not None:
-    for tag in env_tags.split(","):
-        print("Adding Sphinx tag: %s" % tag.strip())
-        tags.add(tag.strip())
-
-language = os.getenv("READTHEDOCS_LANGUAGE", "en")
-is_i18n = tags.has("i18n")
-
-# -- Theme -------------------------------------------------------------------
-on_rtd = os.environ.get("READTHEDOCS", None) == "True"
-html_theme = "sphinx_rtd_theme"
-html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
-if on_rtd:
-    using_rtd_theme = True
-html_theme_options = {
-    # 'typekit_id': 'hiw1hhg',
-    # 'analytics_id': '',
-    # 'sticky_navigation': True  # Set to False to disable the sticky nav while scrolling.
-    "logo_only": False,  # if we have a html_logo below, this shows /only/ the logo with no title text
-    "collapse_navigation": False,  # Collapse navigation (False makes it tree-like)
-    "prev_next_buttons_location": "bottom",
-    # 'display_version': True,  # Display the docs version
-    # 'navigation_depth': 4,  # Depth of the headers shown in the navigation bar
-}
-html_context = {
-    "display_github": not is_i18n,  # Integrate GitHub
-    "github_user": "f1tenth",  # Username
-    "github_repo": "f1tenth_gym",  # Repo name
-    "github_version": "exp_py",  # Version
-    "conf_py_path": "/docs/",  # Path in the checkout to the docs root
-}
-
-html_favicon = "assets/f1_stickers_02.png"
-
-html_css_files = ["css/custom.css"]
-
-html_js_files = ["css/custom.js"]
-html_logo = "assets/f1tenth_gym.svg"
-
-# -- Project information -----------------------------------------------------
-
-project = "f1tenth_gym"
-copyright = "2021, Hongrui Zheng, Matthew O'Kelly, Aman Sinha"
-author = "Hongrui Zheng"
-
-# The full version, including alpha/beta/rc tags
-release = "latest"
-version = "latest"
-
-
-# -- General configuration ---------------------------------------------------
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = ["breathe", "sphinx_rtd_theme", "sphinx.ext.autosectionlabel"]
-
-# Breathe configuration
-breathe_projects = {"f1tenth_gym": "./xml"}
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates"]
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This pattern also affects html_static_path and html_extra_path.
-exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ["_static"]
diff --git a/docs/html/annotated.html b/docs/html/annotated.html
deleted file mode 100644
index aa25b01d..00000000
--- a/docs/html/annotated.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Class List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
-  <div class="headertitle">
-<div class="title">Class List</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>f110_gym</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>envs</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>base_classes</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html" target="_self">RaceCar</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_0_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html" target="_self">Simulator</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_1_" class="arrow" onclick="toggleFolder('0_0_1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>collision_models</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_1_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html" target="_self">CollisionTests</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_2_" class="arrow" onclick="toggleFolder('0_0_2_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>dynamic_models</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_2_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html" target="_self">DynamicsTest</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_3_" class="arrow" onclick="toggleFolder('0_0_3_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>f110_env</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_3_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html" target="_self">F110Env</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_4_" class="arrow" onclick="toggleFolder('0_0_4_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>f110_env_backup</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_4_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html" target="_self">F110Env</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_5_" class="arrow" onclick="toggleFolder('0_0_5_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>laser_models</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_5_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html" target="_self">ScanSimulator2D</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_5_1_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html" target="_self">ScanTests</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_6_" class="arrow" onclick="toggleFolder('0_0_6_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>rendering</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_6_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html" target="_self">EnvRenderer</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>unittest</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_0_" class="arrow" onclick="toggleFolder('0_1_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>collision_checks</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_0_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html" target="_self">CollisionTests</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_1_" class="arrow" onclick="toggleFolder('0_1_1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>dynamics_test</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_1_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html" target="_self">DynamicsTest</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_2_" class="arrow" onclick="toggleFolder('0_1_2_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>pyglet_test</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_2_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html" target="_self">Camera</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_2_1_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html" target="_self">CenteredCamera</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_3_" class="arrow" onclick="toggleFolder('0_1_3_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>pyglet_test_camera</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_3_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html" target="_self">App</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_4_" class="arrow" onclick="toggleFolder('0_1_4_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>scan_sim</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_4_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html" target="_self">ScanSimulator2D</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_4_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html" target="_self">ScanTests</a></td><td class="desc"></td></tr>
-</table>
-</div><!-- directory -->
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png
deleted file mode 100644
index 224b29aa9847d5a4b3902efd602b7ddf7d33e6c2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 676
zcmV;V0$crwP)<h;3K|Lk000e1NJLTq000O80015c1^@s65rAI}0007ONkl<ZcmeI5
z%WD%+6voe;xyj6=NhXt~4{e$zF*P<SZp4L@2Hd!iQY<tJD@e5{RU55hl&Talf{KWb
zN*6A=C`Gqz5#NvcXzNOCOH(I9n<#?l<k5ws2omoMCgj%s3y1G=&gJ~>y__>=_9%My
z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s
z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK
ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS
zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3
zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U
zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o%
zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2
zBrW#G7Ss9wvzr@>H*`r>zE<Gz)cj&*s5lRy$b&*W@2j<GZEpXZ$P|Z!4Q$_|`5gj>
z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66
zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000<
KMNUMnLSTYoA~SLT

diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png
deleted file mode 100644
index 940a0b950443a0bb1b216ac03c45b8a16c955452..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C<wUB513~7
zF-Lk{?g8$ijf`2F^ip|Vw7EpzIJxiU`6~>2wk~_T<sM_r%les%%^JdHy*A#$ew5wb
vr&wL1c8#4j*F5jfGT)c(PZrEb5O3m+yDrVre6KeTXbXd<tDnm{r-UW|3$!!q

diff --git a/docs/html/classes.html b/docs/html/classes.html
deleted file mode 100644
index e273ab58..00000000
--- a/docs/html/classes.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Class Index</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
-  <div class="headertitle">
-<div class="title">Class Index</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_a">a</a>&#160;|&#160;<a class="qindex" href="#letter_c">c</a>&#160;|&#160;<a class="qindex" href="#letter_d">d</a>&#160;|&#160;<a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_f">f</a>&#160;|&#160;<a class="qindex" href="#letter_r">r</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a></div>
-<table class="classindex">
-<tr><td rowspan="2" valign="bottom"><a name="letter_a"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;a&#160;&#160;</div></td></tr></table>
-</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html">CenteredCamera</a> (f110_gym.unittest.pyglet_test)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">DynamicsTest</a> (f110_gym.unittest.dynamics_test)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">F110Env</a> (f110_gym.envs.f110_env)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">ScanSimulator2D</a> (f110_gym.envs.laser_models)&#160;&#160;&#160;</td>
-</tr>
-<tr><td valign="top"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">CollisionTests</a> (f110_gym.unittest.collision_checks)&#160;&#160;&#160;</td>
-<td rowspan="2" valign="bottom"><a name="letter_e"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;e&#160;&#160;</div></td></tr></table>
-</td>
-<td rowspan="2" valign="bottom"><a name="letter_r"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;r&#160;&#160;</div></td></tr></table>
-</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">ScanTests</a> (f110_gym.unittest.scan_sim)&#160;&#160;&#160;</td>
-</tr>
-<tr><td valign="top"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">App</a> (f110_gym.unittest.pyglet_test_camera)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">CollisionTests</a> (f110_gym.envs.collision_models)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">ScanTests</a> (f110_gym.envs.laser_models)&#160;&#160;&#160;</td>
-</tr>
-<tr><td rowspan="2" valign="bottom"><a name="letter_c"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;c&#160;&#160;</div></td></tr></table>
-</td>
-<td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;d&#160;&#160;</div></td></tr></table>
-</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">EnvRenderer</a> (f110_gym.envs.rendering)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">RaceCar</a> (f110_gym.envs.base_classes)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">Simulator</a> (f110_gym.envs.base_classes)&#160;&#160;&#160;</td>
-</tr>
-<tr><td rowspan="2" valign="bottom"><a name="letter_f"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;f&#160;&#160;</div></td></tr></table>
-</td>
-<td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;s&#160;&#160;</div></td></tr></table>
-</td>
-<td></td></tr>
-<tr><td valign="top"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">Camera</a> (f110_gym.unittest.pyglet_test)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">DynamicsTest</a> (f110_gym.envs.dynamic_models)&#160;&#160;&#160;</td>
-<td></td></tr>
-<tr><td></td><td></td><td valign="top"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">F110Env</a> (f110_gym.envs.f110_env_backup)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">ScanSimulator2D</a> (f110_gym.unittest.scan_sim)&#160;&#160;&#160;</td>
-<td></td></tr>
-<tr><td></td><td></td><td></td><td></td><td></td></tr>
-</table>
-<div class="qindex"><a class="qindex" href="#letter_a">a</a>&#160;|&#160;<a class="qindex" href="#letter_c">c</a>&#160;|&#160;<a class="qindex" href="#letter_d">d</a>&#160;|&#160;<a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_f">f</a>&#160;|&#160;<a class="qindex" href="#letter_r">r</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a></div>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car-members.html b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car-members.html
deleted file mode 100644
index 71b2699e..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car-members.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>base_classes</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">RaceCar</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.envs.base_classes.RaceCar Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#af342754a877c42b3828a03b6425801d4">__init__</a>(self, params, is_ego=False, time_step=0.01, num_beams=1080, fov=4.7)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>accel</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4577a30fd8879de7df1d0ace7702f450">check_ttc</a>(self)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>cosines</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>current_scan</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>fov</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>in_collision</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>is_ego</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>num_beams</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>opp_poses</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>params</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a7d15e74a1b82646675d60ce02cdce6b5">ray_cast_agents</a>(self, scan)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a0fa587dc3c1a12c9217f0bd093c1bc08">reset</a>(self, pose)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>scan_angles</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scan_simulator</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a2a60c9ee34f2f09fb0a7e5cc7b287897">set_map</a>(self, map_path, map_ext)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>side_distances</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>state</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>steer_angle_vel</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>steer_buffer</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>steer_buffer_size</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>time_step</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ttc_thresh</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4800c5ac90ba93b79a0338e5e34ead43">update_opp_poses</a>(self, opp_poses)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a6ab5b5dd420b182b5156ee9566c03411">update_params</a>(self, params)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#ae12c14c1353e6aab2f72036593d85518">update_pose</a>(self, raw_steer, vel)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a356ec05a0a0c056f4d43f5fb0451c83d">update_scan</a>(self)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">f110_gym.envs.base_classes.RaceCar</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html
deleted file mode 100644
index 0f1b2a5c..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html
+++ /dev/null
@@ -1,538 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.envs.base_classes.RaceCar Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>base_classes</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html">RaceCar</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.envs.base_classes.RaceCar Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.envs.base_classes.RaceCar:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.png" border="0" usemap="#f110__gym_8envs_8base__classes_8_race_car_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8envs_8base__classes_8_race_car_inherit__map" id="f110__gym_8envs_8base__classes_8_race_car_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,163,121"/>
-<area shape="rect" title=" " alt="" coords="53,5,115,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.envs.base_classes.RaceCar:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.png" border="0" usemap="#f110__gym_8envs_8base__classes_8_race_car_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8envs_8base__classes_8_race_car_coll__map" id="f110__gym_8envs_8base__classes_8_race_car_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,163,121"/>
-<area shape="rect" title=" " alt="" coords="53,5,115,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:af342754a877c42b3828a03b6425801d4"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#af342754a877c42b3828a03b6425801d4">__init__</a> (self, params, is_ego=False, time_step=0.01, num_beams=1080, fov=4.7)</td></tr>
-<tr class="separator:af342754a877c42b3828a03b6425801d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6ab5b5dd420b182b5156ee9566c03411"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a6ab5b5dd420b182b5156ee9566c03411">update_params</a> (self, params)</td></tr>
-<tr class="separator:a6ab5b5dd420b182b5156ee9566c03411"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2a60c9ee34f2f09fb0a7e5cc7b287897"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a2a60c9ee34f2f09fb0a7e5cc7b287897">set_map</a> (self, map_path, map_ext)</td></tr>
-<tr class="separator:a2a60c9ee34f2f09fb0a7e5cc7b287897"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0fa587dc3c1a12c9217f0bd093c1bc08"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a0fa587dc3c1a12c9217f0bd093c1bc08">reset</a> (self, pose)</td></tr>
-<tr class="separator:a0fa587dc3c1a12c9217f0bd093c1bc08"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7d15e74a1b82646675d60ce02cdce6b5"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a7d15e74a1b82646675d60ce02cdce6b5">ray_cast_agents</a> (self, scan)</td></tr>
-<tr class="separator:a7d15e74a1b82646675d60ce02cdce6b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4577a30fd8879de7df1d0ace7702f450"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4577a30fd8879de7df1d0ace7702f450">check_ttc</a> (self)</td></tr>
-<tr class="separator:a4577a30fd8879de7df1d0ace7702f450"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae12c14c1353e6aab2f72036593d85518"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#ae12c14c1353e6aab2f72036593d85518">update_pose</a> (self, raw_steer, vel)</td></tr>
-<tr class="separator:ae12c14c1353e6aab2f72036593d85518"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4800c5ac90ba93b79a0338e5e34ead43"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4800c5ac90ba93b79a0338e5e34ead43">update_opp_poses</a> (self, opp_poses)</td></tr>
-<tr class="separator:a4800c5ac90ba93b79a0338e5e34ead43"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a356ec05a0a0c056f4d43f5fb0451c83d"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a356ec05a0a0c056f4d43f5fb0451c83d">update_scan</a> (self)</td></tr>
-<tr class="separator:a356ec05a0a0c056f4d43f5fb0451c83d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:af3ba3709a5dfd62c730a8896126a2539"><td class="memItemLeft" align="right" valign="top"><a id="af3ba3709a5dfd62c730a8896126a2539"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>params</b></td></tr>
-<tr class="separator:af3ba3709a5dfd62c730a8896126a2539"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5408c25f5507645e351b33c7b93d09e9"><td class="memItemLeft" align="right" valign="top"><a id="a5408c25f5507645e351b33c7b93d09e9"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>is_ego</b></td></tr>
-<tr class="separator:a5408c25f5507645e351b33c7b93d09e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a507e48bfae2cd153ce988acfa915f4e3"><td class="memItemLeft" align="right" valign="top"><a id="a507e48bfae2cd153ce988acfa915f4e3"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>time_step</b></td></tr>
-<tr class="separator:a507e48bfae2cd153ce988acfa915f4e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a32283ca467927cb92fd4cebaf4572788"><td class="memItemLeft" align="right" valign="top"><a id="a32283ca467927cb92fd4cebaf4572788"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr>
-<tr class="separator:a32283ca467927cb92fd4cebaf4572788"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab17edc5d7143043b17160ce593da0e05"><td class="memItemLeft" align="right" valign="top"><a id="ab17edc5d7143043b17160ce593da0e05"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr>
-<tr class="separator:ab17edc5d7143043b17160ce593da0e05"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aea2c21a52410444a2502ee4e7d370bad"><td class="memItemLeft" align="right" valign="top"><a id="aea2c21a52410444a2502ee4e7d370bad"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>state</b></td></tr>
-<tr class="separator:aea2c21a52410444a2502ee4e7d370bad"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3dc163d182be2760a4f8322417fd2332"><td class="memItemLeft" align="right" valign="top"><a id="a3dc163d182be2760a4f8322417fd2332"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>opp_poses</b></td></tr>
-<tr class="separator:a3dc163d182be2760a4f8322417fd2332"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f298f55e8dc14fb39e5145699e90bfa"><td class="memItemLeft" align="right" valign="top"><a id="a5f298f55e8dc14fb39e5145699e90bfa"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>accel</b></td></tr>
-<tr class="separator:a5f298f55e8dc14fb39e5145699e90bfa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5a1dbcba00b5c54afc700873df015eba"><td class="memItemLeft" align="right" valign="top"><a id="a5a1dbcba00b5c54afc700873df015eba"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>steer_angle_vel</b></td></tr>
-<tr class="separator:a5a1dbcba00b5c54afc700873df015eba"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a462d1ce0e070187aba97a24d75961884"><td class="memItemLeft" align="right" valign="top"><a id="a462d1ce0e070187aba97a24d75961884"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>steer_buffer</b></td></tr>
-<tr class="separator:a462d1ce0e070187aba97a24d75961884"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a51405046f30a27487241455cb51481ff"><td class="memItemLeft" align="right" valign="top"><a id="a51405046f30a27487241455cb51481ff"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>steer_buffer_size</b></td></tr>
-<tr class="separator:a51405046f30a27487241455cb51481ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a04ac46193f2706b71aa6ccc616484a1b"><td class="memItemLeft" align="right" valign="top"><a id="a04ac46193f2706b71aa6ccc616484a1b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>in_collision</b></td></tr>
-<tr class="separator:a04ac46193f2706b71aa6ccc616484a1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5eb8a1fa8d27dfccd008573e2d720c44"><td class="memItemLeft" align="right" valign="top"><a id="a5eb8a1fa8d27dfccd008573e2d720c44"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>ttc_thresh</b></td></tr>
-<tr class="separator:a5eb8a1fa8d27dfccd008573e2d720c44"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a35674ca4c4a0eda359249216bee094b3"><td class="memItemLeft" align="right" valign="top"><a id="a35674ca4c4a0eda359249216bee094b3"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>scan_simulator</b></td></tr>
-<tr class="separator:a35674ca4c4a0eda359249216bee094b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aeaedd3e39c14a7904e8417ad264b3168"><td class="memItemLeft" align="right" valign="top"><a id="aeaedd3e39c14a7904e8417ad264b3168"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>current_scan</b></td></tr>
-<tr class="separator:aeaedd3e39c14a7904e8417ad264b3168"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a47e2229884b30c3640f75cc46a4b1fe9"><td class="memItemLeft" align="right" valign="top"><a id="a47e2229884b30c3640f75cc46a4b1fe9"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>cosines</b></td></tr>
-<tr class="separator:a47e2229884b30c3640f75cc46a4b1fe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7a416feebdc5bf3289495877a722ac5e"><td class="memItemLeft" align="right" valign="top"><a id="a7a416feebdc5bf3289495877a722ac5e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>scan_angles</b></td></tr>
-<tr class="separator:a7a416feebdc5bf3289495877a722ac5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a45934ce2c731e21cee3b3890d5713a1e"><td class="memItemLeft" align="right" valign="top"><a id="a45934ce2c731e21cee3b3890d5713a1e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>side_distances</b></td></tr>
-<tr class="separator:a45934ce2c731e21cee3b3890d5713a1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment">Base level race car class, handles the physics and laser scan of a single vehicle
-
-Data Members:
-    params (dict): vehicle parameters dictionary
-    is_ego (bool): ego identifier
-    time_step (float): physics timestep
-    num_beams (int): number of beams in laser
-    fov (float): field of view of laser
-    state (np.ndarray (7, )): state vector [x, y, theta, vel, steer_angle, ang_vel, slip_angle]
-    odom (np.ndarray(13, )): odometry vector [x, y, z, qx, qy, qz, qw, linear_x, linear_y, linear_z, angular_x, angular_y, angular_z]
-    accel (float): current acceleration input
-    steer_angle_vel (float): current steering velocity input
-    in_collision (bool): collision indicator</pre> </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="af342754a877c42b3828a03b6425801d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af342754a877c42b3828a03b6425801d4">&#9670;&nbsp;</a></span>__init__()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.RaceCar.__init__ </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>params</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>is_ego</em> = <code>False</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>time_step</em> = <code>0.01</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>num_beams</em> = <code>1080</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>fov</em> = <code>4.7</code>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Init function
-
-Args:
-    params (dict): vehicle parameter dictionary, includes {'mu', 'C_Sf', 'C_Sr', 'lf', 'lr', 'h', 'm', 'I', 's_min', 's_max', 'sv_min', 'sv_max', 'v_switch', 'a_max': 9.51, 'v_min', 'v_max', 'length', 'width'}
-    is_ego (bool, default=False): ego identifier
-    time_step (float, default=0.01): physics sim time step
-    num_beams (int, default=1080): number of beams in the laser scan
-    fov (float, default=4.7): field of view of the laser
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="a4577a30fd8879de7df1d0ace7702f450"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4577a30fd8879de7df1d0ace7702f450">&#9670;&nbsp;</a></span>check_ttc()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.RaceCar.check_ttc </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Check iTTC against the environment, sets vehicle states accordingly if collision occurs.
-Note that this does NOT check collision with other agents.
-
-state is [x, y, steer_angle, vel, yaw_angle, yaw_rate, slip_angle]
-
-Args:
-    None
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="a7d15e74a1b82646675d60ce02cdce6b5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7d15e74a1b82646675d60ce02cdce6b5">&#9670;&nbsp;</a></span>ray_cast_agents()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.RaceCar.ray_cast_agents </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>scan</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Ray cast onto other agents in the env, modify original scan
-
-Args:
-    scan (np.ndarray, (n, )): original scan range array
-
-Returns:
-    new_scan (np.ndarray, (n, )): modified scan
-</pre> 
-</div>
-</div>
-<a id="a0fa587dc3c1a12c9217f0bd093c1bc08"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0fa587dc3c1a12c9217f0bd093c1bc08">&#9670;&nbsp;</a></span>reset()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.RaceCar.reset </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>pose</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Resets the vehicle to a pose
-
-Args:
-    pose (np.ndarray (3, )): pose to reset the vehicle to
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="a2a60c9ee34f2f09fb0a7e5cc7b287897"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2a60c9ee34f2f09fb0a7e5cc7b287897">&#9670;&nbsp;</a></span>set_map()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.RaceCar.set_map </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_path</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_ext</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Sets the map for scan simulator
-
-Args:
-    map_path (str): absolute path to the map yaml file
-    map_ext (str): extension of the map image file
-</pre> 
-</div>
-</div>
-<a id="a4800c5ac90ba93b79a0338e5e34ead43"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4800c5ac90ba93b79a0338e5e34ead43">&#9670;&nbsp;</a></span>update_opp_poses()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.RaceCar.update_opp_poses </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>opp_poses</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Updates the vehicle's information on other vehicles
-
-Args:
-    opp_poses (np.ndarray(num_other_agents, 3)): updated poses of other agents
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="a6ab5b5dd420b182b5156ee9566c03411"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6ab5b5dd420b182b5156ee9566c03411">&#9670;&nbsp;</a></span>update_params()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.RaceCar.update_params </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>params</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Updates the physical parameters of the vehicle
-Note that does not need to be called at initialization of class anymore
-
-Args:
-    params (dict): new parameters for the vehicle
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="ae12c14c1353e6aab2f72036593d85518"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae12c14c1353e6aab2f72036593d85518">&#9670;&nbsp;</a></span>update_pose()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.RaceCar.update_pose </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>raw_steer</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>vel</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Steps the vehicle's physical simulation
-
-Args:
-    steer (float): desired steering angle
-    vel (float): desired longitudinal velocity
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="a356ec05a0a0c056f4d43f5fb0451c83d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a356ec05a0a0c056f4d43f5fb0451c83d">&#9670;&nbsp;</a></span>update_scan()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.RaceCar.update_scan </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Steps the vehicle's laser scan simulation
-Separated from update_pose because needs to update scan based on NEW poses of agents in the environment
-
-Args:
-    None
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.png b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.png
deleted file mode 100644
index 9c1114a36cb87af6472e724826a0f9c63922212a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 671
zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r*
zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|`boba4!+V0=6G?xa@=0&KIT_kXW{EG+Es
zZ_?GPM>ZdhC|l@|Aa$a^n?vyogX5$(j~7i!;S`^$;vJ(Uwft4u9;KH24zHkA#fwkn
zqFa+DYHd^cH*Lx19d0JC)`q>jEi$P@?RwX<MP^%cs{Z>ZR?TTseR=qYwU+1n#|E$S
zwoWQhntpGwc--tsArBW#D&dR&_~%rg*QKXBR;WZCa#cMk)Sbbh=)-W}=^ci&1hI>^
zbA>KPx`>~*^jR+Wbq#j{w>ayDmTsnqL#~WE4;L{^D+pxp-l5T;8Y6N*NRKOl6ID80
z(22v?fnh^GRL4hw*iV=K=CA4fDe)k7p4^j@ebIcZ5}Pj1at%Mb)>|u%Qz)UmzgzCx
z-E7}QtuZ%uS0wH3OiKM1YqRIdQul44)jol1<9{xfT=4peZ8+=oE!P>-7i-*@b1nAb
z?g+(QZt-$$cjio2GUtD_d*kb03{SU9>bGtVpOXCSYo%+6#Jd$MXKj>Gzy3Y>eTh_W
z_@36o3U0>#-AXp3zCP1md|Q5N#idU|*EyH^3HR5o*j4uU=)PKk(4b#yGinytd(VAw
zu8m)8-_28L*2ksq%g)`UvA8nUWa*rV8ImcIC$GNGxc#dqW4feuuT|)^MK8ZxjWpN2
zo_I~y>g&y2CwFDv&pPrYXvwuOkq7F1`34RDr^~xupKkLmt#~uj9#<*p2RZZZU;O68
t_QQEkNeSaWEoe9%`D@0n$nyIS^M>AjiPKg^>cG^*;OXk;vd$@?2>|X7GYbF!

diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.map b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.map
deleted file mode 100644
index 42abcf76..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.base_classes.RaceCar" name="f110_gym.envs.base_classes.RaceCar">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,163,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="53,5,115,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.md5
deleted file mode 100644
index 3a360bb2..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-e036bd71c7bbe37faf37a4e9a1d76183
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.png b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__coll__graph.png
deleted file mode 100644
index 5f832796d7b2c8d4a5c23dd3abe1e8b3d8e8c479..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4645
zcmcgwhd-O$9*<U4i<%wOXlsYk+B>zyruHZ;wTZonmnuq7qiU;BYS!MdR}qxZphj!P
zZtWWPc<<+a-h2Onn|zYz$;orhbI$Mg`;PNOXsRocU8lPafk4RMN^;uZSO7jqVj}SE
z=N!Qd4n!|h6y+f27w@d*{CEh2auO~lt>c}x@!d~TXYagcXZcdYgYfrX<a<fjIIVtN
z;p^%z@R5HsqQF0>@_0s;zl*+QGK*6kS0Ealo$J$<tv0<ar5EX=QKBQD6YDIksU-Kr
zv_5T?DG+DY?-*f<`+4j$@Q8WYA0xUo6gH98pFy4-%L137u>8{f^$M|!n%t8shSUT%
zE!7BhVg<!jZkszL@tW1RU%Q2^ce7SWGS}1dA{y-Llg=MCY>4vBA6@P3>nnGswX*iG
z)`VziXqcFoaGNSLH@Gd|&@VOl&p&Mq;X&6c*e*ePQ-}*F(P;Ggbp7bpmlCydPt?Ym
z{k&ehc)@M@8cRhWII=pLe~pBMzaM?+(xt=WwX(qqUi<r?<D?tYu(;ReHb#7F?#GYd
zq9QJ8cJ+nL?~O!`r6%<<TQkiruCDDvLouLvWkR>9^Y*P<e17{5lU24Mm6iN$ZEd;v
z`D+uiEyzq<rS)j3sd$Q@efQX>r<_pekB!>drIVxIsu>crp)%43o8L17moo{50-h+w
zFscOxN+C~nt}bKJWs9)CHXFC-s&I8K%>C~kGBY!WJhtejprO&(FiyQj&E|Z1>_J6M
zUGMXojX~U#ML-~-qJj@H6L4S}_-8|Se`{95$cXOj?94`h4t=_Bd~$k<Yw+NTV{tj&
zUCp04unx9-DL{vE|FgegRIR3_mI&c|_)x87{cD~I)xGZx9x8DxaQtL-QI+$&Ovr|q
z2cAV<QSqX&tmUks%ICKg9Gn+nm4gzJlRqJhjf|k8qN4EIyw4K8j*hZEX$U;^P24;D
z^GC(F)~Uo%pKKZ(VEolaz++MmQ~XQU+R?V!XnlR%W~!zn5U0Z1oNKncxp^ZfDJiMV
z^Vzd!mX?+}lV)H65JpDE#PQR;2{Qr5Ng88g<H=eCqLjy=dHI;?{6{3OwzhWrV5;z5
zKRDT4`;vIIY#Mb}czbuZxT;0SanjtvLe|NNCys^IKlIhB;TlI{Wfc{;np#N(<K5Kd
z;~uTNWna0brlytAd~$wk3=0<*Nr|3{x3`FF*bQu^<b0px%1DkPCkKZ)won&Lih_>L
z$QD^*Tx)f>J+GP~5Me)2x--{y8IvKYVq?Q0mL5G`VoXg>Kj633+>?nsgM);o3L~s$
z(E*UU#zwcDAM(n|%6Lc8h0XdK98XM4=%b^fn~w2CAW}c)=iBx-rpP8$llemBBX5lq
z>T<oXu)wt-VGoUKid~UYwTOI+o@i1AF`C=AZ%ZA{U1n2Dd8Pe{&>Yl@`|8)wwveko
z7Z<yZelM?1lrcdlDJkhCyea(r{B~&0Vb|dmrL%ZdRn^X(p8T1QQ&$KHDHs_sudY$!
z7rn8ZnNAb62(!rX=T1YXv|}`ehK9KxKkE60Qw=B*Rz*iM!J=zxg_#wivh>TIz2oVz
zlbm4UPtFEEXlQ5*8c2)SF<HUI5&s~Mc5(6M+a!I<Rledkx>79PTadF4dUQVpDt-v6
zojKNMW}4Ct2%IeD%hFX_C?JPo%OHn`91mUn?JYeJaomgh8~!IJ4+uoOoUUzdVs4f8
ziiP`W@<+s+lNlS|b#QdlEJD`0i|WY|j;ZPtRwlfAr)6aHM%iQh>!JY}r6#`;yk6GT
zb^LrOP{!5u)<o$`;|A`cdzb8p?Dh}>Hs(d=Xz9zw`<tg7!8Z-b!S$M-Fxn<2h3DwH
zx&%baDfZvZ)TVV=@<q+Ywmw!?jJJ7g9%{bzpd=8~>gx9s6&E)i!_RX6yG7bCx$|H)
zlfSMhiHnm{K2J>1);9SHw36{b7Mq9%G_mEJr`YrKdt+#ts9O#rSA`U4|5llg|9hOf
z`|F}+F*gmFD2K(MJUlPAW@d|;{vJrS<Se8ormKu{B9YjJft8KzspfXCO=EVpBE6(<
zH6ye_T~9RilT_1oFmq;r(4;vIlb#Q`14Aq3)yRAg$EjKgc;JN~**WY+byREjd3OFM
zLHFz*{BOqoj}1-mo1I-<@SwxOj--%~%!Ro*>m9KSY*}4h-5ZyL!c!O?cC-+W*Sn?=
zYS0j5tqzcv*k43u17MV?_b^x!?m=+#;J;^Yc*#gxTSiBRMp{}LFe{F}k!FB{n>&hG
zG1{OZO6+mJS&F#J4?<9`@_E|xb93g=rq?f-e+>GVn>+mJDSL=>scGY_Y9q2B6p9RX
zx*Ojn)IFY*m{@K*%65Z6tTRV3#(SfB;=Q;R&tQrmzhYlIe>->5VRrTdI#5lY9ro98
zfM)fI4YU?P$DZ!)>=Bzoz)s;PR9;=(`#hDTlpK?J+84iQ-RIjw)1(6Ef|~sf_ySM7
zXOQOs@gyorO6Kd|%Bv8wj6pz@_-((kR2e<wMIXLEO)V`gRoG#nJf;nDKn7@~{6*Hr
zOJqy*+;&&A#_R-*YaB*uhkAR>e{@EyPgaxY>+83-w{QRc%`7UKyf#tx6OaEAe1)XW
zeU%ED_~t4(<8TWSxr9lNl=)Cl@j8s031~>i&d(koP1!0*JOj!6SHTc-eF4wS&F{hC
zaFb@=#M{rj{{lirO+nF`A?YXLJO=@sHonEn#TDuDv%B1Wf@gYqIy@#uF;Dw#Qc@To
z3MT(;0tPYn0#8+-2G_{R*#!k}l9Q9ScXaqHCh7;BpVLBVuA7*eUb}w%#mV8$F&gX6
zZE-4)*k?UlP{5%Obw^rBiI@)6%{||QJeR7kuXkVnrqxocmMX-NsI2|;Dawh7mNp_J
z<Z^j=xtzQ_t;9W2dXZQ_knsr#xn?z9ThD-`lM?NHE4LU(5sW-M^!E4ne=m$+G%9%q
z$drPCVX!ZrUDS8irdkm6f18}#2PFCs2(Hcd2EoYNyi1wL#)IwojtedZy@|*f2YxN~
zzh#LaxJ(qAk)f`v{06=8K{jlAZ?9``5ET_gD&+93HCsMX38WJEfJCRaP-P{hx#oiz
z**xu$GBemMZi7~k^xbMZ0lL7G9mRJ%reEee!j6uB`bRMq37rara>J~kQ0S$C-PXmG
zl>#&U^nn4@xVSiCa`GM=j@HY|>!WINwiyC}7|N0k0XKqVf#L#6MM+QZ@Hz7>v*M49
zjS|H9_PneWCJi3XrUrDd6WA0`2Kt7w>gqRoq8TjCPL6;Qjn=tXd{j$Su(D#awY5F=
zL^SW+0yaYKlg_WDRD|o+jO5wbA4H0Pt;|q{q^S4yJqU0PhuhDCgM%TTtE;;(nCNcQ
z-O<m_WiJ9N<Y<KY$>)FQ>>m(dJ6-n}s8rs|{&)1S!09X$fD|YN^M&5GX(BG|E9G`m
z8c%zFZFMDGt$cBZgoFeYs2rP`8rj?|3DS$@b@TEPw&8!#NemX-UTjz?;<iLuQ&Y3M
z^88SECOtiU@7(Fz=ljZeaSA9pTJF(Rcir*W#KbES*UaT{IGneSkFMBjpozm<ZY#qd
zxXsXM08kgYd!2-2^?PG28V0g!^|Kqbu)I8q4)6n`<h3vqDtA40_VQw9XTKWM*(v9_
zF&U~?v<Rdha@>zp>nU`Eson1n5)&02$(ARHi;v&g*&)c7mR)skphFTv9vW56fmDJK
z*JO>PVi!UFW%Je3Mch{?E+XC=d;c3Q8NmTSqRBy1fVE3YOT$;iOg!^Ly(YWsiXY>Q
zW)N36KReyKPee>g%JS$D1w8I>r-$hRI8stGS%WZL`jFycZr}ZN__Jq>7jBS`j|v8Z
zt#54Ln*D0esLV#o2Szk3EPW!v*pqVW>O=rW>irIQ?g}|%0gIx*6e}Siu`*rHZx(pO
z3Opw>fG&u(uAMLlH2P@iE{_>{;Pdki)zX9CL$KwX7^zFGU0tC7?G>(z%6xo$!>jHr
z?Ch1^J1^cuM%q`yLS@?K+Csq1g<DR3MV|e-;k-F53aoYSz(8(p?kiwL8DW8{z(wR4
zePLx`ah`9#!YJW=VR(Q|+{I%_($&LQ;36U-!&%aofvFBw&MU<Jy@rfQT6YkOVxwy1
z^MIDXQ;22}7I?q0m1Dp)S_THa)Aep6tL}t^gk!$f=i*pZE{OJyuoFGV!aWX-@P!4-
zkeGJgJ$zS#$JzxvJ32b(O@%%KA6tW%RhN?^^zrejvY&_s!|5K2l(NabCcQ5t^sdHn
zicaFu@$oT0TsvUQ-oe4H(b0GfsUt!^zdv>dH>s#(R8^zSIHjOaWn|=I54;Yb5(Q~#
zf|;3_-PO^s{v_TByus3nwHl3fXiv!&`cE`4>{%l=1FjI!iz>dj0CuM>J}gHoN8zzG
zhW_|q3(<xr^mYvfLABUj86oO_=|gS@MJa@olsqILAh3M-l9GYJkwOL@2ciI|4|sQr
zHsvc88TCO{*4F%<>))UgWQ-E;V_;`@kVxcsv0+D{ZjsGc0VSXsp~C`OP<tX`VpNor
z&&R`<+fFi)Gci%L{C9*L?sU8+<M;hDzp&5=VpwR31mJc{VwYg82zYaw(EBweYbZNB
zoER8e5{aXGGaVfv<rY1B=B+`#MfZWS0IrBlNO+~55270aIPsC|La!Z+KatvnDBugg
zRH#DEd>B)p`M1x{iw(-#9m)t$N5I5`itYhH-CLXZ-9Zl9o;^QH0wSuOE~d*X_+DAh
zdKd`QHdf!v<<|oI0<crHyug+Vcy}3K5@<y}4q%RIE5pBVCMwIw${Mx=N(wtoXPGv7
zR^t`bEVQ4N#Icn7?%4s3dM_2wfQ|+*ro44aZ_S02ge1rBV3UQF)n#K+aA`1Azl^EB
z51IuslAo0ol*pz3waLc~DB;oR!7NuZdl-AA&0JsS(%6{J17>DhY~f8r)6VNaA`Bi|
zw6nj@#>yI+8F(B4tif1aseelh6U++u0#Kz1j#D+|03_KtIeh~I#V%7REAC=oFBT*7
zVQw+WtW*~kg@UV9&oueOudh20k<sZ`n07~#J8#cP13gd%r181@(`;m^!zJHk41;=x
zL?0$yd=KFX#XJHOMJocPp^(V${AG4^qN>#26LT<&)cCzLNB|g^?qb`Sm-ifjFx#lX
zULdp4Ym2BA5VZ#Eltx2i$Y?L;<KxGA_Ml?7EuCZ>bv#a7KYaM$zByg5_vf)Nj!-~c
z{4RJIRom$n?R%vEW$|S_t+llkDH#b0O6x*LK@2Yf44|S=>-2rsIy>c9YxMn{qH2j@
zpwYm+joH%oW2;U_*;0cV>g%=i^t!=bDGGg8_$5)a_9p>bPfSa?ybcD3O9q>i-(Y|3
zJl9GP91?=s|9fslEbzMedKVxSc0<3aX%(|3XXy&aD}3H~xww1)`(yuooHf{5Kh@Fc
zL<jsS^q&*}<8oHI;rSw0GU*u@X!)&3#XZ-va&tRvV0LuW7S+IJNS$oU-k=w01#-9R
zcy_$T3usD7RaL;(Uo>`*mc|@Vy2DIUGAMRNDSstkF_Rx#DCBuMIXQV`{2haafd_>)
zU`_=(&>M^rKzEf;r;mi#x~-@@*2YoQ_7fErJvXcd-naeiiP_oSHlJ(#3t;(jp0@4o
z;k$j40V}G7vId-LMSUlUj4pnI$}H7TDOgjh`O4VfpxU$$@p(#JC&_=FSp4I{^){aR
zA8mai31-#xjZb*{whcIzhq^J_^dzLD#R50WwVzy(R_~N7_@{@})n5D8h4)T6&I$08
W?Od<Aqi4Z$9|&AtU9MEdJosO`&kywg

diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.map b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.map
deleted file mode 100644
index 42abcf76..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.base_classes.RaceCar" name="f110_gym.envs.base_classes.RaceCar">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,163,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="53,5,115,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.md5
deleted file mode 100644
index 3a360bb2..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-e036bd71c7bbe37faf37a4e9a1d76183
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.png b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_race_car__inherit__graph.png
deleted file mode 100644
index 5f832796d7b2c8d4a5c23dd3abe1e8b3d8e8c479..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4645
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
W?Od<Aqi4Z$9|&AtU9MEdJosO`&kywg

diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator-members.html b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator-members.html
deleted file mode 100644
index 9a8c8ed3..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator-members.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>base_classes</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">Simulator</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.envs.base_classes.Simulator Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab865873c6f0afa3741add4f39e5fd872">__init__</a>(self, params, num_agents, time_step=0.01, ego_idx=0)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>agent_poses</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>agents</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a7f32c68e14bf47447ce9599c8db21236">check_collision</a>(self)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>collision_idx</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>collisions</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ego_idx</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>num_agents</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>params</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab63c655ff0cd1bb2accce7be9fff69e8">reset</a>(self, poses)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a0a566351f20a16b7545fcd20ca9adb57">set_map</a>(self, map_path, map_ext)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#af1fb175457362d7419301180b1b3b4c6">step</a>(self, control_inputs)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>time_step</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a974c58957a6b14582149d704ef28a68c">update_params</a>(self, params, agent_idx=-1)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">f110_gym.envs.base_classes.Simulator</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html
deleted file mode 100644
index a5bf17d1..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html
+++ /dev/null
@@ -1,394 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.envs.base_classes.Simulator Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>base_classes</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html">Simulator</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.envs.base_classes.Simulator Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.envs.base_classes.Simulator:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.png" border="0" usemap="#f110__gym_8envs_8base__classes_8_simulator_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8envs_8base__classes_8_simulator_inherit__map" id="f110__gym_8envs_8base__classes_8_simulator_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,163,121"/>
-<area shape="rect" title=" " alt="" coords="53,5,115,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.envs.base_classes.Simulator:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.png" border="0" usemap="#f110__gym_8envs_8base__classes_8_simulator_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8envs_8base__classes_8_simulator_coll__map" id="f110__gym_8envs_8base__classes_8_simulator_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,163,121"/>
-<area shape="rect" title=" " alt="" coords="53,5,115,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:ab865873c6f0afa3741add4f39e5fd872"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab865873c6f0afa3741add4f39e5fd872">__init__</a> (self, params, num_agents, time_step=0.01, ego_idx=0)</td></tr>
-<tr class="separator:ab865873c6f0afa3741add4f39e5fd872"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0a566351f20a16b7545fcd20ca9adb57"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a0a566351f20a16b7545fcd20ca9adb57">set_map</a> (self, map_path, map_ext)</td></tr>
-<tr class="separator:a0a566351f20a16b7545fcd20ca9adb57"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a974c58957a6b14582149d704ef28a68c"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a974c58957a6b14582149d704ef28a68c">update_params</a> (self, params, agent_idx=-1)</td></tr>
-<tr class="separator:a974c58957a6b14582149d704ef28a68c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7f32c68e14bf47447ce9599c8db21236"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a7f32c68e14bf47447ce9599c8db21236">check_collision</a> (self)</td></tr>
-<tr class="separator:a7f32c68e14bf47447ce9599c8db21236"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af1fb175457362d7419301180b1b3b4c6"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#af1fb175457362d7419301180b1b3b4c6">step</a> (self, control_inputs)</td></tr>
-<tr class="separator:af1fb175457362d7419301180b1b3b4c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab63c655ff0cd1bb2accce7be9fff69e8"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab63c655ff0cd1bb2accce7be9fff69e8">reset</a> (self, poses)</td></tr>
-<tr class="separator:ab63c655ff0cd1bb2accce7be9fff69e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:ad99c964e6df64e8264ab729be118aa8c"><td class="memItemLeft" align="right" valign="top"><a id="ad99c964e6df64e8264ab729be118aa8c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_agents</b></td></tr>
-<tr class="separator:ad99c964e6df64e8264ab729be118aa8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aab539724143dd42fca12ec1d6043c984"><td class="memItemLeft" align="right" valign="top"><a id="aab539724143dd42fca12ec1d6043c984"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>time_step</b></td></tr>
-<tr class="separator:aab539724143dd42fca12ec1d6043c984"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a08fd902fa242da70c1bcf34a1fe80802"><td class="memItemLeft" align="right" valign="top"><a id="a08fd902fa242da70c1bcf34a1fe80802"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>ego_idx</b></td></tr>
-<tr class="separator:a08fd902fa242da70c1bcf34a1fe80802"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a877c852c32ff108df0ff6bfa2ab3bf6f"><td class="memItemLeft" align="right" valign="top"><a id="a877c852c32ff108df0ff6bfa2ab3bf6f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>params</b></td></tr>
-<tr class="separator:a877c852c32ff108df0ff6bfa2ab3bf6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ade120757dde31d2130e4b0f9b01e3a7d"><td class="memItemLeft" align="right" valign="top"><a id="ade120757dde31d2130e4b0f9b01e3a7d"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>agent_poses</b></td></tr>
-<tr class="separator:ade120757dde31d2130e4b0f9b01e3a7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae665b35ec7d9ced7de789a02cafdd566"><td class="memItemLeft" align="right" valign="top"><a id="ae665b35ec7d9ced7de789a02cafdd566"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>agents</b></td></tr>
-<tr class="separator:ae665b35ec7d9ced7de789a02cafdd566"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2266104910535f06f31c1212e62fde8b"><td class="memItemLeft" align="right" valign="top"><a id="a2266104910535f06f31c1212e62fde8b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>collisions</b></td></tr>
-<tr class="separator:a2266104910535f06f31c1212e62fde8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5d716c6ccd3b649f407560f28bdcd84d"><td class="memItemLeft" align="right" valign="top"><a id="a5d716c6ccd3b649f407560f28bdcd84d"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>collision_idx</b></td></tr>
-<tr class="separator:a5d716c6ccd3b649f407560f28bdcd84d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment">Simulator class, handles the interaction and update of all vehicles in the environment
-
-Data Members:
-    num_agents (int): number of agents in the environment
-    time_step (float): physics time step
-    agent_poses (np.ndarray(num_agents, 3)): all poses of all agents
-    agents (list[RaceCar]): container for RaceCar objects
-    collisions (np.ndarray(num_agents, )): array of collision indicator for each agent
-    collision_idx (np.ndarray(num_agents, )): which agent is each agent in collision with</pre> </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="ab865873c6f0afa3741add4f39e5fd872"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab865873c6f0afa3741add4f39e5fd872">&#9670;&nbsp;</a></span>__init__()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.Simulator.__init__ </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>params</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>num_agents</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>time_step</em> = <code>0.01</code>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>ego_idx</em> = <code>0</code>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Init function
-
-Args:
-    params (dict): vehicle parameter dictionary, includes {'mu', 'C_Sf', 'C_Sr', 'lf', 'lr', 'h', 'm', 'I', 's_min', 's_max', 'sv_min', 'sv_max', 'v_switch', 'a_max', 'v_min', 'v_max', 'length', 'width'}
-    num_agents (int): number of agents in the environment
-    time_step (float, default=0.01): physics time step
-    ego_idx (int, default=0): ego vehicle's index in list of agents
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="a7f32c68e14bf47447ce9599c8db21236"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7f32c68e14bf47447ce9599c8db21236">&#9670;&nbsp;</a></span>check_collision()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.Simulator.check_collision </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Checks for collision between agents using GJK and agents' body vertices
-
-Args:
-    None
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="ab63c655ff0cd1bb2accce7be9fff69e8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab63c655ff0cd1bb2accce7be9fff69e8">&#9670;&nbsp;</a></span>reset()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.Simulator.reset </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>poses</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Resets the simulation environment by given poses
-
-Arges:
-    poses (np.ndarray (num_agents, 3)): poses to reset agents to
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="a0a566351f20a16b7545fcd20ca9adb57"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0a566351f20a16b7545fcd20ca9adb57">&#9670;&nbsp;</a></span>set_map()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.Simulator.set_map </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_path</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_ext</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Sets the map of the environment and sets the map for scan simulator of each agent
-
-Args:
-    map_path (str): path to the map yaml file
-    map_ext (str): extension for the map image file
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="af1fb175457362d7419301180b1b3b4c6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af1fb175457362d7419301180b1b3b4c6">&#9670;&nbsp;</a></span>step()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.Simulator.step </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>control_inputs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Steps the simulation environment
-
-Args:
-    control_inputs (np.ndarray (num_agents, 2)): control inputs of all agents, first column is desired steering angle, second column is desired velocity
-
-Returns:
-    observations (dict): dictionary for observations: poses of agents, current laser scan of each agent, collision indicators, etc.
-</pre> 
-</div>
-</div>
-<a id="a974c58957a6b14582149d704ef28a68c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a974c58957a6b14582149d704ef28a68c">&#9670;&nbsp;</a></span>update_params()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.base_classes.Simulator.update_params </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>params</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>agent_idx</em> = <code>-1</code>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Updates the params of agents, if an index of an agent is given, update only that agent's params
-
-Args:
-    params (dict): dictionary of params, see details in docstring of __init__
-    agent_idx (int, default=-1): index for agent that needs param update, if negative, update all agents
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.png b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.png
deleted file mode 100644
index 9cd937e064be421550048a1ee3761b185b0b433e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 678
zcmeAS@N?(olHy`uVBq!ia0vp^uYfp!gBeIFNK57eDTx4|5ZC|z{{xvX-h3_XKQsZz
z0^<V*4zPCKkq2@)N`m}?8GwpF;OeOmBL)U0Q%@JikP61Pb1zn{RuEuI&;PXlzx4bg
z3-p>+<}S93-8Mg1xTTc+L{az5n-U3=Oqf<`d0zAg_3S#fb=A|@v)cM6A1be!6e8&L
zwQh~C*HbfdoBXGnRpy>>UFBNvY1aC)zLWf(CS83RW_>KI_7Cr(U%OPiFYP{gf0fGK
zsnbP&+|=?+FM7MP>ZzfYrzp_m<sT(4pI@^|CDwnHSCC0i=%hu3;iksYObxGhGWHy_
zShfAO!MevQ?)kbG%6gb;8#vemi7H5~<Pzu&VeN2R#pI$K%D8CaDh8kf8#0z?IhdeI
z&*=d9fkAl!RK=QA-?_g2h>G&gW&5Gq-YoOhBJ^_J_pK{`U$`l{{pYv2CX8hj+h0wR
zaX70Oy8QX#or33!SDNU}zx$y2w#^gE{MXv6B)`O)G0yTkYcYMYf3oN5lKB6YN6*f?
z8#=dbo#FC7f7>GD*5}WaFTXYWM(OUx{jVxEZ}Cr7cQSo`Kk%*Eo$3(Xo&B4)Y~NUJ
zRr+Y>u1hofO`Gl~*@wK<xm~<pXYVcE@Um-0CsRFEzp}m>`&ue<!_GTwb^TeA7uIB5
zUYr?!IQM$S<~g%f-|Fu>`0UpG1NH%PyZ!yIE`M2M`FQ)T#kX`t*+XY*-R!uMx;bp_
z_k`HS=bY7%jj_wO6@@=v<(<6N@AC0gO!*;<`yL(bWcx7x^U_x#qNlp@{GuA-4Ue-~
z%zwOkSDsOW{fX^n1_$n|LIbu!W?NdC@(2E{Y7>$^S!_HBOjHb>u6{1-oD!M<8d5x$

diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.map b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.map
deleted file mode 100644
index 5aaf7616..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.base_classes.Simulator" name="f110_gym.envs.base_classes.Simulator">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,163,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="53,5,115,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.md5
deleted file mode 100644
index 0ae4a7c7..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-156a552da8b556cdd4df04ddc9078974
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.png b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__coll__graph.png
deleted file mode 100644
index d6efe611065c8ff61228c669a560372673ca6c18..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4834
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
V50CGw6u4;xfvV}LmMdGm`Y#xGamoMy

diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.map b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.map
deleted file mode 100644
index 5aaf7616..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.base_classes.Simulator" name="f110_gym.envs.base_classes.Simulator">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,163,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="53,5,115,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.md5
deleted file mode 100644
index 0ae4a7c7..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-156a552da8b556cdd4df04ddc9078974
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.png b/docs/html/classf110__gym_1_1envs_1_1base__classes_1_1_simulator__inherit__graph.png
deleted file mode 100644
index d6efe611065c8ff61228c669a560372673ca6c18..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4834
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
V50CGw6u4;xfvV}LmMdGm`Y#xGamoMy

diff --git a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests-members.html b/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests-members.html
deleted file mode 100644
index 4b4d3d20..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests-members.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>collision_models</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">CollisionTests</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.envs.collision_models.CollisionTests Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>length</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>setUp</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_fps</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_get_vert</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_get_vert_fps</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_multiple_collisions</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_random_collision</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>vertices1</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>width</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">f110_gym.envs.collision_models.CollisionTests</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html b/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html
deleted file mode 100644
index ac95e878..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.envs.collision_models.CollisionTests Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>collision_models</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html">CollisionTests</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.envs.collision_models.CollisionTests Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.envs.collision_models.CollisionTests:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.png" border="0" usemap="#f110__gym_8envs_8collision__models_8_collision_tests_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8envs_8collision__models_8_collision_tests_inherit__map" id="f110__gym_8envs_8collision__models_8_collision_tests_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,185,121"/>
-<area shape="rect" title=" " alt="" coords="55,5,135,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.envs.collision_models.CollisionTests:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.png" border="0" usemap="#f110__gym_8envs_8collision__models_8_collision_tests_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8envs_8collision__models_8_collision_tests_coll__map" id="f110__gym_8envs_8collision__models_8_collision_tests_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,185,121"/>
-<area shape="rect" title=" " alt="" coords="55,5,135,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a4aa54131afe81f4a6790930e7d5a639e"><td class="memItemLeft" align="right" valign="top"><a id="a4aa54131afe81f4a6790930e7d5a639e"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr>
-<tr class="separator:a4aa54131afe81f4a6790930e7d5a639e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3137d9576fd99c1f56980a6cc61dc58f"><td class="memItemLeft" align="right" valign="top"><a id="a3137d9576fd99c1f56980a6cc61dc58f"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_get_vert</b> (self)</td></tr>
-<tr class="separator:a3137d9576fd99c1f56980a6cc61dc58f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a588513dfce9c9c7843f2aef501e993f1"><td class="memItemLeft" align="right" valign="top"><a id="a588513dfce9c9c7843f2aef501e993f1"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_get_vert_fps</b> (self)</td></tr>
-<tr class="separator:a588513dfce9c9c7843f2aef501e993f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a484c3bfdab68d8ff8d298191a0cfdd4b"><td class="memItemLeft" align="right" valign="top"><a id="a484c3bfdab68d8ff8d298191a0cfdd4b"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_random_collision</b> (self)</td></tr>
-<tr class="separator:a484c3bfdab68d8ff8d298191a0cfdd4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af59482dbded9f1f915e666553316855d"><td class="memItemLeft" align="right" valign="top"><a id="af59482dbded9f1f915e666553316855d"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_multiple_collisions</b> (self)</td></tr>
-<tr class="separator:af59482dbded9f1f915e666553316855d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a95425d03ea60792f2e523f3838ee9928"><td class="memItemLeft" align="right" valign="top"><a id="a95425d03ea60792f2e523f3838ee9928"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_fps</b> (self)</td></tr>
-<tr class="separator:a95425d03ea60792f2e523f3838ee9928"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a8ec590c2d0ff249236b6167903b177e4"><td class="memItemLeft" align="right" valign="top"><a id="a8ec590c2d0ff249236b6167903b177e4"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>vertices1</b></td></tr>
-<tr class="separator:a8ec590c2d0ff249236b6167903b177e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9cbff98529b08cc1cd52b56ba407e55e"><td class="memItemLeft" align="right" valign="top"><a id="a9cbff98529b08cc1cd52b56ba407e55e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>length</b></td></tr>
-<tr class="separator:a9cbff98529b08cc1cd52b56ba407e55e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a00391f07693559253e82dbbe849da73e"><td class="memItemLeft" align="right" valign="top"><a id="a00391f07693559253e82dbbe849da73e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>width</b></td></tr>
-<tr class="separator:a00391f07693559253e82dbbe849da73e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.png b/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.png
deleted file mode 100644
index 4e19bddf15eaaa3027fdb9b86e7dd34394cbaa8d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 876
zcmeAS@N?(olHy`uVBq!ia0y~yU=#+j12~vLB4-l+04a$8pAgso|NjG-FW!7D?LRaD
z$O7X72M(}y-jN4#IZA^3f*F8{K;Y`B5F-W#rr(|}jv*C{Z|B}Fd#%93>aKtH|NrC1
zzw+kxOy05D^R`TC=B*<VEyoq&Iy*F!7O^UNy8fCX>{)cGQ^oSB%cMC)N}lJq=lXO`
zn{XxR=U%ZIPt9lZkDs3OB_wXQpWoak`q#EpOk8sPV~F}|=c8XXJ<q?L6cJzhYnHfA
zUe;u9-ksA`YR&Zvg@VMnww|zFn!V{-9fM~T+xkfLpo%TeZHtX=WL|rIcg~v9;=6&h
zu4jF>l}8;e=6>(Lc5?FBx2s-OyzhCvMWt5xeA%XJLajO?S%r(|y$Qd+Y+jAj$LEoK
z3u@YOF7-Y4yR9C5_|*^p`PP%ZuxqMMdV=PDKg)?K%jbAZGPVSI@e})l@(+vw47#T{
z8$Nyv3}WamVoLDw^5UAXcn-stDS`~k=P+12WjUa!&fsUsSO8QN?8h*ti0Q!;VKSwj
zi-YV11}$U2lh7bPh8~1rXHSOY+1IZNzb?%Apn7Ioj8Zz&4*%WTUz^Ss?N7ULPHaKz
z-#c^9xJ`@RUN63!r(nKKYy<Zk%bV%HGuo0rU-0}iVROpg&ud>F{agLYCieC&ou<8&
z`?KYj-JQAXdF4&%sI*=Dm)`lA$(?!7|EKcvr}Qm;d6tpZxt`BIeiphtyEba2Wjz0h
ziSGIN2jZKSzCZq6h_xh9^3!A1Cp%uHd`UU17Qe53chPg_{rfcL@Y>z*;7@-sM@GHo
z=E*`u9n;mhb83C>6>VDo#@jDw)!}=U7KgW~Pyco>ZO^lmw+2yr=1!jc?6LNqU4Cto
z_fC1ZMx#FQeNOAEvV$4*de<gb`<;8$`IKAY*xJ3t3+Lsu-aIEe+cEyyTizwie-9R?
zzj$(P=jQxoZArf8=c;~usb+s5cXt+Zh5I|Jncf$_O`5kp#hd*@u+2WdTfdkq()HfT
pHvDfu1S&A{X3lYO5&8L<|KXiwr}Xc*^8vF4gQu&X%Q~loCIB?xo7?~Z

diff --git a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.map b/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.map
deleted file mode 100644
index dd9d4a71..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.collision_models.CollisionTests" name="f110_gym.envs.collision_models.CollisionTests">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,185,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="55,5,135,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.md5
deleted file mode 100644
index c5426f31..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-06743ebd17771742fa42539c711fb878
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.png b/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__coll__graph.png
deleted file mode 100644
index d47b13a4077ff6a62e8969f32893d24ac12b3d3e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4618
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
Y5)55Jt<3ER{@j6Rsy<e!P_laQU(X%);s5{u

diff --git a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.map b/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.map
deleted file mode 100644
index dd9d4a71..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.collision_models.CollisionTests" name="f110_gym.envs.collision_models.CollisionTests">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,185,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="55,5,135,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.md5
deleted file mode 100644
index c5426f31..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-06743ebd17771742fa42539c711fb878
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.png b/docs/html/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests__inherit__graph.png
deleted file mode 100644
index d47b13a4077ff6a62e8969f32893d24ac12b3d3e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4618
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
Y5)55Jt<3ER{@j6Rsy<e!P_laQU(X%);s5{u

diff --git a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test-members.html b/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test-members.html
deleted file mode 100644
index 80fd8c02..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test-members.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>dynamic_models</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">DynamicsTest</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.envs.dynamic_models.DynamicsTest Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>a_max</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>C_Sf</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>C_Sr</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>h</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>I</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>lf</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lr</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>m</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mu</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>s_max</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>s_min</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>setUp</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sv_max</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>sv_min</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_derivatives</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_zeroinit_acc</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_zeroinit_dec</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_zeroinit_roll</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_zeroinit_rollleft</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>v_max</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>v_min</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>v_switch</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html b/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html
deleted file mode 100644
index 8b664664..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.envs.dynamic_models.DynamicsTest Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>dynamic_models</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html">DynamicsTest</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.envs.dynamic_models.DynamicsTest Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.envs.dynamic_models.DynamicsTest:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.png" border="0" usemap="#f110__gym_8envs_8dynamic__models_8_dynamics_test_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8envs_8dynamic__models_8_dynamics_test_inherit__map" id="f110__gym_8envs_8dynamic__models_8_dynamics_test_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,188,121"/>
-<area shape="rect" title=" " alt="" coords="57,5,137,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.envs.dynamic_models.DynamicsTest:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.png" border="0" usemap="#f110__gym_8envs_8dynamic__models_8_dynamics_test_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8envs_8dynamic__models_8_dynamics_test_coll__map" id="f110__gym_8envs_8dynamic__models_8_dynamics_test_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,188,121"/>
-<area shape="rect" title=" " alt="" coords="57,5,137,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a5ef057974425be84e5672fec6367237b"><td class="memItemLeft" align="right" valign="top"><a id="a5ef057974425be84e5672fec6367237b"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr>
-<tr class="separator:a5ef057974425be84e5672fec6367237b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8d72833c7e5cf3717a4326ee6809c527"><td class="memItemLeft" align="right" valign="top"><a id="a8d72833c7e5cf3717a4326ee6809c527"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_derivatives</b> (self)</td></tr>
-<tr class="separator:a8d72833c7e5cf3717a4326ee6809c527"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a00e95bc713471556c1d5f62c70d50f78"><td class="memItemLeft" align="right" valign="top"><a id="a00e95bc713471556c1d5f62c70d50f78"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_zeroinit_roll</b> (self)</td></tr>
-<tr class="separator:a00e95bc713471556c1d5f62c70d50f78"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aee6c565405df1ec196e88d5ca42238cd"><td class="memItemLeft" align="right" valign="top"><a id="aee6c565405df1ec196e88d5ca42238cd"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_zeroinit_dec</b> (self)</td></tr>
-<tr class="separator:aee6c565405df1ec196e88d5ca42238cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abfdac96452f8e54e0233b68626cf33bf"><td class="memItemLeft" align="right" valign="top"><a id="abfdac96452f8e54e0233b68626cf33bf"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_zeroinit_acc</b> (self)</td></tr>
-<tr class="separator:abfdac96452f8e54e0233b68626cf33bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3e47a38cf845b941eea719550bcc1994"><td class="memItemLeft" align="right" valign="top"><a id="a3e47a38cf845b941eea719550bcc1994"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_zeroinit_rollleft</b> (self)</td></tr>
-<tr class="separator:a3e47a38cf845b941eea719550bcc1994"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:ac283c8565d5702a36fe2aef5ac801ec6"><td class="memItemLeft" align="right" valign="top"><a id="ac283c8565d5702a36fe2aef5ac801ec6"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>mu</b></td></tr>
-<tr class="separator:ac283c8565d5702a36fe2aef5ac801ec6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ace0f724e5d6de2b84ad6f26aa1f825de"><td class="memItemLeft" align="right" valign="top"><a id="ace0f724e5d6de2b84ad6f26aa1f825de"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>C_Sf</b></td></tr>
-<tr class="separator:ace0f724e5d6de2b84ad6f26aa1f825de"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5ef6d0ca5f09db415133dd4fefe04a61"><td class="memItemLeft" align="right" valign="top"><a id="a5ef6d0ca5f09db415133dd4fefe04a61"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>C_Sr</b></td></tr>
-<tr class="separator:a5ef6d0ca5f09db415133dd4fefe04a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a46f6b69e0406f1cb669efe188354e88b"><td class="memItemLeft" align="right" valign="top"><a id="a46f6b69e0406f1cb669efe188354e88b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>lf</b></td></tr>
-<tr class="separator:a46f6b69e0406f1cb669efe188354e88b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8c72ad994a42ae128b4b3902b8963ce7"><td class="memItemLeft" align="right" valign="top"><a id="a8c72ad994a42ae128b4b3902b8963ce7"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>lr</b></td></tr>
-<tr class="separator:a8c72ad994a42ae128b4b3902b8963ce7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3d565e1337d599401b34e4c6473d07e4"><td class="memItemLeft" align="right" valign="top"><a id="a3d565e1337d599401b34e4c6473d07e4"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>h</b></td></tr>
-<tr class="separator:a3d565e1337d599401b34e4c6473d07e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af07025dc1443d5b524c54cabcda24092"><td class="memItemLeft" align="right" valign="top"><a id="af07025dc1443d5b524c54cabcda24092"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>m</b></td></tr>
-<tr class="separator:af07025dc1443d5b524c54cabcda24092"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a80b2b5e9fd9772596b8c0441ac3501a2"><td class="memItemLeft" align="right" valign="top"><a id="a80b2b5e9fd9772596b8c0441ac3501a2"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>I</b></td></tr>
-<tr class="separator:a80b2b5e9fd9772596b8c0441ac3501a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a703d1a956eba2dc93e5db243995105e6"><td class="memItemLeft" align="right" valign="top"><a id="a703d1a956eba2dc93e5db243995105e6"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>s_min</b></td></tr>
-<tr class="separator:a703d1a956eba2dc93e5db243995105e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8269ff10bd35d86f1a02190ab39fb897"><td class="memItemLeft" align="right" valign="top"><a id="a8269ff10bd35d86f1a02190ab39fb897"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>s_max</b></td></tr>
-<tr class="separator:a8269ff10bd35d86f1a02190ab39fb897"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a17ce4b00ab832e2cccf565796aa77d56"><td class="memItemLeft" align="right" valign="top"><a id="a17ce4b00ab832e2cccf565796aa77d56"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>sv_min</b></td></tr>
-<tr class="separator:a17ce4b00ab832e2cccf565796aa77d56"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abce143f8803056ea016677f51bc7179a"><td class="memItemLeft" align="right" valign="top"><a id="abce143f8803056ea016677f51bc7179a"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>sv_max</b></td></tr>
-<tr class="separator:abce143f8803056ea016677f51bc7179a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aee44ef320e9d70ffa4d0966cec9962ef"><td class="memItemLeft" align="right" valign="top"><a id="aee44ef320e9d70ffa4d0966cec9962ef"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>v_min</b></td></tr>
-<tr class="separator:aee44ef320e9d70ffa4d0966cec9962ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa6c8d413765dd13de77f1dcd1038d759"><td class="memItemLeft" align="right" valign="top"><a id="aa6c8d413765dd13de77f1dcd1038d759"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>v_max</b></td></tr>
-<tr class="separator:aa6c8d413765dd13de77f1dcd1038d759"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aeb89635ca78746bfba5025b7e9890be4"><td class="memItemLeft" align="right" valign="top"><a id="aeb89635ca78746bfba5025b7e9890be4"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>v_switch</b></td></tr>
-<tr class="separator:aeb89635ca78746bfba5025b7e9890be4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af37b667196efbbced8b042c53c159641"><td class="memItemLeft" align="right" valign="top"><a id="af37b667196efbbced8b042c53c159641"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>a_max</b></td></tr>
-<tr class="separator:af37b667196efbbced8b042c53c159641"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.png b/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.png
deleted file mode 100644
index 53b76fa218ff93f22f83aebb45d03ffe07aefc6e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 890
zcmeAS@N?(olHy`uVBq!ia0y~yU=#(i12~w0B*P`a-9S<zz$e7@|Ns9$=8HF9OZyK^
z0J6aNz<~p-op<DcT#k|;zhDNSA`rNGD#VC^ftl0O#WAFU@$KA;Ws41XSl#va{{Mg6
zyZPWJR;d$eH@B^p^PiQFGt+Ted}oJ-l9IX8BrearQ$;<CPIakRrn*j=vq{PGob_6t
ziO<wlZvR=n`tPKm-GA@IO<QvP)3X@MEtB^1#BP@KtWsXT^^%<SGV!|K+f-bt|Gv!j
zn|0@E_;jmJ8lF{F?>7ofGHtCo{rl*ywz&BYlj07|E^_VK_*LC*)27Y$+YI-g_gcLm
zH@-6WZ0upaSF-wg2mkAYZ@YT^)vJGex7Od7^u;GGZ|PN$*0yB<`SDk#eto6CN_)QF
zG4)yfi)-fT+}f5Na9`Kkee<8g=M_AEbxuKbykF!*mE~(ZCIyG7oSeDF#YIGLqSOKN
zhs+BYinO&EjvaT;WR%bZGE|msVc?k}+MxTC<p7ZH7s*&~imM?wjA70urUz3*8J4eM
zut;SkQ|hN*n37Ug$BAABjfQ)u#zxQNdjI@<+19y!4Cf!bb6KwRb#~kB=fTVmyx&ZF
zx`nYSdcJ*UhPm$lb9!PA_|DIKe&W<(!EMQByo@G3UQ+m3@t)qg`<EZQyk(RUR%2qc
z^1N+w-ZzfdyS>bL8E*;4a9nKb>;G4I`<7weENAWQhPEGci~Kfkt&WX)CFlNZ_q57O
zr*@yZ_{^Z2RbuTO?v20Bt(H%>$xk(2A9?f7??t=q+s{wCcj(}jy5DBu?^+}#<wU%H
z9JcMGLHOEzwMEn3^~4le9=OG+t$FPppOv`M`vps%^({YZs-1gaUe)HJg1-vS*F8D)
zE=#{nqC9}_r$?;irb)u(KP6tDTB-V5==}Am-wL&k+`lsQqff-@?5bxQH}!{2D^5s%
zVx=Z}aIWzQJ^49~wc)WGg(YlX`?%Tnrpg=;m6PWz=u&Upk^S_W(zNei*fhOu8cy4s
z{{1uN<x1{?x$`G$ikAx<sCPt(JReZle|*o++^|Aq`bCWlU`Ao^boFyt=akR{0Erlx
AMgRZ+

diff --git a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.map b/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.map
deleted file mode 100644
index 97a30a31..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.dynamic_models.DynamicsTest" name="f110_gym.envs.dynamic_models.DynamicsTest">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,188,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="57,5,137,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.md5
deleted file mode 100644
index f90f78a1..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-ff579a2173cc5523110d429dfe27ac9c
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.png b/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__coll__graph.png
deleted file mode 100644
index 1df6686add43a07c0473b2041f28a49cc896dddc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4885
zcmc&&XHZjZw?$AX(%}{9A_fEm1nE^n?@I4YAas-fp*Jz0NSEHEqZk1xB7|N9q!{TP
zgwR{)o%`_4-22@h_y3(ta%RrS^PGM5UVE*z&)a93N@OGqBzSmuWGc$?+Thp>zClDc
z!LNR3VJbM>v{qA+$Gg1xe5@}@z{8{NR*`?I>z%PN<@aoG|KcZZ$=&D)C4Z+LPCq`4
zgJBT@|NZGcaqG)MwzL)N7v|gXT=vo0zQ2{z(YlKTzjT*X$dmJoQvOM~nd6}J;btQG
z4DUG|4N*v<t!$&L)cUJ8X15Iuw@-a~*59um9xTouwg<}21n?J!QR1s;Kaw<|yQ@;o
zA$ON6i!>zPTkv}PU-8k};OeC0WY`+Dgmh3)(B#yVi<x5jk0lFYAqFyI)bOyahcQDG
zGA)h4BpFk<d2E0mEE8}ti^bZm2}%_7^r)L8|6aU0t>XCZzc=loRDQ?#?_HXMh6V>e
zYJXCfVPY~4WaoYGAfjLP65YJ36vKi|g=OU!l$v|2{CN}3;u{ebcKvfni3u)Kxfde0
zZPC})N5n=N6A?jV*O%dNWLz|0wC}yLvZ9_L7Wee^&A7xw1qTPNI<JjfG&&>T^uTD}
zP@ASrnvb1b&a~dQYHUJ5UOpoAF^r+%;&iLAJ@m#c`I&|Qh3~FY^7i({HQu;ftK&kA
zbotARbA@C+v$il|nl{}0&o`7%sl!P){v)Z5_w?+0zV*v9jg2XfVbNm@P&v69cXhcF
zug(}&*hT$b+t*+ji1+0k`h#0jw;@umk-R=oq(!GCz5hWh=mPzKpP$YRjYHlMch4^_
zDWQS&Wl%*&NB`}NW6!OvHMW7lA|Yx?cd7%9=EB=y*#UM(68!vHc=seFCvuHFBr?Tb
z{SB+Ryf{^`w$7!53i+tR_eH{~p&ug<?@daIiz5aHb>Brs;&yilW~UG{1t6shSnS;5
zBGMSuF*U^ugTXqYnSYIzztGs!%ERFOu0yy*M!UJW^@9LXWrJk=4mYvKOW8j$7|en|
z`e($^_8f{n+AlhT#&EXf&8?=5gzCUtXE!%31%(@Q{N^@I!PnNO>(dL=lBsEF+jvUR
zEnNwm8k_wC12n;Z|5{i4)KFEm9xQ%d^W#U3_9w%dmuw0O3V3!gW4iV60`&N|_SQxy
zBqb$P)zqRm`k_QEEiHINw{EdZOK0XO#R&TB*l=iODC_C{gXiVd(JE!rNqKU()o)-C
zV7rq7U;+^ojMppCf3B?^YF@f@emEnV_Ay<e5VEg&$u4IZ(hzVe=rS&3?z;l%%aT?D
z+x(1XesQw5VqaxU&LY*B?$)64^y#&#s;a@Eq3331QRbzDO(P@8lar>c#9y>Ojn;bd
zWc%+B|4QPWpZo#W)zgbhPX77sAD+<)Sd7)F>r`!ye#!Cvh=tGP`5~Ebs-&IHzAB=8
z$|FC((8=2L`E$0Uher2qk~2LpH8X2Z5qKeQY@9|3B|_=*P*YR4fq3~%O-<V(sMzHl
z9Y0%5uq#DJG`}XiMMy{}VApe}byr+m{NBTd>U-;BIyE&l5p%8Kk)R`<>*+zlD6P*=
z_FE<<Op1pb1-#Y`%k44uS`Rds2TbdGbHd)1t48>pe%G+EvlH}Kem15$1y#Kx>mz>u
zKVANxhWxkfMZD%hJBA?-vhFb~b8~Y$n}w>VC7mS%ow1WrP#Bmb=Ni5vdKxfbq@<%?
z2;p41XAzj%m7qml<|+Qpvp@W<nAqqrB&G7jPqsbZ=Aa9mj`6DIYCfg%g^VU-d_s_1
zL1+T!EiUd_t2K98HDr?_pZP=V;3w-aO0Y04$*W};!j(iC5|v+=)iiB>qxkpA>S)DM
z3QA4;Aw52$isl7b=H|f?Sy*srXvxA-@@NgWZ9H392pVnOmn|9?)P%ug1znyZ81?d<
z1+R<5rupJ4Df#6sIXbN=t4ef8U*Mw2RgfPuiP@A@#5G-9%wF3j^C#m@w=Q9?KY!2w
zSD2-JLwF3j8O;`#m+x*-j|G!Hl~hxc3^8_@S^hR|%zSw=BG4LU<j5*`eM7luAR);s
z)Z{yZImr+YPYIi3-ACq<cpIW|OuuY)4tny8wHfYF$qvDKOX}SZA$?j`8*ppzY$|(v
zT;gD>A3Myuc5&OetJ1F_<SRQdIZMwnrei8sK)^5J9mCHEstd(_1Kq*jCCMg!NkxW-
zXIspx%V%fiOY<=nHsh5~u1c}vuB<IZkFSEWA-dn5z!poZg?#e=bRxdZtl{Fssd+>8
z3xsuJdl|#7TRhYtQYyz4L;u)rGNAibLQus+KEA%edtIxc&St^)?n5BLC+IH9>x6{g
z^?2iLXi`&Cqh$D(fb#qgCiS2n2UZNfyE5w(X=1U-7S$bm1tNPR7C{0If9`kx`sHG#
z8g7}`Xn*;OzwzZ_4}E-m{7X;Ist!KLn{-J8UrtU=7!p~1T>gbRG&B?+NlI@`8?2Eo
z5|@;8GdMGoS@z;64<n+%JF>R#JkyZ5x98#L=y*rkS16K>zYuWd@B^dOS(%gNJTJ*4
zJ-%?)Y4qE?ygUs279HPxcJ|j*P9q|<8alsdXlS}RJ7?<;r`ZJr;>O2~^-IlNqTC@}
z$|V-WN&FUlrHvOPO@M{G=ibnzh{NqlZcWr7_~YW@CJ{3Mcs;3)!;{T@-?p?s&(6<#
zT}_OQyOCs!VxFtCSy@@?=^|0QCe^V?NgX+I;mT@i^8;G4!e1<Ob=xBO8#=$5)omXf
zEDjl1*aCW8SXzQ_PKu-J>)%F2fyUASNd`30zR;Cmg!UHTPW+5v075$U1J0=w%`~^z
zn@-9qlc5lKdv0Tctf{25q5B9oFCK6r1oS8e)}Qszv?liB$Gh4(I>!eSZe!&y!mWZJ
z5Qw~jLb=ljpTEDqvWf~D7uQ=xQCCVz%BHj9U3ww=XL(hoje(hDj3Tk=>5)Z6oO5$?
ziu2B0-YK8|xj>K?>vDtmQYAdO`O({<R?fzPSqKYqJv}{K7iV@XkZxOBNON;@Pr4`t
zkg1BLP>AulYMJYlL`!QcG0+5d_Ezp|#l^)RD=R+$mSoIY8!2Vg)YLo!dZpod3F4ez
zT~)QVzPC1vnxAccjkML0!d(X{f!$jfKrS6@Oej5j7CU$ShM51+BcN~j`T36kHv)==
zT3NAW2cB?ERJ*YA@I=amlc#>MnyU4rrK78OHLrNEJ|+ijg3%9m2$ZN*f{>iaa`=nU
z)pFZz+Q0MjRM73C`55@h9|#Ev3F%s4Q4!6ZI}tH46hP{nr)m@b;n6QcY?<5jXHCtz
z?`W17lq#b16H-z-$E%!Fw6xp~K!U0+{CWYD!dU|?_g9CQ#9ju2fVzs2!_hE*f2pOu
z%=t{jwAJC}l+<<;!5MHb93yVg<UWympp<xI9AmDou1MQL5HS2?&*An%!zbXcxcz-w
z5GWGM$HymiypXUyRYw;LQ2J+Jz~^M8DC%H$y`rC*lG4(!v9>nNXLk`(<zxWVv9<Vl
zo)}`&G*8%Gh=H6{rsq$A8rTbHJYP?ibUKiAKGPaYLpNZCNLi%raB^~H`7F|RcX!tW
zo=ce3d0{b1tk}A(27)I<%^?JYDWKwb2L}gYVq(7w)aV8sg+YRCK~kfJ-H&%{-QjSb
z^Zk*P>3Ye)z(8IG3Z1IyuD-r#;OB54z8%ovhAvX2W_61C`nSu=%dZ@RsHkXG;E6*=
z6ywP9Nw00<+w!WR>@!66c4A_p#&iHTFK>H$`x~Io^jW+6`@+VYQc@X46?Rn2%o>`S
z<RBKZo0Y)nAcIPV95XU9-kbXlISL!2sxb_zs;a>goPASYO@FjBg%B_@wRUw8H<k4l
zW%<54I`UrZNtJVT<pZ~oIv9O{+=5}d6aCL{KR+ZV!)F2xsi>%|YCO;hih0drV`IyP
z;DJyKF?CM8Jv}xfU(IN5-v%8;&{SsCs_r^7i9@?%NxZzg$X2V9$m#JB2!!wcszP9(
z49L%oS&(%5s&U23ysg0!1AfrFT>Si^*K;oNzl@Yx$O1}(`ua+QQ?PQ}zYmynjqD8o
z9CzZo%1R;N*G(#8FnLOO`XwNfi`#Rp>RD1_FL$oJXO+zYewID#U!XOI-T)xJgCdw+
zSy9o@AhWf#Mbco>=3mWskOADZPPjGp0w}zE^@>eg{6{nPnbXnH(Z`XsAO6RJ^?rxd
z<AH0Qoxj+E9R><<zy$3sWe4p5iZ1tD(^q_d2eXi0gV>suI+}g$JdIBM_DvAvcC;bD
z@AW=t=&^b~Q6C>4{U3Dof#<%{-t%O5Xf)b;52NI>l!<u2%?&LXiqFpO?@r|TghEx>
z2Z2Z9(kYD1$mjvXf^!Wm{?W$wnNh%Jpwi185_`VVz{NvLM?{O;`}<?8T9M@-ED?GN
zlzt>7zJY-O6EpMie2lERms2$;7TtVD)I2cASdisOv`>Ot!!dGw-MM7Fu@_nvbQ#E@
zk=6#>;al@k*q?kA#Vu`-Dk*O6ceAsWxB1O`cKc;xUcY|bzA;szkIMb_Exx$;K@zWt
z-Eu_zuE-`B8p<jv*dIMA(+I46Xwi@X1b~``M$X$?EM3$Mlq<g(Wdnyop<+He_Zu1-
z6h(>g2?$=n;p`$JNo8e^fR;r>Mz*%M7hulY+S`FI)zH<Y{guoQ>;Aw+HtewC4a%@R
z?o?WC*UM0-nc1zx8qn7EmWFqFTAN4zizTq+ZEbCo^z>b06)<`*XXqWEs1eg&@j%P9
z!uzF_6cv$r<iDvF78WR3S>003nm33o<>jwO-sZL5S?Ch^^7X~D7H{<au!*;?uZVZS
zYAif-xVy8nX?i*fXu?$$t6kDDL0>3C0oXwMj4u@F!}9iU%N}es0MS6+qWIDUZAq?d
z^ISNq9muuwXxTMD>MVZi0(ldmY;0^`9-yM3c`-!%3RZBna;7{cMk^uNadUH1UP+0D
zimEx;BGAF3j@Gpi2mgNHJi2Pnz(@gEDMN(k9|!<)I@p?VTN8BtJWx;VAuk{xz$EEK
zT610)6CO@TA#-&1v0cw>2q8<^E6>HMYLnezlu6XI%jXfp@UjAPzYXC+t!zzYWo5Nr
z6%nK%iSqLDl+4Ugnnii}`C;d$hmYN+rT+f?OS-i;9XaS&g~2+Qnlb@~eP~uYh}08~
z(SZJr|Jni&Eps$W5X~w}-ozdw1@-U{0_1n22cZfbFv~<ZX(lgbGBGi2A0EO$=5=*-
z%Y1h2IMh?F41q+zcRRI?{7<h$tNMpZ4B!XrMqnZU5m|P|vbh}46QuVNr%mV`4V$<<
zH!|w#%ak0ec3}iFH{hUFcX(#JrI7)we$mSzZKsV!>zT2!s+E;h(bll@N=gbN0)A>*
z<@nFFYuDO3I^yHvFomq&%8iK92J{TIwXfzgqe^=!78Vw7A0L6B3x9WacR<{}37PRp
zUY^4s>_Ty1Kbkg%xBI41WAOqGj*}?iK9p^R_)~Z-2_Rx*eZ91dj0_UH@3!G2#87FB
z8q-u!tCLt0E>as{ic%!7tWlUqtrIp8<j{yZ1;zp;*oPY8;^;6pHwS~(tBrAC(Cfhy
z*^I#xvMyCu%e#_1JdMW-9QuH;<M#IQwX$WNEP=<_OfeMPTs&}qjmXe(XZ{Vqx3I8a
z@m*#Uah>ekUmN-1wZULg?QGSPBH-=qEi}e8Hu<%0(ZgX{qiEo{p<!pW%fu1TN-)?q
zV3Zz7I(@g(d137swAfMqDFD<YVRxxt$G`wKw6*J+`8N^Ib;kE}yOknU9L@pg1`y~K
z5c05$BF=ZYxw~H?9>~hhl=&a;VEu9JbfCvx0;0T0dglqKZJt?XNJt1REiEM@qZ)Vz
z5pc36Fi}7Z_)6W~T@Xz8AihV=qmN|Hwp(v*(Ws|93IXP>^0UeAR^uhd-MhhWX*lD-
zD;J#1!*c6(60h~qr|RmYLqkJ=+aCkC10bbIb65sWrZX&cb}A2-T4<@Nl7JGsh=}XU
z(>W;RhPn1eck9wQ6xA@*8a${ssmS|wf{lfkWvLeIU0qteq)GDd;ZFQhCoIYRe@}v4
zb#e(D8jk%E_dl5l4fl-9GSBDc-uw3L+c@fhilf%W#RZuJf-&q#{0GH8;{P>x5H{6j
g_r&IFE?!<!m$i3YU9yCO_gr`?3Yzj?p_ZZl1r`#m5dZ)H

diff --git a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.map b/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.map
deleted file mode 100644
index 97a30a31..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.dynamic_models.DynamicsTest" name="f110_gym.envs.dynamic_models.DynamicsTest">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,188,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="57,5,137,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.md5
deleted file mode 100644
index f90f78a1..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-ff579a2173cc5523110d429dfe27ac9c
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.png b/docs/html/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test__inherit__graph.png
deleted file mode 100644
index 1df6686add43a07c0473b2041f28a49cc896dddc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4885
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

diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env-members.html b/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env-members.html
deleted file mode 100644
index 021acabb..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env-members.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>f110_env</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">F110Env</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.envs.f110_env.F110Env Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ae193b905b3d1c213ec4324283ebdf201">__del__</a>(self)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>__init__</b>(self, **kwargs) (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>collisions</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>current_obs</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>current_time</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>ego_idx</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lap_counts</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>lap_times</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>map_ext</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_name</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>map_path</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>metadata</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>near_start</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>near_starts</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>num_agents</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>num_toggles</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>params</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>poses_theta</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>poses_x</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>poses_y</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab8e76450e63ef88c1ac9721f717fa375">render</a>(self, mode='human')</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>renderer</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab213d62cea216bbd82d0f6d7061452fb">reset</a>(self, poses)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>sim</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>start_rot</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>start_thetas</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>start_thresh</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>start_xs</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>start_ys</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a0df471828ba39c5228bf5c814a5d0e6e">step</a>(self, action)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>timestep</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>toggle_list</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#afc210c3941c1548692c75c961ad443df">update_map</a>(self, map_path, map_ext)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a79d419bbf2ff0e377d808e4a8f41cc81">update_params</a>(self, params, index=-1)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">f110_gym.envs.f110_env.F110Env</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html b/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html
deleted file mode 100644
index c9280230..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html
+++ /dev/null
@@ -1,470 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.envs.f110_env.F110Env Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>f110_env</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html">F110Env</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.envs.f110_env.F110Env Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.envs.f110_env.F110Env:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.png" border="0" usemap="#f110__gym_8envs_8f110__env_8_f110_env_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8envs_8f110__env_8_f110_env_inherit__map" id="f110__gym_8envs_8f110__env_8_f110_env_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,160,121"/>
-<area shape="rect" title=" " alt="" coords="17,5,63,32"/>
-<area shape="rect" title=" " alt="" coords="87,5,163,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.envs.f110_env.F110Env:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.png" border="0" usemap="#f110__gym_8envs_8f110__env_8_f110_env_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8envs_8f110__env_8_f110_env_coll__map" id="f110__gym_8envs_8f110__env_8_f110_env_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,160,121"/>
-<area shape="rect" title=" " alt="" coords="17,5,63,32"/>
-<area shape="rect" title=" " alt="" coords="87,5,163,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a6fbba07db5d7d79bdd27f3487192e6e2"><td class="memItemLeft" align="right" valign="top"><a id="a6fbba07db5d7d79bdd27f3487192e6e2"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__init__</b> (self, **kwargs)</td></tr>
-<tr class="separator:a6fbba07db5d7d79bdd27f3487192e6e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae193b905b3d1c213ec4324283ebdf201"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ae193b905b3d1c213ec4324283ebdf201">__del__</a> (self)</td></tr>
-<tr class="separator:ae193b905b3d1c213ec4324283ebdf201"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0df471828ba39c5228bf5c814a5d0e6e"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a0df471828ba39c5228bf5c814a5d0e6e">step</a> (self, action)</td></tr>
-<tr class="separator:a0df471828ba39c5228bf5c814a5d0e6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab213d62cea216bbd82d0f6d7061452fb"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab213d62cea216bbd82d0f6d7061452fb">reset</a> (self, poses)</td></tr>
-<tr class="separator:ab213d62cea216bbd82d0f6d7061452fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afc210c3941c1548692c75c961ad443df"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#afc210c3941c1548692c75c961ad443df">update_map</a> (self, map_path, map_ext)</td></tr>
-<tr class="separator:afc210c3941c1548692c75c961ad443df"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a79d419bbf2ff0e377d808e4a8f41cc81"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a79d419bbf2ff0e377d808e4a8f41cc81">update_params</a> (self, params, index=-1)</td></tr>
-<tr class="separator:a79d419bbf2ff0e377d808e4a8f41cc81"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab8e76450e63ef88c1ac9721f717fa375"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab8e76450e63ef88c1ac9721f717fa375">render</a> (self, mode='human')</td></tr>
-<tr class="separator:ab8e76450e63ef88c1ac9721f717fa375"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a6fbb8c9dad98bbad696936dec9633939"><td class="memItemLeft" align="right" valign="top"><a id="a6fbb8c9dad98bbad696936dec9633939"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_name</b></td></tr>
-<tr class="separator:a6fbb8c9dad98bbad696936dec9633939"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a584bf97317bbe8d38d8e0136753ded60"><td class="memItemLeft" align="right" valign="top"><a id="a584bf97317bbe8d38d8e0136753ded60"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_path</b></td></tr>
-<tr class="separator:a584bf97317bbe8d38d8e0136753ded60"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a147cde741845fcded400365a9d495ce3"><td class="memItemLeft" align="right" valign="top"><a id="a147cde741845fcded400365a9d495ce3"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_ext</b></td></tr>
-<tr class="separator:a147cde741845fcded400365a9d495ce3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab1c1a4b9cb08b685c597b1d40402a479"><td class="memItemLeft" align="right" valign="top"><a id="ab1c1a4b9cb08b685c597b1d40402a479"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>params</b></td></tr>
-<tr class="separator:ab1c1a4b9cb08b685c597b1d40402a479"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4eefdcfd9a5f09eedfad9b27bf6ce45e"><td class="memItemLeft" align="right" valign="top"><a id="a4eefdcfd9a5f09eedfad9b27bf6ce45e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_agents</b></td></tr>
-<tr class="separator:a4eefdcfd9a5f09eedfad9b27bf6ce45e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abdc8699b0f8fb2412efef070affa8ccb"><td class="memItemLeft" align="right" valign="top"><a id="abdc8699b0f8fb2412efef070affa8ccb"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>timestep</b></td></tr>
-<tr class="separator:abdc8699b0f8fb2412efef070affa8ccb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aebce8c6c42f258d8c561da27dde0c01b"><td class="memItemLeft" align="right" valign="top"><a id="aebce8c6c42f258d8c561da27dde0c01b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>ego_idx</b></td></tr>
-<tr class="separator:aebce8c6c42f258d8c561da27dde0c01b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2496c3576ebb86df560fb09004583527"><td class="memItemLeft" align="right" valign="top"><a id="a2496c3576ebb86df560fb09004583527"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_thresh</b></td></tr>
-<tr class="separator:a2496c3576ebb86df560fb09004583527"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae83c6ed936fe9e1a542be6b2eb76395c"><td class="memItemLeft" align="right" valign="top"><a id="ae83c6ed936fe9e1a542be6b2eb76395c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>poses_x</b></td></tr>
-<tr class="separator:ae83c6ed936fe9e1a542be6b2eb76395c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a03432e028beff28596178dc9236fc4e8"><td class="memItemLeft" align="right" valign="top"><a id="a03432e028beff28596178dc9236fc4e8"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>poses_y</b></td></tr>
-<tr class="separator:a03432e028beff28596178dc9236fc4e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3ffb6fa7e705c18d5316444488cb649b"><td class="memItemLeft" align="right" valign="top"><a id="a3ffb6fa7e705c18d5316444488cb649b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>poses_theta</b></td></tr>
-<tr class="separator:a3ffb6fa7e705c18d5316444488cb649b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ada1a8cc0681447645b811448f516885a"><td class="memItemLeft" align="right" valign="top"><a id="ada1a8cc0681447645b811448f516885a"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>collisions</b></td></tr>
-<tr class="separator:ada1a8cc0681447645b811448f516885a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afc0a35ce8ff234279acffc66092d72a1"><td class="memItemLeft" align="right" valign="top"><a id="afc0a35ce8ff234279acffc66092d72a1"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>near_start</b></td></tr>
-<tr class="separator:afc0a35ce8ff234279acffc66092d72a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6c19f5c3146fa6be496639ab4ed0d63f"><td class="memItemLeft" align="right" valign="top"><a id="a6c19f5c3146fa6be496639ab4ed0d63f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_toggles</b></td></tr>
-<tr class="separator:a6c19f5c3146fa6be496639ab4ed0d63f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a83f64f867c24f12d9ad3e14745e23aa1"><td class="memItemLeft" align="right" valign="top"><a id="a83f64f867c24f12d9ad3e14745e23aa1"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>lap_times</b></td></tr>
-<tr class="separator:a83f64f867c24f12d9ad3e14745e23aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0b2cc3bd151748987c6e23f34f16d1a2"><td class="memItemLeft" align="right" valign="top"><a id="a0b2cc3bd151748987c6e23f34f16d1a2"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>lap_counts</b></td></tr>
-<tr class="separator:a0b2cc3bd151748987c6e23f34f16d1a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6539fde56adcb5755acfe1c86251f193"><td class="memItemLeft" align="right" valign="top"><a id="a6539fde56adcb5755acfe1c86251f193"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>current_time</b></td></tr>
-<tr class="separator:a6539fde56adcb5755acfe1c86251f193"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a24602450e500c08f3190672922de25de"><td class="memItemLeft" align="right" valign="top"><a id="a24602450e500c08f3190672922de25de"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>near_starts</b></td></tr>
-<tr class="separator:a24602450e500c08f3190672922de25de"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a45f4f52ca91b4efa14118d3718213eb6"><td class="memItemLeft" align="right" valign="top"><a id="a45f4f52ca91b4efa14118d3718213eb6"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>toggle_list</b></td></tr>
-<tr class="separator:a45f4f52ca91b4efa14118d3718213eb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae867a64de7fea1f98cb6db6e9ff9d4ed"><td class="memItemLeft" align="right" valign="top"><a id="ae867a64de7fea1f98cb6db6e9ff9d4ed"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_xs</b></td></tr>
-<tr class="separator:ae867a64de7fea1f98cb6db6e9ff9d4ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a814ae4233f0c96728a9a5f47f5add06e"><td class="memItemLeft" align="right" valign="top"><a id="a814ae4233f0c96728a9a5f47f5add06e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_ys</b></td></tr>
-<tr class="separator:a814ae4233f0c96728a9a5f47f5add06e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a064dc8d975b3da3e0ac29f73b626b6aa"><td class="memItemLeft" align="right" valign="top"><a id="a064dc8d975b3da3e0ac29f73b626b6aa"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_thetas</b></td></tr>
-<tr class="separator:a064dc8d975b3da3e0ac29f73b626b6aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a613e153a969b6e3df72893eed2da061f"><td class="memItemLeft" align="right" valign="top"><a id="a613e153a969b6e3df72893eed2da061f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_rot</b></td></tr>
-<tr class="separator:a613e153a969b6e3df72893eed2da061f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa8a35ba4818fe79c1e2c6f9058a31dde"><td class="memItemLeft" align="right" valign="top"><a id="aa8a35ba4818fe79c1e2c6f9058a31dde"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>sim</b></td></tr>
-<tr class="separator:aa8a35ba4818fe79c1e2c6f9058a31dde"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaa2e9426a3f641b295203f9166c33fac"><td class="memItemLeft" align="right" valign="top"><a id="aaa2e9426a3f641b295203f9166c33fac"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>renderer</b></td></tr>
-<tr class="separator:aaa2e9426a3f641b295203f9166c33fac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad293c8b43306e47c4430b16b9f7b8d8c"><td class="memItemLeft" align="right" valign="top"><a id="ad293c8b43306e47c4430b16b9f7b8d8c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>current_obs</b></td></tr>
-<tr class="separator:ad293c8b43306e47c4430b16b9f7b8d8c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:aee31e18855f6a73aa5051d7e4d693aa8"><td class="memItemLeft" align="right" valign="top"><a id="aee31e18855f6a73aa5051d7e4d693aa8"></a>
-dictionary&#160;</td><td class="memItemRight" valign="bottom"><b>metadata</b> = {'render.modes': ['human', 'human_fast']}</td></tr>
-<tr class="separator:aee31e18855f6a73aa5051d7e4d693aa8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment">OpenAI gym environment for F1TENTH
-
-Env should be initialized by calling gym.make('f110_gym:f110-v0', **kwargs)
-
-Args:
-    kwargs:
-        seed (int): seed for random state and reproducibility
-        
-        map (str, default='vegas'): name of the map used for the environment. Currently, available environments include: 'berlin', 'vegas', 'skirk'. You could use a string of the absolute path to the yaml file of your custom map.
-    
-        map_ext (str, default='png'): image extension of the map image file. For example 'png', 'pgm'
-    
-        params (dict, default={'mu': 1.0489, 'C_Sf':, 'C_Sr':, 'lf': 0.15875, 'lr': 0.17145, 'h': 0.074, 'm': 3.74, 'I': 0.04712, 's_min': -0.4189, 's_max': 0.4189, 'sv_min': -3.2, 'sv_max': 3.2, 'v_switch':7.319, 'a_max': 9.51, 'v_min':-5.0, 'v_max': 20.0, 'width': 0.31, 'length': 0.58}): dictionary of vehicle parameters.
-        mu: surface friction coefficient
-        C_Sf: Cornering stiffness coefficient, front
-        C_Sr: Cornering stiffness coefficient, rear
-        lf: Distance from center of gravity to front axle
-        lr: Distance from center of gravity to rear axle
-        h: Height of center of gravity
-        m: Total mass of the vehicle
-        I: Moment of inertial of the entire vehicle about the z axis
-        s_min: Minimum steering angle constraint
-        s_max: Maximum steering angle constraint
-        sv_min: Minimum steering velocity constraint
-        sv_max: Maximum steering velocity constraint
-        v_switch: Switching velocity (velocity at which the acceleration is no longer able to create wheel spin)
-        a_max: Maximum longitudinal acceleration
-        v_min: Minimum longitudinal velocity
-        v_max: Maximum longitudinal velocity
-        width: width of the vehicle in meters
-        length: length of the vehicle in meters
-
-        num_agents (int, default=2): number of agents in the environment
-
-        timestep (float, default=0.01): physics timestep
-
-        ego_idx (int, default=0): ego's index in list of agents
-</pre> </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="ae193b905b3d1c213ec4324283ebdf201"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae193b905b3d1c213ec4324283ebdf201">&#9670;&nbsp;</a></span>__del__()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.f110_env.F110Env.__del__ </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Finalizer, does cleanup
-</pre> 
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="ab8e76450e63ef88c1ac9721f717fa375"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab8e76450e63ef88c1ac9721f717fa375">&#9670;&nbsp;</a></span>render()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.f110_env.F110Env.render </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>mode</em> = <code>'human'</code>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Renders the environment with pyglet. Use mouse scroll in the window to zoom in/out, use mouse click drag to pan. Shows the agents, the map, current fps (bottom left corner), and the race information near as text.
-
-Args:
-    mode (str, default='human'): rendering mode, currently supports:
-'human': slowed down rendering such that the env is rendered in a way that sim time elapsed is close to real time elapsed
-'human_fast': render as fast as possible
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="ab213d62cea216bbd82d0f6d7061452fb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab213d62cea216bbd82d0f6d7061452fb">&#9670;&nbsp;</a></span>reset()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.f110_env.F110Env.reset </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>poses</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Reset the gym environment by given poses
-
-Args:
-    poses (np.ndarray (num_agents, 3)): poses to reset agents to
-
-Returns:
-    obs (dict): observation of the current step
-    reward (float, default=self.timestep): step reward, currently is physics timestep
-    done (bool): if the simulation is done
-    info (dict): auxillary information dictionary
-</pre> 
-</div>
-</div>
-<a id="a0df471828ba39c5228bf5c814a5d0e6e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0df471828ba39c5228bf5c814a5d0e6e">&#9670;&nbsp;</a></span>step()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.f110_env.F110Env.step </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>action</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Step function for the gym env
-
-Args:
-    action (np.ndarray(num_agents, 2))
-
-Returns:
-    obs (dict): observation of the current step
-    reward (float, default=self.timestep): step reward, currently is physics timestep
-    done (bool): if the simulation is done
-    info (dict): auxillary information dictionary
-</pre> 
-</div>
-</div>
-<a id="afc210c3941c1548692c75c961ad443df"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afc210c3941c1548692c75c961ad443df">&#9670;&nbsp;</a></span>update_map()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.f110_env.F110Env.update_map </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_path</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_ext</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Updates the map used by simulation
-
-Args:
-    map_path (str): absolute path to the map yaml file
-    map_ext (str): extension of the map image file
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="a79d419bbf2ff0e377d808e4a8f41cc81"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a79d419bbf2ff0e377d808e4a8f41cc81">&#9670;&nbsp;</a></span>update_params()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.f110_env.F110Env.update_params </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>params</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>index</em> = <code>-1</code>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Updates the parameters used by simulation for vehicles
-
-Args:
-    params (dict): dictionary of parameters
-    index (int, default=-1): if &gt;= 0 then only update a specific agent's params
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.png b/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.png
deleted file mode 100644
index 3c22d12a33e8b19a0cc4ab2944d9d4b682f219b5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 942
zcmeAS@N?(olHy`uVBq!ia0y~yU|a`e2XHV0$+9Dfr9es|z$e7@|Ns9$=8HF9OZyK^
z0J6aNz<~p-op<DcT#k|;zhDNSA`rNGD#VC^f!Ws6#WAFU@$KA;)0!1{Sk?9K{r~?s
zSCn;CUbObSwq?gPOIfd_DC|i}yC$w9Z@hWm0hN{NUa^y|2ru-WbVp#9%1K^0<NB*j
zAC*0MGnc$JyI%6P)%gAsz02!^;~zx<mCq{MC8xY%x%_*xdG)*3-InrxU69jdI`ej_
ztl5w6>aS<r`?Rn4*^01-J-4&2nU+Q#(toG=(pc)nuKkG%vqL8T^X$`SSMpqb$!)sN
z)vp`!vtpkH*_vK3+qEiO@3HsSzi%{Dp1x*^UA<ZR?Sdr#v#T#nT=y$HlxMn>vgh+l
zQP+1#TswYk+PcWqDz#45v7wqTynsUQUTU50P^tCVz4^6htZvTM3scYEx?2#o%SUVd
zdfm3~4>oo0(z%vCoj+D{-j}_r3Rl)fbbr<~)4x@ml_(sm8|!gN*zdZkXS~zp&EAvN
zsh4<Odi}&p!E?GWN|3<AX6|bv<JVnI(`QD8GsGNbxS%O}Ol%j!9s{1gzg`(^yTJOO
zHQMDal-W_2oj84Cs~&@S3jxe?*r0^lfuW$sL!m+1Nt_&fVEK%hUs)Ztmx#x{U@CA%
z!iV!;Z2H|_Vr**mkMn_X-?^ICQ?2rN&ha<C`o$Tm$?9s<t->tx?8BK##ay0y^8dMa
znN9oX9F#8`H0{{3GZ9hmE2VwgUZwmu|9tGjs?*0F9DQnkn4xO1p2=>{z3D41n5M0~
zGvoB*Ip?mY$MM(4UI$4&KD%U^kzC2zS<S}!wbL(WdWTo-GUQnheec@Vdv>9ZmO0Jr
ze)xH&dHeo2p6~69UyfDp3W_pYb=Rse|I8ni_X}S?xVd%t>NW14uP-!;wyE^Ke$Ala
z-VNVZd%dRqeWo-$RY%*pbB&NWZ=BHY_h+IHe=j+ES3c`S|4XI{x4B{s`A?RY`mV0f
zY*bfEo+tUhC#n3ZD))nK&RB*#4mA8C1`?0Q<xl%EIz6zO{2Q3L7(8A5T-G@yGywp(
C_Nf#A

diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.map b/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.map
deleted file mode 100644
index 755fa5c8..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.map
+++ /dev/null
@@ -1,5 +0,0 @@
-<map id="f110_gym.envs.f110_env.F110Env" name="f110_gym.envs.f110_env.F110Env">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,160,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="17,5,63,32"/>
-<area shape="rect" id="node3" title=" " alt="" coords="87,5,163,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.md5
deleted file mode 100644
index b3df708a..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-d30ac78a5b547132c6d21ff0f180a868
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.png b/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__coll__graph.png
deleted file mode 100644
index af95f74e5ecfd25a51799934c7df72208ba7ef2e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5514
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
Q%~cF}X=SNWNhAON0&z6wpa1{>

diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.map b/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.map
deleted file mode 100644
index 755fa5c8..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.map
+++ /dev/null
@@ -1,5 +0,0 @@
-<map id="f110_gym.envs.f110_env.F110Env" name="f110_gym.envs.f110_env.F110Env">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,160,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="17,5,63,32"/>
-<area shape="rect" id="node3" title=" " alt="" coords="87,5,163,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.md5
deleted file mode 100644
index b3df708a..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-d30ac78a5b547132c6d21ff0f180a868
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.png b/docs/html/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env__inherit__graph.png
deleted file mode 100644
index af95f74e5ecfd25a51799934c7df72208ba7ef2e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5514
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
Q%~cF}X=SNWNhAON0&z6wpa1{>

diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env-members.html b/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env-members.html
deleted file mode 100644
index 5cc3a889..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env-members.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>f110_env_backup</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">F110Env</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.envs.f110_env_backup.F110Env Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#ab53974d19ae639eaa8d922db303d21c4">__del__</a>(self)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>__init__</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>all_x</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>all_y</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>collision_angle</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>collision_angles</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>context</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>current_time</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>double_finish</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>ego_idx</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>free_thresh</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>in_collision</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#acb0331bb92b190cdd592060385726160">init_map</a>(self, map_path, img_ext, rgb, flip)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>lap_counts</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lap_times</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_height</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>map_img</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_inited</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>map_path</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_resolution</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>map_width</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>metadata</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>near_start</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>near_starts</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>num_agents</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>num_toggles</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>origin</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>params</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>params_set</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>port</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>render</b>(self, mode='human', close=False) (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>reset</b>(self, poses=None) (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sim_p</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>socket</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>start_rot</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>start_theta</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>start_thetas</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>start_thresh</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>start_x</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>start_xs</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>start_y</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>start_ys</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>step</b>(self, action) (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>theta</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>timeout</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>timestep</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toggle_list</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>update_params</b>(self, mu, h_cg, l_r, cs_f, cs_r, I_z, mass, exe_path, double_finish=False) (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>x</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>y</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html b/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html
deleted file mode 100644
index 9c989905..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.envs.f110_env_backup.F110Env Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>f110_env_backup</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html">F110Env</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
-<a href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.envs.f110_env_backup.F110Env Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.envs.f110_env_backup.F110Env:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.png" border="0" usemap="#f110__gym_8envs_8f110__env__backup_8_f110_env_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8envs_8f110__env__backup_8_f110_env_inherit__map" id="f110__gym_8envs_8f110__env__backup_8_f110_env_inherit__map">
-<area shape="rect" title=" " alt="" coords="23,80,190,121"/>
-<area shape="rect" title=" " alt="" coords="5,5,88,32"/>
-<area shape="rect" title=" " alt="" coords="112,5,224,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.envs.f110_env_backup.F110Env:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.png" border="0" usemap="#f110__gym_8envs_8f110__env__backup_8_f110_env_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8envs_8f110__env__backup_8_f110_env_coll__map" id="f110__gym_8envs_8f110__env__backup_8_f110_env_coll__map">
-<area shape="rect" title=" " alt="" coords="23,80,190,121"/>
-<area shape="rect" title=" " alt="" coords="5,5,88,32"/>
-<area shape="rect" title=" " alt="" coords="112,5,224,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a20cf7bc892fe043174eb7c656b49e54d"><td class="memItemLeft" align="right" valign="top"><a id="a20cf7bc892fe043174eb7c656b49e54d"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__init__</b> (self)</td></tr>
-<tr class="separator:a20cf7bc892fe043174eb7c656b49e54d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab53974d19ae639eaa8d922db303d21c4"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#ab53974d19ae639eaa8d922db303d21c4">__del__</a> (self)</td></tr>
-<tr class="separator:ab53974d19ae639eaa8d922db303d21c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5613fa6844441b3e94e6c75d2d6235e7"><td class="memItemLeft" align="right" valign="top"><a id="a5613fa6844441b3e94e6c75d2d6235e7"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>step</b> (self, action)</td></tr>
-<tr class="separator:a5613fa6844441b3e94e6c75d2d6235e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acc334d94e1a842ed26b8820a9730566e"><td class="memItemLeft" align="right" valign="top"><a id="acc334d94e1a842ed26b8820a9730566e"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>reset</b> (self, poses=None)</td></tr>
-<tr class="separator:acc334d94e1a842ed26b8820a9730566e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acb0331bb92b190cdd592060385726160"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#acb0331bb92b190cdd592060385726160">init_map</a> (self, map_path, img_ext, rgb, flip)</td></tr>
-<tr class="separator:acb0331bb92b190cdd592060385726160"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad8af92604458991c85e4714ea1db581d"><td class="memItemLeft" align="right" valign="top"><a id="ad8af92604458991c85e4714ea1db581d"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>render</b> (self, mode='human', close=False)</td></tr>
-<tr class="separator:ad8af92604458991c85e4714ea1db581d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afd60c71c7b15c805310a4ac3510d70d2"><td class="memItemLeft" align="right" valign="top"><a id="afd60c71c7b15c805310a4ac3510d70d2"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>update_params</b> (self, mu, h_cg, l_r, cs_f, cs_r, I_z, mass, exe_path, double_finish=False)</td></tr>
-<tr class="separator:afd60c71c7b15c805310a4ac3510d70d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a2efb58b38020d194c865ac289009ba4a"><td class="memItemLeft" align="right" valign="top"><a id="a2efb58b38020d194c865ac289009ba4a"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>params_set</b></td></tr>
-<tr class="separator:a2efb58b38020d194c865ac289009ba4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a58740f3bf62a7bf263a13b47cdf5d797"><td class="memItemLeft" align="right" valign="top"><a id="a58740f3bf62a7bf263a13b47cdf5d797"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_inited</b></td></tr>
-<tr class="separator:a58740f3bf62a7bf263a13b47cdf5d797"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9e292f161315ed1a0f3c3886bf49ded9"><td class="memItemLeft" align="right" valign="top"><a id="a9e292f161315ed1a0f3c3886bf49ded9"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>params</b></td></tr>
-<tr class="separator:a9e292f161315ed1a0f3c3886bf49ded9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac6a6a423017697870d6f1c6828325336"><td class="memItemLeft" align="right" valign="top"><a id="ac6a6a423017697870d6f1c6828325336"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_agents</b></td></tr>
-<tr class="separator:ac6a6a423017697870d6f1c6828325336"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a89f5296784405aeaa52325a8dac4420e"><td class="memItemLeft" align="right" valign="top"><a id="a89f5296784405aeaa52325a8dac4420e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>timestep</b></td></tr>
-<tr class="separator:a89f5296784405aeaa52325a8dac4420e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad417d87c39e8046ab2a66fd11d5910b8"><td class="memItemLeft" align="right" valign="top"><a id="ad417d87c39e8046ab2a66fd11d5910b8"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_path</b></td></tr>
-<tr class="separator:ad417d87c39e8046ab2a66fd11d5910b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a52b5d0f196c9cd9e34464d3cf4cf1f34"><td class="memItemLeft" align="right" valign="top"><a id="a52b5d0f196c9cd9e34464d3cf4cf1f34"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_img</b></td></tr>
-<tr class="separator:a52b5d0f196c9cd9e34464d3cf4cf1f34"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae4babdba55642fab735d03c5672ed5ad"><td class="memItemLeft" align="right" valign="top"><a id="ae4babdba55642fab735d03c5672ed5ad"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>ego_idx</b></td></tr>
-<tr class="separator:ae4babdba55642fab735d03c5672ed5ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae2047312369a5e949b09e1c5b067412f"><td class="memItemLeft" align="right" valign="top"><a id="ae2047312369a5e949b09e1c5b067412f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>timeout</b></td></tr>
-<tr class="separator:ae2047312369a5e949b09e1c5b067412f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af3d3f69953f78a141b98f3d738a15530"><td class="memItemLeft" align="right" valign="top"><a id="af3d3f69953f78a141b98f3d738a15530"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_thresh</b></td></tr>
-<tr class="separator:af3d3f69953f78a141b98f3d738a15530"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0a9dbd46041d336a1d6b28ea01418d91"><td class="memItemLeft" align="right" valign="top"><a id="a0a9dbd46041d336a1d6b28ea01418d91"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>x</b></td></tr>
-<tr class="separator:a0a9dbd46041d336a1d6b28ea01418d91"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2fd95411b8a24759642863111ed0f513"><td class="memItemLeft" align="right" valign="top"><a id="a2fd95411b8a24759642863111ed0f513"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>y</b></td></tr>
-<tr class="separator:a2fd95411b8a24759642863111ed0f513"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1dc4f5c9ab99353e2c364d42daf5a180"><td class="memItemLeft" align="right" valign="top"><a id="a1dc4f5c9ab99353e2c364d42daf5a180"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>theta</b></td></tr>
-<tr class="separator:a1dc4f5c9ab99353e2c364d42daf5a180"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a68efc45c0a66e4652697146e18c8a570"><td class="memItemLeft" align="right" valign="top"><a id="a68efc45c0a66e4652697146e18c8a570"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>in_collision</b></td></tr>
-<tr class="separator:a68efc45c0a66e4652697146e18c8a570"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a88dd2fd1f2dc0ef251a079d3e74622fe"><td class="memItemLeft" align="right" valign="top"><a id="a88dd2fd1f2dc0ef251a079d3e74622fe"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>collision_angle</b></td></tr>
-<tr class="separator:a88dd2fd1f2dc0ef251a079d3e74622fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1c3ac639a2b0773d99043c2b911970d7"><td class="memItemLeft" align="right" valign="top"><a id="a1c3ac639a2b0773d99043c2b911970d7"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>near_start</b></td></tr>
-<tr class="separator:a1c3ac639a2b0773d99043c2b911970d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac19a932655f1f9a6e8065df37bbe9f80"><td class="memItemLeft" align="right" valign="top"><a id="ac19a932655f1f9a6e8065df37bbe9f80"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_toggles</b></td></tr>
-<tr class="separator:ac19a932655f1f9a6e8065df37bbe9f80"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa7af900e93ae4b180e89e7d48e242033"><td class="memItemLeft" align="right" valign="top"><a id="aa7af900e93ae4b180e89e7d48e242033"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>lap_times</b></td></tr>
-<tr class="separator:aa7af900e93ae4b180e89e7d48e242033"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3eb59d52fbc4d767e2c7ed0c64b8650f"><td class="memItemLeft" align="right" valign="top"><a id="a3eb59d52fbc4d767e2c7ed0c64b8650f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>lap_counts</b></td></tr>
-<tr class="separator:a3eb59d52fbc4d767e2c7ed0c64b8650f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a476dab30a81d8794d89f0bd85b3e7884"><td class="memItemLeft" align="right" valign="top"><a id="a476dab30a81d8794d89f0bd85b3e7884"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_height</b></td></tr>
-<tr class="separator:a476dab30a81d8794d89f0bd85b3e7884"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2f4a85b1b83b203bc5549b6bff0bf2d1"><td class="memItemLeft" align="right" valign="top"><a id="a2f4a85b1b83b203bc5549b6bff0bf2d1"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_width</b></td></tr>
-<tr class="separator:a2f4a85b1b83b203bc5549b6bff0bf2d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1ec9b2bc2142334a2b8a2d028adcace8"><td class="memItemLeft" align="right" valign="top"><a id="a1ec9b2bc2142334a2b8a2d028adcace8"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_resolution</b></td></tr>
-<tr class="separator:a1ec9b2bc2142334a2b8a2d028adcace8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7456387ff1b9e6832dd205ed891bc750"><td class="memItemLeft" align="right" valign="top"><a id="a7456387ff1b9e6832dd205ed891bc750"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>free_thresh</b></td></tr>
-<tr class="separator:a7456387ff1b9e6832dd205ed891bc750"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2e1491609720111b7065748ad37e8512"><td class="memItemLeft" align="right" valign="top"><a id="a2e1491609720111b7065748ad37e8512"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>origin</b></td></tr>
-<tr class="separator:a2e1491609720111b7065748ad37e8512"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0e6a85d0de7165369ce8fcd18be9d885"><td class="memItemLeft" align="right" valign="top"><a id="a0e6a85d0de7165369ce8fcd18be9d885"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>port</b></td></tr>
-<tr class="separator:a0e6a85d0de7165369ce8fcd18be9d885"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3367f6570455c5311e075b4b9f91c56"><td class="memItemLeft" align="right" valign="top"><a id="aa3367f6570455c5311e075b4b9f91c56"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>context</b></td></tr>
-<tr class="separator:aa3367f6570455c5311e075b4b9f91c56"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afc0972d462163211e9b9e47a2844e64f"><td class="memItemLeft" align="right" valign="top"><a id="afc0972d462163211e9b9e47a2844e64f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>socket</b></td></tr>
-<tr class="separator:afc0972d462163211e9b9e47a2844e64f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a23d4e3c74f19290571ce06f57c68de01"><td class="memItemLeft" align="right" valign="top"><a id="a23d4e3c74f19290571ce06f57c68de01"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>sim_p</b></td></tr>
-<tr class="separator:a23d4e3c74f19290571ce06f57c68de01"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aeb9374dba01e21d5fd618d0736573f77"><td class="memItemLeft" align="right" valign="top"><a id="aeb9374dba01e21d5fd618d0736573f77"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>all_x</b></td></tr>
-<tr class="separator:aeb9374dba01e21d5fd618d0736573f77"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aebf4ff49efe573bdbe29b190528256f1"><td class="memItemLeft" align="right" valign="top"><a id="aebf4ff49efe573bdbe29b190528256f1"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>all_y</b></td></tr>
-<tr class="separator:aebf4ff49efe573bdbe29b190528256f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab629b0d75ade059476f2bf4237798101"><td class="memItemLeft" align="right" valign="top"><a id="ab629b0d75ade059476f2bf4237798101"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>current_time</b></td></tr>
-<tr class="separator:ab629b0d75ade059476f2bf4237798101"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a34545b59df83e520f7c3031106c5c954"><td class="memItemLeft" align="right" valign="top"><a id="a34545b59df83e520f7c3031106c5c954"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>collision_angles</b></td></tr>
-<tr class="separator:a34545b59df83e520f7c3031106c5c954"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab224af4cddca309ab854b9c26f40868f"><td class="memItemLeft" align="right" valign="top"><a id="ab224af4cddca309ab854b9c26f40868f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>near_starts</b></td></tr>
-<tr class="separator:ab224af4cddca309ab854b9c26f40868f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad6e649f8338d89746244b9e6c4bce71b"><td class="memItemLeft" align="right" valign="top"><a id="ad6e649f8338d89746244b9e6c4bce71b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>toggle_list</b></td></tr>
-<tr class="separator:ad6e649f8338d89746244b9e6c4bce71b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab5e2d4e41534916caaa9fa2a94979053"><td class="memItemLeft" align="right" valign="top"><a id="ab5e2d4e41534916caaa9fa2a94979053"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_x</b></td></tr>
-<tr class="separator:ab5e2d4e41534916caaa9fa2a94979053"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0959bbc593917d214789b9785a8f8b0c"><td class="memItemLeft" align="right" valign="top"><a id="a0959bbc593917d214789b9785a8f8b0c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_y</b></td></tr>
-<tr class="separator:a0959bbc593917d214789b9785a8f8b0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f808319f37385f5f8f8e9198ad208f6"><td class="memItemLeft" align="right" valign="top"><a id="a6f808319f37385f5f8f8e9198ad208f6"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_theta</b></td></tr>
-<tr class="separator:a6f808319f37385f5f8f8e9198ad208f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a894820aea9c0b9c750f165798ab60ba0"><td class="memItemLeft" align="right" valign="top"><a id="a894820aea9c0b9c750f165798ab60ba0"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_xs</b></td></tr>
-<tr class="separator:a894820aea9c0b9c750f165798ab60ba0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae28edcae46735a4e684140aa05fd099b"><td class="memItemLeft" align="right" valign="top"><a id="ae28edcae46735a4e684140aa05fd099b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_ys</b></td></tr>
-<tr class="separator:ae28edcae46735a4e684140aa05fd099b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a82dcb09e9adb3f73dc1c61a3e406dfe9"><td class="memItemLeft" align="right" valign="top"><a id="a82dcb09e9adb3f73dc1c61a3e406dfe9"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_thetas</b></td></tr>
-<tr class="separator:a82dcb09e9adb3f73dc1c61a3e406dfe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a50b6912954290c4c5fb9165fc0103628"><td class="memItemLeft" align="right" valign="top"><a id="a50b6912954290c4c5fb9165fc0103628"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>start_rot</b></td></tr>
-<tr class="separator:a50b6912954290c4c5fb9165fc0103628"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a59e7a0edc30712fb482c246e01a72368"><td class="memItemLeft" align="right" valign="top"><a id="a59e7a0edc30712fb482c246e01a72368"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>double_finish</b></td></tr>
-<tr class="separator:a59e7a0edc30712fb482c246e01a72368"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
-Static Public Attributes</h2></td></tr>
-<tr class="memitem:a33621c905b3ce566450c77b923ef79ee"><td class="memItemLeft" align="right" valign="top"><a id="a33621c905b3ce566450c77b923ef79ee"></a>
-dictionary&#160;</td><td class="memItemRight" valign="bottom"><b>metadata</b> = {'render.modes': []}</td></tr>
-<tr class="separator:a33621c905b3ce566450c77b923ef79ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment">OpenAI gym environment for F1/10 simulator
-Use 0mq's REQ-REP pattern to communicate to the C++ simulator
-ONE env has ONE corresponding C++ instance
-Need to create env with map input, full path to map yaml file, map pgm image and yaml should be in same directory
-
-should be initialized with a map, a timestep, and number of agents
-</pre> </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="ab53974d19ae639eaa8d922db303d21c4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab53974d19ae639eaa8d922db303d21c4">&#9670;&nbsp;</a></span>__del__()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.f110_env_backup.F110Env.__del__ </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Finalizer, does cleanup
-</pre> 
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="acb0331bb92b190cdd592060385726160"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acb0331bb92b190cdd592060385726160">&#9670;&nbsp;</a></span>init_map()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.f110_env_backup.F110Env.init_map </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_path</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>img_ext</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>rgb</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>flip</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">    init a map for the gym env
-    map_path: full path for the yaml, same as ROS, img and yaml in same dir
-    rgb: map grayscale or rgb
-    flip: if map needs flipping
-</pre> 
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.png b/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.png
deleted file mode 100644
index 77f2b996b1f030732659c49975aed97ffdda3e29..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1062
zcmV+>1ljwEP)<h;3K|Lk000e1NJLTq00IsG002-30{{R3Mt%*Y0000OP)t-s|Ns90
z008Lh^>vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d000BENkl<Z
zcmeI5+m@;@5JY#sSpWaWM<GCNdQivUl5(X69YR8?cXz)M5piy@ej*~yEkcsctQ-eP
zI<t&}aWD?XL6TY-2jgHIjDsY#`VJgo`bg3N8jQnrk9piX{_<m+GJhNLa^Hc2Bps#k
zIMgRDx1D}<?*AGNSLRb*OqVQ2w(FV~17B+p4)dvQnZLNu9Dgbc3l8&?)voNfBz;B$
zak!l*!(j@2+I;h4JGdkb(O4W5Dn^y}B@TJ&3^8Ub4#g33KT^LOb!ti5I1q=dD$Hr0
zDnM2fmMr;U9LjG+vsi1YB#qHgIJC`TEeu7W$Z=S(k)%&(JPt+aJ2eh%v$%&tUN$A^
zV;YM?DuVyTVI&PBaYzlZ>6Jy5sBj1=A3xJ9Zf0z;F55<`f<KKzI)D1x^ni4&aw8?s
znna)N6+>}2BG!`h9}UAnlD=GHo5km=og_Ue<8V~7_(mFx!*R_*lD<vG!8jNPNor&q
zjDvA74wBT$I2eZ#hlq$%E5jio;?x2-Ru=%vUf2Sl81~|Fu?P0T764ST7gq<&gT1f?
z0Hy53%>)3;Uf2Sl81}*z*b7?#(8^xe0()T#09x4#TVOA20YEEzVGHbqEdXd`FSuMT
z7b|@LEP!L>Kmb_A0l)&XVH^M~;{ad**)R?OmT>^EfNU5C0LwT4SU@(61At{504yLI
z#sR=G4geOA4dVb{83zCh$cAwM_!dP(oLd0af&;*rWgP5=4FKrKH~?67!v+A9G7bP%
z<wo4Tq#yGorhfsvr#DvaPP_N)b=9<RXS3}lPz>YHaU)rl1uF|8z{`4P<>zqNuxK~C
zzn^hv-RPuM6}0Pw<mz<E9ZvbTm4TUnGB}S`?mWIsFGIUbDc)qopoe&kL%WS}xKkY-
z1?}c&7KF*wys)gd%Yf}$xqUqAGsT)Ki`8TMacH(N4zJ<R1iQkaxxBb?dvD=!i)e5D
zwRWUR(ZeC#?K}oxy^2Gd{)N#gdFvYfVCC-PB@Ww^M>y<j7WFp9;dLCgO5GIc#^@(j
z?#8KGIr3L94gi0v{Xv_u@(vDpV3t2GwV^URWv8z@)pWPPavu)cY~!#Chg*d%BU1-E
zE9I@xYf0a+a_8~25TwpC?Ox1G|Ef2-v)R;=y3`qm4h{hSQxh$KgZ2LF7>6g^n6s*A
z*8qQ@Wo3X`kM054Fb)8Jr@d}$g&N>%WE=qgPN#RnIM@vv0ML<f0I=+a4FD)*9007v
gjfjX-3*dPD1AKZtu}!E)9RL6T07*qoM6N<$f{^{wVE_OC

diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.map b/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.map
deleted file mode 100644
index a63ccf1c..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.map
+++ /dev/null
@@ -1,5 +0,0 @@
-<map id="f110_gym.envs.f110_env_backup.F110Env" name="f110_gym.envs.f110_env_backup.F110Env">
-<area shape="rect" id="node1" title=" " alt="" coords="23,80,190,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="5,5,88,32"/>
-<area shape="rect" id="node3" title=" " alt="" coords="112,5,224,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.md5
deleted file mode 100644
index 894f7dc2..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-4c7f5ed7430f1bf853e67e2973bb8950
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.png b/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__coll__graph.png
deleted file mode 100644
index d972765d5cd6c0ff1891f14a8fe871122f01288f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7347
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

diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.map b/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.map
deleted file mode 100644
index a63ccf1c..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.map
+++ /dev/null
@@ -1,5 +0,0 @@
-<map id="f110_gym.envs.f110_env_backup.F110Env" name="f110_gym.envs.f110_env_backup.F110Env">
-<area shape="rect" id="node1" title=" " alt="" coords="23,80,190,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="5,5,88,32"/>
-<area shape="rect" id="node3" title=" " alt="" coords="112,5,224,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.md5
deleted file mode 100644
index 894f7dc2..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-4c7f5ed7430f1bf853e67e2973bb8950
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.png b/docs/html/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env__inherit__graph.png
deleted file mode 100644
index d972765d5cd6c0ff1891f14a8fe871122f01288f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7347
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

diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d-members.html b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d-members.html
deleted file mode 100644
index fb05125a..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d-members.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>laser_models</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">ScanSimulator2D</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.envs.laser_models.ScanSimulator2D Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__init__</b>(self, num_beams, fov, std_dev=0.01, eps=0.0001, theta_dis=2000, max_range=30.0, seed=123) (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>angle_increment</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cosines</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>dt</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>eps</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>fov</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_increment</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_height</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>map_img</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_resolution</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>map_width</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>max_range</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>num_beams</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>orig_c</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>orig_s</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>orig_x</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>orig_y</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>origin</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rng</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a12c4b2f39bda5dd3a1ea14e70e4370cc">scan</a>(self, pose)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a989dd691fd4c08d0f18d6c241862d03c">set_map</a>(self, map_path, map_ext)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>sines</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>std_dev</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>theta_dis</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>theta_index_increment</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html
deleted file mode 100644
index e2e04910..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html
+++ /dev/null
@@ -1,277 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.envs.laser_models.ScanSimulator2D Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>laser_models</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html">ScanSimulator2D</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.envs.laser_models.ScanSimulator2D Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.envs.laser_models.ScanSimulator2D:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.png" border="0" usemap="#f110__gym_8envs_8laser__models_8_scan_simulator2_d_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8envs_8laser__models_8_scan_simulator2_d_inherit__map" id="f110__gym_8envs_8laser__models_8_scan_simulator2_d_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,199,121"/>
-<area shape="rect" title=" " alt="" coords="71,5,133,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.envs.laser_models.ScanSimulator2D:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.png" border="0" usemap="#f110__gym_8envs_8laser__models_8_scan_simulator2_d_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8envs_8laser__models_8_scan_simulator2_d_coll__map" id="f110__gym_8envs_8laser__models_8_scan_simulator2_d_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,199,121"/>
-<area shape="rect" title=" " alt="" coords="71,5,133,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a006ba0ddc5d9d6d2f2b74e945ef61f2c"><td class="memItemLeft" align="right" valign="top"><a id="a006ba0ddc5d9d6d2f2b74e945ef61f2c"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__init__</b> (self, num_beams, fov, std_dev=0.01, eps=0.0001, theta_dis=2000, max_range=30.0, seed=123)</td></tr>
-<tr class="separator:a006ba0ddc5d9d6d2f2b74e945ef61f2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a989dd691fd4c08d0f18d6c241862d03c"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a989dd691fd4c08d0f18d6c241862d03c">set_map</a> (self, map_path, map_ext)</td></tr>
-<tr class="separator:a989dd691fd4c08d0f18d6c241862d03c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a12c4b2f39bda5dd3a1ea14e70e4370cc"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a12c4b2f39bda5dd3a1ea14e70e4370cc">scan</a> (self, pose)</td></tr>
-<tr class="separator:a12c4b2f39bda5dd3a1ea14e70e4370cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab11345c77e843234e6a71f3f0293d4f5"><td class="memItemLeft" align="right" valign="top"><a id="ab11345c77e843234e6a71f3f0293d4f5"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>get_increment</b> (self)</td></tr>
-<tr class="separator:ab11345c77e843234e6a71f3f0293d4f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a8fd8d9f11c319090584c221e51aa4975"><td class="memItemLeft" align="right" valign="top"><a id="a8fd8d9f11c319090584c221e51aa4975"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr>
-<tr class="separator:a8fd8d9f11c319090584c221e51aa4975"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae57ad1092f12be1967de4853eca1327d"><td class="memItemLeft" align="right" valign="top"><a id="ae57ad1092f12be1967de4853eca1327d"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr>
-<tr class="separator:ae57ad1092f12be1967de4853eca1327d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2aa400b42babfa82f677356aaa16a0f4"><td class="memItemLeft" align="right" valign="top"><a id="a2aa400b42babfa82f677356aaa16a0f4"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>std_dev</b></td></tr>
-<tr class="separator:a2aa400b42babfa82f677356aaa16a0f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a02bf0c833e93628643a20cceeb33b029"><td class="memItemLeft" align="right" valign="top"><a id="a02bf0c833e93628643a20cceeb33b029"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>eps</b></td></tr>
-<tr class="separator:a02bf0c833e93628643a20cceeb33b029"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af21e0a0ddd2fc95ec4291db6b33cd591"><td class="memItemLeft" align="right" valign="top"><a id="af21e0a0ddd2fc95ec4291db6b33cd591"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>theta_dis</b></td></tr>
-<tr class="separator:af21e0a0ddd2fc95ec4291db6b33cd591"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af08e1ef6b6397c51fdd3e612dceb17b5"><td class="memItemLeft" align="right" valign="top"><a id="af08e1ef6b6397c51fdd3e612dceb17b5"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>max_range</b></td></tr>
-<tr class="separator:af08e1ef6b6397c51fdd3e612dceb17b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a68ab73d8b055703de7c4eb33ec54520a"><td class="memItemLeft" align="right" valign="top"><a id="a68ab73d8b055703de7c4eb33ec54520a"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>angle_increment</b></td></tr>
-<tr class="separator:a68ab73d8b055703de7c4eb33ec54520a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aabde525512f31433f532639175f50ba3"><td class="memItemLeft" align="right" valign="top"><a id="aabde525512f31433f532639175f50ba3"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>theta_index_increment</b></td></tr>
-<tr class="separator:aabde525512f31433f532639175f50ba3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a12a635318c521153364d75b103905673"><td class="memItemLeft" align="right" valign="top"><a id="a12a635318c521153364d75b103905673"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>orig_c</b></td></tr>
-<tr class="separator:a12a635318c521153364d75b103905673"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aedb545195be8c54364e38ccf0c0b3d00"><td class="memItemLeft" align="right" valign="top"><a id="aedb545195be8c54364e38ccf0c0b3d00"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>orig_s</b></td></tr>
-<tr class="separator:aedb545195be8c54364e38ccf0c0b3d00"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aecd0f30707bb8c82f59ae48ae2a478c2"><td class="memItemLeft" align="right" valign="top"><a id="aecd0f30707bb8c82f59ae48ae2a478c2"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>orig_x</b></td></tr>
-<tr class="separator:aecd0f30707bb8c82f59ae48ae2a478c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a03e555b505b745f98dfd8a5cc4e1d013"><td class="memItemLeft" align="right" valign="top"><a id="a03e555b505b745f98dfd8a5cc4e1d013"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>orig_y</b></td></tr>
-<tr class="separator:a03e555b505b745f98dfd8a5cc4e1d013"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae2c136fdda428bed3de1f7ab30cda72c"><td class="memItemLeft" align="right" valign="top"><a id="ae2c136fdda428bed3de1f7ab30cda72c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_height</b></td></tr>
-<tr class="separator:ae2c136fdda428bed3de1f7ab30cda72c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a53beebf974cdf3cb04dac5e4311b2f36"><td class="memItemLeft" align="right" valign="top"><a id="a53beebf974cdf3cb04dac5e4311b2f36"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_width</b></td></tr>
-<tr class="separator:a53beebf974cdf3cb04dac5e4311b2f36"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a11d13f00e6d8a08d7b758f420ff464c5"><td class="memItemLeft" align="right" valign="top"><a id="a11d13f00e6d8a08d7b758f420ff464c5"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_resolution</b></td></tr>
-<tr class="separator:a11d13f00e6d8a08d7b758f420ff464c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a617e6b987673100484c5fdb0c17c9848"><td class="memItemLeft" align="right" valign="top"><a id="a617e6b987673100484c5fdb0c17c9848"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>dt</b></td></tr>
-<tr class="separator:a617e6b987673100484c5fdb0c17c9848"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6a2a4cc31c05bb623699e24df56d8989"><td class="memItemLeft" align="right" valign="top"><a id="a6a2a4cc31c05bb623699e24df56d8989"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>rng</b></td></tr>
-<tr class="separator:a6a2a4cc31c05bb623699e24df56d8989"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a76ce07e27a1f3efecae222b25bfd3c98"><td class="memItemLeft" align="right" valign="top"><a id="a76ce07e27a1f3efecae222b25bfd3c98"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>sines</b></td></tr>
-<tr class="separator:a76ce07e27a1f3efecae222b25bfd3c98"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aedc4121c126a5bcda9b5f321cb679208"><td class="memItemLeft" align="right" valign="top"><a id="aedc4121c126a5bcda9b5f321cb679208"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>cosines</b></td></tr>
-<tr class="separator:aedc4121c126a5bcda9b5f321cb679208"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af63828a83efca93f50b04324fdd74820"><td class="memItemLeft" align="right" valign="top"><a id="af63828a83efca93f50b04324fdd74820"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_img</b></td></tr>
-<tr class="separator:af63828a83efca93f50b04324fdd74820"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a301f79d5db56a5c5eeb44f33ac3d0b7d"><td class="memItemLeft" align="right" valign="top"><a id="a301f79d5db56a5c5eeb44f33ac3d0b7d"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>origin</b></td></tr>
-<tr class="separator:a301f79d5db56a5c5eeb44f33ac3d0b7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment">2D LIDAR scan simulator class
-
-Init params:
-    num_beams (int): number of beams in the scan
-    fov (float): field of view of the laser scan
-    std_dev (float, default=0.01): standard deviation of the generated whitenoise in the scan
-    eps (float, default=0.0001): ray tracing iteration termination condition
-    theta_dis (int, default=2000): number of steps to discretize the angles between 0 and 2pi for look up
-    max_range (float, default=30.0): maximum range of the laser
-    seed (int, default=123): seed for random number generator for the whitenoise in scan
-</pre> </div><h2 class="groupheader">Member Function Documentation</h2>
-<a id="a12c4b2f39bda5dd3a1ea14e70e4370cc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a12c4b2f39bda5dd3a1ea14e70e4370cc">&#9670;&nbsp;</a></span>scan()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.laser_models.ScanSimulator2D.scan </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>pose</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Perform simulated 2D scan by pose on the given map
-
-    Args:
-pose (numpy.ndarray (3, )): pose of the scan frame (x, y, theta)
-
-    Returns:
-scan (numpy.ndarray (n, )): data array of the laserscan, n=num_beams
-
-    Raises:
-ValueError: when scan is called before a map is set
-</pre> 
-</div>
-</div>
-<a id="a989dd691fd4c08d0f18d6c241862d03c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a989dd691fd4c08d0f18d6c241862d03c">&#9670;&nbsp;</a></span>set_map()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.laser_models.ScanSimulator2D.set_map </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_path</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_ext</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Set the bitmap of the scan simulator by path
-
-    Args:
-map_path (str): path to the map yaml file
-map_ext (str): extension (image type) of the map image
-
-    Returns:
-flag (bool): if image reading and loading is successful
-</pre> 
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.png b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.png
deleted file mode 100644
index 68b449d0354d8b2fb38c6d3519e04ddf336606fe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 822
zcmeAS@N?(olHy`uVBq!ia0y~yU=#(i12~w0B*P`a-9S<zz$e7@|Ns9$=8HF9OZyK^
z0J6aNz<~p-op<DcT#k|;zhDNSA`rNGD#VC^f$6BHi(^Oy<J-Bni(V@TuvEv}{QrOa
z_%^)*9z`<qr>yll=IY+%z`doRcIhgukkEJyPp(N(ouZyaNv@OTL`+ms4^ug5**LY5
zVRm6nLBjKmN}kO1SG}&T{k$tKo%3?@OQZYVmu~-DGWF)s*n>fDlsx4h@Pu7Ey+S!G
zO?!L%nm22vvU_??y61cjXyUoq&C8Zg`ch|?<r<`&F6q9;<C5I+jYVpj>QUO0O2m*X
z1lhkXY}G2K&{Eb1DlrU97p6xr8t6^WV3g<-Wq7Qm8pXht#G2qehrwba(}N>i4Z_+C
zeru?}N#7I{D!OWwzK8<@Fc28j!x-j7Fcu`S9>@$^$Nv89{hu%A%w_mDUA%eA^<xa*
zMHn|6kJ)+ofyN!9vzlLbOx?L`bD@CTgXlkNrj}+foNGSito_-fJzQLSZl_(9c%s*%
z>>kyC^xeAKJqz!@eN_D-`;VFP-H@C6{s`nsZ2WF({>pv#y?aty?eD(1{&wT$FuBN`
z?OC;V+Ar#F-ny%IQ7Hd;GvT*~N_oG>Wv8{DEL(e9r`+k++@n=zPrdu|ZB<)qN>LmC
z4Q=}lL#>;08Ww+BSET>sTG#vC*VpEVA1(>lx^CCqOJx^+<xVSp%c&ikU>|eq(#zl9
z62yu!ts`Eh|64TmXY1Lhn_F(^2;Dw-e%;i?3uV^@bLk(q&X`;lZynyZ=1cH>zMB6r
zl^IW8#Jp^NpRM!Z(;Ct9j@Dt*nyXGY-rKyq>)+eDKc7!NpLu_6&BW$iXKy@T@YQ>*
zbt#W!U(yN3+}V1Cy0%O<$JCiWX#c!)>h8l&FYBUC3CTS0vDqJH*2(-}`lq$BEFaW6
jki&gv)XG&{kKfA+99|vSx9lV+S1@?G`njxgN@xNAmrHj+

diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.map b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.map
deleted file mode 100644
index 02458402..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.laser_models.ScanSimulator2D" name="f110_gym.envs.laser_models.ScanSimulator2D">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,199,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="71,5,133,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.md5
deleted file mode 100644
index f298ef63..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-54e4b1d5edcb8c3cb08332fff8851fbd
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.png b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__coll__graph.png
deleted file mode 100644
index 5f79883ef8f1582e2d39f3919ebb44ee3a051331..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5204
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

diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.map b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.map
deleted file mode 100644
index 02458402..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.laser_models.ScanSimulator2D" name="f110_gym.envs.laser_models.ScanSimulator2D">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,199,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="71,5,133,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.md5
deleted file mode 100644
index f298ef63..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-54e4b1d5edcb8c3cb08332fff8851fbd
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.png b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d__inherit__graph.png
deleted file mode 100644
index 5f79883ef8f1582e2d39f3919ebb44ee3a051331..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5204
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

diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests-members.html b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests-members.html
deleted file mode 100644
index fd974ba0..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests-members.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>laser_models</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">ScanTests</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.envs.laser_models.ScanTests Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>berlin_scan</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>fov</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>num_beams</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>num_test</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setUp</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>skirk_scan</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_fps</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_map_berlin</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_map_skirk</b>(self) (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_poses</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">f110_gym.envs.laser_models.ScanTests</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html
deleted file mode 100644
index 4f8b8f39..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.envs.laser_models.ScanTests Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>laser_models</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html">ScanTests</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.envs.laser_models.ScanTests Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.envs.laser_models.ScanTests:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.png" border="0" usemap="#f110__gym_8envs_8laser__models_8_scan_tests_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8envs_8laser__models_8_scan_tests_inherit__map" id="f110__gym_8envs_8laser__models_8_scan_tests_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,164,121"/>
-<area shape="rect" title=" " alt="" coords="45,5,125,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.envs.laser_models.ScanTests:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.png" border="0" usemap="#f110__gym_8envs_8laser__models_8_scan_tests_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8envs_8laser__models_8_scan_tests_coll__map" id="f110__gym_8envs_8laser__models_8_scan_tests_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,164,121"/>
-<area shape="rect" title=" " alt="" coords="45,5,125,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a55ab0dc9841fe835d01b87b9b0fce3c0"><td class="memItemLeft" align="right" valign="top"><a id="a55ab0dc9841fe835d01b87b9b0fce3c0"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr>
-<tr class="separator:a55ab0dc9841fe835d01b87b9b0fce3c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a54056154757449495862bb07f7fd4119"><td class="memItemLeft" align="right" valign="top"><a id="a54056154757449495862bb07f7fd4119"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_map_berlin</b> (self)</td></tr>
-<tr class="separator:a54056154757449495862bb07f7fd4119"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac7855c2d63a63159b19ecc01f92194bc"><td class="memItemLeft" align="right" valign="top"><a id="ac7855c2d63a63159b19ecc01f92194bc"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_map_skirk</b> (self)</td></tr>
-<tr class="separator:ac7855c2d63a63159b19ecc01f92194bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a38ed452c3c86c8812726a8524d1eb034"><td class="memItemLeft" align="right" valign="top"><a id="a38ed452c3c86c8812726a8524d1eb034"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_fps</b> (self)</td></tr>
-<tr class="separator:a38ed452c3c86c8812726a8524d1eb034"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:af13ee1aeb4326b4391e30f64ae267ca6"><td class="memItemLeft" align="right" valign="top"><a id="af13ee1aeb4326b4391e30f64ae267ca6"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr>
-<tr class="separator:af13ee1aeb4326b4391e30f64ae267ca6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5377c17def38ead4ba0fc005ba239b3a"><td class="memItemLeft" align="right" valign="top"><a id="a5377c17def38ead4ba0fc005ba239b3a"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr>
-<tr class="separator:a5377c17def38ead4ba0fc005ba239b3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac0c91b73132b25fce081ec9c11c91abe"><td class="memItemLeft" align="right" valign="top"><a id="ac0c91b73132b25fce081ec9c11c91abe"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_test</b></td></tr>
-<tr class="separator:ac0c91b73132b25fce081ec9c11c91abe"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a31eb3b8ba28e16af8b39bd39c2254090"><td class="memItemLeft" align="right" valign="top"><a id="a31eb3b8ba28e16af8b39bd39c2254090"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>test_poses</b></td></tr>
-<tr class="separator:a31eb3b8ba28e16af8b39bd39c2254090"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2958e581294bc423f58a1df94a030b9e"><td class="memItemLeft" align="right" valign="top"><a id="a2958e581294bc423f58a1df94a030b9e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>berlin_scan</b></td></tr>
-<tr class="separator:a2958e581294bc423f58a1df94a030b9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abfb81eedfc585622f28ba8f81443af80"><td class="memItemLeft" align="right" valign="top"><a id="abfb81eedfc585622f28ba8f81443af80"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>skirk_scan</b></td></tr>
-<tr class="separator:abfb81eedfc585622f28ba8f81443af80"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.png b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.png
deleted file mode 100644
index 0b125442e3859b54f09e20ed3631921efdb509c3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 775
zcmeAS@N?(olHy`uVBq!ia0vp^?|?XfgBeI_e%L7rq$C1-LR|m<{|{uoc=NTi|Ih>=
z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0rg^$JhEy=VoqKcAY6BjZ{<vlT|M%xJ
z#XV^~>Gn)*+v+=<3VUR{^WqGRXS>f(IlHJ;+jDW&L$6CKs>I)=UfJt;DtAA>n&!!^
zZ@1Ozc&fkZy=i;otGH{1`?MwHFKzB@h}*p+V|SM(4`=aoyR&vv!XGj1o365V+2=yv
zRkM6{{=Br-$#sjI!=$+D(wnp+ZyKEv%v=7Y+b+IE`i=UOid-MN5RqcOIWObuC*8fa
zODp)5c=7#rDlaqVc1fRG>*G3Eb9?-`ysBTk>EF4c^-9e%-)}0kk4it+D$Shu+wSU2
z)t8UA7N};1=*D<Tg>r{aa=TiyBQ5PR$AkJ8><MybTYrBx7JVPHL;Tjv3iZRW=Xea(
ziRm3!5w(K>=tHKSRju3xs|X2vD4RL+tTIo6m~Ko%;MM|0x6osIcU=2wX2Uy=_rt1r
zGAiZT>^J_1E(k4&SJ?i@>|x%9->W~q|GAWD=iKhu)7UPo>MbdhT_k^b@9z4|hYpv#
zwThp2RPXmaV92<M6+dOXRPgiYowbr{BR0<8z3TMq_hm1urhl#OkhXHYlUoxnp*hFw
zNNaaGZ=>|Ny*FM@+kWQgpW8=I@zzv}Y~TGMZiPp!>)V3vrq$n9?Jiz>ddlyc54L4j
zN^JMN|BhesuxOs%vndxc)XN|2YJAN+XY$+Ue(HyO!`D4EymMjU$-K{Qldq+%e}DSj
z#Y?-UUbTn}4Dz3ISNYDpDcjGzTff6S{W|}>KYNSHR=>~NqGleyZYq=Fw{P6sej)WQ
zvhGNqdvmU}{MnSIK4bRkb={H=rsdUqX0VGfFWjCiZ~i;ymW9QE`7i#xF)QQxkXyB4
s2IIbHZt(<QG&Ka49yB$c?e?Fc$-IC5(XVe6fT@<j)78&qol`;+0JN=nasU7T

diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.map b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.map
deleted file mode 100644
index 30f367de..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.laser_models.ScanTests" name="f110_gym.envs.laser_models.ScanTests">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,164,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="45,5,125,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.md5
deleted file mode 100644
index e7dd44d2..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-8753cf30b5bdb970cca35870109666ee
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.png b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__coll__graph.png
deleted file mode 100644
index 5749b79c3341cbf07b4dd37ea48a078b0a2cceb7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4911
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
IO4e`w3-bfgA^-pY

diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.map b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.map
deleted file mode 100644
index 30f367de..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.laser_models.ScanTests" name="f110_gym.envs.laser_models.ScanTests">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,164,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="45,5,125,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.md5
deleted file mode 100644
index e7dd44d2..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-8753cf30b5bdb970cca35870109666ee
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.png b/docs/html/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests__inherit__graph.png
deleted file mode 100644
index 5749b79c3341cbf07b4dd37ea48a078b0a2cceb7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4911
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
IO4e`w3-bfgA^-pY

diff --git a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer-members.html b/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer-members.html
deleted file mode 100644
index a94e7621..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer-members.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>rendering</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">EnvRenderer</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.envs.rendering.EnvRenderer Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>, including all inherited members.</p>
-<table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b24abdbb4d13744255ebfdb3d509354">__init__</a>(self, width, height, *args, **kwargs)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>batch</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>bottom</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>cars</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ego_idx</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>fps_display</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>left</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_points</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a05cb0faf5893e3cbed58cf20d0997bf7">on_close</a>(self)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a0cbcdabef2cdda765d6721ca796ecfd0">on_draw</a>(self)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a557710400bb370a7509dbc17658eadd8">on_mouse_drag</a>(self, x, y, dx, dy, buttons, modifiers)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a10f7c38d921015b5574ba0c858a245bb">on_mouse_scroll</a>(self, x, y, dx, dy)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ac8bbef5b8910515dd18c8a6624730898">on_resize</a>(self, width, height)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>poses</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>right</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>score_label</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>top</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ae9c12c08c2f799504b6390b2d0ffda3f">update_map</a>(self, map_path, map_ext)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b9284f2e59c9000f10bd18e1ec6a9b3">update_obs</a>(self, obs)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>vertices</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>zoom_level</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>zoomed_height</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>zoomed_width</b> (defined in <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">f110_gym.envs.rendering.EnvRenderer</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html b/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html
deleted file mode 100644
index 258133a0..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html
+++ /dev/null
@@ -1,531 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.envs.rendering.EnvRenderer Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>envs</b></li><li class="navelem"><b>rendering</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html">EnvRenderer</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.envs.rendering.EnvRenderer Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.envs.rendering.EnvRenderer:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.png" border="0" usemap="#f110__gym_8envs_8rendering_8_env_renderer_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8envs_8rendering_8_env_renderer_inherit__map" id="f110__gym_8envs_8rendering_8_env_renderer_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,197,121"/>
-<area shape="rect" title=" " alt="" coords="64,5,139,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.envs.rendering.EnvRenderer:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.png" border="0" usemap="#f110__gym_8envs_8rendering_8_env_renderer_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8envs_8rendering_8_env_renderer_coll__map" id="f110__gym_8envs_8rendering_8_env_renderer_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,197,121"/>
-<area shape="rect" title=" " alt="" coords="64,5,139,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a1b24abdbb4d13744255ebfdb3d509354"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b24abdbb4d13744255ebfdb3d509354">__init__</a> (self, width, height, *args, **kwargs)</td></tr>
-<tr class="separator:a1b24abdbb4d13744255ebfdb3d509354"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae9c12c08c2f799504b6390b2d0ffda3f"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ae9c12c08c2f799504b6390b2d0ffda3f">update_map</a> (self, map_path, map_ext)</td></tr>
-<tr class="separator:ae9c12c08c2f799504b6390b2d0ffda3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac8bbef5b8910515dd18c8a6624730898"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ac8bbef5b8910515dd18c8a6624730898">on_resize</a> (self, width, height)</td></tr>
-<tr class="separator:ac8bbef5b8910515dd18c8a6624730898"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a557710400bb370a7509dbc17658eadd8"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a557710400bb370a7509dbc17658eadd8">on_mouse_drag</a> (self, x, y, dx, dy, buttons, modifiers)</td></tr>
-<tr class="separator:a557710400bb370a7509dbc17658eadd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a10f7c38d921015b5574ba0c858a245bb"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a10f7c38d921015b5574ba0c858a245bb">on_mouse_scroll</a> (self, x, y, dx, dy)</td></tr>
-<tr class="separator:a10f7c38d921015b5574ba0c858a245bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a05cb0faf5893e3cbed58cf20d0997bf7"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a05cb0faf5893e3cbed58cf20d0997bf7">on_close</a> (self)</td></tr>
-<tr class="separator:a05cb0faf5893e3cbed58cf20d0997bf7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0cbcdabef2cdda765d6721ca796ecfd0"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a0cbcdabef2cdda765d6721ca796ecfd0">on_draw</a> (self)</td></tr>
-<tr class="separator:a0cbcdabef2cdda765d6721ca796ecfd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b9284f2e59c9000f10bd18e1ec6a9b3"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b9284f2e59c9000f10bd18e1ec6a9b3">update_obs</a> (self, obs)</td></tr>
-<tr class="separator:a1b9284f2e59c9000f10bd18e1ec6a9b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a10e0980201fca6f3392fc5c333a6ad99"><td class="memItemLeft" align="right" valign="top"><a id="a10e0980201fca6f3392fc5c333a6ad99"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>left</b></td></tr>
-<tr class="separator:a10e0980201fca6f3392fc5c333a6ad99"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acb665a6f4d150da3b2159b1cd86f4117"><td class="memItemLeft" align="right" valign="top"><a id="acb665a6f4d150da3b2159b1cd86f4117"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>right</b></td></tr>
-<tr class="separator:acb665a6f4d150da3b2159b1cd86f4117"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab6f1d3bbdf185a2489a9c444413e72b6"><td class="memItemLeft" align="right" valign="top"><a id="ab6f1d3bbdf185a2489a9c444413e72b6"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>bottom</b></td></tr>
-<tr class="separator:ab6f1d3bbdf185a2489a9c444413e72b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6e8e1a6e3f6c1f681f0fcbe6c04ffc27"><td class="memItemLeft" align="right" valign="top"><a id="a6e8e1a6e3f6c1f681f0fcbe6c04ffc27"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>top</b></td></tr>
-<tr class="separator:a6e8e1a6e3f6c1f681f0fcbe6c04ffc27"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a46bb51fb7c77939d2c4b023cfe2ca867"><td class="memItemLeft" align="right" valign="top"><a id="a46bb51fb7c77939d2c4b023cfe2ca867"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>zoom_level</b></td></tr>
-<tr class="separator:a46bb51fb7c77939d2c4b023cfe2ca867"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af71d3702c2e9fa5e8e109111b4a337ce"><td class="memItemLeft" align="right" valign="top"><a id="af71d3702c2e9fa5e8e109111b4a337ce"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>zoomed_width</b></td></tr>
-<tr class="separator:af71d3702c2e9fa5e8e109111b4a337ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a769be9782b9452fd8c3c1984985e419b"><td class="memItemLeft" align="right" valign="top"><a id="a769be9782b9452fd8c3c1984985e419b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>zoomed_height</b></td></tr>
-<tr class="separator:a769be9782b9452fd8c3c1984985e419b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0f6f622b6ffe98f7ee038c2ce72af276"><td class="memItemLeft" align="right" valign="top"><a id="a0f6f622b6ffe98f7ee038c2ce72af276"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>batch</b></td></tr>
-<tr class="separator:a0f6f622b6ffe98f7ee038c2ce72af276"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae423459dd9ee2da53cf7929e4591e366"><td class="memItemLeft" align="right" valign="top"><a id="ae423459dd9ee2da53cf7929e4591e366"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_points</b></td></tr>
-<tr class="separator:ae423459dd9ee2da53cf7929e4591e366"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a227e60c781a0e50f827ea2f4f11a3f85"><td class="memItemLeft" align="right" valign="top"><a id="a227e60c781a0e50f827ea2f4f11a3f85"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>poses</b></td></tr>
-<tr class="separator:a227e60c781a0e50f827ea2f4f11a3f85"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8a458f2ce6a733888d1a6bfaab243f31"><td class="memItemLeft" align="right" valign="top"><a id="a8a458f2ce6a733888d1a6bfaab243f31"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>vertices</b></td></tr>
-<tr class="separator:a8a458f2ce6a733888d1a6bfaab243f31"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad3328a46ae8641dc60b24d53219ffcb3"><td class="memItemLeft" align="right" valign="top"><a id="ad3328a46ae8641dc60b24d53219ffcb3"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>score_label</b></td></tr>
-<tr class="separator:ad3328a46ae8641dc60b24d53219ffcb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2ecadd7a3ea2a4525bd7b0b4d362db81"><td class="memItemLeft" align="right" valign="top"><a id="a2ecadd7a3ea2a4525bd7b0b4d362db81"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>fps_display</b></td></tr>
-<tr class="separator:a2ecadd7a3ea2a4525bd7b0b4d362db81"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad2c50c6e7d890771c7173768b6eef5c2"><td class="memItemLeft" align="right" valign="top"><a id="ad2c50c6e7d890771c7173768b6eef5c2"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>ego_idx</b></td></tr>
-<tr class="separator:ad2c50c6e7d890771c7173768b6eef5c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4d90f610c36a7c83b054a2233276f36a"><td class="memItemLeft" align="right" valign="top"><a id="a4d90f610c36a7c83b054a2233276f36a"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>cars</b></td></tr>
-<tr class="separator:a4d90f610c36a7c83b054a2233276f36a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment">A window class inherited from pyglet.window.Window, handles the camera/projection interaction, resizing window, and rendering the environment
-</pre> </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a id="a1b24abdbb4d13744255ebfdb3d509354"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1b24abdbb4d13744255ebfdb3d509354">&#9670;&nbsp;</a></span>__init__()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.rendering.EnvRenderer.__init__ </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>width</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>height</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">*&#160;</td>
-          <td class="paramname"><em>args</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">**&#160;</td>
-          <td class="paramname"><em>kwargs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Class constructor
-
-Args:
-    width (int): width of the window
-    height (int): height of the window
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a id="a05cb0faf5893e3cbed58cf20d0997bf7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a05cb0faf5893e3cbed58cf20d0997bf7">&#9670;&nbsp;</a></span>on_close()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.rendering.EnvRenderer.on_close </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Callback function when the 'x' is clicked on the window, overrides inherited method. Also throws exception to end the python program when in a loop.
-
-Args:
-    None
-
-Returns:
-    None
-
-Raises:
-    Exception: with a message that indicates the rendering window was closed
-</pre> 
-</div>
-</div>
-<a id="a0cbcdabef2cdda765d6721ca796ecfd0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0cbcdabef2cdda765d6721ca796ecfd0">&#9670;&nbsp;</a></span>on_draw()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.rendering.EnvRenderer.on_draw </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Function when the pyglet is drawing. The function draws the batch created that includes the map points, the agent polygons, and the information text, and the fps display.
-
-Args:
-    None
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="a557710400bb370a7509dbc17658eadd8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a557710400bb370a7509dbc17658eadd8">&#9670;&nbsp;</a></span>on_mouse_drag()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.rendering.EnvRenderer.on_mouse_drag </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>dx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>dy</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>buttons</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>modifiers</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Callback function on mouse drag, overrides inherited method.
-
-Args:
-    x (int): Distance in pixels from the left edge of the window.
-    y (int): Distance in pixels from the bottom edge of the window.
-    dx (int): Relative X position from the previous mouse position.
-    dy (int): Relative Y position from the previous mouse position.
-    buttons (int): Bitwise combination of the mouse buttons currently pressed.
-    modifiers (int): Bitwise combination of any keyboard modifiers currently active.
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="a10f7c38d921015b5574ba0c858a245bb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a10f7c38d921015b5574ba0c858a245bb">&#9670;&nbsp;</a></span>on_mouse_scroll()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.rendering.EnvRenderer.on_mouse_scroll </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>y</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>dx</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>dy</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Callback function on mouse scroll, overrides inherited method.
-
-Args:
-    x (int): Distance in pixels from the left edge of the window.
-    y (int): Distance in pixels from the bottom edge of the window.
-    scroll_x (float): Amount of movement on the horizontal axis.
-    scroll_y (float): Amount of movement on the vertical axis.
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="ac8bbef5b8910515dd18c8a6624730898"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac8bbef5b8910515dd18c8a6624730898">&#9670;&nbsp;</a></span>on_resize()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.rendering.EnvRenderer.on_resize </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>width</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>height</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Callback function on window resize, overrides inherited method, and updates camera values on top of the inherited on_resize() method.
-
-Potential improvements on current behavior: zoom/pan resets on window resize.
-
-Args:
-    width (int): new width of window
-    height (int): new height of window
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="ae9c12c08c2f799504b6390b2d0ffda3f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae9c12c08c2f799504b6390b2d0ffda3f">&#9670;&nbsp;</a></span>update_map()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.rendering.EnvRenderer.update_map </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_path</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_ext</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Update the map being drawn by the renderer. Converts image to a list of 3D points representing each obstacle pixel in the map.
-
-Args:
-    map_path (str): absolute path to the map without extensions
-    map_ext (str): extension for the map image file
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<a id="a1b9284f2e59c9000f10bd18e1ec6a9b3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1b9284f2e59c9000f10bd18e1ec6a9b3">&#9670;&nbsp;</a></span>update_obs()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.envs.rendering.EnvRenderer.update_obs </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>obs</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Updates the renderer with the latest observation from the gym environment, including the agent poses, and the information text.
-
-Args:
-    obs (dict): observation dict from the gym env
-
-Returns:
-    None
-</pre> 
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.map b/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.map
deleted file mode 100644
index 3e47ff42..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.rendering.EnvRenderer" name="f110_gym.envs.rendering.EnvRenderer">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,197,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="64,5,139,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.md5
deleted file mode 100644
index a6ec4c61..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-d65f22e3d9fc873a24c94108e26579ac
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.png b/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__coll__graph.png
deleted file mode 100644
index db29c63adf9dfac41cab43ca027829a6c04ac8e2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4378
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

diff --git a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.map b/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.map
deleted file mode 100644
index 3e47ff42..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.envs.rendering.EnvRenderer" name="f110_gym.envs.rendering.EnvRenderer">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,197,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="64,5,139,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.md5 b/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.md5
deleted file mode 100644
index a6ec4c61..00000000
--- a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-d65f22e3d9fc873a24c94108e26579ac
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.png b/docs/html/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer__inherit__graph.png
deleted file mode 100644
index db29c63adf9dfac41cab43ca027829a6c04ac8e2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4378
zcmb_gcT^K!w;dp%84!>rh)7dJ#31EI5h;SGAWcd@5C}z)-a(LF1!)=rDn+D92dNTD
z=ptQ;p(YXOB?<^4_+8#xZ@usR@!nr=Wld(*%$+mm-m}l%dnQ&-N0W(>hY^AxrrWpF
z4Zyw+Y{B%j;9oUcRuAlG(OR17(BI=<Hm=|W1hEX>R#!Fjd$T^{uXk^ehj#0N6II)-
zRW+1(5$~5z=gc(nLQsMR8t$J&jixSo>lK+5qw={*b>Ic)V!83g+Oalf!M@1%g(?+=
zOGZ<SOWCxid6GnXd{kq^7mwQ9B&_>FVY<?ru3e|)EPqhWUr1aGyx^+RibT+;#VEMb
z2AZh!6o=u}=r!3n)#P$2Sn$cLbMUR(64-b7`B9r!ADnKFJ{f&WnDh}byR?&>2TtPg
z`lhC*d3bpCB*IOeJhi2Ql5fE@H8q?2hWyjh(*v=sin!}lEF--C6_GV^fg@W_^c)Ml
z-h&4Nz89Z7$Nyl{&brR0nRs^LBO*tDQR~XuRNYBe+)nDJ+NGsO^e}4kMz7czV@u1E
z_wL<$qa1t|ay$I(4THmRU(8~6^-)jS`ua}5;c!tgF?5}st!?Y@FzfR2@>*@NNqJ6Q
z9=!VD;P-dhBf6sExcQ|edPhe`S?>P+{`$cEtIhl0c`+5a1qC+0x0fp_Dxjf#>Ce5r
z3`8PvYkNE5mN0&gLUyN+G<=#qd|+>GZf1#9cXM-72@Gty!>5~dy|c=$59u_CM46ge
zFMPrj78XKKM|Zc)pFPT&b9;Nc01N%r(y$QJ`keP4<fEZ;(lRm*`(OPJLDIdWqc51c
z)~D(OIO8hah-%mTwjc}!1DUm7eK_#u?4rCo3Ffm-fJdr@a$GXD+W)ce=-`pQiVCEC
z_pZQ;-lUY2Fw3BQjfH0Zpgn>2#l@6gbHU{C()&q$3#jHm`TJSg=i8P4{-J?xX=$}j
zR@x+|rgjBwZfr0M3E_g38-H;trDCz&-xd~jR<46_QbL?@r=zUXVq)m+`(Mc*+L7_<
zg4QH5IsN^6v96(^qy~=##(*r}xu;lpk8kt`hu?Z%q$>sNR?L|g8X}=I5($0t{0m7a
z?SgJ*1=+#D0RiQgl*C^Y6}5tpk&%&Wel9K&G$H<f_9WYp2r`L;KcnaqUsP6RPs_y9
zaeQoAWy^4UX=7tRT~qVdilh{x{Z^g<=GFF)gF@Bz$QyZ2035f?StVOg<I&Mm&^(bC
zy1ngXYj2PL{24Kte|ObA)4DyX((-kBI@Kc_QqSBR;pyp#aSsRx*mZ0$2U8b{=aG3f
zGww62DuJbWWN|+)FHcnrgYJqyy+xs@-n>cs*wHaLBZKM6l`H+3FeMG^<ve10w9RzA
zyIjDocvW>Z5v<_+--3q#V1AppUsg^|(*^tMYioKYCea1DSyfYnab9QTmZG9qrG9EC
zUArrRs?@r-r>8Yf3ybvKFpud(Pfku+ZO-DjulXU*>%5sPAZ+tR=AHchIX!%{<?mUW
z?u5?yws0zFU|_)S$2SHNiS(t+<O$l<H8EZ4p`frZ%+AivZ+nRqkH=3^ByGA{`}>(3
zC(1M&94>zIkOv5e_W$|4jX>amkdEWxU%q^q2c=rm?*L8m(RVZd-7{KI@u%|(3jkSd
znPF5Rp`ldM)6-ySrGr$vy1H^|YdLp!cei$SI-hY|Qh0tJg__Usoo#!0@t&2VW8A3=
zIu&HKw=C86{b5B#7th~)1%uKQeI*`0ek>}^!-9-II`YAS=TJj6OP)#T=?rvqbeNi#
znQ!Md)aXtAn*}0S5=6x#+|;cFB7_*@n8n1!$sb`OaGa}>kr+m-R3xytBrqZP@DiMk
z8MbA?xU90-ZgB5jc)+g>iUsW|sZ-7NAs2~I(_#f?{qf95!h>iHuDOQ48y{PSM)289
z(}<uTmq6?d!dsa*=8F<#9T|!q^e`3k>ATH+0(^QXuUlx6GdB-oD^kV9Me_2tHzHCa
zx}$SO-P6<2vbeHR;OKC(#jh;pgQoQ`>q-9Wq1wAI56=YI*hrym{<eD><tj18CB!7Q
zz-?@9V4O8H1_3T@GQ|Y>^if{wfq$H(Wo3(<q-15)(WI<vM(PSV6-yygb#ZzI245Wl
zKop&<qm$cvKm8RV@i{apDMxEwjN|zwYc2Ku)mtJa>WymFL{m@C6KrfQ-U@I>8z-lj
zTww){Q8+tirUmXd3kEazk<Zo1=_Uw26BXNZ4V)Jd_6i0;8XKuhO;0{B(8yI}=RAw^
z8;<Z?^pHCv!~G=OfNsfKNM!EuW1b4{Rceg0??w;nsTa>Tn-BEtJ~qgEpZj^YJlHi&
z;*QP{Z(Cani9+VzlZY(Lnd80rzn1QVz!`lMJu&9rRf9G1e^mGXe@MoW_U!U#0V@kj
ztL9}`NNlXk=l%@9wR;j8<=#7Vl*Yr?DO0u1s}txL1&KheZ0yD?E>7y<fS3HZGirKf
z=AihjnwOcc^;?;L&&`ZM>)yRnf<i(>GC5rL`o22vy%ZB|4Gs9UYuEHFEc$&f9_CNM
zgIvvVPdI*U&S{#PpZVP1Un40pe8X|Pr0viCPs!k;z-F!G6l1*Li(aHVNgb1YtYx=v
z--aL>8XBN8#nYNIep*^5nE9{AfB9l4EiG-e@}+39-d$+ckIdx!Qrl}NQTeFHmqBUd
zlLN}af-nC0bEDc)%a*eSMeMAstQNE2er;_;uEE9KwXfl6Y1{y5=<WnQf+#lW`tV*4
z8z*Pf>O?sWWME*hHLS@`9Mx4GtFQR>%~sr^ksUNP6f#z9LMA6FN101>ZxP!Anq2+;
z<#Td!l3u@#dwU}q-4+I)YzbCQNl9_r|6wOAB0>ZjxV9b_7gy=AaOaJJH>0t!F+C$=
zSar43kDos&Tf`g3^4FJoxu?Hh11w6Waxk;5uCCK`edUxdVRd!YeS1mYyukzR?d_c=
z?Z77MGzne0bO}<?(_=BWut>&YqYr*<lKcOe>-fF1N+glOIy%(fDEcyMCY-Teyma}p
zhLzPhoeTwdB`Q850@l&l`L?QxjokITeK9LIq0*+?$5ac1%Gb?GXllB4tfQ}Go$>Lf
zrGA_9L)QX!5&HW2J-xkcLvL>o7Z)d1yXPwN0T>G3L=_dkEjYaPXej%vrO?y2lw^^s
zSJ{Gsg7)UaPoBfvsbPEh>J`sREY=1e!LU}FETpL>%AS**t+IYt=Q_s>l%=Di;~cmJ
zD`A1|{yvZq2ej|pl`DxesVOPcTwGi}n$#-B#++(uYDq~+5FkP)!UqPAhBMuX{M}%s
z-PQ>*=FNc(Q#=53`UVDJxPV`z?d4H!Ni+=K-flz?l`yXlF)B6|5D=i6ot>R*@Vvks
z6^g}jJ$v@-+>74Hsr>wWJa8-MO770iPC37=bInJ;9fdDk5R#LtA9ZljTpY~mewg(%
zYA*OMUuI?|&lnw~=(7g;g#nF5v#_#;0(E$xe3T&Lomar~gfMuhdf^J+#Ml^>N<kc)
zlaq4|<$LGOog`2o@73|PkrB4>@o`kmV-7_Zd;2KhH~4#dd!dl7uA8|ak%<WtyUflw
zu4A!WTL)#Y^jSAUoRMSk@$qr<@#zBI@ngx`k`jcesp({szf?(Ssiaja1f!#SmzxVa
zwg~H~;-+B?r_QU0vZIOk$inyU@xZ$w-R4z3zmY!$CPOzwDDWcU;d^^~5QJc2vbMF2
zprWB|?dX6pGc(gOGjCA*O+P$hJ;TRmZDp11{xp$a`KFEzbMqeQ1j@_|4>Dbl|E>^x
z@Tzgtf@x*fGkE9|wdE8+ZA6m0rl#g`c`XKuZU6jPdjaX>>|E->tE{YCVphWl3Q+G(
zrUg#~dW*nJfml_RuhY^%qIl57cCQVJ)~cdLMhu`*#YQ3E*uXHa-=~30LX+}~{jZ}l
z6n)V<D`NnKs?N@r?FTdauV-#;x&7H5)h#S5i^AcQ{u~~Dy*FNl;FZ;O+&RwTIPP>;
zSN_D$y7D4LrLk-mWyjY#Q5wQ*);&oAJ%fYM;o&q;c3~m?oxG}UE*OM3eHFH|vjgJU
zXZ6%(OxS<xNlue<7X-4IjKRQT)v1Mq)|EH_Sg1oGKuN&LK7C~a*as;osp{h+TUAvx
zzr5VrjDlLn#yHB#%B;9)fsaGgx$v>Eu^GCIJ~*hs<nJ)?DX=p!F@fTsEkCbk*_8cs
z95L;;J5DY$imEjXeu9OUH!duU+R)H&9vGRlYyMS)PF!i}Wl$AXKECI`Prgh|B?0Qm
za9LbjjGhZRVDjCZ9sA^cIP=k$+;^n~HuPH=*deJ(#|a5`F0LCzhJwn<{J@hxa&r16
zouzUvq^|BCU`;9A{J|9kR*>83_~kQ7PuN97L>@hUtOn@yL6cu-YHF%ZjhDvgZzm_G
zt=%bCo4Mwv7T3E8et%Znz7DQrM$fL)3H5!ge#pwf(HXQ!BvL_Z7)Eb$XlQ6*X=!KI
zbKbXxVt|eC`!+Q9>s&fBl>%6}xnl%wM74Hz)9vr?i(%^?_P>feJowcPny|LEmf+VT
z23(mNse>URDk=w%)H}_@n^sm<1zKxL$+v`KVq@D1_1_sv_{ho2tDb*x%$cHBu0&^K
z@YOm`(Mm~GV~yv)5eo-LWNWL+?qgI?P_r?Ai-P%XwJbv#bC!q0!4}p~Y#qzr6V3aN
zi`C*l##+wVM;4O@2M0FoQA{%rVg<@m%XU3o?d<K*2fOPQPxmhAT$m7lm2xK!DJ>ll
z7kA>0mX`a{kN`#ni3rcl6{e3=t8Zwape_zaG#-{Xmz$&58R4lC7KDW~u*l87S1xI%
zUxfqPrD15u4qiPZ19qJ-eb3lpVSpd#nV7~_@R?2KE4$UTIFEAnN>s@%yFP&E>Uil)
zf@Qs%>XaSjeNGPb(b3W2?m$hML0wkO-G}8-tT~Pk8ieBV)o$Ey|M|UNXX;%}4$|%u
zd+ERxc1CO9Gl5;k_w{L!8yH%)CB&im&CNtWqCr`fMTVrcuhlUzF(II9ZYG|caaDe?
zt&Brx=}NEDy66Jx7|zj<bDM|GDn03l(s+?zn;onW)ZiuH+mzUB;ZY!?#r2!OG@Wcv
zq>e@l!l<db68Q&RCOQ)=oxK@a2DYz?Qz(?Jtu4L%iKA-r({<VnxfXT7wzhCO%6i=#
zeqew(<U3#Q;V`ARUxGN1{vb1|=zjHf4R1a9kCBnl9x<AKYqh)uP59t|L?VZJL0F&v
z4EsuNf@wN4FHc0)bvE9vFO@jm;0avzSZ~4{c39+(!q6bOi1x_}?Z&gnNH{e$wcC$x
zx54}3vTgTf-x6C8-;y1w(X86bT=<u|VDkJxhGIo+t?@GL#sH}^4j}bwjSdRMeKVdr
zbZAI#Z+~AvL4k)YHrIr&1&{(g0-+ABHsNqaT?bcN@@1B3a7zm3BZ@N{6Lx;|sNJ&E
z`#(+GJC}fVLQo=?K(0|iMSWwVpsZ|aq8a_LLk7WuUce&9hfA&g_<O;BIKOzPgJJ;_
eC=XfvOS3n*{^89BVNvk01G=rDqh6+F74|P-ykj^3

diff --git a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests-members.html b/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests-members.html
deleted file mode 100644
index e764031c..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests-members.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>collision_checks</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">CollisionTests</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.collision_checks.CollisionTests Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>length</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>setUp</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_fps</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_get_vert</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_get_vert_fps</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_random_collision</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>vertices1</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>width</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">f110_gym.unittest.collision_checks.CollisionTests</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html b/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html
deleted file mode 100644
index 6e033d7e..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.unittest.collision_checks.CollisionTests Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>collision_checks</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html">CollisionTests</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.collision_checks.CollisionTests Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.unittest.collision_checks.CollisionTests:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.png" border="0" usemap="#f110__gym_8unittest_8collision__checks_8_collision_tests_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8unittest_8collision__checks_8_collision_tests_inherit__map" id="f110__gym_8unittest_8collision__checks_8_collision_tests_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,204,121"/>
-<area shape="rect" title=" " alt="" coords="65,5,145,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.unittest.collision_checks.CollisionTests:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.png" border="0" usemap="#f110__gym_8unittest_8collision__checks_8_collision_tests_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8unittest_8collision__checks_8_collision_tests_coll__map" id="f110__gym_8unittest_8collision__checks_8_collision_tests_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,204,121"/>
-<area shape="rect" title=" " alt="" coords="65,5,145,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:acf1126ffde5105c455d850ff5286e4b7"><td class="memItemLeft" align="right" valign="top"><a id="acf1126ffde5105c455d850ff5286e4b7"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr>
-<tr class="separator:acf1126ffde5105c455d850ff5286e4b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8de52029859d1c7731e5683d23ccf007"><td class="memItemLeft" align="right" valign="top"><a id="a8de52029859d1c7731e5683d23ccf007"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_get_vert</b> (self)</td></tr>
-<tr class="separator:a8de52029859d1c7731e5683d23ccf007"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acc104fececdc2724a5c5e8998100b633"><td class="memItemLeft" align="right" valign="top"><a id="acc104fececdc2724a5c5e8998100b633"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_get_vert_fps</b> (self)</td></tr>
-<tr class="separator:acc104fececdc2724a5c5e8998100b633"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8ea861cfb3721bfa636ada8787cc3b85"><td class="memItemLeft" align="right" valign="top"><a id="a8ea861cfb3721bfa636ada8787cc3b85"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_random_collision</b> (self)</td></tr>
-<tr class="separator:a8ea861cfb3721bfa636ada8787cc3b85"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab764a2cbf50b5cab461c5d6d017856b9"><td class="memItemLeft" align="right" valign="top"><a id="ab764a2cbf50b5cab461c5d6d017856b9"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_fps</b> (self)</td></tr>
-<tr class="separator:ab764a2cbf50b5cab461c5d6d017856b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a0585073942d116dea495e02c4b79f7f0"><td class="memItemLeft" align="right" valign="top"><a id="a0585073942d116dea495e02c4b79f7f0"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>vertices1</b></td></tr>
-<tr class="separator:a0585073942d116dea495e02c4b79f7f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a407fd8ac2cb6e79b84590434fc6d7c6d"><td class="memItemLeft" align="right" valign="top"><a id="a407fd8ac2cb6e79b84590434fc6d7c6d"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>length</b></td></tr>
-<tr class="separator:a407fd8ac2cb6e79b84590434fc6d7c6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4b7f88b6f9a80c8bef02a1856ac068de"><td class="memItemLeft" align="right" valign="top"><a id="a4b7f88b6f9a80c8bef02a1856ac068de"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>width</b></td></tr>
-<tr class="separator:a4b7f88b6f9a80c8bef02a1856ac068de"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.png b/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.png
deleted file mode 100644
index 7001cad65d18558f9a6b9e4fe0074aeafc5536c8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 906
zcmeAS@N?(olHy`uVBq!ia0y~yU{nCI12~w0WFJSwaUdlT;1lBd|Nnm=^TnI5rTvE{
z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z%1$M;uuoF_;zk!@frmlH~+X_fB)Cl
zyyX%S*u3lVt$Vp?7Ms^;JW%9ZKVzn9T3WGzr<Y2m8`q>I4I(O@jG7*kn1Uv#u-?(j
zn3<P5DJuH^^kU~p+5P)}-=0*$ZZGKA-t@=y`c|(=OK$IU4EX63eds}9=;0+St-HT0
ze6stNP;7g>_oRKD(yTL0OlC%X<}@uS-TRnf(wE*ll8%$UuC4tuae=2(+50_P7X(#!
zKk8MzSzfAn%_?u@9eZiV--~RgJg)3I%e_~n*7iGx)>rps>rP&Y3TWQ8`+a1y-PbSj
z+vPI;xvXOQzC6Nv`K`c~{pU5+Jpb#%+`L4=lgq<#lE{Q66-@<J&maeor(7q@j7&;1
zV|@_*k#PdU8Ba%s<25x)6dRm_1P&N>&o^NyaN%O&@U&%M)Z|c5U}a=kqR`MF!XhxC
ziGe9dz`+41>ETF;<bFSh3)q=G7}C%T7v6H^_4)lz^DOT(=xy4w*=)hqmmY@~`=?n;
zF@1Pj_-W4EMe{-&vhUvaz2JQQSH|DUeQ6Dx*I5|nJe;#2_htI>85;9Ai-P{>)alFh
zPn&&vYjwfS?QvIQZ`SNic=K&R?t8I)TNmHH`tMmv$G089#YJ8Je!q^o+fW-O%cZ4%
z)l>fQ?+3Sc)gI1RTg+K@;g1jd<9=&XAA>U~23zvD{;y@*7b{xwclB-OzrWJ^{r2ta
z@49Oe{q&A~bz+y}g&EWIIbN-2a$Nf7?dtz=#nbitS*HH^+N7pgR@F6Y{okl~uZ@Q?
z9VdHLs$>Y22D1E|{d?ki-@=fq@g5ta?x;1@RQ~Fc5=k%LB3t@$`SOarY+Dx}pPO`-
zE5_!VcT_(|xsge;y8p(93}4NUD{kAHeX}UF>#k<lHM?aJ2aMY?SSqULaaB!OFJyc8
z7*maUX;y>$;~JK&Cs=+M$9New>~}+rGo7Y0XM~J5YyM}b5Lox)_U&&8z>LG->FVdQ
I&MBb@09|i@IsgCw

diff --git a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.map b/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.map
deleted file mode 100644
index 0cd1eeb0..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.collision_checks.CollisionTests" name="f110_gym.unittest.collision_checks.CollisionTests">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,204,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="65,5,145,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.md5
deleted file mode 100644
index 598630c7..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-9e664bc780db4cd0eb9d736d3f5eca76
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.png b/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__coll__graph.png
deleted file mode 100644
index 5c8238a17d21d98d49f6b9871830d1c8be587839..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5073
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
aPr|J*2nTAaWi7Br2hr6uf>*&DBL4%Jg1#~U

diff --git a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.map b/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.map
deleted file mode 100644
index 0cd1eeb0..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.collision_checks.CollisionTests" name="f110_gym.unittest.collision_checks.CollisionTests">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,204,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="65,5,145,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.md5
deleted file mode 100644
index 598630c7..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-9e664bc780db4cd0eb9d736d3f5eca76
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.png b/docs/html/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests__inherit__graph.png
deleted file mode 100644
index 5c8238a17d21d98d49f6b9871830d1c8be587839..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5073
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
aPr|J*2nTAaWi7Br2hr6uf>*&DBL4%Jg1#~U

diff --git a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test-members.html b/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test-members.html
deleted file mode 100644
index cb0f7d66..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test-members.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>dynamics_test</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">DynamicsTest</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.dynamics_test.DynamicsTest Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>a_max</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>C_Sf</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>C_Sr</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>h</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>I</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>lf</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lr</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>m</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mu</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>s_max</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>s_min</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>setUp</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>sv_max</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>sv_min</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_derivatives</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_zeroinit_acc</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_zeroinit_dec</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_zeroinit_roll</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_zeroinit_rollleft</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>v_max</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>v_min</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>v_switch</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html b/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html
deleted file mode 100644
index e5445eaf..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.unittest.dynamics_test.DynamicsTest Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>dynamics_test</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html">DynamicsTest</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.dynamics_test.DynamicsTest Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.unittest.dynamics_test.DynamicsTest:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.png" border="0" usemap="#f110__gym_8unittest_8dynamics__test_8_dynamics_test_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8unittest_8dynamics__test_8_dynamics_test_inherit__map" id="f110__gym_8unittest_8dynamics__test_8_dynamics_test_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,213,121"/>
-<area shape="rect" title=" " alt="" coords="69,5,149,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.unittest.dynamics_test.DynamicsTest:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.png" border="0" usemap="#f110__gym_8unittest_8dynamics__test_8_dynamics_test_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8unittest_8dynamics__test_8_dynamics_test_coll__map" id="f110__gym_8unittest_8dynamics__test_8_dynamics_test_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,213,121"/>
-<area shape="rect" title=" " alt="" coords="69,5,149,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:ae9a07469d0654888251d3bf6e76b6b49"><td class="memItemLeft" align="right" valign="top"><a id="ae9a07469d0654888251d3bf6e76b6b49"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr>
-<tr class="separator:ae9a07469d0654888251d3bf6e76b6b49"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a084bad82c8b5d2879bcdd84ff4ddfbcb"><td class="memItemLeft" align="right" valign="top"><a id="a084bad82c8b5d2879bcdd84ff4ddfbcb"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_derivatives</b> (self)</td></tr>
-<tr class="separator:a084bad82c8b5d2879bcdd84ff4ddfbcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2119ee12155d35d32dfdff6ef9948635"><td class="memItemLeft" align="right" valign="top"><a id="a2119ee12155d35d32dfdff6ef9948635"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_zeroinit_roll</b> (self)</td></tr>
-<tr class="separator:a2119ee12155d35d32dfdff6ef9948635"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7be24bdc75f206643e35081eae280120"><td class="memItemLeft" align="right" valign="top"><a id="a7be24bdc75f206643e35081eae280120"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_zeroinit_dec</b> (self)</td></tr>
-<tr class="separator:a7be24bdc75f206643e35081eae280120"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaf4fa412b0c16cb6bc89dd58b36d8e44"><td class="memItemLeft" align="right" valign="top"><a id="aaf4fa412b0c16cb6bc89dd58b36d8e44"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_zeroinit_acc</b> (self)</td></tr>
-<tr class="separator:aaf4fa412b0c16cb6bc89dd58b36d8e44"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a386d5445884c46ecec8205ada9a3a185"><td class="memItemLeft" align="right" valign="top"><a id="a386d5445884c46ecec8205ada9a3a185"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_zeroinit_rollleft</b> (self)</td></tr>
-<tr class="separator:a386d5445884c46ecec8205ada9a3a185"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a48626036e76ba11fd936f4de26bf6ce0"><td class="memItemLeft" align="right" valign="top"><a id="a48626036e76ba11fd936f4de26bf6ce0"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>mu</b></td></tr>
-<tr class="separator:a48626036e76ba11fd936f4de26bf6ce0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a74cd8e77b722fb8d92a392a4fc2dcbc7"><td class="memItemLeft" align="right" valign="top"><a id="a74cd8e77b722fb8d92a392a4fc2dcbc7"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>C_Sf</b></td></tr>
-<tr class="separator:a74cd8e77b722fb8d92a392a4fc2dcbc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6d3bbaee07094af4095dfd258cebd10d"><td class="memItemLeft" align="right" valign="top"><a id="a6d3bbaee07094af4095dfd258cebd10d"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>C_Sr</b></td></tr>
-<tr class="separator:a6d3bbaee07094af4095dfd258cebd10d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7c0f434a69248caa58b34a50dbca3f2e"><td class="memItemLeft" align="right" valign="top"><a id="a7c0f434a69248caa58b34a50dbca3f2e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>lf</b></td></tr>
-<tr class="separator:a7c0f434a69248caa58b34a50dbca3f2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac9ac96fd528006d18d309b0a49c3b8b9"><td class="memItemLeft" align="right" valign="top"><a id="ac9ac96fd528006d18d309b0a49c3b8b9"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>lr</b></td></tr>
-<tr class="separator:ac9ac96fd528006d18d309b0a49c3b8b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a779b25a77fc53165bd39448ece8d9f7c"><td class="memItemLeft" align="right" valign="top"><a id="a779b25a77fc53165bd39448ece8d9f7c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>h</b></td></tr>
-<tr class="separator:a779b25a77fc53165bd39448ece8d9f7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a90efa4ba6c24eb526afa67eceb153be2"><td class="memItemLeft" align="right" valign="top"><a id="a90efa4ba6c24eb526afa67eceb153be2"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>m</b></td></tr>
-<tr class="separator:a90efa4ba6c24eb526afa67eceb153be2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aebb331386dd83145c82d5bedf1cae5b1"><td class="memItemLeft" align="right" valign="top"><a id="aebb331386dd83145c82d5bedf1cae5b1"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>I</b></td></tr>
-<tr class="separator:aebb331386dd83145c82d5bedf1cae5b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab762929e3e5bb2db0c153a203ffe5273"><td class="memItemLeft" align="right" valign="top"><a id="ab762929e3e5bb2db0c153a203ffe5273"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>s_min</b></td></tr>
-<tr class="separator:ab762929e3e5bb2db0c153a203ffe5273"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8089d918c83d2631fbd7550557049956"><td class="memItemLeft" align="right" valign="top"><a id="a8089d918c83d2631fbd7550557049956"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>s_max</b></td></tr>
-<tr class="separator:a8089d918c83d2631fbd7550557049956"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78c38627c81a0da299fcec08c600bfd1"><td class="memItemLeft" align="right" valign="top"><a id="a78c38627c81a0da299fcec08c600bfd1"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>sv_min</b></td></tr>
-<tr class="separator:a78c38627c81a0da299fcec08c600bfd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac16553e55f0c5e695994719ce1381b5b"><td class="memItemLeft" align="right" valign="top"><a id="ac16553e55f0c5e695994719ce1381b5b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>sv_max</b></td></tr>
-<tr class="separator:ac16553e55f0c5e695994719ce1381b5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adadbd3f491f56eaee3da91244cf8cc06"><td class="memItemLeft" align="right" valign="top"><a id="adadbd3f491f56eaee3da91244cf8cc06"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>v_min</b></td></tr>
-<tr class="separator:adadbd3f491f56eaee3da91244cf8cc06"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a906eb31597c8374bb916f6644780dc0c"><td class="memItemLeft" align="right" valign="top"><a id="a906eb31597c8374bb916f6644780dc0c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>v_max</b></td></tr>
-<tr class="separator:a906eb31597c8374bb916f6644780dc0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6d2c11940d9e0529f4ecba00d92fb7de"><td class="memItemLeft" align="right" valign="top"><a id="a6d2c11940d9e0529f4ecba00d92fb7de"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>v_switch</b></td></tr>
-<tr class="separator:a6d2c11940d9e0529f4ecba00d92fb7de"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a90bf691612ff54dc56c54e03fe8a27f8"><td class="memItemLeft" align="right" valign="top"><a id="a90bf691612ff54dc56c54e03fe8a27f8"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>a_max</b></td></tr>
-<tr class="separator:a90bf691612ff54dc56c54e03fe8a27f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.png b/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.png
deleted file mode 100644
index 2d0a31554a35ea2da30e79dd9caa32f430904bbb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 883
zcmeAS@N?(olHy`uVBq!ia0y~yU=#+j12~vLB4-l+04a$8pAgso|NjG-FW!7D?LRaD
z$O7X72M(}y-jN4#IZA^3f*F8{K;Y`B5F-W#W+qP;$B+ufw{s6xZMNcJb)P-&d;MeY
z=7UyjK^~LuY}@}SGwOgs!i1-~f`YCtUldeUdh9P!^7ONusIq*H$E09Cm6Mf=C%<$n
z_IPFZetVm~=F!~p>WE2kr>b8+x!`$k!@`^0Dtr5<TV?8tUOv7rSNG@zyV_f4SSPpt
zI=r;8W~z$q?ClnunH;TEPi7kN+<Y;^VN%?|>Q^pY{r~p4`<125iv4_j&X#>Q)2`eI
z{5;|8T)Pjqj{UB`dUD%yzPly$@7{dR^sG`^Uv{ag(@Bi$>yFF**A~|=n_naK@%zl_
z3-+|>T-x^9Z@&6zhvGl0ugiM=YMmnNS#+vX#qz1kq&aBbm^sJAMdT;@2jd?M8Vzz!
zSq}X8p`qE}YRPDzrmD(%BG8Y)?G#5tuph&mBBlpZgc+94VXy$I(o|>gvt%qd#Yv{r
z=Vp+-f)|?^G>WDIja`f|w%lmz?ellbwygDF5TChjCi9Dl-}d`d6&!LrRk@U5$LWGo
zn+`G9Ufb?3b<6Yge&h4}8y?Q~V<@vI`jm0*t!eY*CyMvg_n&%urL5qtpSs`iXKSAd
zujvXt*&BJu{e<$*TmMqagV)usSNkfyy~i$=Z|<FSFU|MewVZy#YEJWl<9X9+9!)CV
zb8U6L`cnRRzO&+sPE_1Gxp(<3Nw4;P|FfGEf^ts%_B+)+iO-Mk*GWtD+4&VumY8nb
zSQ$NS=`!ZF7rpl3uj+u(dd4~Gk4@FzHf=67`gX^6S~K_Geb#fU)8EDTTA4gQ{>(2w
zs(kj5&bp#kAJ>1G{Ox(rCHG&R@j92fE(S;1%ja2s|99tEc&78TQd^JSg8I9bUOPkn
zKV34rbUA-a#I5!$=87rLQy7bEG+$2l%bUNjHg>)*Lw}L#=}#;S<(1Q(e=fcB%lN?d
upC?0$3g0pOVMd9zb5B&17M<AtpCLJX*$W>t;myDt!r<xZ=d#Wzp$PzW<(_8%

diff --git a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.map b/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.map
deleted file mode 100644
index 386c51bc..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.dynamics_test.DynamicsTest" name="f110_gym.unittest.dynamics_test.DynamicsTest">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,213,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="69,5,149,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.md5
deleted file mode 100644
index e87063ea..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-8425abfb79b383b7ff3bf50717bb48e4
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.png b/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__coll__graph.png
deleted file mode 100644
index 9208fce28274e631d436508c1365fb607e2d6389..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4626
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
LRY#=?ZvEn4LUq(-

diff --git a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.map b/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.map
deleted file mode 100644
index 386c51bc..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.dynamics_test.DynamicsTest" name="f110_gym.unittest.dynamics_test.DynamicsTest">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,213,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="69,5,149,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.md5
deleted file mode 100644
index e87063ea..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-8425abfb79b383b7ff3bf50717bb48e4
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.png b/docs/html/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test__inherit__graph.png
deleted file mode 100644
index 9208fce28274e631d436508c1365fb607e2d6389..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4626
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
LRY#=?ZvEn4LUq(-

diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera-members.html b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera-members.html
deleted file mode 100644
index df7de256..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera-members.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>pyglet_test</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">Camera</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.pyglet_test.Camera Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__enter__</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>__exit__</b>(self, exception_type, exception_value, traceback) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__init__</b>(self, pyglet.window.Window window, scroll_speed=1, min_zoom=1, max_zoom=4) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>max_zoom</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>min_zoom</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#aab35e83f0748c949b8e3a8414097d193">move</a>(self, axis_x, axis_y)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>offset_x</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>offset_y</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a3d2948dc5b1a9d2a6c597a2850ac989b">position</a>(self)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#ac8e5a2d90df8cd68463746be6e65bee8">position</a>(self, value)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scroll_speed</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>zoom</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a6f0bedfc6f5801b398d5ce537d70c059">zoom</a>(self, value)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html
deleted file mode 100644
index 6bf54496..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html
+++ /dev/null
@@ -1,255 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.unittest.pyglet_test.Camera Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>pyglet_test</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">Camera</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.pyglet_test.Camera Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.unittest.pyglet_test.Camera:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.png" border="0" usemap="#f110__gym_8unittest_8pyglet__test_8_camera_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8unittest_8pyglet__test_8_camera_inherit__map" id="f110__gym_8unittest_8pyglet__test_8_camera_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,5,192,47"/>
-<area shape="rect" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html" title=" " alt="" coords="5,95,192,136"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:aa972fc123abe2bc9f8dd5bdba0025f20"><td class="memItemLeft" align="right" valign="top"><a id="aa972fc123abe2bc9f8dd5bdba0025f20"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__init__</b> (self, pyglet.window.Window window, scroll_speed=1, min_zoom=1, max_zoom=4)</td></tr>
-<tr class="separator:aa972fc123abe2bc9f8dd5bdba0025f20"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab01149f5d7b76ca39aa8c2604c8a65db"><td class="memItemLeft" align="right" valign="top"><a id="ab01149f5d7b76ca39aa8c2604c8a65db"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>zoom</b> (self)</td></tr>
-<tr class="separator:ab01149f5d7b76ca39aa8c2604c8a65db"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f0bedfc6f5801b398d5ce537d70c059"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a6f0bedfc6f5801b398d5ce537d70c059">zoom</a> (self, value)</td></tr>
-<tr class="separator:a6f0bedfc6f5801b398d5ce537d70c059"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3d2948dc5b1a9d2a6c597a2850ac989b"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a3d2948dc5b1a9d2a6c597a2850ac989b">position</a> (self)</td></tr>
-<tr class="separator:a3d2948dc5b1a9d2a6c597a2850ac989b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac8e5a2d90df8cd68463746be6e65bee8"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#ac8e5a2d90df8cd68463746be6e65bee8">position</a> (self, value)</td></tr>
-<tr class="separator:ac8e5a2d90df8cd68463746be6e65bee8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aab35e83f0748c949b8e3a8414097d193"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#aab35e83f0748c949b8e3a8414097d193">move</a> (self, axis_x, axis_y)</td></tr>
-<tr class="separator:aab35e83f0748c949b8e3a8414097d193"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1b32a1178f97029e2833a1f127a2c114"><td class="memItemLeft" align="right" valign="top"><a id="a1b32a1178f97029e2833a1f127a2c114"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>begin</b> (self)</td></tr>
-<tr class="separator:a1b32a1178f97029e2833a1f127a2c114"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a30b46cfaa38e4956b06bfe9e98c3cbe3"><td class="memItemLeft" align="right" valign="top"><a id="a30b46cfaa38e4956b06bfe9e98c3cbe3"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>end</b> (self)</td></tr>
-<tr class="separator:a30b46cfaa38e4956b06bfe9e98c3cbe3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7823f2901412f9075d7de211c14ad534"><td class="memItemLeft" align="right" valign="top"><a id="a7823f2901412f9075d7de211c14ad534"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__enter__</b> (self)</td></tr>
-<tr class="separator:a7823f2901412f9075d7de211c14ad534"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a05542a21a9fa4adc9bcac8c77d37c2ad"><td class="memItemLeft" align="right" valign="top"><a id="a05542a21a9fa4adc9bcac8c77d37c2ad"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__exit__</b> (self, exception_type, exception_value, traceback)</td></tr>
-<tr class="separator:a05542a21a9fa4adc9bcac8c77d37c2ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:a81dae02fbeac037bfcba9afeeac9a0ca"><td class="memItemLeft" align="right" valign="top"><a id="a81dae02fbeac037bfcba9afeeac9a0ca"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>scroll_speed</b></td></tr>
-<tr class="separator:a81dae02fbeac037bfcba9afeeac9a0ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa8efeba81038cc57db534857a61b0d4b"><td class="memItemLeft" align="right" valign="top"><a id="aa8efeba81038cc57db534857a61b0d4b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>max_zoom</b></td></tr>
-<tr class="separator:aa8efeba81038cc57db534857a61b0d4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa5e9b9a6cca61ed9f997cd23ed1ea8b6"><td class="memItemLeft" align="right" valign="top"><a id="aa5e9b9a6cca61ed9f997cd23ed1ea8b6"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>min_zoom</b></td></tr>
-<tr class="separator:aa5e9b9a6cca61ed9f997cd23ed1ea8b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2f36f3e98a13b1cb3513bb28ee49bfa3"><td class="memItemLeft" align="right" valign="top"><a id="a2f36f3e98a13b1cb3513bb28ee49bfa3"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>offset_x</b></td></tr>
-<tr class="separator:a2f36f3e98a13b1cb3513bb28ee49bfa3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a92ee123bd19379417dd3e36759024df9"><td class="memItemLeft" align="right" valign="top"><a id="a92ee123bd19379417dd3e36759024df9"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>offset_y</b></td></tr>
-<tr class="separator:a92ee123bd19379417dd3e36759024df9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment">A simple 2D camera that contains the speed and offset.</pre> </div><h2 class="groupheader">Member Function Documentation</h2>
-<a id="aab35e83f0748c949b8e3a8414097d193"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aab35e83f0748c949b8e3a8414097d193">&#9670;&nbsp;</a></span>move()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.unittest.pyglet_test.Camera.move </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>axis_x</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>axis_y</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Move axis direction with scroll_speed.
-    Example: Move left -&gt; move(-1, 0)</pre> 
-</div>
-</div>
-<a id="a3d2948dc5b1a9d2a6c597a2850ac989b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3d2948dc5b1a9d2a6c597a2850ac989b">&#9670;&nbsp;</a></span>position() <span class="overload">[1/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.unittest.pyglet_test.Camera.position </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Query the current offset.</pre> 
-</div>
-</div>
-<a id="ac8e5a2d90df8cd68463746be6e65bee8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac8e5a2d90df8cd68463746be6e65bee8">&#9670;&nbsp;</a></span>position() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.unittest.pyglet_test.Camera.position </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Set the scroll offset directly.</pre> 
-</div>
-</div>
-<a id="a6f0bedfc6f5801b398d5ce537d70c059"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6f0bedfc6f5801b398d5ce537d70c059">&#9670;&nbsp;</a></span>zoom()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.unittest.pyglet_test.Camera.zoom </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Here we set zoom, clamp value to minimum of min_zoom and max of max_zoom.</pre> 
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.map b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.map
deleted file mode 100644
index 45807678..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.pyglet_test.Camera" name="f110_gym.unittest.pyglet_test.Camera">
-<area shape="rect" id="node1" title=" " alt="" coords="5,5,192,47"/>
-<area shape="rect" id="node2" href="$classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html" title=" " alt="" coords="5,95,192,136"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.md5
deleted file mode 100644
index 69744d3f..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-ed93bf5dfa5d73ea78bbb103858facd1
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.png b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera__inherit__graph.png
deleted file mode 100644
index e017fa643723c89aef62fec4ea87378dae410d11..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5903
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

diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera-members.html b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera-members.html
deleted file mode 100644
index fbd72124..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera-members.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>pyglet_test</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html">CenteredCamera</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.pyglet_test.CenteredCamera Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html">f110_gym.unittest.pyglet_test.CenteredCamera</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__enter__</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>__exit__</b>(self, exception_type, exception_value, traceback) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__init__</b>(self, pyglet.window.Window window, scroll_speed=1, min_zoom=1, max_zoom=4) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html">f110_gym.unittest.pyglet_test.CenteredCamera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html">f110_gym.unittest.pyglet_test.CenteredCamera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html">f110_gym.unittest.pyglet_test.CenteredCamera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html">f110_gym.unittest.pyglet_test.CenteredCamera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>max_zoom</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>min_zoom</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#aab35e83f0748c949b8e3a8414097d193">move</a>(self, axis_x, axis_y)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>offset_x</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>offset_y</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a3d2948dc5b1a9d2a6c597a2850ac989b">position</a>(self)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#ac8e5a2d90df8cd68463746be6e65bee8">position</a>(self, value)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>scroll_speed</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>zoom</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a6f0bedfc6f5801b398d5ce537d70c059">zoom</a>(self, value)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html
deleted file mode 100644
index 12ed05b2..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.unittest.pyglet_test.CenteredCamera Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>pyglet_test</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html">CenteredCamera</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.pyglet_test.CenteredCamera Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.unittest.pyglet_test.CenteredCamera:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.png" border="0" usemap="#f110__gym_8unittest_8pyglet__test_8_centered_camera_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8unittest_8pyglet__test_8_centered_camera_inherit__map" id="f110__gym_8unittest_8pyglet__test_8_centered_camera_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,95,192,136"/>
-<area shape="rect" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html" title=" " alt="" coords="5,5,192,47"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.unittest.pyglet_test.CenteredCamera:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.png" border="0" usemap="#f110__gym_8unittest_8pyglet__test_8_centered_camera_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8unittest_8pyglet__test_8_centered_camera_coll__map" id="f110__gym_8unittest_8pyglet__test_8_centered_camera_coll__map">
-<area shape="rect" title=" " alt="" coords="5,95,192,136"/>
-<area shape="rect" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html" title=" " alt="" coords="5,5,192,47"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:ae864ffed52c4415558b3bd15ad42c87a"><td class="memItemLeft" align="right" valign="top"><a id="ae864ffed52c4415558b3bd15ad42c87a"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>begin</b> (self)</td></tr>
-<tr class="separator:ae864ffed52c4415558b3bd15ad42c87a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a37149e6bf7b5e551f38201696d01794e"><td class="memItemLeft" align="right" valign="top"><a id="a37149e6bf7b5e551f38201696d01794e"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>end</b> (self)</td></tr>
-<tr class="separator:a37149e6bf7b5e551f38201696d01794e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="inherit_header pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td></tr>
-<tr class="memitem:aa972fc123abe2bc9f8dd5bdba0025f20 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top"><a id="aa972fc123abe2bc9f8dd5bdba0025f20"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__init__</b> (self, pyglet.window.Window window, scroll_speed=1, min_zoom=1, max_zoom=4)</td></tr>
-<tr class="separator:aa972fc123abe2bc9f8dd5bdba0025f20 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab01149f5d7b76ca39aa8c2604c8a65db inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top"><a id="ab01149f5d7b76ca39aa8c2604c8a65db"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>zoom</b> (self)</td></tr>
-<tr class="separator:ab01149f5d7b76ca39aa8c2604c8a65db inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f0bedfc6f5801b398d5ce537d70c059 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a6f0bedfc6f5801b398d5ce537d70c059">zoom</a> (self, value)</td></tr>
-<tr class="separator:a6f0bedfc6f5801b398d5ce537d70c059 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3d2948dc5b1a9d2a6c597a2850ac989b inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a3d2948dc5b1a9d2a6c597a2850ac989b">position</a> (self)</td></tr>
-<tr class="separator:a3d2948dc5b1a9d2a6c597a2850ac989b inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac8e5a2d90df8cd68463746be6e65bee8 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#ac8e5a2d90df8cd68463746be6e65bee8">position</a> (self, value)</td></tr>
-<tr class="separator:ac8e5a2d90df8cd68463746be6e65bee8 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aab35e83f0748c949b8e3a8414097d193 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#aab35e83f0748c949b8e3a8414097d193">move</a> (self, axis_x, axis_y)</td></tr>
-<tr class="separator:aab35e83f0748c949b8e3a8414097d193 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7823f2901412f9075d7de211c14ad534 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top"><a id="a7823f2901412f9075d7de211c14ad534"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__enter__</b> (self)</td></tr>
-<tr class="separator:a7823f2901412f9075d7de211c14ad534 inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a05542a21a9fa4adc9bcac8c77d37c2ad inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top"><a id="a05542a21a9fa4adc9bcac8c77d37c2ad"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__exit__</b> (self, exception_type, exception_value, traceback)</td></tr>
-<tr class="separator:a05542a21a9fa4adc9bcac8c77d37c2ad inherit pub_methods_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
-Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html">f110_gym.unittest.pyglet_test.Camera</a></td></tr>
-<tr class="memitem:a81dae02fbeac037bfcba9afeeac9a0ca inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top"><a id="a81dae02fbeac037bfcba9afeeac9a0ca"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>scroll_speed</b></td></tr>
-<tr class="separator:a81dae02fbeac037bfcba9afeeac9a0ca inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa8efeba81038cc57db534857a61b0d4b inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top"><a id="aa8efeba81038cc57db534857a61b0d4b"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>max_zoom</b></td></tr>
-<tr class="separator:aa8efeba81038cc57db534857a61b0d4b inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa5e9b9a6cca61ed9f997cd23ed1ea8b6 inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top"><a id="aa5e9b9a6cca61ed9f997cd23ed1ea8b6"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>min_zoom</b></td></tr>
-<tr class="separator:aa5e9b9a6cca61ed9f997cd23ed1ea8b6 inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2f36f3e98a13b1cb3513bb28ee49bfa3 inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top"><a id="a2f36f3e98a13b1cb3513bb28ee49bfa3"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>offset_x</b></td></tr>
-<tr class="separator:a2f36f3e98a13b1cb3513bb28ee49bfa3 inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a92ee123bd19379417dd3e36759024df9 inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memItemLeft" align="right" valign="top"><a id="a92ee123bd19379417dd3e36759024df9"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>offset_y</b></td></tr>
-<tr class="separator:a92ee123bd19379417dd3e36759024df9 inherit pub_attribs_classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment">A simple 2D camera class. 0, 0 will be the center of the screen, as opposed to the bottom left.</pre> </div><hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.map b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.map
deleted file mode 100644
index f80afe53..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.pyglet_test.CenteredCamera" name="f110_gym.unittest.pyglet_test.CenteredCamera">
-<area shape="rect" id="node1" title=" " alt="" coords="5,95,192,136"/>
-<area shape="rect" id="node2" href="$classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html" title=" " alt="" coords="5,5,192,47"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.md5
deleted file mode 100644
index a1b471d6..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-9ead0e598ba3028279f78ce15cdd0b0f
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.png b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__coll__graph.png
deleted file mode 100644
index 57e3e87f3321f75b48d063fd4ff3c4b2103c7e97..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5857
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
F{{apjo>Tw;

diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.map b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.map
deleted file mode 100644
index f80afe53..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.pyglet_test.CenteredCamera" name="f110_gym.unittest.pyglet_test.CenteredCamera">
-<area shape="rect" id="node1" title=" " alt="" coords="5,95,192,136"/>
-<area shape="rect" id="node2" href="$classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html" title=" " alt="" coords="5,5,192,47"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.md5
deleted file mode 100644
index a1b471d6..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-9ead0e598ba3028279f78ce15cdd0b0f
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.png b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera__inherit__graph.png
deleted file mode 100644
index 57e3e87f3321f75b48d063fd4ff3c4b2103c7e97..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5857
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
F{{apjo>Tw;

diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app-members.html b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app-members.html
deleted file mode 100644
index 7dc378cb..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app-members.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>pyglet_test_camera</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">App</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.pyglet_test_camera.App Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__init__</b>(self, width, height, *args, **kwargs) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>bottom</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>init_gl</b>(self, width, height) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>left</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>on_draw</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>on_mouse_drag</b>(self, x, y, dx, dy, buttons, modifiers) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>on_mouse_scroll</b>(self, x, y, dx, dy) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>on_resize</b>(self, width, height) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>right</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>run</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>top</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>zoom_level</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>zoomed_height</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>zoomed_width</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html
deleted file mode 100644
index d816d48f..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.unittest.pyglet_test_camera.App Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>pyglet_test_camera</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html">App</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.pyglet_test_camera.App Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.unittest.pyglet_test_camera.App:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.png" border="0" usemap="#f110__gym_8unittest_8pyglet__test__camera_8_app_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8unittest_8pyglet__test__camera_8_app_inherit__map" id="f110__gym_8unittest_8pyglet__test__camera_8_app_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,192,121"/>
-<area shape="rect" title=" " alt="" coords="8,5,189,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.unittest.pyglet_test_camera.App:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.png" border="0" usemap="#f110__gym_8unittest_8pyglet__test__camera_8_app_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8unittest_8pyglet__test__camera_8_app_coll__map" id="f110__gym_8unittest_8pyglet__test__camera_8_app_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,192,121"/>
-<area shape="rect" title=" " alt="" coords="8,5,189,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a199a531d847f94eb9d32b481c2af26e1"><td class="memItemLeft" align="right" valign="top"><a id="a199a531d847f94eb9d32b481c2af26e1"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__init__</b> (self, width, height, *args, **kwargs)</td></tr>
-<tr class="separator:a199a531d847f94eb9d32b481c2af26e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abadceb7d7c110cfa99df741b6ccae7e0"><td class="memItemLeft" align="right" valign="top"><a id="abadceb7d7c110cfa99df741b6ccae7e0"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>init_gl</b> (self, width, height)</td></tr>
-<tr class="separator:abadceb7d7c110cfa99df741b6ccae7e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4d55c63110f9bd78721a57e88e199cd8"><td class="memItemLeft" align="right" valign="top"><a id="a4d55c63110f9bd78721a57e88e199cd8"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>on_resize</b> (self, width, height)</td></tr>
-<tr class="separator:a4d55c63110f9bd78721a57e88e199cd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab20811f9348c1eb9beb45c95e6b1ba42"><td class="memItemLeft" align="right" valign="top"><a id="ab20811f9348c1eb9beb45c95e6b1ba42"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>on_mouse_drag</b> (self, x, y, dx, dy, buttons, modifiers)</td></tr>
-<tr class="separator:ab20811f9348c1eb9beb45c95e6b1ba42"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3846658fe03460fa2f057e5b954fc28f"><td class="memItemLeft" align="right" valign="top"><a id="a3846658fe03460fa2f057e5b954fc28f"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>on_mouse_scroll</b> (self, x, y, dx, dy)</td></tr>
-<tr class="separator:a3846658fe03460fa2f057e5b954fc28f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abaf8b849008238cb0c17901b87329a71"><td class="memItemLeft" align="right" valign="top"><a id="abaf8b849008238cb0c17901b87329a71"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>on_draw</b> (self)</td></tr>
-<tr class="separator:abaf8b849008238cb0c17901b87329a71"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4478fc4a6666cf2d5cb5a3d574250404"><td class="memItemLeft" align="right" valign="top"><a id="a4478fc4a6666cf2d5cb5a3d574250404"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>run</b> (self)</td></tr>
-<tr class="separator:a4478fc4a6666cf2d5cb5a3d574250404"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:aaca4f571369fc95e45355634d41fc24e"><td class="memItemLeft" align="right" valign="top"><a id="aaca4f571369fc95e45355634d41fc24e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>left</b></td></tr>
-<tr class="separator:aaca4f571369fc95e45355634d41fc24e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9c3fdc6ea9bbe0407668091c4b6effb5"><td class="memItemLeft" align="right" valign="top"><a id="a9c3fdc6ea9bbe0407668091c4b6effb5"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>right</b></td></tr>
-<tr class="separator:a9c3fdc6ea9bbe0407668091c4b6effb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a155af5e767867bdf910d8b0936219b5a"><td class="memItemLeft" align="right" valign="top"><a id="a155af5e767867bdf910d8b0936219b5a"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>bottom</b></td></tr>
-<tr class="separator:a155af5e767867bdf910d8b0936219b5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2145d5c781e3f33fefd7b46af2fadd69"><td class="memItemLeft" align="right" valign="top"><a id="a2145d5c781e3f33fefd7b46af2fadd69"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>top</b></td></tr>
-<tr class="separator:a2145d5c781e3f33fefd7b46af2fadd69"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1e58de5242a50711d35ef7d422466a66"><td class="memItemLeft" align="right" valign="top"><a id="a1e58de5242a50711d35ef7d422466a66"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>zoom_level</b></td></tr>
-<tr class="separator:a1e58de5242a50711d35ef7d422466a66"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af92e414bc48f782207e5891ea82e3ad1"><td class="memItemLeft" align="right" valign="top"><a id="af92e414bc48f782207e5891ea82e3ad1"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>zoomed_width</b></td></tr>
-<tr class="separator:af92e414bc48f782207e5891ea82e3ad1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2f88138801a909d8826f61792745409f"><td class="memItemLeft" align="right" valign="top"><a id="a2f88138801a909d8826f61792745409f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>zoomed_height</b></td></tr>
-<tr class="separator:a2f88138801a909d8826f61792745409f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.map b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.map
deleted file mode 100644
index 4c0dc645..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.pyglet_test_camera.App" name="f110_gym.unittest.pyglet_test_camera.App">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,192,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="8,5,189,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.md5
deleted file mode 100644
index 40356a92..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-90b7d1a8632cd234acaf42a487be351d
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.png b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__coll__graph.png
deleted file mode 100644
index 22f1d2021836ed1c51d85cff3dc97d01c35b2954..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5726
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
E00=(2(EtDd

diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.map b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.map
deleted file mode 100644
index 4c0dc645..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.pyglet_test_camera.App" name="f110_gym.unittest.pyglet_test_camera.App">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,192,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="8,5,189,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.md5
deleted file mode 100644
index 40356a92..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-90b7d1a8632cd234acaf42a487be351d
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.png b/docs/html/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app__inherit__graph.png
deleted file mode 100644
index 22f1d2021836ed1c51d85cff3dc97d01c35b2954..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5726
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
E00=(2(EtDd

diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d-members.html b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d-members.html
deleted file mode 100644
index 5b78f6e2..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d-members.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>scan_sim</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">ScanSimulator2D</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.scan_sim.ScanSimulator2D Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>__init__</b>(self, num_beams, fov, std_dev=0.01, eps=0.0001, theta_dis=2000, max_range=30.0, seed=123) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>angle_increment</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cosines</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>dt</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>eps</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>fov</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_increment</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_height</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>map_img</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>map_resolution</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>map_width</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>max_range</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>num_beams</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>orig_c</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>orig_s</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>orig_x</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>orig_y</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>origin</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rng</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a038a0fc7e42df7827c175fdb3755f2c4">scan</a>(self, pose)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a00925f5100ae8b2e556154e8935ea86e">set_map</a>(self, map_path, map_ext)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>sines</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>std_dev</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>theta_dis</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>theta_index_increment</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html
deleted file mode 100644
index 8387e723..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html
+++ /dev/null
@@ -1,277 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.unittest.scan_sim.ScanSimulator2D Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>scan_sim</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html">ScanSimulator2D</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.scan_sim.ScanSimulator2D Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.unittest.scan_sim.ScanSimulator2D:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.png" border="0" usemap="#f110__gym_8unittest_8scan__sim_8_scan_simulator2_d_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8unittest_8scan__sim_8_scan_simulator2_d_inherit__map" id="f110__gym_8unittest_8scan__sim_8_scan_simulator2_d_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,180,121"/>
-<area shape="rect" title=" " alt="" coords="61,5,124,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.unittest.scan_sim.ScanSimulator2D:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.png" border="0" usemap="#f110__gym_8unittest_8scan__sim_8_scan_simulator2_d_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8unittest_8scan__sim_8_scan_simulator2_d_coll__map" id="f110__gym_8unittest_8scan__sim_8_scan_simulator2_d_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,180,121"/>
-<area shape="rect" title=" " alt="" coords="61,5,124,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:aaa079c96c4018da2b7e80388bcd2d417"><td class="memItemLeft" align="right" valign="top"><a id="aaa079c96c4018da2b7e80388bcd2d417"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>__init__</b> (self, num_beams, fov, std_dev=0.01, eps=0.0001, theta_dis=2000, max_range=30.0, seed=123)</td></tr>
-<tr class="separator:aaa079c96c4018da2b7e80388bcd2d417"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a00925f5100ae8b2e556154e8935ea86e"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a00925f5100ae8b2e556154e8935ea86e">set_map</a> (self, map_path, map_ext)</td></tr>
-<tr class="separator:a00925f5100ae8b2e556154e8935ea86e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a038a0fc7e42df7827c175fdb3755f2c4"><td class="memItemLeft" align="right" valign="top">def&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a038a0fc7e42df7827c175fdb3755f2c4">scan</a> (self, pose)</td></tr>
-<tr class="separator:a038a0fc7e42df7827c175fdb3755f2c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a492d1949d030fb6b8665f399db5cdb4d"><td class="memItemLeft" align="right" valign="top"><a id="a492d1949d030fb6b8665f399db5cdb4d"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>get_increment</b> (self)</td></tr>
-<tr class="separator:a492d1949d030fb6b8665f399db5cdb4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:ab651a44dfee70e7f2c2c8389b95e6e51"><td class="memItemLeft" align="right" valign="top"><a id="ab651a44dfee70e7f2c2c8389b95e6e51"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr>
-<tr class="separator:ab651a44dfee70e7f2c2c8389b95e6e51"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a675555c29ace0ea5ddea92835965e654"><td class="memItemLeft" align="right" valign="top"><a id="a675555c29ace0ea5ddea92835965e654"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr>
-<tr class="separator:a675555c29ace0ea5ddea92835965e654"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af5f188b7150482f5518461af89d61fe7"><td class="memItemLeft" align="right" valign="top"><a id="af5f188b7150482f5518461af89d61fe7"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>std_dev</b></td></tr>
-<tr class="separator:af5f188b7150482f5518461af89d61fe7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae0b3e8aec78d765f2c64fc274b9e447f"><td class="memItemLeft" align="right" valign="top"><a id="ae0b3e8aec78d765f2c64fc274b9e447f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>eps</b></td></tr>
-<tr class="separator:ae0b3e8aec78d765f2c64fc274b9e447f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aad699977c807e3ad150b6dac8b2bb1a0"><td class="memItemLeft" align="right" valign="top"><a id="aad699977c807e3ad150b6dac8b2bb1a0"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>theta_dis</b></td></tr>
-<tr class="separator:aad699977c807e3ad150b6dac8b2bb1a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a510e60d159e716bcd62b54dac8a69066"><td class="memItemLeft" align="right" valign="top"><a id="a510e60d159e716bcd62b54dac8a69066"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>max_range</b></td></tr>
-<tr class="separator:a510e60d159e716bcd62b54dac8a69066"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7cf918616a14c3d8f76bc359cf2f1c4c"><td class="memItemLeft" align="right" valign="top"><a id="a7cf918616a14c3d8f76bc359cf2f1c4c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>angle_increment</b></td></tr>
-<tr class="separator:a7cf918616a14c3d8f76bc359cf2f1c4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a52a218f72d96e62281f00e3aa01f6616"><td class="memItemLeft" align="right" valign="top"><a id="a52a218f72d96e62281f00e3aa01f6616"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>theta_index_increment</b></td></tr>
-<tr class="separator:a52a218f72d96e62281f00e3aa01f6616"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6fb0a8e58e42af2934c5f3e35ab3488e"><td class="memItemLeft" align="right" valign="top"><a id="a6fb0a8e58e42af2934c5f3e35ab3488e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>orig_c</b></td></tr>
-<tr class="separator:a6fb0a8e58e42af2934c5f3e35ab3488e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac1a4dcaf191c8308accbcf86999efd5c"><td class="memItemLeft" align="right" valign="top"><a id="ac1a4dcaf191c8308accbcf86999efd5c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>orig_s</b></td></tr>
-<tr class="separator:ac1a4dcaf191c8308accbcf86999efd5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49263002630bb21764217caa6c3314b7"><td class="memItemLeft" align="right" valign="top"><a id="a49263002630bb21764217caa6c3314b7"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>orig_x</b></td></tr>
-<tr class="separator:a49263002630bb21764217caa6c3314b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab6b56af3b1396d900b097d4e0463941f"><td class="memItemLeft" align="right" valign="top"><a id="ab6b56af3b1396d900b097d4e0463941f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>orig_y</b></td></tr>
-<tr class="separator:ab6b56af3b1396d900b097d4e0463941f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7b15deec5d81ddfa0c6297523cdfc295"><td class="memItemLeft" align="right" valign="top"><a id="a7b15deec5d81ddfa0c6297523cdfc295"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_height</b></td></tr>
-<tr class="separator:a7b15deec5d81ddfa0c6297523cdfc295"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac5acff270a2a66d20a8bb514001cc3c4"><td class="memItemLeft" align="right" valign="top"><a id="ac5acff270a2a66d20a8bb514001cc3c4"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_width</b></td></tr>
-<tr class="separator:ac5acff270a2a66d20a8bb514001cc3c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a935128be3649ba7d230f63bf7480bfa1"><td class="memItemLeft" align="right" valign="top"><a id="a935128be3649ba7d230f63bf7480bfa1"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_resolution</b></td></tr>
-<tr class="separator:a935128be3649ba7d230f63bf7480bfa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a184ddbfb8a5aaebb9c523625f716ad7c"><td class="memItemLeft" align="right" valign="top"><a id="a184ddbfb8a5aaebb9c523625f716ad7c"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>dt</b></td></tr>
-<tr class="separator:a184ddbfb8a5aaebb9c523625f716ad7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afcb7de24911c98dd85473247c7d4af17"><td class="memItemLeft" align="right" valign="top"><a id="afcb7de24911c98dd85473247c7d4af17"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>rng</b></td></tr>
-<tr class="separator:afcb7de24911c98dd85473247c7d4af17"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af2c50f973462f4717c9c02d6c8d47004"><td class="memItemLeft" align="right" valign="top"><a id="af2c50f973462f4717c9c02d6c8d47004"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>sines</b></td></tr>
-<tr class="separator:af2c50f973462f4717c9c02d6c8d47004"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a578ecb22495b2d227517b8a54a505c7e"><td class="memItemLeft" align="right" valign="top"><a id="a578ecb22495b2d227517b8a54a505c7e"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>cosines</b></td></tr>
-<tr class="separator:a578ecb22495b2d227517b8a54a505c7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a15778cb625d962a2481cbc34854044dd"><td class="memItemLeft" align="right" valign="top"><a id="a15778cb625d962a2481cbc34854044dd"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>map_img</b></td></tr>
-<tr class="separator:a15778cb625d962a2481cbc34854044dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a62fb5e7c6a7060685208643a265aaa95"><td class="memItemLeft" align="right" valign="top"><a id="a62fb5e7c6a7060685208643a265aaa95"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>origin</b></td></tr>
-<tr class="separator:a62fb5e7c6a7060685208643a265aaa95"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment">2D LIDAR scan simulator class
-
-Init params:
-    num_beams (int): number of beams in the scan
-    fov (float): field of view of the laser scan
-    std_dev (float, default=0.01): standard deviation of the generated whitenoise in the scan
-    eps (float, default=0.0001): ray tracing iteration termination condition
-    theta_dis (int, default=2000): number of steps to discretize the angles between 0 and 2pi for look up
-    max_range (float, default=30.0): maximum range of the laser
-    seed (int, default=123): seed for random number generator for the whitenoise in scan
-</pre> </div><h2 class="groupheader">Member Function Documentation</h2>
-<a id="a038a0fc7e42df7827c175fdb3755f2c4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a038a0fc7e42df7827c175fdb3755f2c4">&#9670;&nbsp;</a></span>scan()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.unittest.scan_sim.ScanSimulator2D.scan </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>pose</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Perform simulated 2D scan by pose on the given map
-
-    Args:
-pose (numpy.ndarray (3, )): pose of the scan frame (x, y, theta)
-
-    Returns:
-scan (numpy.ndarray (n, )): data array of the laserscan, n=num_beams
-
-    Raises:
-ValueError: when scan is called before a map is set
-</pre> 
-</div>
-</div>
-<a id="a00925f5100ae8b2e556154e8935ea86e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a00925f5100ae8b2e556154e8935ea86e">&#9670;&nbsp;</a></span>set_map()</h2>
-
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
-        <tr>
-          <td class="memname">def f110_gym.unittest.scan_sim.ScanSimulator2D.set_map </td>
-          <td>(</td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>self</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_path</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">&#160;</td>
-          <td class="paramname"><em>map_ext</em>&#160;</td>
-        </tr>
-        <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
-        </tr>
-      </table>
-</div><div class="memdoc">
-<pre class="fragment">Set the bitmap of the scan simulator by path
-
-    Args:
-map_path (str): path to the map yaml file
-map_ext (str): extension (image type) of the map image
-
-    Returns:
-flag (bool): if image reading and loading is successful
-</pre> 
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.png b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.png
deleted file mode 100644
index b4db5af92bb9b96ccbf1a306b4f5a820780e7aab..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 758
zcmeAS@N?(olHy`uVBq!ia0y~yVB`j}12~w0q~+EH4}g?JfKQ0)|NsAi%olIImi8Z-
z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+15>M~i(^Oy<J-9xCoNInarKW=`~UxV
zwzd;ThX47zt?#}pE%J`$ZM^JRarBH&6#KJxdb-X!M-JV!^#+r#qr_CdZD`59R>Cdz
z?%iCw?xRJs)>rFI|9h}Z^ZUDZ@2|M(a5a`b-o3PY_wVXb!|tk=iZvG9#|64QooZCL
zzjmiTKk@C#-M?#hb+zs`-+fRBXma!2#-qLgca-(-+|5_mD8OC*T?b6AX>FZ3^NR$-
z_1D}ELfi^Bu1`<sV0Bo|+6tm3c>sxN5o8i~`hZ4n;p1_rN@)d|F$qM3C2!nv@%Z^q
zTjm%r=x2Sr$&>Nzk<a1h*|XVatlTrF=7JnA_pO*md#1Wp3QNfN@PBZrKhN}HjUI=>
z>nBeYyEpATSDG&PO+KC9IOll&T;(_0ZEwFjm3a3;o5<_T@b-87)*Kht8dtUTKazT#
z8|!d4<z}&NgJ;~FjS<VU46mggnX+pA;zX0z+$&~lAC+`|v*X#kx2dJCn!cB3uA9Hn
z;^u=lp+1K*r+m2oB<7rAkiE1`w9(n7bg`YA>dr0NZ=JYt`xd?a-|~uAk4c@ZRlj!T
zLFNRVD<@i9@4V-a6ls6|?C6r|azB0j7X7=txg()j_WB9OdHZhZ^F<s9`&6`F;!y+Z
zX`N-_JqP!lR+_JTdDFSSdn@_QuHfHg`lFz4iJ7=x^Qmt;+@coASG+rV!*Z)>?)_uM
zOT<3J9k=CfNVl?m%J?teHg)49ZA-%tvjg^*<k%l5)!OT4$ua%$+8d(Gus<S6QH&uH
iOmK4>8^1LC$52$bR6g>~#42DSW$<+Mb6Mw<&;$Vb>t0&`

diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.map b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.map
deleted file mode 100644
index b6f340dd..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.scan_sim.ScanSimulator2D" name="f110_gym.unittest.scan_sim.ScanSimulator2D">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,180,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="61,5,124,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.md5
deleted file mode 100644
index 2b665ac3..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-1aedc27dc91e846dfaf29e4713d487a3
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.png b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__coll__graph.png
deleted file mode 100644
index 98d18f57e351339d5e12e00454c84e97df7fadc4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5160
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

diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.map b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.map
deleted file mode 100644
index b6f340dd..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.scan_sim.ScanSimulator2D" name="f110_gym.unittest.scan_sim.ScanSimulator2D">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,180,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="61,5,124,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.md5
deleted file mode 100644
index 2b665ac3..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-1aedc27dc91e846dfaf29e4713d487a3
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.png b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d__inherit__graph.png
deleted file mode 100644
index 98d18f57e351339d5e12e00454c84e97df7fadc4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5160
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

diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests-members.html b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests-members.html
deleted file mode 100644
index a284a0f9..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests-members.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Member List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>scan_sim</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">ScanTests</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.scan_sim.ScanTests Member List</div>  </div>
-</div><!--header-->
-<div class="contents">
-
-<p>This is the complete list of members for <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>, including all inherited members.</p>
-<table class="directory">
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>berlin_scan</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>fov</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>num_beams</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>num_test</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setUp</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>skirk_scan</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_fps</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_map_berlin</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>test_map_skirk</b>(self) (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-  <tr bgcolor="#f0f0f0"><td class="entry"><b>test_poses</b> (defined in <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a>)</td><td class="entry"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="entry"></td></tr>
-</table></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html
deleted file mode 100644
index 94cd03aa..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.unittest.scan_sim.ScanTests Class Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><b>scan_sim</b></li><li class="navelem"><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html">ScanTests</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-attribs">Public Attributes</a> &#124;
-<a href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests-members.html">List of all members</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.scan_sim.ScanTests Class Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="dynheader">
-Inheritance diagram for f110_gym.unittest.scan_sim.ScanTests:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.png" border="0" usemap="#f110__gym_8unittest_8scan__sim_8_scan_tests_inherit__map" alt="Inheritance graph"/></div>
-<map name="f110__gym_8unittest_8scan__sim_8_scan_tests_inherit__map" id="f110__gym_8unittest_8scan__sim_8_scan_tests_inherit__map">
-<area shape="rect" title=" " alt="" coords="5,80,180,121"/>
-<area shape="rect" title=" " alt="" coords="23,5,162,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<div class="dynheader">
-Collaboration diagram for f110_gym.unittest.scan_sim.ScanTests:</div>
-<div class="dyncontent">
-<div class="center"><img src="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.png" border="0" usemap="#f110__gym_8unittest_8scan__sim_8_scan_tests_coll__map" alt="Collaboration graph"/></div>
-<map name="f110__gym_8unittest_8scan__sim_8_scan_tests_coll__map" id="f110__gym_8unittest_8scan__sim_8_scan_tests_coll__map">
-<area shape="rect" title=" " alt="" coords="5,80,180,121"/>
-<area shape="rect" title=" " alt="" coords="23,5,162,32"/>
-</map>
-<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:a24b9cbdb8f7d0ed8cea83067baf28c5e"><td class="memItemLeft" align="right" valign="top"><a id="a24b9cbdb8f7d0ed8cea83067baf28c5e"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr>
-<tr class="separator:a24b9cbdb8f7d0ed8cea83067baf28c5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adef88a30b7aa6e2f3daa6ffecd979562"><td class="memItemLeft" align="right" valign="top"><a id="adef88a30b7aa6e2f3daa6ffecd979562"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_map_berlin</b> (self)</td></tr>
-<tr class="separator:adef88a30b7aa6e2f3daa6ffecd979562"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa76985ccd5313eaf5c8e7cc5892ca155"><td class="memItemLeft" align="right" valign="top"><a id="aa76985ccd5313eaf5c8e7cc5892ca155"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_map_skirk</b> (self)</td></tr>
-<tr class="separator:aa76985ccd5313eaf5c8e7cc5892ca155"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1133ea3a82cffacc03e22a273d6e8cae"><td class="memItemLeft" align="right" valign="top"><a id="a1133ea3a82cffacc03e22a273d6e8cae"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>test_fps</b> (self)</td></tr>
-<tr class="separator:a1133ea3a82cffacc03e22a273d6e8cae"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Public Attributes</h2></td></tr>
-<tr class="memitem:af6405e794509630382bd714bfc01e833"><td class="memItemLeft" align="right" valign="top"><a id="af6405e794509630382bd714bfc01e833"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr>
-<tr class="separator:af6405e794509630382bd714bfc01e833"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a320c224064a2dcdba7ad712525e32e88"><td class="memItemLeft" align="right" valign="top"><a id="a320c224064a2dcdba7ad712525e32e88"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr>
-<tr class="separator:a320c224064a2dcdba7ad712525e32e88"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3beafc32194d2dd32a0a97885ba97539"><td class="memItemLeft" align="right" valign="top"><a id="a3beafc32194d2dd32a0a97885ba97539"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>num_test</b></td></tr>
-<tr class="separator:a3beafc32194d2dd32a0a97885ba97539"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad63cebbd6245dfa62dd57168287598b1"><td class="memItemLeft" align="right" valign="top"><a id="ad63cebbd6245dfa62dd57168287598b1"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>test_poses</b></td></tr>
-<tr class="separator:ad63cebbd6245dfa62dd57168287598b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a44186810ed5ab4fecb230b7a842d294a"><td class="memItemLeft" align="right" valign="top"><a id="a44186810ed5ab4fecb230b7a842d294a"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>berlin_scan</b></td></tr>
-<tr class="separator:a44186810ed5ab4fecb230b7a842d294a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9c595846d38b4691fd34352eea08cdcf"><td class="memItemLeft" align="right" valign="top"><a id="a9c595846d38b4691fd34352eea08cdcf"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>skirk_scan</b></td></tr>
-<tr class="separator:a9c595846d38b4691fd34352eea08cdcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<hr/>The documentation for this class was generated from the following file:<ul>
-<li>/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.png b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.png
deleted file mode 100644
index bf6cb5dfdcee76db8f3eab9ba178fade9ba7535d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 757
zcmeAS@N?(olHy`uVBq!ia0vp^Pk=apgBeKLUDCV*q$C1-LR|m<{|{uoc=NTi|Ih>=
z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0T0C7GLn;{G&b>Y9wE_=IwEoQh{~td-
zlAuy^((3h`Q(7UJT74TE*bMh1rA>>Sq4M-v!;~dFQWGXkam;U+V>QP)sQYJqp|z);
zT>bU+sxPJXrmL4L{&min<*53ScNfd1GnbaVt+2WJR%`ZSxxdqXEi>c1{$R7p%hXt|
z%ph^2tsjowG;O`MkJ<Cr)OB|~PbQf(*q-Qp#AhkbA9-epNMXM5KFulF**i}3-rGAl
zTltkv+U}U`XT2xIT@0P@)aI0k(=svk^rFh&JJUb)NvK;$uPr~diz~Z4cWI>bsYSKZ
zc6(h?&vx(%V&nDjJhgyP(^K+`?u4|oldK=+molGNm*24G?!Jak(hBOw{!EEyw7es#
z(9Wjf094%o^dW<!i2|chh67W|g$9-r3m7>kI5G<<G@~h4H+^PgSt7$uQ>fa2<~cSm
z{%zl*yN|mdDEOR=L-%CcwRZItDhHyjIyQ<ue9!dLVUGP;`{&QaEE>i3ubH0e#E`u<
z+DuV)#{0{)*7wbxKK=B@ZqB{4{-vqYO^aOxrx$v1NN+ZFnUQ{`ho^MU(%Ty*yH8ME
zdG5i*{rXKyZ?d~}N1R@`K5x!ffq7}lm(O26a6Ixv^UQqHo!9>+#)p>4u%9{Fmi}d?
zY)XAnTtkmP`-G!>hu-Y6UuSXc>8<&>@%s!nPb-jlzqCmAm*JCbf^VPZ{wV(QMPc*j
zrKNx8SWmW|@NdUFyUEhRHcfX<)co}+`<_zDXg+UsH;3u%dBwZ8aqZo$*S#%%-P1Db
z6EQopCHL!xH>6h;MKjhcndfwFdR+9@a>Hwd4C}6)FW+=;KSRCG@>8M@^s``r`g?0`
d+O+8Z4E-jZsSfpiwZJsW;OXk;vd$@?2>=<%Rt^9F

diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.map b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.map
deleted file mode 100644
index 4f12f844..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.scan_sim.ScanTests" name="f110_gym.unittest.scan_sim.ScanTests">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,180,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="23,5,162,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.md5
deleted file mode 100644
index 63ba82b0..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-2d3489b7b66bfb350e0b457a0fdb3f98
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.png b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__coll__graph.png
deleted file mode 100644
index 6e5bf48aa958bf5e28a9927858ffeff1f0c2e1e8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4768
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

diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.map b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.map
deleted file mode 100644
index 4f12f844..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="f110_gym.unittest.scan_sim.ScanTests" name="f110_gym.unittest.scan_sim.ScanTests">
-<area shape="rect" id="node1" title=" " alt="" coords="5,80,180,121"/>
-<area shape="rect" id="node2" title=" " alt="" coords="23,5,162,32"/>
-</map>
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.md5 b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.md5
deleted file mode 100644
index 63ba82b0..00000000
--- a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.md5
+++ /dev/null
@@ -1 +0,0 @@
-2d3489b7b66bfb350e0b457a0fdb3f98
\ No newline at end of file
diff --git a/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.png b/docs/html/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests__inherit__graph.png
deleted file mode 100644
index 6e5bf48aa958bf5e28a9927858ffeff1f0c2e1e8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4768
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

diff --git a/docs/html/closed.png b/docs/html/closed.png
deleted file mode 100644
index 98cc2c909da37a6df914fbf67780eebd99c597f5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 132
zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8<G4C~~x2bkCl7
zlF9slZh~6z%aUT|WfKm3{P*dDAfv<6>{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf
f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT

diff --git a/docs/html/dir_0d9aa0052a6017cb7aea189bf393af42.html b/docs/html/dir_0d9aa0052a6017cb7aea189bf393af42.html
deleted file mode 100644
index f1108884..00000000
--- a/docs/html/dir_0d9aa0052a6017cb7aea189bf393af42.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: /home/billyzheng/f1tenth_gym/gym/f110_gym Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_cc06cd2fc16f827f09405fcedd02c7bb.html">gym</a></li><li class="navelem"><a class="el" href="dir_0d9aa0052a6017cb7aea189bf393af42.html">f110_gym</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">f110_gym Directory Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
-Directories</h2></td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/dir_70fc25f479e8e19f7e6bd12b95eca2dc.html b/docs/html/dir_70fc25f479e8e19f7e6bd12b95eca2dc.html
deleted file mode 100644
index 5b78f7e3..00000000
--- a/docs/html/dir_70fc25f479e8e19f7e6bd12b95eca2dc.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: /home/billyzheng/f1tenth_gym/gym/f110_gym/unittest Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_cc06cd2fc16f827f09405fcedd02c7bb.html">gym</a></li><li class="navelem"><a class="el" href="dir_0d9aa0052a6017cb7aea189bf393af42.html">f110_gym</a></li><li class="navelem"><a class="el" href="dir_70fc25f479e8e19f7e6bd12b95eca2dc.html">unittest</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">unittest Directory Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/dir_87aab0849a7ff80b67f27d7f0ecafd88.html b/docs/html/dir_87aab0849a7ff80b67f27d7f0ecafd88.html
deleted file mode 100644
index 47812a90..00000000
--- a/docs/html/dir_87aab0849a7ff80b67f27d7f0ecafd88.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: /home/billyzheng/f1tenth_gym/gym/f110_gym/envs Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_cc06cd2fc16f827f09405fcedd02c7bb.html">gym</a></li><li class="navelem"><a class="el" href="dir_0d9aa0052a6017cb7aea189bf393af42.html">f110_gym</a></li><li class="navelem"><a class="el" href="dir_87aab0849a7ff80b67f27d7f0ecafd88.html">envs</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">envs Directory Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/dir_cc06cd2fc16f827f09405fcedd02c7bb.html b/docs/html/dir_cc06cd2fc16f827f09405fcedd02c7bb.html
deleted file mode 100644
index 533a31b8..00000000
--- a/docs/html/dir_cc06cd2fc16f827f09405fcedd02c7bb.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: /home/billyzheng/f1tenth_gym/gym Directory Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><a class="el" href="dir_cc06cd2fc16f827f09405fcedd02c7bb.html">gym</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="headertitle">
-<div class="title">gym Directory Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
-Directories</h2></td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/doc.png b/docs/html/doc.png
deleted file mode 100644
index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 746
zcmV<G0u}v<P)<h;3K|Lk000e1NJLTq000;O000&U1^@s6+I?Jz00089Nkl<ZcmeI5
zO;1x>7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$))<VZ%w8AHp|fq%mP;4ffy
zZ-fC6h(S;T@^On$pg;?)``rZ-=s7qr4DR5hE4!!NdDmX=TJJeiSGimUI5QXkXNfZ>
zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV
zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE
z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!n<GayH9yHg8K}
z>w*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=}
zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXR<pt)Tx_l7FX`b+T&0J~3Ac
zDisC2f48s?Pz6U1j(Y#7FGXj244=p1VQ-4TfmZrD8|c58q%jdB67*815?3si0IJ}q
zK#I#XHom~r+!`&75xy*K>bTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$
z8v{MfJbTiiRg4bza<41N<zz(9MkMF~u!W-n>Azrl{=3fl_D+$t+^!xlQ8S}{UtY`e
z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D?
z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3
z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3<FfbmLT1ma;4wB2Ka6K
c|6iFu0IFBSu=gW%4*&oF07*qoM6N<$f>OR*Hvj+t

diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css
deleted file mode 100644
index 73ecbb2c..00000000
--- a/docs/html/doxygen.css
+++ /dev/null
@@ -1,1771 +0,0 @@
-/* The standard CSS for doxygen 1.8.17 */
-
-body, table, div, p, dl {
-	font: 400 14px/22px Roboto,sans-serif;
-}
-
-p.reference, p.definition {
-	font: 400 14px/22px Roboto,sans-serif;
-}
-
-/* @group Heading Levels */
-
-h1.groupheader {
-	font-size: 150%;
-}
-
-.title {
-	font: 400 14px/28px Roboto,sans-serif;
-	font-size: 150%;
-	font-weight: bold;
-	margin: 10px 2px;
-}
-
-h2.groupheader {
-	border-bottom: 1px solid #879ECB;
-	color: #354C7B;
-	font-size: 150%;
-	font-weight: normal;
-	margin-top: 1.75em;
-	padding-top: 8px;
-	padding-bottom: 4px;
-	width: 100%;
-}
-
-h3.groupheader {
-	font-size: 100%;
-}
-
-h1, h2, h3, h4, h5, h6 {
-	-webkit-transition: text-shadow 0.5s linear;
-	-moz-transition: text-shadow 0.5s linear;
-	-ms-transition: text-shadow 0.5s linear;
-	-o-transition: text-shadow 0.5s linear;
-	transition: text-shadow 0.5s linear;
-	margin-right: 15px;
-}
-
-h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
-	text-shadow: 0 0 15px cyan;
-}
-
-dt {
-	font-weight: bold;
-}
-
-ul.multicol {
-	-moz-column-gap: 1em;
-	-webkit-column-gap: 1em;
-	column-gap: 1em;
-	-moz-column-count: 3;
-	-webkit-column-count: 3;
-	column-count: 3;
-}
-
-p.startli, p.startdd {
-	margin-top: 2px;
-}
-
-th p.starttd, p.intertd, p.endtd {
-        font-size: 100%;
-        font-weight: 700;
-}
-
-p.starttd {
-	margin-top: 0px;
-}
-
-p.endli {
-	margin-bottom: 0px;
-}
-
-p.enddd {
-	margin-bottom: 4px;
-}
-
-p.endtd {
-	margin-bottom: 2px;
-}
-
-p.interli {
-}
-
-p.interdd {
-}
-
-p.intertd {
-}
-
-/* @end */
-
-caption {
-	font-weight: bold;
-}
-
-span.legend {
-        font-size: 70%;
-        text-align: center;
-}
-
-h3.version {
-        font-size: 90%;
-        text-align: center;
-}
-
-div.qindex, div.navtab{
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
-	text-align: center;
-}
-
-div.qindex, div.navpath {
-	width: 100%;
-	line-height: 140%;
-}
-
-div.navtab {
-	margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
-	color: #3D578C;
-	font-weight: normal;
-	text-decoration: none;
-}
-
-.contents a:visited {
-	color: #4665A2;
-}
-
-a:hover {
-	text-decoration: underline;
-}
-
-a.qindex {
-	font-weight: bold;
-}
-
-a.qindexHL {
-	font-weight: bold;
-	background-color: #9CAFD4;
-	color: #FFFFFF;
-	border: 1px double #869DCA;
-}
-
-.contents a.qindexHL:visited {
-        color: #FFFFFF;
-}
-
-a.el {
-	font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code, a.code:visited, a.line, a.line:visited {
-	color: #4665A2; 
-}
-
-a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
-	color: #4665A2; 
-}
-
-/* @end */
-
-dl.el {
-	margin-left: -1cm;
-}
-
-ul {
-  overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
-}
-
-#side-nav ul {
-  overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
-}
-
-#main-nav ul {
-  overflow: visible; /* reset ul rule for the navigation bar drop down lists */
-}
-
-.fragment {
-  text-align: left;
-  direction: ltr;
-  overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
-  overflow-y: hidden;
-}
-
-pre.fragment {
-        border: 1px solid #C4CFE5;
-        background-color: #FBFCFD;
-        padding: 4px 6px;
-        margin: 4px 8px 4px 2px;
-        overflow: auto;
-        word-wrap: break-word;
-        font-size:  9pt;
-        line-height: 125%;
-        font-family: monospace, fixed;
-        font-size: 105%;
-}
-
-div.fragment {
-  padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
-  margin: 4px 8px 4px 2px;
-	background-color: #FBFCFD;
-	border: 1px solid #C4CFE5;
-}
-
-div.line {
-	font-family: monospace, fixed;
-        font-size: 13px;
-	min-height: 13px;
-	line-height: 1.0;
-	text-wrap: unrestricted;
-	white-space: -moz-pre-wrap; /* Moz */
-	white-space: -pre-wrap;     /* Opera 4-6 */
-	white-space: -o-pre-wrap;   /* Opera 7 */
-	white-space: pre-wrap;      /* CSS3  */
-	word-wrap: break-word;      /* IE 5.5+ */
-	text-indent: -53px;
-	padding-left: 53px;
-	padding-bottom: 0px;
-	margin: 0px;
-	-webkit-transition-property: background-color, box-shadow;
-	-webkit-transition-duration: 0.5s;
-	-moz-transition-property: background-color, box-shadow;
-	-moz-transition-duration: 0.5s;
-	-ms-transition-property: background-color, box-shadow;
-	-ms-transition-duration: 0.5s;
-	-o-transition-property: background-color, box-shadow;
-	-o-transition-duration: 0.5s;
-	transition-property: background-color, box-shadow;
-	transition-duration: 0.5s;
-}
-
-div.line:after {
-    content:"\000A";
-    white-space: pre;
-}
-
-div.line.glow {
-	background-color: cyan;
-	box-shadow: 0 0 10px cyan;
-}
-
-
-span.lineno {
-	padding-right: 4px;
-	text-align: right;
-	border-right: 2px solid #0F0;
-	background-color: #E8E8E8;
-        white-space: pre;
-}
-span.lineno a {
-	background-color: #D8D8D8;
-}
-
-span.lineno a:hover {
-	background-color: #C8C8C8;
-}
-
-.lineno {
-	-webkit-touch-callout: none;
-	-webkit-user-select: none;
-	-khtml-user-select: none;
-	-moz-user-select: none;
-	-ms-user-select: none;
-	user-select: none;
-}
-
-div.ah, span.ah {
-	background-color: black;
-	font-weight: bold;
-	color: #FFFFFF;
-	margin-bottom: 3px;
-	margin-top: 3px;
-	padding: 0.2em;
-	border: solid thin #333;
-	border-radius: 0.5em;
-	-webkit-border-radius: .5em;
-	-moz-border-radius: .5em;
-	box-shadow: 2px 2px 3px #999;
-	-webkit-box-shadow: 2px 2px 3px #999;
-	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
-	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
-}
-
-div.classindex ul {
-        list-style: none;
-        padding-left: 0;
-}
-
-div.classindex span.ai {
-        display: inline-block;
-}
-
-div.groupHeader {
-	margin-left: 16px;
-	margin-top: 12px;
-	font-weight: bold;
-}
-
-div.groupText {
-	margin-left: 16px;
-	font-style: italic;
-}
-
-body {
-	background-color: white;
-	color: black;
-        margin: 0;
-}
-
-div.contents {
-	margin-top: 10px;
-	margin-left: 12px;
-	margin-right: 8px;
-}
-
-td.indexkey {
-	background-color: #EBEFF6;
-	font-weight: bold;
-	border: 1px solid #C4CFE5;
-	margin: 2px 0px 2px 0;
-	padding: 2px 10px;
-        white-space: nowrap;
-        vertical-align: top;
-}
-
-td.indexvalue {
-	background-color: #EBEFF6;
-	border: 1px solid #C4CFE5;
-	padding: 2px 10px;
-	margin: 2px 0px;
-}
-
-tr.memlist {
-	background-color: #EEF1F7;
-}
-
-p.formulaDsp {
-	text-align: center;
-}
-
-img.formulaDsp {
-	
-}
-
-img.formulaInl, img.inline {
-	vertical-align: middle;
-}
-
-div.center {
-	text-align: center;
-        margin-top: 0px;
-        margin-bottom: 0px;
-        padding: 0px;
-}
-
-div.center img {
-	border: 0px;
-}
-
-address.footer {
-	text-align: right;
-	padding-right: 12px;
-}
-
-img.footer {
-	border: 0px;
-	vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
-	color: #008000
-}
-
-span.keywordtype {
-	color: #604020
-}
-
-span.keywordflow {
-	color: #e08000
-}
-
-span.comment {
-	color: #800000
-}
-
-span.preprocessor {
-	color: #806020
-}
-
-span.stringliteral {
-	color: #002080
-}
-
-span.charliteral {
-	color: #008080
-}
-
-span.vhdldigit { 
-	color: #ff00ff 
-}
-
-span.vhdlchar { 
-	color: #000000 
-}
-
-span.vhdlkeyword { 
-	color: #700070 
-}
-
-span.vhdllogic { 
-	color: #ff0000 
-}
-
-blockquote {
-        background-color: #F7F8FB;
-        border-left: 2px solid #9CAFD4;
-        margin: 0 24px 0 4px;
-        padding: 0 12px 0 16px;
-}
-
-blockquote.DocNodeRTL {
-   border-left: 0;
-   border-right: 2px solid #9CAFD4;
-   margin: 0 4px 0 24px;
-   padding: 0 16px 0 12px;
-}
-
-/* @end */
-
-/*
-.search {
-	color: #003399;
-	font-weight: bold;
-}
-
-form.search {
-	margin-bottom: 0px;
-	margin-top: 0px;
-}
-
-input.search {
-	font-size: 75%;
-	color: #000080;
-	font-weight: normal;
-	background-color: #e8eef2;
-}
-*/
-
-td.tiny {
-	font-size: 75%;
-}
-
-.dirtab {
-	padding: 4px;
-	border-collapse: collapse;
-	border: 1px solid #A3B4D7;
-}
-
-th.dirtab {
-	background: #EBEFF6;
-	font-weight: bold;
-}
-
-hr {
-	height: 0px;
-	border: none;
-	border-top: 1px solid #4A6AAA;
-}
-
-hr.footer {
-	height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
-	border-spacing: 0px;
-	padding: 0px;
-}
-
-.memberdecls td, .fieldtable tr {
-	-webkit-transition-property: background-color, box-shadow;
-	-webkit-transition-duration: 0.5s;
-	-moz-transition-property: background-color, box-shadow;
-	-moz-transition-duration: 0.5s;
-	-ms-transition-property: background-color, box-shadow;
-	-ms-transition-duration: 0.5s;
-	-o-transition-property: background-color, box-shadow;
-	-o-transition-duration: 0.5s;
-	transition-property: background-color, box-shadow;
-	transition-duration: 0.5s;
-}
-
-.memberdecls td.glow, .fieldtable tr.glow {
-	background-color: cyan;
-	box-shadow: 0 0 15px cyan;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
-	background-color: #F9FAFC;
-	border: none;
-	margin: 4px;
-	padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
-	padding: 0px 8px 4px 8px;
-	color: #555;
-}
-
-.memSeparator {
-        border-bottom: 1px solid #DEE4F0;
-        line-height: 1px;
-        margin: 0px;
-        padding: 0px;
-}
-
-.memItemLeft, .memTemplItemLeft {
-        white-space: nowrap;
-}
-
-.memItemRight, .memTemplItemRight {
-	width: 100%;
-}
-
-.memTemplParams {
-	color: #4665A2;
-        white-space: nowrap;
-	font-size: 80%;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtitle {
-	padding: 8px;
-	border-top: 1px solid #A8B8D9;
-	border-left: 1px solid #A8B8D9;
-	border-right: 1px solid #A8B8D9;
-	border-top-right-radius: 4px;
-	border-top-left-radius: 4px;
-	margin-bottom: -1px;
-	background-image: url('nav_f.png');
-	background-repeat: repeat-x;
-	background-color: #E2E8F2;
-	line-height: 1.25;
-	font-weight: 300;
-	float:left;
-}
-
-.permalink
-{
-        font-size: 65%;
-        display: inline-block;
-        vertical-align: middle;
-}
-
-.memtemplate {
-	font-size: 80%;
-	color: #4665A2;
-	font-weight: normal;
-	margin-left: 9px;
-}
-
-.memnav {
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
-	text-align: center;
-	margin: 2px;
-	margin-right: 15px;
-	padding: 2px;
-}
-
-.mempage {
-	width: 100%;
-}
-
-.memitem {
-	padding: 0;
-	margin-bottom: 10px;
-	margin-right: 5px;
-        -webkit-transition: box-shadow 0.5s linear;
-        -moz-transition: box-shadow 0.5s linear;
-        -ms-transition: box-shadow 0.5s linear;
-        -o-transition: box-shadow 0.5s linear;
-        transition: box-shadow 0.5s linear;
-        display: table !important;
-        width: 100%;
-}
-
-.memitem.glow {
-         box-shadow: 0 0 15px cyan;
-}
-
-.memname {
-        font-weight: 400;
-        margin-left: 6px;
-}
-
-.memname td {
-	vertical-align: bottom;
-}
-
-.memproto, dl.reflist dt {
-        border-top: 1px solid #A8B8D9;
-        border-left: 1px solid #A8B8D9;
-        border-right: 1px solid #A8B8D9;
-        padding: 6px 0px 6px 0px;
-        color: #253555;
-        font-weight: bold;
-        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-        background-color: #DFE5F1;
-        /* opera specific markup */
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        border-top-right-radius: 4px;
-        /* firefox specific markup */
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        -moz-border-radius-topright: 4px;
-        /* webkit specific markup */
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        -webkit-border-top-right-radius: 4px;
-
-}
-
-.overload {
-        font-family: "courier new",courier,monospace;
-	font-size: 65%;
-}
-
-.memdoc, dl.reflist dd {
-        border-bottom: 1px solid #A8B8D9;      
-        border-left: 1px solid #A8B8D9;      
-        border-right: 1px solid #A8B8D9; 
-        padding: 6px 10px 2px 10px;
-        background-color: #FBFCFD;
-        border-top-width: 0;
-        background-image:url('nav_g.png');
-        background-repeat:repeat-x;
-        background-color: #FFFFFF;
-        /* opera specific markup */
-        border-bottom-left-radius: 4px;
-        border-bottom-right-radius: 4px;
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        /* firefox specific markup */
-        -moz-border-radius-bottomleft: 4px;
-        -moz-border-radius-bottomright: 4px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        /* webkit specific markup */
-        -webkit-border-bottom-left-radius: 4px;
-        -webkit-border-bottom-right-radius: 4px;
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-}
-
-dl.reflist dt {
-        padding: 5px;
-}
-
-dl.reflist dd {
-        margin: 0px 0px 10px 0px;
-        padding: 5px;
-}
-
-.paramkey {
-	text-align: right;
-}
-
-.paramtype {
-	white-space: nowrap;
-}
-
-.paramname {
-	color: #602020;
-	white-space: nowrap;
-}
-.paramname em {
-	font-style: normal;
-}
-.paramname code {
-        line-height: 14px;
-}
-
-.params, .retval, .exception, .tparams {
-        margin-left: 0px;
-        padding-left: 0px;
-}       
-
-.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
-        font-weight: bold;
-        vertical-align: top;
-}
-        
-.params .paramtype, .tparams .paramtype {
-        font-style: italic;
-        vertical-align: top;
-}       
-        
-.params .paramdir, .tparams .paramdir {
-        font-family: "courier new",courier,monospace;
-        vertical-align: top;
-}
-
-table.mlabels {
-	border-spacing: 0px;
-}
-
-td.mlabels-left {
-	width: 100%;
-	padding: 0px;
-}
-
-td.mlabels-right {
-	vertical-align: bottom;
-	padding: 0px;
-	white-space: nowrap;
-}
-
-span.mlabels {
-        margin-left: 8px;
-}
-
-span.mlabel {
-        background-color: #728DC1;
-        border-top:1px solid #5373B4;
-        border-left:1px solid #5373B4;
-        border-right:1px solid #C4CFE5;
-        border-bottom:1px solid #C4CFE5;
-	text-shadow: none;
-	color: white;
-	margin-right: 4px;
-	padding: 2px 3px;
-	border-radius: 3px;
-	font-size: 7pt;
-	white-space: nowrap;
-	vertical-align: middle;
-}
-
-
-
-/* @end */
-
-/* these are for tree view inside a (index) page */
-
-div.directory {
-        margin: 10px 0px;
-        border-top: 1px solid #9CAFD4;
-        border-bottom: 1px solid #9CAFD4;
-        width: 100%;
-}
-
-.directory table {
-        border-collapse:collapse;
-}
-
-.directory td {
-        margin: 0px;
-        padding: 0px;
-	vertical-align: top;
-}
-
-.directory td.entry {
-        white-space: nowrap;
-        padding-right: 6px;
-	padding-top: 3px;
-}
-
-.directory td.entry a {
-        outline:none;
-}
-
-.directory td.entry a img {
-        border: none;
-}
-
-.directory td.desc {
-        width: 100%;
-        padding-left: 6px;
-	padding-right: 6px;
-	padding-top: 3px;
-	border-left: 1px solid rgba(0,0,0,0.05);
-}
-
-.directory tr.even {
-	padding-left: 6px;
-	background-color: #F7F8FB;
-}
-
-.directory img {
-	vertical-align: -30%;
-}
-
-.directory .levels {
-        white-space: nowrap;
-        width: 100%;
-        text-align: right;
-        font-size: 9pt;
-}
-
-.directory .levels span {
-        cursor: pointer;
-        padding-left: 2px;
-        padding-right: 2px;
-	color: #3D578C;
-}
-
-.arrow {
-    color: #9CAFD4;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    cursor: pointer;
-    font-size: 80%;
-    display: inline-block;
-    width: 16px;
-    height: 22px;
-}
-
-.icon {
-    font-family: Arial, Helvetica;
-    font-weight: bold;
-    font-size: 12px;
-    height: 14px;
-    width: 16px;
-    display: inline-block;
-    background-color: #728DC1;
-    color: white;
-    text-align: center;
-    border-radius: 4px;
-    margin-left: 2px;
-    margin-right: 2px;
-}
-
-.icona {
-    width: 24px;
-    height: 22px;
-    display: inline-block;
-}
-
-.iconfopen {
-    width: 24px;
-    height: 18px;
-    margin-bottom: 4px;
-    background-image:url('folderopen.png');
-    background-position: 0px -4px;
-    background-repeat: repeat-y;
-    vertical-align:top;
-    display: inline-block;
-}
-
-.iconfclosed {
-    width: 24px;
-    height: 18px;
-    margin-bottom: 4px;
-    background-image:url('folderclosed.png');
-    background-position: 0px -4px;
-    background-repeat: repeat-y;
-    vertical-align:top;
-    display: inline-block;
-}
-
-.icondoc {
-    width: 24px;
-    height: 18px;
-    margin-bottom: 4px;
-    background-image:url('doc.png');
-    background-position: 0px -4px;
-    background-repeat: repeat-y;
-    vertical-align:top;
-    display: inline-block;
-}
-
-table.directory {
-    font: 400 14px Roboto,sans-serif;
-}
-
-/* @end */
-
-div.dynheader {
-        margin-top: 8px;
-	-webkit-touch-callout: none;
-	-webkit-user-select: none;
-	-khtml-user-select: none;
-	-moz-user-select: none;
-	-ms-user-select: none;
-	user-select: none;
-}
-
-address {
-	font-style: normal;
-	color: #2A3D61;
-}
-
-table.doxtable caption {
-	caption-side: top;
-}
-
-table.doxtable {
-	border-collapse:collapse;
-        margin-top: 4px;
-        margin-bottom: 4px;
-}
-
-table.doxtable td, table.doxtable th {
-	border: 1px solid #2D4068;
-	padding: 3px 7px 2px;
-}
-
-table.doxtable th {
-	background-color: #374F7F;
-	color: #FFFFFF;
-	font-size: 110%;
-	padding-bottom: 4px;
-	padding-top: 5px;
-}
-
-table.fieldtable {
-        /*width: 100%;*/
-        margin-bottom: 10px;
-        border: 1px solid #A8B8D9;
-        border-spacing: 0px;
-        -moz-border-radius: 4px;
-        -webkit-border-radius: 4px;
-        border-radius: 4px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
-        padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
-        white-space: nowrap;
-        border-right: 1px solid #A8B8D9;
-        border-bottom: 1px solid #A8B8D9;
-        vertical-align: top;
-}
-
-.fieldtable td.fieldname {
-        padding-top: 3px;
-}
-
-.fieldtable td.fielddoc {
-        border-bottom: 1px solid #A8B8D9;
-        /*width: 100%;*/
-}
-
-.fieldtable td.fielddoc p:first-child {
-        margin-top: 0px;
-}       
-        
-.fieldtable td.fielddoc p:last-child {
-        margin-bottom: 2px;
-}
-
-.fieldtable tr:last-child td {
-        border-bottom: none;
-}
-
-.fieldtable th {
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E2E8F2;
-        font-size: 90%;
-        color: #253555;
-        padding-bottom: 4px;
-        padding-top: 5px;
-        text-align:left;
-        font-weight: 400;
-        -moz-border-radius-topleft: 4px;
-        -moz-border-radius-topright: 4px;
-        -webkit-border-top-left-radius: 4px;
-        -webkit-border-top-right-radius: 4px;
-        border-top-left-radius: 4px;
-        border-top-right-radius: 4px;
-        border-bottom: 1px solid #A8B8D9;
-}
-
-
-.tabsearch {
-	top: 0px;
-	left: 10px;
-	height: 36px;
-	background-image: url('tab_b.png');
-	z-index: 101;
-	overflow: hidden;
-	font-size: 13px;
-}
-
-.navpath ul
-{
-	font-size: 11px;
-	background-image:url('tab_b.png');
-	background-repeat:repeat-x;
-	background-position: 0 -5px;
-	height:30px;
-	line-height:30px;
-	color:#8AA0CC;
-	border:solid 1px #C2CDE4;
-	overflow:hidden;
-	margin:0px;
-	padding:0px;
-}
-
-.navpath li
-{
-	list-style-type:none;
-	float:left;
-	padding-left:10px;
-	padding-right:15px;
-	background-image:url('bc_s.png');
-	background-repeat:no-repeat;
-	background-position:right;
-	color:#364D7C;
-}
-
-.navpath li.navelem a
-{
-	height:32px;
-	display:block;
-	text-decoration: none;
-	outline: none;
-	color: #283A5D;
-	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
-	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-	text-decoration: none;        
-}
-
-.navpath li.navelem a:hover
-{
-	color:#6884BD;
-}
-
-.navpath li.footer
-{
-        list-style-type:none;
-        float:right;
-        padding-left:10px;
-        padding-right:15px;
-        background-image:none;
-        background-repeat:no-repeat;
-        background-position:right;
-        color:#364D7C;
-        font-size: 8pt;
-}
-
-
-div.summary
-{
-	float: right;
-	font-size: 8pt;
-	padding-right: 5px;
-	width: 50%;
-	text-align: right;
-}       
-
-div.summary a
-{
-	white-space: nowrap;
-}
-
-table.classindex
-{
-        margin: 10px;
-        white-space: nowrap;
-        margin-left: 3%;
-        margin-right: 3%;
-        width: 94%;
-        border: 0;
-        border-spacing: 0; 
-        padding: 0;
-}
-
-div.ingroups
-{
-	font-size: 8pt;
-	width: 50%;
-	text-align: left;
-}
-
-div.ingroups a
-{
-	white-space: nowrap;
-}
-
-div.header
-{
-        background-image:url('nav_h.png');
-        background-repeat:repeat-x;
-	background-color: #F9FAFC;
-	margin:  0px;
-	border-bottom: 1px solid #C4CFE5;
-}
-
-div.headertitle
-{
-	padding: 5px 5px 5px 10px;
-}
-
-.PageDocRTL-title div.headertitle {
-  text-align: right;
-  direction: rtl;
-}
-
-dl {
-        padding: 0 0 0 0;
-}
-
-/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
-dl.section {
-	margin-left: 0px;
-	padding-left: 0px;
-}
-
-dl.section.DocNodeRTL {
-  margin-right: 0px;
-  padding-right: 0px;
-}
-
-dl.note {
-  margin-left: -7px;
-  padding-left: 3px;
-  border-left: 4px solid;
-  border-color: #D0C000;
-}
-
-dl.note.DocNodeRTL {
-  margin-left: 0;
-  padding-left: 0;
-  border-left: 0;
-  margin-right: -7px;
-  padding-right: 3px;
-  border-right: 4px solid;
-  border-color: #D0C000;
-}
-
-dl.warning, dl.attention {
-  margin-left: -7px;
-  padding-left: 3px;
-  border-left: 4px solid;
-  border-color: #FF0000;
-}
-
-dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
-  margin-left: 0;
-  padding-left: 0;
-  border-left: 0;
-  margin-right: -7px;
-  padding-right: 3px;
-  border-right: 4px solid;
-  border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant {
-  margin-left: -7px;
-  padding-left: 3px;
-  border-left: 4px solid;
-  border-color: #00D000;
-}
-
-dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
-  margin-left: 0;
-  padding-left: 0;
-  border-left: 0;
-  margin-right: -7px;
-  padding-right: 3px;
-  border-right: 4px solid;
-  border-color: #00D000;
-}
-
-dl.deprecated {
-  margin-left: -7px;
-  padding-left: 3px;
-  border-left: 4px solid;
-  border-color: #505050;
-}
-
-dl.deprecated.DocNodeRTL {
-  margin-left: 0;
-  padding-left: 0;
-  border-left: 0;
-  margin-right: -7px;
-  padding-right: 3px;
-  border-right: 4px solid;
-  border-color: #505050;
-}
-
-dl.todo {
-  margin-left: -7px;
-  padding-left: 3px;
-  border-left: 4px solid;
-  border-color: #00C0E0;
-}
-
-dl.todo.DocNodeRTL {
-  margin-left: 0;
-  padding-left: 0;
-  border-left: 0;
-  margin-right: -7px;
-  padding-right: 3px;
-  border-right: 4px solid;
-  border-color: #00C0E0;
-}
-
-dl.test {
-  margin-left: -7px;
-  padding-left: 3px;
-  border-left: 4px solid;
-  border-color: #3030E0;
-}
-
-dl.test.DocNodeRTL {
-  margin-left: 0;
-  padding-left: 0;
-  border-left: 0;
-  margin-right: -7px;
-  padding-right: 3px;
-  border-right: 4px solid;
-  border-color: #3030E0;
-}
-
-dl.bug {
-  margin-left: -7px;
-  padding-left: 3px;
-  border-left: 4px solid;
-  border-color: #C08050;
-}
-
-dl.bug.DocNodeRTL {
-  margin-left: 0;
-  padding-left: 0;
-  border-left: 0;
-  margin-right: -7px;
-  padding-right: 3px;
-  border-right: 4px solid;
-  border-color: #C08050;
-}
-
-dl.section dd {
-	margin-bottom: 6px;
-}
-
-
-#projectlogo
-{
-	text-align: center;
-	vertical-align: bottom;
-	border-collapse: separate;
-}
- 
-#projectlogo img
-{ 
-	border: 0px none;
-}
- 
-#projectalign
-{
-        vertical-align: middle;
-}
-
-#projectname
-{
-	font: 300% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 2px 0px;
-}
-    
-#projectbrief
-{
-	font: 120% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#projectnumber
-{
-	font: 50% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#titlearea
-{
-	padding: 0px;
-	margin: 0px;
-	width: 100%;
-	border-bottom: 1px solid #5373B4;
-}
-
-.image
-{
-        text-align: center;
-}
-
-.dotgraph
-{
-        text-align: center;
-}
-
-.mscgraph
-{
-        text-align: center;
-}
-
-.plantumlgraph
-{
-        text-align: center;
-}
-
-.diagraph
-{
-        text-align: center;
-}
-
-.caption
-{
-	font-weight: bold;
-}
-
-div.zoom
-{
-	border: 1px solid #90A5CE;
-}
-
-dl.citelist {
-        margin-bottom:50px;
-}
-
-dl.citelist dt {
-        color:#334975;
-        float:left;
-        font-weight:bold;
-        margin-right:10px;
-        padding:5px;
-}
-
-dl.citelist dd {
-        margin:2px 0;
-        padding:5px 0;
-}
-
-div.toc {
-        padding: 14px 25px;
-        background-color: #F4F6FA;
-        border: 1px solid #D8DFEE;
-        border-radius: 7px 7px 7px 7px;
-        float: right;
-        height: auto;
-        margin: 0 8px 10px 10px;
-        width: 200px;
-}
-
-.PageDocRTL-title div.toc {
-  float: left !important;
-  text-align: right;
-}
-
-div.toc li {
-        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
-        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
-        margin-top: 5px;
-        padding-left: 10px;
-        padding-top: 2px;
-}
-
-.PageDocRTL-title div.toc li {
-  background-position-x: right !important;
-  padding-left: 0 !important;
-  padding-right: 10px;
-}
-
-div.toc h3 {
-        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
-	color: #4665A2;
-        border-bottom: 0 none;
-        margin: 0;
-}
-
-div.toc ul {
-        list-style: none outside none;
-        border: medium none;
-        padding: 0px;
-}       
-
-div.toc li.level1 {
-        margin-left: 0px;
-}
-
-div.toc li.level2 {
-        margin-left: 15px;
-}
-
-div.toc li.level3 {
-        margin-left: 30px;
-}
-
-div.toc li.level4 {
-        margin-left: 45px;
-}
-
-.PageDocRTL-title div.toc li.level1 {
-  margin-left: 0 !important;
-  margin-right: 0;
-}
-
-.PageDocRTL-title div.toc li.level2 {
-  margin-left: 0 !important;
-  margin-right: 15px;
-}
-
-.PageDocRTL-title div.toc li.level3 {
-  margin-left: 0 !important;
-  margin-right: 30px;
-}
-
-.PageDocRTL-title div.toc li.level4 {
-  margin-left: 0 !important;
-  margin-right: 45px;
-}
-
-.inherit_header {
-        font-weight: bold;
-        color: gray;
-        cursor: pointer;
-	-webkit-touch-callout: none;
-	-webkit-user-select: none;
-	-khtml-user-select: none;
-	-moz-user-select: none;
-	-ms-user-select: none;
-	user-select: none;
-}
-
-.inherit_header td {
-        padding: 6px 0px 2px 5px;
-}
-
-.inherit {
-        display: none;
-}
-
-tr.heading h2 {
-        margin-top: 12px;
-        margin-bottom: 4px;
-}
-
-/* tooltip related style info */
-
-.ttc {
-        position: absolute;
-        display: none;
-}
-
-#powerTip {
-	cursor: default;
-	white-space: nowrap;
-	background-color: white;
-	border: 1px solid gray;
-	border-radius: 4px 4px 4px 4px;
-	box-shadow: 1px 1px 7px gray;
-	display: none;
-	font-size: smaller;
-	max-width: 80%;
-	opacity: 0.9;
-	padding: 1ex 1em 1em;
-	position: absolute;
-	z-index: 2147483647;
-}
-
-#powerTip div.ttdoc {
-        color: grey;
-	font-style: italic;
-}
-
-#powerTip div.ttname a {
-        font-weight: bold;
-}
-
-#powerTip div.ttname {
-        font-weight: bold;
-}
-
-#powerTip div.ttdeci {
-        color: #006318;
-}
-
-#powerTip div {
-        margin: 0px;
-        padding: 0px;
-        font: 12px/16px Roboto,sans-serif;
-}
-
-#powerTip:before, #powerTip:after {
-	content: "";
-	position: absolute;
-	margin: 0px;
-}
-
-#powerTip.n:after,  #powerTip.n:before,
-#powerTip.s:after,  #powerTip.s:before,
-#powerTip.w:after,  #powerTip.w:before,
-#powerTip.e:after,  #powerTip.e:before,
-#powerTip.ne:after, #powerTip.ne:before,
-#powerTip.se:after, #powerTip.se:before,
-#powerTip.nw:after, #powerTip.nw:before,
-#powerTip.sw:after, #powerTip.sw:before {
-	border: solid transparent;
-	content: " ";
-	height: 0;
-	width: 0;
-	position: absolute;
-}
-
-#powerTip.n:after,  #powerTip.s:after,
-#powerTip.w:after,  #powerTip.e:after,
-#powerTip.nw:after, #powerTip.ne:after,
-#powerTip.sw:after, #powerTip.se:after {
-	border-color: rgba(255, 255, 255, 0);
-}
-
-#powerTip.n:before,  #powerTip.s:before,
-#powerTip.w:before,  #powerTip.e:before,
-#powerTip.nw:before, #powerTip.ne:before,
-#powerTip.sw:before, #powerTip.se:before {
-	border-color: rgba(128, 128, 128, 0);
-}
-
-#powerTip.n:after,  #powerTip.n:before,
-#powerTip.ne:after, #powerTip.ne:before,
-#powerTip.nw:after, #powerTip.nw:before {
-	top: 100%;
-}
-
-#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
-	border-top-color: #FFFFFF;
-	border-width: 10px;
-	margin: 0px -10px;
-}
-#powerTip.n:before {
-	border-top-color: #808080;
-	border-width: 11px;
-	margin: 0px -11px;
-}
-#powerTip.n:after, #powerTip.n:before {
-	left: 50%;
-}
-
-#powerTip.nw:after, #powerTip.nw:before {
-	right: 14px;
-}
-
-#powerTip.ne:after, #powerTip.ne:before {
-	left: 14px;
-}
-
-#powerTip.s:after,  #powerTip.s:before,
-#powerTip.se:after, #powerTip.se:before,
-#powerTip.sw:after, #powerTip.sw:before {
-	bottom: 100%;
-}
-
-#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
-	border-bottom-color: #FFFFFF;
-	border-width: 10px;
-	margin: 0px -10px;
-}
-
-#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
-	border-bottom-color: #808080;
-	border-width: 11px;
-	margin: 0px -11px;
-}
-
-#powerTip.s:after, #powerTip.s:before {
-	left: 50%;
-}
-
-#powerTip.sw:after, #powerTip.sw:before {
-	right: 14px;
-}
-
-#powerTip.se:after, #powerTip.se:before {
-	left: 14px;
-}
-
-#powerTip.e:after, #powerTip.e:before {
-	left: 100%;
-}
-#powerTip.e:after {
-	border-left-color: #FFFFFF;
-	border-width: 10px;
-	top: 50%;
-	margin-top: -10px;
-}
-#powerTip.e:before {
-	border-left-color: #808080;
-	border-width: 11px;
-	top: 50%;
-	margin-top: -11px;
-}
-
-#powerTip.w:after, #powerTip.w:before {
-	right: 100%;
-}
-#powerTip.w:after {
-	border-right-color: #FFFFFF;
-	border-width: 10px;
-	top: 50%;
-	margin-top: -10px;
-}
-#powerTip.w:before {
-	border-right-color: #808080;
-	border-width: 11px;
-	top: 50%;
-	margin-top: -11px;
-}
-
-@media print
-{
-  #top { display: none; }
-  #side-nav { display: none; }
-  #nav-path { display: none; }
-  body { overflow:visible; }
-  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
-  .summary { display: none; }
-  .memitem { page-break-inside: avoid; }
-  #doc-content
-  {
-    margin-left:0 !important;
-    height:auto !important;
-    width:auto !important;
-    overflow:inherit;
-    display:inline;
-  }
-}
-
-/* @group Markdown */
-
-/*
-table.markdownTable {
-	border-collapse:collapse;
-        margin-top: 4px;
-        margin-bottom: 4px;
-}
-
-table.markdownTable td, table.markdownTable th {
-	border: 1px solid #2D4068;
-	padding: 3px 7px 2px;
-}
-
-table.markdownTableHead tr {
-}
-
-table.markdownTableBodyLeft td, table.markdownTable th {
-	border: 1px solid #2D4068;
-	padding: 3px 7px 2px;
-}
-
-th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
-	background-color: #374F7F;
-	color: #FFFFFF;
-	font-size: 110%;
-	padding-bottom: 4px;
-	padding-top: 5px;
-}
-
-th.markdownTableHeadLeft {
-	text-align: left
-}
-
-th.markdownTableHeadRight {
-	text-align: right
-}
-
-th.markdownTableHeadCenter {
-	text-align: center
-}
-*/
-
-table.markdownTable {
-	border-collapse:collapse;
-        margin-top: 4px;
-        margin-bottom: 4px;
-}
-
-table.markdownTable td, table.markdownTable th {
-	border: 1px solid #2D4068;
-	padding: 3px 7px 2px;
-}
-
-table.markdownTable tr {
-}
-
-th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
-	background-color: #374F7F;
-	color: #FFFFFF;
-	font-size: 110%;
-	padding-bottom: 4px;
-	padding-top: 5px;
-}
-
-th.markdownTableHeadLeft, td.markdownTableBodyLeft {
-	text-align: left
-}
-
-th.markdownTableHeadRight, td.markdownTableBodyRight {
-	text-align: right
-}
-
-th.markdownTableHeadCenter, td.markdownTableBodyCenter {
-	text-align: center
-}
-
-.DocNodeRTL {
-  text-align: right;
-  direction: rtl;
-}
-
-.DocNodeLTR {
-  text-align: left;
-  direction: ltr;
-}
-
-table.DocNodeRTL {
-   width: auto;
-   margin-right: 0;
-   margin-left: auto;
-}
-
-table.DocNodeLTR {
-   width: auto;
-   margin-right: auto;
-   margin-left: 0;
-}
-
-tt, code, kbd, samp
-{
-  display: inline-block;
-  direction:ltr; 
-}
-/* @end */
-
-u {
-	text-decoration: underline;
-}
-
diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png
deleted file mode 100644
index 3ff17d807fd8aa003bed8bb2a69e8f0909592fd1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3779
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

diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg
deleted file mode 100644
index d42dad52..00000000
--- a/docs/html/doxygen.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
-  <linearGradient id="a">
-   <stop stop-color="#5373B4" offset="0"/>
-   <stop stop-color="#7C95C6" offset="1"/>
-  </linearGradient>
-  <linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
-  <linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
-  <linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
-  <linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse">
-   <stop stop-color="#C0CCE3" offset="0"/>
-   <stop stop-color="#EEF1F7" offset="1"/>
-  </linearGradient>
-  <filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB">
-   <feGaussianBlur stdDeviation="0.45293203"/>
-  </filter>
- </defs>
- <g>
-  <path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696" xlink:href="#path141"/>
-  <path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/>
-  <path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/>
-  <path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/>
-  <path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/>
- </g>
-</svg>
diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js
deleted file mode 100644
index ea0a7b39..00000000
--- a/docs/html/dynsections.js
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- @licstart  The following is the entire license notice for the
- JavaScript code in this file.
-
- Copyright (C) 1997-2017 by Dimitri van Heesch
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
- @licend  The above is the entire license notice
- for the JavaScript code in this file
- */
-function toggleVisibility(linkObj)
-{
- var base = $(linkObj).attr('id');
- var summary = $('#'+base+'-summary');
- var content = $('#'+base+'-content');
- var trigger = $('#'+base+'-trigger');
- var src=$(trigger).attr('src');
- if (content.is(':visible')===true) {
-   content.hide();
-   summary.show();
-   $(linkObj).addClass('closed').removeClass('opened');
-   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
- } else {
-   content.show();
-   summary.hide();
-   $(linkObj).removeClass('closed').addClass('opened');
-   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
- }
- return false;
-}
-
-function updateStripes()
-{
-  $('table.directory tr').
-       removeClass('even').filter(':visible:even').addClass('even');
-}
-
-function toggleLevel(level)
-{
-  $('table.directory tr').each(function() {
-    var l = this.id.split('_').length-1;
-    var i = $('#img'+this.id.substring(3));
-    var a = $('#arr'+this.id.substring(3));
-    if (l<level+1) {
-      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
-      a.html('&#9660;');
-      $(this).show();
-    } else if (l==level+1) {
-      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
-      a.html('&#9658;');
-      $(this).show();
-    } else {
-      $(this).hide();
-    }
-  });
-  updateStripes();
-}
-
-function toggleFolder(id)
-{
-  // the clicked row
-  var currentRow = $('#row_'+id);
-
-  // all rows after the clicked row
-  var rows = currentRow.nextAll("tr");
-
-  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
-
-  // only match elements AFTER this one (can't hide elements before)
-  var childRows = rows.filter(function() { return this.id.match(re); });
-
-  // first row is visible we are HIDING
-  if (childRows.filter(':first').is(':visible')===true) {
-    // replace down arrow by right arrow for current row
-    var currentRowSpans = currentRow.find("span");
-    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
-    currentRowSpans.filter(".arrow").html('&#9658;');
-    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
-  } else { // we are SHOWING
-    // replace right arrow by down arrow for current row
-    var currentRowSpans = currentRow.find("span");
-    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
-    currentRowSpans.filter(".arrow").html('&#9660;');
-    // replace down arrows by right arrows for child rows
-    var childRowsSpans = childRows.find("span");
-    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
-    childRowsSpans.filter(".arrow").html('&#9658;');
-    childRows.show(); //show all children
-  }
-  updateStripes();
-}
-
-
-function toggleInherit(id)
-{
-  var rows = $('tr.inherit.'+id);
-  var img = $('tr.inherit_header.'+id+' img');
-  var src = $(img).attr('src');
-  if (rows.filter(':first').is(':visible')===true) {
-    rows.css('display','none');
-    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
-  } else {
-    rows.css('display','table-row'); // using show() causes jump in firefox
-    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
-  }
-}
-/* @license-end */
diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png
deleted file mode 100644
index bb8ab35edce8e97554e360005ee9fc5bffb36e66..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 616
zcmV-u0+;=XP)<h;3K|Lk000e1NJLTq000;O000&U1^@s6+I?Jz0006nNkl<ZcmeHQ
zO;6N77=GINb=Z(>a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i
z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU
zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6`
zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM<n!c>
zlFX`g{k$X}yIe%$N)cn1LNu=q<K5OS7CNKPk1f&9-+dXiicCfAy8a*|m;2$mAHWmO
zXHGi+kV1-pHt+rM<gA>9_CS)*<?(PP8<}W6a5(^^keLBRMb50K&dQM@pmn94ZU=xQ
zQX)TlxfVQ_9);_LB~VUu;v|U_-?p*(;VWJ|=^7%ZGN6sBL~)dHv|OyK(wPKdmH>>A
zsX_mM4<gjHpqc8Q=uo450T?4i;CdW;`z|<XAntIp>L@`(cSNQKMFc$RtYbx{79<Tw
zWXi-A43v#7I@t_Ijx7TKV2n(H{k|uniNrjlLmWw}y*t^*R9a-QX?;6B==9%$de=Kk
z*QYpi761&SjtX%clomR5cK>#j-J7hk*>*+ZZhM4Hw?<fJyv$}=71o`ou(^pUn-ky6
z->I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000<MNUMnLSTaR
CZX#j;

diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png
deleted file mode 100644
index d6c7f676a3b3ef8c2c307d319dff3c6a604eb227..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 597
zcmV-b0;>IqP)<h;3K|Lk000e1NJLTq000;O000&U1^@s6+I?Jz0006UNkl<ZcmeHQ
zKX21e5dS%8nlx#!9XpK>X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e=
zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2
zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+!
zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z(
zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l
zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa(
z0QgY<a!3GSVHw98r3tc|WLmCr=#k@b07--d0B^h;_*7huEOe@B5HbiIMnQNV2X-w6
zOrIHW*Nh!-3RJ{NFA7|xb7mLqy*mtQR%uj&==!8@USn{@{Ji@c`@7F#U6jIrqNF?z
zhGG8IoU)VO(*u}!lcNr&IgdJw?)fXgkFy?t@!%{)3!Y}PHt9|Ph>gTWqf1qN++Gqp
z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ
j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA

diff --git a/docs/html/functions.html b/docs/html/functions.html
deleted file mode 100644
index d1933dfa..00000000
--- a/docs/html/functions.html
+++ /dev/null
@@ -1,200 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Class Members</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
-
-<h3><a id="index__5F"></a>- _ -</h3><ul>
-<li>__del__()
-: <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ae193b905b3d1c213ec4324283ebdf201">f110_gym.envs.f110_env.F110Env</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#ab53974d19ae639eaa8d922db303d21c4">f110_gym.envs.f110_env_backup.F110Env</a>
-</li>
-<li>__init__()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#af342754a877c42b3828a03b6425801d4">f110_gym.envs.base_classes.RaceCar</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab865873c6f0afa3741add4f39e5fd872">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b24abdbb4d13744255ebfdb3d509354">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-</ul>
-
-
-<h3><a id="index_c"></a>- c -</h3><ul>
-<li>check_collision()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a7f32c68e14bf47447ce9599c8db21236">f110_gym.envs.base_classes.Simulator</a>
-</li>
-<li>check_ttc()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4577a30fd8879de7df1d0ace7702f450">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-</ul>
-
-
-<h3><a id="index_i"></a>- i -</h3><ul>
-<li>init_map()
-: <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#acb0331bb92b190cdd592060385726160">f110_gym.envs.f110_env_backup.F110Env</a>
-</li>
-</ul>
-
-
-<h3><a id="index_m"></a>- m -</h3><ul>
-<li>move()
-: <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#aab35e83f0748c949b8e3a8414097d193">f110_gym.unittest.pyglet_test.Camera</a>
-</li>
-</ul>
-
-
-<h3><a id="index_o"></a>- o -</h3><ul>
-<li>on_close()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a05cb0faf5893e3cbed58cf20d0997bf7">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>on_draw()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a0cbcdabef2cdda765d6721ca796ecfd0">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>on_mouse_drag()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a557710400bb370a7509dbc17658eadd8">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>on_mouse_scroll()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a10f7c38d921015b5574ba0c858a245bb">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>on_resize()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ac8bbef5b8910515dd18c8a6624730898">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-</ul>
-
-
-<h3><a id="index_p"></a>- p -</h3><ul>
-<li>position()
-: <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a3d2948dc5b1a9d2a6c597a2850ac989b">f110_gym.unittest.pyglet_test.Camera</a>
-</li>
-</ul>
-
-
-<h3><a id="index_r"></a>- r -</h3><ul>
-<li>ray_cast_agents()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a7d15e74a1b82646675d60ce02cdce6b5">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-<li>render()
-: <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab8e76450e63ef88c1ac9721f717fa375">f110_gym.envs.f110_env.F110Env</a>
-</li>
-<li>reset()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a0fa587dc3c1a12c9217f0bd093c1bc08">f110_gym.envs.base_classes.RaceCar</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab63c655ff0cd1bb2accce7be9fff69e8">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab213d62cea216bbd82d0f6d7061452fb">f110_gym.envs.f110_env.F110Env</a>
-</li>
-</ul>
-
-
-<h3><a id="index_s"></a>- s -</h3><ul>
-<li>scan()
-: <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a12c4b2f39bda5dd3a1ea14e70e4370cc">f110_gym.envs.laser_models.ScanSimulator2D</a>
-, <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a038a0fc7e42df7827c175fdb3755f2c4">f110_gym.unittest.scan_sim.ScanSimulator2D</a>
-</li>
-<li>set_map()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a2a60c9ee34f2f09fb0a7e5cc7b287897">f110_gym.envs.base_classes.RaceCar</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a0a566351f20a16b7545fcd20ca9adb57">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a989dd691fd4c08d0f18d6c241862d03c">f110_gym.envs.laser_models.ScanSimulator2D</a>
-, <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a00925f5100ae8b2e556154e8935ea86e">f110_gym.unittest.scan_sim.ScanSimulator2D</a>
-</li>
-<li>step()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#af1fb175457362d7419301180b1b3b4c6">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a0df471828ba39c5228bf5c814a5d0e6e">f110_gym.envs.f110_env.F110Env</a>
-</li>
-</ul>
-
-
-<h3><a id="index_u"></a>- u -</h3><ul>
-<li>update_map()
-: <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#afc210c3941c1548692c75c961ad443df">f110_gym.envs.f110_env.F110Env</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ae9c12c08c2f799504b6390b2d0ffda3f">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>update_obs()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b9284f2e59c9000f10bd18e1ec6a9b3">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>update_opp_poses()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4800c5ac90ba93b79a0338e5e34ead43">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-<li>update_params()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a6ab5b5dd420b182b5156ee9566c03411">f110_gym.envs.base_classes.RaceCar</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a974c58957a6b14582149d704ef28a68c">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a79d419bbf2ff0e377d808e4a8f41cc81">f110_gym.envs.f110_env.F110Env</a>
-</li>
-<li>update_pose()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#ae12c14c1353e6aab2f72036593d85518">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-<li>update_scan()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a356ec05a0a0c056f4d43f5fb0451c83d">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-</ul>
-
-
-<h3><a id="index_z"></a>- z -</h3><ul>
-<li>zoom()
-: <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a6f0bedfc6f5801b398d5ce537d70c059">f110_gym.unittest.pyglet_test.Camera</a>
-</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html
deleted file mode 100644
index eb5d2d9a..00000000
--- a/docs/html/functions_func.html
+++ /dev/null
@@ -1,200 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Class Members - Functions</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="contents">
-&#160;
-
-<h3><a id="index__5F"></a>- _ -</h3><ul>
-<li>__del__()
-: <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ae193b905b3d1c213ec4324283ebdf201">f110_gym.envs.f110_env.F110Env</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#ab53974d19ae639eaa8d922db303d21c4">f110_gym.envs.f110_env_backup.F110Env</a>
-</li>
-<li>__init__()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#af342754a877c42b3828a03b6425801d4">f110_gym.envs.base_classes.RaceCar</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab865873c6f0afa3741add4f39e5fd872">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b24abdbb4d13744255ebfdb3d509354">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-</ul>
-
-
-<h3><a id="index_c"></a>- c -</h3><ul>
-<li>check_collision()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a7f32c68e14bf47447ce9599c8db21236">f110_gym.envs.base_classes.Simulator</a>
-</li>
-<li>check_ttc()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4577a30fd8879de7df1d0ace7702f450">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-</ul>
-
-
-<h3><a id="index_i"></a>- i -</h3><ul>
-<li>init_map()
-: <a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#acb0331bb92b190cdd592060385726160">f110_gym.envs.f110_env_backup.F110Env</a>
-</li>
-</ul>
-
-
-<h3><a id="index_m"></a>- m -</h3><ul>
-<li>move()
-: <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#aab35e83f0748c949b8e3a8414097d193">f110_gym.unittest.pyglet_test.Camera</a>
-</li>
-</ul>
-
-
-<h3><a id="index_o"></a>- o -</h3><ul>
-<li>on_close()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a05cb0faf5893e3cbed58cf20d0997bf7">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>on_draw()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a0cbcdabef2cdda765d6721ca796ecfd0">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>on_mouse_drag()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a557710400bb370a7509dbc17658eadd8">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>on_mouse_scroll()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a10f7c38d921015b5574ba0c858a245bb">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>on_resize()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ac8bbef5b8910515dd18c8a6624730898">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-</ul>
-
-
-<h3><a id="index_p"></a>- p -</h3><ul>
-<li>position()
-: <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a3d2948dc5b1a9d2a6c597a2850ac989b">f110_gym.unittest.pyglet_test.Camera</a>
-</li>
-</ul>
-
-
-<h3><a id="index_r"></a>- r -</h3><ul>
-<li>ray_cast_agents()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a7d15e74a1b82646675d60ce02cdce6b5">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-<li>render()
-: <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab8e76450e63ef88c1ac9721f717fa375">f110_gym.envs.f110_env.F110Env</a>
-</li>
-<li>reset()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a0fa587dc3c1a12c9217f0bd093c1bc08">f110_gym.envs.base_classes.RaceCar</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab63c655ff0cd1bb2accce7be9fff69e8">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab213d62cea216bbd82d0f6d7061452fb">f110_gym.envs.f110_env.F110Env</a>
-</li>
-</ul>
-
-
-<h3><a id="index_s"></a>- s -</h3><ul>
-<li>scan()
-: <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a12c4b2f39bda5dd3a1ea14e70e4370cc">f110_gym.envs.laser_models.ScanSimulator2D</a>
-, <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a038a0fc7e42df7827c175fdb3755f2c4">f110_gym.unittest.scan_sim.ScanSimulator2D</a>
-</li>
-<li>set_map()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a2a60c9ee34f2f09fb0a7e5cc7b287897">f110_gym.envs.base_classes.RaceCar</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a0a566351f20a16b7545fcd20ca9adb57">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a989dd691fd4c08d0f18d6c241862d03c">f110_gym.envs.laser_models.ScanSimulator2D</a>
-, <a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a00925f5100ae8b2e556154e8935ea86e">f110_gym.unittest.scan_sim.ScanSimulator2D</a>
-</li>
-<li>step()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#af1fb175457362d7419301180b1b3b4c6">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a0df471828ba39c5228bf5c814a5d0e6e">f110_gym.envs.f110_env.F110Env</a>
-</li>
-</ul>
-
-
-<h3><a id="index_u"></a>- u -</h3><ul>
-<li>update_map()
-: <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#afc210c3941c1548692c75c961ad443df">f110_gym.envs.f110_env.F110Env</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ae9c12c08c2f799504b6390b2d0ffda3f">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>update_obs()
-: <a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b9284f2e59c9000f10bd18e1ec6a9b3">f110_gym.envs.rendering.EnvRenderer</a>
-</li>
-<li>update_opp_poses()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4800c5ac90ba93b79a0338e5e34ead43">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-<li>update_params()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a6ab5b5dd420b182b5156ee9566c03411">f110_gym.envs.base_classes.RaceCar</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a974c58957a6b14582149d704ef28a68c">f110_gym.envs.base_classes.Simulator</a>
-, <a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a79d419bbf2ff0e377d808e4a8f41cc81">f110_gym.envs.f110_env.F110Env</a>
-</li>
-<li>update_pose()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#ae12c14c1353e6aab2f72036593d85518">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-<li>update_scan()
-: <a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a356ec05a0a0c056f4d43f5fb0451c83d">f110_gym.envs.base_classes.RaceCar</a>
-</li>
-</ul>
-
-
-<h3><a id="index_z"></a>- z -</h3><ul>
-<li>zoom()
-: <a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a6f0bedfc6f5801b398d5ce537d70c059">f110_gym.unittest.pyglet_test.Camera</a>
-</li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html
deleted file mode 100644
index 1739d8de..00000000
--- a/docs/html/graph_legend.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Graph Legend</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
-  <div class="headertitle">
-<div class="title">Graph Legend</div>  </div>
-</div><!--header-->
-<div class="contents">
-<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
-<p>Consider the following example: </p><div class="fragment"><div class="line"><span class="comment">/*! Invisible class because of truncation */</span></div>
-<div class="line"><span class="keyword">class </span>Invisible { };</div>
-<div class="line"><span class="comment"></span> </div>
-<div class="line"><span class="comment">/*! Truncated class, inheritance relation is hidden */</span></div>
-<div class="line"><span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };</div>
-<div class="line"> </div>
-<div class="line"><span class="comment">/* Class not documented with doxygen comments */</span></div>
-<div class="line"><span class="keyword">class </span>Undocumented { };</div>
-<div class="line"><span class="comment"></span> </div>
-<div class="line"><span class="comment">/*! Class that is inherited using public inheritance */</span></div>
-<div class="line"><span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };</div>
-<div class="line"><span class="comment"></span> </div>
-<div class="line"><span class="comment">/*! A template class */</span></div>
-<div class="line"><span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>Templ { };</div>
-<div class="line"><span class="comment"></span> </div>
-<div class="line"><span class="comment">/*! Class that is inherited using protected inheritance */</span></div>
-<div class="line"><span class="keyword">class </span>ProtectedBase { };</div>
-<div class="line"><span class="comment"></span> </div>
-<div class="line"><span class="comment">/*! Class that is inherited using private inheritance */</span></div>
-<div class="line"><span class="keyword">class </span>PrivateBase { };</div>
-<div class="line"><span class="comment"></span> </div>
-<div class="line"><span class="comment">/*! Class that is used by the Inherited class */</span></div>
-<div class="line"><span class="keyword">class </span>Used { };</div>
-<div class="line"><span class="comment"></span> </div>
-<div class="line"><span class="comment">/*! Super class that inherits a number of other classes */</span></div>
-<div class="line"><span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,</div>
-<div class="line">                  <span class="keyword">protected</span> ProtectedBase,</div>
-<div class="line">                  <span class="keyword">private</span> PrivateBase,</div>
-<div class="line">                  <span class="keyword">public</span> Undocumented,</div>
-<div class="line">                  <span class="keyword">public</span> Templ&lt;int&gt;</div>
-<div class="line">{</div>
-<div class="line">  <span class="keyword">private</span>:</div>
-<div class="line">    Used *m_usedClass;</div>
-<div class="line">};</div>
-</div><!-- fragment --><p> This will result in the following graph:</p>
-<center><img src="graph_legend.png" alt="" class="inline"/></center><p>The boxes in the above graph have the following meaning: </p>
-<ul>
-<li>
-A filled gray box represents the struct or class for which the graph is generated. </li>
-<li>
-A box with a black border denotes a documented struct or class. </li>
-<li>
-A box with a gray border denotes an undocumented struct or class. </li>
-<li>
-A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
-</ul>
-<p>The arrows have the following meaning: </p>
-<ul>
-<li>
-A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
-<li>
-A dark green arrow is used for protected inheritance. </li>
-<li>
-A dark red arrow is used for private inheritance. </li>
-<li>
-A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible. </li>
-<li>
-A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance. </li>
-</ul>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5
deleted file mode 100644
index 8fcdccd1..00000000
--- a/docs/html/graph_legend.md5
+++ /dev/null
@@ -1 +0,0 @@
-f51bf6e9a10430aafef59831b08dcbfe
\ No newline at end of file
diff --git a/docs/html/graph_legend.png b/docs/html/graph_legend.png
deleted file mode 100644
index 83dfada4875ec19170dc2766167cef96526ee173..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20608
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
Qz*10V-ySMbMm`bq7feT{Bme*a

diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html
deleted file mode 100644
index 75e50b8f..00000000
--- a/docs/html/hierarchy.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Class Hierarchy</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
-  <div class="headertitle">
-<div class="title">Class Hierarchy</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock">
-<p><a href="inherits.html">Go to the graphical class hierarchy</a></p>
-This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html" target="_self">f110_gym.unittest.pyglet_test.Camera</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html" target="_self">f110_gym.unittest.pyglet_test.CenteredCamera</a></td><td class="desc"></td></tr>
-<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>Env</b></td><td class="desc"></td></tr>
-<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html" target="_self">f110_gym.envs.f110_env.F110Env</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html" target="_self">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="desc"></td></tr>
-<tr id="row_2_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>EzPickle</b></td><td class="desc"></td></tr>
-<tr id="row_2_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html" target="_self">f110_gym.envs.f110_env.F110Env</a></td><td class="desc"></td></tr>
-<tr id="row_2_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html" target="_self">f110_gym.envs.f110_env_backup.F110Env</a></td><td class="desc"></td></tr>
-<tr id="row_3_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_3_" class="arrow" onclick="toggleFolder('3_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>object</b></td><td class="desc"></td></tr>
-<tr id="row_3_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html" target="_self">f110_gym.envs.base_classes.RaceCar</a></td><td class="desc"></td></tr>
-<tr id="row_3_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html" target="_self">f110_gym.envs.base_classes.Simulator</a></td><td class="desc"></td></tr>
-<tr id="row_3_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html" target="_self">f110_gym.envs.laser_models.ScanSimulator2D</a></td><td class="desc"></td></tr>
-<tr id="row_3_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html" target="_self">f110_gym.unittest.scan_sim.ScanSimulator2D</a></td><td class="desc"></td></tr>
-<tr id="row_4_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_4_" class="arrow" onclick="toggleFolder('4_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>TestCase</b></td><td class="desc"></td></tr>
-<tr id="row_4_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html" target="_self">f110_gym.envs.collision_models.CollisionTests</a></td><td class="desc"></td></tr>
-<tr id="row_4_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html" target="_self">f110_gym.envs.dynamic_models.DynamicsTest</a></td><td class="desc"></td></tr>
-<tr id="row_4_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html" target="_self">f110_gym.envs.laser_models.ScanTests</a></td><td class="desc"></td></tr>
-<tr id="row_4_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html" target="_self">f110_gym.unittest.collision_checks.CollisionTests</a></td><td class="desc"></td></tr>
-<tr id="row_4_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html" target="_self">f110_gym.unittest.dynamics_test.DynamicsTest</a></td><td class="desc"></td></tr>
-<tr id="row_4_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html" target="_self">f110_gym.unittest.scan_sim.ScanTests</a></td><td class="desc"></td></tr>
-<tr id="row_5_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_5_" class="arrow" onclick="toggleFolder('5_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>Window</b></td><td class="desc"></td></tr>
-<tr id="row_5_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html" target="_self">f110_gym.envs.rendering.EnvRenderer</a></td><td class="desc"></td></tr>
-<tr id="row_5_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html" target="_self">f110_gym.unittest.pyglet_test_camera.App</a></td><td class="desc"></td></tr>
-</table>
-</div><!-- directory -->
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/index.html b/docs/html/index.html
deleted file mode 100644
index da8c9db4..00000000
--- a/docs/html/index.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Main Page</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
-  <div class="headertitle">
-<div class="title">f1tenth_gym Documentation</div>  </div>
-</div><!--header-->
-<div class="contents">
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/inherit_graph_0.map b/docs/html/inherit_graph_0.map
deleted file mode 100644
index d18ec23c..00000000
--- a/docs/html/inherit_graph_0.map
+++ /dev/null
@@ -1,7 +0,0 @@
-<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" title=" " alt="" coords="5,111,68,138"/>
-<area shape="rect" id="node2" href="$classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html" title=" " alt="" coords="134,5,291,47"/>
-<area shape="rect" id="node3" href="$classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html" title=" " alt="" coords="134,71,291,112"/>
-<area shape="rect" id="node4" href="$classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html" title=" " alt="" coords="116,136,309,177"/>
-<area shape="rect" id="node5" href="$classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html" title=" " alt="" coords="125,201,300,243"/>
-</map>
diff --git a/docs/html/inherit_graph_0.md5 b/docs/html/inherit_graph_0.md5
deleted file mode 100644
index 55ffe5b2..00000000
--- a/docs/html/inherit_graph_0.md5
+++ /dev/null
@@ -1 +0,0 @@
-c5ed2a78cb1e20e10b742d2d19ae8328
\ No newline at end of file
diff --git a/docs/html/inherit_graph_0.png b/docs/html/inherit_graph_0.png
deleted file mode 100644
index 5033463cb5fc698078a57152a23c35a430e3dafc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18513
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

diff --git a/docs/html/inherit_graph_1.map b/docs/html/inherit_graph_1.map
deleted file mode 100644
index ce9b7e66..00000000
--- a/docs/html/inherit_graph_1.map
+++ /dev/null
@@ -1,9 +0,0 @@
-<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" title=" " alt="" coords="5,177,85,203"/>
-<area shape="rect" id="node2" href="$classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html" title=" " alt="" coords="147,5,327,47"/>
-<area shape="rect" id="node3" href="$classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html" title=" " alt="" coords="146,71,329,112"/>
-<area shape="rect" id="node4" href="$classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html" title=" " alt="" coords="158,136,317,177"/>
-<area shape="rect" id="node5" href="$classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html" title=" " alt="" coords="138,201,337,243"/>
-<area shape="rect" id="node6" href="$classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html" title=" " alt="" coords="133,267,341,308"/>
-<area shape="rect" id="node7" href="$classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html" title=" " alt="" coords="150,332,325,373"/>
-</map>
diff --git a/docs/html/inherit_graph_1.md5 b/docs/html/inherit_graph_1.md5
deleted file mode 100644
index 9277b81c..00000000
--- a/docs/html/inherit_graph_1.md5
+++ /dev/null
@@ -1 +0,0 @@
-2a0d4625dd628049409f128a5d96ce94
\ No newline at end of file
diff --git a/docs/html/inherit_graph_1.png b/docs/html/inherit_graph_1.png
deleted file mode 100644
index 790359d124cfa2b355fe4abd04f8723f5e6911ce..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 29112
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

diff --git a/docs/html/inherit_graph_2.map b/docs/html/inherit_graph_2.map
deleted file mode 100644
index 88ce249e..00000000
--- a/docs/html/inherit_graph_2.map
+++ /dev/null
@@ -1,6 +0,0 @@
-<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" title=" " alt="" coords="20,17,67,43"/>
-<area shape="rect" id="node2" href="$classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html" title=" " alt="" coords="135,5,290,47"/>
-<area shape="rect" id="node3" href="$classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html" title=" " alt="" coords="129,71,296,112"/>
-<area shape="rect" id="node4" title=" " alt="" coords="5,71,81,98"/>
-</map>
diff --git a/docs/html/inherit_graph_2.md5 b/docs/html/inherit_graph_2.md5
deleted file mode 100644
index 6595c274..00000000
--- a/docs/html/inherit_graph_2.md5
+++ /dev/null
@@ -1 +0,0 @@
-ad449ec91de3b6807e51e53a7d28d6c0
\ No newline at end of file
diff --git a/docs/html/inherit_graph_2.png b/docs/html/inherit_graph_2.png
deleted file mode 100644
index b81231d5d225a0d1158e7de246526cacf2990b3a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8565
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

diff --git a/docs/html/inherit_graph_3.map b/docs/html/inherit_graph_3.map
deleted file mode 100644
index 3253cfc8..00000000
--- a/docs/html/inherit_graph_3.map
+++ /dev/null
@@ -1,5 +0,0 @@
-<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" title=" " alt="" coords="5,46,80,73"/>
-<area shape="rect" id="node2" href="$classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html" title=" " alt="" coords="128,5,320,47"/>
-<area shape="rect" id="node3" href="$classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html" title=" " alt="" coords="131,71,317,112"/>
-</map>
diff --git a/docs/html/inherit_graph_3.md5 b/docs/html/inherit_graph_3.md5
deleted file mode 100644
index 1dc4bb42..00000000
--- a/docs/html/inherit_graph_3.md5
+++ /dev/null
@@ -1 +0,0 @@
-1a342c4817cadb5534300a15348f1250
\ No newline at end of file
diff --git a/docs/html/inherit_graph_3.png b/docs/html/inherit_graph_3.png
deleted file mode 100644
index 72ec4ee22996c3efc8ed80350cfe5d2e9d63dbf7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7298
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

diff --git a/docs/html/inherit_graph_4.map b/docs/html/inherit_graph_4.map
deleted file mode 100644
index ae0bb59a..00000000
--- a/docs/html/inherit_graph_4.map
+++ /dev/null
@@ -1,4 +0,0 @@
-<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html" title=" " alt="" coords="5,5,192,47"/>
-<area shape="rect" id="node2" href="$classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html" title=" " alt="" coords="240,5,427,47"/>
-</map>
diff --git a/docs/html/inherit_graph_4.md5 b/docs/html/inherit_graph_4.md5
deleted file mode 100644
index 07472f41..00000000
--- a/docs/html/inherit_graph_4.md5
+++ /dev/null
@@ -1 +0,0 @@
-6244cb62ab91f1a2b535cb7e4adac66a
\ No newline at end of file
diff --git a/docs/html/inherit_graph_4.png b/docs/html/inherit_graph_4.png
deleted file mode 100644
index f00ebd5d1b36d901593913d1f67c24b457ddb798..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3393
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
F{{V=$k>CIT

diff --git a/docs/html/inherits.html b/docs/html/inherits.html
deleted file mode 100644
index c678c204..00000000
--- a/docs/html/inherits.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Class Hierarchy</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.17 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
-  <div class="headertitle">
-<div class="title">Class Hierarchy</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock">
-<p><a href="hierarchy.html">Go to the textual class hierarchy</a></p>
-</div><table border="0" cellspacing="10" cellpadding="0">
-<tr><td><img src="inherit_graph_0.png" border="0" usemap="#f110__gym_8envs_8base__classes_8_race_car" alt=""/>
-<map name="f110__gym_8envs_8base__classes_8_race_car" id="f110__gym_8envs_8base__classes_8_race_car">
-<area shape="rect" title=" " alt="" coords="5,111,68,138"/>
-<area shape="rect" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html" title=" " alt="" coords="134,5,291,47"/>
-<area shape="rect" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html" title=" " alt="" coords="134,71,291,112"/>
-<area shape="rect" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html" title=" " alt="" coords="116,136,309,177"/>
-<area shape="rect" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html" title=" " alt="" coords="125,201,300,243"/>
-</map>
-</td></tr>
-<tr><td><img src="inherit_graph_1.png" border="0" usemap="#f110__gym_8envs_8collision__models_8_collision_tests" alt=""/>
-<map name="f110__gym_8envs_8collision__models_8_collision_tests" id="f110__gym_8envs_8collision__models_8_collision_tests">
-<area shape="rect" title=" " alt="" coords="5,177,85,203"/>
-<area shape="rect" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html" title=" " alt="" coords="147,5,327,47"/>
-<area shape="rect" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html" title=" " alt="" coords="146,71,329,112"/>
-<area shape="rect" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html" title=" " alt="" coords="158,136,317,177"/>
-<area shape="rect" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html" title=" " alt="" coords="138,201,337,243"/>
-<area shape="rect" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html" title=" " alt="" coords="133,267,341,308"/>
-<area shape="rect" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html" title=" " alt="" coords="150,332,325,373"/>
-</map>
-</td></tr>
-<tr><td><img src="inherit_graph_2.png" border="0" usemap="#f110__gym_8envs_8f110__env_8_f110_env" alt=""/>
-<map name="f110__gym_8envs_8f110__env_8_f110_env" id="f110__gym_8envs_8f110__env_8_f110_env">
-<area shape="rect" title=" " alt="" coords="20,17,67,43"/>
-<area shape="rect" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html" title=" " alt="" coords="135,5,290,47"/>
-<area shape="rect" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html" title=" " alt="" coords="129,71,296,112"/>
-<area shape="rect" title=" " alt="" coords="5,71,81,98"/>
-</map>
-</td></tr>
-<tr><td><img src="inherit_graph_3.png" border="0" usemap="#f110__gym_8envs_8rendering_8_env_renderer" alt=""/>
-<map name="f110__gym_8envs_8rendering_8_env_renderer" id="f110__gym_8envs_8rendering_8_env_renderer">
-<area shape="rect" title=" " alt="" coords="5,46,80,73"/>
-<area shape="rect" href="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html" title=" " alt="" coords="128,5,320,47"/>
-<area shape="rect" href="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html" title=" " alt="" coords="131,71,317,112"/>
-</map>
-</td></tr>
-<tr><td><img src="inherit_graph_4.png" border="0" usemap="#f110__gym_8unittest_8pyglet__test_8_camera" alt=""/>
-<map name="f110__gym_8unittest_8pyglet__test_8_camera" id="f110__gym_8unittest_8pyglet__test_8_camera">
-<area shape="rect" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html" title=" " alt="" coords="5,5,192,47"/>
-<area shape="rect" href="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html" title=" " alt="" coords="240,5,427,47"/>
-</map>
-</td></tr>
-</table>
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/>
-</a> 1.8.17
-</small></address>
-</body>
-</html>
diff --git a/docs/html/jquery.js b/docs/html/jquery.js
deleted file mode 100644
index 103c32d7..00000000
--- a/docs/html/jquery.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
-!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(p,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),"function"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",$=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",F=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="<a id='"+k+"'></a><select id='"+k+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(F," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[k]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split("").sort(D).join("")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[":"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return"undefined"!=typeof e.contentDocument?e.contentDocument:(A(e,"template")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\x20\t\r\n\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[["notify","progress",k.Callbacks("memory"),k.Callbacks("memory"),2],["resolve","done",k.Callbacks("once memory"),k.Callbacks("once memory"),0,"resolved"],["reject","fail",k.Callbacks("once memory"),k.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),k.ready()}k.fn.ready=function(e){return F.then(e)["catch"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,"ms-").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks("once memory").add(function(){Q.remove(e,[t+"queue",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Q.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ne=new RegExp("^(?:([+-])=|)("+te+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&oe(e)&&"none"===k.css(e,"display")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,"")},u=s(),l=n&&n[3]||(k.cssNumber[t]?"":"px"),c=e.nodeType&&(k.cssNumber[t]||"px"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Q.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ce[s]=u)))):"none"!==n&&(l[c]="none",Q.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],"globalEval",!t||Q.get(t[n],"globalEval"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement("div")),(xe=E.createElement("input")).setAttribute("type","radio"),xe.setAttribute("checked","checked"),xe.setAttribute("name","t"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Q.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:"focusin",blur:"focusout"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(?:[^=]|=\s*.checked.)/i,He=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,"script"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Q.access(u,"globalEval")&&k.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")}):b(u.textContent.replace(He,""),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp("^("+te+")(?!px)[a-z%]+$","i"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join("|"),"i");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n="1%"!==e.top,a=12===t(e.marginLeft),u.style.right="60%",o=36===t(e.right),r=36===t(e.width),u.style.position="absolute",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement("div"),u=E.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=["Webkit","Moz","ms"],Xe=E.createElement("div").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:"absolute",visibility:"hidden",display:"block"},Ke={letterSpacing:"0",fontWeight:"400"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function et(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=k.css(e,n+re[a],!0,i)),r?("content"===n&&(u-=k.css(e,"padding"+re[a],!0,i)),"margin"!==n&&(u-=k.css(e,"border"+re[a]+"Width",!0,i))):(u+=k.css(e,"padding"+re[a],!0,i),"padding"!==n?u+=k.css(e,"border"+re[a]+"Width",!0,i):s+=k.css(e,"border"+re[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&"border-box"===k.css(e,"boxSizing",!1,r),o=i,a=_e(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||"auto"===a||!parseFloat(a)&&"inline"===k.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===k.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?"border":"content"),o,r,a)+"px"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),"normal"===i&&t in Ke&&(i=Ke[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each(["height","width"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===k.css(e,"boxSizing",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,"border",!1,i)-.5)),s&&(r=ne.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,"marginLeft"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),k.each({margin:"",padding:"",border:"Width"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?"":"px")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=re[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,"fxshow");for(r in n.queue||(null==(a=k._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,"display")),"none"===(c=k.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===k.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Q.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,"fxshow"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&"object"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Q.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each(["toggle","show","hide"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft("show"),slideUp:ft("hide"),slideToggle:ft("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement("input"),at=E.createElement("select").appendChild(E.createElement("option")),ot.type="checkbox",y.checkOn=""!==ot.value,y.optSelected=at.selected,(ot=E.createElement("input")).value="t",ot.type="radio",y.radioValue="t"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(" ")}function xt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,"tabindex");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr("class","");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=xt(this))&&Q.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Q.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+mt(xt(n))+" ").indexOf(t))return!0;return!1}});var wt=/\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?"":e+""})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(wt,""):null==e?"":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,"value");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each(["radio","checkbox"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[k.expando]?e:new k.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,"events")||{})[e.type]&&Q.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\?/;k.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||k.error("Invalid XML: "+e),t};var Nt=/\[\]$/,At=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)qt(n+"["+t+"]",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join("&")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,"elements");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(":disabled")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Ft=E.createElement("a");function Bt(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace(Mt,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(R)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+"//"+Ft.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Lt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(St.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,"$1"),o=(St.test(f)?"&":"?")+"_="+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader("If-Modified-Since",k.lastModified[f]),k.etag[f]&&T.setRequestHeader("If-None-Match",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+$t+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(k.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(k.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--k.active||k.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,"json")},getScript:function(e,t){return k.get(e,void 0,t,"script")}}),k.each(["get","post"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&"withCredentials"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),k.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&k.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?k("<div>").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),k.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});
-/*! jQuery UI - v1.12.1 - 2019-01-27
-* http://jqueryui.com
-* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}t.ui=t.ui||{},t.ui.version="1.12.1";var i=0,s=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,o=s.call(arguments,1),a=0,r=o.length;r>a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,m,g,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),x={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,m=_.offset,g=t.extend({},m),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),x[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?g.left+=p:"center"===n.at[0]&&(g.left+=p/2),"bottom"===n.at[1]?g.top+=f:"center"===n.at[1]&&(g.top+=f/2),u=e(x.at,p,f),g.left+=u[0],g.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),k=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},g),T=e(x.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:k,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=m.left-D.left,i=e+p-l,s=m.top-D.top,r=s+f-c,u={target:{element:v,left:m.left,top:m.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element
-},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/**
- * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler
- * Licensed under MIT
- * @author Ariel Flesler
- * @version 2.1.2
- */
-;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
-/*!
- PowerTip v1.3.1 (2018-04-15)
- https://stevenbenner.github.io/jquery-powertip/
- Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
- Released under MIT license.
- https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
-*/
-(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});/*!
- * jQuery UI Touch Punch 0.2.3
- *
- * Copyright 2011–2014, Dave Furfero
- * Dual licensed under the MIT or GPL Version 2 licenses.
- *
- * Depends:
- *  jquery.ui.widget.js
- *  jquery.ui.mouse.js
- */
-!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
- * http://www.smartmenus.org/
- * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});
\ No newline at end of file
diff --git a/docs/html/menu.js b/docs/html/menu.js
deleted file mode 100644
index 433c15b8..00000000
--- a/docs/html/menu.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- @licstart  The following is the entire license notice for the
- JavaScript code in this file.
-
- Copyright (C) 1997-2017 by Dimitri van Heesch
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
- @licend  The above is the entire license notice
- for the JavaScript code in this file
- */
-function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
-  function makeTree(data,relPath) {
-    var result='';
-    if ('children' in data) {
-      result+='<ul>';
-      for (var i in data.children) {
-        result+='<li><a href="'+relPath+data.children[i].url+'">'+
-                                data.children[i].text+'</a>'+
-                                makeTree(data.children[i],relPath)+'</li>';
-      }
-      result+='</ul>';
-    }
-    return result;
-  }
-
-  $('#main-nav').append(makeTree(menudata,relPath));
-  $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
-  if (searchEnabled) {
-    if (serverSide) {
-      $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
-    } else {
-      $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
-    }
-  }
-  $('#main-menu').smartmenus();
-}
-/* @license-end */
diff --git a/docs/html/menudata.js b/docs/html/menudata.js
deleted file mode 100644
index 62b8be52..00000000
--- a/docs/html/menudata.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-@licstart  The following is the entire license notice for the
-JavaScript code in this file.
-
-Copyright (C) 1997-2019 by Dimitri van Heesch
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of version 2 of the GNU General Public License as published by
-the Free Software Foundation
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-@licend  The above is the entire license notice
-for the JavaScript code in this file
-*/
-var menudata={children:[
-{text:"Main Page",url:"index.html"},
-{text:"Classes",url:"annotated.html",children:[
-{text:"Class List",url:"annotated.html"},
-{text:"Class Index",url:"classes.html"},
-{text:"Class Hierarchy",url:"inherits.html"},
-{text:"Class Members",url:"functions.html",children:[
-{text:"All",url:"functions.html",children:[
-{text:"_",url:"functions.html#index__5F"},
-{text:"c",url:"functions.html#index_c"},
-{text:"i",url:"functions.html#index_i"},
-{text:"m",url:"functions.html#index_m"},
-{text:"o",url:"functions.html#index_o"},
-{text:"p",url:"functions.html#index_p"},
-{text:"r",url:"functions.html#index_r"},
-{text:"s",url:"functions.html#index_s"},
-{text:"u",url:"functions.html#index_u"},
-{text:"z",url:"functions.html#index_z"}]},
-{text:"Functions",url:"functions_func.html",children:[
-{text:"_",url:"functions_func.html#index__5F"},
-{text:"c",url:"functions_func.html#index_c"},
-{text:"i",url:"functions_func.html#index_i"},
-{text:"m",url:"functions_func.html#index_m"},
-{text:"o",url:"functions_func.html#index_o"},
-{text:"p",url:"functions_func.html#index_p"},
-{text:"r",url:"functions_func.html#index_r"},
-{text:"s",url:"functions_func.html#index_s"},
-{text:"u",url:"functions_func.html#index_u"},
-{text:"z",url:"functions_func.html#index_z"}]}]}]}]}
diff --git a/docs/html/namespacef110__gym_1_1unittest_1_1random__trackgen.html b/docs/html/namespacef110__gym_1_1unittest_1_1random__trackgen.html
deleted file mode 100644
index 3a82534b..00000000
--- a/docs/html/namespacef110__gym_1_1unittest_1_1random__trackgen.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.9.1"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: f110_gym.unittest.random_trackgen Namespace Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.1 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div id="nav-path" class="navpath">
-  <ul>
-<li class="navelem"><b>f110_gym</b></li><li class="navelem"><b>unittest</b></li><li class="navelem"><a class="el" href="namespacef110__gym_1_1unittest_1_1random__trackgen.html">random_trackgen</a></li>  </ul>
-</div>
-</div><!-- top -->
-<div class="header">
-  <div class="summary">
-<a href="#func-members">Functions</a> &#124;
-<a href="#var-members">Variables</a>  </div>
-  <div class="headertitle">
-<div class="title">f110_gym.unittest.random_trackgen Namespace Reference</div>  </div>
-</div><!--header-->
-<div class="contents">
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:af5ac6d92744435a0c2572146ec14cd00"><td class="memItemLeft" align="right" valign="top"><a id="af5ac6d92744435a0c2572146ec14cd00"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>create_track</b> ()</td></tr>
-<tr class="separator:af5ac6d92744435a0c2572146ec14cd00"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a10f9f980a813a2beca515c9965995c12"><td class="memItemLeft" align="right" valign="top"><a id="a10f9f980a813a2beca515c9965995c12"></a>
-def&#160;</td><td class="memItemRight" valign="bottom"><b>convert_track</b> (track, track_int, track_ext, iter)</td></tr>
-<tr class="separator:a10f9f980a813a2beca515c9965995c12"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:abfe988f97ecef07688ff57cb15c5c630"><td class="memItemLeft" align="right" valign="top"><a id="abfe988f97ecef07688ff57cb15c5c630"></a>
-int&#160;</td><td class="memItemRight" valign="bottom"><b>NUM_MAPS</b> = 10</td></tr>
-<tr class="separator:abfe988f97ecef07688ff57cb15c5c630"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2fe20a3d4b091cfa0c3eb867adc992ce"><td class="memItemLeft" align="right" valign="top"><a id="a2fe20a3d4b091cfa0c3eb867adc992ce"></a>
-float&#160;</td><td class="memItemRight" valign="bottom"><b>WIDTH</b> = 5.0</td></tr>
-<tr class="separator:a2fe20a3d4b091cfa0c3eb867adc992ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8f9627599e2526027f715cd162b7155f"><td class="memItemLeft" align="right" valign="top"><a id="a8f9627599e2526027f715cd162b7155f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>track</b></td></tr>
-<tr class="separator:a8f9627599e2526027f715cd162b7155f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a55ebef782ee46bdd7cd03aa6a404cd02"><td class="memItemLeft" align="right" valign="top"><a id="a55ebef782ee46bdd7cd03aa6a404cd02"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>track_int</b></td></tr>
-<tr class="separator:a55ebef782ee46bdd7cd03aa6a404cd02"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a492ff0fd0e3e2e4b53c804fe4656e19f"><td class="memItemLeft" align="right" valign="top"><a id="a492ff0fd0e3e2e4b53c804fe4656e19f"></a>
-&#160;</td><td class="memItemRight" valign="bottom"><b>track_ext</b></td></tr>
-<tr class="separator:a492ff0fd0e3e2e4b53c804fe4656e19f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><pre class="fragment"> Generates random tracks.
-    Adapted from https://gym.openai.com/envs/CarRacing-v0</pre> </div></div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
-</small></address>
-</body>
-</html>
diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html
deleted file mode 100644
index d0d7fa4b..00000000
--- a/docs/html/namespaces.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.9.1"/>
-<meta name="viewport" content="width=device-width, initial-scale=1"/>
-<title>f1tenth_gym: Namespace List</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="search/search.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="search/searchdata.js"></script>
-<script type="text/javascript" src="search/search.js"></script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <td id="projectalign" style="padding-left: 0.5em;">
-   <div id="projectname">f1tenth_gym
-   </div>
-  </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.9.1 -->
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
-/* @license-end */
-</script>
-<script type="text/javascript" src="menudata.js"></script>
-<script type="text/javascript" src="menu.js"></script>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-$(function() {
-  initMenu('',true,false,'search.php','Search');
-  $(document).ready(function() { init_search(); });
-});
-/* @license-end */</script>
-<div id="main-nav"></div>
-</div><!-- top -->
-<!-- window showing the filter options -->
-<div id="MSearchSelectWindow"
-     onmouseover="return searchBox.OnSearchSelectShow()"
-     onmouseout="return searchBox.OnSearchSelectHide()"
-     onkeydown="return searchBox.OnSearchSelectKey(event)">
-</div>
-
-<!-- iframe showing the search results (closed by default) -->
-<div id="MSearchResultsWindow">
-<iframe src="javascript:void(0)" frameborder="0" 
-        name="MSearchResults" id="MSearchResults">
-</iframe>
-</div>
-
-<div class="header">
-  <div class="headertitle">
-<div class="title">Namespace List</div>  </div>
-</div><!--header-->
-<div class="contents">
-<div class="textblock">Here is a list of all documented namespaces with brief descriptions:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>f110_gym</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>envs</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>base_classes</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html" target="_self">RaceCar</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_0_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html" target="_self">Simulator</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_1_" class="arrow" onclick="toggleFolder('0_0_1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>collision_models</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_1_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html" target="_self">CollisionTests</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_2_" class="arrow" onclick="toggleFolder('0_0_2_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>dynamic_models</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_2_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html" target="_self">DynamicsTest</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_3_" class="arrow" onclick="toggleFolder('0_0_3_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>f110_env</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_3_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html" target="_self">F110Env</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_4_" class="arrow" onclick="toggleFolder('0_0_4_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>f110_env_backup</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_4_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html" target="_self">F110Env</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_5_" class="arrow" onclick="toggleFolder('0_0_5_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>laser_models</b></td><td class="desc"></td></tr>
-<tr id="row_0_0_5_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html" target="_self">ScanSimulator2D</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_5_1_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html" target="_self">ScanTests</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>unittest</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_0_" class="arrow" onclick="toggleFolder('0_1_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>collision_checks</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_0_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html" target="_self">CollisionTests</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_1_" class="arrow" onclick="toggleFolder('0_1_1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>dynamics_test</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_1_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html" target="_self">DynamicsTest</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_2_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">N</span></span><b>legacy_scan_gen</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_3_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">N</span></span><b>pyglet_test</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_4_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacef110__gym_1_1unittest_1_1random__trackgen.html" target="_self">random_trackgen</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_5_" class="arrow" onclick="toggleFolder('0_1_5_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>scan_sim</b></td><td class="desc"></td></tr>
-<tr id="row_0_1_5_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html" target="_self">ScanSimulator2D</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_5_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html" target="_self">ScanTests</a></td><td class="desc"></td></tr>
-</table>
-</div><!-- directory -->
-</div><!-- contents -->
-<!-- start footer part -->
-<hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
-</small></address>
-</body>
-</html>
diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png
deleted file mode 100644
index 72a58a529ed3a9ed6aa0c51a79cf207e026deee2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 153
zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc)
zn!W8uqtnIQ>_<lqdB{jiFDSaaN3W^xbJMH7CDK7=Q3_$6tQ&<~Cp4L6ZEndC`8;cO
zrss?`_g+2sGU&M|cu~La_w1Rnf~7w`e!jQgteDwDLg6kW!`DinT@0SCelF{r5}E+Y
CM>z8U

diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png
deleted file mode 100644
index 2093a237a94f6c83e19ec6e5fd42f7ddabdafa81..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 95
zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE
tr?otc=hd~V+ws&_A@j8Fiv!K<?EJwDd;c`qumW{3c)I$ztaD0e0syCC7$E=v

diff --git a/docs/html/nav_h.png b/docs/html/nav_h.png
deleted file mode 100644
index 33389b101d9cd9b4c98ad286b5d9c46a6671f650..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 98
zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t22D>F$B+ufw|5=67#uj90@pIL
wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&v<Kx}xDV3h>FVdQ&MBb@0HFXL<NyEw

diff --git a/docs/html/open.png b/docs/html/open.png
deleted file mode 100644
index 30f75c7efe2dd0c9e956e35b69777a02751f048b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 123
zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y
znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM<Rdl=8h
W@EqZ{ytxBt8iS{+pUXO@geCxcDJg#d

diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html
deleted file mode 100644
index 26dd244f..00000000
--- a/docs/html/search/all_0.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_0.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js
deleted file mode 100644
index 2145ce5b..00000000
--- a/docs/html/search/all_0.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var searchData=
-[
-  ['_5f_5fdel_5f_5f_0',['__del__',['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ae193b905b3d1c213ec4324283ebdf201',1,'f110_gym.envs.f110_env.F110Env.__del__()'],['../classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#ab53974d19ae639eaa8d922db303d21c4',1,'f110_gym.envs.f110_env_backup.F110Env.__del__()']]],
-  ['_5f_5finit_5f_5f_1',['__init__',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#af342754a877c42b3828a03b6425801d4',1,'f110_gym.envs.base_classes.RaceCar.__init__()'],['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab865873c6f0afa3741add4f39e5fd872',1,'f110_gym.envs.base_classes.Simulator.__init__()'],['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b24abdbb4d13744255ebfdb3d509354',1,'f110_gym.envs.rendering.EnvRenderer.__init__()']]]
-];
diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html
deleted file mode 100644
index 8eb215b9..00000000
--- a/docs/html/search/all_1.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_1.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js
deleted file mode 100644
index db0bbaa3..00000000
--- a/docs/html/search/all_1.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['app_2',['App',['../classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html',1,'f110_gym::unittest::pyglet_test_camera']]]
-];
diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html
deleted file mode 100644
index b26d9165..00000000
--- a/docs/html/search/all_2.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_2.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js
deleted file mode 100644
index f16a7e36..00000000
--- a/docs/html/search/all_2.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var searchData=
-[
-  ['camera_3',['Camera',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html',1,'f110_gym::unittest::pyglet_test']]],
-  ['centeredcamera_4',['CenteredCamera',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html',1,'f110_gym::unittest::pyglet_test']]],
-  ['check_5fcollision_5',['check_collision',['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a7f32c68e14bf47447ce9599c8db21236',1,'f110_gym::envs::base_classes::Simulator']]],
-  ['check_5fttc_6',['check_ttc',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4577a30fd8879de7df1d0ace7702f450',1,'f110_gym::envs::base_classes::RaceCar']]],
-  ['collisiontests_7',['CollisionTests',['../classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html',1,'f110_gym.unittest.collision_checks.CollisionTests'],['../classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html',1,'f110_gym.envs.collision_models.CollisionTests']]]
-];
diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html
deleted file mode 100644
index b61b96f8..00000000
--- a/docs/html/search/all_3.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_3.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js
deleted file mode 100644
index 94f62670..00000000
--- a/docs/html/search/all_3.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['dynamicstest_8',['DynamicsTest',['../classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html',1,'f110_gym.envs.dynamic_models.DynamicsTest'],['../classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html',1,'f110_gym.unittest.dynamics_test.DynamicsTest']]]
-];
diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html
deleted file mode 100644
index 06de1550..00000000
--- a/docs/html/search/all_4.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_4.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js
deleted file mode 100644
index 1e21c324..00000000
--- a/docs/html/search/all_4.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['envrenderer_9',['EnvRenderer',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html',1,'f110_gym::envs::rendering']]]
-];
diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html
deleted file mode 100644
index 2544c4e5..00000000
--- a/docs/html/search/all_5.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_5.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js
deleted file mode 100644
index 5d363f3c..00000000
--- a/docs/html/search/all_5.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['f110env_10',['F110Env',['../classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html',1,'f110_gym.envs.f110_env_backup.F110Env'],['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html',1,'f110_gym.envs.f110_env.F110Env']]]
-];
diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html
deleted file mode 100644
index 43f14eab..00000000
--- a/docs/html/search/all_6.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_6.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js
deleted file mode 100644
index 56905cc6..00000000
--- a/docs/html/search/all_6.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['init_5fmap_11',['init_map',['../classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#acb0331bb92b190cdd592060385726160',1,'f110_gym::envs::f110_env_backup::F110Env']]]
-];
diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html
deleted file mode 100644
index af52f82a..00000000
--- a/docs/html/search/all_7.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_7.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js
deleted file mode 100644
index 30aae7fd..00000000
--- a/docs/html/search/all_7.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['move_12',['move',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#aab35e83f0748c949b8e3a8414097d193',1,'f110_gym::unittest::pyglet_test::Camera']]]
-];
diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html
deleted file mode 100644
index cf2b5df9..00000000
--- a/docs/html/search/all_8.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_8.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js
deleted file mode 100644
index 56fbeb09..00000000
--- a/docs/html/search/all_8.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var searchData=
-[
-  ['on_5fclose_13',['on_close',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a05cb0faf5893e3cbed58cf20d0997bf7',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['on_5fdraw_14',['on_draw',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a0cbcdabef2cdda765d6721ca796ecfd0',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['on_5fmouse_5fdrag_15',['on_mouse_drag',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a557710400bb370a7509dbc17658eadd8',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['on_5fmouse_5fscroll_16',['on_mouse_scroll',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a10f7c38d921015b5574ba0c858a245bb',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['on_5fresize_17',['on_resize',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ac8bbef5b8910515dd18c8a6624730898',1,'f110_gym::envs::rendering::EnvRenderer']]]
-];
diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html
deleted file mode 100644
index 690785a5..00000000
--- a/docs/html/search/all_9.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_9.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js
deleted file mode 100644
index 1e4b0dcd..00000000
--- a/docs/html/search/all_9.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['position_18',['position',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a3d2948dc5b1a9d2a6c597a2850ac989b',1,'f110_gym.unittest.pyglet_test.Camera.position(self)'],['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#ac8e5a2d90df8cd68463746be6e65bee8',1,'f110_gym.unittest.pyglet_test.Camera.position(self, value)']]]
-];
diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html
deleted file mode 100644
index f2f3d3a3..00000000
--- a/docs/html/search/all_a.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_a.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js
deleted file mode 100644
index beaa22a9..00000000
--- a/docs/html/search/all_a.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var searchData=
-[
-  ['racecar_19',['RaceCar',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html',1,'f110_gym::envs::base_classes']]],
-  ['ray_5fcast_5fagents_20',['ray_cast_agents',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a7d15e74a1b82646675d60ce02cdce6b5',1,'f110_gym::envs::base_classes::RaceCar']]],
-  ['render_21',['render',['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab8e76450e63ef88c1ac9721f717fa375',1,'f110_gym::envs::f110_env::F110Env']]],
-  ['reset_22',['reset',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a0fa587dc3c1a12c9217f0bd093c1bc08',1,'f110_gym.envs.base_classes.RaceCar.reset()'],['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab63c655ff0cd1bb2accce7be9fff69e8',1,'f110_gym.envs.base_classes.Simulator.reset()'],['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab213d62cea216bbd82d0f6d7061452fb',1,'f110_gym.envs.f110_env.F110Env.reset()']]]
-];
diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html
deleted file mode 100644
index 14f34036..00000000
--- a/docs/html/search/all_b.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_b.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js
deleted file mode 100644
index 38deb7ca..00000000
--- a/docs/html/search/all_b.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var searchData=
-[
-  ['scan_23',['scan',['../classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a12c4b2f39bda5dd3a1ea14e70e4370cc',1,'f110_gym.envs.laser_models.ScanSimulator2D.scan()'],['../classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a038a0fc7e42df7827c175fdb3755f2c4',1,'f110_gym.unittest.scan_sim.ScanSimulator2D.scan()']]],
-  ['scansimulator2d_24',['ScanSimulator2D',['../classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html',1,'f110_gym.unittest.scan_sim.ScanSimulator2D'],['../classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html',1,'f110_gym.envs.laser_models.ScanSimulator2D']]],
-  ['scantests_25',['ScanTests',['../classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html',1,'f110_gym.unittest.scan_sim.ScanTests'],['../classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html',1,'f110_gym.envs.laser_models.ScanTests']]],
-  ['set_5fmap_26',['set_map',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a2a60c9ee34f2f09fb0a7e5cc7b287897',1,'f110_gym.envs.base_classes.RaceCar.set_map()'],['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a0a566351f20a16b7545fcd20ca9adb57',1,'f110_gym.envs.base_classes.Simulator.set_map()'],['../classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a989dd691fd4c08d0f18d6c241862d03c',1,'f110_gym.envs.laser_models.ScanSimulator2D.set_map()'],['../classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a00925f5100ae8b2e556154e8935ea86e',1,'f110_gym.unittest.scan_sim.ScanSimulator2D.set_map()']]],
-  ['simulator_27',['Simulator',['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html',1,'f110_gym::envs::base_classes']]],
-  ['step_28',['step',['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#af1fb175457362d7419301180b1b3b4c6',1,'f110_gym.envs.base_classes.Simulator.step()'],['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a0df471828ba39c5228bf5c814a5d0e6e',1,'f110_gym.envs.f110_env.F110Env.step()']]]
-];
diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html
deleted file mode 100644
index da60ab8d..00000000
--- a/docs/html/search/all_c.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_c.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js
deleted file mode 100644
index 93a2641c..00000000
--- a/docs/html/search/all_c.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var searchData=
-[
-  ['update_5fmap_29',['update_map',['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#afc210c3941c1548692c75c961ad443df',1,'f110_gym.envs.f110_env.F110Env.update_map()'],['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ae9c12c08c2f799504b6390b2d0ffda3f',1,'f110_gym.envs.rendering.EnvRenderer.update_map()']]],
-  ['update_5fobs_30',['update_obs',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b9284f2e59c9000f10bd18e1ec6a9b3',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['update_5fopp_5fposes_31',['update_opp_poses',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4800c5ac90ba93b79a0338e5e34ead43',1,'f110_gym::envs::base_classes::RaceCar']]],
-  ['update_5fparams_32',['update_params',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a6ab5b5dd420b182b5156ee9566c03411',1,'f110_gym.envs.base_classes.RaceCar.update_params()'],['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a974c58957a6b14582149d704ef28a68c',1,'f110_gym.envs.base_classes.Simulator.update_params()'],['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a79d419bbf2ff0e377d808e4a8f41cc81',1,'f110_gym.envs.f110_env.F110Env.update_params()']]],
-  ['update_5fpose_33',['update_pose',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#ae12c14c1353e6aab2f72036593d85518',1,'f110_gym::envs::base_classes::RaceCar']]],
-  ['update_5fscan_34',['update_scan',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a356ec05a0a0c056f4d43f5fb0451c83d',1,'f110_gym::envs::base_classes::RaceCar']]]
-];
diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html
deleted file mode 100644
index bc376fec..00000000
--- a/docs/html/search/all_d.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="all_d.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js
deleted file mode 100644
index b24cd13a..00000000
--- a/docs/html/search/all_d.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['zoom_35',['zoom',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a6f0bedfc6f5801b398d5ce537d70c059',1,'f110_gym::unittest::pyglet_test::Camera']]]
-];
diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html
deleted file mode 100644
index f7e4c14e..00000000
--- a/docs/html/search/classes_0.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="classes_0.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js
deleted file mode 100644
index 54f8aad4..00000000
--- a/docs/html/search/classes_0.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['app_36',['App',['../classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.html',1,'f110_gym::unittest::pyglet_test_camera']]]
-];
diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html
deleted file mode 100644
index c7ff4b31..00000000
--- a/docs/html/search/classes_1.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="classes_1.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js
deleted file mode 100644
index e75aa0d6..00000000
--- a/docs/html/search/classes_1.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var searchData=
-[
-  ['camera_37',['Camera',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html',1,'f110_gym::unittest::pyglet_test']]],
-  ['centeredcamera_38',['CenteredCamera',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.html',1,'f110_gym::unittest::pyglet_test']]],
-  ['collisiontests_39',['CollisionTests',['../classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.html',1,'f110_gym.unittest.collision_checks.CollisionTests'],['../classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.html',1,'f110_gym.envs.collision_models.CollisionTests']]]
-];
diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html
deleted file mode 100644
index 0d1e8a0c..00000000
--- a/docs/html/search/classes_2.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="classes_2.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js
deleted file mode 100644
index 765eedae..00000000
--- a/docs/html/search/classes_2.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['dynamicstest_40',['DynamicsTest',['../classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.html',1,'f110_gym.envs.dynamic_models.DynamicsTest'],['../classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.html',1,'f110_gym.unittest.dynamics_test.DynamicsTest']]]
-];
diff --git a/docs/html/search/classes_3.html b/docs/html/search/classes_3.html
deleted file mode 100644
index 21025456..00000000
--- a/docs/html/search/classes_3.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="classes_3.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js
deleted file mode 100644
index 574d7115..00000000
--- a/docs/html/search/classes_3.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['envrenderer_41',['EnvRenderer',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html',1,'f110_gym::envs::rendering']]]
-];
diff --git a/docs/html/search/classes_4.html b/docs/html/search/classes_4.html
deleted file mode 100644
index 095ab595..00000000
--- a/docs/html/search/classes_4.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="classes_4.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js
deleted file mode 100644
index 92c7e9e3..00000000
--- a/docs/html/search/classes_4.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['f110env_42',['F110Env',['../classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html',1,'f110_gym.envs.f110_env_backup.F110Env'],['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html',1,'f110_gym.envs.f110_env.F110Env']]]
-];
diff --git a/docs/html/search/classes_5.html b/docs/html/search/classes_5.html
deleted file mode 100644
index fc9cdc99..00000000
--- a/docs/html/search/classes_5.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="classes_5.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/classes_5.js b/docs/html/search/classes_5.js
deleted file mode 100644
index 9fb423bd..00000000
--- a/docs/html/search/classes_5.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['racecar_43',['RaceCar',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html',1,'f110_gym::envs::base_classes']]]
-];
diff --git a/docs/html/search/classes_6.html b/docs/html/search/classes_6.html
deleted file mode 100644
index 1ecfdddf..00000000
--- a/docs/html/search/classes_6.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="classes_6.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/classes_6.js b/docs/html/search/classes_6.js
deleted file mode 100644
index ed07bda0..00000000
--- a/docs/html/search/classes_6.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var searchData=
-[
-  ['scansimulator2d_44',['ScanSimulator2D',['../classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html',1,'f110_gym.unittest.scan_sim.ScanSimulator2D'],['../classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html',1,'f110_gym.envs.laser_models.ScanSimulator2D']]],
-  ['scantests_45',['ScanTests',['../classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.html',1,'f110_gym.unittest.scan_sim.ScanTests'],['../classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.html',1,'f110_gym.envs.laser_models.ScanTests']]],
-  ['simulator_46',['Simulator',['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html',1,'f110_gym::envs::base_classes']]]
-];
diff --git a/docs/html/search/close.png b/docs/html/search/close.png
deleted file mode 100644
index 9342d3dfeea7b7c4ee610987e717804b5a42ceb9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 273
zcmV+s0q*{ZP)<h;3K|Lk000e1NJLTq000XB000XJ1^@s6sjPP<0002kNkl<Z7#Vd@
zy%I)14BQwM3KSF?L+drXf2Tud1~Vwo-gkQ=D&H2DpWDkOIl+T{-_5ct*tQMlc_NA;
z#Bq!~&yl97kminQn#?$kxUNgzzBUX)lx2ycD8xIC<1djfsKP>4(RlMby96)VwnbG{
zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b)
zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC
X2MT$R4iQDd00000NkvXXu0mjfia~GN

diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg
deleted file mode 100644
index a933eea1..00000000
--- a/docs/html/search/close.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   viewBox="0 0 11 11"
-   height="11"
-   width="11"
-   id="svg2"
-   version="1.1">
-  <metadata
-     id="metadata8">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs6" />
-  <path
-     id="path12"
-     d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
-     style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
-</svg>
diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html
deleted file mode 100644
index e17c7111..00000000
--- a/docs/html/search/functions_0.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_0.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js
deleted file mode 100644
index 99093c72..00000000
--- a/docs/html/search/functions_0.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var searchData=
-[
-  ['_5f_5fdel_5f_5f_47',['__del__',['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ae193b905b3d1c213ec4324283ebdf201',1,'f110_gym.envs.f110_env.F110Env.__del__()'],['../classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#ab53974d19ae639eaa8d922db303d21c4',1,'f110_gym.envs.f110_env_backup.F110Env.__del__()']]],
-  ['_5f_5finit_5f_5f_48',['__init__',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#af342754a877c42b3828a03b6425801d4',1,'f110_gym.envs.base_classes.RaceCar.__init__()'],['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab865873c6f0afa3741add4f39e5fd872',1,'f110_gym.envs.base_classes.Simulator.__init__()'],['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b24abdbb4d13744255ebfdb3d509354',1,'f110_gym.envs.rendering.EnvRenderer.__init__()']]]
-];
diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html
deleted file mode 100644
index 0ddac0a4..00000000
--- a/docs/html/search/functions_1.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_1.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js
deleted file mode 100644
index c0ed981d..00000000
--- a/docs/html/search/functions_1.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var searchData=
-[
-  ['check_5fcollision_49',['check_collision',['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a7f32c68e14bf47447ce9599c8db21236',1,'f110_gym::envs::base_classes::Simulator']]],
-  ['check_5fttc_50',['check_ttc',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4577a30fd8879de7df1d0ace7702f450',1,'f110_gym::envs::base_classes::RaceCar']]]
-];
diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html
deleted file mode 100644
index 2737c5ac..00000000
--- a/docs/html/search/functions_2.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_2.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js
deleted file mode 100644
index 52489d0f..00000000
--- a/docs/html/search/functions_2.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['init_5fmap_51',['init_map',['../classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.html#acb0331bb92b190cdd592060385726160',1,'f110_gym::envs::f110_env_backup::F110Env']]]
-];
diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html
deleted file mode 100644
index 6da86e7d..00000000
--- a/docs/html/search/functions_3.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_3.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js
deleted file mode 100644
index 12ed65b0..00000000
--- a/docs/html/search/functions_3.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['move_52',['move',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#aab35e83f0748c949b8e3a8414097d193',1,'f110_gym::unittest::pyglet_test::Camera']]]
-];
diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html
deleted file mode 100644
index 911304e6..00000000
--- a/docs/html/search/functions_4.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_4.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js
deleted file mode 100644
index 0089afdd..00000000
--- a/docs/html/search/functions_4.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var searchData=
-[
-  ['on_5fclose_53',['on_close',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a05cb0faf5893e3cbed58cf20d0997bf7',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['on_5fdraw_54',['on_draw',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a0cbcdabef2cdda765d6721ca796ecfd0',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['on_5fmouse_5fdrag_55',['on_mouse_drag',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a557710400bb370a7509dbc17658eadd8',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['on_5fmouse_5fscroll_56',['on_mouse_scroll',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a10f7c38d921015b5574ba0c858a245bb',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['on_5fresize_57',['on_resize',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ac8bbef5b8910515dd18c8a6624730898',1,'f110_gym::envs::rendering::EnvRenderer']]]
-];
diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html
deleted file mode 100644
index 61b920db..00000000
--- a/docs/html/search/functions_5.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_5.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js
deleted file mode 100644
index 9f69ae38..00000000
--- a/docs/html/search/functions_5.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['position_58',['position',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a3d2948dc5b1a9d2a6c597a2850ac989b',1,'f110_gym.unittest.pyglet_test.Camera.position(self)'],['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#ac8e5a2d90df8cd68463746be6e65bee8',1,'f110_gym.unittest.pyglet_test.Camera.position(self, value)']]]
-];
diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html
deleted file mode 100644
index dc70a4a0..00000000
--- a/docs/html/search/functions_6.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_6.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js
deleted file mode 100644
index bbe7324a..00000000
--- a/docs/html/search/functions_6.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var searchData=
-[
-  ['ray_5fcast_5fagents_59',['ray_cast_agents',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a7d15e74a1b82646675d60ce02cdce6b5',1,'f110_gym::envs::base_classes::RaceCar']]],
-  ['render_60',['render',['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab8e76450e63ef88c1ac9721f717fa375',1,'f110_gym::envs::f110_env::F110Env']]],
-  ['reset_61',['reset',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a0fa587dc3c1a12c9217f0bd093c1bc08',1,'f110_gym.envs.base_classes.RaceCar.reset()'],['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#ab63c655ff0cd1bb2accce7be9fff69e8',1,'f110_gym.envs.base_classes.Simulator.reset()'],['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#ab213d62cea216bbd82d0f6d7061452fb',1,'f110_gym.envs.f110_env.F110Env.reset()']]]
-];
diff --git a/docs/html/search/functions_7.html b/docs/html/search/functions_7.html
deleted file mode 100644
index 7de31067..00000000
--- a/docs/html/search/functions_7.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_7.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js
deleted file mode 100644
index f889b796..00000000
--- a/docs/html/search/functions_7.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var searchData=
-[
-  ['scan_62',['scan',['../classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a12c4b2f39bda5dd3a1ea14e70e4370cc',1,'f110_gym.envs.laser_models.ScanSimulator2D.scan()'],['../classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a038a0fc7e42df7827c175fdb3755f2c4',1,'f110_gym.unittest.scan_sim.ScanSimulator2D.scan()']]],
-  ['set_5fmap_63',['set_map',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a2a60c9ee34f2f09fb0a7e5cc7b287897',1,'f110_gym.envs.base_classes.RaceCar.set_map()'],['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a0a566351f20a16b7545fcd20ca9adb57',1,'f110_gym.envs.base_classes.Simulator.set_map()'],['../classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.html#a989dd691fd4c08d0f18d6c241862d03c',1,'f110_gym.envs.laser_models.ScanSimulator2D.set_map()'],['../classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.html#a00925f5100ae8b2e556154e8935ea86e',1,'f110_gym.unittest.scan_sim.ScanSimulator2D.set_map()']]],
-  ['step_64',['step',['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#af1fb175457362d7419301180b1b3b4c6',1,'f110_gym.envs.base_classes.Simulator.step()'],['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a0df471828ba39c5228bf5c814a5d0e6e',1,'f110_gym.envs.f110_env.F110Env.step()']]]
-];
diff --git a/docs/html/search/functions_8.html b/docs/html/search/functions_8.html
deleted file mode 100644
index 7422be24..00000000
--- a/docs/html/search/functions_8.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_8.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js
deleted file mode 100644
index 43c88610..00000000
--- a/docs/html/search/functions_8.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var searchData=
-[
-  ['update_5fmap_65',['update_map',['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#afc210c3941c1548692c75c961ad443df',1,'f110_gym.envs.f110_env.F110Env.update_map()'],['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#ae9c12c08c2f799504b6390b2d0ffda3f',1,'f110_gym.envs.rendering.EnvRenderer.update_map()']]],
-  ['update_5fobs_66',['update_obs',['../classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.html#a1b9284f2e59c9000f10bd18e1ec6a9b3',1,'f110_gym::envs::rendering::EnvRenderer']]],
-  ['update_5fopp_5fposes_67',['update_opp_poses',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a4800c5ac90ba93b79a0338e5e34ead43',1,'f110_gym::envs::base_classes::RaceCar']]],
-  ['update_5fparams_68',['update_params',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a6ab5b5dd420b182b5156ee9566c03411',1,'f110_gym.envs.base_classes.RaceCar.update_params()'],['../classf110__gym_1_1envs_1_1base__classes_1_1_simulator.html#a974c58957a6b14582149d704ef28a68c',1,'f110_gym.envs.base_classes.Simulator.update_params()'],['../classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.html#a79d419bbf2ff0e377d808e4a8f41cc81',1,'f110_gym.envs.f110_env.F110Env.update_params()']]],
-  ['update_5fpose_69',['update_pose',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#ae12c14c1353e6aab2f72036593d85518',1,'f110_gym::envs::base_classes::RaceCar']]],
-  ['update_5fscan_70',['update_scan',['../classf110__gym_1_1envs_1_1base__classes_1_1_race_car.html#a356ec05a0a0c056f4d43f5fb0451c83d',1,'f110_gym::envs::base_classes::RaceCar']]]
-];
diff --git a/docs/html/search/functions_9.html b/docs/html/search/functions_9.html
deleted file mode 100644
index befd4faa..00000000
--- a/docs/html/search/functions_9.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.8.17"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="functions_9.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
---></script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript"><!--
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-/* @license-end */
---></script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js
deleted file mode 100644
index 9f6d2fb7..00000000
--- a/docs/html/search/functions_9.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['zoom_71',['zoom',['../classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.html#a6f0bedfc6f5801b398d5ce537d70c059',1,'f110_gym::unittest::pyglet_test::Camera']]]
-];
diff --git a/docs/html/search/mag_sel.png b/docs/html/search/mag_sel.png
deleted file mode 100644
index 39c0ed52a25dd9d080ee0d42ae6c6042bdfa04d7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 465
zcmeAS@N?(olHy`uVBq!ia0vp^B0wz6!2%?$TA$hhDVB6cUq=Rpjs4tz5?O(Kg=CK)
zUj~NU84L`?eGCi_EEpJ?t}-xGu`@87+QPtK?83kxQ`TapwHK(CDaqU2h2ejD|C#+j
z9%q3^WHAE+w=f7ZGR&GI0Tg5}@$_|Nf5gMiEhFgvHvB$N=!mC_V~EE2vzPXI9ZnEo
zd+<K({3L0CKXWH-3%}r+E_-Apm;5f#D#1yQ9tm7(D$~3x$L{RO>1zHor@dYLod2Y{
z@R$7$Z!PXTbY$|@#T!bMzm?`b<(R`cb<MP?hu%oYaGp0?(kq_maw@j&T661#vfeNa
z56e`=(|?b6&2UcA3%PHQYAJhwJuxRSJ5lG(M5`)}`##md?Z)$~s|?Qgy^UKLu&Y!n
zrmSSchq?T{<-JpHwHBBzXs*rGoojvZ$H!~Y-s}HeoL$Q(r@Cv?KULeqK>w(gxJHzu
zB$lLFB^RXvDF!10LknF)BV7aY5JN*NBMU1-b8Q0yD+2>vd*|CI8glbfGSez?Ylunu
RoetE%;OXk;vd$@?2>>CYplSdB

diff --git a/docs/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg
deleted file mode 100644
index 03626f64..00000000
--- a/docs/html/search/mag_sel.svg
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   id="svg2"
-   width="20"
-   height="19"
-   viewBox="0 0 20 19"
-   sodipodi:docname="mag_sel.svg"
-   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
-  <metadata
-     id="metadata8">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs6" />
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="2096"
-     id="namedview4"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:zoom="32"
-     inkscape:cx="5.9792688"
-     inkscape:cy="1.1436277"
-     inkscape:window-x="1920"
-     inkscape:window-y="27"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="svg2" />
-  <circle
-     style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
-     id="path4611"
-     cx="5.5"
-     cy="8.5"
-     r="3.5" />
-  <path
-     style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="M 11,7 13.5,10 16,7 Z"
-     id="path4609"
-     inkscape:connector-curvature="0"
-     sodipodi:nodetypes="cccc" />
-  <path
-     style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-     d="m 8.1085854,11.109059 2.7823556,2.782356"
-     id="path4630"
-     inkscape:connector-curvature="0" />
-</svg>
diff --git a/docs/html/search/namespaces_0.html b/docs/html/search/namespaces_0.html
deleted file mode 100644
index 21db2c3a..00000000
--- a/docs/html/search/namespaces_0.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta name="generator" content="Doxygen 1.9.1"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="namespaces_0.js"></script>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="Loading">Loading...</div>
-<div id="SRResults"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-createResults();
-/* @license-end */
-</script>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults");
-searchResults.Search();
-window.addEventListener("message", function(event) {
-  if (event.data == "take_focus") {
-    var elem = searchResults.NavNext(0);
-    if (elem) elem.focus();
-  }
-});
-/* @license-end */
-</script>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/namespaces_0.js b/docs/html/search/namespaces_0.js
deleted file mode 100644
index 0f83a327..00000000
--- a/docs/html/search/namespaces_0.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var searchData=
-[
-  ['random_5ftrackgen_30',['random_trackgen',['../namespacef110__gym_1_1unittest_1_1random__trackgen.html',1,'f110_gym::unittest']]]
-];
diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html
deleted file mode 100644
index 43773208..00000000
--- a/docs/html/search/nomatches.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html><head><title></title>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<link rel="stylesheet" type="text/css" href="search.css"/>
-<script type="text/javascript" src="search.js"></script>
-</head>
-<body class="SRPage">
-<div id="SRIndex">
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</body>
-</html>
diff --git a/docs/html/search/search.css b/docs/html/search/search.css
deleted file mode 100644
index 3cf9df94..00000000
--- a/docs/html/search/search.css
+++ /dev/null
@@ -1,271 +0,0 @@
-/*---------------- Search Box */
-
-#FSearchBox {
-    float: left;
-}
-
-#MSearchBox {
-    white-space : nowrap;
-    float: none;
-    margin-top: 8px;
-    right: 0px;
-    width: 170px;
-    height: 24px;
-    z-index: 102;
-}
-
-#MSearchBox .left
-{
-    display:block;
-    position:absolute;
-    left:10px;
-    width:20px;
-    height:19px;
-    background:url('search_l.png') no-repeat;
-    background-position:right;
-}
-
-#MSearchSelect {
-    display:block;
-    position:absolute;
-    width:20px;
-    height:19px;
-}
-
-.left #MSearchSelect {
-    left:4px;
-}
-
-.right #MSearchSelect {
-    right:5px;
-}
-
-#MSearchField {
-    display:block;
-    position:absolute;
-    height:19px;
-    background:url('search_m.png') repeat-x;
-    border:none;
-    width:115px;
-    margin-left:20px;
-    padding-left:4px;
-    color: #909090;
-    outline: none;
-    font: 9pt Arial, Verdana, sans-serif;
-    -webkit-border-radius: 0px;
-}
-
-#FSearchBox #MSearchField {
-    margin-left:15px;
-}
-
-#MSearchBox .right {
-    display:block;
-    position:absolute;
-    right:10px;
-    top:8px;
-    width:20px;
-    height:19px;
-    background:url('search_r.png') no-repeat;
-    background-position:left;
-}
-
-#MSearchClose {
-    display: none;
-    position: absolute;
-    top: 4px;
-    background : none;
-    border: none;
-    margin: 0px 4px 0px 0px;
-    padding: 0px 0px;
-    outline: none;
-}
-
-.left #MSearchClose {
-    left: 6px;
-}
-
-.right #MSearchClose {
-    right: 2px;
-}
-
-.MSearchBoxActive #MSearchField {
-    color: #000000;
-}
-
-/*---------------- Search filter selection */
-
-#MSearchSelectWindow {
-    display: none;
-    position: absolute;
-    left: 0; top: 0;
-    border: 1px solid #90A5CE;
-    background-color: #F9FAFC;
-    z-index: 10001;
-    padding-top: 4px;
-    padding-bottom: 4px;
-    -moz-border-radius: 4px;
-    -webkit-border-top-left-radius: 4px;
-    -webkit-border-top-right-radius: 4px;
-    -webkit-border-bottom-left-radius: 4px;
-    -webkit-border-bottom-right-radius: 4px;
-    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-}
-
-.SelectItem {
-    font: 8pt Arial, Verdana, sans-serif;
-    padding-left:  2px;
-    padding-right: 12px;
-    border: 0px;
-}
-
-span.SelectionMark {
-    margin-right: 4px;
-    font-family: monospace;
-    outline-style: none;
-    text-decoration: none;
-}
-
-a.SelectItem {
-    display: block;
-    outline-style: none;
-    color: #000000; 
-    text-decoration: none;
-    padding-left:   6px;
-    padding-right: 12px;
-}
-
-a.SelectItem:focus,
-a.SelectItem:active {
-    color: #000000; 
-    outline-style: none;
-    text-decoration: none;
-}
-
-a.SelectItem:hover {
-    color: #FFFFFF;
-    background-color: #3D578C;
-    outline-style: none;
-    text-decoration: none;
-    cursor: pointer;
-    display: block;
-}
-
-/*---------------- Search results window */
-
-iframe#MSearchResults {
-    width: 60ex;
-    height: 15em;
-}
-
-#MSearchResultsWindow {
-    display: none;
-    position: absolute;
-    left: 0; top: 0;
-    border: 1px solid #000;
-    background-color: #EEF1F7;
-    z-index:10000;
-}
-
-/* ----------------------------------- */
-
-
-#SRIndex {
-    clear:both; 
-    padding-bottom: 15px;
-}
-
-.SREntry {
-    font-size: 10pt;
-    padding-left: 1ex;
-}
-
-.SRPage .SREntry {
-    font-size: 8pt;
-    padding: 1px 5px;
-}
-
-body.SRPage {
-    margin: 5px 2px;
-}
-
-.SRChildren {
-    padding-left: 3ex; padding-bottom: .5em 
-}
-
-.SRPage .SRChildren {
-    display: none;
-}
-
-.SRSymbol {
-    font-weight: bold; 
-    color: #425E97;
-    font-family: Arial, Verdana, sans-serif;
-    text-decoration: none;
-    outline: none;
-}
-
-a.SRScope {
-    display: block;
-    color: #425E97; 
-    font-family: Arial, Verdana, sans-serif;
-    text-decoration: none;
-    outline: none;
-}
-
-a.SRSymbol:focus, a.SRSymbol:active,
-a.SRScope:focus, a.SRScope:active {
-    text-decoration: underline;
-}
-
-span.SRScope {
-    padding-left: 4px;
-}
-
-.SRPage .SRStatus {
-    padding: 2px 5px;
-    font-size: 8pt;
-    font-style: italic;
-}
-
-.SRResult {
-    display: none;
-}
-
-DIV.searchresults {
-    margin-left: 10px;
-    margin-right: 10px;
-}
-
-/*---------------- External search page results */
-
-.searchresult {
-    background-color: #F0F3F8;
-}
-
-.pages b {
-   color: white;
-   padding: 5px 5px 3px 5px;
-   background-image: url("../tab_a.png");
-   background-repeat: repeat-x;
-   text-shadow: 0 1px 1px #000000;
-}
-
-.pages {
-    line-height: 17px;
-    margin-left: 4px;
-    text-decoration: none;
-}
-
-.hl {
-    font-weight: bold;
-}
-
-#searchresults {
-    margin-bottom: 20px;
-}
-
-.searchpages {
-    margin-top: 10px;
-}
-
diff --git a/docs/html/search/search.js b/docs/html/search/search.js
deleted file mode 100644
index a554ab9c..00000000
--- a/docs/html/search/search.js
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- @licstart  The following is the entire license notice for the
- JavaScript code in this file.
-
- Copyright (C) 1997-2017 by Dimitri van Heesch
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
- @licend  The above is the entire license notice
- for the JavaScript code in this file
- */
-function convertToId(search)
-{
-  var result = '';
-  for (i=0;i<search.length;i++)
-  {
-    var c = search.charAt(i);
-    var cn = c.charCodeAt(0);
-    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
-    {
-      result+=c;
-    }
-    else if (cn<16)
-    {
-      result+="_0"+cn.toString(16);
-    }
-    else
-    {
-      result+="_"+cn.toString(16);
-    }
-  }
-  return result;
-}
-
-function getXPos(item)
-{
-  var x = 0;
-  if (item.offsetWidth)
-  {
-    while (item && item!=document.body)
-    {
-      x   += item.offsetLeft;
-      item = item.offsetParent;
-    }
-  }
-  return x;
-}
-
-function getYPos(item)
-{
-  var y = 0;
-  if (item.offsetWidth)
-  {
-     while (item && item!=document.body)
-     {
-       y   += item.offsetTop;
-       item = item.offsetParent;
-     }
-  }
-  return y;
-}
-
-/* A class handling everything associated with the search panel.
-
-   Parameters:
-   name - The name of the global variable that will be
-          storing this instance.  Is needed to be able to set timeouts.
-   resultPath - path to use for external files
-*/
-function SearchBox(name, resultsPath, inFrame, label)
-{
-  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
-
-  // ---------- Instance variables
-  this.name                  = name;
-  this.resultsPath           = resultsPath;
-  this.keyTimeout            = 0;
-  this.keyTimeoutLength      = 500;
-  this.closeSelectionTimeout = 300;
-  this.lastSearchValue       = "";
-  this.lastResultsPage       = "";
-  this.hideTimeout           = 0;
-  this.searchIndex           = 0;
-  this.searchActive          = false;
-  this.insideFrame           = inFrame;
-  this.searchLabel           = label;
-
-  // ----------- DOM Elements
-
-  this.DOMSearchField = function()
-  {  return document.getElementById("MSearchField");  }
-
-  this.DOMSearchSelect = function()
-  {  return document.getElementById("MSearchSelect");  }
-
-  this.DOMSearchSelectWindow = function()
-  {  return document.getElementById("MSearchSelectWindow");  }
-
-  this.DOMPopupSearchResults = function()
-  {  return document.getElementById("MSearchResults");  }
-
-  this.DOMPopupSearchResultsWindow = function()
-  {  return document.getElementById("MSearchResultsWindow");  }
-
-  this.DOMSearchClose = function()
-  {  return document.getElementById("MSearchClose"); }
-
-  this.DOMSearchBox = function()
-  {  return document.getElementById("MSearchBox");  }
-
-  // ------------ Event Handlers
-
-  // Called when focus is added or removed from the search field.
-  this.OnSearchFieldFocus = function(isActive)
-  {
-    this.Activate(isActive);
-  }
-
-  this.OnSearchSelectShow = function()
-  {
-    var searchSelectWindow = this.DOMSearchSelectWindow();
-    var searchField        = this.DOMSearchSelect();
-
-    if (this.insideFrame)
-    {
-      var left = getXPos(searchField);
-      var top  = getYPos(searchField);
-      left += searchField.offsetWidth + 6;
-      top += searchField.offsetHeight;
-
-      // show search selection popup
-      searchSelectWindow.style.display='block';
-      left -= searchSelectWindow.offsetWidth;
-      searchSelectWindow.style.left =  left + 'px';
-      searchSelectWindow.style.top  =  top  + 'px';
-    }
-    else
-    {
-      var left = getXPos(searchField);
-      var top  = getYPos(searchField);
-      top += searchField.offsetHeight;
-
-      // show search selection popup
-      searchSelectWindow.style.display='block';
-      searchSelectWindow.style.left =  left + 'px';
-      searchSelectWindow.style.top  =  top  + 'px';
-    }
-
-    // stop selection hide timer
-    if (this.hideTimeout)
-    {
-      clearTimeout(this.hideTimeout);
-      this.hideTimeout=0;
-    }
-    return false; // to avoid "image drag" default event
-  }
-
-  this.OnSearchSelectHide = function()
-  {
-    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
-                                  this.closeSelectionTimeout);
-  }
-
-  // Called when the content of the search field is changed.
-  this.OnSearchFieldChange = function(evt)
-  {
-    if (this.keyTimeout) // kill running timer
-    {
-      clearTimeout(this.keyTimeout);
-      this.keyTimeout = 0;
-    }
-
-    var e  = (evt) ? evt : window.event; // for IE
-    if (e.keyCode==40 || e.keyCode==13)
-    {
-      if (e.shiftKey==1)
-      {
-        this.OnSearchSelectShow();
-        var win=this.DOMSearchSelectWindow();
-        for (i=0;i<win.childNodes.length;i++)
-        {
-          var child = win.childNodes[i]; // get span within a
-          if (child.className=='SelectItem')
-          {
-            child.focus();
-            return;
-          }
-        }
-        return;
-      }
-      else if (window.frames.MSearchResults.searchResults)
-      {
-        var elem = window.frames.MSearchResults.searchResults.NavNext(0);
-        if (elem) elem.focus();
-      }
-    }
-    else if (e.keyCode==27) // Escape out of the search field
-    {
-      this.DOMSearchField().blur();
-      this.DOMPopupSearchResultsWindow().style.display = 'none';
-      this.DOMSearchClose().style.display = 'none';
-      this.lastSearchValue = '';
-      this.Activate(false);
-      return;
-    }
-
-    // strip whitespaces
-    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
-
-    if (searchValue != this.lastSearchValue) // search value has changed
-    {
-      if (searchValue != "") // non-empty search
-      {
-        // set timer for search update
-        this.keyTimeout = setTimeout(this.name + '.Search()',
-                                     this.keyTimeoutLength);
-      }
-      else // empty search field
-      {
-        this.DOMPopupSearchResultsWindow().style.display = 'none';
-        this.DOMSearchClose().style.display = 'none';
-        this.lastSearchValue = '';
-      }
-    }
-  }
-
-  this.SelectItemCount = function(id)
-  {
-    var count=0;
-    var win=this.DOMSearchSelectWindow();
-    for (i=0;i<win.childNodes.length;i++)
-    {
-      var child = win.childNodes[i]; // get span within a
-      if (child.className=='SelectItem')
-      {
-        count++;
-      }
-    }
-    return count;
-  }
-
-  this.SelectItemSet = function(id)
-  {
-    var i,j=0;
-    var win=this.DOMSearchSelectWindow();
-    for (i=0;i<win.childNodes.length;i++)
-    {
-      var child = win.childNodes[i]; // get span within a
-      if (child.className=='SelectItem')
-      {
-        var node = child.firstChild;
-        if (j==id)
-        {
-          node.innerHTML='&#8226;';
-        }
-        else
-        {
-          node.innerHTML='&#160;';
-        }
-        j++;
-      }
-    }
-  }
-
-  // Called when an search filter selection is made.
-  // set item with index id as the active item
-  this.OnSelectItem = function(id)
-  {
-    this.searchIndex = id;
-    this.SelectItemSet(id);
-    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
-    if (searchValue!="" && this.searchActive) // something was found -> do a search
-    {
-      this.Search();
-    }
-  }
-
-  this.OnSearchSelectKey = function(evt)
-  {
-    var e = (evt) ? evt : window.event; // for IE
-    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
-    {
-      this.searchIndex++;
-      this.OnSelectItem(this.searchIndex);
-    }
-    else if (e.keyCode==38 && this.searchIndex>0) // Up
-    {
-      this.searchIndex--;
-      this.OnSelectItem(this.searchIndex);
-    }
-    else if (e.keyCode==13 || e.keyCode==27)
-    {
-      this.OnSelectItem(this.searchIndex);
-      this.CloseSelectionWindow();
-      this.DOMSearchField().focus();
-    }
-    return false;
-  }
-
-  // --------- Actions
-
-  // Closes the results window.
-  this.CloseResultsWindow = function()
-  {
-    this.DOMPopupSearchResultsWindow().style.display = 'none';
-    this.DOMSearchClose().style.display = 'none';
-    this.Activate(false);
-  }
-
-  this.CloseSelectionWindow = function()
-  {
-    this.DOMSearchSelectWindow().style.display = 'none';
-  }
-
-  // Performs a search.
-  this.Search = function()
-  {
-    this.keyTimeout = 0;
-
-    // strip leading whitespace
-    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
-
-    var code = searchValue.toLowerCase().charCodeAt(0);
-    var idxChar = searchValue.substr(0, 1).toLowerCase();
-    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
-    {
-      idxChar = searchValue.substr(0, 2);
-    }
-
-    var resultsPage;
-    var resultsPageWithSearch;
-    var hasResultsPage;
-
-    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
-    if (idx!=-1)
-    {
-       var hexCode=idx.toString(16);
-       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
-       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
-       hasResultsPage = true;
-    }
-    else // nothing available for this search term
-    {
-       resultsPage = this.resultsPath + '/nomatches.html';
-       resultsPageWithSearch = resultsPage;
-       hasResultsPage = false;
-    }
-
-    window.frames.MSearchResults.location = resultsPageWithSearch;
-    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
-
-    if (domPopupSearchResultsWindow.style.display!='block')
-    {
-       var domSearchBox = this.DOMSearchBox();
-       this.DOMSearchClose().style.display = 'inline';
-       if (this.insideFrame)
-       {
-         var domPopupSearchResults = this.DOMPopupSearchResults();
-         domPopupSearchResultsWindow.style.position = 'relative';
-         domPopupSearchResultsWindow.style.display  = 'block';
-         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
-         domPopupSearchResultsWindow.style.width    = width + 'px';
-         domPopupSearchResults.style.width          = width + 'px';
-       }
-       else
-       {
-         var domPopupSearchResults = this.DOMPopupSearchResults();
-         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
-         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
-         domPopupSearchResultsWindow.style.display = 'block';
-         left -= domPopupSearchResults.offsetWidth;
-         domPopupSearchResultsWindow.style.top     = top  + 'px';
-         domPopupSearchResultsWindow.style.left    = left + 'px';
-       }
-    }
-
-    this.lastSearchValue = searchValue;
-    this.lastResultsPage = resultsPage;
-  }
-
-  // -------- Activation Functions
-
-  // Activates or deactivates the search panel, resetting things to
-  // their default values if necessary.
-  this.Activate = function(isActive)
-  {
-    if (isActive || // open it
-        this.DOMPopupSearchResultsWindow().style.display == 'block'
-       )
-    {
-      this.DOMSearchBox().className = 'MSearchBoxActive';
-
-      var searchField = this.DOMSearchField();
-
-      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
-      {
-        searchField.value = '';
-        this.searchActive = true;
-      }
-    }
-    else if (!isActive) // directly remove the panel
-    {
-      this.DOMSearchBox().className = 'MSearchBoxInactive';
-      this.DOMSearchField().value   = this.searchLabel;
-      this.searchActive             = false;
-      this.lastSearchValue          = ''
-      this.lastResultsPage          = '';
-    }
-  }
-}
-
-// -----------------------------------------------------------------------
-
-// The class that handles everything on the search results page.
-function SearchResults(name)
-{
-    // The number of matches from the last run of <Search()>.
-    this.lastMatchCount = 0;
-    this.lastKey = 0;
-    this.repeatOn = false;
-
-    // Toggles the visibility of the passed element ID.
-    this.FindChildElement = function(id)
-    {
-      var parentElement = document.getElementById(id);
-      var element = parentElement.firstChild;
-
-      while (element && element!=parentElement)
-      {
-        if (element.nodeName == 'DIV' && element.className == 'SRChildren')
-        {
-          return element;
-        }
-
-        if (element.nodeName == 'DIV' && element.hasChildNodes())
-        {
-           element = element.firstChild;
-        }
-        else if (element.nextSibling)
-        {
-           element = element.nextSibling;
-        }
-        else
-        {
-          do
-          {
-            element = element.parentNode;
-          }
-          while (element && element!=parentElement && !element.nextSibling);
-
-          if (element && element!=parentElement)
-          {
-            element = element.nextSibling;
-          }
-        }
-      }
-    }
-
-    this.Toggle = function(id)
-    {
-      var element = this.FindChildElement(id);
-      if (element)
-      {
-        if (element.style.display == 'block')
-        {
-          element.style.display = 'none';
-        }
-        else
-        {
-          element.style.display = 'block';
-        }
-      }
-    }
-
-    // Searches for the passed string.  If there is no parameter,
-    // it takes it from the URL query.
-    //
-    // Always returns true, since other documents may try to call it
-    // and that may or may not be possible.
-    this.Search = function(search)
-    {
-      if (!search) // get search word from URL
-      {
-        search = window.location.search;
-        search = search.substring(1);  // Remove the leading '?'
-        search = unescape(search);
-      }
-
-      search = search.replace(/^ +/, ""); // strip leading spaces
-      search = search.replace(/ +$/, ""); // strip trailing spaces
-      search = search.toLowerCase();
-      search = convertToId(search);
-
-      var resultRows = document.getElementsByTagName("div");
-      var matches = 0;
-
-      var i = 0;
-      while (i < resultRows.length)
-      {
-        var row = resultRows.item(i);
-        if (row.className == "SRResult")
-        {
-          var rowMatchName = row.id.toLowerCase();
-          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
-
-          if (search.length<=rowMatchName.length &&
-             rowMatchName.substr(0, search.length)==search)
-          {
-            row.style.display = 'block';
-            matches++;
-          }
-          else
-          {
-            row.style.display = 'none';
-          }
-        }
-        i++;
-      }
-      document.getElementById("Searching").style.display='none';
-      if (matches == 0) // no results
-      {
-        document.getElementById("NoMatches").style.display='block';
-      }
-      else // at least one result
-      {
-        document.getElementById("NoMatches").style.display='none';
-      }
-      this.lastMatchCount = matches;
-      return true;
-    }
-
-    // return the first item with index index or higher that is visible
-    this.NavNext = function(index)
-    {
-      var focusItem;
-      while (1)
-      {
-        var focusName = 'Item'+index;
-        focusItem = document.getElementById(focusName);
-        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
-        {
-          break;
-        }
-        else if (!focusItem) // last element
-        {
-          break;
-        }
-        focusItem=null;
-        index++;
-      }
-      return focusItem;
-    }
-
-    this.NavPrev = function(index)
-    {
-      var focusItem;
-      while (1)
-      {
-        var focusName = 'Item'+index;
-        focusItem = document.getElementById(focusName);
-        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
-        {
-          break;
-        }
-        else if (!focusItem) // last element
-        {
-          break;
-        }
-        focusItem=null;
-        index--;
-      }
-      return focusItem;
-    }
-
-    this.ProcessKeys = function(e)
-    {
-      if (e.type == "keydown")
-      {
-        this.repeatOn = false;
-        this.lastKey = e.keyCode;
-      }
-      else if (e.type == "keypress")
-      {
-        if (!this.repeatOn)
-        {
-          if (this.lastKey) this.repeatOn = true;
-          return false; // ignore first keypress after keydown
-        }
-      }
-      else if (e.type == "keyup")
-      {
-        this.lastKey = 0;
-        this.repeatOn = false;
-      }
-      return this.lastKey!=0;
-    }
-
-    this.Nav = function(evt,itemIndex)
-    {
-      var e  = (evt) ? evt : window.event; // for IE
-      if (e.keyCode==13) return true;
-      if (!this.ProcessKeys(e)) return false;
-
-      if (this.lastKey==38) // Up
-      {
-        var newIndex = itemIndex-1;
-        var focusItem = this.NavPrev(newIndex);
-        if (focusItem)
-        {
-          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
-          if (child && child.style.display == 'block') // children visible
-          {
-            var n=0;
-            var tmpElem;
-            while (1) // search for last child
-            {
-              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
-              if (tmpElem)
-              {
-                focusItem = tmpElem;
-              }
-              else // found it!
-              {
-                break;
-              }
-              n++;
-            }
-          }
-        }
-        if (focusItem)
-        {
-          focusItem.focus();
-        }
-        else // return focus to search field
-        {
-           parent.document.getElementById("MSearchField").focus();
-        }
-      }
-      else if (this.lastKey==40) // Down
-      {
-        var newIndex = itemIndex+1;
-        var focusItem;
-        var item = document.getElementById('Item'+itemIndex);
-        var elem = this.FindChildElement(item.parentNode.parentNode.id);
-        if (elem && elem.style.display == 'block') // children visible
-        {
-          focusItem = document.getElementById('Item'+itemIndex+'_c0');
-        }
-        if (!focusItem) focusItem = this.NavNext(newIndex);
-        if (focusItem)  focusItem.focus();
-      }
-      else if (this.lastKey==39) // Right
-      {
-        var item = document.getElementById('Item'+itemIndex);
-        var elem = this.FindChildElement(item.parentNode.parentNode.id);
-        if (elem) elem.style.display = 'block';
-      }
-      else if (this.lastKey==37) // Left
-      {
-        var item = document.getElementById('Item'+itemIndex);
-        var elem = this.FindChildElement(item.parentNode.parentNode.id);
-        if (elem) elem.style.display = 'none';
-      }
-      else if (this.lastKey==27) // Escape
-      {
-        parent.searchBox.CloseResultsWindow();
-        parent.document.getElementById("MSearchField").focus();
-      }
-      else if (this.lastKey==13) // Enter
-      {
-        return true;
-      }
-      return false;
-    }
-
-    this.NavChild = function(evt,itemIndex,childIndex)
-    {
-      var e  = (evt) ? evt : window.event; // for IE
-      if (e.keyCode==13) return true;
-      if (!this.ProcessKeys(e)) return false;
-
-      if (this.lastKey==38) // Up
-      {
-        if (childIndex>0)
-        {
-          var newIndex = childIndex-1;
-          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
-        }
-        else // already at first child, jump to parent
-        {
-          document.getElementById('Item'+itemIndex).focus();
-        }
-      }
-      else if (this.lastKey==40) // Down
-      {
-        var newIndex = childIndex+1;
-        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
-        if (!elem) // last child, jump to parent next parent
-        {
-          elem = this.NavNext(itemIndex+1);
-        }
-        if (elem)
-        {
-          elem.focus();
-        }
-      }
-      else if (this.lastKey==27) // Escape
-      {
-        parent.searchBox.CloseResultsWindow();
-        parent.document.getElementById("MSearchField").focus();
-      }
-      else if (this.lastKey==13) // Enter
-      {
-        return true;
-      }
-      return false;
-    }
-}
-
-function setKeyActions(elem,action)
-{
-  elem.setAttribute('onkeydown',action);
-  elem.setAttribute('onkeypress',action);
-  elem.setAttribute('onkeyup',action);
-}
-
-function setClassAttr(elem,attr)
-{
-  elem.setAttribute('class',attr);
-  elem.setAttribute('className',attr);
-}
-
-function createResults()
-{
-  var results = document.getElementById("SRResults");
-  for (var e=0; e<searchData.length; e++)
-  {
-    var id = searchData[e][0];
-    var srResult = document.createElement('div');
-    srResult.setAttribute('id','SR_'+id);
-    setClassAttr(srResult,'SRResult');
-    var srEntry = document.createElement('div');
-    setClassAttr(srEntry,'SREntry');
-    var srLink = document.createElement('a');
-    srLink.setAttribute('id','Item'+e);
-    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
-    setClassAttr(srLink,'SRSymbol');
-    srLink.innerHTML = searchData[e][1][0];
-    srEntry.appendChild(srLink);
-    if (searchData[e][1].length==2) // single result
-    {
-      srLink.setAttribute('href',searchData[e][1][1][0]);
-      if (searchData[e][1][1][1])
-      {
-       srLink.setAttribute('target','_parent');
-      }
-      var srScope = document.createElement('span');
-      setClassAttr(srScope,'SRScope');
-      srScope.innerHTML = searchData[e][1][1][2];
-      srEntry.appendChild(srScope);
-    }
-    else // multiple results
-    {
-      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
-      var srChildren = document.createElement('div');
-      setClassAttr(srChildren,'SRChildren');
-      for (var c=0; c<searchData[e][1].length-1; c++)
-      {
-        var srChild = document.createElement('a');
-        srChild.setAttribute('id','Item'+e+'_c'+c);
-        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
-        setClassAttr(srChild,'SRScope');
-        srChild.setAttribute('href',searchData[e][1][c+1][0]);
-        if (searchData[e][1][c+1][1])
-        {
-         srChild.setAttribute('target','_parent');
-        }
-        srChild.innerHTML = searchData[e][1][c+1][2];
-        srChildren.appendChild(srChild);
-      }
-      srEntry.appendChild(srChildren);
-    }
-    srResult.appendChild(srEntry);
-    results.appendChild(srResult);
-  }
-}
-
-function init_search()
-{
-  var results = document.getElementById("MSearchSelectWindow");
-  for (var key in indexSectionLabels)
-  {
-    var link = document.createElement('a');
-    link.setAttribute('class','SelectItem');
-    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
-    link.href='javascript:void(0)';
-    link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
-    results.appendChild(link);
-  }
-  searchBox.OnSelectItem(0);
-}
-/* @license-end */
diff --git a/docs/html/search/search_l.png b/docs/html/search/search_l.png
deleted file mode 100644
index fd5f7daa41a4c79b4ae9bea5aa7bdfb94e14084b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 567
zcmeAS@N?(olHy`uVBq!ia0vp^B0wz6!2%?$TA$hhDVB6cUq=Rpjs4tz5?O(Kg=CK)
zUj~NU84L`?eGCi_EEpJ?t}-xGu`@87+QPtK?83kxQ`TapwHK(CDaqU2h2ejD|C#+j
z9%q3^WHAE+w=f7ZGR&GI0Tg5}@$_|Nf5gMiEhFgvHvB#V1EZFwi(`n!`QAxqy_^C?
z+`jj!^>(R!W8j_r#qQ#gnr4kAxdU#F0+OBry<A_XEfSiTFv~GuLE}}0iFF6&H>$Z+
z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF-
z8H=anvo~dTmJ2<pSnM=aYQ7mur_Vc=KQ;l29JyWDZCN~fev0|+o3}F2P%CNIx5trL
z8gA}<cc1qPiOH&eRG9J7<ifc}f%_b|eRo%1h+kMg?QxbQD_=Y#XWHp4|L@3Yv6bBq
zd~oOD{y#VJ78Z8RC_Y*B*FLF4Y09bOg^5e_I(Ak>YA%wA6IHRv%{vxvUm|R)kgZeo
zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl|
z*NBpo#FA92<f2p{#b9J$XrXIpq-$UvVrXb(WMO4!u5DmoWniFd?|d6YLvDUbW?Cg~
V4KYc-(}5ZoJYD@<);T3K0RU@P%k2OF

diff --git a/docs/html/search/search_m.png b/docs/html/search/search_m.png
deleted file mode 100644
index b429a16ba641960da1e52e5da85dc80fd82635c8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 158
zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Em0U}M~ynTTbOS+@4BLl;=8&~`zjDUQ}64!{5
z;QX|b^2DN42FH~Aq*MjZ+{E<Mpwz^a%EFVWHb6xNo-U3d6}OUf^!3vd5)y3c{#bPU
z`teb@<JbTH_7jql7?`61bOfX$^6u_pUBbY`!?2W{-=^-N>vEu822WQ%mvv4FO#qs`
BFGc_W

diff --git a/docs/html/search/search_r.png b/docs/html/search/search_r.png
deleted file mode 100644
index 1af5d21ee13e070d7600f1c4657fde843b953a69..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 553
zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp
zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQ<As43&a2R{xkc5
zJkA1-$YKTtZeb8+WSBKa0w~B{;_2(k{)mU2TSn0TZTNi#21XfA7sn8d^R1H{y_o_<
z+~hsAIakGYPy5?E?QfIV-)Ulw-A&uvc6(^?XfA18cvfYFtH_Fg-3MA$nhAz1;G4nQ
z)c5(>T(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7
z-N(<(C)L?hOO?KV{>8(jC{h<AlVfGFV&cS)C3al`J({hH{AZi%%{daMX%zO!rQPhj
zO4O~O1uR{5ym@yvujLfdunGzN6vJTAIO%M=m#VrSQ@h&By8@n<o)p=ZT$+AnU5ifM
z=cKe}PAc7}R+@<xE&raDXZb+)aQF4y<?OdioGN6^Ufq9RRdf1xc5a~x>pKsws)#Fh
zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~
z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc
GLK6VEQpiUD

diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js
deleted file mode 100644
index eec04a97..00000000
--- a/docs/html/search/searchdata.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var indexSectionsWithContent =
-{
-  0: "_acdefimoprsuz",
-  1: "acdefrs",
-  2: "_cimoprsuz"
-};
-
-var indexSectionNames =
-{
-  0: "all",
-  1: "classes",
-  2: "functions"
-};
-
-var indexSectionLabels =
-{
-  0: "All",
-  1: "Classes",
-  2: "Functions"
-};
-
diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png
deleted file mode 100644
index fe895f2c58179b471a22d8320b39a4bd7312ec8e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 314
zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc>
z_*`QK&+BH@jW<lVxsx`Ym~nPnqw$O~`M84{XS6<Mm0<Zit<Tk``D^RashfFq{wG<#
zZG2vRxL<$IhkFMSBd@N1`uRtp)t>rYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O
zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|E<fHWtM%;-WUJ&>EGLnJsniYK!2U1
Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T

diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png
deleted file mode 100644
index 3b443fc62892114406e3d399421b2a881b897acc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 853
zcmV-b1FHOqP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv0009VNkl<ZcmeI*
zOK4PA7{KxW<S|JmGnqI|rb(KahDirA+8B+gVk8A)%pe9yF;+3L5iKZG7xuBS&@L(k
z33MTXOIxMHjirbWgs8M;qhM?(_-v^nS(KzU#%Ih_`hB-^XYSm&39)2*I6vmhow@fr
z=iKj{vvuv-e;!~uA+biR6pf-n<cdGVuox5<#BBg4c>oT|#XixUYy%lpuf3i8{fX!o
zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh
zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V
zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py;
zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK
zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh
zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO<q-Bsh$IuZaopT|9E
z-75alp&U9s%(|8uI^NA(#AD;nc=%{ivdZX(QFJ7~-yf%_Adjk`W@NhjJTyZ8*;|!n
z9=K#TJuZz+={YZ#>8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK&
z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sT<tBHx6XfOFDx2(ijpMiR>xLGlJY5nc&Re
zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y
zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb
zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E
f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j*

diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png
deleted file mode 100644
index e08320fb64e6fa33b573005ed6d8fe294e19db76..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 845
zcmV-T1G4;yP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv0009NNkl<ZcmeI*
zUr1D09KiAKIOC-Ar)j4&EoU~y1|7@QCTmeCsMH~fFw#|0OWK8m>Y;xxyHF2B5Wzm|
zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I<ojWskx{8*sm){4kXJ+p2oO6HY
zoL5W7@h*VL_(ZL!7GaSmtl}SWU-XD;q7T4~4ZuW>_))aP?*T)ow&n59{}X4$3Goat
zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F<o_Z}1zllSWC8!Z+rkFN>={P0Y^?$4t
z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K
zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ
z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT
zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m
zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M
z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu
zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU#
z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+
z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a
z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$M<u9&-IHqnYs=DL+lbi3lG2ysF!p!_2H=p
zj-g89hmThki^;JHknVE4V`@zS$(ZbTd?1=dsrXLRiJbUBq7weAmVjEk@rP>j4Uq05
X8=0q~qBNan00000NkvXXu0mjfptF>5

diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png
deleted file mode 100644
index 3b725c41c5a527a3a3e40097077d0e206a681247..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 142
zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD#
z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD
r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4

diff --git a/docs/html/tab_b.png b/docs/html/tab_b.png
deleted file mode 100644
index e2b4a8638cb3496a016eaed9e16ffc12846dea18..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 169
zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr
z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn<f<Rf3mJ=+uzfrOMlc%s`x4TZtnrR|B~W{
zyZP0m7vvtXV80W5^J2vvp97)4WrPK1-P<H^B$Ll|TGvzm;+92|BpdT89$b1Qf7x5g
UZ&RH}7SL`6Pgg&ebxsLQ0A}n&iU0rr

diff --git a/docs/html/tab_h.png b/docs/html/tab_h.png
deleted file mode 100644
index fd5cb705488e60fcf30f56fcc951dee74f3b095b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 177
zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QWc&qjv*C{Z}0jF9dr<AdpNI7
zaOs_6=O($9b?lc?Qk=SJVv5%FA{O^TY1^*qJ@<p}E}!uH_1eoPJ&tpVl={bg{Skd2
zp1FO|;|R90%G3WYZM5AU=A4%H?3qaQhHt%H9G|xYJ)ff*|MmI*zD3`*Z|LP?7d&26
cn!ZiLK0QM$CeyB_80ZEDPgg&ebxsLQ0C?O;!~g&Q

diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png
deleted file mode 100644
index ab478c95b67371d700a20869f7de1ddd73522d50..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 184
zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7)
zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$
z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan
kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^

diff --git a/docs/html/tabs.css b/docs/html/tabs.css
deleted file mode 100644
index 7d45d36c..00000000
--- a/docs/html/tabs.css
+++ /dev/null
@@ -1 +0,0 @@
-.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
diff --git a/docs/index.rst b/docs/index.rst
deleted file mode 100644
index 2f830f97..00000000
--- a/docs/index.rst
+++ /dev/null
@@ -1,94 +0,0 @@
-.. image:: assets/f1_stickers_01.png
-  :width: 60
-  :align: left
-
-F1TENTH Gym Documentation 
-================================================
-
-Overview
----------
-The F1TENTH Gym environment is created for research that needs a asynchronous, realistic vehicle simulation with multiple vehicle instances in the same environment, with applications in reinforcement learning.
-
-The environment is designed with determinism in mind. All agents' physics simulation are stepped simultaneously, and all randomness are seeded and experiments can be reproduced. The explicit stepping also enables the physics engine to take advantage of faster than real-time execution (up to 30x realtime) and enable massively parallel applications.
-
-Github repo: https://github.com/f1tenth/f1tenth_gym
-
-Note that the GitHub will have more up to date documentation than this page. If you see a mistake, please contribute a fix!
-
-Example Usecases
-------------------
-
-1. The gym environment is used as the backend for the F1TENTH virtual racing online competition at IROS 2020:
-
-.. raw:: html
-
-  <iframe width="560" height="315" src="https://www.youtube.com/embed/VzrbRwhDw_c" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-
-
-2. The gym environment is used as the simulation engine for the FormulaZero project: https://github.com/travelbureau/f0_icml_code
-
-.. raw:: html
-
-    <iframe width="560" height="315" src="https://www.youtube.com/embed/7Yat9FZzE4g" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-
-3. The gym environment is used as the simulation engine for the TunerCar project: http://www.lewissoft.com/pdf/ICRA2020/1667.pdf
-
-.. raw:: html
-
-  <iframe width="560" height="315" src="https://www.youtube.com/embed/ay7L4VAfa_w" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
-
-Citing
---------
-If you find this Gym environment useful, please consider citing:
-
-.. code::
-  
-  @inproceedings{o2020textscf1tenth,
-    title={textscF1TENTH: An Open-source Evaluation Environment for Continuous Control and Reinforcement Learning},
-    author={O’Kelly, Matthew and Zheng, Hongrui and Karthik, Dhruv and Mangharam, Rahul},
-    booktitle={NeurIPS 2019 Competition and Demonstration Track},
-    pages={77--89},
-    year={2020},
-    organization={PMLR}
-  }
-
-Physical Platform
--------------------
-
-To build a physical 1/10th scale vehicle, following the guide here: https://f1tenth.org/build.html
-
-.. image:: assets/f110cover.png
-  :width: 400
-  :align: center
-
-.. toctree::
-  :caption: INSTALLATION
-  :maxdepth: 2
-
-  installation
-
-
-.. toctree::
-  :caption: USAGE
-  :maxdepth: 2
-
-  basic_usage
-  customized_usage
-
-.. toctree::
-  :caption: REPRODUCIBILITY
-  :maxdepth: 2
-
-  reproduce
-
-.. toctree::
-  :caption: API REFERENCE
-  :maxdepth: 2
-
-  api/base_classes
-  api/dynamic_models
-  api/laser_models
-  api/collision_models
-  api/env
-  api/obv
-  api/rendering
diff --git a/docs/installation.rst b/docs/installation.rst
deleted file mode 100644
index 19a30729..00000000
--- a/docs/installation.rst
+++ /dev/null
@@ -1,42 +0,0 @@
-.. raw:: html
-
-   <style>
-   .rst-content .section>img {
-       width: 30px;
-       margin-bottom: 0;
-       margin-top: 0;
-       margin-right: 15px;
-       margin-left: 15px;
-       float: left;
-   }
-   </style>
-
-Installation
-=================
-``f1tenth_gym`` is a pure Python library. We provide two ways to set up the environment.
-
-.. image:: assets/docker_logo.png
-
-Using docker
-----------------
-
-A Dockerfile is provided. A container can be created by running the following commands. Note that ``sudo`` might be needed depending on how you've set up your Docker engine.
-
-.. code:: bash
-
-    $ git clone https://github.com/f1tenth/f1tenth_gym.git
-    $ cd f1tenth_gym
-    $ git checkout exp_py
-    $ docker build -t f1tenth_gym -f Dockerfile .
-    $ docker run -it --name=f1tenth_gym_container --rm f1tenth_gym
-
-.. image:: assets/pip_logo.svg
-
-Using pip
----------------
-
-The environment is a Python package, and only depends on ``numpy``, ``scipy``, ``numba``, ``Pillow``, ``gym``, ``pyyaml``, and ``pyglet``. You can install the package via pip:
-
-.. code:: bash
-
-    $ pip3 install git+https://github.com/f1tenth/f1tenth_gym.git
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 188f51e6..ee42679b 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1 +1,5 @@
-breathe
\ No newline at end of file
+sphinx>=4.5.0
+numpydoc==1.5.0
+pydata-sphinx-theme==0.13.3
+sphinx-design
+sphinx-copybutton
\ No newline at end of file
diff --git a/docs/src/_static/switcher.json b/docs/src/_static/switcher.json
new file mode 100644
index 00000000..11743216
--- /dev/null
+++ b/docs/src/_static/switcher.json
@@ -0,0 +1,10 @@
+[
+    {
+      "version": "dev",
+      "url": "https://pydata-sphinx-theme.readthedocs.io/en/latest/"
+    },
+    {
+        "version": "v1.0.0",
+        "url": "https://pydata-sphinx-theme.readthedocs.io/en/stable/"
+      }
+]
\ No newline at end of file
diff --git a/docs/src/_templates/autosummary/attributes.rst b/docs/src/_templates/autosummary/attributes.rst
new file mode 100644
index 00000000..f00f0a66
--- /dev/null
+++ b/docs/src/_templates/autosummary/attributes.rst
@@ -0,0 +1,13 @@
+:orphan:
+
+{{ fullname | escape | underline}}
+
+.. currentmodule:: {{ module }}
+
+attribute
+
+.. auto{{ objtype }}:: {{ fullname | replace("f110_gym.envs.", "f110_gym.envs::") }}
+
+{# In the fullname (e.g. `numpy.ma.MaskedArray.methodname`), the module name
+is ambiguous. Using a `::` separator (e.g. `numpy::ma.MaskedArray.methodname`)
+specifies `numpy` as the module name. #}
\ No newline at end of file
diff --git a/docs/src/_templates/autosummary/base.rst b/docs/src/_templates/autosummary/base.rst
new file mode 100644
index 00000000..655bddc5
--- /dev/null
+++ b/docs/src/_templates/autosummary/base.rst
@@ -0,0 +1,17 @@
+{% if objtype == 'property' %}
+:orphan:
+{% endif %}
+
+{{ fullname | escape | underline}}
+
+.. currentmodule:: {{ module }}
+
+{% if objtype == 'property' %}
+property
+{% endif %}
+
+.. auto{{ objtype }}:: {{ fullname | replace("f110_gym.envs.", "f110_gym.envs::") }}
+
+{# In the fullname (e.g. `numpy.ma.MaskedArray.methodname`), the module name
+is ambiguous. Using a `::` separator (e.g. `numpy::ma.MaskedArray.methodname`)
+specifies `numpy` as the module name. #}
\ No newline at end of file
diff --git a/docs/src/_templates/autosummary/class.rst b/docs/src/_templates/autosummary/class.rst
new file mode 100644
index 00000000..7786c11e
--- /dev/null
+++ b/docs/src/_templates/autosummary/class.rst
@@ -0,0 +1,17 @@
+{% extends "!autosummary/class.rst" %}
+
+{% block methods %} {% if methods %}
+
+   .. autosummary::
+    :toctree: generated/
+        {% for item in methods %}
+            {% if item != '__init__'%}
+              ~{{ name }}.{{ item }}
+            {% endif %}
+        {%- endfor %}
+
+{% endif %} {% endblock %}
+
+{% block attributes %} {% if attributes %}
+
+{% endif %} {% endblock %}
\ No newline at end of file
diff --git a/docs/src/_templates/autosummary/member.rst b/docs/src/_templates/autosummary/member.rst
new file mode 100644
index 00000000..9d82946f
--- /dev/null
+++ b/docs/src/_templates/autosummary/member.rst
@@ -0,0 +1,13 @@
+:orphan:
+
+{{ fullname | escape | underline}}
+
+.. currentmodule:: {{ module }}
+
+member
+
+.. auto{{ objtype }}:: {{ fullname | replace("f110_gym.envs.", "f110_gym.envs::") }}
+
+{# In the fullname (e.g. `numpy.ma.MaskedArray.methodname`), the module name
+is ambiguous. Using a `::` separator (e.g. `numpy::ma.MaskedArray.methodname`)
+specifies `numpy` as the module name. #}
\ No newline at end of file
diff --git a/docs/src/_templates/autosummary/method.rst b/docs/src/_templates/autosummary/method.rst
new file mode 100644
index 00000000..2909b838
--- /dev/null
+++ b/docs/src/_templates/autosummary/method.rst
@@ -0,0 +1,13 @@
+:orphan:
+
+{{ fullname | escape | underline}}
+
+.. currentmodule:: {{ module }}
+
+method
+
+.. auto{{ objtype }}:: {{ fullname | replace("f110_gym.envs.", "f110_gym.envs::") }}
+
+{# In the fullname (e.g. `numpy.ma.MaskedArray.methodname`), the module name
+is ambiguous. Using a `::` separator (e.g. `numpy::ma.MaskedArray.methodname`)
+specifies `numpy` as the module name. #}
\ No newline at end of file
diff --git a/docs/src/_templates/autosummary/minimal_module.rst b/docs/src/_templates/autosummary/minimal_module.rst
new file mode 100644
index 00000000..671187ce
--- /dev/null
+++ b/docs/src/_templates/autosummary/minimal_module.rst
@@ -0,0 +1,6 @@
+{{ fullname | escape | underline}}
+
+.. automodule:: {{ fullname }}
+
+   {% block docstring %}
+   {% endblock %}
\ No newline at end of file
diff --git a/docs/src/_templates/autosummary/module.rst b/docs/src/_templates/autosummary/module.rst
new file mode 100644
index 00000000..ecfcbf41
--- /dev/null
+++ b/docs/src/_templates/autosummary/module.rst
@@ -0,0 +1,40 @@
+{% extends "!autosummary/module.rst" %}
+
+{# This file is almost the same as the default, but adds :toctree: to the autosummary directives.
+   The original can be found at `sphinx/ext/autosummary/templates/autosummary/module.rst`. #}
+
+{% block attributes %}
+{% if attributes %}
+   .. rubric:: Module Attributes
+
+   .. autosummary::
+      :toctree:
+   {% for item in attributes %}
+      {{ item }}
+   {%- endfor %}
+{% endif %}
+{% endblock %}
+
+{% block functions %}
+{% if functions %}
+   .. rubric:: Functions
+
+   .. autosummary::
+      :toctree:
+   {% for item in functions %}
+      {{ item }}
+   {%- endfor %}
+{% endif %}
+{% endblock %}
+
+{% block classes %}
+{% if classes %}
+   .. rubric:: Classes
+
+   .. autosummary::
+      :toctree:
+   {% for item in classes %}
+      {{ item }}
+   {%- endfor %}
+{% endif %}
+{% endblock %}
\ No newline at end of file
diff --git a/docs/api/base_classes.rst b/docs/src/api/base_classes.rst
similarity index 73%
rename from docs/api/base_classes.rst
rename to docs/src/api/base_classes.rst
index d3a555bc..ba20d060 100644
--- a/docs/api/base_classes.rst
+++ b/docs/src/api/base_classes.rst
@@ -7,5 +7,11 @@ The ``RaceCar`` class handles the simulation of the dynamics model and the gener
 
 The ``Simulator`` class handles the interaction between agents including collision checking.
 
-.. doxygenfile:: base_classes.py
-    :project: f1tenth_gym
\ No newline at end of file
+.. currentmodule:: f110_gym.envs.base_classes
+
+.. autosummary::
+    :toctree: _generated/
+
+    RaceCar
+    Simulator
+    
\ No newline at end of file
diff --git a/docs/api/collision_models.rst b/docs/src/api/collision_models.rst
similarity index 56%
rename from docs/api/collision_models.rst
rename to docs/src/api/collision_models.rst
index d7875976..7d2d67b5 100644
--- a/docs/api/collision_models.rst
+++ b/docs/src/api/collision_models.rst
@@ -3,5 +3,17 @@ Collision Models
 
 This file contains all the numba just-in-time compiled functions for collision checking between agents. The GJK algorithm (more detail here: https://cse442-17f.github.io/Gilbert-Johnson-Keerthi-Distance-Algorithm/) is used to check for overlap in polygons.
 
-.. doxygenfile:: collision_models.py
-    :project: f1tenth_gym
\ No newline at end of file
+.. currentmodule:: f110_gym.envs.collision_models
+
+.. autosummary::
+    :toctree: _generated/
+
+    perpendicular
+    tripleProduct
+    avgPoint
+    indexOfFurthestPoint
+    support
+    collision
+    collision_multiple
+    get_trmtx
+    get_vertices
\ No newline at end of file
diff --git a/docs/src/api/dynamic_models.rst b/docs/src/api/dynamic_models.rst
new file mode 100644
index 00000000..2930bcc6
--- /dev/null
+++ b/docs/src/api/dynamic_models.rst
@@ -0,0 +1,18 @@
+Dynamic Models
+========================================
+
+This file contains all numba just-in-time compiled function for the dynamic models.
+
+.. currentmodule:: f110_gym.envs.dynamic_models
+
+.. autosummary::
+    :toctree: _generated/
+
+    DynamicModel
+    upper_accel_limit
+    accl_constraints
+    steering_constraint
+    vehicle_dynamics_ks
+    vehicle_dynamics_st
+    pid_steer
+    pid_accl
\ No newline at end of file
diff --git a/docs/src/api/env.rst b/docs/src/api/env.rst
new file mode 100644
index 00000000..0bdd6c8e
--- /dev/null
+++ b/docs/src/api/env.rst
@@ -0,0 +1,11 @@
+Gym Environment
+========================================
+
+This is the top level file that conforms to the Gymnasium convention.
+
+.. currentmodule:: f110_gym.envs
+
+.. autosummary::
+    :toctree: _generated/
+
+    F110Env
\ No newline at end of file
diff --git a/docs/src/api/index.rst b/docs/src/api/index.rst
new file mode 100644
index 00000000..8a2269ea
--- /dev/null
+++ b/docs/src/api/index.rst
@@ -0,0 +1,16 @@
+API Overview
+==============
+
+.. toctree::
+  :caption: API
+  :maxdepth: 2
+
+  env
+  base_classes
+  dynamic_models
+  laser_models
+  collision_models
+  obv
+  rendering
+  track
+  reset
\ No newline at end of file
diff --git a/docs/api/laser_models.rst b/docs/src/api/laser_models.rst
similarity index 63%
rename from docs/api/laser_models.rst
rename to docs/src/api/laser_models.rst
index 93e14b6c..4dcab568 100644
--- a/docs/api/laser_models.rst
+++ b/docs/src/api/laser_models.rst
@@ -3,5 +3,21 @@ Laser Scan Simulator Models
 
 This file contains all numba just-in-time compiled function for the 2D laser scan models. The core of the laser scan simulation is the Euclidean distance transform of the map image provided. See more details about the algorithm here: https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.distance_transform_edt.html#scipy.ndimage.distance_transform_edt. Then, ray tracing is used to create the beams of the 2D lasers scan.
 
-.. doxygenfile:: laser_models.py
-    :project: f1tenth_gym
\ No newline at end of file
+.. currentmodule:: f110_gym.envs.laser_models
+
+.. autosummary::
+    :toctree: _generated/
+
+    ScanSimulator2D
+    get_dt
+    xy_2_rc
+    distance_transform
+    trace_ray
+    get_scan
+    check_ttc_jit
+    cross
+    are_collinear
+    get_range
+    get_blocked_view_indices
+    ray_cast
+    
\ No newline at end of file
diff --git a/docs/api/obv.rst b/docs/src/api/obv.rst
similarity index 100%
rename from docs/api/obv.rst
rename to docs/src/api/obv.rst
diff --git a/docs/src/api/rendering.rst b/docs/src/api/rendering.rst
new file mode 100644
index 00000000..3e75f04c
--- /dev/null
+++ b/docs/src/api/rendering.rst
@@ -0,0 +1,16 @@
+Rendering Engine
+========================================
+
+This is the rendering engine using pygame to visualize the running environment.
+
+.. currentmodule:: f110_gym.envs.rendering
+
+.. autosummary::
+    :toctree: _generated/
+    
+    objects.TextObject
+    objects.Map
+    objects.Car
+    renderer.RenderSpec
+    renderer.EnvRenderer
+    rendering_pygame.PygameEnvRenderer
diff --git a/docs/src/api/reset.rst b/docs/src/api/reset.rst
new file mode 100644
index 00000000..99a314d3
--- /dev/null
+++ b/docs/src/api/reset.rst
@@ -0,0 +1,15 @@
+Reset Function
+========================================
+
+This is utilities for specifying different types of reset functions.
+
+.. currentmodule:: f110_gym.envs.reset
+
+.. autosummary::
+    :toctree: _generated/
+    
+    reset_fn.ResetFn
+    masked_reset.MaskedResetFn
+    masked_reset.GridResetFn
+    masked_reset.AllTrackResetFn
+    utils.sample_around_waypoint
\ No newline at end of file
diff --git a/docs/src/api/track.rst b/docs/src/api/track.rst
new file mode 100644
index 00000000..087e5206
--- /dev/null
+++ b/docs/src/api/track.rst
@@ -0,0 +1,16 @@
+Race Tracks
+========================================
+
+This is the utilities for specifying a track.
+
+.. currentmodule:: f110_gym.envs.track
+
+.. autosummary::
+    :toctree: _generated/
+    
+    cubic_spline.CubicSpline1D
+    cubic_spline.CubicSpline2D
+    raceline.Raceline
+    track.TrackSpec
+    track.Track
+    utils.find_track_dir
diff --git a/docs/assets/docker_logo.png b/docs/src/assets/docker_logo.png
similarity index 100%
rename from docs/assets/docker_logo.png
rename to docs/src/assets/docker_logo.png
diff --git a/docs/assets/f110cover.png b/docs/src/assets/f110cover.png
similarity index 100%
rename from docs/assets/f110cover.png
rename to docs/src/assets/f110cover.png
diff --git a/docs/assets/f1_stickers_01.png b/docs/src/assets/f1_stickers_01.png
similarity index 100%
rename from docs/assets/f1_stickers_01.png
rename to docs/src/assets/f1_stickers_01.png
diff --git a/docs/assets/f1_stickers_02.png b/docs/src/assets/f1_stickers_02.png
similarity index 100%
rename from docs/assets/f1_stickers_02.png
rename to docs/src/assets/f1_stickers_02.png
diff --git a/docs/assets/f1tenth_gym.svg b/docs/src/assets/f1tenth_gym.svg
similarity index 100%
rename from docs/assets/f1tenth_gym.svg
rename to docs/src/assets/f1tenth_gym.svg
diff --git a/docs/assets/f1tenth_gym_color.svg b/docs/src/assets/f1tenth_gym_color.svg
similarity index 100%
rename from docs/assets/f1tenth_gym_color.svg
rename to docs/src/assets/f1tenth_gym_color.svg
diff --git a/docs/assets/gym.svg b/docs/src/assets/gym.svg
similarity index 100%
rename from docs/assets/gym.svg
rename to docs/src/assets/gym.svg
diff --git a/docs/assets/pip_logo.svg b/docs/src/assets/pip_logo.svg
similarity index 100%
rename from docs/assets/pip_logo.svg
rename to docs/src/assets/pip_logo.svg
diff --git a/docs/src/conf.py b/docs/src/conf.py
new file mode 100644
index 00000000..3966b05c
--- /dev/null
+++ b/docs/src/conf.py
@@ -0,0 +1,86 @@
+# flake8: noqa
+import os
+import sys
+import f110_gym
+
+sys.path.insert(0, os.path.abspath("../../"))
+
+# -- Project information -----------------------------------------------------
+
+project = "f1tenth_gym"
+copyright = "2023, Hongrui Zheng, Matthew O'Kelly, Aman Sinha, Joseph Auckley, Luigi Berducci, Renukanandan Tumu, Ahmad Amine"
+author = "Hongrui Zheng, Matthew O'Kelly, Aman Sinha, Joseph Auckley, Luigi Berducci, Renukanandan Tumu, Ahmad Amine"
+
+# The full version, including alpha/beta/rc tags
+release = "1.0.0"
+version = "1.0.0"
+
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    "sphinx.ext.autodoc",
+    "numpydoc",
+    "sphinx_copybutton",
+    "sphinx_design",
+    "sphinx.ext.doctest",
+    "sphinx.ext.autosummary",
+    "sphinx.ext.coverage",
+    "sphinx.ext.viewcode",
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ["_templates"]
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
+
+master_doc = "index"
+
+# -- coverate test configuration -----------------------------------------------
+coverage_show_missing_items = True
+
+# -- numpydoc -----------------------------------------------------------------
+numpydoc_show_class_members = False
+
+# -- versions ----------------------------------------------------------------
+version_match = os.environ.get("READTHEDOCS_VERSION")
+# release = f110_gym.__version__
+release = "1.0.0"
+json_url = "https://f1tenth-gym.readthedocs.io/en/latest/_static/switcher.json"
+if not version_match or version_match.isdigit() or version_match == "latest":
+    if "dev" in release or "rc" in release:
+        version_match = "dev"
+        json_url = "_static/switcher.json"
+    else:
+        version_match = f"v{release}"
+elif version_match == "stable":
+    version_match = f"v{release}"
+
+# -- Theme -------------------------------------------------------------------
+html_theme = "pydata_sphinx_theme"
+html_favicon = "assets/f1_stickers_02.png"
+html_theme_options = {
+    "logo": {
+        "image_light": "src/assets/f1tenth_gym_color.svg",
+        "image_dark": "src/assets/f1tenth_gym.svg",
+    },
+    "github_url": "https://github.com/f1tenth/f1tenth_gym",
+    "collapse_navigation": True,
+    "header_links_before_dropdown": 6,
+    # Add light/dark mode and documentation version switcher:
+    "navbar_end": ["theme-switcher", "navbar-icon-links", "version-switcher"],
+    "switcher": {
+        "json_url": json_url,
+        "version_match": version_match,
+    }
+}
+html_sidebars = {
+    "**": ["search-field.html", "sidebar-nav-bs.html", "sidebar-ethical-ads.html"]
+}
+html_last_updated_fmt = "%b %d, %Y"
diff --git a/docs/src/index.rst b/docs/src/index.rst
new file mode 100644
index 00000000..2175f8db
--- /dev/null
+++ b/docs/src/index.rst
@@ -0,0 +1,121 @@
+F1TENTH Gym Documentation 
+================================================
+
+Overview
+---------
+The F1TENTH Gym environment is created for research that needs a asynchronous, realistic vehicle simulation with multiple vehicle instances in the same environment, with applications in reinforcement learning.
+
+The environment is designed with determinism in mind. All agents' physics simulation are stepped simultaneously, and all randomness are seeded and experiments can be reproduced. The explicit stepping also enables the physics engine to take advantage of faster than real-time execution (up to 30x realtime) and enable massively parallel applications.
+
+Github repo: https://github.com/f1tenth/f1tenth_gym
+
+Note that the GitHub will have more up to date documentation than this page. If you see a mistake, please contribute a fix!
+
+
+.. grid:: 2
+  :gutter: 4
+
+  .. grid-item-card::
+
+    Physical Platform
+    ^^^^^^^^^^^^^^^^^
+    
+    To build a physical 1/10th scale vehicle, follow the official build guide.
+    
+    .. image:: assets/f110cover.png
+      :width: 100
+      :align: center
+    
+    +++
+
+    .. button-link:: https://f1tenth.org/build.html
+      :expand:
+      :color: secondary
+      :click-parent:
+
+      Build Guide
+
+
+  .. grid-item-card::
+
+    Installation
+    ^^^^^^^^^^^^
+    
+    Installation guide
+
+    .. image:: assets/pip_logo.svg
+      :width: 100
+      :align: center
+    
+    +++
+
+    .. button-ref:: install/installation
+      :expand:
+      :color: secondary
+      :click-parent:
+
+      Installation
+
+  .. grid-item-card::
+
+    Quick Start
+    ^^^^^^^^^^^
+    
+    Example usage
+
+    .. image:: assets/gym.svg
+      :width: 100
+      :align: center
+    
+    +++
+
+    .. button-ref:: usage/index
+      :expand:
+      :color: secondary
+      :click-parent:
+      
+      Quick Start
+
+  .. grid-item-card::
+
+    API
+    ^^^
+    
+    API
+    
+    .. image:: assets/gym.svg
+      :width: 100
+      :align: center
+
+    +++
+
+    .. button-ref:: api/index
+      :expand:
+      :color: secondary
+      :click-parent:
+      
+      API
+
+Citing
+--------
+If you find this Gym environment useful, please consider citing:
+
+.. code::
+  
+  @inproceedings{o2020f1tenth,
+    title={textscF1TENTH: An Open-source Evaluation Environment for Continuous Control and Reinforcement Learning},
+    author={O’Kelly, Matthew and Zheng, Hongrui and Karthik, Dhruv and Mangharam, Rahul},
+    booktitle={NeurIPS 2019 Competition and Demonstration Track},
+    pages={77--89},
+    year={2020},
+    organization={PMLR}
+  }
+
+.. toctree::
+  :hidden:
+  :maxdepth: 3
+  :titlesonly:
+
+  install/installation
+  usage/index
+  api/index
\ No newline at end of file
diff --git a/docs/src/install/installation.rst b/docs/src/install/installation.rst
new file mode 100644
index 00000000..ae453a54
--- /dev/null
+++ b/docs/src/install/installation.rst
@@ -0,0 +1,38 @@
+Installation
+=================
+``f1tenth_gym`` is a pure Python library and can be installed with ``pip``.
+
+
+PyPI
+------
+
+Coming Soon...
+
+
+Install for Developement
+----------------------------
+
+We suggest using a ``virtualenv``. Note that ``python3.9+`` is required. You can install the package via pip:
+
+.. code:: bash
+
+    pip install -e git+https://github.com/f1tenth/f1tenth_gym.git@v1.0.0#egg=f1tenth_gym
+
+
+Building Documentation
+------------------------
+
+The documentations can be build locally. Install the extra dependencies via pip:
+
+.. code:: bash
+
+    cd f1tenth_gym/docs
+    pip install -r requirements.txt
+
+Then you can build the documentations in the ``docs/`` directory via:
+
+.. code:: bash
+    
+    make html
+
+The static HTML pages can be found at ``docs/_build/html/index.html`` afterwards.
\ No newline at end of file
diff --git a/docs/basic_usage.rst b/docs/src/usage/basic_usage.rst
similarity index 100%
rename from docs/basic_usage.rst
rename to docs/src/usage/basic_usage.rst
diff --git a/docs/customized_usage.rst b/docs/src/usage/customized_usage.rst
similarity index 100%
rename from docs/customized_usage.rst
rename to docs/src/usage/customized_usage.rst
diff --git a/docs/src/usage/index.rst b/docs/src/usage/index.rst
new file mode 100644
index 00000000..904c3971
--- /dev/null
+++ b/docs/src/usage/index.rst
@@ -0,0 +1,10 @@
+Usage
+==============
+
+.. toctree::
+  :caption: Usage
+  :maxdepth: 2
+
+  basic_usage
+  customized_usage
+  reproduce
\ No newline at end of file
diff --git a/docs/reproduce.rst b/docs/src/usage/reproduce.rst
similarity index 100%
rename from docs/reproduce.rst
rename to docs/src/usage/reproduce.rst
diff --git a/docs/xml/____init_____8py.xml b/docs/xml/____init_____8py.xml
deleted file mode 100644
index 3aa36e49..00000000
--- a/docs/xml/____init_____8py.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="____init_____8py" kind="file" language="Python">
-    <compoundname>__init__.py</compoundname>
-    <innernamespace refid="namespacef110__gym">f110_gym</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="keyword">from</highlight><highlight class="normal"><sp/>gym.envs.registration<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>register</highlight></codeline>
-<codeline lineno="2"><highlight class="normal">register(</highlight></codeline>
-<codeline lineno="3"><highlight class="normal"><sp/><sp/><sp/><sp/>id=</highlight><highlight class="stringliteral">&apos;f110-v0&apos;</highlight><highlight class="normal">,</highlight></codeline>
-<codeline lineno="4"><highlight class="normal"><sp/><sp/><sp/><sp/>entry_point=</highlight><highlight class="stringliteral">&apos;f110_gym.envs:F110Env&apos;</highlight><highlight class="normal">,</highlight></codeline>
-<codeline lineno="5"><highlight class="normal"><sp/><sp/><sp/><sp/>)</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/__init__.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/base__classes_8py.xml b/docs/xml/base__classes_8py.xml
deleted file mode 100644
index 87973cdf..00000000
--- a/docs/xml/base__classes_8py.xml
+++ /dev/null
@@ -1,510 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="base__classes_8py" kind="file" language="Python">
-    <compoundname>base_classes.py</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car" prot="public">f110_gym::envs::base_classes::RaceCar</innerclass>
-    <innerclass refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator" prot="public">f110_gym::envs::base_classes::Simulator</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1base__classes">f110_gym::envs::base_classes</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="26"><highlight class="stringliteral">Prototype<sp/>of<sp/>base<sp/>classes</highlight></codeline>
-<codeline lineno="27"><highlight class="stringliteral">Replacement<sp/>of<sp/>the<sp/>old<sp/>RaceCar,<sp/>Simulator<sp/>classes<sp/>in<sp/>C++</highlight></codeline>
-<codeline lineno="28"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="29"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight></codeline>
-<codeline lineno="31"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>numba<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>njit</highlight></codeline>
-<codeline lineno="33"><highlight class="normal"></highlight></codeline>
-<codeline lineno="34"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1dynamic__models" kindref="compound">f110_gym.envs.dynamic_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>vehicle_dynamics_st,<sp/>pid</highlight></codeline>
-<codeline lineno="35"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1laser__models" kindref="compound">f110_gym.envs.laser_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>ScanSimulator2D,<sp/>check_ttc_jit,<sp/>ray_cast</highlight></codeline>
-<codeline lineno="36"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1collision__models" kindref="compound">f110_gym.envs.collision_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>get_vertices,<sp/>collision_multiple</highlight></codeline>
-<codeline lineno="37"><highlight class="normal"></highlight></codeline>
-<codeline lineno="38" refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car" kindref="compound">RaceCar</ref>(object):</highlight></codeline>
-<codeline lineno="39"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="40"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Base<sp/>level<sp/>race<sp/>car<sp/>class,<sp/>handles<sp/>the<sp/>physics<sp/>and<sp/>laser<sp/>scan<sp/>of<sp/>a<sp/>single<sp/>vehicle</highlight></codeline>
-<codeline lineno="41"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="42"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Data<sp/>Members:</highlight></codeline>
-<codeline lineno="43"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>params<sp/>(dict):<sp/>vehicle<sp/>parameters<sp/>dictionary</highlight></codeline>
-<codeline lineno="44"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>is_ego<sp/>(bool):<sp/>ego<sp/>identifier</highlight></codeline>
-<codeline lineno="45"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>time_step<sp/>(float):<sp/>physics<sp/>timestep</highlight></codeline>
-<codeline lineno="46"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_beams<sp/>(int):<sp/>number<sp/>of<sp/>beams<sp/>in<sp/>laser</highlight></codeline>
-<codeline lineno="47"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fov<sp/>(float):<sp/>field<sp/>of<sp/>view<sp/>of<sp/>laser</highlight></codeline>
-<codeline lineno="48"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>state<sp/>(np.ndarray<sp/>(7,<sp/>)):<sp/>state<sp/>vector<sp/>[x,<sp/>y,<sp/>theta,<sp/>vel,<sp/>steer_angle,<sp/>ang_vel,<sp/>slip_angle]</highlight></codeline>
-<codeline lineno="49"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>odom<sp/>(np.ndarray(13,<sp/>)):<sp/>odometry<sp/>vector<sp/>[x,<sp/>y,<sp/>z,<sp/>qx,<sp/>qy,<sp/>qz,<sp/>qw,<sp/>linear_x,<sp/>linear_y,<sp/>linear_z,<sp/>angular_x,<sp/>angular_y,<sp/>angular_z]</highlight></codeline>
-<codeline lineno="50"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accel<sp/>(float):<sp/>current<sp/>acceleration<sp/>input</highlight></codeline>
-<codeline lineno="51"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steer_angle_vel<sp/>(float):<sp/>current<sp/>steering<sp/>velocity<sp/>input</highlight></codeline>
-<codeline lineno="52"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>in_collision<sp/>(bool):<sp/>collision<sp/>indicator</highlight></codeline>
-<codeline lineno="53"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="54"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="55"><highlight class="normal"></highlight></codeline>
-<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af342754a877c42b3828a03b6425801d4" kindref="member">__init__</ref>(self,<sp/>params,<sp/>is_ego=False,<sp/>time_step=0.01,<sp/>num_beams=1080,<sp/>fov=4.7):</highlight></codeline>
-<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="58"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Init<sp/>function</highlight></codeline>
-<codeline lineno="59"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="60"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="61"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>params<sp/>(dict):<sp/>vehicle<sp/>parameter<sp/>dictionary,<sp/>includes<sp/>{&apos;mu&apos;,<sp/>&apos;C_Sf&apos;,<sp/>&apos;C_Sr&apos;,<sp/>&apos;lf&apos;,<sp/>&apos;lr&apos;,<sp/>&apos;h&apos;,<sp/>&apos;m&apos;,<sp/>&apos;I&apos;,<sp/>&apos;s_min&apos;,<sp/>&apos;s_max&apos;,<sp/>&apos;sv_min&apos;,<sp/>&apos;sv_max&apos;,<sp/>&apos;v_switch&apos;,<sp/>&apos;a_max&apos;:<sp/>9.51,<sp/>&apos;v_min&apos;,<sp/>&apos;v_max&apos;,<sp/>&apos;length&apos;,<sp/>&apos;width&apos;}</highlight></codeline>
-<codeline lineno="62"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>is_ego<sp/>(bool,<sp/>default=False):<sp/>ego<sp/>identifier</highlight></codeline>
-<codeline lineno="63"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>time_step<sp/>(float,<sp/>default=0.01):<sp/>physics<sp/>sim<sp/>time<sp/>step</highlight></codeline>
-<codeline lineno="64"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_beams<sp/>(int,<sp/>default=1080):<sp/>number<sp/>of<sp/>beams<sp/>in<sp/>the<sp/>laser<sp/>scan</highlight></codeline>
-<codeline lineno="65"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fov<sp/>(float,<sp/>default=4.7):<sp/>field<sp/>of<sp/>view<sp/>of<sp/>the<sp/>laser</highlight></codeline>
-<codeline lineno="66"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="67"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="68"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="69"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="70"><highlight class="normal"></highlight></codeline>
-<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>initialization</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref><sp/>=<sp/>params</highlight></codeline>
-<codeline lineno="73"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5408c25f5507645e351b33c7b93d09e9" kindref="member">is_ego</ref><sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a507e48bfae2cd153ce988acfa915f4e3" kindref="member">time_step</ref><sp/>=<sp/>time_step</highlight></codeline>
-<codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a32283ca467927cb92fd4cebaf4572788" kindref="member">num_beams</ref><sp/>=<sp/>1080</highlight></codeline>
-<codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1ab17edc5d7143043b17160ce593da0e05" kindref="member">fov</ref><sp/>=<sp/>4.7</highlight></codeline>
-<codeline lineno="77"><highlight class="normal"></highlight></codeline>
-<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>state<sp/>is<sp/>[x,<sp/>y,<sp/>steer_angle,<sp/>vel,<sp/>yaw_angle,<sp/>yaw_rate,<sp/>slip_angle]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref><sp/>=<sp/>np.zeros((7,<sp/>))</highlight></codeline>
-<codeline lineno="80"><highlight class="normal"></highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>pose<sp/>of<sp/>opponents<sp/>in<sp/>the<sp/>world</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a3dc163d182be2760a4f8322417fd2332" kindref="member">opp_poses</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="83"><highlight class="normal"></highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>control<sp/>inputs</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5f298f55e8dc14fb39e5145699e90bfa" kindref="member">accel</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5a1dbcba00b5c54afc700873df015eba" kindref="member">steer_angle_vel</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="87"><highlight class="normal"></highlight></codeline>
-<codeline lineno="88"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>steering<sp/>delay<sp/>buffer</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kindref="member">steer_buffer</ref><sp/>=<sp/>np.empty((0,<sp/>))</highlight></codeline>
-<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a51405046f30a27487241455cb51481ff" kindref="member">steer_buffer_size</ref><sp/>=<sp/>2</highlight></codeline>
-<codeline lineno="91"><highlight class="normal"></highlight></codeline>
-<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>collision<sp/>identifier</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a04ac46193f2706b71aa6ccc616484a1b" kindref="member">in_collision</ref><sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="94"><highlight class="normal"></highlight></codeline>
-<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>collision<sp/>threshold<sp/>for<sp/>iTTC<sp/>to<sp/>environment</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5eb8a1fa8d27dfccd008573e2d720c44" kindref="member">ttc_thresh</ref><sp/>=<sp/>0.005</highlight></codeline>
-<codeline lineno="97"><highlight class="normal"></highlight></codeline>
-<codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>initialize<sp/>scan<sp/>sim</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a35674ca4c4a0eda359249216bee094b3" kindref="member">scan_simulator</ref><sp/>=<sp/><ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(num_beams,<sp/>fov)</highlight></codeline>
-<codeline lineno="100"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_ang_incr<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a35674ca4c4a0eda359249216bee094b3" kindref="member">scan_simulator</ref>.get_increment()</highlight></codeline>
-<codeline lineno="101"><highlight class="normal"></highlight></codeline>
-<codeline lineno="102"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>current<sp/>scan</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aeaedd3e39c14a7904e8417ad264b3168" kindref="member">current_scan</ref><sp/>=<sp/>np.zeros((num_beams,<sp/>))</highlight></codeline>
-<codeline lineno="104"><highlight class="normal"></highlight></codeline>
-<codeline lineno="105"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>angles<sp/>of<sp/>each<sp/>scan<sp/>beam,<sp/>distance<sp/>from<sp/>lidar<sp/>to<sp/>edge<sp/>of<sp/>car<sp/>at<sp/>each<sp/>beam,<sp/>and<sp/>precomputed<sp/>cosines<sp/>of<sp/>each<sp/>angle</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a47e2229884b30c3640f75cc46a4b1fe9" kindref="member">cosines</ref><sp/>=<sp/>np.zeros((num_beams,<sp/>))</highlight></codeline>
-<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7a416feebdc5bf3289495877a722ac5e" kindref="member">scan_angles</ref><sp/>=<sp/>np.zeros((num_beams,<sp/>))</highlight></codeline>
-<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a45934ce2c731e21cee3b3890d5713a1e" kindref="member">side_distances</ref><sp/>=<sp/>np.zeros((num_beams,<sp/>))</highlight></codeline>
-<codeline lineno="109"><highlight class="normal"></highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dist_sides<sp/>=<sp/>params[</highlight><highlight class="stringliteral">&apos;width&apos;</highlight><highlight class="normal">]/2.</highlight></codeline>
-<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dist_fr<sp/>=<sp/>(params[</highlight><highlight class="stringliteral">&apos;lf&apos;</highlight><highlight class="normal">]+params[</highlight><highlight class="stringliteral">&apos;lr&apos;</highlight><highlight class="normal">])/2.</highlight></codeline>
-<codeline lineno="112"><highlight class="normal"></highlight></codeline>
-<codeline lineno="113"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(num_beams):</highlight></codeline>
-<codeline lineno="114"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>angle<sp/>=<sp/>-fov/2.<sp/>+<sp/>i*scan_ang_incr</highlight></codeline>
-<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7a416feebdc5bf3289495877a722ac5e" kindref="member">scan_angles</ref>[i]<sp/>=<sp/>angle</highlight></codeline>
-<codeline lineno="116"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a47e2229884b30c3640f75cc46a4b1fe9" kindref="member">cosines</ref>[i]<sp/>=<sp/>np.cos(angle)</highlight></codeline>
-<codeline lineno="117"><highlight class="normal"></highlight></codeline>
-<codeline lineno="118"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>angle<sp/>&gt;<sp/>0:</highlight></codeline>
-<codeline lineno="119"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>angle<sp/>&lt;<sp/>np.pi/2:</highlight></codeline>
-<codeline lineno="120"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>between<sp/>0<sp/>and<sp/>pi/2</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="121"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>to_side<sp/>=<sp/>dist_sides<sp/>/<sp/>np.sin(angle)</highlight></codeline>
-<codeline lineno="122"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>to_fr<sp/>=<sp/>dist_fr<sp/>/<sp/>np.cos(angle)</highlight></codeline>
-<codeline lineno="123"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a45934ce2c731e21cee3b3890d5713a1e" kindref="member">side_distances</ref>[i]<sp/>=<sp/>min(to_side,<sp/>to_fr)</highlight></codeline>
-<codeline lineno="124"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>between<sp/>pi/2<sp/>and<sp/>pi</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>to_side<sp/>=<sp/>dist_sides<sp/>/<sp/>np.cos(angle<sp/>-<sp/>np.pi/2.)</highlight></codeline>
-<codeline lineno="127"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>to_fr<sp/>=<sp/>dist_fr<sp/>/<sp/>np.sin(angle<sp/>-<sp/>np.pi/2.)</highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a45934ce2c731e21cee3b3890d5713a1e" kindref="member">side_distances</ref>[i]<sp/>=<sp/>min(to_side,<sp/>to_fr)</highlight></codeline>
-<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="130"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>angle<sp/>&gt;<sp/>-np.pi/2:</highlight></codeline>
-<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>between<sp/>0<sp/>and<sp/>-pi/2</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>to_side<sp/>=<sp/>dist_sides<sp/>/<sp/>np.sin(-angle)</highlight></codeline>
-<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>to_fr<sp/>=<sp/>dist_fr<sp/>/<sp/>np.cos(-angle)</highlight></codeline>
-<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a45934ce2c731e21cee3b3890d5713a1e" kindref="member">side_distances</ref>[i]<sp/>=<sp/>min(to_side,<sp/>to_fr)</highlight></codeline>
-<codeline lineno="135"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>between<sp/>-pi/2<sp/>and<sp/>-pi</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>to_side<sp/>=<sp/>dist_sides<sp/>/<sp/>np.cos(-angle<sp/>-<sp/>np.pi/2)</highlight></codeline>
-<codeline lineno="138"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>to_fr<sp/>=<sp/>dist_fr<sp/>/<sp/>np.sin(-angle<sp/>-<sp/>np.pi/2)</highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a45934ce2c731e21cee3b3890d5713a1e" kindref="member">side_distances</ref>[i]<sp/>=<sp/>min(to_side,<sp/>to_fr)</highlight></codeline>
-<codeline lineno="140"><highlight class="normal"></highlight></codeline>
-<codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a6ab5b5dd420b182b5156ee9566c03411" kindref="member">update_params</ref>(self,<sp/>params):</highlight></codeline>
-<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="143"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Updates<sp/>the<sp/>physical<sp/>parameters<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="144"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Note<sp/>that<sp/>does<sp/>not<sp/>need<sp/>to<sp/>be<sp/>called<sp/>at<sp/>initialization<sp/>of<sp/>class<sp/>anymore</highlight></codeline>
-<codeline lineno="145"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="146"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="147"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>params<sp/>(dict):<sp/>new<sp/>parameters<sp/>for<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="148"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="149"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="150"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="151"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref><sp/>=<sp/>params</highlight></codeline>
-<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a2a60c9ee34f2f09fb0a7e5cc7b287897" kindref="member">set_map</ref>(self,<sp/>map_path,<sp/>map_ext):</highlight></codeline>
-<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="156"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Sets<sp/>the<sp/>map<sp/>for<sp/>scan<sp/>simulator</highlight></codeline>
-<codeline lineno="157"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="158"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="159"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>(str):<sp/>absolute<sp/>path<sp/>to<sp/>the<sp/>map<sp/>yaml<sp/>file</highlight></codeline>
-<codeline lineno="160"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>(str):<sp/>extension<sp/>of<sp/>the<sp/>map<sp/>image<sp/>file</highlight></codeline>
-<codeline lineno="161"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a35674ca4c4a0eda359249216bee094b3" kindref="member">scan_simulator</ref>.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a2a60c9ee34f2f09fb0a7e5cc7b287897" kindref="member">set_map</ref>(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="163"><highlight class="normal"></highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a0fa587dc3c1a12c9217f0bd093c1bc08" kindref="member">reset</ref>(self,<sp/>pose):</highlight></codeline>
-<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="166"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Resets<sp/>the<sp/>vehicle<sp/>to<sp/>a<sp/>pose</highlight></codeline>
-<codeline lineno="167"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="168"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="169"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(np.ndarray<sp/>(3,<sp/>)):<sp/>pose<sp/>to<sp/>reset<sp/>the<sp/>vehicle<sp/>to</highlight></codeline>
-<codeline lineno="170"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="171"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="172"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="173"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>clear<sp/>control<sp/>inputs</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5f298f55e8dc14fb39e5145699e90bfa" kindref="member">accel</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5a1dbcba00b5c54afc700873df015eba" kindref="member">steer_angle_vel</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="177"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>clear<sp/>collision<sp/>indicator</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a04ac46193f2706b71aa6ccc616484a1b" kindref="member">in_collision</ref><sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>clear<sp/>state</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref><sp/>=<sp/>np.zeros((7,<sp/>))</highlight></codeline>
-<codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[0:2]<sp/>=<sp/>pose[0:2]</highlight></codeline>
-<codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[4]<sp/>=<sp/>pose[2]</highlight></codeline>
-<codeline lineno="183"><highlight class="normal"></highlight></codeline>
-<codeline lineno="184"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7d15e74a1b82646675d60ce02cdce6b5" kindref="member">ray_cast_agents</ref>(self,<sp/>scan):</highlight></codeline>
-<codeline lineno="185"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="186"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Ray<sp/>cast<sp/>onto<sp/>other<sp/>agents<sp/>in<sp/>the<sp/>env,<sp/>modify<sp/>original<sp/>scan</highlight></codeline>
-<codeline lineno="187"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="188"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="189"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>(np.ndarray,<sp/>(n,<sp/>)):<sp/>original<sp/>scan<sp/>range<sp/>array</highlight></codeline>
-<codeline lineno="190"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="191"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="192"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_scan<sp/>(np.ndarray,<sp/>(n,<sp/>)):<sp/>modified<sp/>scan</highlight></codeline>
-<codeline lineno="193"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="194"><highlight class="normal"></highlight></codeline>
-<codeline lineno="195"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>starting<sp/>from<sp/>original<sp/>scan</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="196"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_scan<sp/>=<sp/>scan</highlight></codeline>
-<codeline lineno="197"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="198"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>loop<sp/>over<sp/>all<sp/>opponent<sp/>vehicle<sp/>poses</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>opp_pose<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a3dc163d182be2760a4f8322417fd2332" kindref="member">opp_poses</ref>:</highlight></codeline>
-<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>get<sp/>vertices<sp/>of<sp/>current<sp/>oppoenent</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>opp_vertices<sp/>=<sp/>get_vertices(opp_pose,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;length&apos;</highlight><highlight class="normal">],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;width&apos;</highlight><highlight class="normal">])</highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_scan<sp/>=<sp/>ray_cast(np.append(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[0:2],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[4]),<sp/>new_scan,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7a416feebdc5bf3289495877a722ac5e" kindref="member">scan_angles</ref>,<sp/>opp_vertices)</highlight></codeline>
-<codeline lineno="203"><highlight class="normal"></highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>new_scan</highlight></codeline>
-<codeline lineno="205"><highlight class="normal"></highlight></codeline>
-<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a4577a30fd8879de7df1d0ace7702f450" kindref="member">check_ttc</ref>(self):</highlight></codeline>
-<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="208"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Check<sp/>iTTC<sp/>against<sp/>the<sp/>environment,<sp/>sets<sp/>vehicle<sp/>states<sp/>accordingly<sp/>if<sp/>collision<sp/>occurs.</highlight></codeline>
-<codeline lineno="209"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Note<sp/>that<sp/>this<sp/>does<sp/>NOT<sp/>check<sp/>collision<sp/>with<sp/>other<sp/>agents.</highlight></codeline>
-<codeline lineno="210"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="211"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>state<sp/>is<sp/>[x,<sp/>y,<sp/>steer_angle,<sp/>vel,<sp/>yaw_angle,<sp/>yaw_rate,<sp/>slip_angle]</highlight></codeline>
-<codeline lineno="212"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="213"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="214"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="215"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="216"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="217"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="218"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>in_collision<sp/>=<sp/>check_ttc_jit(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aeaedd3e39c14a7904e8417ad264b3168" kindref="member">current_scan</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[3],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7a416feebdc5bf3289495877a722ac5e" kindref="member">scan_angles</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a47e2229884b30c3640f75cc46a4b1fe9" kindref="member">cosines</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a45934ce2c731e21cee3b3890d5713a1e" kindref="member">side_distances</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5eb8a1fa8d27dfccd008573e2d720c44" kindref="member">ttc_thresh</ref>)</highlight></codeline>
-<codeline lineno="221"><highlight class="normal"></highlight></codeline>
-<codeline lineno="222"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>if<sp/>in<sp/>collision<sp/>stop<sp/>vehicle</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="223"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>in_collision:</highlight></codeline>
-<codeline lineno="224"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[3:]<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5f298f55e8dc14fb39e5145699e90bfa" kindref="member">accel</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5a1dbcba00b5c54afc700873df015eba" kindref="member">steer_angle_vel</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="227"><highlight class="normal"></highlight></codeline>
-<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>state</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="229"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a04ac46193f2706b71aa6ccc616484a1b" kindref="member">in_collision</ref><sp/>=<sp/>in_collision</highlight></codeline>
-<codeline lineno="230"><highlight class="normal"></highlight></codeline>
-<codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>in_collision</highlight></codeline>
-<codeline lineno="232"><highlight class="normal"></highlight></codeline>
-<codeline lineno="233"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1ae12c14c1353e6aab2f72036593d85518" kindref="member">update_pose</ref>(self,<sp/>raw_steer,<sp/>vel):</highlight></codeline>
-<codeline lineno="234"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="235"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Steps<sp/>the<sp/>vehicle&apos;s<sp/>physical<sp/>simulation</highlight></codeline>
-<codeline lineno="236"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="237"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="238"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steer<sp/>(float):<sp/>desired<sp/>steering<sp/>angle</highlight></codeline>
-<codeline lineno="239"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel<sp/>(float):<sp/>desired<sp/>longitudinal<sp/>velocity</highlight></codeline>
-<codeline lineno="240"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="241"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="242"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="243"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="244"><highlight class="normal"></highlight></codeline>
-<codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>state<sp/>is<sp/>[x,<sp/>y,<sp/>steer_angle,<sp/>vel,<sp/>yaw_angle,<sp/>yaw_rate,<sp/>slip_angle]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="246"><highlight class="normal"></highlight></codeline>
-<codeline lineno="247"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>steering<sp/>delay</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="248"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steer<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="249"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kindref="member">steer_buffer</ref>.shape[0]<sp/>&lt;<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a51405046f30a27487241455cb51481ff" kindref="member">steer_buffer_size</ref>:</highlight></codeline>
-<codeline lineno="250"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steer<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="251"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kindref="member">steer_buffer</ref><sp/>=<sp/>np.append(raw_steer,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kindref="member">steer_buffer</ref>)</highlight></codeline>
-<codeline lineno="252"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="253"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steer<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kindref="member">steer_buffer</ref>[-1]</highlight></codeline>
-<codeline lineno="254"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kindref="member">steer_buffer</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kindref="member">steer_buffer</ref>[:-1]</highlight></codeline>
-<codeline lineno="255"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kindref="member">steer_buffer</ref><sp/>=<sp/>np.append(raw_steer,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kindref="member">steer_buffer</ref>)</highlight></codeline>
-<codeline lineno="256"><highlight class="normal"></highlight></codeline>
-<codeline lineno="257"><highlight class="normal"></highlight></codeline>
-<codeline lineno="258"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>steering<sp/>angle<sp/>velocity<sp/>input<sp/>to<sp/>steering<sp/>velocity<sp/>acceleration<sp/>input</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="259"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl,<sp/>sv<sp/>=<sp/>pid(vel,<sp/>steer,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[3],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[2],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;sv_max&apos;</highlight><highlight class="normal">],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;a_max&apos;</highlight><highlight class="normal">],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;v_max&apos;</highlight><highlight class="normal">],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;v_min&apos;</highlight><highlight class="normal">])</highlight></codeline>
-<codeline lineno="260"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="261"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>physics,<sp/>get<sp/>RHS<sp/>of<sp/>diff&apos;eq</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="262"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>=<sp/>vehicle_dynamics_st(</highlight></codeline>
-<codeline lineno="263"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>,</highlight></codeline>
-<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>np.array([sv,<sp/>accl]),</highlight></codeline>
-<codeline lineno="265"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;mu&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="266"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;C_Sf&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="267"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;C_Sr&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="268"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;lf&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="269"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;lr&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="270"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;h&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="271"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;m&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;I&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;s_min&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="274"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;s_max&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="275"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;sv_min&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="276"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;sv_max&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;v_switch&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="278"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;a_max&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="279"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;v_min&apos;</highlight><highlight class="normal">],</highlight></codeline>
-<codeline lineno="280"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;v_max&apos;</highlight><highlight class="normal">])</highlight></codeline>
-<codeline lineno="281"><highlight class="normal"></highlight></codeline>
-<codeline lineno="282"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>state</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref><sp/>+<sp/>f<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a507e48bfae2cd153ce988acfa915f4e3" kindref="member">time_step</ref></highlight></codeline>
-<codeline lineno="284"><highlight class="normal"></highlight></codeline>
-<codeline lineno="285"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>scan</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="286"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aeaedd3e39c14a7904e8417ad264b3168" kindref="member">current_scan</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a35674ca4c4a0eda359249216bee094b3" kindref="member">scan_simulator</ref>.scan(np.append(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[0:2],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kindref="member">state</ref>[4]))</highlight></codeline>
-<codeline lineno="287"><highlight class="normal"></highlight></codeline>
-<codeline lineno="288"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a4800c5ac90ba93b79a0338e5e34ead43" kindref="member">update_opp_poses</ref>(self,<sp/>opp_poses):</highlight></codeline>
-<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="290"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Updates<sp/>the<sp/>vehicle&apos;s<sp/>information<sp/>on<sp/>other<sp/>vehicles</highlight></codeline>
-<codeline lineno="291"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="292"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="293"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>opp_poses<sp/>(np.ndarray(num_other_agents,<sp/>3)):<sp/>updated<sp/>poses<sp/>of<sp/>other<sp/>agents</highlight></codeline>
-<codeline lineno="294"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="295"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="296"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="297"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a3dc163d182be2760a4f8322417fd2332" kindref="member">opp_poses</ref><sp/>=<sp/>opp_poses</highlight></codeline>
-<codeline lineno="299"><highlight class="normal"></highlight></codeline>
-<codeline lineno="300"><highlight class="normal"></highlight></codeline>
-<codeline lineno="301"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a356ec05a0a0c056f4d43f5fb0451c83d" kindref="member">update_scan</ref>(self):</highlight></codeline>
-<codeline lineno="302"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="303"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Steps<sp/>the<sp/>vehicle&apos;s<sp/>laser<sp/>scan<sp/>simulation</highlight></codeline>
-<codeline lineno="304"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Separated<sp/>from<sp/>update_pose<sp/>because<sp/>needs<sp/>to<sp/>update<sp/>scan<sp/>based<sp/>on<sp/>NEW<sp/>poses<sp/>of<sp/>agents<sp/>in<sp/>the<sp/>environment</highlight></codeline>
-<codeline lineno="305"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="306"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="307"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="308"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="309"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="310"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="311"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="312"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="313"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>check<sp/>ttc</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a4577a30fd8879de7df1d0ace7702f450" kindref="member">check_ttc</ref>()</highlight></codeline>
-<codeline lineno="315"><highlight class="normal"></highlight></codeline>
-<codeline lineno="316"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ray<sp/>cast<sp/>other<sp/>agents<sp/>to<sp/>modify<sp/>scan</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="317"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aeaedd3e39c14a7904e8417ad264b3168" kindref="member">current_scan</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7d15e74a1b82646675d60ce02cdce6b5" kindref="member">ray_cast_agents</ref>(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aeaedd3e39c14a7904e8417ad264b3168" kindref="member">current_scan</ref>)</highlight></codeline>
-<codeline lineno="318"><highlight class="normal"></highlight></codeline>
-<codeline lineno="319"><highlight class="normal"></highlight></codeline>
-<codeline lineno="320"><highlight class="normal"></highlight></codeline>
-<codeline lineno="321" refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator" kindref="compound">Simulator</ref>(object):</highlight></codeline>
-<codeline lineno="322"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="323"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Simulator<sp/>class,<sp/>handles<sp/>the<sp/>interaction<sp/>and<sp/>update<sp/>of<sp/>all<sp/>vehicles<sp/>in<sp/>the<sp/>environment</highlight></codeline>
-<codeline lineno="324"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="325"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Data<sp/>Members:</highlight></codeline>
-<codeline lineno="326"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_agents<sp/>(int):<sp/>number<sp/>of<sp/>agents<sp/>in<sp/>the<sp/>environment</highlight></codeline>
-<codeline lineno="327"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>time_step<sp/>(float):<sp/>physics<sp/>time<sp/>step</highlight></codeline>
-<codeline lineno="328"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>agent_poses<sp/>(np.ndarray(num_agents,<sp/>3)):<sp/>all<sp/>poses<sp/>of<sp/>all<sp/>agents</highlight></codeline>
-<codeline lineno="329"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>agents<sp/>(list[RaceCar]):<sp/>container<sp/>for<sp/>RaceCar<sp/>objects</highlight></codeline>
-<codeline lineno="330"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collisions<sp/>(np.ndarray(num_agents,<sp/>)):<sp/>array<sp/>of<sp/>collision<sp/>indicator<sp/>for<sp/>each<sp/>agent</highlight></codeline>
-<codeline lineno="331"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collision_idx<sp/>(np.ndarray(num_agents,<sp/>)):<sp/>which<sp/>agent<sp/>is<sp/>each<sp/>agent<sp/>in<sp/>collision<sp/>with</highlight></codeline>
-<codeline lineno="332"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="333"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="334"><highlight class="normal"></highlight></codeline>
-<codeline lineno="335"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ab865873c6f0afa3741add4f39e5fd872" kindref="member">__init__</ref>(self,<sp/>params,<sp/>num_agents,<sp/>time_step=0.01,<sp/>ego_idx=0):</highlight></codeline>
-<codeline lineno="336"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="337"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Init<sp/>function</highlight></codeline>
-<codeline lineno="338"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="339"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="340"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>params<sp/>(dict):<sp/>vehicle<sp/>parameter<sp/>dictionary,<sp/>includes<sp/>{&apos;mu&apos;,<sp/>&apos;C_Sf&apos;,<sp/>&apos;C_Sr&apos;,<sp/>&apos;lf&apos;,<sp/>&apos;lr&apos;,<sp/>&apos;h&apos;,<sp/>&apos;m&apos;,<sp/>&apos;I&apos;,<sp/>&apos;s_min&apos;,<sp/>&apos;s_max&apos;,<sp/>&apos;sv_min&apos;,<sp/>&apos;sv_max&apos;,<sp/>&apos;v_switch&apos;,<sp/>&apos;a_max&apos;,<sp/>&apos;v_min&apos;,<sp/>&apos;v_max&apos;,<sp/>&apos;length&apos;,<sp/>&apos;width&apos;}</highlight></codeline>
-<codeline lineno="341"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_agents<sp/>(int):<sp/>number<sp/>of<sp/>agents<sp/>in<sp/>the<sp/>environment</highlight></codeline>
-<codeline lineno="342"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>time_step<sp/>(float,<sp/>default=0.01):<sp/>physics<sp/>time<sp/>step</highlight></codeline>
-<codeline lineno="343"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ego_idx<sp/>(int,<sp/>default=0):<sp/>ego<sp/>vehicle&apos;s<sp/>index<sp/>in<sp/>list<sp/>of<sp/>agents</highlight></codeline>
-<codeline lineno="344"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="345"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="346"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="347"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="348"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref><sp/>=<sp/>num_agents</highlight></codeline>
-<codeline lineno="349"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1aab539724143dd42fca12ec1d6043c984" kindref="member">time_step</ref><sp/>=<sp/>time_step</highlight></codeline>
-<codeline lineno="350"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a08fd902fa242da70c1bcf34a1fe80802" kindref="member">ego_idx</ref><sp/>=<sp/>ego_idx</highlight></codeline>
-<codeline lineno="351"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a877c852c32ff108df0ff6bfa2ab3bf6f" kindref="member">params</ref><sp/>=<sp/>params</highlight></codeline>
-<codeline lineno="352"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ade120757dde31d2130e4b0f9b01e3a7d" kindref="member">agent_poses</ref><sp/>=<sp/>np.empty((self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref>,<sp/>3))</highlight></codeline>
-<codeline lineno="353"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref><sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="354"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a2266104910535f06f31c1212e62fde8b" kindref="member">collisions</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref>,<sp/>))</highlight></codeline>
-<codeline lineno="355"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a5d716c6ccd3b649f407560f28bdcd84d" kindref="member">collision_idx</ref><sp/>=<sp/>-1<sp/>*<sp/>np.ones((self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref>,<sp/>))</highlight></codeline>
-<codeline lineno="356"><highlight class="normal"></highlight></codeline>
-<codeline lineno="357"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>initializing<sp/>agents</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="358"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref>):</highlight></codeline>
-<codeline lineno="359"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>i<sp/>==<sp/>ego_idx:</highlight></codeline>
-<codeline lineno="360"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ego_car<sp/>=<sp/><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car" kindref="compound">RaceCar</ref>(params,<sp/>is_ego=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="361"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>.append(ego_car)</highlight></codeline>
-<codeline lineno="362"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="363"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>agent<sp/>=<sp/><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car" kindref="compound">RaceCar</ref>(params)</highlight></codeline>
-<codeline lineno="364"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>.append(agent)</highlight></codeline>
-<codeline lineno="365"><highlight class="normal"></highlight></codeline>
-<codeline lineno="366"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a0a566351f20a16b7545fcd20ca9adb57" kindref="member">set_map</ref>(self,<sp/>map_path,<sp/>map_ext):</highlight></codeline>
-<codeline lineno="367"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="368"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Sets<sp/>the<sp/>map<sp/>of<sp/>the<sp/>environment<sp/>and<sp/>sets<sp/>the<sp/>map<sp/>for<sp/>scan<sp/>simulator<sp/>of<sp/>each<sp/>agent</highlight></codeline>
-<codeline lineno="369"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="370"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="371"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>(str):<sp/>path<sp/>to<sp/>the<sp/>map<sp/>yaml<sp/>file</highlight></codeline>
-<codeline lineno="372"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>(str):<sp/>extension<sp/>for<sp/>the<sp/>map<sp/>image<sp/>file</highlight></codeline>
-<codeline lineno="373"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="374"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="375"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="376"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="377"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>agent<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>:</highlight></codeline>
-<codeline lineno="378"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>agent.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="379"><highlight class="normal"></highlight></codeline>
-<codeline lineno="380"><highlight class="normal"></highlight></codeline>
-<codeline lineno="381"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a974c58957a6b14582149d704ef28a68c" kindref="member">update_params</ref>(self,<sp/>params,<sp/>agent_idx=-1):</highlight></codeline>
-<codeline lineno="382"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="383"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Updates<sp/>the<sp/>params<sp/>of<sp/>agents,<sp/>if<sp/>an<sp/>index<sp/>of<sp/>an<sp/>agent<sp/>is<sp/>given,<sp/>update<sp/>only<sp/>that<sp/>agent&apos;s<sp/>params</highlight></codeline>
-<codeline lineno="384"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="385"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="386"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>params<sp/>(dict):<sp/>dictionary<sp/>of<sp/>params,<sp/>see<sp/>details<sp/>in<sp/>docstring<sp/>of<sp/>__init__</highlight></codeline>
-<codeline lineno="387"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>agent_idx<sp/>(int,<sp/>default=-1):<sp/>index<sp/>for<sp/>agent<sp/>that<sp/>needs<sp/>param<sp/>update,<sp/>if<sp/>negative,<sp/>update<sp/>all<sp/>agents</highlight></codeline>
-<codeline lineno="388"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="389"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="390"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="391"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="392"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>agent_idx<sp/>&lt;<sp/>0:</highlight></codeline>
-<codeline lineno="393"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>params<sp/>for<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="394"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>agent<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>:</highlight></codeline>
-<codeline lineno="395"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>agent.update_params(params)</highlight></codeline>
-<codeline lineno="396"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>agent_idx<sp/>&gt;=<sp/>0<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>agent_idx<sp/>&lt;<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref>:</highlight></codeline>
-<codeline lineno="397"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>only<sp/>update<sp/>one<sp/>agent&apos;s<sp/>params</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="398"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>[agent_idx].<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a974c58957a6b14582149d704ef28a68c" kindref="member">update_params</ref>(params)</highlight></codeline>
-<codeline lineno="399"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="400"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>index<sp/>out<sp/>of<sp/>bounds,<sp/>throw<sp/>error</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="401"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">raise</highlight><highlight class="normal"><sp/>IndexError(</highlight><highlight class="stringliteral">&apos;Index<sp/>given<sp/>is<sp/>out<sp/>of<sp/>bounds<sp/>for<sp/>list<sp/>of<sp/>agents.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="402"><highlight class="normal"></highlight></codeline>
-<codeline lineno="403"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a7f32c68e14bf47447ce9599c8db21236" kindref="member">check_collision</ref>(self):</highlight></codeline>
-<codeline lineno="404"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="405"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Checks<sp/>for<sp/>collision<sp/>between<sp/>agents<sp/>using<sp/>GJK<sp/>and<sp/>agents&apos;<sp/>body<sp/>vertices</highlight></codeline>
-<codeline lineno="406"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="407"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="408"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="409"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="410"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="411"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="412"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="413"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>get<sp/>vertices<sp/>of<sp/>all<sp/>agents</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="414"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>all_vertices<sp/>=<sp/>np.empty((self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref>,<sp/>4,<sp/>2))</highlight></codeline>
-<codeline lineno="415"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref>):</highlight></codeline>
-<codeline lineno="416"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>all_vertices[i,<sp/>:,<sp/>:]<sp/>=<sp/>get_vertices(np.append(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>[i].state[0:2],self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>[i].state[4]),<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a877c852c32ff108df0ff6bfa2ab3bf6f" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;length&apos;</highlight><highlight class="normal">],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a877c852c32ff108df0ff6bfa2ab3bf6f" kindref="member">params</ref>[</highlight><highlight class="stringliteral">&apos;width&apos;</highlight><highlight class="normal">])</highlight></codeline>
-<codeline lineno="417"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a2266104910535f06f31c1212e62fde8b" kindref="member">collisions</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a5d716c6ccd3b649f407560f28bdcd84d" kindref="member">collision_idx</ref><sp/>=<sp/>collision_multiple(all_vertices)</highlight></codeline>
-<codeline lineno="418"><highlight class="normal"></highlight></codeline>
-<codeline lineno="419"><highlight class="normal"></highlight></codeline>
-<codeline lineno="420"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1af1fb175457362d7419301180b1b3b4c6" kindref="member">step</ref>(self,<sp/>control_inputs):</highlight></codeline>
-<codeline lineno="421"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="422"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Steps<sp/>the<sp/>simulation<sp/>environment</highlight></codeline>
-<codeline lineno="423"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="424"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="425"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>control_inputs<sp/>(np.ndarray<sp/>(num_agents,<sp/>2)):<sp/>control<sp/>inputs<sp/>of<sp/>all<sp/>agents,<sp/>first<sp/>column<sp/>is<sp/>desired<sp/>steering<sp/>angle,<sp/>second<sp/>column<sp/>is<sp/>desired<sp/>velocity</highlight></codeline>
-<codeline lineno="426"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="427"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="428"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations<sp/>(dict):<sp/>dictionary<sp/>for<sp/>observations:<sp/>poses<sp/>of<sp/>agents,<sp/>current<sp/>laser<sp/>scan<sp/>of<sp/>each<sp/>agent,<sp/>collision<sp/>indicators,<sp/>etc.</highlight></codeline>
-<codeline lineno="429"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="430"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="431"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>looping<sp/>over<sp/>agents</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="432"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i,<sp/>agent<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>enumerate(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>):</highlight></codeline>
-<codeline lineno="433"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>each<sp/>agent&apos;s<sp/>pose</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="434"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>agent.update_pose(control_inputs[i,<sp/>0],<sp/>control_inputs[i,<sp/>1])</highlight></codeline>
-<codeline lineno="435"><highlight class="normal"></highlight></codeline>
-<codeline lineno="436"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>sim&apos;s<sp/>information<sp/>of<sp/>agent<sp/>poses</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="437"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ade120757dde31d2130e4b0f9b01e3a7d" kindref="member">agent_poses</ref>[i,<sp/>:]<sp/>=<sp/>np.append(agent.state[0:2],<sp/>agent.state[4])</highlight></codeline>
-<codeline lineno="438"><highlight class="normal"></highlight></codeline>
-<codeline lineno="439"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>check<sp/>collisions<sp/>between<sp/>all<sp/>agents</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="440"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a7f32c68e14bf47447ce9599c8db21236" kindref="member">check_collision</ref>()</highlight></codeline>
-<codeline lineno="441"><highlight class="normal"></highlight></codeline>
-<codeline lineno="442"><highlight class="normal"></highlight></codeline>
-<codeline lineno="443"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i,<sp/>agent<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>enumerate(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>):</highlight></codeline>
-<codeline lineno="444"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>agent&apos;s<sp/>information<sp/>on<sp/>other<sp/>agents</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="445"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>opp_poses<sp/>=<sp/>np.concatenate((self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ade120757dde31d2130e4b0f9b01e3a7d" kindref="member">agent_poses</ref>[0:i,<sp/>:],<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ade120757dde31d2130e4b0f9b01e3a7d" kindref="member">agent_poses</ref>[i+1:,<sp/>:]),<sp/>axis=0)</highlight></codeline>
-<codeline lineno="446"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>agent.update_opp_poses(opp_poses)</highlight></codeline>
-<codeline lineno="447"><highlight class="normal"></highlight></codeline>
-<codeline lineno="448"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>each<sp/>agent&apos;s<sp/>current<sp/>scan<sp/>based<sp/>on<sp/>other<sp/>agents</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="449"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>agent.update_scan()</highlight></codeline>
-<codeline lineno="450"><highlight class="normal"></highlight></codeline>
-<codeline lineno="451"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>agent<sp/>collision<sp/>with<sp/>environment</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="452"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>agent.in_collision:</highlight></codeline>
-<codeline lineno="453"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a2266104910535f06f31c1212e62fde8b" kindref="member">collisions</ref>[i]<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="454"><highlight class="normal"></highlight></codeline>
-<codeline lineno="455"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>fill<sp/>in<sp/>observations</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="456"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>state<sp/>is<sp/>[x,<sp/>y,<sp/>steer_angle,<sp/>vel,<sp/>yaw_angle,<sp/>yaw_rate,<sp/>slip_angle]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="457"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>collision_angles<sp/>is<sp/>removed<sp/>from<sp/>observations</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="458"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations<sp/>=<sp/>{</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">:<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a08fd902fa242da70c1bcf34a1fe80802" kindref="member">ego_idx</ref>,</highlight></codeline>
-<codeline lineno="459"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&apos;scans&apos;</highlight><highlight class="normal">:<sp/>[],</highlight></codeline>
-<codeline lineno="460"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&apos;poses_x&apos;</highlight><highlight class="normal">:<sp/>[],</highlight></codeline>
-<codeline lineno="461"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&apos;poses_y&apos;</highlight><highlight class="normal">:<sp/>[],</highlight></codeline>
-<codeline lineno="462"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&apos;poses_theta&apos;</highlight><highlight class="normal">:<sp/>[],</highlight></codeline>
-<codeline lineno="463"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&apos;linear_vels_x&apos;</highlight><highlight class="normal">:<sp/>[],</highlight></codeline>
-<codeline lineno="464"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&apos;linear_vels_y&apos;</highlight><highlight class="normal">:<sp/>[],</highlight></codeline>
-<codeline lineno="465"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&apos;ang_vels_z&apos;</highlight><highlight class="normal">:<sp/>[],</highlight></codeline>
-<codeline lineno="466"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&apos;collisions&apos;</highlight><highlight class="normal">:<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a2266104910535f06f31c1212e62fde8b" kindref="member">collisions</ref>}</highlight></codeline>
-<codeline lineno="467"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>agent<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>:</highlight></codeline>
-<codeline lineno="468"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations[</highlight><highlight class="stringliteral">&apos;scans&apos;</highlight><highlight class="normal">].append(agent.current_scan)</highlight></codeline>
-<codeline lineno="469"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations[</highlight><highlight class="stringliteral">&apos;poses_x&apos;</highlight><highlight class="normal">].append(agent.state[0])</highlight></codeline>
-<codeline lineno="470"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations[</highlight><highlight class="stringliteral">&apos;poses_y&apos;</highlight><highlight class="normal">].append(agent.state[1])</highlight></codeline>
-<codeline lineno="471"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations[</highlight><highlight class="stringliteral">&apos;poses_theta&apos;</highlight><highlight class="normal">].append(agent.state[4])</highlight></codeline>
-<codeline lineno="472"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations[</highlight><highlight class="stringliteral">&apos;linear_vels_x&apos;</highlight><highlight class="normal">].append(agent.state[3])</highlight></codeline>
-<codeline lineno="473"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations[</highlight><highlight class="stringliteral">&apos;linear_vels_y&apos;</highlight><highlight class="normal">].append(0.)</highlight></codeline>
-<codeline lineno="474"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations[</highlight><highlight class="stringliteral">&apos;ang_vels_z&apos;</highlight><highlight class="normal">].append(agent.state[5])</highlight></codeline>
-<codeline lineno="475"><highlight class="normal"></highlight></codeline>
-<codeline lineno="476"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>observations</highlight></codeline>
-<codeline lineno="477"><highlight class="normal"></highlight></codeline>
-<codeline lineno="478"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ab63c655ff0cd1bb2accce7be9fff69e8" kindref="member">reset</ref>(self,<sp/>poses):</highlight></codeline>
-<codeline lineno="479"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="480"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Resets<sp/>the<sp/>simulation<sp/>environment<sp/>by<sp/>given<sp/>poses</highlight></codeline>
-<codeline lineno="481"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="482"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Arges:</highlight></codeline>
-<codeline lineno="483"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses<sp/>(np.ndarray<sp/>(num_agents,<sp/>3)):<sp/>poses<sp/>to<sp/>reset<sp/>agents<sp/>to</highlight></codeline>
-<codeline lineno="484"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="485"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="486"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="487"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="488"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="489"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>poses.shape[0]<sp/>!=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref>:</highlight></codeline>
-<codeline lineno="490"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">raise</highlight><highlight class="normal"><sp/>ValueError(</highlight><highlight class="stringliteral">&apos;Number<sp/>of<sp/>poses<sp/>for<sp/>reset<sp/>does<sp/>not<sp/>match<sp/>number<sp/>of<sp/>agents.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="491"><highlight class="normal"></highlight></codeline>
-<codeline lineno="492"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>loop<sp/>over<sp/>poses<sp/>to<sp/>reset</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="493"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kindref="member">num_agents</ref>):</highlight></codeline>
-<codeline lineno="494"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kindref="member">agents</ref>[i].<ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ab63c655ff0cd1bb2accce7be9fff69e8" kindref="member">reset</ref>(poses[i,<sp/>:])</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.xml b/docs/xml/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.xml
deleted file mode 100644
index 905e3309..00000000
--- a/docs/xml/classf110__gym_1_1envs_1_1base__classes_1_1_race_car.xml
+++ /dev/null
@@ -1,603 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::envs::base_classes::RaceCar</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">object</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::params</definition>
-        <argsstring></argsstring>
-        <name>params</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="72" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="72" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5408c25f5507645e351b33c7b93d09e9" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::is_ego</definition>
-        <argsstring></argsstring>
-        <name>is_ego</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="73" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="73" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a507e48bfae2cd153ce988acfa915f4e3" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::time_step</definition>
-        <argsstring></argsstring>
-        <name>time_step</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="74" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="74" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a32283ca467927cb92fd4cebaf4572788" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::num_beams</definition>
-        <argsstring></argsstring>
-        <name>num_beams</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="75" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="75" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1ab17edc5d7143043b17160ce593da0e05" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::fov</definition>
-        <argsstring></argsstring>
-        <name>fov</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="76" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="76" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::state</definition>
-        <argsstring></argsstring>
-        <name>state</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="79" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="79" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a3dc163d182be2760a4f8322417fd2332" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::opp_poses</definition>
-        <argsstring></argsstring>
-        <name>opp_poses</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="82" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="82" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5f298f55e8dc14fb39e5145699e90bfa" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::accel</definition>
-        <argsstring></argsstring>
-        <name>accel</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="85" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="85" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5a1dbcba00b5c54afc700873df015eba" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::steer_angle_vel</definition>
-        <argsstring></argsstring>
-        <name>steer_angle_vel</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="86" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="86" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::steer_buffer</definition>
-        <argsstring></argsstring>
-        <name>steer_buffer</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="89" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="89" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a51405046f30a27487241455cb51481ff" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::steer_buffer_size</definition>
-        <argsstring></argsstring>
-        <name>steer_buffer_size</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="90" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="90" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a04ac46193f2706b71aa6ccc616484a1b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::in_collision</definition>
-        <argsstring></argsstring>
-        <name>in_collision</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="93" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="93" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5eb8a1fa8d27dfccd008573e2d720c44" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::ttc_thresh</definition>
-        <argsstring></argsstring>
-        <name>ttc_thresh</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="96" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="96" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a35674ca4c4a0eda359249216bee094b3" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::scan_simulator</definition>
-        <argsstring></argsstring>
-        <name>scan_simulator</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="99" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="99" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aeaedd3e39c14a7904e8417ad264b3168" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::current_scan</definition>
-        <argsstring></argsstring>
-        <name>current_scan</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="103" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="103" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a47e2229884b30c3640f75cc46a4b1fe9" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::cosines</definition>
-        <argsstring></argsstring>
-        <name>cosines</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="106" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="106" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7a416feebdc5bf3289495877a722ac5e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::scan_angles</definition>
-        <argsstring></argsstring>
-        <name>scan_angles</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="107" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="107" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a45934ce2c731e21cee3b3890d5713a1e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.RaceCar::side_distances</definition>
-        <argsstring></argsstring>
-        <name>side_distances</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="108" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="108" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af342754a877c42b3828a03b6425801d4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.RaceCar.__init__</definition>
-        <argsstring>(self, params, is_ego=False, time_step=0.01, num_beams=1080, fov=4.7)</argsstring>
-        <name>__init__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>params</type>
-          <defname>params</defname>
-        </param>
-        <param>
-          <type>is_ego</type>
-          <defname>is_ego</defname>
-          <defval>False</defval>
-        </param>
-        <param>
-          <type>time_step</type>
-          <defname>time_step</defname>
-          <defval>0.01</defval>
-        </param>
-        <param>
-          <type>num_beams</type>
-          <defname>num_beams</defname>
-          <defval>1080</defval>
-        </param>
-        <param>
-          <type>fov</type>
-          <defname>fov</defname>
-          <defval>4.7</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Init function
-
-Args:
-    params (dict): vehicle parameter dictionary, includes {&apos;mu&apos;, &apos;C_Sf&apos;, &apos;C_Sr&apos;, &apos;lf&apos;, &apos;lr&apos;, &apos;h&apos;, &apos;m&apos;, &apos;I&apos;, &apos;s_min&apos;, &apos;s_max&apos;, &apos;sv_min&apos;, &apos;sv_max&apos;, &apos;v_switch&apos;, &apos;a_max&apos;: 9.51, &apos;v_min&apos;, &apos;v_max&apos;, &apos;length&apos;, &apos;width&apos;}
-    is_ego (bool, default=False): ego identifier
-    time_step (float, default=0.01): physics sim time step
-    num_beams (int, default=1080): number of beams in the laser scan
-    fov (float, default=4.7): field of view of the laser
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="56" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="56" bodyend="140"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a6ab5b5dd420b182b5156ee9566c03411" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.RaceCar.update_params</definition>
-        <argsstring>(self, params)</argsstring>
-        <name>update_params</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>params</type>
-          <defname>params</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Updates the physical parameters of the vehicle
-Note that does not need to be called at initialization of class anymore
-
-Args:
-    params (dict): new parameters for the vehicle
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="141" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="141" bodyend="153"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a2a60c9ee34f2f09fb0a7e5cc7b287897" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.RaceCar.set_map</definition>
-        <argsstring>(self, map_path, map_ext)</argsstring>
-        <name>set_map</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>map_path</type>
-          <defname>map_path</defname>
-        </param>
-        <param>
-          <type>map_ext</type>
-          <defname>map_ext</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Sets the map for scan simulator
-
-Args:
-    map_path (str): absolute path to the map yaml file
-    map_ext (str): extension of the map image file
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="154" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="154" bodyend="163"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a0fa587dc3c1a12c9217f0bd093c1bc08" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.RaceCar.reset</definition>
-        <argsstring>(self, pose)</argsstring>
-        <name>reset</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Resets the vehicle to a pose
-
-Args:
-    pose (np.ndarray (3, )): pose to reset the vehicle to
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="164" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="164" bodyend="183"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7d15e74a1b82646675d60ce02cdce6b5" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.RaceCar.ray_cast_agents</definition>
-        <argsstring>(self, scan)</argsstring>
-        <name>ray_cast_agents</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>scan</type>
-          <defname>scan</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Ray cast onto other agents in the env, modify original scan
-
-Args:
-    scan (np.ndarray, (n, )): original scan range array
-
-Returns:
-    new_scan (np.ndarray, (n, )): modified scan
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="184" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="184" bodyend="205"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a4577a30fd8879de7df1d0ace7702f450" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.RaceCar.check_ttc</definition>
-        <argsstring>(self)</argsstring>
-        <name>check_ttc</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Check iTTC against the environment, sets vehicle states accordingly if collision occurs.
-Note that this does NOT check collision with other agents.
-
-state is [x, y, steer_angle, vel, yaw_angle, yaw_rate, slip_angle]
-
-Args:
-    None
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="206" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="206" bodyend="232"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1ae12c14c1353e6aab2f72036593d85518" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.RaceCar.update_pose</definition>
-        <argsstring>(self, raw_steer, vel)</argsstring>
-        <name>update_pose</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>raw_steer</type>
-          <defname>raw_steer</defname>
-        </param>
-        <param>
-          <type>vel</type>
-          <defname>vel</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Steps the vehicle&apos;s physical simulation
-
-Args:
-    steer (float): desired steering angle
-    vel (float): desired longitudinal velocity
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="233" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="233" bodyend="287"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a4800c5ac90ba93b79a0338e5e34ead43" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.RaceCar.update_opp_poses</definition>
-        <argsstring>(self, opp_poses)</argsstring>
-        <name>update_opp_poses</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>opp_poses</type>
-          <defname>opp_poses</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Updates the vehicle&apos;s information on other vehicles
-
-Args:
-    opp_poses (np.ndarray(num_other_agents, 3)): updated poses of other agents
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="288" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="288" bodyend="300"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a356ec05a0a0c056f4d43f5fb0451c83d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.RaceCar.update_scan</definition>
-        <argsstring>(self)</argsstring>
-        <name>update_scan</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Steps the vehicle&apos;s laser scan simulation
-Separated from update_pose because needs to update scan based on NEW poses of agents in the environment
-
-Args:
-    None
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="301" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="301" bodyend="320"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-<para><verbatim>Base level race car class, handles the physics and laser scan of a single vehicle
-
-Data Members:
-    params (dict): vehicle parameters dictionary
-    is_ego (bool): ego identifier
-    time_step (float): physics timestep
-    num_beams (int): number of beams in laser
-    fov (float): field of view of laser
-    state (np.ndarray (7, )): state vector [x, y, theta, vel, steer_angle, ang_vel, slip_angle]
-    odom (np.ndarray(13, )): odometry vector [x, y, z, qx, qy, qz, qw, linear_x, linear_y, linear_z, angular_x, angular_y, angular_z]
-    accel (float): current acceleration input
-    steer_angle_vel (float): current steering velocity input
-    in_collision (bool): collision indicator</verbatim> </para>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.envs.base_classes.RaceCar</label>
-        <link refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>object</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.envs.base_classes.RaceCar</label>
-        <link refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>object</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="38" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="38" bodyend="321"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af342754a877c42b3828a03b6425801d4" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5f298f55e8dc14fb39e5145699e90bfa" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>accel</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a4577a30fd8879de7df1d0ace7702f450" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>check_ttc</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a47e2229884b30c3640f75cc46a4b1fe9" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>cosines</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aeaedd3e39c14a7904e8417ad264b3168" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>current_scan</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1ab17edc5d7143043b17160ce593da0e05" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>fov</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a04ac46193f2706b71aa6ccc616484a1b" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>in_collision</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5408c25f5507645e351b33c7b93d09e9" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>is_ego</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a32283ca467927cb92fd4cebaf4572788" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>num_beams</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a3dc163d182be2760a4f8322417fd2332" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>opp_poses</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>params</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7d15e74a1b82646675d60ce02cdce6b5" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>ray_cast_agents</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a0fa587dc3c1a12c9217f0bd093c1bc08" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>reset</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7a416feebdc5bf3289495877a722ac5e" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>scan_angles</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a35674ca4c4a0eda359249216bee094b3" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>scan_simulator</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a2a60c9ee34f2f09fb0a7e5cc7b287897" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>set_map</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a45934ce2c731e21cee3b3890d5713a1e" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>side_distances</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>state</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5a1dbcba00b5c54afc700873df015eba" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>steer_angle_vel</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>steer_buffer</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a51405046f30a27487241455cb51481ff" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>steer_buffer_size</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a507e48bfae2cd153ce988acfa915f4e3" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>time_step</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5eb8a1fa8d27dfccd008573e2d720c44" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>ttc_thresh</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a4800c5ac90ba93b79a0338e5e34ead43" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>update_opp_poses</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a6ab5b5dd420b182b5156ee9566c03411" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>update_params</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1ae12c14c1353e6aab2f72036593d85518" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>update_pose</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a356ec05a0a0c056f4d43f5fb0451c83d" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::RaceCar</scope><name>update_scan</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.xml b/docs/xml/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.xml
deleted file mode 100644
index 89325519..00000000
--- a/docs/xml/classf110__gym_1_1envs_1_1base__classes_1_1_simulator.xml
+++ /dev/null
@@ -1,365 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::envs::base_classes::Simulator</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">object</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.Simulator::num_agents</definition>
-        <argsstring></argsstring>
-        <name>num_agents</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="348" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="348" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1aab539724143dd42fca12ec1d6043c984" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.Simulator::time_step</definition>
-        <argsstring></argsstring>
-        <name>time_step</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="349" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="349" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a08fd902fa242da70c1bcf34a1fe80802" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.Simulator::ego_idx</definition>
-        <argsstring></argsstring>
-        <name>ego_idx</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="350" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="350" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a877c852c32ff108df0ff6bfa2ab3bf6f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.Simulator::params</definition>
-        <argsstring></argsstring>
-        <name>params</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="351" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="351" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ade120757dde31d2130e4b0f9b01e3a7d" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.Simulator::agent_poses</definition>
-        <argsstring></argsstring>
-        <name>agent_poses</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="352" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="352" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.Simulator::agents</definition>
-        <argsstring></argsstring>
-        <name>agents</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="353" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="353" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a2266104910535f06f31c1212e62fde8b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.Simulator::collisions</definition>
-        <argsstring></argsstring>
-        <name>collisions</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="354" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="354" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a5d716c6ccd3b649f407560f28bdcd84d" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.base_classes.Simulator::collision_idx</definition>
-        <argsstring></argsstring>
-        <name>collision_idx</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="355" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="355" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ab865873c6f0afa3741add4f39e5fd872" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.Simulator.__init__</definition>
-        <argsstring>(self, params, num_agents, time_step=0.01, ego_idx=0)</argsstring>
-        <name>__init__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>params</type>
-          <defname>params</defname>
-        </param>
-        <param>
-          <type>num_agents</type>
-          <defname>num_agents</defname>
-        </param>
-        <param>
-          <type>time_step</type>
-          <defname>time_step</defname>
-          <defval>0.01</defval>
-        </param>
-        <param>
-          <type>ego_idx</type>
-          <defname>ego_idx</defname>
-          <defval>0</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Init function
-
-Args:
-    params (dict): vehicle parameter dictionary, includes {&apos;mu&apos;, &apos;C_Sf&apos;, &apos;C_Sr&apos;, &apos;lf&apos;, &apos;lr&apos;, &apos;h&apos;, &apos;m&apos;, &apos;I&apos;, &apos;s_min&apos;, &apos;s_max&apos;, &apos;sv_min&apos;, &apos;sv_max&apos;, &apos;v_switch&apos;, &apos;a_max&apos;, &apos;v_min&apos;, &apos;v_max&apos;, &apos;length&apos;, &apos;width&apos;}
-    num_agents (int): number of agents in the environment
-    time_step (float, default=0.01): physics time step
-    ego_idx (int, default=0): ego vehicle&apos;s index in list of agents
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="335" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="335" bodyend="365"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a0a566351f20a16b7545fcd20ca9adb57" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.Simulator.set_map</definition>
-        <argsstring>(self, map_path, map_ext)</argsstring>
-        <name>set_map</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>map_path</type>
-          <defname>map_path</defname>
-        </param>
-        <param>
-          <type>map_ext</type>
-          <defname>map_ext</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Sets the map of the environment and sets the map for scan simulator of each agent
-
-Args:
-    map_path (str): path to the map yaml file
-    map_ext (str): extension for the map image file
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="366" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="366" bodyend="380"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a974c58957a6b14582149d704ef28a68c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.Simulator.update_params</definition>
-        <argsstring>(self, params, agent_idx=-1)</argsstring>
-        <name>update_params</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>params</type>
-          <defname>params</defname>
-        </param>
-        <param>
-          <type>agent_idx</type>
-          <defname>agent_idx</defname>
-          <defval>-1</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Updates the params of agents, if an index of an agent is given, update only that agent&apos;s params
-
-Args:
-    params (dict): dictionary of params, see details in docstring of __init__
-    agent_idx (int, default=-1): index for agent that needs param update, if negative, update all agents
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="381" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="381" bodyend="402"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a7f32c68e14bf47447ce9599c8db21236" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.Simulator.check_collision</definition>
-        <argsstring>(self)</argsstring>
-        <name>check_collision</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Checks for collision between agents using GJK and agents&apos; body vertices
-
-Args:
-    None
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="403" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="403" bodyend="419"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1af1fb175457362d7419301180b1b3b4c6" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.Simulator.step</definition>
-        <argsstring>(self, control_inputs)</argsstring>
-        <name>step</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>control_inputs</type>
-          <defname>control_inputs</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Steps the simulation environment
-
-Args:
-    control_inputs (np.ndarray (num_agents, 2)): control inputs of all agents, first column is desired steering angle, second column is desired velocity
-
-Returns:
-    observations (dict): dictionary for observations: poses of agents, current laser scan of each agent, collision indicators, etc.
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="420" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="420" bodyend="477"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ab63c655ff0cd1bb2accce7be9fff69e8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.base_classes.Simulator.reset</definition>
-        <argsstring>(self, poses)</argsstring>
-        <name>reset</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>poses</type>
-          <defname>poses</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Resets the simulation environment by given poses
-
-Arges:
-    poses (np.ndarray (num_agents, 3)): poses to reset agents to
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="478" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="478" bodyend="494"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-<para><verbatim>Simulator class, handles the interaction and update of all vehicles in the environment
-
-Data Members:
-    num_agents (int): number of agents in the environment
-    time_step (float): physics time step
-    agent_poses (np.ndarray(num_agents, 3)): all poses of all agents
-    agents (list[RaceCar]): container for RaceCar objects
-    collisions (np.ndarray(num_agents, )): array of collision indicator for each agent
-    collision_idx (np.ndarray(num_agents, )): which agent is each agent in collision with</verbatim> </para>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.envs.base_classes.Simulator</label>
-        <link refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>object</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.envs.base_classes.Simulator</label>
-        <link refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>object</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="321" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" bodystart="321" bodyend="494"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ab865873c6f0afa3741add4f39e5fd872" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ade120757dde31d2130e4b0f9b01e3a7d" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>agent_poses</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>agents</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a7f32c68e14bf47447ce9599c8db21236" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>check_collision</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a5d716c6ccd3b649f407560f28bdcd84d" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>collision_idx</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a2266104910535f06f31c1212e62fde8b" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>collisions</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a08fd902fa242da70c1bcf34a1fe80802" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>ego_idx</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>num_agents</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a877c852c32ff108df0ff6bfa2ab3bf6f" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>params</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ab63c655ff0cd1bb2accce7be9fff69e8" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>reset</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a0a566351f20a16b7545fcd20ca9adb57" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>set_map</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1af1fb175457362d7419301180b1b3b4c6" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>step</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1aab539724143dd42fca12ec1d6043c984" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>time_step</name></member>
-      <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a974c58957a6b14582149d704ef28a68c" prot="public" virt="non-virtual"><scope>f110_gym::envs::base_classes::Simulator</scope><name>update_params</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.xml b/docs/xml/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.xml
deleted file mode 100644
index e34072f7..00000000
--- a/docs/xml/classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::envs::collision_models::CollisionTests</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">TestCase</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.collision_models.CollisionTests::vertices1</definition>
-        <argsstring></argsstring>
-        <name>vertices1</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="277" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="277" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a9cbff98529b08cc1cd52b56ba407e55e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.collision_models.CollisionTests::length</definition>
-        <argsstring></argsstring>
-        <name>length</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="280" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="280" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a00391f07693559253e82dbbe849da73e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.collision_models.CollisionTests::width</definition>
-        <argsstring></argsstring>
-        <name>width</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="281" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="281" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a4aa54131afe81f4a6790930e7d5a639e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.CollisionTests.setUp</definition>
-        <argsstring>(self)</argsstring>
-        <name>setUp</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="272" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="272" bodyend="282"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a3137d9576fd99c1f56980a6cc61dc58f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.CollisionTests.test_get_vert</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_get_vert</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="283" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="283" bodyend="295"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a588513dfce9c9c7843f2aef501e993f1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.CollisionTests.test_get_vert_fps</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_get_vert_fps</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="296" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="296" bodyend="305"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a484c3bfdab68d8ff8d298191a0cfdd4b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.CollisionTests.test_random_collision</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_random_collision</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="306" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="306" bodyend="312"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1af59482dbded9f1f915e666553316855d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.CollisionTests.test_multiple_collisions</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_multiple_collisions</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="313" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="313" bodyend="325"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a95425d03ea60792f2e523f3838ee9928" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.CollisionTests.test_fps</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_fps</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="326" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="326" bodyend="337"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.envs.collision_models.CollisionTests</label>
-        <link refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.envs.collision_models.CollisionTests</label>
-        <link refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="271" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="271" bodyend="338"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a9cbff98529b08cc1cd52b56ba407e55e" prot="public" virt="non-virtual"><scope>f110_gym::envs::collision_models::CollisionTests</scope><name>length</name></member>
-      <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a4aa54131afe81f4a6790930e7d5a639e" prot="public" virt="non-virtual"><scope>f110_gym::envs::collision_models::CollisionTests</scope><name>setUp</name></member>
-      <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a95425d03ea60792f2e523f3838ee9928" prot="public" virt="non-virtual"><scope>f110_gym::envs::collision_models::CollisionTests</scope><name>test_fps</name></member>
-      <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a3137d9576fd99c1f56980a6cc61dc58f" prot="public" virt="non-virtual"><scope>f110_gym::envs::collision_models::CollisionTests</scope><name>test_get_vert</name></member>
-      <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a588513dfce9c9c7843f2aef501e993f1" prot="public" virt="non-virtual"><scope>f110_gym::envs::collision_models::CollisionTests</scope><name>test_get_vert_fps</name></member>
-      <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1af59482dbded9f1f915e666553316855d" prot="public" virt="non-virtual"><scope>f110_gym::envs::collision_models::CollisionTests</scope><name>test_multiple_collisions</name></member>
-      <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a484c3bfdab68d8ff8d298191a0cfdd4b" prot="public" virt="non-virtual"><scope>f110_gym::envs::collision_models::CollisionTests</scope><name>test_random_collision</name></member>
-      <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" prot="public" virt="non-virtual"><scope>f110_gym::envs::collision_models::CollisionTests</scope><name>vertices1</name></member>
-      <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a00391f07693559253e82dbbe849da73e" prot="public" virt="non-virtual"><scope>f110_gym::envs::collision_models::CollisionTests</scope><name>width</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.xml b/docs/xml/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.xml
deleted file mode 100644
index 5487daf6..00000000
--- a/docs/xml/classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test.xml
+++ /dev/null
@@ -1,372 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::envs::dynamic_models::DynamicsTest</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">TestCase</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::mu</definition>
-        <argsstring></argsstring>
-        <name>mu</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="234" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="234" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::C_Sf</definition>
-        <argsstring></argsstring>
-        <name>C_Sf</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="235" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="235" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::C_Sr</definition>
-        <argsstring></argsstring>
-        <name>C_Sr</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="236" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="236" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::lf</definition>
-        <argsstring></argsstring>
-        <name>lf</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="237" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="237" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::lr</definition>
-        <argsstring></argsstring>
-        <name>lr</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="238" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="238" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::h</definition>
-        <argsstring></argsstring>
-        <name>h</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="239" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="239" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::m</definition>
-        <argsstring></argsstring>
-        <name>m</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="240" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="240" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::I</definition>
-        <argsstring></argsstring>
-        <name>I</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="241" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="241" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::s_min</definition>
-        <argsstring></argsstring>
-        <name>s_min</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="244" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="244" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::s_max</definition>
-        <argsstring></argsstring>
-        <name>s_max</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="245" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="245" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::sv_min</definition>
-        <argsstring></argsstring>
-        <name>sv_min</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="246" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="246" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::sv_max</definition>
-        <argsstring></argsstring>
-        <name>sv_max</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="247" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="247" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::v_min</definition>
-        <argsstring></argsstring>
-        <name>v_min</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="250" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="250" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::v_max</definition>
-        <argsstring></argsstring>
-        <name>v_max</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="251" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="251" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::v_switch</definition>
-        <argsstring></argsstring>
-        <name>v_switch</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="252" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="252" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.dynamic_models.DynamicsTest::a_max</definition>
-        <argsstring></argsstring>
-        <name>a_max</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="253" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="253" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef057974425be84e5672fec6367237b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.DynamicsTest.setUp</definition>
-        <argsstring>(self)</argsstring>
-        <name>setUp</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="232" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="232" bodyend="254"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8d72833c7e5cf3717a4326ee6809c527" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.DynamicsTest.test_derivatives</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_derivatives</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="255" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="255" bodyend="280"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a00e95bc713471556c1d5f62c70d50f78" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.DynamicsTest.test_zeroinit_roll</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_zeroinit_roll</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="281" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="281" bodyend="312"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee6c565405df1ec196e88d5ca42238cd" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.DynamicsTest.test_zeroinit_dec</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_zeroinit_dec</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="313" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="313" bodyend="349"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abfdac96452f8e54e0233b68626cf33bf" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.DynamicsTest.test_zeroinit_acc</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_zeroinit_acc</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="350" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="350" bodyend="387"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3e47a38cf845b941eea719550bcc1994" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.DynamicsTest.test_zeroinit_rollleft</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_zeroinit_rollleft</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="388" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="388" bodyend="424"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.envs.dynamic_models.DynamicsTest</label>
-        <link refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.envs.dynamic_models.DynamicsTest</label>
-        <link refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="231" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="231" bodyend="425"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>a_max</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>C_Sf</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>C_Sr</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>h</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>I</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>lf</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>lr</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>m</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>mu</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>s_max</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>s_min</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef057974425be84e5672fec6367237b" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>setUp</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>sv_max</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>sv_min</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8d72833c7e5cf3717a4326ee6809c527" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>test_derivatives</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abfdac96452f8e54e0233b68626cf33bf" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>test_zeroinit_acc</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee6c565405df1ec196e88d5ca42238cd" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>test_zeroinit_dec</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a00e95bc713471556c1d5f62c70d50f78" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>test_zeroinit_roll</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3e47a38cf845b941eea719550bcc1994" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>test_zeroinit_rollleft</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>v_max</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>v_min</name></member>
-      <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" prot="public" virt="non-virtual"><scope>f110_gym::envs::dynamic_models::DynamicsTest</scope><name>v_switch</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.xml b/docs/xml/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.xml
deleted file mode 100644
index 2f611488..00000000
--- a/docs/xml/classf110__gym_1_1envs_1_1f110__env_1_1_f110_env.xml
+++ /dev/null
@@ -1,741 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::envs::f110_env::F110Env</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">Env</basecompoundref>
-    <basecompoundref prot="public" virt="non-virtual">EzPickle</basecompoundref>
-      <sectiondef kind="public-static-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aee31e18855f6a73aa5051d7e4d693aa8" prot="public" static="yes" mutable="no">
-        <type>dictionary</type>
-        <definition>dictionary f110_gym.envs.f110_env.F110Env::metadata</definition>
-        <argsstring></argsstring>
-        <name>metadata</name>
-        <initializer>=  {&apos;render.modes&apos;: [&apos;human&apos;, &apos;human_fast&apos;]}</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="93" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="93" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbb8c9dad98bbad696936dec9633939" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::map_name</definition>
-        <argsstring></argsstring>
-        <name>map_name</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="102" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="102" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a584bf97317bbe8d38d8e0136753ded60" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::map_path</definition>
-        <argsstring></argsstring>
-        <name>map_path</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="105" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="105" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a147cde741845fcded400365a9d495ce3" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::map_ext</definition>
-        <argsstring></argsstring>
-        <name>map_ext</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="116" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="116" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab1c1a4b9cb08b685c597b1d40402a479" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::params</definition>
-        <argsstring></argsstring>
-        <name>params</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="121" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="121" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::num_agents</definition>
-        <argsstring></argsstring>
-        <name>num_agents</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="127" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="127" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1abdc8699b0f8fb2412efef070affa8ccb" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::timestep</definition>
-        <argsstring></argsstring>
-        <name>timestep</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="132" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="132" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aebce8c6c42f258d8c561da27dde0c01b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::ego_idx</definition>
-        <argsstring></argsstring>
-        <name>ego_idx</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="138" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="138" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a2496c3576ebb86df560fb09004583527" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::start_thresh</definition>
-        <argsstring></argsstring>
-        <name>start_thresh</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="143" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="143" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae83c6ed936fe9e1a542be6b2eb76395c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::poses_x</definition>
-        <argsstring></argsstring>
-        <name>poses_x</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="146" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="146" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a03432e028beff28596178dc9236fc4e8" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::poses_y</definition>
-        <argsstring></argsstring>
-        <name>poses_y</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="147" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="147" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a3ffb6fa7e705c18d5316444488cb649b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::poses_theta</definition>
-        <argsstring></argsstring>
-        <name>poses_theta</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="148" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="148" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ada1a8cc0681447645b811448f516885a" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::collisions</definition>
-        <argsstring></argsstring>
-        <name>collisions</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="149" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="149" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc0a35ce8ff234279acffc66092d72a1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::near_start</definition>
-        <argsstring></argsstring>
-        <name>near_start</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="154" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="154" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6c19f5c3146fa6be496639ab4ed0d63f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::num_toggles</definition>
-        <argsstring></argsstring>
-        <name>num_toggles</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="155" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="155" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a83f64f867c24f12d9ad3e14745e23aa1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::lap_times</definition>
-        <argsstring></argsstring>
-        <name>lap_times</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="158" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="158" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a0b2cc3bd151748987c6e23f34f16d1a2" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::lap_counts</definition>
-        <argsstring></argsstring>
-        <name>lap_counts</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="159" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="159" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6539fde56adcb5755acfe1c86251f193" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::current_time</definition>
-        <argsstring></argsstring>
-        <name>current_time</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="160" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="160" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a24602450e500c08f3190672922de25de" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::near_starts</definition>
-        <argsstring></argsstring>
-        <name>near_starts</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="165" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="165" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a45f4f52ca91b4efa14118d3718213eb6" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::toggle_list</definition>
-        <argsstring></argsstring>
-        <name>toggle_list</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="166" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="166" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae867a64de7fea1f98cb6db6e9ff9d4ed" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::start_xs</definition>
-        <argsstring></argsstring>
-        <name>start_xs</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="167" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="167" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a814ae4233f0c96728a9a5f47f5add06e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::start_ys</definition>
-        <argsstring></argsstring>
-        <name>start_ys</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="168" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="168" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a064dc8d975b3da3e0ac29f73b626b6aa" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::start_thetas</definition>
-        <argsstring></argsstring>
-        <name>start_thetas</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="169" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="169" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a613e153a969b6e3df72893eed2da061f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::start_rot</definition>
-        <argsstring></argsstring>
-        <name>start_rot</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="170" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="170" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aa8a35ba4818fe79c1e2c6f9058a31dde" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::sim</definition>
-        <argsstring></argsstring>
-        <name>sim</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="173" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="173" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aaa2e9426a3f641b295203f9166c33fac" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::renderer</definition>
-        <argsstring></argsstring>
-        <name>renderer</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="177" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="177" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ad293c8b43306e47c4430b16b9f7b8d8c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env.F110Env::current_obs</definition>
-        <argsstring></argsstring>
-        <name>current_obs</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="178" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="178" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbba07db5d7d79bdd27f3487192e6e2" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env.F110Env.__init__</definition>
-        <argsstring>(self, **kwargs)</argsstring>
-        <name>__init__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>**</type>
-          <declname>kwargs</declname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="95" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="95" bodyend="179"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae193b905b3d1c213ec4324283ebdf201" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env.F110Env.__del__</definition>
-        <argsstring>(self)</argsstring>
-        <name>__del__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Finalizer, does cleanup
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="180" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="180" bodyend="185"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a0df471828ba39c5228bf5c814a5d0e6e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env.F110Env.step</definition>
-        <argsstring>(self, action)</argsstring>
-        <name>step</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>action</type>
-          <defname>action</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Step function for the gym env
-
-Args:
-    action (np.ndarray(num_agents, 2))
-
-Returns:
-    obs (dict): observation of the current step
-    reward (float, default=self.timestep): step reward, currently is physics timestep
-    done (bool): if the simulation is done
-    info (dict): auxillary information dictionary
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="245" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="245" bodyend="278"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab213d62cea216bbd82d0f6d7061452fb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env.F110Env.reset</definition>
-        <argsstring>(self, poses)</argsstring>
-        <name>reset</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>poses</type>
-          <defname>poses</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Reset the gym environment by given poses
-
-Args:
-    poses (np.ndarray (num_agents, 3)): poses to reset agents to
-
-Returns:
-    obs (dict): observation of the current step
-    reward (float, default=self.timestep): step reward, currently is physics timestep
-    done (bool): if the simulation is done
-    info (dict): auxillary information dictionary
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="279" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="279" bodyend="313"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc210c3941c1548692c75c961ad443df" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env.F110Env.update_map</definition>
-        <argsstring>(self, map_path, map_ext)</argsstring>
-        <name>update_map</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>map_path</type>
-          <defname>map_path</defname>
-        </param>
-        <param>
-          <type>map_ext</type>
-          <defname>map_ext</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Updates the map used by simulation
-
-Args:
-    map_path (str): absolute path to the map yaml file
-    map_ext (str): extension of the map image file
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="314" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="314" bodyend="326"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a79d419bbf2ff0e377d808e4a8f41cc81" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env.F110Env.update_params</definition>
-        <argsstring>(self, params, index=-1)</argsstring>
-        <name>update_params</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>params</type>
-          <defname>params</defname>
-        </param>
-        <param>
-          <type>index</type>
-          <defname>index</defname>
-          <defval>-1</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Updates the parameters used by simulation for vehicles
-
-Args:
-    params (dict): dictionary of parameters
-    index (int, default=-1): if &gt;= 0 then only update a specific agent&apos;s params
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="327" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="327" bodyend="339"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab8e76450e63ef88c1ac9721f717fa375" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env.F110Env.render</definition>
-        <argsstring>(self, mode=&apos;human&apos;)</argsstring>
-        <name>render</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>mode</type>
-          <defname>mode</defname>
-          <defval>&apos;human&apos;</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Renders the environment with pyglet. Use mouse scroll in the window to zoom in/out, use mouse click drag to pan. Shows the agents, the map, current fps (bottom left corner), and the race information near as text.
-
-Args:
-    mode (str, default=&apos;human&apos;): rendering mode, currently supports:
-&apos;human&apos;: slowed down rendering such that the env is rendered in a way that sim time elapsed is close to real time elapsed
-&apos;human_fast&apos;: render as fast as possible
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="340" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="340" bodyend="365"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="private-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a1422010e34cb61bad1e3321c2df7e58d" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env.F110Env._check_done</definition>
-        <argsstring>(self)</argsstring>
-        <name>_check_done</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Check if the current rollout is done
-
-Args:
-    None
-
-Returns:
-    done (bool): whether the rollout is done
-    toggle_list (list[int]): each agent&apos;s toggle list for crossing the finish zone
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="186" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="186" bodyend="229"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ada4d88e20d24bdddc03e5acfe1be325a" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env.F110Env._update_state</definition>
-        <argsstring>(self, obs_dict)</argsstring>
-        <name>_update_state</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>obs_dict</type>
-          <defname>obs_dict</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Update the env&apos;s states according to observations
-
-Args:
-    obs_dict (dict): dictionary of observation
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="230" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="230" bodyend="244"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-<para><verbatim>OpenAI gym environment for F1TENTH
-
-Env should be initialized by calling gym.make(&apos;f110_gym:f110-v0&apos;, **kwargs)
-
-Args:
-    kwargs:
-        seed (int): seed for random state and reproducibility
-        
-        map (str, default=&apos;vegas&apos;): name of the map used for the environment. Currently, available environments include: &apos;berlin&apos;, &apos;vegas&apos;, &apos;skirk&apos;. You could use a string of the absolute path to the yaml file of your custom map.
-    
-        map_ext (str, default=&apos;png&apos;): image extension of the map image file. For example &apos;png&apos;, &apos;pgm&apos;
-    
-        params (dict, default={&apos;mu&apos;: 1.0489, &apos;C_Sf&apos;:, &apos;C_Sr&apos;:, &apos;lf&apos;: 0.15875, &apos;lr&apos;: 0.17145, &apos;h&apos;: 0.074, &apos;m&apos;: 3.74, &apos;I&apos;: 0.04712, &apos;s_min&apos;: -0.4189, &apos;s_max&apos;: 0.4189, &apos;sv_min&apos;: -3.2, &apos;sv_max&apos;: 3.2, &apos;v_switch&apos;:7.319, &apos;a_max&apos;: 9.51, &apos;v_min&apos;:-5.0, &apos;v_max&apos;: 20.0, &apos;width&apos;: 0.31, &apos;length&apos;: 0.58}): dictionary of vehicle parameters.
-        mu: surface friction coefficient
-        C_Sf: Cornering stiffness coefficient, front
-        C_Sr: Cornering stiffness coefficient, rear
-        lf: Distance from center of gravity to front axle
-        lr: Distance from center of gravity to rear axle
-        h: Height of center of gravity
-        m: Total mass of the vehicle
-        I: Moment of inertial of the entire vehicle about the z axis
-        s_min: Minimum steering angle constraint
-        s_max: Maximum steering angle constraint
-        sv_min: Minimum steering velocity constraint
-        sv_max: Maximum steering velocity constraint
-        v_switch: Switching velocity (velocity at which the acceleration is no longer able to create wheel spin)
-        a_max: Maximum longitudinal acceleration
-        v_min: Minimum longitudinal velocity
-        v_max: Maximum longitudinal velocity
-        width: width of the vehicle in meters
-        length: length of the vehicle in meters
-
-        num_agents (int, default=2): number of agents in the environment
-
-        timestep (float, default=0.01): physics timestep
-
-        ego_idx (int, default=0): ego&apos;s index in list of agents
-</verbatim> </para>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="2">
-        <label>Env</label>
-      </node>
-      <node id="1">
-        <label>f110_gym.envs.f110_env.F110Env</label>
-        <link refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-        <childnode refid="3" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="3">
-        <label>EzPickle</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="2">
-        <label>Env</label>
-      </node>
-      <node id="1">
-        <label>f110_gym.envs.f110_env.F110Env</label>
-        <link refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-        <childnode refid="3" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="3">
-        <label>EzPickle</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="53" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="53" bodyend="365"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae193b905b3d1c213ec4324283ebdf201" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>__del__</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbba07db5d7d79bdd27f3487192e6e2" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a1422010e34cb61bad1e3321c2df7e58d" prot="private" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>_check_done</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ada4d88e20d24bdddc03e5acfe1be325a" prot="private" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>_update_state</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ada1a8cc0681447645b811448f516885a" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>collisions</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ad293c8b43306e47c4430b16b9f7b8d8c" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>current_obs</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6539fde56adcb5755acfe1c86251f193" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>current_time</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aebce8c6c42f258d8c561da27dde0c01b" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>ego_idx</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a0b2cc3bd151748987c6e23f34f16d1a2" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>lap_counts</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a83f64f867c24f12d9ad3e14745e23aa1" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>lap_times</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a147cde741845fcded400365a9d495ce3" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>map_ext</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbb8c9dad98bbad696936dec9633939" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>map_name</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a584bf97317bbe8d38d8e0136753ded60" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>map_path</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aee31e18855f6a73aa5051d7e4d693aa8" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>metadata</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc0a35ce8ff234279acffc66092d72a1" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>near_start</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a24602450e500c08f3190672922de25de" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>near_starts</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>num_agents</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6c19f5c3146fa6be496639ab4ed0d63f" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>num_toggles</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab1c1a4b9cb08b685c597b1d40402a479" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>params</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a3ffb6fa7e705c18d5316444488cb649b" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>poses_theta</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae83c6ed936fe9e1a542be6b2eb76395c" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>poses_x</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a03432e028beff28596178dc9236fc4e8" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>poses_y</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab8e76450e63ef88c1ac9721f717fa375" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>render</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aaa2e9426a3f641b295203f9166c33fac" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>renderer</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab213d62cea216bbd82d0f6d7061452fb" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>reset</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aa8a35ba4818fe79c1e2c6f9058a31dde" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>sim</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a613e153a969b6e3df72893eed2da061f" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>start_rot</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a064dc8d975b3da3e0ac29f73b626b6aa" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>start_thetas</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a2496c3576ebb86df560fb09004583527" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>start_thresh</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae867a64de7fea1f98cb6db6e9ff9d4ed" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>start_xs</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a814ae4233f0c96728a9a5f47f5add06e" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>start_ys</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a0df471828ba39c5228bf5c814a5d0e6e" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>step</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1abdc8699b0f8fb2412efef070affa8ccb" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>timestep</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a45f4f52ca91b4efa14118d3718213eb6" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>toggle_list</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc210c3941c1548692c75c961ad443df" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>update_map</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a79d419bbf2ff0e377d808e4a8f41cc81" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env::F110Env</scope><name>update_params</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.xml b/docs/xml/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.xml
deleted file mode 100644
index 325121f7..00000000
--- a/docs/xml/classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env.xml
+++ /dev/null
@@ -1,1003 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::envs::f110_env_backup::F110Env</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">Env</basecompoundref>
-    <basecompoundref prot="public" virt="non-virtual">EzPickle</basecompoundref>
-      <sectiondef kind="public-static-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a33621c905b3ce566450c77b923ef79ee" prot="public" static="yes" mutable="no">
-        <type>dictionary</type>
-        <definition>dictionary f110_gym.envs.f110_env_backup.F110Env::metadata</definition>
-        <argsstring></argsstring>
-        <name>metadata</name>
-        <initializer>=  {&apos;render.modes&apos;: []}</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="65" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="65" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2efb58b38020d194c865ac289009ba4a" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::params_set</definition>
-        <argsstring></argsstring>
-        <name>params_set</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="69" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="69" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a58740f3bf62a7bf263a13b47cdf5d797" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::map_inited</definition>
-        <argsstring></argsstring>
-        <name>map_inited</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="70" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="70" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::params</definition>
-        <argsstring></argsstring>
-        <name>params</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="72" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="72" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::num_agents</definition>
-        <argsstring></argsstring>
-        <name>num_agents</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="74" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="74" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a89f5296784405aeaa52325a8dac4420e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::timestep</definition>
-        <argsstring></argsstring>
-        <name>timestep</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="75" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="75" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad417d87c39e8046ab2a66fd11d5910b8" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::map_path</definition>
-        <argsstring></argsstring>
-        <name>map_path</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="78" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="78" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::map_img</definition>
-        <argsstring></argsstring>
-        <name>map_img</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="79" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="79" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae4babdba55642fab735d03c5672ed5ad" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::ego_idx</definition>
-        <argsstring></argsstring>
-        <name>ego_idx</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="85" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="85" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae2047312369a5e949b09e1c5b067412f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::timeout</definition>
-        <argsstring></argsstring>
-        <name>timeout</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="88" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="88" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1af3d3f69953f78a141b98f3d738a15530" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::start_thresh</definition>
-        <argsstring></argsstring>
-        <name>start_thresh</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="90" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="90" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0a9dbd46041d336a1d6b28ea01418d91" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::x</definition>
-        <argsstring></argsstring>
-        <name>x</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="95" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="95" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2fd95411b8a24759642863111ed0f513" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::y</definition>
-        <argsstring></argsstring>
-        <name>y</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="96" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="96" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1dc4f5c9ab99353e2c364d42daf5a180" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::theta</definition>
-        <argsstring></argsstring>
-        <name>theta</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="97" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="97" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a68efc45c0a66e4652697146e18c8a570" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::in_collision</definition>
-        <argsstring></argsstring>
-        <name>in_collision</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="99" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="99" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a88dd2fd1f2dc0ef251a079d3e74622fe" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::collision_angle</definition>
-        <argsstring></argsstring>
-        <name>collision_angle</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="100" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="100" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1c3ac639a2b0773d99043c2b911970d7" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::near_start</definition>
-        <argsstring></argsstring>
-        <name>near_start</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="103" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="103" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac19a932655f1f9a6e8065df37bbe9f80" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::num_toggles</definition>
-        <argsstring></argsstring>
-        <name>num_toggles</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="104" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="104" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa7af900e93ae4b180e89e7d48e242033" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::lap_times</definition>
-        <argsstring></argsstring>
-        <name>lap_times</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="107" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="107" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a3eb59d52fbc4d767e2c7ed0c64b8650f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::lap_counts</definition>
-        <argsstring></argsstring>
-        <name>lap_counts</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="108" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="108" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a476dab30a81d8794d89f0bd85b3e7884" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::map_height</definition>
-        <argsstring></argsstring>
-        <name>map_height</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="128" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="128" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2f4a85b1b83b203bc5549b6bff0bf2d1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::map_width</definition>
-        <argsstring></argsstring>
-        <name>map_width</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="129" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="129" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1ec9b2bc2142334a2b8a2d028adcace8" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::map_resolution</definition>
-        <argsstring></argsstring>
-        <name>map_resolution</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="130" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="130" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a7456387ff1b9e6832dd205ed891bc750" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::free_thresh</definition>
-        <argsstring></argsstring>
-        <name>free_thresh</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="131" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="131" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2e1491609720111b7065748ad37e8512" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::origin</definition>
-        <argsstring></argsstring>
-        <name>origin</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="132" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="132" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0e6a85d0de7165369ce8fcd18be9d885" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::port</definition>
-        <argsstring></argsstring>
-        <name>port</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="150" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="150" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa3367f6570455c5311e075b4b9f91c56" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::context</definition>
-        <argsstring></argsstring>
-        <name>context</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="151" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="151" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::socket</definition>
-        <argsstring></argsstring>
-        <name>socket</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="152" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="152" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a23d4e3c74f19290571ce06f57c68de01" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::sim_p</definition>
-        <argsstring></argsstring>
-        <name>sim_p</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="171" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="171" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aeb9374dba01e21d5fd618d0736573f77" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::all_x</definition>
-        <argsstring></argsstring>
-        <name>all_x</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="308" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="308" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aebf4ff49efe573bdbe29b190528256f1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::all_y</definition>
-        <argsstring></argsstring>
-        <name>all_y</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="309" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="309" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab629b0d75ade059476f2bf4237798101" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::current_time</definition>
-        <argsstring></argsstring>
-        <name>current_time</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="387" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="387" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a34545b59df83e520f7c3031106c5c954" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::collision_angles</definition>
-        <argsstring></argsstring>
-        <name>collision_angles</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="404" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="404" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab224af4cddca309ab854b9c26f40868f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::near_starts</definition>
-        <argsstring></argsstring>
-        <name>near_starts</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="407" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="407" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::toggle_list</definition>
-        <argsstring></argsstring>
-        <name>toggle_list</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="408" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="408" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab5e2d4e41534916caaa9fa2a94979053" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::start_x</definition>
-        <argsstring></argsstring>
-        <name>start_x</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="413" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="413" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0959bbc593917d214789b9785a8f8b0c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::start_y</definition>
-        <argsstring></argsstring>
-        <name>start_y</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="414" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="414" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::start_theta</definition>
-        <argsstring></argsstring>
-        <name>start_theta</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="415" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="415" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a894820aea9c0b9c750f165798ab60ba0" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::start_xs</definition>
-        <argsstring></argsstring>
-        <name>start_xs</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="416" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="416" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae28edcae46735a4e684140aa05fd099b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::start_ys</definition>
-        <argsstring></argsstring>
-        <name>start_ys</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="417" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="417" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a82dcb09e9adb3f73dc1c61a3e406dfe9" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::start_thetas</definition>
-        <argsstring></argsstring>
-        <name>start_thetas</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="418" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="418" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a50b6912954290c4c5fb9165fc0103628" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::start_rot</definition>
-        <argsstring></argsstring>
-        <name>start_rot</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="419" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="419" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a59e7a0edc30712fb482c246e01a72368" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.f110_env_backup.F110Env::double_finish</definition>
-        <argsstring></argsstring>
-        <name>double_finish</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="556" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="556" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a20cf7bc892fe043174eb7c656b49e54d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env.__init__</definition>
-        <argsstring>(self)</argsstring>
-        <name>__init__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="67" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="67" bodyend="174"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab53974d19ae639eaa8d922db303d21c4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env.__del__</definition>
-        <argsstring>(self)</argsstring>
-        <name>__del__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Finalizer, does cleanup
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="175" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="175" bodyend="184"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a5613fa6844441b3e94e6c75d2d6235e7" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env.step</definition>
-        <argsstring>(self, action)</argsstring>
-        <name>step</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>action</type>
-          <defname>action</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="327" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="327" bodyend="399"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1acc334d94e1a842ed26b8820a9730566e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env.reset</definition>
-        <argsstring>(self, poses=None)</argsstring>
-        <name>reset</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>poses</type>
-          <defname>poses</defname>
-          <defval>None</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="400" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="400" bodyend="462"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1acb0331bb92b190cdd592060385726160" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env.init_map</definition>
-        <argsstring>(self, map_path, img_ext, rgb, flip)</argsstring>
-        <name>init_map</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>map_path</type>
-          <defname>map_path</defname>
-        </param>
-        <param>
-          <type>img_ext</type>
-          <defname>img_ext</defname>
-        </param>
-        <param>
-          <type>rgb</type>
-          <defname>rgb</defname>
-        </param>
-        <param>
-          <type>flip</type>
-          <defname>flip</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>    init a map for the gym env
-    map_path: full path for the yaml, same as ROS, img and yaml in same dir
-    rgb: map grayscale or rgb
-    flip: if map needs flipping
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="463" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="463" bodyend="507"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad8af92604458991c85e4714ea1db581d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env.render</definition>
-        <argsstring>(self, mode=&apos;human&apos;, close=False)</argsstring>
-        <name>render</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>mode</type>
-          <defname>mode</defname>
-          <defval>&apos;human&apos;</defval>
-        </param>
-        <param>
-          <type>close</type>
-          <defname>close</defname>
-          <defval>False</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="508" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="508" bodyend="510"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afd60c71c7b15c805310a4ac3510d70d2" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env.update_params</definition>
-        <argsstring>(self, mu, h_cg, l_r, cs_f, cs_r, I_z, mass, exe_path, double_finish=False)</argsstring>
-        <name>update_params</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>mu</type>
-          <defname>mu</defname>
-        </param>
-        <param>
-          <type>h_cg</type>
-          <defname>h_cg</defname>
-        </param>
-        <param>
-          <type>l_r</type>
-          <defname>l_r</defname>
-        </param>
-        <param>
-          <type>cs_f</type>
-          <defname>cs_f</defname>
-        </param>
-        <param>
-          <type>cs_r</type>
-          <defname>cs_r</defname>
-        </param>
-        <param>
-          <type>I_z</type>
-          <defname>I_z</defname>
-        </param>
-        <param>
-          <type>mass</type>
-          <defname>mass</defname>
-        </param>
-        <param>
-          <type>exe_path</type>
-          <defname>exe_path</defname>
-        </param>
-        <param>
-          <type>double_finish</type>
-          <defname>double_finish</defname>
-          <defval>False</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="541" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="541" bodyend="588"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="private-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9d9675c2f9268fc77a8521ffdcf09b07" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env._start_executable</definition>
-        <argsstring>(self, path)</argsstring>
-        <name>_start_executable</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>path</type>
-          <defname>path</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="185" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="185" bodyend="195"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a21067a7283751af26448552a976a9c71" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env._set_map</definition>
-        <argsstring>(self)</argsstring>
-        <name>_set_map</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Sets the map for the simulator instance
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="196" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="196" bodyend="229"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0fd67b8765be08da96125421849d3144" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env._check_done</definition>
-        <argsstring>(self)</argsstring>
-        <name>_check_done</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Check if the episode is done
-This is in terms of the ego car
-For our case, whether the car ends up close enough to the starting point
-And if accumulated time is over the timeout
-return true if done, false if not
-This assumes start is always (0, 0)</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="230" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="230" bodyend="293"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1d022634e984cb72c21b0a4b097dd4bc" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env._check_passed</definition>
-        <argsstring>(self)</argsstring>
-        <name>_check_passed</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Returns the times that the ego car overtook the other car
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="294" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="294" bodyend="299"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2bf2e9b454b5088eee0cacfaf806ef5a" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env._update_state</definition>
-        <argsstring>(self, obs_dict)</argsstring>
-        <name>_update_state</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>obs_dict</type>
-          <defname>obs_dict</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Update the env&apos;s states according to observations
-obs is observation dictionary
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="300" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="300" bodyend="314"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a8c9a1d3421c51841565bee8a1f9a464c" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.f110_env_backup.F110Env._raycast_opponents</definition>
-        <argsstring>(self, obs_dict)</argsstring>
-        <name>_raycast_opponents</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>obs_dict</type>
-          <defname>obs_dict</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="318" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="318" bodyend="326"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-<para><verbatim>OpenAI gym environment for F1/10 simulator
-Use 0mq&apos;s REQ-REP pattern to communicate to the C++ simulator
-ONE env has ONE corresponding C++ instance
-Need to create env with map input, full path to map yaml file, map pgm image and yaml should be in same directory
-
-should be initialized with a map, a timestep, and number of agents
-</verbatim> </para>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.envs.f110_env_backup.F110Env</label>
-        <link refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-        <childnode refid="3" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="3">
-        <label>utils::EzPickle</label>
-      </node>
-      <node id="2">
-        <label>gym::Env</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.envs.f110_env_backup.F110Env</label>
-        <link refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-        <childnode refid="3" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="3">
-        <label>utils::EzPickle</label>
-      </node>
-      <node id="2">
-        <label>gym::Env</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="56" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" bodystart="56" bodyend="588"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab53974d19ae639eaa8d922db303d21c4" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>__del__</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a20cf7bc892fe043174eb7c656b49e54d" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0fd67b8765be08da96125421849d3144" prot="private" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>_check_done</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1d022634e984cb72c21b0a4b097dd4bc" prot="private" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>_check_passed</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a8c9a1d3421c51841565bee8a1f9a464c" prot="private" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>_raycast_opponents</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a21067a7283751af26448552a976a9c71" prot="private" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>_set_map</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9d9675c2f9268fc77a8521ffdcf09b07" prot="private" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>_start_executable</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2bf2e9b454b5088eee0cacfaf806ef5a" prot="private" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>_update_state</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aeb9374dba01e21d5fd618d0736573f77" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>all_x</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aebf4ff49efe573bdbe29b190528256f1" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>all_y</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a88dd2fd1f2dc0ef251a079d3e74622fe" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>collision_angle</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a34545b59df83e520f7c3031106c5c954" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>collision_angles</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa3367f6570455c5311e075b4b9f91c56" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>context</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab629b0d75ade059476f2bf4237798101" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>current_time</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a59e7a0edc30712fb482c246e01a72368" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>double_finish</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae4babdba55642fab735d03c5672ed5ad" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>ego_idx</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a7456387ff1b9e6832dd205ed891bc750" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>free_thresh</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a68efc45c0a66e4652697146e18c8a570" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>in_collision</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1acb0331bb92b190cdd592060385726160" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>init_map</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a3eb59d52fbc4d767e2c7ed0c64b8650f" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>lap_counts</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa7af900e93ae4b180e89e7d48e242033" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>lap_times</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a476dab30a81d8794d89f0bd85b3e7884" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>map_height</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>map_img</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a58740f3bf62a7bf263a13b47cdf5d797" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>map_inited</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad417d87c39e8046ab2a66fd11d5910b8" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>map_path</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1ec9b2bc2142334a2b8a2d028adcace8" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>map_resolution</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2f4a85b1b83b203bc5549b6bff0bf2d1" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>map_width</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a33621c905b3ce566450c77b923ef79ee" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>metadata</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1c3ac639a2b0773d99043c2b911970d7" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>near_start</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab224af4cddca309ab854b9c26f40868f" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>near_starts</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>num_agents</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac19a932655f1f9a6e8065df37bbe9f80" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>num_toggles</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2e1491609720111b7065748ad37e8512" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>origin</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>params</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2efb58b38020d194c865ac289009ba4a" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>params_set</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0e6a85d0de7165369ce8fcd18be9d885" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>port</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad8af92604458991c85e4714ea1db581d" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>render</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1acc334d94e1a842ed26b8820a9730566e" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>reset</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a23d4e3c74f19290571ce06f57c68de01" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>sim_p</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>socket</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a50b6912954290c4c5fb9165fc0103628" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>start_rot</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>start_theta</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a82dcb09e9adb3f73dc1c61a3e406dfe9" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>start_thetas</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1af3d3f69953f78a141b98f3d738a15530" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>start_thresh</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab5e2d4e41534916caaa9fa2a94979053" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>start_x</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a894820aea9c0b9c750f165798ab60ba0" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>start_xs</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0959bbc593917d214789b9785a8f8b0c" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>start_y</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae28edcae46735a4e684140aa05fd099b" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>start_ys</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a5613fa6844441b3e94e6c75d2d6235e7" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>step</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1dc4f5c9ab99353e2c364d42daf5a180" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>theta</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae2047312369a5e949b09e1c5b067412f" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>timeout</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a89f5296784405aeaa52325a8dac4420e" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>timestep</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>toggle_list</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afd60c71c7b15c805310a4ac3510d70d2" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>update_params</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0a9dbd46041d336a1d6b28ea01418d91" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>x</name></member>
-      <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2fd95411b8a24759642863111ed0f513" prot="public" virt="non-virtual"><scope>f110_gym::envs::f110_env_backup::F110Env</scope><name>y</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.xml b/docs/xml/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.xml
deleted file mode 100644
index b0ec5d16..00000000
--- a/docs/xml/classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d.xml
+++ /dev/null
@@ -1,482 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::envs::laser_models::ScanSimulator2D</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">object</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a8fd8d9f11c319090584c221e51aa4975" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::num_beams</definition>
-        <argsstring></argsstring>
-        <name>num_beams</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="329" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="329" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae57ad1092f12be1967de4853eca1327d" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::fov</definition>
-        <argsstring></argsstring>
-        <name>fov</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="330" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="330" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a2aa400b42babfa82f677356aaa16a0f4" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::std_dev</definition>
-        <argsstring></argsstring>
-        <name>std_dev</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="331" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="331" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a02bf0c833e93628643a20cceeb33b029" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::eps</definition>
-        <argsstring></argsstring>
-        <name>eps</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="332" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="332" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af21e0a0ddd2fc95ec4291db6b33cd591" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::theta_dis</definition>
-        <argsstring></argsstring>
-        <name>theta_dis</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="333" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="333" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af08e1ef6b6397c51fdd3e612dceb17b5" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::max_range</definition>
-        <argsstring></argsstring>
-        <name>max_range</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="334" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="334" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a68ab73d8b055703de7c4eb33ec54520a" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::angle_increment</definition>
-        <argsstring></argsstring>
-        <name>angle_increment</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="335" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="335" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aabde525512f31433f532639175f50ba3" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::theta_index_increment</definition>
-        <argsstring></argsstring>
-        <name>theta_index_increment</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="336" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="336" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12a635318c521153364d75b103905673" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::orig_c</definition>
-        <argsstring></argsstring>
-        <name>orig_c</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="337" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="337" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedb545195be8c54364e38ccf0c0b3d00" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::orig_s</definition>
-        <argsstring></argsstring>
-        <name>orig_s</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="338" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="338" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aecd0f30707bb8c82f59ae48ae2a478c2" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::orig_x</definition>
-        <argsstring></argsstring>
-        <name>orig_x</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="339" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="339" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a03e555b505b745f98dfd8a5cc4e1d013" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::orig_y</definition>
-        <argsstring></argsstring>
-        <name>orig_y</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="340" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="340" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae2c136fdda428bed3de1f7ab30cda72c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::map_height</definition>
-        <argsstring></argsstring>
-        <name>map_height</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="341" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="341" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a53beebf974cdf3cb04dac5e4311b2f36" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::map_width</definition>
-        <argsstring></argsstring>
-        <name>map_width</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="342" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="342" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a11d13f00e6d8a08d7b758f420ff464c5" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::map_resolution</definition>
-        <argsstring></argsstring>
-        <name>map_resolution</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="343" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="343" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a617e6b987673100484c5fdb0c17c9848" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::dt</definition>
-        <argsstring></argsstring>
-        <name>dt</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="344" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="344" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a6a2a4cc31c05bb623699e24df56d8989" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::rng</definition>
-        <argsstring></argsstring>
-        <name>rng</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="347" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="347" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a76ce07e27a1f3efecae222b25bfd3c98" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::sines</definition>
-        <argsstring></argsstring>
-        <name>sines</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="351" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="351" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedc4121c126a5bcda9b5f321cb679208" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::cosines</definition>
-        <argsstring></argsstring>
-        <name>cosines</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="352" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="352" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::map_img</definition>
-        <argsstring></argsstring>
-        <name>map_img</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="370" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="370" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a301f79d5db56a5c5eeb44f33ac3d0b7d" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanSimulator2D::origin</definition>
-        <argsstring></argsstring>
-        <name>origin</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="385" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="385" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a006ba0ddc5d9d6d2f2b74e945ef61f2c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.ScanSimulator2D.__init__</definition>
-        <argsstring>(self, num_beams, fov, std_dev=0.01, eps=0.0001, theta_dis=2000, max_range=30.0, seed=123)</argsstring>
-        <name>__init__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>num_beams</type>
-          <defname>num_beams</defname>
-        </param>
-        <param>
-          <type>fov</type>
-          <defname>fov</defname>
-        </param>
-        <param>
-          <type>std_dev</type>
-          <defname>std_dev</defname>
-          <defval>0.01</defval>
-        </param>
-        <param>
-          <type>eps</type>
-          <defname>eps</defname>
-          <defval>0.0001</defval>
-        </param>
-        <param>
-          <type>theta_dis</type>
-          <defname>theta_dis</defname>
-          <defval>2000</defval>
-        </param>
-        <param>
-          <type>max_range</type>
-          <defname>max_range</defname>
-          <defval>30.0</defval>
-        </param>
-        <param>
-          <type>seed</type>
-          <defname>seed</defname>
-          <defval>123</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="327" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="327" bodyend="353"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a989dd691fd4c08d0f18d6c241862d03c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.ScanSimulator2D.set_map</definition>
-        <argsstring>(self, map_path, map_ext)</argsstring>
-        <name>set_map</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>map_path</type>
-          <defname>map_path</defname>
-        </param>
-        <param>
-          <type>map_ext</type>
-          <defname>map_ext</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Set the bitmap of the scan simulator by path
-
-    Args:
-map_path (str): path to the map yaml file
-map_ext (str): extension (image type) of the map image
-
-    Returns:
-flag (bool): if image reading and loading is successful
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="354" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="354" bodyend="399"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12c4b2f39bda5dd3a1ea14e70e4370cc" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.ScanSimulator2D.scan</definition>
-        <argsstring>(self, pose)</argsstring>
-        <name>scan</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Perform simulated 2D scan by pose on the given map
-
-    Args:
-pose (numpy.ndarray (3, )): pose of the scan frame (x, y, theta)
-
-    Returns:
-scan (numpy.ndarray (n, )): data array of the laserscan, n=num_beams
-
-    Raises:
-ValueError: when scan is called before a map is set
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="400" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="400" bodyend="419"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ab11345c77e843234e6a71f3f0293d4f5" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.ScanSimulator2D.get_increment</definition>
-        <argsstring>(self)</argsstring>
-        <name>get_increment</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="420" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="420" bodyend="433"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-<para><verbatim>2D LIDAR scan simulator class
-
-Init params:
-    num_beams (int): number of beams in the scan
-    fov (float): field of view of the laser scan
-    std_dev (float, default=0.01): standard deviation of the generated whitenoise in the scan
-    eps (float, default=0.0001): ray tracing iteration termination condition
-    theta_dis (int, default=2000): number of steps to discretize the angles between 0 and 2pi for look up
-    max_range (float, default=30.0): maximum range of the laser
-    seed (int, default=123): seed for random number generator for the whitenoise in scan
-</verbatim> </para>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.envs.laser_models.ScanSimulator2D</label>
-        <link refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>object</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.envs.laser_models.ScanSimulator2D</label>
-        <link refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>object</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="313" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="313" bodyend="434"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a006ba0ddc5d9d6d2f2b74e945ef61f2c" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a68ab73d8b055703de7c4eb33ec54520a" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>angle_increment</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedc4121c126a5bcda9b5f321cb679208" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>cosines</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a617e6b987673100484c5fdb0c17c9848" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>dt</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a02bf0c833e93628643a20cceeb33b029" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>eps</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae57ad1092f12be1967de4853eca1327d" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>fov</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ab11345c77e843234e6a71f3f0293d4f5" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>get_increment</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae2c136fdda428bed3de1f7ab30cda72c" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>map_height</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>map_img</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a11d13f00e6d8a08d7b758f420ff464c5" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>map_resolution</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a53beebf974cdf3cb04dac5e4311b2f36" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>map_width</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af08e1ef6b6397c51fdd3e612dceb17b5" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>max_range</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a8fd8d9f11c319090584c221e51aa4975" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>num_beams</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12a635318c521153364d75b103905673" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>orig_c</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedb545195be8c54364e38ccf0c0b3d00" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>orig_s</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aecd0f30707bb8c82f59ae48ae2a478c2" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>orig_x</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a03e555b505b745f98dfd8a5cc4e1d013" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>orig_y</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a301f79d5db56a5c5eeb44f33ac3d0b7d" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>origin</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a6a2a4cc31c05bb623699e24df56d8989" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>rng</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12c4b2f39bda5dd3a1ea14e70e4370cc" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>scan</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a989dd691fd4c08d0f18d6c241862d03c" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>set_map</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a76ce07e27a1f3efecae222b25bfd3c98" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>sines</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a2aa400b42babfa82f677356aaa16a0f4" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>std_dev</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af21e0a0ddd2fc95ec4291db6b33cd591" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>theta_dis</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aabde525512f31433f532639175f50ba3" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanSimulator2D</scope><name>theta_index_increment</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.xml b/docs/xml/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.xml
deleted file mode 100644
index 8801bc4d..00000000
--- a/docs/xml/classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::envs::laser_models::ScanTests</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">TestCase</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanTests::num_beams</definition>
-        <argsstring></argsstring>
-        <name>num_beams</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="437" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="437" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanTests::fov</definition>
-        <argsstring></argsstring>
-        <name>fov</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="438" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="438" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanTests::num_test</definition>
-        <argsstring></argsstring>
-        <name>num_test</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="440" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="440" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a31eb3b8ba28e16af8b39bd39c2254090" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanTests::test_poses</definition>
-        <argsstring></argsstring>
-        <name>test_poses</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="441" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="441" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a2958e581294bc423f58a1df94a030b9e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanTests::berlin_scan</definition>
-        <argsstring></argsstring>
-        <name>berlin_scan</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="446" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="446" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1abfb81eedfc585622f28ba8f81443af80" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.laser_models.ScanTests::skirk_scan</definition>
-        <argsstring></argsstring>
-        <name>skirk_scan</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="447" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="447" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a55ab0dc9841fe835d01b87b9b0fce3c0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.ScanTests.setUp</definition>
-        <argsstring>(self)</argsstring>
-        <name>setUp</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="435" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="435" bodyend="448"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a54056154757449495862bb07f7fd4119" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.ScanTests.test_map_berlin</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_map_berlin</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="449" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="449" bodyend="471"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac7855c2d63a63159b19ecc01f92194bc" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.ScanTests.test_map_skirk</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_map_skirk</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="472" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="472" bodyend="495"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a38ed452c3c86c8812726a8524d1eb034" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.ScanTests.test_fps</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_fps</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="496" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="496" bodyend="514"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.envs.laser_models.ScanTests</label>
-        <link refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.envs.laser_models.ScanTests</label>
-        <link refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="434" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="434" bodyend="515"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a2958e581294bc423f58a1df94a030b9e" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>berlin_scan</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>fov</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>num_beams</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>num_test</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a55ab0dc9841fe835d01b87b9b0fce3c0" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>setUp</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1abfb81eedfc585622f28ba8f81443af80" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>skirk_scan</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a38ed452c3c86c8812726a8524d1eb034" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>test_fps</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a54056154757449495862bb07f7fd4119" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>test_map_berlin</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac7855c2d63a63159b19ecc01f92194bc" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>test_map_skirk</name></member>
-      <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a31eb3b8ba28e16af8b39bd39c2254090" prot="public" virt="non-virtual"><scope>f110_gym::envs::laser_models::ScanTests</scope><name>test_poses</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.xml b/docs/xml/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.xml
deleted file mode 100644
index 27e6d449..00000000
--- a/docs/xml/classf110__gym_1_1envs_1_1rendering_1_1_env_renderer.xml
+++ /dev/null
@@ -1,552 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::envs::rendering::EnvRenderer</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">Window</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10e0980201fca6f3392fc5c333a6ad99" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::left</definition>
-        <argsstring></argsstring>
-        <name>left</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="75" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="75" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1acb665a6f4d150da3b2159b1cd86f4117" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::right</definition>
-        <argsstring></argsstring>
-        <name>right</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="76" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="76" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ab6f1d3bbdf185a2489a9c444413e72b6" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::bottom</definition>
-        <argsstring></argsstring>
-        <name>bottom</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="77" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="77" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a6e8e1a6e3f6c1f681f0fcbe6c04ffc27" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::top</definition>
-        <argsstring></argsstring>
-        <name>top</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="78" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="78" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::zoom_level</definition>
-        <argsstring></argsstring>
-        <name>zoom_level</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="79" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="79" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1af71d3702c2e9fa5e8e109111b4a337ce" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::zoomed_width</definition>
-        <argsstring></argsstring>
-        <name>zoomed_width</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="80" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="80" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a769be9782b9452fd8c3c1984985e419b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::zoomed_height</definition>
-        <argsstring></argsstring>
-        <name>zoomed_height</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="81" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="81" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0f6f622b6ffe98f7ee038c2ce72af276" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::batch</definition>
-        <argsstring></argsstring>
-        <name>batch</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="84" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="84" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae423459dd9ee2da53cf7929e4591e366" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::map_points</definition>
-        <argsstring></argsstring>
-        <name>map_points</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="87" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="87" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a227e60c781a0e50f827ea2f4f11a3f85" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::poses</definition>
-        <argsstring></argsstring>
-        <name>poses</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="90" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="90" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a8a458f2ce6a733888d1a6bfaab243f31" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::vertices</definition>
-        <argsstring></argsstring>
-        <name>vertices</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="93" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="93" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad3328a46ae8641dc60b24d53219ffcb3" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::score_label</definition>
-        <argsstring></argsstring>
-        <name>score_label</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="96" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="96" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a2ecadd7a3ea2a4525bd7b0b4d362db81" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::fps_display</definition>
-        <argsstring></argsstring>
-        <name>fps_display</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="109" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="109" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad2c50c6e7d890771c7173768b6eef5c2" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::ego_idx</definition>
-        <argsstring></argsstring>
-        <name>ego_idx</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="309" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="309" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a4d90f610c36a7c83b054a2233276f36a" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.envs.rendering.EnvRenderer::cars</definition>
-        <argsstring></argsstring>
-        <name>cars</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="316" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="316" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a1b24abdbb4d13744255ebfdb3d509354" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.rendering.EnvRenderer.__init__</definition>
-        <argsstring>(self, width, height, *args, **kwargs)</argsstring>
-        <name>__init__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>*</type>
-          <declname>args</declname>
-        </param>
-        <param>
-          <type>**</type>
-          <declname>kwargs</declname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Class constructor
-
-Args:
-    width (int): width of the window
-    height (int): height of the window
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="54" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="54" bodyend="110"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae9c12c08c2f799504b6390b2d0ffda3f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.rendering.EnvRenderer.update_map</definition>
-        <argsstring>(self, map_path, map_ext)</argsstring>
-        <name>update_map</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>map_path</type>
-          <defname>map_path</defname>
-        </param>
-        <param>
-          <type>map_ext</type>
-          <defname>map_ext</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Update the map being drawn by the renderer. Converts image to a list of 3D points representing each obstacle pixel in the map.
-
-Args:
-    map_path (str): absolute path to the map without extensions
-    map_ext (str): extension for the map image file
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="111" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="111" bodyend="155"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ac8bbef5b8910515dd18c8a6624730898" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.rendering.EnvRenderer.on_resize</definition>
-        <argsstring>(self, width, height)</argsstring>
-        <name>on_resize</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Callback function on window resize, overrides inherited method, and updates camera values on top of the inherited on_resize() method.
-
-Potential improvements on current behavior: zoom/pan resets on window resize.
-
-Args:
-    width (int): new width of window
-    height (int): new height of window
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="156" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="156" bodyend="181"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a557710400bb370a7509dbc17658eadd8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.rendering.EnvRenderer.on_mouse_drag</definition>
-        <argsstring>(self, x, y, dx, dy, buttons, modifiers)</argsstring>
-        <name>on_mouse_drag</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>dx</type>
-          <defname>dx</defname>
-        </param>
-        <param>
-          <type>dy</type>
-          <defname>dy</defname>
-        </param>
-        <param>
-          <type>buttons</type>
-          <defname>buttons</defname>
-        </param>
-        <param>
-          <type>modifiers</type>
-          <defname>modifiers</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Callback function on mouse drag, overrides inherited method.
-
-Args:
-    x (int): Distance in pixels from the left edge of the window.
-    y (int): Distance in pixels from the bottom edge of the window.
-    dx (int): Relative X position from the previous mouse position.
-    dy (int): Relative Y position from the previous mouse position.
-    buttons (int): Bitwise combination of the mouse buttons currently pressed.
-    modifiers (int): Bitwise combination of any keyboard modifiers currently active.
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="182" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="182" bodyend="203"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10f7c38d921015b5574ba0c858a245bb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.rendering.EnvRenderer.on_mouse_scroll</definition>
-        <argsstring>(self, x, y, dx, dy)</argsstring>
-        <name>on_mouse_scroll</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>dx</type>
-          <defname>dx</defname>
-        </param>
-        <param>
-          <type>dy</type>
-          <defname>dy</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Callback function on mouse scroll, overrides inherited method.
-
-Args:
-    x (int): Distance in pixels from the left edge of the window.
-    y (int): Distance in pixels from the bottom edge of the window.
-    scroll_x (float): Amount of movement on the horizontal axis.
-    scroll_y (float): Amount of movement on the vertical axis.
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="204" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="204" bodyend="241"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a05cb0faf5893e3cbed58cf20d0997bf7" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.rendering.EnvRenderer.on_close</definition>
-        <argsstring>(self)</argsstring>
-        <name>on_close</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Callback function when the &apos;x&apos; is clicked on the window, overrides inherited method. Also throws exception to end the python program when in a loop.
-
-Args:
-    None
-
-Returns:
-    None
-
-Raises:
-    Exception: with a message that indicates the rendering window was closed
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="242" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="242" bodyend="258"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0cbcdabef2cdda765d6721ca796ecfd0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.rendering.EnvRenderer.on_draw</definition>
-        <argsstring>(self)</argsstring>
-        <name>on_draw</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Function when the pyglet is drawing. The function draws the batch created that includes the map points, the agent polygons, and the information text, and the fps display.
-
-Args:
-    None
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="259" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="259" bodyend="297"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a1b9284f2e59c9000f10bd18e1ec6a9b3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.rendering.EnvRenderer.update_obs</definition>
-        <argsstring>(self, obs)</argsstring>
-        <name>update_obs</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>obs</type>
-          <defname>obs</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Updates the renderer with the latest observation from the gym environment, including the agent poses, and the information text.
-
-Args:
-    obs (dict): observation dict from the gym env
-
-Returns:
-    None
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="298" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="298" bodyend="336"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-<para><verbatim>A window class inherited from pyglet.window.Window, handles the camera/projection interaction, resizing window, and rendering the environment
-</verbatim> </para>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="2">
-        <label>Window</label>
-      </node>
-      <node id="1">
-        <label>f110_gym.envs.rendering.EnvRenderer</label>
-        <link refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="2">
-        <label>Window</label>
-      </node>
-      <node id="1">
-        <label>f110_gym.envs.rendering.EnvRenderer</label>
-        <link refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="50" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="50" bodyend="336"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a1b24abdbb4d13744255ebfdb3d509354" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0f6f622b6ffe98f7ee038c2ce72af276" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>batch</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ab6f1d3bbdf185a2489a9c444413e72b6" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>bottom</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a4d90f610c36a7c83b054a2233276f36a" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>cars</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad2c50c6e7d890771c7173768b6eef5c2" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>ego_idx</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a2ecadd7a3ea2a4525bd7b0b4d362db81" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>fps_display</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10e0980201fca6f3392fc5c333a6ad99" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>left</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae423459dd9ee2da53cf7929e4591e366" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>map_points</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a05cb0faf5893e3cbed58cf20d0997bf7" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>on_close</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0cbcdabef2cdda765d6721ca796ecfd0" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>on_draw</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a557710400bb370a7509dbc17658eadd8" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>on_mouse_drag</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10f7c38d921015b5574ba0c858a245bb" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>on_mouse_scroll</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ac8bbef5b8910515dd18c8a6624730898" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>on_resize</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a227e60c781a0e50f827ea2f4f11a3f85" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>poses</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1acb665a6f4d150da3b2159b1cd86f4117" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>right</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad3328a46ae8641dc60b24d53219ffcb3" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>score_label</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a6e8e1a6e3f6c1f681f0fcbe6c04ffc27" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>top</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae9c12c08c2f799504b6390b2d0ffda3f" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>update_map</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a1b9284f2e59c9000f10bd18e1ec6a9b3" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>update_obs</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a8a458f2ce6a733888d1a6bfaab243f31" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>vertices</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>zoom_level</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a769be9782b9452fd8c3c1984985e419b" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>zoomed_height</name></member>
-      <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1af71d3702c2e9fa5e8e109111b4a337ce" prot="public" virt="non-virtual"><scope>f110_gym::envs::rendering::EnvRenderer</scope><name>zoomed_width</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.xml b/docs/xml/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.xml
deleted file mode 100644
index c4fdfdde..00000000
--- a/docs/xml/classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::unittest::collision_checks::CollisionTests</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">TestCase</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.collision_checks.CollisionTests::vertices1</definition>
-        <argsstring></argsstring>
-        <name>vertices1</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="247" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="247" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a407fd8ac2cb6e79b84590434fc6d7c6d" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.collision_checks.CollisionTests::length</definition>
-        <argsstring></argsstring>
-        <name>length</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="250" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="250" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a4b7f88b6f9a80c8bef02a1856ac068de" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.collision_checks.CollisionTests::width</definition>
-        <argsstring></argsstring>
-        <name>width</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="251" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="251" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1acf1126ffde5105c455d850ff5286e4b7" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.CollisionTests.setUp</definition>
-        <argsstring>(self)</argsstring>
-        <name>setUp</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="242" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="242" bodyend="252"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a8de52029859d1c7731e5683d23ccf007" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.CollisionTests.test_get_vert</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_get_vert</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="253" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="253" bodyend="265"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1acc104fececdc2724a5c5e8998100b633" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.CollisionTests.test_get_vert_fps</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_get_vert_fps</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="266" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="266" bodyend="275"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a8ea861cfb3721bfa636ada8787cc3b85" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.CollisionTests.test_random_collision</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_random_collision</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="276" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="276" bodyend="282"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1ab764a2cbf50b5cab461c5d6d017856b9" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.CollisionTests.test_fps</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_fps</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="283" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="283" bodyend="294"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.unittest.collision_checks.CollisionTests</label>
-        <link refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.unittest.collision_checks.CollisionTests</label>
-        <link refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="241" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="241" bodyend="295"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a407fd8ac2cb6e79b84590434fc6d7c6d" prot="public" virt="non-virtual"><scope>f110_gym::unittest::collision_checks::CollisionTests</scope><name>length</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1acf1126ffde5105c455d850ff5286e4b7" prot="public" virt="non-virtual"><scope>f110_gym::unittest::collision_checks::CollisionTests</scope><name>setUp</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1ab764a2cbf50b5cab461c5d6d017856b9" prot="public" virt="non-virtual"><scope>f110_gym::unittest::collision_checks::CollisionTests</scope><name>test_fps</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a8de52029859d1c7731e5683d23ccf007" prot="public" virt="non-virtual"><scope>f110_gym::unittest::collision_checks::CollisionTests</scope><name>test_get_vert</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1acc104fececdc2724a5c5e8998100b633" prot="public" virt="non-virtual"><scope>f110_gym::unittest::collision_checks::CollisionTests</scope><name>test_get_vert_fps</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a8ea861cfb3721bfa636ada8787cc3b85" prot="public" virt="non-virtual"><scope>f110_gym::unittest::collision_checks::CollisionTests</scope><name>test_random_collision</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" prot="public" virt="non-virtual"><scope>f110_gym::unittest::collision_checks::CollisionTests</scope><name>vertices1</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a4b7f88b6f9a80c8bef02a1856ac068de" prot="public" virt="non-virtual"><scope>f110_gym::unittest::collision_checks::CollisionTests</scope><name>width</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.xml b/docs/xml/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.xml
deleted file mode 100644
index 7c7b3e1f..00000000
--- a/docs/xml/classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test.xml
+++ /dev/null
@@ -1,372 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::unittest::dynamics_test::DynamicsTest</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">TestCase</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::mu</definition>
-        <argsstring></argsstring>
-        <name>mu</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="204" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="204" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::C_Sf</definition>
-        <argsstring></argsstring>
-        <name>C_Sf</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="205" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="205" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::C_Sr</definition>
-        <argsstring></argsstring>
-        <name>C_Sr</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="206" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="206" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::lf</definition>
-        <argsstring></argsstring>
-        <name>lf</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="207" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="207" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::lr</definition>
-        <argsstring></argsstring>
-        <name>lr</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="208" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="208" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::h</definition>
-        <argsstring></argsstring>
-        <name>h</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="209" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="209" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::m</definition>
-        <argsstring></argsstring>
-        <name>m</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="210" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="210" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::I</definition>
-        <argsstring></argsstring>
-        <name>I</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="211" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="211" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::s_min</definition>
-        <argsstring></argsstring>
-        <name>s_min</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="214" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="214" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::s_max</definition>
-        <argsstring></argsstring>
-        <name>s_max</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="215" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="215" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::sv_min</definition>
-        <argsstring></argsstring>
-        <name>sv_min</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="216" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="216" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::sv_max</definition>
-        <argsstring></argsstring>
-        <name>sv_max</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="217" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="217" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::v_min</definition>
-        <argsstring></argsstring>
-        <name>v_min</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="220" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="220" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::v_max</definition>
-        <argsstring></argsstring>
-        <name>v_max</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="221" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="221" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::v_switch</definition>
-        <argsstring></argsstring>
-        <name>v_switch</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="222" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="222" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.dynamics_test.DynamicsTest::a_max</definition>
-        <argsstring></argsstring>
-        <name>a_max</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="223" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="223" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ae9a07469d0654888251d3bf6e76b6b49" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.DynamicsTest.setUp</definition>
-        <argsstring>(self)</argsstring>
-        <name>setUp</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="202" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="202" bodyend="224"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a084bad82c8b5d2879bcdd84ff4ddfbcb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.DynamicsTest.test_derivatives</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_derivatives</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="225" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="225" bodyend="250"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a2119ee12155d35d32dfdff6ef9948635" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.DynamicsTest.test_zeroinit_roll</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_zeroinit_roll</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="251" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="251" bodyend="282"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7be24bdc75f206643e35081eae280120" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.DynamicsTest.test_zeroinit_dec</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_zeroinit_dec</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="283" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="283" bodyend="319"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aaf4fa412b0c16cb6bc89dd58b36d8e44" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.DynamicsTest.test_zeroinit_acc</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_zeroinit_acc</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="320" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="320" bodyend="357"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a386d5445884c46ecec8205ada9a3a185" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.DynamicsTest.test_zeroinit_rollleft</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_zeroinit_rollleft</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="358" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="358" bodyend="394"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-      <node id="1">
-        <label>f110_gym.unittest.dynamics_test.DynamicsTest</label>
-        <link refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="2">
-        <label>TestCase</label>
-      </node>
-      <node id="1">
-        <label>f110_gym.unittest.dynamics_test.DynamicsTest</label>
-        <link refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="201" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="201" bodyend="395"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>a_max</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>C_Sf</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>C_Sr</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>h</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>I</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>lf</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>lr</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>m</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>mu</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>s_max</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>s_min</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ae9a07469d0654888251d3bf6e76b6b49" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>setUp</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>sv_max</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>sv_min</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a084bad82c8b5d2879bcdd84ff4ddfbcb" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>test_derivatives</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aaf4fa412b0c16cb6bc89dd58b36d8e44" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>test_zeroinit_acc</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7be24bdc75f206643e35081eae280120" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>test_zeroinit_dec</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a2119ee12155d35d32dfdff6ef9948635" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>test_zeroinit_roll</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a386d5445884c46ecec8205ada9a3a185" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>test_zeroinit_rollleft</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>v_max</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>v_min</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" prot="public" virt="non-virtual"><scope>f110_gym::unittest::dynamics_test::DynamicsTest</scope><name>v_switch</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.xml b/docs/xml/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.xml
deleted file mode 100644
index 869ddbbb..00000000
--- a/docs/xml/classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera.xml
+++ /dev/null
@@ -1,365 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::unittest::pyglet_test::Camera</compoundname>
-    <derivedcompoundref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera" prot="public" virt="non-virtual">f110_gym.unittest.pyglet_test.CenteredCamera</derivedcompoundref>
-      <sectiondef kind="private-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" prot="private" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test.Camera::_window</definition>
-        <argsstring></argsstring>
-        <name>_window</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="16" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="16" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" prot="private" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test.Camera::_zoom</definition>
-        <argsstring></argsstring>
-        <name>_zoom</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="22" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="22" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a81dae02fbeac037bfcba9afeeac9a0ca" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test.Camera::scroll_speed</definition>
-        <argsstring></argsstring>
-        <name>scroll_speed</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="17" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="17" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa8efeba81038cc57db534857a61b0d4b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test.Camera::max_zoom</definition>
-        <argsstring></argsstring>
-        <name>max_zoom</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="18" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="18" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa5e9b9a6cca61ed9f997cd23ed1ea8b6" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test.Camera::min_zoom</definition>
-        <argsstring></argsstring>
-        <name>min_zoom</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="19" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="19" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test.Camera::offset_x</definition>
-        <argsstring></argsstring>
-        <name>offset_x</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="20" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="20" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test.Camera::offset_y</definition>
-        <argsstring></argsstring>
-        <name>offset_y</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="21" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="21" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa972fc123abe2bc9f8dd5bdba0025f20" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.__init__</definition>
-        <argsstring>(self, pyglet.window.Window window, scroll_speed=1, min_zoom=1, max_zoom=4)</argsstring>
-        <name>__init__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>pyglet.window.Window</type>
-          <declname>window</declname>
-        </param>
-        <param>
-          <type>scroll_speed</type>
-          <defname>scroll_speed</defname>
-          <defval>1</defval>
-        </param>
-        <param>
-          <type>min_zoom</type>
-          <defname>min_zoom</defname>
-          <defval>1</defval>
-        </param>
-        <param>
-          <type>max_zoom</type>
-          <defname>max_zoom</defname>
-          <defval>4</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="14" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="14" bodyend="23"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1ab01149f5d7b76ca39aa8c2604c8a65db" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.zoom</definition>
-        <argsstring>(self)</argsstring>
-        <name>zoom</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="25" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="25" bodyend="27"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a6f0bedfc6f5801b398d5ce537d70c059" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.zoom</definition>
-        <argsstring>(self, value)</argsstring>
-        <name>zoom</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>value</type>
-          <defname>value</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Here we set zoom, clamp value to minimum of min_zoom and max of max_zoom.</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="29" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="29" bodyend="32"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a3d2948dc5b1a9d2a6c597a2850ac989b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.position</definition>
-        <argsstring>(self)</argsstring>
-        <name>position</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Query the current offset.</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="34" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="34" bodyend="37"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1ac8e5a2d90df8cd68463746be6e65bee8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.position</definition>
-        <argsstring>(self, value)</argsstring>
-        <name>position</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>value</type>
-          <defname>value</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Set the scroll offset directly.</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="39" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="39" bodyend="42"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aab35e83f0748c949b8e3a8414097d193" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.move</definition>
-        <argsstring>(self, axis_x, axis_y)</argsstring>
-        <name>move</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>axis_x</type>
-          <defname>axis_x</defname>
-        </param>
-        <param>
-          <type>axis_y</type>
-          <defname>axis_y</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Move axis direction with scroll_speed.
-    Example: Move left -&gt; move(-1, 0)</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="43" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="43" bodyend="49"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a1b32a1178f97029e2833a1f127a2c114" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.begin</definition>
-        <argsstring>(self)</argsstring>
-        <name>begin</name>
-        <reimplementedby refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera_1ae864ffed52c4415558b3bd15ad42c87a">begin</reimplementedby>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="50" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="50" bodyend="59"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a30b46cfaa38e4956b06bfe9e98c3cbe3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.end</definition>
-        <argsstring>(self)</argsstring>
-        <name>end</name>
-        <reimplementedby refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera_1a37149e6bf7b5e551f38201696d01794e">end</reimplementedby>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="60" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="60" bodyend="70"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a7823f2901412f9075d7de211c14ad534" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.__enter__</definition>
-        <argsstring>(self)</argsstring>
-        <name>__enter__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="71" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="71" bodyend="73"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a05542a21a9fa4adc9bcac8c77d37c2ad" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.Camera.__exit__</definition>
-        <argsstring>(self, exception_type, exception_value, traceback)</argsstring>
-        <name>__exit__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>exception_type</type>
-          <defname>exception_type</defname>
-        </param>
-        <param>
-          <type>exception_value</type>
-          <defname>exception_value</defname>
-        </param>
-        <param>
-          <type>traceback</type>
-          <defname>traceback</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="74" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="74" bodyend="77"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-<para><verbatim>A simple 2D camera that contains the speed and offset.</verbatim> </para>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.unittest.pyglet_test.Camera</label>
-        <link refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"/>
-      </node>
-      <node id="2">
-        <label>f110_gym.unittest.pyglet_test.CenteredCamera</label>
-        <link refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera"/>
-        <childnode refid="1" relation="public-inheritance">
-        </childnode>
-      </node>
-    </inheritancegraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="11" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="11" bodyend="78"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a7823f2901412f9075d7de211c14ad534" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>__enter__</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a05542a21a9fa4adc9bcac8c77d37c2ad" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>__exit__</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa972fc123abe2bc9f8dd5bdba0025f20" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" prot="private" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>_window</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" prot="private" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>_zoom</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a1b32a1178f97029e2833a1f127a2c114" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>begin</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a30b46cfaa38e4956b06bfe9e98c3cbe3" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>end</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa8efeba81038cc57db534857a61b0d4b" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>max_zoom</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa5e9b9a6cca61ed9f997cd23ed1ea8b6" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>min_zoom</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aab35e83f0748c949b8e3a8414097d193" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>move</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>offset_x</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>offset_y</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a3d2948dc5b1a9d2a6c597a2850ac989b" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>position</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1ac8e5a2d90df8cd68463746be6e65bee8" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>position</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a81dae02fbeac037bfcba9afeeac9a0ca" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>scroll_speed</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1ab01149f5d7b76ca39aa8c2604c8a65db" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>zoom</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a6f0bedfc6f5801b398d5ce537d70c059" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::Camera</scope><name>zoom</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.xml b/docs/xml/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.xml
deleted file mode 100644
index 3b444eb8..00000000
--- a/docs/xml/classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::unittest::pyglet_test::CenteredCamera</compoundname>
-    <basecompoundref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" prot="public" virt="non-virtual">f110_gym.unittest.pyglet_test.Camera</basecompoundref>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera_1ae864ffed52c4415558b3bd15ad42c87a" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.CenteredCamera.begin</definition>
-        <argsstring>(self)</argsstring>
-        <name>begin</name>
-        <reimplements refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a1b32a1178f97029e2833a1f127a2c114">begin</reimplements>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="81" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="81" bodyend="88"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera_1a37149e6bf7b5e551f38201696d01794e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.CenteredCamera.end</definition>
-        <argsstring>(self)</argsstring>
-        <name>end</name>
-        <reimplements refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a30b46cfaa38e4956b06bfe9e98c3cbe3">end</reimplements>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="89" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="89" bodyend="98"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-<para><verbatim>A simple 2D camera class. 0, 0 will be the center of the screen, as opposed to the bottom left.</verbatim> </para>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="2">
-        <label>f110_gym.unittest.pyglet_test.Camera</label>
-        <link refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"/>
-      </node>
-      <node id="1">
-        <label>f110_gym.unittest.pyglet_test.CenteredCamera</label>
-        <link refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="2">
-        <label>f110_gym.unittest.pyglet_test.Camera</label>
-        <link refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera"/>
-      </node>
-      <node id="1">
-        <label>f110_gym.unittest.pyglet_test.CenteredCamera</label>
-        <link refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="78" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="78" bodyend="99"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a7823f2901412f9075d7de211c14ad534" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>__enter__</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a05542a21a9fa4adc9bcac8c77d37c2ad" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>__exit__</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa972fc123abe2bc9f8dd5bdba0025f20" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera_1ae864ffed52c4415558b3bd15ad42c87a" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>begin</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera_1a37149e6bf7b5e551f38201696d01794e" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>end</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa8efeba81038cc57db534857a61b0d4b" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>max_zoom</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa5e9b9a6cca61ed9f997cd23ed1ea8b6" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>min_zoom</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aab35e83f0748c949b8e3a8414097d193" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>move</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>offset_x</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>offset_y</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a3d2948dc5b1a9d2a6c597a2850ac989b" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>position</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1ac8e5a2d90df8cd68463746be6e65bee8" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>position</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a81dae02fbeac037bfcba9afeeac9a0ca" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>scroll_speed</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1ab01149f5d7b76ca39aa8c2604c8a65db" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>zoom</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a6f0bedfc6f5801b398d5ce537d70c059" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test::CenteredCamera</scope><name>zoom</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.xml b/docs/xml/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.xml
deleted file mode 100644
index ece91a9e..00000000
--- a/docs/xml/classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app.xml
+++ /dev/null
@@ -1,336 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::unittest::pyglet_test_camera::App</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">Window</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1aaca4f571369fc95e45355634d41fc24e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test_camera.App::left</definition>
-        <argsstring></argsstring>
-        <name>left</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="18" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="18" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a9c3fdc6ea9bbe0407668091c4b6effb5" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test_camera.App::right</definition>
-        <argsstring></argsstring>
-        <name>right</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="19" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="19" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a155af5e767867bdf910d8b0936219b5a" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test_camera.App::bottom</definition>
-        <argsstring></argsstring>
-        <name>bottom</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="20" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="20" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2145d5c781e3f33fefd7b46af2fadd69" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test_camera.App::top</definition>
-        <argsstring></argsstring>
-        <name>top</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="21" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="21" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test_camera.App::zoom_level</definition>
-        <argsstring></argsstring>
-        <name>zoom_level</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="22" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="22" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1af92e414bc48f782207e5891ea82e3ad1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test_camera.App::zoomed_width</definition>
-        <argsstring></argsstring>
-        <name>zoomed_width</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="23" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="23" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2f88138801a909d8826f61792745409f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.pyglet_test_camera.App::zoomed_height</definition>
-        <argsstring></argsstring>
-        <name>zoomed_height</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="24" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="24" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a199a531d847f94eb9d32b481c2af26e1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test_camera.App.__init__</definition>
-        <argsstring>(self, width, height, *args, **kwargs)</argsstring>
-        <name>__init__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>*</type>
-          <declname>args</declname>
-        </param>
-        <param>
-          <type>**</type>
-          <declname>kwargs</declname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="10" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="10" bodyend="25"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1abadceb7d7c110cfa99df741b6ccae7e0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test_camera.App.init_gl</definition>
-        <argsstring>(self, width, height)</argsstring>
-        <name>init_gl</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="26" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="26" bodyend="41"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a4d55c63110f9bd78721a57e88e199cd8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test_camera.App.on_resize</definition>
-        <argsstring>(self, width, height)</argsstring>
-        <name>on_resize</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="42" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="42" bodyend="60"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1ab20811f9348c1eb9beb45c95e6b1ba42" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test_camera.App.on_mouse_drag</definition>
-        <argsstring>(self, x, y, dx, dy, buttons, modifiers)</argsstring>
-        <name>on_mouse_drag</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>dx</type>
-          <defname>dx</defname>
-        </param>
-        <param>
-          <type>dy</type>
-          <defname>dy</defname>
-        </param>
-        <param>
-          <type>buttons</type>
-          <defname>buttons</defname>
-        </param>
-        <param>
-          <type>modifiers</type>
-          <defname>modifiers</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="61" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="61" bodyend="67"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a3846658fe03460fa2f057e5b954fc28f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test_camera.App.on_mouse_scroll</definition>
-        <argsstring>(self, x, y, dx, dy)</argsstring>
-        <name>on_mouse_scroll</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>dx</type>
-          <defname>dx</defname>
-        </param>
-        <param>
-          <type>dy</type>
-          <defname>dy</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="68" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="68" bodyend="91"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1abaf8b849008238cb0c17901b87329a71" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test_camera.App.on_draw</definition>
-        <argsstring>(self)</argsstring>
-        <name>on_draw</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="92" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="92" bodyend="126"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a4478fc4a6666cf2d5cb5a3d574250404" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test_camera.App.run</definition>
-        <argsstring>(self)</argsstring>
-        <name>run</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="127" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="127" bodyend="131"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.unittest.pyglet_test_camera.App</label>
-        <link refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>pyglet::window::Window</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.unittest.pyglet_test_camera.App</label>
-        <link refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>pyglet::window::Window</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="8" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="8" bodyend="131"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a199a531d847f94eb9d32b481c2af26e1" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a155af5e767867bdf910d8b0936219b5a" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>bottom</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1abadceb7d7c110cfa99df741b6ccae7e0" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>init_gl</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1aaca4f571369fc95e45355634d41fc24e" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>left</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1abaf8b849008238cb0c17901b87329a71" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>on_draw</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1ab20811f9348c1eb9beb45c95e6b1ba42" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>on_mouse_drag</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a3846658fe03460fa2f057e5b954fc28f" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>on_mouse_scroll</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a4d55c63110f9bd78721a57e88e199cd8" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>on_resize</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a9c3fdc6ea9bbe0407668091c4b6effb5" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>right</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a4478fc4a6666cf2d5cb5a3d574250404" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>run</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2145d5c781e3f33fefd7b46af2fadd69" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>top</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>zoom_level</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2f88138801a909d8826f61792745409f" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>zoomed_height</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1af92e414bc48f782207e5891ea82e3ad1" prot="public" virt="non-virtual"><scope>f110_gym::unittest::pyglet_test_camera::App</scope><name>zoomed_width</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.xml b/docs/xml/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.xml
deleted file mode 100644
index d5de8118..00000000
--- a/docs/xml/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d.xml
+++ /dev/null
@@ -1,482 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::unittest::scan_sim::ScanSimulator2D</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">object</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab651a44dfee70e7f2c2c8389b95e6e51" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::num_beams</definition>
-        <argsstring></argsstring>
-        <name>num_beams</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="201" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="201" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a675555c29ace0ea5ddea92835965e654" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::fov</definition>
-        <argsstring></argsstring>
-        <name>fov</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="202" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="202" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af5f188b7150482f5518461af89d61fe7" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::std_dev</definition>
-        <argsstring></argsstring>
-        <name>std_dev</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="203" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="203" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ae0b3e8aec78d765f2c64fc274b9e447f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::eps</definition>
-        <argsstring></argsstring>
-        <name>eps</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="204" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="204" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1aad699977c807e3ad150b6dac8b2bb1a0" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::theta_dis</definition>
-        <argsstring></argsstring>
-        <name>theta_dis</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="205" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="205" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a510e60d159e716bcd62b54dac8a69066" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::max_range</definition>
-        <argsstring></argsstring>
-        <name>max_range</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="206" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="206" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7cf918616a14c3d8f76bc359cf2f1c4c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::angle_increment</definition>
-        <argsstring></argsstring>
-        <name>angle_increment</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="207" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="207" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a52a218f72d96e62281f00e3aa01f6616" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::theta_index_increment</definition>
-        <argsstring></argsstring>
-        <name>theta_index_increment</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="208" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="208" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a6fb0a8e58e42af2934c5f3e35ab3488e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::orig_c</definition>
-        <argsstring></argsstring>
-        <name>orig_c</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="209" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="209" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac1a4dcaf191c8308accbcf86999efd5c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::orig_s</definition>
-        <argsstring></argsstring>
-        <name>orig_s</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="210" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="210" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a49263002630bb21764217caa6c3314b7" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::orig_x</definition>
-        <argsstring></argsstring>
-        <name>orig_x</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="211" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="211" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab6b56af3b1396d900b097d4e0463941f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::orig_y</definition>
-        <argsstring></argsstring>
-        <name>orig_y</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="212" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="212" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7b15deec5d81ddfa0c6297523cdfc295" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::map_height</definition>
-        <argsstring></argsstring>
-        <name>map_height</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="213" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="213" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac5acff270a2a66d20a8bb514001cc3c4" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::map_width</definition>
-        <argsstring></argsstring>
-        <name>map_width</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="214" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="214" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a935128be3649ba7d230f63bf7480bfa1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::map_resolution</definition>
-        <argsstring></argsstring>
-        <name>map_resolution</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="215" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="215" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a184ddbfb8a5aaebb9c523625f716ad7c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::dt</definition>
-        <argsstring></argsstring>
-        <name>dt</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="216" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="216" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1afcb7de24911c98dd85473247c7d4af17" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::rng</definition>
-        <argsstring></argsstring>
-        <name>rng</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="219" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="219" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af2c50f973462f4717c9c02d6c8d47004" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::sines</definition>
-        <argsstring></argsstring>
-        <name>sines</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="223" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="223" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a578ecb22495b2d227517b8a54a505c7e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::cosines</definition>
-        <argsstring></argsstring>
-        <name>cosines</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="224" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="224" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::map_img</definition>
-        <argsstring></argsstring>
-        <name>map_img</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="242" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="242" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a62fb5e7c6a7060685208643a265aaa95" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanSimulator2D::origin</definition>
-        <argsstring></argsstring>
-        <name>origin</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="257" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="257" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1aaa079c96c4018da2b7e80388bcd2d417" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.ScanSimulator2D.__init__</definition>
-        <argsstring>(self, num_beams, fov, std_dev=0.01, eps=0.0001, theta_dis=2000, max_range=30.0, seed=123)</argsstring>
-        <name>__init__</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>num_beams</type>
-          <defname>num_beams</defname>
-        </param>
-        <param>
-          <type>fov</type>
-          <defname>fov</defname>
-        </param>
-        <param>
-          <type>std_dev</type>
-          <defname>std_dev</defname>
-          <defval>0.01</defval>
-        </param>
-        <param>
-          <type>eps</type>
-          <defname>eps</defname>
-          <defval>0.0001</defval>
-        </param>
-        <param>
-          <type>theta_dis</type>
-          <defname>theta_dis</defname>
-          <defval>2000</defval>
-        </param>
-        <param>
-          <type>max_range</type>
-          <defname>max_range</defname>
-          <defval>30.0</defval>
-        </param>
-        <param>
-          <type>seed</type>
-          <defname>seed</defname>
-          <defval>123</defval>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="199" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="199" bodyend="225"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a00925f5100ae8b2e556154e8935ea86e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.ScanSimulator2D.set_map</definition>
-        <argsstring>(self, map_path, map_ext)</argsstring>
-        <name>set_map</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>map_path</type>
-          <defname>map_path</defname>
-        </param>
-        <param>
-          <type>map_ext</type>
-          <defname>map_ext</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Set the bitmap of the scan simulator by path
-
-    Args:
-map_path (str): path to the map yaml file
-map_ext (str): extension (image type) of the map image
-
-    Returns:
-flag (bool): if image reading and loading is successful
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="226" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="226" bodyend="271"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a038a0fc7e42df7827c175fdb3755f2c4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.ScanSimulator2D.scan</definition>
-        <argsstring>(self, pose)</argsstring>
-        <name>scan</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Perform simulated 2D scan by pose on the given map
-
-    Args:
-pose (numpy.ndarray (3, )): pose of the scan frame (x, y, theta)
-
-    Returns:
-scan (numpy.ndarray (n, )): data array of the laserscan, n=num_beams
-
-    Raises:
-ValueError: when scan is called before a map is set
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="272" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="272" bodyend="291"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a492d1949d030fb6b8665f399db5cdb4d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.ScanSimulator2D.get_increment</definition>
-        <argsstring>(self)</argsstring>
-        <name>get_increment</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="292" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="292" bodyend="305"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-<para><verbatim>2D LIDAR scan simulator class
-
-Init params:
-    num_beams (int): number of beams in the scan
-    fov (float): field of view of the laser scan
-    std_dev (float, default=0.01): standard deviation of the generated whitenoise in the scan
-    eps (float, default=0.0001): ray tracing iteration termination condition
-    theta_dis (int, default=2000): number of steps to discretize the angles between 0 and 2pi for look up
-    max_range (float, default=30.0): maximum range of the laser
-    seed (int, default=123): seed for random number generator for the whitenoise in scan
-</verbatim> </para>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.unittest.scan_sim.ScanSimulator2D</label>
-        <link refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>object</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.unittest.scan_sim.ScanSimulator2D</label>
-        <link refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>object</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="185" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="185" bodyend="306"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1aaa079c96c4018da2b7e80388bcd2d417" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>__init__</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7cf918616a14c3d8f76bc359cf2f1c4c" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>angle_increment</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a578ecb22495b2d227517b8a54a505c7e" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>cosines</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a184ddbfb8a5aaebb9c523625f716ad7c" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>dt</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ae0b3e8aec78d765f2c64fc274b9e447f" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>eps</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a675555c29ace0ea5ddea92835965e654" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>fov</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a492d1949d030fb6b8665f399db5cdb4d" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>get_increment</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7b15deec5d81ddfa0c6297523cdfc295" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>map_height</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>map_img</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a935128be3649ba7d230f63bf7480bfa1" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>map_resolution</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac5acff270a2a66d20a8bb514001cc3c4" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>map_width</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a510e60d159e716bcd62b54dac8a69066" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>max_range</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab651a44dfee70e7f2c2c8389b95e6e51" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>num_beams</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a6fb0a8e58e42af2934c5f3e35ab3488e" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>orig_c</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac1a4dcaf191c8308accbcf86999efd5c" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>orig_s</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a49263002630bb21764217caa6c3314b7" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>orig_x</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab6b56af3b1396d900b097d4e0463941f" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>orig_y</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a62fb5e7c6a7060685208643a265aaa95" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>origin</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1afcb7de24911c98dd85473247c7d4af17" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>rng</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a038a0fc7e42df7827c175fdb3755f2c4" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>scan</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a00925f5100ae8b2e556154e8935ea86e" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>set_map</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af2c50f973462f4717c9c02d6c8d47004" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>sines</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af5f188b7150482f5518461af89d61fe7" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>std_dev</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1aad699977c807e3ad150b6dac8b2bb1a0" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>theta_dis</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a52a218f72d96e62281f00e3aa01f6616" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanSimulator2D</scope><name>theta_index_increment</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.xml b/docs/xml/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.xml
deleted file mode 100644
index a64a1117..00000000
--- a/docs/xml/classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests" kind="class" language="Python" prot="public">
-    <compoundname>f110_gym::unittest::scan_sim::ScanTests</compoundname>
-    <basecompoundref prot="public" virt="non-virtual">TestCase</basecompoundref>
-      <sectiondef kind="public-attrib">
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanTests::num_beams</definition>
-        <argsstring></argsstring>
-        <name>num_beams</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="309" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="309" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanTests::fov</definition>
-        <argsstring></argsstring>
-        <name>fov</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="310" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="310" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanTests::num_test</definition>
-        <argsstring></argsstring>
-        <name>num_test</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="312" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="312" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1ad63cebbd6245dfa62dd57168287598b1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanTests::test_poses</definition>
-        <argsstring></argsstring>
-        <name>test_poses</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="313" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="313" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a44186810ed5ab4fecb230b7a842d294a" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanTests::berlin_scan</definition>
-        <argsstring></argsstring>
-        <name>berlin_scan</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="318" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="318" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a9c595846d38b4691fd34352eea08cdcf" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.unittest.scan_sim.ScanTests::skirk_scan</definition>
-        <argsstring></argsstring>
-        <name>skirk_scan</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="319" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="319" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="public-func">
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a24b9cbdb8f7d0ed8cea83067baf28c5e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.ScanTests.setUp</definition>
-        <argsstring>(self)</argsstring>
-        <name>setUp</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="307" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="307" bodyend="320"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1adef88a30b7aa6e2f3daa6ffecd979562" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.ScanTests.test_map_berlin</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_map_berlin</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="321" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="321" bodyend="343"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1aa76985ccd5313eaf5c8e7cc5892ca155" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.ScanTests.test_map_skirk</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_map_skirk</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="344" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="344" bodyend="367"/>
-      </memberdef>
-      <memberdef kind="function" id="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a1133ea3a82cffacc03e22a273d6e8cae" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.ScanTests.test_fps</definition>
-        <argsstring>(self)</argsstring>
-        <name>test_fps</name>
-        <param>
-          <type>self</type>
-          <defname>self</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="368" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="368" bodyend="386"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <inheritancegraph>
-      <node id="1">
-        <label>f110_gym.unittest.scan_sim.ScanTests</label>
-        <link refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>unittest::TestCase</label>
-      </node>
-    </inheritancegraph>
-    <collaborationgraph>
-      <node id="1">
-        <label>f110_gym.unittest.scan_sim.ScanTests</label>
-        <link refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests"/>
-        <childnode refid="2" relation="public-inheritance">
-        </childnode>
-      </node>
-      <node id="2">
-        <label>unittest::TestCase</label>
-      </node>
-    </collaborationgraph>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="306" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="306" bodyend="387"/>
-    <listofallmembers>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a44186810ed5ab4fecb230b7a842d294a" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>berlin_scan</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>fov</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>num_beams</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>num_test</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a24b9cbdb8f7d0ed8cea83067baf28c5e" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>setUp</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a9c595846d38b4691fd34352eea08cdcf" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>skirk_scan</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a1133ea3a82cffacc03e22a273d6e8cae" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>test_fps</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1adef88a30b7aa6e2f3daa6ffecd979562" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>test_map_berlin</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1aa76985ccd5313eaf5c8e7cc5892ca155" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>test_map_skirk</name></member>
-      <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1ad63cebbd6245dfa62dd57168287598b1" prot="public" virt="non-virtual"><scope>f110_gym::unittest::scan_sim::ScanTests</scope><name>test_poses</name></member>
-    </listofallmembers>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/collision__checks_8py.xml b/docs/xml/collision__checks_8py.xml
deleted file mode 100644
index 31b16b0e..00000000
--- a/docs/xml/collision__checks_8py.xml
+++ /dev/null
@@ -1,311 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="collision__checks_8py" kind="file" language="Python">
-    <compoundname>collision_checks.py</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests" prot="public">f110_gym::unittest::collision_checks::CollisionTests</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1collision__checks">f110_gym::unittest::collision_checks</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="26"><highlight class="stringliteral">Prototype<sp/>of<sp/>Utility<sp/>functions<sp/>and<sp/>GJK<sp/>algorithm<sp/>for<sp/>Collision<sp/>checks<sp/>between<sp/>vehicles</highlight></codeline>
-<codeline lineno="27"><highlight class="stringliteral">Originally<sp/>from<sp/>https://github.com/kroitor/gjk.c</highlight></codeline>
-<codeline lineno="28"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="29"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight></codeline>
-<codeline lineno="31"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>numba<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>njit</highlight></codeline>
-<codeline lineno="33"><highlight class="normal"></highlight></codeline>
-<codeline lineno="34"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="35"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">perpendicular(pt):</highlight></codeline>
-<codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="37"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>a<sp/>2-vector&apos;s<sp/>perpendicular<sp/>vector</highlight></codeline>
-<codeline lineno="38"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="39"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="40"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pt<sp/>(np.ndarray,<sp/>(2,)):<sp/>input<sp/>vector</highlight></codeline>
-<codeline lineno="41"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="42"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="43"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pt<sp/>(np.ndarray,<sp/>(2,)):<sp/>perpendicular<sp/>vector</highlight></codeline>
-<codeline lineno="44"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="45"><highlight class="normal"><sp/><sp/><sp/><sp/>temp<sp/>=<sp/>pt[0]</highlight></codeline>
-<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/>pt[0]<sp/>=<sp/>pt[1]</highlight></codeline>
-<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/>pt[1]<sp/>=<sp/>-1*temp</highlight></codeline>
-<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>pt</highlight></codeline>
-<codeline lineno="49"><highlight class="normal"></highlight></codeline>
-<codeline lineno="50"><highlight class="normal"></highlight></codeline>
-<codeline lineno="51"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="52"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">tripleProduct(a,<sp/>b,<sp/>c):</highlight></codeline>
-<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="54"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>triple<sp/>product<sp/>of<sp/>three<sp/>vectors</highlight></codeline>
-<codeline lineno="55"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="56"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="57"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a,<sp/>b,<sp/>c<sp/>(np.ndarray,<sp/>(2,)):<sp/>input<sp/>vectors</highlight></codeline>
-<codeline lineno="58"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="59"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="60"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(np.ndarray,<sp/>(2,)):<sp/>triple<sp/>product</highlight></codeline>
-<codeline lineno="61"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="62"><highlight class="normal"><sp/><sp/><sp/><sp/>ac<sp/>=<sp/>a.dot(c)</highlight></codeline>
-<codeline lineno="63"><highlight class="normal"><sp/><sp/><sp/><sp/>bc<sp/>=<sp/>b.dot(c)</highlight></codeline>
-<codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>b*ac<sp/>-<sp/>a*bc</highlight></codeline>
-<codeline lineno="65"><highlight class="normal"></highlight></codeline>
-<codeline lineno="66"><highlight class="normal"></highlight></codeline>
-<codeline lineno="67"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="68"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">avgPoint(vertices):</highlight></codeline>
-<codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="70"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>the<sp/>average<sp/>point<sp/>of<sp/>multiple<sp/>vertices</highlight></codeline>
-<codeline lineno="71"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="72"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="73"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>the<sp/>vertices<sp/>we<sp/>want<sp/>to<sp/>find<sp/>avg<sp/>on</highlight></codeline>
-<codeline lineno="74"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="75"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="76"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>avg<sp/>(np.ndarray,<sp/>(2,)):<sp/>average<sp/>point<sp/>of<sp/>the<sp/>vertices</highlight></codeline>
-<codeline lineno="77"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>np.sum(vertices,<sp/>axis=0)/vertices.shape[0]</highlight></codeline>
-<codeline lineno="79"><highlight class="normal"></highlight></codeline>
-<codeline lineno="80"><highlight class="normal"></highlight></codeline>
-<codeline lineno="81"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">indexOfFurthestPoint(vertices,<sp/>d):</highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="84"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>the<sp/>index<sp/>of<sp/>the<sp/>vertex<sp/>furthest<sp/>away<sp/>along<sp/>a<sp/>direction<sp/>in<sp/>the<sp/>list<sp/>of<sp/>vertices</highlight></codeline>
-<codeline lineno="85"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="86"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="87"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>the<sp/>vertices<sp/>we<sp/>want<sp/>to<sp/>find<sp/>avg<sp/>on</highlight></codeline>
-<codeline lineno="88"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="89"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="90"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>idx<sp/>(int):<sp/>index<sp/>of<sp/>the<sp/>furthest<sp/>point</highlight></codeline>
-<codeline lineno="91"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>np.argmax(vertices.dot(d))</highlight></codeline>
-<codeline lineno="93"><highlight class="normal"></highlight></codeline>
-<codeline lineno="94"><highlight class="normal"></highlight></codeline>
-<codeline lineno="95"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="96"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">support(vertices1,<sp/>vertices2,<sp/>d):</highlight></codeline>
-<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="98"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Minkowski<sp/>sum<sp/>support<sp/>function<sp/>for<sp/>GJK</highlight></codeline>
-<codeline lineno="99"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="100"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="101"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices1<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>vertices<sp/>of<sp/>the<sp/>first<sp/>body</highlight></codeline>
-<codeline lineno="102"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices2<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>vertices<sp/>of<sp/>the<sp/>second<sp/>body</highlight></codeline>
-<codeline lineno="103"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>(np.ndarray,<sp/>(2,<sp/>)):<sp/>direction<sp/>to<sp/>find<sp/>the<sp/>support<sp/>along</highlight></codeline>
-<codeline lineno="104"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="105"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="106"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>support<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>Minkowski<sp/>sum</highlight></codeline>
-<codeline lineno="107"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/>i<sp/>=<sp/>indexOfFurthestPoint(vertices1,<sp/>d)</highlight></codeline>
-<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/>j<sp/>=<sp/>indexOfFurthestPoint(vertices2,<sp/>-d)</highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>vertices1[i]<sp/>-<sp/>vertices2[j]</highlight></codeline>
-<codeline lineno="111"><highlight class="normal"></highlight></codeline>
-<codeline lineno="112"><highlight class="normal"></highlight></codeline>
-<codeline lineno="113"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="114"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">collision(vertices1,<sp/>vertices2):</highlight></codeline>
-<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="116"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>GJK<sp/>test<sp/>to<sp/>see<sp/>whether<sp/>two<sp/>bodies<sp/>overlap</highlight></codeline>
-<codeline lineno="117"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="118"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="119"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices1<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>vertices<sp/>of<sp/>the<sp/>first<sp/>body</highlight></codeline>
-<codeline lineno="120"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices2<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>vertices<sp/>of<sp/>the<sp/>second<sp/>body</highlight></codeline>
-<codeline lineno="121"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="122"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="123"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>overlap<sp/>(boolean):<sp/>True<sp/>if<sp/>two<sp/>bodies<sp/>collide</highlight></codeline>
-<codeline lineno="124"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/>index<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/>simplex<sp/>=<sp/>np.empty((3,<sp/>2))</highlight></codeline>
-<codeline lineno="127"><highlight class="normal"></highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/>position1<sp/>=<sp/>avgPoint(vertices1)</highlight></codeline>
-<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/>position2<sp/>=<sp/>avgPoint(vertices2)</highlight></codeline>
-<codeline lineno="130"><highlight class="normal"></highlight></codeline>
-<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/>d<sp/>=<sp/>position1<sp/>-<sp/>position2</highlight></codeline>
-<codeline lineno="132"><highlight class="normal"></highlight></codeline>
-<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>d[0]<sp/>==<sp/>0<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>d[1]<sp/>==<sp/>0:</highlight></codeline>
-<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d[0]<sp/>=<sp/>1.0</highlight></codeline>
-<codeline lineno="135"><highlight class="normal"></highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/>a<sp/>=<sp/>support(vertices1,<sp/>vertices2,<sp/>d)</highlight></codeline>
-<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/>simplex[index,<sp/>:]<sp/>=<sp/>a</highlight></codeline>
-<codeline lineno="138"><highlight class="normal"></highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>d.dot(a)<sp/>&lt;=<sp/>0:</highlight></codeline>
-<codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="141"><highlight class="normal"></highlight></codeline>
-<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/>d<sp/>=<sp/>-a</highlight></codeline>
-<codeline lineno="143"><highlight class="normal"></highlight></codeline>
-<codeline lineno="144"><highlight class="normal"><sp/><sp/><sp/><sp/>iter_count<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>iter_count<sp/>&lt;<sp/>1e3:</highlight></codeline>
-<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a<sp/>=<sp/>support(vertices1,<sp/>vertices2,<sp/>d)</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>index<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>simplex[index,<sp/>:]<sp/>=<sp/>a</highlight></codeline>
-<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>d.dot(a)<sp/>&lt;=<sp/>0:</highlight></codeline>
-<codeline lineno="150"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="151"><highlight class="normal"></highlight></codeline>
-<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ao<sp/>=<sp/>-a</highlight></codeline>
-<codeline lineno="153"><highlight class="normal"></highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>index<sp/>&lt;<sp/>2:</highlight></codeline>
-<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>b<sp/>=<sp/>simplex[0,<sp/>:]</highlight></codeline>
-<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ab<sp/>=<sp/>b-a</highlight></codeline>
-<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>=<sp/>tripleProduct(ab,<sp/>ao,<sp/>ab)</highlight></codeline>
-<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>np.linalg.norm(d)<sp/>&lt;<sp/>1e-10:</highlight></codeline>
-<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>=<sp/>perpendicular(ab)</highlight></codeline>
-<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="161"><highlight class="normal"></highlight></codeline>
-<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>b<sp/>=<sp/>simplex[1,<sp/>:]</highlight></codeline>
-<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>c<sp/>=<sp/>simplex[0,<sp/>:]</highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ab<sp/>=<sp/>b-a</highlight></codeline>
-<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ac<sp/>=<sp/>c-a</highlight></codeline>
-<codeline lineno="166"><highlight class="normal"></highlight></codeline>
-<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>acperp<sp/>=<sp/>tripleProduct(ab,<sp/>ac,<sp/>ac)</highlight></codeline>
-<codeline lineno="168"><highlight class="normal"></highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>acperp.dot(ao)<sp/>&gt;=<sp/>0:</highlight></codeline>
-<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>=<sp/>acperp</highlight></codeline>
-<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>abperp<sp/>=<sp/>tripleProduct(ac,<sp/>ab,<sp/>ab)</highlight></codeline>
-<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>abperp.dot(ao)<sp/>&lt;<sp/>0:</highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>simplex[0,<sp/>:]<sp/>=<sp/>simplex[1,<sp/>:]</highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>=<sp/>abperp</highlight></codeline>
-<codeline lineno="177"><highlight class="normal"></highlight></codeline>
-<codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>simplex[1,<sp/>:]<sp/>=<sp/>simplex[2,<sp/>:]</highlight></codeline>
-<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>index<sp/>-=<sp/>1</highlight></codeline>
-<codeline lineno="180"><highlight class="normal"></highlight></codeline>
-<codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>iter_count<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="183"><highlight class="normal"></highlight></codeline>
-<codeline lineno="184"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="185"><highlight class="stringliteral">Utility<sp/>functions<sp/>for<sp/>getting<sp/>vertices<sp/>by<sp/>pose<sp/>and<sp/>shape</highlight></codeline>
-<codeline lineno="186"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="187"><highlight class="normal"></highlight></codeline>
-<codeline lineno="188"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="189"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_trmtx(pose):</highlight></codeline>
-<codeline lineno="190"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="191"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Get<sp/>transformation<sp/>matrix<sp/>of<sp/>vehicle<sp/>frame<sp/>-&gt;<sp/>global<sp/>frame</highlight></codeline>
-<codeline lineno="192"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="193"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="194"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(np.ndarray<sp/>(3,<sp/>)):<sp/>current<sp/>pose<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="195"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="196"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>return:</highlight></codeline>
-<codeline lineno="197"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>H<sp/>(np.ndarray<sp/>(4,<sp/>4)):<sp/>transformation<sp/>matrix</highlight></codeline>
-<codeline lineno="198"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/>x<sp/>=<sp/>pose[0]</highlight></codeline>
-<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/>y<sp/>=<sp/>pose[1]</highlight></codeline>
-<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/>th<sp/>=<sp/>pose[2]</highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/>cos<sp/>=<sp/>np.cos(th)</highlight></codeline>
-<codeline lineno="203"><highlight class="normal"><sp/><sp/><sp/><sp/>sin<sp/>=<sp/>np.sin(th)</highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/>H<sp/>=<sp/>np.array([[cos,<sp/>-sin,<sp/>0.,<sp/>x],<sp/>[sin,<sp/>cos,<sp/>0.,<sp/>y],<sp/>[0.,<sp/>0.,<sp/>1.,<sp/>0.],<sp/>[0.,<sp/>0.,<sp/>0.,<sp/>1.]])</highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>H</highlight></codeline>
-<codeline lineno="206"><highlight class="normal"></highlight></codeline>
-<codeline lineno="207"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="208"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_vertices(pose,<sp/>length,<sp/>width):</highlight></codeline>
-<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="210"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Utility<sp/>function<sp/>to<sp/>return<sp/>vertices<sp/>of<sp/>the<sp/>car<sp/>body<sp/>given<sp/>pose<sp/>and<sp/>size</highlight></codeline>
-<codeline lineno="211"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="212"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="213"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(np.ndarray,<sp/>(3,<sp/>)):<sp/>current<sp/>world<sp/>coordinate<sp/>pose<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="214"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>length<sp/>(float):<sp/>car<sp/>length</highlight></codeline>
-<codeline lineno="215"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>width<sp/>(float):<sp/>car<sp/>width</highlight></codeline>
-<codeline lineno="216"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="217"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="218"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>(np.ndarray,<sp/>(4,<sp/>2)):<sp/>corner<sp/>vertices<sp/>of<sp/>the<sp/>vehicle<sp/>body</highlight></codeline>
-<codeline lineno="219"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/>H<sp/>=<sp/>get_trmtx(pose)</highlight></codeline>
-<codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/>rl<sp/>=<sp/>H.dot(np.asarray([[-length/2],[width/2],[0.],<sp/>[1.]])).flatten()</highlight></codeline>
-<codeline lineno="222"><highlight class="normal"><sp/><sp/><sp/><sp/>rr<sp/>=<sp/>H.dot(np.asarray([[-length/2],[-width/2],[0.],<sp/>[1.]])).flatten()</highlight></codeline>
-<codeline lineno="223"><highlight class="normal"><sp/><sp/><sp/><sp/>fl<sp/>=<sp/>H.dot(np.asarray([[length/2],[width/2],[0.],<sp/>[1.]])).flatten()</highlight></codeline>
-<codeline lineno="224"><highlight class="normal"><sp/><sp/><sp/><sp/>fr<sp/>=<sp/>H.dot(np.asarray([[length/2],[-width/2],[0.],<sp/>[1.]])).flatten()</highlight></codeline>
-<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/>rl<sp/>=<sp/>rl/rl[3]</highlight></codeline>
-<codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/>rr<sp/>=<sp/>rr/rr[3]</highlight></codeline>
-<codeline lineno="227"><highlight class="normal"><sp/><sp/><sp/><sp/>fl<sp/>=<sp/>fl/fl[3]</highlight></codeline>
-<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/>fr<sp/>=<sp/>fr/fr[3]</highlight></codeline>
-<codeline lineno="229"><highlight class="normal"><sp/><sp/><sp/><sp/>vertices<sp/>=<sp/>np.asarray([[rl[0],<sp/>rl[1]],<sp/>[rr[0],<sp/>rr[1]],<sp/>[fr[0],<sp/>fr[1]],<sp/>[fl[0],<sp/>fl[1]]])</highlight></codeline>
-<codeline lineno="230"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>vertices</highlight></codeline>
-<codeline lineno="231"><highlight class="normal"></highlight></codeline>
-<codeline lineno="232"><highlight class="normal"></highlight></codeline>
-<codeline lineno="233"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="234"><highlight class="stringliteral">Unit<sp/>tests<sp/>for<sp/>GJK<sp/>collision<sp/>checks</highlight></codeline>
-<codeline lineno="235"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="236"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="237"><highlight class="normal"></highlight></codeline>
-<codeline lineno="238"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>time</highlight></codeline>
-<codeline lineno="239"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>unittest</highlight></codeline>
-<codeline lineno="240"><highlight class="normal"></highlight></codeline>
-<codeline lineno="241" refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests" kindref="compound">CollisionTests</ref>(unittest.TestCase):</highlight></codeline>
-<codeline lineno="242"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">setUp(self):</highlight></codeline>
-<codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>test<sp/>params</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="244"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>np.random.seed(1234)</highlight></codeline>
-<codeline lineno="245"><highlight class="normal"></highlight></codeline>
-<codeline lineno="246"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Collision<sp/>check<sp/>body</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="247"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kindref="member">vertices1</ref><sp/>=<sp/>np.asarray([[4,11.],[5,5],[9,9],[10,10]])</highlight></codeline>
-<codeline lineno="248"><highlight class="normal"></highlight></codeline>
-<codeline lineno="249"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>car<sp/>size</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="250"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a407fd8ac2cb6e79b84590434fc6d7c6d" kindref="member">length</ref><sp/>=<sp/>0.32</highlight></codeline>
-<codeline lineno="251"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a4b7f88b6f9a80c8bef02a1856ac068de" kindref="member">width</ref><sp/>=<sp/>0.22</highlight></codeline>
-<codeline lineno="252"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="253"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_get_vert(self):</highlight></codeline>
-<codeline lineno="254"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>test_pose<sp/>=<sp/>np.array([2.3,<sp/>6.7,<sp/>0.8])</highlight></codeline>
-<codeline lineno="255"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>=<sp/>get_vertices(test_pose,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a407fd8ac2cb6e79b84590434fc6d7c6d" kindref="member">length</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a4b7f88b6f9a80c8bef02a1856ac068de" kindref="member">width</ref>)</highlight></codeline>
-<codeline lineno="256"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rect<sp/>=<sp/>np.vstack((vertices,<sp/>vertices[0,:]))</highlight></codeline>
-<codeline lineno="257"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="258"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.scatter(test_pose[0],<sp/>test_pose[1],<sp/>c=</highlight><highlight class="stringliteral">&apos;red&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="259"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.plot(rect[:,<sp/>0],<sp/>rect[:,<sp/>1])</highlight></codeline>
-<codeline lineno="260"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.xlim([1,<sp/>4])</highlight></codeline>
-<codeline lineno="261"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.ylim([5,<sp/>8])</highlight></codeline>
-<codeline lineno="262"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.axes().set_aspect(</highlight><highlight class="stringliteral">&apos;equal&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="263"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.show()</highlight></codeline>
-<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(vertices.shape<sp/>==<sp/>(4,<sp/>2))</highlight></codeline>
-<codeline lineno="265"><highlight class="normal"></highlight></codeline>
-<codeline lineno="266"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_get_vert_fps(self):</highlight></codeline>
-<codeline lineno="267"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>test_pose<sp/>=<sp/>np.array([2.3,<sp/>6.7,<sp/>0.8])</highlight></codeline>
-<codeline lineno="268"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="269"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>_<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(1000):</highlight></codeline>
-<codeline lineno="270"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>=<sp/>get_vertices(test_pose,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a407fd8ac2cb6e79b84590434fc6d7c6d" kindref="member">length</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a4b7f88b6f9a80c8bef02a1856ac068de" kindref="member">width</ref>)</highlight></codeline>
-<codeline lineno="271"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>elapsed<sp/>=<sp/>time.time()<sp/>-<sp/>start</highlight></codeline>
-<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fps<sp/>=<sp/>1000/elapsed</highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;get<sp/>vertices<sp/>fps:&apos;</highlight><highlight class="normal">,<sp/>fps)</highlight></codeline>
-<codeline lineno="274"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(fps&gt;500)</highlight></codeline>
-<codeline lineno="275"><highlight class="normal"></highlight></codeline>
-<codeline lineno="276"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_random_collision(self):</highlight></codeline>
-<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>perturb<sp/>the<sp/>body<sp/>by<sp/>a<sp/>small<sp/>amount<sp/>and<sp/>make<sp/>sure<sp/>it<sp/>all<sp/>collides<sp/>with<sp/>the<sp/>original<sp/>body</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="278"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>_<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(1000):</highlight></codeline>
-<codeline lineno="279"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="280"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>b<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="281"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(collision(a,b))</highlight></codeline>
-<codeline lineno="282"><highlight class="normal"></highlight></codeline>
-<codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_fps(self):</highlight></codeline>
-<codeline lineno="284"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>also<sp/>perturb<sp/>the<sp/>body<sp/>but<sp/>mainly<sp/>want<sp/>to<sp/>test<sp/>GJK<sp/>speed</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="285"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="286"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>_<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(1000):</highlight></codeline>
-<codeline lineno="287"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="288"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>b<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collision(a,<sp/>b)</highlight></codeline>
-<codeline lineno="290"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>elapsed<sp/>=<sp/>time.time()<sp/>-<sp/>start</highlight></codeline>
-<codeline lineno="291"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fps<sp/>=<sp/>1000/elapsed</highlight></codeline>
-<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;gjk<sp/>fps:&apos;</highlight><highlight class="normal">,<sp/>fps)</highlight></codeline>
-<codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(fps&gt;500)</highlight></codeline>
-<codeline lineno="294"><highlight class="normal"></highlight></codeline>
-<codeline lineno="295"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>__name__<sp/>==<sp/></highlight><highlight class="stringliteral">&apos;__main__&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="296"><highlight class="normal"><sp/><sp/><sp/><sp/>unittest.main()</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/collision__models_8py.xml b/docs/xml/collision__models_8py.xml
deleted file mode 100644
index 1c22cbab..00000000
--- a/docs/xml/collision__models_8py.xml
+++ /dev/null
@@ -1,354 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="collision__models_8py" kind="file" language="Python">
-    <compoundname>collision_models.py</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests" prot="public">f110_gym::envs::collision_models::CollisionTests</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1collision__models">f110_gym::envs::collision_models</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="26"><highlight class="stringliteral">Prototype<sp/>of<sp/>Utility<sp/>functions<sp/>and<sp/>GJK<sp/>algorithm<sp/>for<sp/>Collision<sp/>checks<sp/>between<sp/>vehicles</highlight></codeline>
-<codeline lineno="27"><highlight class="stringliteral">Originally<sp/>from<sp/>https://github.com/kroitor/gjk.c</highlight></codeline>
-<codeline lineno="28"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="29"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight></codeline>
-<codeline lineno="31"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>numba<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>njit</highlight></codeline>
-<codeline lineno="33"><highlight class="normal"></highlight></codeline>
-<codeline lineno="34"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="35"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">perpendicular(pt):</highlight></codeline>
-<codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="37"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>a<sp/>2-vector&apos;s<sp/>perpendicular<sp/>vector</highlight></codeline>
-<codeline lineno="38"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="39"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="40"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pt<sp/>(np.ndarray,<sp/>(2,)):<sp/>input<sp/>vector</highlight></codeline>
-<codeline lineno="41"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="42"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="43"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pt<sp/>(np.ndarray,<sp/>(2,)):<sp/>perpendicular<sp/>vector</highlight></codeline>
-<codeline lineno="44"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="45"><highlight class="normal"><sp/><sp/><sp/><sp/>temp<sp/>=<sp/>pt[0]</highlight></codeline>
-<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/>pt[0]<sp/>=<sp/>pt[1]</highlight></codeline>
-<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/>pt[1]<sp/>=<sp/>-1*temp</highlight></codeline>
-<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>pt</highlight></codeline>
-<codeline lineno="49"><highlight class="normal"></highlight></codeline>
-<codeline lineno="50"><highlight class="normal"></highlight></codeline>
-<codeline lineno="51"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="52"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">tripleProduct(a,<sp/>b,<sp/>c):</highlight></codeline>
-<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="54"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>triple<sp/>product<sp/>of<sp/>three<sp/>vectors</highlight></codeline>
-<codeline lineno="55"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="56"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="57"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a,<sp/>b,<sp/>c<sp/>(np.ndarray,<sp/>(2,)):<sp/>input<sp/>vectors</highlight></codeline>
-<codeline lineno="58"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="59"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="60"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(np.ndarray,<sp/>(2,)):<sp/>triple<sp/>product</highlight></codeline>
-<codeline lineno="61"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="62"><highlight class="normal"><sp/><sp/><sp/><sp/>ac<sp/>=<sp/>a.dot(c)</highlight></codeline>
-<codeline lineno="63"><highlight class="normal"><sp/><sp/><sp/><sp/>bc<sp/>=<sp/>b.dot(c)</highlight></codeline>
-<codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>b*ac<sp/>-<sp/>a*bc</highlight></codeline>
-<codeline lineno="65"><highlight class="normal"></highlight></codeline>
-<codeline lineno="66"><highlight class="normal"></highlight></codeline>
-<codeline lineno="67"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="68"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">avgPoint(vertices):</highlight></codeline>
-<codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="70"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>the<sp/>average<sp/>point<sp/>of<sp/>multiple<sp/>vertices</highlight></codeline>
-<codeline lineno="71"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="72"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="73"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>the<sp/>vertices<sp/>we<sp/>want<sp/>to<sp/>find<sp/>avg<sp/>on</highlight></codeline>
-<codeline lineno="74"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="75"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="76"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>avg<sp/>(np.ndarray,<sp/>(2,)):<sp/>average<sp/>point<sp/>of<sp/>the<sp/>vertices</highlight></codeline>
-<codeline lineno="77"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>np.sum(vertices,<sp/>axis=0)/vertices.shape[0]</highlight></codeline>
-<codeline lineno="79"><highlight class="normal"></highlight></codeline>
-<codeline lineno="80"><highlight class="normal"></highlight></codeline>
-<codeline lineno="81"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">indexOfFurthestPoint(vertices,<sp/>d):</highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="84"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>the<sp/>index<sp/>of<sp/>the<sp/>vertex<sp/>furthest<sp/>away<sp/>along<sp/>a<sp/>direction<sp/>in<sp/>the<sp/>list<sp/>of<sp/>vertices</highlight></codeline>
-<codeline lineno="85"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="86"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="87"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>the<sp/>vertices<sp/>we<sp/>want<sp/>to<sp/>find<sp/>avg<sp/>on</highlight></codeline>
-<codeline lineno="88"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="89"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="90"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>idx<sp/>(int):<sp/>index<sp/>of<sp/>the<sp/>furthest<sp/>point</highlight></codeline>
-<codeline lineno="91"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>np.argmax(vertices.dot(d))</highlight></codeline>
-<codeline lineno="93"><highlight class="normal"></highlight></codeline>
-<codeline lineno="94"><highlight class="normal"></highlight></codeline>
-<codeline lineno="95"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="96"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">support(vertices1,<sp/>vertices2,<sp/>d):</highlight></codeline>
-<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="98"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Minkowski<sp/>sum<sp/>support<sp/>function<sp/>for<sp/>GJK</highlight></codeline>
-<codeline lineno="99"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="100"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="101"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices1<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>vertices<sp/>of<sp/>the<sp/>first<sp/>body</highlight></codeline>
-<codeline lineno="102"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices2<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>vertices<sp/>of<sp/>the<sp/>second<sp/>body</highlight></codeline>
-<codeline lineno="103"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>(np.ndarray,<sp/>(2,<sp/>)):<sp/>direction<sp/>to<sp/>find<sp/>the<sp/>support<sp/>along</highlight></codeline>
-<codeline lineno="104"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="105"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="106"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>support<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>Minkowski<sp/>sum</highlight></codeline>
-<codeline lineno="107"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/>i<sp/>=<sp/>indexOfFurthestPoint(vertices1,<sp/>d)</highlight></codeline>
-<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/>j<sp/>=<sp/>indexOfFurthestPoint(vertices2,<sp/>-d)</highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>vertices1[i]<sp/>-<sp/>vertices2[j]</highlight></codeline>
-<codeline lineno="111"><highlight class="normal"></highlight></codeline>
-<codeline lineno="112"><highlight class="normal"></highlight></codeline>
-<codeline lineno="113"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="114"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">collision(vertices1,<sp/>vertices2):</highlight></codeline>
-<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="116"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>GJK<sp/>test<sp/>to<sp/>see<sp/>whether<sp/>two<sp/>bodies<sp/>overlap</highlight></codeline>
-<codeline lineno="117"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="118"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="119"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices1<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>vertices<sp/>of<sp/>the<sp/>first<sp/>body</highlight></codeline>
-<codeline lineno="120"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices2<sp/>(np.ndarray,<sp/>(n,<sp/>2)):<sp/>vertices<sp/>of<sp/>the<sp/>second<sp/>body</highlight></codeline>
-<codeline lineno="121"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="122"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="123"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>overlap<sp/>(boolean):<sp/>True<sp/>if<sp/>two<sp/>bodies<sp/>collide</highlight></codeline>
-<codeline lineno="124"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/>index<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/>simplex<sp/>=<sp/>np.empty((3,<sp/>2))</highlight></codeline>
-<codeline lineno="127"><highlight class="normal"></highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/>position1<sp/>=<sp/>avgPoint(vertices1)</highlight></codeline>
-<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/>position2<sp/>=<sp/>avgPoint(vertices2)</highlight></codeline>
-<codeline lineno="130"><highlight class="normal"></highlight></codeline>
-<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/>d<sp/>=<sp/>position1<sp/>-<sp/>position2</highlight></codeline>
-<codeline lineno="132"><highlight class="normal"></highlight></codeline>
-<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>d[0]<sp/>==<sp/>0<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>d[1]<sp/>==<sp/>0:</highlight></codeline>
-<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d[0]<sp/>=<sp/>1.0</highlight></codeline>
-<codeline lineno="135"><highlight class="normal"></highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/>a<sp/>=<sp/>support(vertices1,<sp/>vertices2,<sp/>d)</highlight></codeline>
-<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/>simplex[index,<sp/>:]<sp/>=<sp/>a</highlight></codeline>
-<codeline lineno="138"><highlight class="normal"></highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>d.dot(a)<sp/>&lt;=<sp/>0:</highlight></codeline>
-<codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="141"><highlight class="normal"></highlight></codeline>
-<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/>d<sp/>=<sp/>-a</highlight></codeline>
-<codeline lineno="143"><highlight class="normal"></highlight></codeline>
-<codeline lineno="144"><highlight class="normal"><sp/><sp/><sp/><sp/>iter_count<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>iter_count<sp/>&lt;<sp/>1e3:</highlight></codeline>
-<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a<sp/>=<sp/>support(vertices1,<sp/>vertices2,<sp/>d)</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>index<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>simplex[index,<sp/>:]<sp/>=<sp/>a</highlight></codeline>
-<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>d.dot(a)<sp/>&lt;=<sp/>0:</highlight></codeline>
-<codeline lineno="150"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="151"><highlight class="normal"></highlight></codeline>
-<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ao<sp/>=<sp/>-a</highlight></codeline>
-<codeline lineno="153"><highlight class="normal"></highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>index<sp/>&lt;<sp/>2:</highlight></codeline>
-<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>b<sp/>=<sp/>simplex[0,<sp/>:]</highlight></codeline>
-<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ab<sp/>=<sp/>b-a</highlight></codeline>
-<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>=<sp/>tripleProduct(ab,<sp/>ao,<sp/>ab)</highlight></codeline>
-<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>np.linalg.norm(d)<sp/>&lt;<sp/>1e-10:</highlight></codeline>
-<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>=<sp/>perpendicular(ab)</highlight></codeline>
-<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="161"><highlight class="normal"></highlight></codeline>
-<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>b<sp/>=<sp/>simplex[1,<sp/>:]</highlight></codeline>
-<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>c<sp/>=<sp/>simplex[0,<sp/>:]</highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ab<sp/>=<sp/>b-a</highlight></codeline>
-<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ac<sp/>=<sp/>c-a</highlight></codeline>
-<codeline lineno="166"><highlight class="normal"></highlight></codeline>
-<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>acperp<sp/>=<sp/>tripleProduct(ab,<sp/>ac,<sp/>ac)</highlight></codeline>
-<codeline lineno="168"><highlight class="normal"></highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>acperp.dot(ao)<sp/>&gt;=<sp/>0:</highlight></codeline>
-<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>=<sp/>acperp</highlight></codeline>
-<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>abperp<sp/>=<sp/>tripleProduct(ac,<sp/>ab,<sp/>ab)</highlight></codeline>
-<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>abperp.dot(ao)<sp/>&lt;<sp/>0:</highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>simplex[0,<sp/>:]<sp/>=<sp/>simplex[1,<sp/>:]</highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>=<sp/>abperp</highlight></codeline>
-<codeline lineno="177"><highlight class="normal"></highlight></codeline>
-<codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>simplex[1,<sp/>:]<sp/>=<sp/>simplex[2,<sp/>:]</highlight></codeline>
-<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>index<sp/>-=<sp/>1</highlight></codeline>
-<codeline lineno="180"><highlight class="normal"></highlight></codeline>
-<codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>iter_count<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="183"><highlight class="normal"></highlight></codeline>
-<codeline lineno="184"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="185"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">collision_multiple(vertices):</highlight></codeline>
-<codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="187"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Check<sp/>pair-wise<sp/>collisions<sp/>for<sp/>all<sp/>provided<sp/>vertices</highlight></codeline>
-<codeline lineno="188"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="189"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="190"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>(np.ndarray<sp/>(num_bodies,<sp/>4,<sp/>2)):<sp/>all<sp/>vertices<sp/>for<sp/>checking<sp/>pair-wise<sp/>collision</highlight></codeline>
-<codeline lineno="191"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="192"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="193"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collisions<sp/>(np.ndarray<sp/>(num_vertices,<sp/>)):<sp/>whether<sp/>each<sp/>body<sp/>is<sp/>in<sp/>collision</highlight></codeline>
-<codeline lineno="194"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collision_idx<sp/>(np.ndarray<sp/>(num_vertices,<sp/>)):<sp/>which<sp/>index<sp/>of<sp/>other<sp/>body<sp/>is<sp/>each<sp/>index&apos;s<sp/>body<sp/>is<sp/>in<sp/>collision,<sp/>-1<sp/>if<sp/>not<sp/>in<sp/>collision</highlight></codeline>
-<codeline lineno="195"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="196"><highlight class="normal"><sp/><sp/><sp/><sp/>collisions<sp/>=<sp/>np.zeros((vertices.shape[0],<sp/>))</highlight></codeline>
-<codeline lineno="197"><highlight class="normal"><sp/><sp/><sp/><sp/>collision_idx<sp/>=<sp/>-1<sp/>*<sp/>np.ones((vertices.shape[0],<sp/>))</highlight></codeline>
-<codeline lineno="198"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>looping<sp/>over<sp/>all<sp/>pairs</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(vertices.shape[0]-1):</highlight></codeline>
-<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>j<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(i+1,<sp/>vertices.shape[0]):</highlight></codeline>
-<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>check<sp/>collision</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vi<sp/>=<sp/>np.ascontiguousarray(vertices[i,<sp/>:,<sp/>:])</highlight></codeline>
-<codeline lineno="203"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vj<sp/>=<sp/>np.ascontiguousarray(vertices[j,<sp/>:,<sp/>:])</highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ij_collision<sp/>=<sp/>collision(vi,<sp/>vj)</highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>fill<sp/>in<sp/>results</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>ij_collision:</highlight></codeline>
-<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collisions[i]<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collisions[j]<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collision_idx[i]<sp/>=<sp/>j</highlight></codeline>
-<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collision_idx[j]<sp/>=<sp/>i</highlight></codeline>
-<codeline lineno="211"><highlight class="normal"></highlight></codeline>
-<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>collisions,<sp/>collision_idx</highlight></codeline>
-<codeline lineno="213"><highlight class="normal"></highlight></codeline>
-<codeline lineno="214"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="215"><highlight class="stringliteral">Utility<sp/>functions<sp/>for<sp/>getting<sp/>vertices<sp/>by<sp/>pose<sp/>and<sp/>shape</highlight></codeline>
-<codeline lineno="216"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="217"><highlight class="normal"></highlight></codeline>
-<codeline lineno="218"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="219"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_trmtx(pose):</highlight></codeline>
-<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="221"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Get<sp/>transformation<sp/>matrix<sp/>of<sp/>vehicle<sp/>frame<sp/>-&gt;<sp/>global<sp/>frame</highlight></codeline>
-<codeline lineno="222"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="223"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="224"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(np.ndarray<sp/>(3,<sp/>)):<sp/>current<sp/>pose<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="225"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="226"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>return:</highlight></codeline>
-<codeline lineno="227"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>H<sp/>(np.ndarray<sp/>(4,<sp/>4)):<sp/>transformation<sp/>matrix</highlight></codeline>
-<codeline lineno="228"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="229"><highlight class="normal"><sp/><sp/><sp/><sp/>x<sp/>=<sp/>pose[0]</highlight></codeline>
-<codeline lineno="230"><highlight class="normal"><sp/><sp/><sp/><sp/>y<sp/>=<sp/>pose[1]</highlight></codeline>
-<codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/>th<sp/>=<sp/>pose[2]</highlight></codeline>
-<codeline lineno="232"><highlight class="normal"><sp/><sp/><sp/><sp/>cos<sp/>=<sp/>np.cos(th)</highlight></codeline>
-<codeline lineno="233"><highlight class="normal"><sp/><sp/><sp/><sp/>sin<sp/>=<sp/>np.sin(th)</highlight></codeline>
-<codeline lineno="234"><highlight class="normal"><sp/><sp/><sp/><sp/>H<sp/>=<sp/>np.array([[cos,<sp/>-sin,<sp/>0.,<sp/>x],<sp/>[sin,<sp/>cos,<sp/>0.,<sp/>y],<sp/>[0.,<sp/>0.,<sp/>1.,<sp/>0.],<sp/>[0.,<sp/>0.,<sp/>0.,<sp/>1.]])</highlight></codeline>
-<codeline lineno="235"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>H</highlight></codeline>
-<codeline lineno="236"><highlight class="normal"></highlight></codeline>
-<codeline lineno="237"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="238"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_vertices(pose,<sp/>length,<sp/>width):</highlight></codeline>
-<codeline lineno="239"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="240"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Utility<sp/>function<sp/>to<sp/>return<sp/>vertices<sp/>of<sp/>the<sp/>car<sp/>body<sp/>given<sp/>pose<sp/>and<sp/>size</highlight></codeline>
-<codeline lineno="241"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="242"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="243"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(np.ndarray,<sp/>(3,<sp/>)):<sp/>current<sp/>world<sp/>coordinate<sp/>pose<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="244"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>length<sp/>(float):<sp/>car<sp/>length</highlight></codeline>
-<codeline lineno="245"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>width<sp/>(float):<sp/>car<sp/>width</highlight></codeline>
-<codeline lineno="246"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="247"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="248"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>(np.ndarray,<sp/>(4,<sp/>2)):<sp/>corner<sp/>vertices<sp/>of<sp/>the<sp/>vehicle<sp/>body</highlight></codeline>
-<codeline lineno="249"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="250"><highlight class="normal"><sp/><sp/><sp/><sp/>H<sp/>=<sp/>get_trmtx(pose)</highlight></codeline>
-<codeline lineno="251"><highlight class="normal"><sp/><sp/><sp/><sp/>rl<sp/>=<sp/>H.dot(np.asarray([[-length/2],[width/2],[0.],<sp/>[1.]])).flatten()</highlight></codeline>
-<codeline lineno="252"><highlight class="normal"><sp/><sp/><sp/><sp/>rr<sp/>=<sp/>H.dot(np.asarray([[-length/2],[-width/2],[0.],<sp/>[1.]])).flatten()</highlight></codeline>
-<codeline lineno="253"><highlight class="normal"><sp/><sp/><sp/><sp/>fl<sp/>=<sp/>H.dot(np.asarray([[length/2],[width/2],[0.],<sp/>[1.]])).flatten()</highlight></codeline>
-<codeline lineno="254"><highlight class="normal"><sp/><sp/><sp/><sp/>fr<sp/>=<sp/>H.dot(np.asarray([[length/2],[-width/2],[0.],<sp/>[1.]])).flatten()</highlight></codeline>
-<codeline lineno="255"><highlight class="normal"><sp/><sp/><sp/><sp/>rl<sp/>=<sp/>rl/rl[3]</highlight></codeline>
-<codeline lineno="256"><highlight class="normal"><sp/><sp/><sp/><sp/>rr<sp/>=<sp/>rr/rr[3]</highlight></codeline>
-<codeline lineno="257"><highlight class="normal"><sp/><sp/><sp/><sp/>fl<sp/>=<sp/>fl/fl[3]</highlight></codeline>
-<codeline lineno="258"><highlight class="normal"><sp/><sp/><sp/><sp/>fr<sp/>=<sp/>fr/fr[3]</highlight></codeline>
-<codeline lineno="259"><highlight class="normal"><sp/><sp/><sp/><sp/>vertices<sp/>=<sp/>np.asarray([[rl[0],<sp/>rl[1]],<sp/>[rr[0],<sp/>rr[1]],<sp/>[fr[0],<sp/>fr[1]],<sp/>[fl[0],<sp/>fl[1]]])</highlight></codeline>
-<codeline lineno="260"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>vertices</highlight></codeline>
-<codeline lineno="261"><highlight class="normal"></highlight></codeline>
-<codeline lineno="262"><highlight class="normal"></highlight></codeline>
-<codeline lineno="263"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="264"><highlight class="stringliteral">Unit<sp/>tests<sp/>for<sp/>GJK<sp/>collision<sp/>checks</highlight></codeline>
-<codeline lineno="265"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="266"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="267"><highlight class="normal"></highlight></codeline>
-<codeline lineno="268"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>time</highlight></codeline>
-<codeline lineno="269"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>unittest</highlight></codeline>
-<codeline lineno="270"><highlight class="normal"></highlight></codeline>
-<codeline lineno="271" refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests" kindref="compound">CollisionTests</ref>(unittest.TestCase):</highlight></codeline>
-<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">setUp(self):</highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>test<sp/>params</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="274"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>np.random.seed(1234)</highlight></codeline>
-<codeline lineno="275"><highlight class="normal"></highlight></codeline>
-<codeline lineno="276"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Collision<sp/>check<sp/>body</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>=<sp/>np.asarray([[4,11.],[5,5],[9,9],[10,10]])</highlight></codeline>
-<codeline lineno="278"><highlight class="normal"></highlight></codeline>
-<codeline lineno="279"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>car<sp/>size</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="280"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a9cbff98529b08cc1cd52b56ba407e55e" kindref="member">length</ref><sp/>=<sp/>0.32</highlight></codeline>
-<codeline lineno="281"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a00391f07693559253e82dbbe849da73e" kindref="member">width</ref><sp/>=<sp/>0.22</highlight></codeline>
-<codeline lineno="282"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_get_vert(self):</highlight></codeline>
-<codeline lineno="284"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>test_pose<sp/>=<sp/>np.array([2.3,<sp/>6.7,<sp/>0.8])</highlight></codeline>
-<codeline lineno="285"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>=<sp/>get_vertices(test_pose,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a9cbff98529b08cc1cd52b56ba407e55e" kindref="member">length</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a00391f07693559253e82dbbe849da73e" kindref="member">width</ref>)</highlight></codeline>
-<codeline lineno="286"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rect<sp/>=<sp/>np.vstack((vertices,<sp/>vertices[0,:]))</highlight></codeline>
-<codeline lineno="287"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="288"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.scatter(test_pose[0],<sp/>test_pose[1],<sp/>c=</highlight><highlight class="stringliteral">&apos;red&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.plot(rect[:,<sp/>0],<sp/>rect[:,<sp/>1])</highlight></codeline>
-<codeline lineno="290"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.xlim([1,<sp/>4])</highlight></codeline>
-<codeline lineno="291"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.ylim([5,<sp/>8])</highlight></codeline>
-<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.axes().set_aspect(</highlight><highlight class="stringliteral">&apos;equal&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.show()</highlight></codeline>
-<codeline lineno="294"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(vertices.shape<sp/>==<sp/>(4,<sp/>2))</highlight></codeline>
-<codeline lineno="295"><highlight class="normal"></highlight></codeline>
-<codeline lineno="296"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_get_vert_fps(self):</highlight></codeline>
-<codeline lineno="297"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>test_pose<sp/>=<sp/>np.array([2.3,<sp/>6.7,<sp/>0.8])</highlight></codeline>
-<codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="299"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>_<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(1000):</highlight></codeline>
-<codeline lineno="300"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>=<sp/>get_vertices(test_pose,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a9cbff98529b08cc1cd52b56ba407e55e" kindref="member">length</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a00391f07693559253e82dbbe849da73e" kindref="member">width</ref>)</highlight></codeline>
-<codeline lineno="301"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>elapsed<sp/>=<sp/>time.time()<sp/>-<sp/>start</highlight></codeline>
-<codeline lineno="302"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fps<sp/>=<sp/>1000/elapsed</highlight></codeline>
-<codeline lineno="303"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;get<sp/>vertices<sp/>fps:&apos;</highlight><highlight class="normal">,<sp/>fps)</highlight></codeline>
-<codeline lineno="304"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(fps&gt;500)</highlight></codeline>
-<codeline lineno="305"><highlight class="normal"></highlight></codeline>
-<codeline lineno="306"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_random_collision(self):</highlight></codeline>
-<codeline lineno="307"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>perturb<sp/>the<sp/>body<sp/>by<sp/>a<sp/>small<sp/>amount<sp/>and<sp/>make<sp/>sure<sp/>it<sp/>all<sp/>collides<sp/>with<sp/>the<sp/>original<sp/>body</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="308"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>_<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(1000):</highlight></codeline>
-<codeline lineno="309"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="310"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>b<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="311"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(collision(a,b))</highlight></codeline>
-<codeline lineno="312"><highlight class="normal"></highlight></codeline>
-<codeline lineno="313"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_multiple_collisions(self):</highlight></codeline>
-<codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="315"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>b<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="316"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>c<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="317"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="318"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>e<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="319"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="320"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>10.</highlight></codeline>
-<codeline lineno="321"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>allv<sp/>=<sp/>np.stack((a,b,c,d,e,f,g))</highlight></codeline>
-<codeline lineno="322"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collisions,<sp/>collision_idx<sp/>=<sp/>collision_multiple(allv)</highlight></codeline>
-<codeline lineno="323"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(np.all(collisions<sp/>==<sp/>np.array([1.,<sp/>1.,<sp/>1.,<sp/>1.,<sp/>1.,<sp/>1.,<sp/>0.])))</highlight></codeline>
-<codeline lineno="324"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(np.all(collision_idx<sp/>==<sp/>np.array([5.,<sp/>5.,<sp/>5.,<sp/>5.,<sp/>5.,<sp/>4.,<sp/>-1.])))</highlight></codeline>
-<codeline lineno="325"><highlight class="normal"></highlight></codeline>
-<codeline lineno="326"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_fps(self):</highlight></codeline>
-<codeline lineno="327"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>also<sp/>perturb<sp/>the<sp/>body<sp/>but<sp/>mainly<sp/>want<sp/>to<sp/>test<sp/>GJK<sp/>speed</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="328"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="329"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>_<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(1000):</highlight></codeline>
-<codeline lineno="330"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="331"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>b<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref><sp/>+<sp/>np.random.normal(size=(self.<ref refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kindref="member">vertices1</ref>.shape))/100.</highlight></codeline>
-<codeline lineno="332"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collision(a,<sp/>b)</highlight></codeline>
-<codeline lineno="333"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>elapsed<sp/>=<sp/>time.time()<sp/>-<sp/>start</highlight></codeline>
-<codeline lineno="334"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fps<sp/>=<sp/>1000/elapsed</highlight></codeline>
-<codeline lineno="335"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;gjk<sp/>fps:&apos;</highlight><highlight class="normal">,<sp/>fps)</highlight></codeline>
-<codeline lineno="336"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(fps&gt;500)</highlight></codeline>
-<codeline lineno="337"><highlight class="normal"></highlight></codeline>
-<codeline lineno="338"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>__name__<sp/>==<sp/></highlight><highlight class="stringliteral">&apos;__main__&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="339"><highlight class="normal"><sp/><sp/><sp/><sp/>unittest.main()</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/combine.xslt b/docs/xml/combine.xslt
deleted file mode 100644
index f0ee1fd9..00000000
--- a/docs/xml/combine.xslt
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- XSLT script to combine the generated output into a single file. 
-     If you have xsltproc you could use:
-     xsltproc combine.xslt index.xml >all.xml
--->
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-  <xsl:output method="xml" version="1.0" indent="no" standalone="yes" />
-  <xsl:template match="/">
-    <doxygen version="{doxygenindex/@version}">
-      <!-- Load all doxygen generated xml files -->
-      <xsl:for-each select="doxygenindex/compound">
-        <xsl:copy-of select="document( concat( @refid, '.xml' ) )/doxygen/*" />
-      </xsl:for-each>
-    </doxygen>
-  </xsl:template>
-</xsl:stylesheet>
diff --git a/docs/xml/compound.xsd b/docs/xml/compound.xsd
deleted file mode 100644
index 083df158..00000000
--- a/docs/xml/compound.xsd
+++ /dev/null
@@ -1,1187 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <xsd:element name="doxygen" type="DoxygenType"/>
-
-  <!-- Complex types -->
-
-  <xsd:complexType name="DoxygenType">
-    <xsd:sequence maxOccurs="unbounded">
-      <xsd:element name="compounddef" type="compounddefType" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="version" type="DoxVersionNumber" use="required" />
-  </xsd:complexType>
-
-  <xsd:complexType name="compounddefType">
-    <xsd:sequence>
-      <xsd:element name="compoundname" type="xsd:string"/>
-      <xsd:element name="title" type="xsd:string" minOccurs="0" />
-      <xsd:element name="basecompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="derivedcompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="includes" type="incType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="includedby" type="incType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="incdepgraph" type="graphType" minOccurs="0" />
-      <xsd:element name="invincdepgraph" type="graphType" minOccurs="0" />
-      <xsd:element name="innerdir" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innerfile" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innerclass" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innernamespace" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innerpage" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="innergroup" type="refType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
-      <xsd:element name="sectiondef" type="sectiondefType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="tableofcontents" type="tableofcontentsType" minOccurs="0" maxOccurs="1" />
-      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="inheritancegraph" type="graphType" minOccurs="0" />
-      <xsd:element name="collaborationgraph" type="graphType" minOccurs="0" />
-      <xsd:element name="programlisting" type="listingType" minOccurs="0" />
-      <xsd:element name="location" type="locationType" minOccurs="0" />
-      <xsd:element name="listofallmembers" type="listofallmembersType" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-    <xsd:attribute name="kind" type="DoxCompoundKind" />
-    <xsd:attribute name="language" type="DoxLanguage" use="optional"/>
-    <xsd:attribute name="prot" type="DoxProtectionKind" />
-    <xsd:attribute name="final" type="DoxBool" use="optional"/>
-    <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
-    <xsd:attribute name="abstract" type="DoxBool" use="optional"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="listofallmembersType">
-    <xsd:sequence>
-      <xsd:element name="member" type="memberRefType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="memberRefType">
-    <xsd:sequence>
-      <xsd:element name="scope" />
-      <xsd:element name="name" />
-    </xsd:sequence>
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="prot" type="DoxProtectionKind" />
-    <xsd:attribute name="virt" type="DoxVirtualKind" />
-    <xsd:attribute name="ambiguityscope" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docHtmlOnlyType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-        <xsd:attribute name="block" type="xsd:string" />
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="compoundRefType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-        <xsd:attribute name="refid" type="xsd:string" use="optional" />
-        <xsd:attribute name="prot" type="DoxProtectionKind" />
-        <xsd:attribute name="virt" type="DoxVirtualKind" />
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="reimplementType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-        <xsd:attribute name="refid" type="xsd:string" />
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="incType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-        <xsd:attribute name="refid" type="xsd:string" />
-        <xsd:attribute name="local" type="DoxBool" />
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="refType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-        <xsd:attribute name="refid" type="xsd:string" />
-        <xsd:attribute name="prot" type="DoxProtectionKind" use="optional"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="refTextType">
-    <xsd:simpleContent>
-      <xsd:extension base="xsd:string">
-       <xsd:attribute name="refid" type="xsd:string" />
-       <xsd:attribute name="kindref" type="DoxRefKind" />
-       <xsd:attribute name="external" type="xsd:string" use="optional"/>
-       <xsd:attribute name="tooltip" type="xsd:string" use="optional"/>
-      </xsd:extension>
-    </xsd:simpleContent>
-  </xsd:complexType>
-
-  <xsd:complexType name="sectiondefType">
-    <xsd:sequence>
-      <xsd:element name="header" type="xsd:string" minOccurs="0" />
-      <xsd:element name="description" type="descriptionType" minOccurs="0" />
-      <xsd:element name="memberdef" type="memberdefType" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="kind" type="DoxSectionKind" />
-  </xsd:complexType>
-
-  <xsd:complexType name="memberdefType">
-    <xsd:sequence>
-      <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
-      <xsd:element name="type" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="definition" minOccurs="0" />
-      <xsd:element name="argsstring" minOccurs="0" />
-      <xsd:element name="name" />
-      <xsd:element name="read" minOccurs="0" />
-      <xsd:element name="write" minOccurs="0" />
-      <xsd:element name="bitfield" minOccurs="0" />
-      <xsd:element name="reimplements" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="reimplementedby" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="enumvalue" type="enumvalueType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="exceptions" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="inbodydescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="location" type="locationType" />
-      <xsd:element name="references" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="referencedby" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="kind" type="DoxMemberKind" />
-    <xsd:attribute name="id" type="xsd:string" />
-    <xsd:attribute name="prot" type="DoxProtectionKind" />
-    <xsd:attribute name="static" type="DoxBool" />
-    <xsd:attribute name="strong" type="DoxBool" use="optional"/>
-    <xsd:attribute name="const" type="DoxBool" use="optional"/>
-    <xsd:attribute name="explicit" type="DoxBool" use="optional"/>
-    <xsd:attribute name="inline" type="DoxBool" use="optional"/>
-    <xsd:attribute name="refqual" type="DoxRefQualifierKind" use="optional"/>
-    <xsd:attribute name="virt" type="DoxVirtualKind" use="optional"/>
-    <xsd:attribute name="volatile" type="DoxBool" use="optional"/>
-    <xsd:attribute name="mutable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="noexcept" type="DoxBool" use="optional"/>
-    <xsd:attribute name="constexpr" type="DoxBool" use="optional"/>
-    <!-- Qt property -->
-    <xsd:attribute name="readable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="writable" type="DoxBool" use="optional"/>
-    <!-- C++/CLI variable -->
-    <xsd:attribute name="initonly" type="DoxBool" use="optional"/>
-    <!-- C++/CLI and C# property -->
-    <xsd:attribute name="settable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="privatesettable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="protectedsettable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="gettable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="privategettable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="protectedgettable" type="DoxBool" use="optional"/>
-    <!-- C++/CLI function -->
-    <xsd:attribute name="final" type="DoxBool" use="optional"/>
-    <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
-    <xsd:attribute name="new" type="DoxBool" use="optional"/>
-    <!-- C++/CLI event -->
-    <xsd:attribute name="add" type="DoxBool" use="optional"/>
-    <xsd:attribute name="remove" type="DoxBool" use="optional"/>
-    <xsd:attribute name="raise" type="DoxBool" use="optional"/>
-    <!-- Objective-C 2.0 protocol method -->
-    <xsd:attribute name="optional" type="DoxBool" use="optional"/>
-    <xsd:attribute name="required" type="DoxBool" use="optional"/>
-    <!-- Objective-C 2.0 property accessor -->
-    <xsd:attribute name="accessor" type="DoxAccessor" use="optional"/>
-    <!-- UNO IDL -->
-    <xsd:attribute name="attribute" type="DoxBool" use="optional"/>
-    <xsd:attribute name="property" type="DoxBool" use="optional"/>
-    <xsd:attribute name="readonly" type="DoxBool" use="optional"/>
-    <xsd:attribute name="bound" type="DoxBool" use="optional"/>
-    <xsd:attribute name="removable" type="DoxBool" use="optional"/>
-    <xsd:attribute name="constrained" type="DoxBool" use="optional"/>
-    <xsd:attribute name="transient" type="DoxBool" use="optional"/>
-    <xsd:attribute name="maybevoid" type="DoxBool" use="optional"/>
-    <xsd:attribute name="maybedefault" type="DoxBool" use="optional"/>
-    <xsd:attribute name="maybeambiguous" type="DoxBool" use="optional"/>
-
-  </xsd:complexType>
-
-  <xsd:complexType name="descriptionType" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" minOccurs="0"/>	    
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="internal" type="docInternalType" minOccurs="0" maxOccurs="unbounded"/>
-      <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="enumvalueType" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="name" />
-      <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
-      <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-    <xsd:attribute name="prot" type="DoxProtectionKind" />
-  </xsd:complexType>
-
-  <xsd:complexType name="templateparamlistType">
-    <xsd:sequence>
-      <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="paramType">
-    <xsd:sequence>
-      <xsd:element name="attributes" minOccurs="0" />
-      <xsd:element name="type" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="declname" minOccurs="0" />
-      <xsd:element name="defname" minOccurs="0" />
-      <xsd:element name="array" minOccurs="0" />
-      <xsd:element name="defval" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="typeconstraint" type="linkedTextType" minOccurs="0" />
-      <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="linkedTextType" mixed="true">
-    <xsd:sequence>
-    <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="graphType">
-    <xsd:sequence>
-      <xsd:element name="node" type="nodeType" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="nodeType">
-    <xsd:sequence>
-      <xsd:element name="label" />
-      <xsd:element name="link" type="linkType" minOccurs="0" />
-      <xsd:element name="childnode" type="childnodeType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="childnodeType">
-    <xsd:sequence>
-      <xsd:element name="edgelabel" minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="relation" type="DoxGraphRelation" />
-  </xsd:complexType>
-
-  <xsd:complexType name="linkType">
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="external" type="xsd:string" use="optional"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="listingType">
-    <xsd:sequence>
-      <xsd:element name="codeline" type="codelineType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="filename" type="xsd:string" use="optional"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="codelineType">
-    <xsd:sequence>
-      <xsd:element name="highlight" type="highlightType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="lineno" type="xsd:integer" />
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="refkind" type="DoxRefKind" />
-    <xsd:attribute name="external" type="DoxBool" />
-  </xsd:complexType>
-
-  <xsd:complexType name="highlightType" mixed="true">
-    <xsd:choice minOccurs="0" maxOccurs="unbounded">
-      <xsd:element name="sp" type="spType" />
-      <xsd:element name="ref" type="refTextType" />
-    </xsd:choice>
-    <xsd:attribute name="class" type="DoxHighlightClass" />
-  </xsd:complexType>
-
-  <xsd:complexType name="spType" mixed="true">
-    <xsd:attribute name="value" type="xsd:integer" use="optional"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="referenceType" mixed="true">
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="compoundref" type="xsd:string" use="optional" />
-    <xsd:attribute name="startline" type="xsd:integer" />
-    <xsd:attribute name="endline" type="xsd:integer" />
-  </xsd:complexType>
-
-  <xsd:complexType name="locationType">
-    <xsd:attribute name="file" type="xsd:string" />
-    <xsd:attribute name="line" type="xsd:integer" />
-    <xsd:attribute name="column" type="xsd:integer" use="optional"/>
-    <xsd:attribute name="declfile" type="xsd:string" use="optional"/>
-    <xsd:attribute name="declline" type="xsd:integer" use="optional"/>
-    <xsd:attribute name="declcolumn" type="xsd:integer" use="optional"/>
-    <xsd:attribute name="bodyfile" type="xsd:string" />
-    <xsd:attribute name="bodystart" type="xsd:integer" />
-    <xsd:attribute name="bodyend" type="xsd:integer" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docSect1Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" minOccurs="0" />
-      <xsd:choice maxOccurs="unbounded">
-        <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-        <xsd:element name="internal" type="docInternalS1Type" minOccurs="0"  maxOccurs="unbounded" />
-        <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
-      </xsd:choice>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docSect2Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" />
-      <xsd:choice maxOccurs="unbounded">
-        <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-        <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
-        <xsd:element name="internal" type="docInternalS2Type" minOccurs="0" />
-      </xsd:choice>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docSect3Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" />
-      <xsd:choice maxOccurs="unbounded">
-        <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-        <xsd:element name="sect4" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
-        <xsd:element name="internal" type="docInternalS3Type" minOccurs="0" />
-      </xsd:choice>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docSect4Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="title" type="xsd:string" />
-      <xsd:choice maxOccurs="unbounded">
-        <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-        <xsd:element name="internal" type="docInternalS4Type" minOccurs="0" />
-      </xsd:choice>
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalType" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalS1Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalS2Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalS3Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect3" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docInternalS4Type" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="para"  type="docParaType"  minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
- 
-  <xsd:group name="docTitleCmdGroup">
-    <xsd:choice>
-      <xsd:element name="ulink" type="docURLLink" />
-      <xsd:element name="bold" type="docMarkupType" />
-      <xsd:element name="s" type="docMarkupType" />
-      <xsd:element name="strike" type="docMarkupType" />
-      <xsd:element name="underline" type="docMarkupType" />
-      <xsd:element name="emphasis" type="docMarkupType" />
-      <xsd:element name="computeroutput" type="docMarkupType" />
-      <xsd:element name="subscript" type="docMarkupType" />
-      <xsd:element name="superscript" type="docMarkupType" />
-      <xsd:element name="center" type="docMarkupType" />
-      <xsd:element name="small" type="docMarkupType" />
-      <xsd:element name="del" type="docMarkupType" />
-      <xsd:element name="ins" type="docMarkupType" />
-      <xsd:element name="htmlonly" type="docHtmlOnlyType" />
-      <xsd:element name="manonly" type="xsd:string" />
-      <xsd:element name="xmlonly" type="xsd:string" />
-      <xsd:element name="rtfonly" type="xsd:string" />
-      <xsd:element name="latexonly" type="xsd:string" />
-      <xsd:element name="image" type="docImageType" />
-      <xsd:element name="dot" type="docImageType" />
-      <xsd:element name="msc" type="docImageType" />
-      <xsd:element name="plantuml" type="docImageType" />
-      <xsd:element name="anchor" type="docAnchorType" />
-      <xsd:element name="formula" type="docFormulaType" />
-      <xsd:element name="ref" type="docRefTextType" />
-      <xsd:element name="emoji" type="docEmojiType" />
-      <xsd:element name="linebreak" type="docEmptyType" />
-      <xsd:element name="nonbreakablespace" type="docEmptyType" />
-      <xsd:element name="iexcl" type="docEmptyType" />
-      <xsd:element name="cent" type="docEmptyType" />
-      <xsd:element name="pound" type="docEmptyType" />
-      <xsd:element name="curren" type="docEmptyType" />
-      <xsd:element name="yen" type="docEmptyType" />
-      <xsd:element name="brvbar" type="docEmptyType" />
-      <xsd:element name="sect" type="docEmptyType" />
-      <xsd:element name="umlaut" type="docEmptyType" />
-      <xsd:element name="copy" type="docEmptyType" />
-      <xsd:element name="ordf" type="docEmptyType" />
-      <xsd:element name="laquo" type="docEmptyType" />
-      <xsd:element name="not" type="docEmptyType" />
-      <xsd:element name="shy" type="docEmptyType" />
-      <xsd:element name="registered" type="docEmptyType" />
-      <xsd:element name="macr" type="docEmptyType" />
-      <xsd:element name="deg" type="docEmptyType" />
-      <xsd:element name="plusmn" type="docEmptyType" />
-      <xsd:element name="sup2" type="docEmptyType" />
-      <xsd:element name="sup3" type="docEmptyType" />
-      <xsd:element name="acute" type="docEmptyType" />
-      <xsd:element name="micro" type="docEmptyType" />
-      <xsd:element name="para" type="docEmptyType" />
-      <xsd:element name="middot" type="docEmptyType" />
-      <xsd:element name="cedil" type="docEmptyType" />
-      <xsd:element name="sup1" type="docEmptyType" />
-      <xsd:element name="ordm" type="docEmptyType" />
-      <xsd:element name="raquo" type="docEmptyType" />
-      <xsd:element name="frac14" type="docEmptyType" />
-      <xsd:element name="frac12" type="docEmptyType" />
-      <xsd:element name="frac34" type="docEmptyType" />
-      <xsd:element name="iquest" type="docEmptyType" />
-      <xsd:element name="Agrave" type="docEmptyType" />
-      <xsd:element name="Aacute" type="docEmptyType" />
-      <xsd:element name="Acirc" type="docEmptyType" />
-      <xsd:element name="Atilde" type="docEmptyType" />
-      <xsd:element name="Aumlaut" type="docEmptyType" />
-      <xsd:element name="Aring" type="docEmptyType" />
-      <xsd:element name="AElig" type="docEmptyType" />
-      <xsd:element name="Ccedil" type="docEmptyType" />
-      <xsd:element name="Egrave" type="docEmptyType" />
-      <xsd:element name="Eacute" type="docEmptyType" />
-      <xsd:element name="Ecirc" type="docEmptyType" />
-      <xsd:element name="Eumlaut" type="docEmptyType" />
-      <xsd:element name="Igrave" type="docEmptyType" />
-      <xsd:element name="Iacute" type="docEmptyType" />
-      <xsd:element name="Icirc" type="docEmptyType" />
-      <xsd:element name="Iumlaut" type="docEmptyType" />
-      <xsd:element name="ETH" type="docEmptyType" />
-      <xsd:element name="Ntilde" type="docEmptyType" />
-      <xsd:element name="Ograve" type="docEmptyType" />
-      <xsd:element name="Oacute" type="docEmptyType" />
-      <xsd:element name="Ocirc" type="docEmptyType" />
-      <xsd:element name="Otilde" type="docEmptyType" />
-      <xsd:element name="Oumlaut" type="docEmptyType" />
-      <xsd:element name="times" type="docEmptyType" />
-      <xsd:element name="Oslash" type="docEmptyType" />
-      <xsd:element name="Ugrave" type="docEmptyType" />
-      <xsd:element name="Uacute" type="docEmptyType" />
-      <xsd:element name="Ucirc" type="docEmptyType" />
-      <xsd:element name="Uumlaut" type="docEmptyType" />
-      <xsd:element name="Yacute" type="docEmptyType" />
-      <xsd:element name="THORN" type="docEmptyType" />
-      <xsd:element name="szlig" type="docEmptyType" />
-      <xsd:element name="agrave" type="docEmptyType" />
-      <xsd:element name="aacute" type="docEmptyType" />
-      <xsd:element name="acirc" type="docEmptyType" />
-      <xsd:element name="atilde" type="docEmptyType" />
-      <xsd:element name="aumlaut" type="docEmptyType" />
-      <xsd:element name="aring" type="docEmptyType" />
-      <xsd:element name="aelig" type="docEmptyType" />
-      <xsd:element name="ccedil" type="docEmptyType" />
-      <xsd:element name="egrave" type="docEmptyType" />
-      <xsd:element name="eacute" type="docEmptyType" />
-      <xsd:element name="ecirc" type="docEmptyType" />
-      <xsd:element name="eumlaut" type="docEmptyType" />
-      <xsd:element name="igrave" type="docEmptyType" />
-      <xsd:element name="iacute" type="docEmptyType" />
-      <xsd:element name="icirc" type="docEmptyType" />
-      <xsd:element name="iumlaut" type="docEmptyType" />
-      <xsd:element name="eth" type="docEmptyType" />
-      <xsd:element name="ntilde" type="docEmptyType" />
-      <xsd:element name="ograve" type="docEmptyType" />
-      <xsd:element name="oacute" type="docEmptyType" />
-      <xsd:element name="ocirc" type="docEmptyType" />
-      <xsd:element name="otilde" type="docEmptyType" />
-      <xsd:element name="oumlaut" type="docEmptyType" />
-      <xsd:element name="divide" type="docEmptyType" />
-      <xsd:element name="oslash" type="docEmptyType" />
-      <xsd:element name="ugrave" type="docEmptyType" />
-      <xsd:element name="uacute" type="docEmptyType" />
-      <xsd:element name="ucirc" type="docEmptyType" />
-      <xsd:element name="uumlaut" type="docEmptyType" />
-      <xsd:element name="yacute" type="docEmptyType" />
-      <xsd:element name="thorn" type="docEmptyType" />
-      <xsd:element name="yumlaut" type="docEmptyType" />
-      <xsd:element name="fnof" type="docEmptyType" />
-      <xsd:element name="Alpha" type="docEmptyType" />
-      <xsd:element name="Beta" type="docEmptyType" />
-      <xsd:element name="Gamma" type="docEmptyType" />
-      <xsd:element name="Delta" type="docEmptyType" />
-      <xsd:element name="Epsilon" type="docEmptyType" />
-      <xsd:element name="Zeta" type="docEmptyType" />
-      <xsd:element name="Eta" type="docEmptyType" />
-      <xsd:element name="Theta" type="docEmptyType" />
-      <xsd:element name="Iota" type="docEmptyType" />
-      <xsd:element name="Kappa" type="docEmptyType" />
-      <xsd:element name="Lambda" type="docEmptyType" />
-      <xsd:element name="Mu" type="docEmptyType" />
-      <xsd:element name="Nu" type="docEmptyType" />
-      <xsd:element name="Xi" type="docEmptyType" />
-      <xsd:element name="Omicron" type="docEmptyType" />
-      <xsd:element name="Pi" type="docEmptyType" />
-      <xsd:element name="Rho" type="docEmptyType" />
-      <xsd:element name="Sigma" type="docEmptyType" />
-      <xsd:element name="Tau" type="docEmptyType" />
-      <xsd:element name="Upsilon" type="docEmptyType" />
-      <xsd:element name="Phi" type="docEmptyType" />
-      <xsd:element name="Chi" type="docEmptyType" />
-      <xsd:element name="Psi" type="docEmptyType" />
-      <xsd:element name="Omega" type="docEmptyType" />
-      <xsd:element name="alpha" type="docEmptyType" />
-      <xsd:element name="beta" type="docEmptyType" />
-      <xsd:element name="gamma" type="docEmptyType" />
-      <xsd:element name="delta" type="docEmptyType" />
-      <xsd:element name="epsilon" type="docEmptyType" />
-      <xsd:element name="zeta" type="docEmptyType" />
-      <xsd:element name="eta" type="docEmptyType" />
-      <xsd:element name="theta" type="docEmptyType" />
-      <xsd:element name="iota" type="docEmptyType" />
-      <xsd:element name="kappa" type="docEmptyType" />
-      <xsd:element name="lambda" type="docEmptyType" />
-      <xsd:element name="mu" type="docEmptyType" />
-      <xsd:element name="nu" type="docEmptyType" />
-      <xsd:element name="xi" type="docEmptyType" />
-      <xsd:element name="omicron" type="docEmptyType" />
-      <xsd:element name="pi" type="docEmptyType" />
-      <xsd:element name="rho" type="docEmptyType" />
-      <xsd:element name="sigmaf" type="docEmptyType" />
-      <xsd:element name="sigma" type="docEmptyType" />
-      <xsd:element name="tau" type="docEmptyType" />
-      <xsd:element name="upsilon" type="docEmptyType" />
-      <xsd:element name="phi" type="docEmptyType" />
-      <xsd:element name="chi" type="docEmptyType" />
-      <xsd:element name="psi" type="docEmptyType" />
-      <xsd:element name="omega" type="docEmptyType" />
-      <xsd:element name="thetasym" type="docEmptyType" />
-      <xsd:element name="upsih" type="docEmptyType" />
-      <xsd:element name="piv" type="docEmptyType" />
-      <xsd:element name="bull" type="docEmptyType" />
-      <xsd:element name="hellip" type="docEmptyType" />
-      <xsd:element name="prime" type="docEmptyType" />
-      <xsd:element name="Prime" type="docEmptyType" />
-      <xsd:element name="oline" type="docEmptyType" />
-      <xsd:element name="frasl" type="docEmptyType" />
-      <xsd:element name="weierp" type="docEmptyType" />
-      <xsd:element name="imaginary" type="docEmptyType" />
-      <xsd:element name="real" type="docEmptyType" />
-      <xsd:element name="trademark" type="docEmptyType" />
-      <xsd:element name="alefsym" type="docEmptyType" />
-      <xsd:element name="larr" type="docEmptyType" />
-      <xsd:element name="uarr" type="docEmptyType" />
-      <xsd:element name="rarr" type="docEmptyType" />
-      <xsd:element name="darr" type="docEmptyType" />
-      <xsd:element name="harr" type="docEmptyType" />
-      <xsd:element name="crarr" type="docEmptyType" />
-      <xsd:element name="lArr" type="docEmptyType" />
-      <xsd:element name="uArr" type="docEmptyType" />
-      <xsd:element name="rArr" type="docEmptyType" />
-      <xsd:element name="dArr" type="docEmptyType" />
-      <xsd:element name="hArr" type="docEmptyType" />
-      <xsd:element name="forall" type="docEmptyType" />
-      <xsd:element name="part" type="docEmptyType" />
-      <xsd:element name="exist" type="docEmptyType" />
-      <xsd:element name="empty" type="docEmptyType" />
-      <xsd:element name="nabla" type="docEmptyType" />
-      <xsd:element name="isin" type="docEmptyType" />
-      <xsd:element name="notin" type="docEmptyType" />
-      <xsd:element name="ni" type="docEmptyType" />
-      <xsd:element name="prod" type="docEmptyType" />
-      <xsd:element name="sum" type="docEmptyType" />
-      <xsd:element name="minus" type="docEmptyType" />
-      <xsd:element name="lowast" type="docEmptyType" />
-      <xsd:element name="radic" type="docEmptyType" />
-      <xsd:element name="prop" type="docEmptyType" />
-      <xsd:element name="infin" type="docEmptyType" />
-      <xsd:element name="ang" type="docEmptyType" />
-      <xsd:element name="and" type="docEmptyType" />
-      <xsd:element name="or" type="docEmptyType" />
-      <xsd:element name="cap" type="docEmptyType" />
-      <xsd:element name="cup" type="docEmptyType" />
-      <xsd:element name="int" type="docEmptyType" />
-      <xsd:element name="there4" type="docEmptyType" />
-      <xsd:element name="sim" type="docEmptyType" />
-      <xsd:element name="cong" type="docEmptyType" />
-      <xsd:element name="asymp" type="docEmptyType" />
-      <xsd:element name="ne" type="docEmptyType" />
-      <xsd:element name="equiv" type="docEmptyType" />
-      <xsd:element name="le" type="docEmptyType" />
-      <xsd:element name="ge" type="docEmptyType" />
-      <xsd:element name="sub" type="docEmptyType" />
-      <xsd:element name="sup" type="docEmptyType" />
-      <xsd:element name="nsub" type="docEmptyType" />
-      <xsd:element name="sube" type="docEmptyType" />
-      <xsd:element name="supe" type="docEmptyType" />
-      <xsd:element name="oplus" type="docEmptyType" />
-      <xsd:element name="otimes" type="docEmptyType" />
-      <xsd:element name="perp" type="docEmptyType" />
-      <xsd:element name="sdot" type="docEmptyType" />
-      <xsd:element name="lceil" type="docEmptyType" />
-      <xsd:element name="rceil" type="docEmptyType" />
-      <xsd:element name="lfloor" type="docEmptyType" />
-      <xsd:element name="rfloor" type="docEmptyType" />
-      <xsd:element name="lang" type="docEmptyType" />
-      <xsd:element name="rang" type="docEmptyType" />
-      <xsd:element name="loz" type="docEmptyType" />
-      <xsd:element name="spades" type="docEmptyType" />
-      <xsd:element name="clubs" type="docEmptyType" />
-      <xsd:element name="hearts" type="docEmptyType" />
-      <xsd:element name="diams" type="docEmptyType" />
-      <xsd:element name="OElig" type="docEmptyType" />
-      <xsd:element name="oelig" type="docEmptyType" />
-      <xsd:element name="Scaron" type="docEmptyType" />
-      <xsd:element name="scaron" type="docEmptyType" />
-      <xsd:element name="Yumlaut" type="docEmptyType" />
-      <xsd:element name="circ" type="docEmptyType" />
-      <xsd:element name="tilde" type="docEmptyType" />
-      <xsd:element name="ensp" type="docEmptyType" />
-      <xsd:element name="emsp" type="docEmptyType" />
-      <xsd:element name="thinsp" type="docEmptyType" />
-      <xsd:element name="zwnj" type="docEmptyType" />
-      <xsd:element name="zwj" type="docEmptyType" />
-      <xsd:element name="lrm" type="docEmptyType" />
-      <xsd:element name="rlm" type="docEmptyType" />
-      <xsd:element name="ndash" type="docEmptyType" />
-      <xsd:element name="mdash" type="docEmptyType" />
-      <xsd:element name="lsquo" type="docEmptyType" />
-      <xsd:element name="rsquo" type="docEmptyType" />
-      <xsd:element name="sbquo" type="docEmptyType" />
-      <xsd:element name="ldquo" type="docEmptyType" />
-      <xsd:element name="rdquo" type="docEmptyType" />
-      <xsd:element name="bdquo" type="docEmptyType" />
-      <xsd:element name="dagger" type="docEmptyType" />
-      <xsd:element name="Dagger" type="docEmptyType" />
-      <xsd:element name="permil" type="docEmptyType" />
-      <xsd:element name="lsaquo" type="docEmptyType" />
-      <xsd:element name="rsaquo" type="docEmptyType" />
-      <xsd:element name="euro" type="docEmptyType" />
-      <xsd:element name="tm" type="docEmptyType" />
-    </xsd:choice>
-  </xsd:group>
-
-  <xsd:complexType name="docTitleType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-  </xsd:complexType>
-
-  <xsd:group name="docCmdGroup">
-    <xsd:choice>
-      <xsd:group ref="docTitleCmdGroup"/>
-      <xsd:element name="linebreak" type="docEmptyType" />
-      <xsd:element name="hruler" type="docEmptyType" />
-      <xsd:element name="preformatted" type="docMarkupType" />
-      <xsd:element name="programlisting" type="listingType" />
-      <xsd:element name="verbatim" type="xsd:string" />
-      <xsd:element name="indexentry" type="docIndexEntryType" />
-      <xsd:element name="orderedlist" type="docListType" />
-      <xsd:element name="itemizedlist" type="docListType" />
-      <xsd:element name="simplesect" type="docSimpleSectType" />
-      <xsd:element name="title" type="docTitleType" />
-      <xsd:element name="variablelist" type="docVariableListType" />
-      <xsd:element name="table" type="docTableType" />
-      <xsd:element name="heading" type="docHeadingType" />
-      <xsd:element name="image" type="docImageType" />
-      <xsd:element name="dotfile" type="docImageType" />
-      <xsd:element name="mscfile" type="docImageType" />
-      <xsd:element name="diafile" type="docImageType" />
-      <xsd:element name="toclist" type="docTocListType" />
-      <xsd:element name="language" type="docLanguageType" />
-      <xsd:element name="parameterlist" type="docParamListType" />
-      <xsd:element name="xrefsect" type="docXRefSectType" />
-      <xsd:element name="copydoc" type="docCopyType" />
-      <xsd:element name="blockquote" type="docBlockQuoteType" />
-      <xsd:element name="parblock" type="docParBlockType" />
-    </xsd:choice>
-  </xsd:group>
-
-  <xsd:complexType name="docParaType" mixed="true">
-    <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docMarkupType" mixed="true">
-    <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docURLLink" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="url" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docAnchorType" mixed="true">
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docFormulaType" mixed="true">
-    <xsd:attribute name="id" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docIndexEntryType">
-    <xsd:sequence>
-      <xsd:element name="primaryie" type="xsd:string" />
-      <xsd:element name="secondaryie" type="xsd:string" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docListType">
-    <xsd:sequence>
-      <xsd:element name="listitem" type="docListItemType" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docListItemType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docSimpleSectType">
-    <xsd:sequence>
-      <xsd:element name="title" type="docTitleType" minOccurs="0" />
-      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
-        <xsd:element name="para" type="docParaType" minOccurs="1" maxOccurs="unbounded" />
-      </xsd:sequence>
-    </xsd:sequence>
-    <xsd:attribute name="kind" type="DoxSimpleSectKind" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docVarListEntryType">
-    <xsd:sequence>
-      <xsd:element name="term" type="docTitleType" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:group name="docVariableListGroup">
-    <xsd:sequence>
-      <xsd:element name="varlistentry" type="docVarListEntryType" />
-      <xsd:element name="listitem" type="docListItemType" />
-    </xsd:sequence>
-  </xsd:group>
-
-  <xsd:complexType name="docVariableListType">
-    <xsd:sequence>
-      <xsd:group ref="docVariableListGroup" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docRefTextType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="refid" type="xsd:string" />
-    <xsd:attribute name="kindref" type="DoxRefKind" />
-    <xsd:attribute name="external" type="xsd:string" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docTableType">
-    <xsd:sequence>
-      <xsd:element name="caption" type="docCaptionType" minOccurs="0" maxOccurs="1" />
-      <xsd:element name="row" type="docRowType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="rows" type="xsd:integer" />
-    <xsd:attribute name="cols" type="xsd:integer" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docRowType">
-    <xsd:sequence>
-      <xsd:element name="entry" type="docEntryType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docEntryType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="thead" type="DoxBool" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docCaptionType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docHeadingType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="level" type="xsd:integer" /> <!-- todo: range 1-6 -->
-  </xsd:complexType>
-
-  <xsd:complexType name="docImageType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="type" type="DoxImageKind" use="optional"/>
-    <xsd:attribute name="name" type="xsd:string" use="optional"/>
-    <xsd:attribute name="width" type="xsd:string" use="optional"/>
-    <xsd:attribute name="height" type="xsd:string" use="optional"/>
-    <xsd:attribute name="inline" type="DoxBool" use="optional"/>
-    <xsd:attribute name="caption" type="xsd:string" use="optional"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="docTocItemType" mixed="true">
-    <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
-    <xsd:attribute name="id" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docTocListType">
-    <xsd:sequence>
-      <xsd:element name="tocitem" type="docTocItemType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docLanguageType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="langid" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamListType">
-    <xsd:sequence>
-      <xsd:element name="parameteritem" type="docParamListItem" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-    <xsd:attribute name="kind" type="DoxParamListKind" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamListItem">
-    <xsd:sequence>
-      <xsd:element name="parameternamelist" type="docParamNameList" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="parameterdescription" type="descriptionType" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamNameList">
-    <xsd:sequence>
-      <xsd:element name="parametertype" type="docParamType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="parametername" type="docParamName" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamType" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docParamName" mixed="true">
-    <xsd:sequence>
-      <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
-    </xsd:sequence>
-    <xsd:attribute name="direction" type="DoxParamDir" use="optional" />
-  </xsd:complexType>
-
-  <xsd:complexType name="docXRefSectType">
-    <xsd:sequence>
-      <xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="xrefdescription" type="descriptionType" />
-    </xsd:sequence>
-    <xsd:attribute name="id" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docCopyType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
-      <xsd:element name="internal" type="docInternalType" minOccurs="0" />
-    </xsd:sequence>
-    <xsd:attribute name="link" type="xsd:string" /> 
-  </xsd:complexType>
-
-  <xsd:complexType name="docBlockQuoteType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docParBlockType">
-    <xsd:sequence>
-      <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docEmptyType"/>
-
-  <xsd:complexType name="tableofcontentsType">
-    <xsd:sequence>
-      <xsd:element name="tocsect" type="tableofcontentsKindType" minOccurs="1" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="tableofcontentsKindType">
-    <xsd:sequence>
-      <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-      <xsd:element name="reference" type="xsd:string" minOccurs="1" maxOccurs="1"/>
-      <xsd:element name="tableofcontents" type="tableofcontentsType" minOccurs="0" maxOccurs="unbounded" />
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="docEmojiType">
-    <xsd:attribute name="name" type="xsd:string"/>
-    <xsd:attribute name="unicode" type="xsd:string"/>
-  </xsd:complexType>
-
-  <!-- Simple types -->
-
-  <xsd:simpleType name="DoxBool">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="yes" />
-      <xsd:enumeration value="no" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxGraphRelation">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="include" />
-      <xsd:enumeration value="usage" />
-      <xsd:enumeration value="template-instance" />
-      <xsd:enumeration value="public-inheritance" />
-      <xsd:enumeration value="protected-inheritance" />
-      <xsd:enumeration value="private-inheritance" />
-      <xsd:enumeration value="type-constraint" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxRefKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="compound" />
-      <xsd:enumeration value="member" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxMemberKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="define" />
-      <xsd:enumeration value="property" />
-      <xsd:enumeration value="event" />
-      <xsd:enumeration value="variable" />
-      <xsd:enumeration value="typedef" />
-      <xsd:enumeration value="enum" />
-      <xsd:enumeration value="function" />
-      <xsd:enumeration value="signal" />
-      <xsd:enumeration value="prototype" />
-      <xsd:enumeration value="friend" />
-      <xsd:enumeration value="dcop" />
-      <xsd:enumeration value="slot" />
-      <xsd:enumeration value="interface" />
-      <xsd:enumeration value="service" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxProtectionKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="public" />
-      <xsd:enumeration value="protected" />
-      <xsd:enumeration value="private" />
-      <xsd:enumeration value="package" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxRefQualifierKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="lvalue" />
-      <xsd:enumeration value="rvalue" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxLanguage">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="Unknown" />
-      <xsd:enumeration value="IDL" />
-      <xsd:enumeration value="Java" />
-      <xsd:enumeration value="C#" />
-      <xsd:enumeration value="D" />
-      <xsd:enumeration value="PHP" />
-      <xsd:enumeration value="Objective-C" />
-      <xsd:enumeration value="C++" />
-      <xsd:enumeration value="JavaScript" />
-      <xsd:enumeration value="Python" />
-      <xsd:enumeration value="Fortran" />
-      <xsd:enumeration value="VHDL" />
-      <xsd:enumeration value="XML" />
-      <xsd:enumeration value="SQL" />
-      <xsd:enumeration value="Tcl" />
-      <xsd:enumeration value="Markdown" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxVirtualKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="non-virtual" />
-      <xsd:enumeration value="virtual" />
-      <xsd:enumeration value="pure-virtual" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxCompoundKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="class" />
-      <xsd:enumeration value="struct" />
-      <xsd:enumeration value="union" />
-      <xsd:enumeration value="interface" />
-      <xsd:enumeration value="protocol" />
-      <xsd:enumeration value="category" />
-      <xsd:enumeration value="exception" />
-      <xsd:enumeration value="service" />
-      <xsd:enumeration value="singleton" />
-      <xsd:enumeration value="module" />
-      <xsd:enumeration value="type" />
-      <xsd:enumeration value="file" />
-      <xsd:enumeration value="namespace" />
-      <xsd:enumeration value="group" />
-      <xsd:enumeration value="page" />
-      <xsd:enumeration value="example" />
-      <xsd:enumeration value="dir" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxSectionKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="user-defined" />
-      <xsd:enumeration value="public-type" />
-      <xsd:enumeration value="public-func" />
-      <xsd:enumeration value="public-attrib" />
-      <xsd:enumeration value="public-slot" />
-      <xsd:enumeration value="signal" />
-      <xsd:enumeration value="dcop-func" />
-      <xsd:enumeration value="property" />
-      <xsd:enumeration value="event" />
-      <xsd:enumeration value="public-static-func" />
-      <xsd:enumeration value="public-static-attrib" />
-      <xsd:enumeration value="protected-type" />
-      <xsd:enumeration value="protected-func" />
-      <xsd:enumeration value="protected-attrib" />
-      <xsd:enumeration value="protected-slot" />
-      <xsd:enumeration value="protected-static-func" />
-      <xsd:enumeration value="protected-static-attrib" />
-      <xsd:enumeration value="package-type" />
-      <xsd:enumeration value="package-func" />
-      <xsd:enumeration value="package-attrib" />
-      <xsd:enumeration value="package-static-func" />
-      <xsd:enumeration value="package-static-attrib" />
-      <xsd:enumeration value="private-type" />
-      <xsd:enumeration value="private-func" />
-      <xsd:enumeration value="private-attrib" />
-      <xsd:enumeration value="private-slot" />
-      <xsd:enumeration value="private-static-func" />
-      <xsd:enumeration value="private-static-attrib" />
-      <xsd:enumeration value="friend" />
-      <xsd:enumeration value="related" />
-      <xsd:enumeration value="define" />
-      <xsd:enumeration value="prototype" />
-      <xsd:enumeration value="typedef" />
-      <xsd:enumeration value="enum" />
-      <xsd:enumeration value="func" />
-      <xsd:enumeration value="var" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxHighlightClass">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="comment" />
-      <xsd:enumeration value="normal" />
-      <xsd:enumeration value="preprocessor" />
-      <xsd:enumeration value="keyword" />
-      <xsd:enumeration value="keywordtype" />
-      <xsd:enumeration value="keywordflow" />
-      <xsd:enumeration value="stringliteral" />
-      <xsd:enumeration value="charliteral" />
-      <xsd:enumeration value="vhdlkeyword" />
-      <xsd:enumeration value="vhdllogic" />
-      <xsd:enumeration value="vhdlchar" />
-      <xsd:enumeration value="vhdldigit" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxSimpleSectKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="see" />
-      <xsd:enumeration value="return" />
-      <xsd:enumeration value="author" />
-      <xsd:enumeration value="authors" />
-      <xsd:enumeration value="version" />
-      <xsd:enumeration value="since" />
-      <xsd:enumeration value="date" />
-      <xsd:enumeration value="note" />
-      <xsd:enumeration value="warning" />
-      <xsd:enumeration value="pre" />
-      <xsd:enumeration value="post" />
-      <xsd:enumeration value="copyright" />
-      <xsd:enumeration value="invariant" />
-      <xsd:enumeration value="remark" />
-      <xsd:enumeration value="attention" />
-      <xsd:enumeration value="par" />
-      <xsd:enumeration value="rcs" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxVersionNumber">
-    <xsd:restriction base="xsd:string">
-      <xsd:pattern value="\d+\.\d+.*" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxImageKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="html" />
-      <xsd:enumeration value="latex" />
-      <xsd:enumeration value="docbook" />
-      <xsd:enumeration value="rtf" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxParamListKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="param" />
-      <xsd:enumeration value="retval" />
-      <xsd:enumeration value="exception" />
-      <xsd:enumeration value="templateparam" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxCharRange">
-    <xsd:restriction base="xsd:string">
-      <xsd:pattern value="[aeiouncAEIOUNC]" />
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxParamDir">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="in"/>
-      <xsd:enumeration value="out"/>
-      <xsd:enumeration value="inout"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="DoxAccessor">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="retain"/>
-      <xsd:enumeration value="copy"/>
-      <xsd:enumeration value="assign"/>
-      <xsd:enumeration value="weak"/>
-      <xsd:enumeration value="strong"/>
-      <xsd:enumeration value="unretained"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-
-</xsd:schema>
-
diff --git a/docs/xml/dir_0d9aa0052a6017cb7aea189bf393af42.xml b/docs/xml/dir_0d9aa0052a6017cb7aea189bf393af42.xml
deleted file mode 100644
index b4ec9ec5..00000000
--- a/docs/xml/dir_0d9aa0052a6017cb7aea189bf393af42.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="dir_0d9aa0052a6017cb7aea189bf393af42" kind="dir">
-    <compoundname>/home/billyzheng/f1tenth_gym/gym/f110_gym</compoundname>
-    <innerdir refid="dir_87aab0849a7ff80b67f27d7f0ecafd88">/home/billyzheng/f1tenth_gym/gym/f110_gym/envs</innerdir>
-    <innerdir refid="dir_70fc25f479e8e19f7e6bd12b95eca2dc">/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest</innerdir>
-    <innerfile refid="____init_____8py">__init__.py</innerfile>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/dir_70fc25f479e8e19f7e6bd12b95eca2dc.xml b/docs/xml/dir_70fc25f479e8e19f7e6bd12b95eca2dc.xml
deleted file mode 100644
index a3bb5753..00000000
--- a/docs/xml/dir_70fc25f479e8e19f7e6bd12b95eca2dc.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="dir_70fc25f479e8e19f7e6bd12b95eca2dc" kind="dir">
-    <compoundname>/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest</compoundname>
-    <innerfile refid="unittest_2____init_____8py">__init__.py</innerfile>
-    <innerfile refid="collision__checks_8py">collision_checks.py</innerfile>
-    <innerfile refid="dynamics__test_8py">dynamics_test.py</innerfile>
-    <innerfile refid="legacy__scan__gen_8py">legacy_scan_gen.py</innerfile>
-    <innerfile refid="pyglet__test_8py">pyglet_test.py</innerfile>
-    <innerfile refid="pyglet__test__camera_8py">pyglet_test_camera.py</innerfile>
-    <innerfile refid="random__trackgen_8py">random_trackgen.py</innerfile>
-    <innerfile refid="scan__sim_8py">scan_sim.py</innerfile>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/dir_87aab0849a7ff80b67f27d7f0ecafd88.xml b/docs/xml/dir_87aab0849a7ff80b67f27d7f0ecafd88.xml
deleted file mode 100644
index c0ca9f11..00000000
--- a/docs/xml/dir_87aab0849a7ff80b67f27d7f0ecafd88.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="dir_87aab0849a7ff80b67f27d7f0ecafd88" kind="dir">
-    <compoundname>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs</compoundname>
-    <innerfile refid="envs_2____init_____8py">__init__.py</innerfile>
-    <innerfile refid="base__classes_8py">base_classes.py</innerfile>
-    <innerfile refid="collision__models_8py">collision_models.py</innerfile>
-    <innerfile refid="dynamic__models_8py">dynamic_models.py</innerfile>
-    <innerfile refid="f110__env_8py">f110_env.py</innerfile>
-    <innerfile refid="f110__env__backup_8py">f110_env_backup.py</innerfile>
-    <innerfile refid="laser__models_8py">laser_models.py</innerfile>
-    <innerfile refid="rendering_8py">rendering.py</innerfile>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/dir_cc06cd2fc16f827f09405fcedd02c7bb.xml b/docs/xml/dir_cc06cd2fc16f827f09405fcedd02c7bb.xml
deleted file mode 100644
index a8a7fb02..00000000
--- a/docs/xml/dir_cc06cd2fc16f827f09405fcedd02c7bb.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="dir_cc06cd2fc16f827f09405fcedd02c7bb" kind="dir">
-    <compoundname>/home/billyzheng/f1tenth_gym/gym</compoundname>
-    <innerdir refid="dir_0d9aa0052a6017cb7aea189bf393af42">/home/billyzheng/f1tenth_gym/gym/f110_gym</innerdir>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/dynamic__models_8py.xml b/docs/xml/dynamic__models_8py.xml
deleted file mode 100644
index e0ddc6dc..00000000
--- a/docs/xml/dynamic__models_8py.xml
+++ /dev/null
@@ -1,441 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="dynamic__models_8py" kind="file" language="Python">
-    <compoundname>dynamic_models.py</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test" prot="public">f110_gym::envs::dynamic_models::DynamicsTest</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1dynamic__models">f110_gym::envs::dynamic_models</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>Copyright<sp/>2020<sp/>Technical<sp/>University<sp/>of<sp/>Munich,<sp/>Professorship<sp/>of<sp/>Cyber-Physical<sp/>Systems,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Redistribution<sp/>and<sp/>use<sp/>in<sp/>source<sp/>and<sp/>binary<sp/>forms,<sp/>with<sp/>or<sp/>without<sp/>modification,<sp/>are<sp/>permitted<sp/>provided<sp/>that<sp/>the<sp/>following<sp/>conditions<sp/>are<sp/>met:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>1.<sp/>Redistributions<sp/>of<sp/>source<sp/>code<sp/>must<sp/>retain<sp/>the<sp/>above<sp/>copyright<sp/>notice,<sp/>this<sp/>list<sp/>of<sp/>conditions<sp/>and<sp/>the<sp/>following<sp/>disclaimer.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>2.<sp/>Redistributions<sp/>in<sp/>binary<sp/>form<sp/>must<sp/>reproduce<sp/>the<sp/>above<sp/>copyright<sp/>notice,<sp/>this<sp/>list<sp/>of<sp/>conditions<sp/>and<sp/>the<sp/>following<sp/>disclaimer<sp/>in<sp/>the<sp/>documentation<sp/>and/or<sp/>other<sp/>materials<sp/>provided<sp/>with<sp/>the<sp/>distribution.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>3.<sp/>Neither<sp/>the<sp/>name<sp/>of<sp/>the<sp/>copyright<sp/>holder<sp/>nor<sp/>the<sp/>names<sp/>of<sp/>its<sp/>contributors<sp/>may<sp/>be<sp/>used<sp/>to<sp/>endorse<sp/>or<sp/>promote<sp/>products<sp/>derived<sp/>from<sp/>this<sp/>software<sp/>without<sp/>specific<sp/>prior<sp/>written<sp/>permission.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THIS<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>BY<sp/>THE<sp/>COPYRIGHT<sp/>HOLDERS<sp/>AND<sp/>CONTRIBUTORS<sp/>&quot;AS<sp/>IS&quot;<sp/>AND<sp/>ANY<sp/>EXPRESS<sp/>OR<sp/>IMPLIED<sp/>WARRANTIES,<sp/>INCLUDING,<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO,<sp/>THE<sp/>IMPLIED<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY<sp/>AND<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>ARE<sp/>DISCLAIMED.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE<sp/>COPYRIGHT<sp/>HOLDER<sp/>OR<sp/>CONTRIBUTORS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>DIRECT,<sp/>INDIRECT,<sp/>INCIDENTAL,<sp/>SPECIAL,<sp/>EXEMPLARY,<sp/>OR<sp/>CONSEQUENTIAL<sp/>DAMAGES<sp/>(INCLUDING,<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO,<sp/>PROCUREMENT<sp/>OF<sp/>SUBSTITUTE<sp/>GOODS<sp/>OR<sp/>SERVICES;<sp/>LOSS<sp/>OF<sp/>USE,<sp/>DATA,<sp/>OR<sp/>PROFITS;<sp/>OR<sp/>BUSINESS<sp/>INTERRUPTION)<sp/>HOWEVER<sp/>CAUSED<sp/>AND<sp/>ON<sp/>ANY<sp/>THEORY<sp/>OF<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>CONTRACT,<sp/>STRICT<sp/>LIABILITY,<sp/>OR<sp/>TORT<sp/>(INCLUDING<sp/>NEGLIGENCE<sp/>OR<sp/>OTHERWISE)<sp/>ARISING<sp/>IN<sp/>ANY<sp/>WAY<sp/>OUT<sp/>OF<sp/>THE<sp/>USE<sp/>OF<sp/>THIS<sp/>SOFTWARE,<sp/>EVEN<sp/>IF<sp/>ADVISED<sp/>OF<sp/>THE<sp/>POSSIBILITY<sp/>OF<sp/>SUCH<sp/>DAMAGE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="16"><highlight class="stringliteral">Prototype<sp/>of<sp/>vehicle<sp/>dynamics<sp/>functions<sp/>and<sp/>classes<sp/>for<sp/>simulating<sp/>2D<sp/>Single<sp/></highlight></codeline>
-<codeline lineno="17"><highlight class="stringliteral">Track<sp/>dynamic<sp/>model</highlight></codeline>
-<codeline lineno="18"><highlight class="stringliteral">Following<sp/>the<sp/>implementation<sp/>of<sp/>commanroad&apos;s<sp/>Single<sp/>Track<sp/>Dynamics<sp/>model</highlight></codeline>
-<codeline lineno="19"><highlight class="stringliteral">Original<sp/>implementation:<sp/>https://gitlab.lrz.de/tum-cps/commonroad-vehicle-models/</highlight></codeline>
-<codeline lineno="20"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="21"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>numba<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>njit</highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight></codeline>
-<codeline lineno="26"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>unittest</highlight></codeline>
-<codeline lineno="27"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>time</highlight></codeline>
-<codeline lineno="28"><highlight class="normal"></highlight></codeline>
-<codeline lineno="29"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">accl_constraints(vel,<sp/>accl,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="32"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Acceleration<sp/>constraints,<sp/>adjusts<sp/>the<sp/>acceleration<sp/>based<sp/>on<sp/>constraints</highlight></codeline>
-<codeline lineno="33"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="34"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="35"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel<sp/>(float):<sp/>current<sp/>velocity<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="36"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>(float):<sp/>unconstraint<sp/>desired<sp/>acceleration</highlight></codeline>
-<codeline lineno="37"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_switch<sp/>(float):<sp/>switching<sp/>velocity<sp/>(velocity<sp/>at<sp/>which<sp/>the<sp/>acceleration<sp/>is<sp/>no<sp/>longer<sp/>able<sp/>to<sp/>create<sp/>wheel<sp/>spin)</highlight></codeline>
-<codeline lineno="38"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a_max<sp/>(float):<sp/>maximum<sp/>allowed<sp/>acceleration</highlight></codeline>
-<codeline lineno="39"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_min<sp/>(float):<sp/>minimum<sp/>allowed<sp/>velocity</highlight></codeline>
-<codeline lineno="40"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_max<sp/>(float):<sp/>maximum<sp/>allowed<sp/>velocity</highlight></codeline>
-<codeline lineno="41"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="42"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="43"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>(float):<sp/>adjusted<sp/>acceleration</highlight></codeline>
-<codeline lineno="44"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="45"><highlight class="normal"></highlight></codeline>
-<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>positive<sp/>accl<sp/>limit</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>vel<sp/>&gt;<sp/>v_switch:</highlight></codeline>
-<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pos_limit<sp/>=<sp/>a_max*v_switch/vel</highlight></codeline>
-<codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pos_limit<sp/>=<sp/>a_max</highlight></codeline>
-<codeline lineno="51"><highlight class="normal"></highlight></codeline>
-<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>accl<sp/>limit<sp/>reached?</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(vel<sp/>&lt;=<sp/>v_min<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>accl<sp/>&lt;=<sp/>0)<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>(vel<sp/>&gt;=<sp/>v_max<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>accl<sp/>&gt;=<sp/>0):</highlight></codeline>
-<codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="55"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>accl<sp/>&lt;=<sp/>-a_max:</highlight></codeline>
-<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>-a_max</highlight></codeline>
-<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>accl<sp/>&gt;=<sp/>pos_limit:</highlight></codeline>
-<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>pos_limit</highlight></codeline>
-<codeline lineno="59"><highlight class="normal"></highlight></codeline>
-<codeline lineno="60"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>accl</highlight></codeline>
-<codeline lineno="61"><highlight class="normal"></highlight></codeline>
-<codeline lineno="62"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="63"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">steering_constraint(steering_angle,<sp/>steering_velocity,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max):</highlight></codeline>
-<codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="65"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Steering<sp/>constraints,<sp/>adjusts<sp/>the<sp/>steering<sp/>velocity<sp/>based<sp/>on<sp/>constraints</highlight></codeline>
-<codeline lineno="66"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="67"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="68"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_angle<sp/>(float):<sp/>current<sp/>steering_angle<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="69"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>(float):<sp/>unconstraint<sp/>desired<sp/>steering_velocity</highlight></codeline>
-<codeline lineno="70"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>s_min<sp/>(float):<sp/>minimum<sp/>steering<sp/>angle</highlight></codeline>
-<codeline lineno="71"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>s_max<sp/>(float):<sp/>maximum<sp/>steering<sp/>angle</highlight></codeline>
-<codeline lineno="72"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv_min<sp/>(float):<sp/>minimum<sp/>steering<sp/>velocity</highlight></codeline>
-<codeline lineno="73"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv_max<sp/>(float):<sp/>maximum<sp/>steering<sp/>velocity</highlight></codeline>
-<codeline lineno="74"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="75"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="76"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>(float):<sp/>adjusted<sp/>steering<sp/>velocity</highlight></codeline>
-<codeline lineno="77"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="78"><highlight class="normal"></highlight></codeline>
-<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>constraint<sp/>steering<sp/>velocity</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(steering_angle<sp/>&lt;=<sp/>s_min<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>steering_velocity<sp/>&lt;=<sp/>0)<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>(steering_angle<sp/>&gt;=<sp/>s_max<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>steering_velocity<sp/>&gt;=<sp/>0):</highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>steering_velocity<sp/>&lt;=<sp/>sv_min:</highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>=<sp/>sv_min</highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>steering_velocity<sp/>&gt;=<sp/>sv_max:</highlight></codeline>
-<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>=<sp/>sv_max</highlight></codeline>
-<codeline lineno="86"><highlight class="normal"></highlight></codeline>
-<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>steering_velocity</highlight></codeline>
-<codeline lineno="88"><highlight class="normal"></highlight></codeline>
-<codeline lineno="89"><highlight class="normal"></highlight></codeline>
-<codeline lineno="90"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="91"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">vehicle_dynamics_ks(x,<sp/>u_init,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="93"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Single<sp/>Track<sp/>Kinematic<sp/>Vehicle<sp/>Dynamics.</highlight></codeline>
-<codeline lineno="94"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="95"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="96"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(numpy.ndarray<sp/>(3,<sp/>)):<sp/>vehicle<sp/>state<sp/>vector<sp/>(x1,<sp/>x2,<sp/>x3,<sp/>x4,<sp/>x5)</highlight></codeline>
-<codeline lineno="97"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x1:<sp/>x<sp/>position<sp/>in<sp/>global<sp/>coordinates</highlight></codeline>
-<codeline lineno="98"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x2:<sp/>y<sp/>position<sp/>in<sp/>global<sp/>coordinates</highlight></codeline>
-<codeline lineno="99"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x3:<sp/>steering<sp/>angle<sp/>of<sp/>front<sp/>wheels</highlight></codeline>
-<codeline lineno="100"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x4:<sp/>velocity<sp/>in<sp/>x<sp/>direction</highlight></codeline>
-<codeline lineno="101"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x5:<sp/>yaw<sp/>angle</highlight></codeline>
-<codeline lineno="102"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>(numpy.ndarray<sp/>(2,<sp/>)):<sp/>control<sp/>input<sp/>vector<sp/>(u1,<sp/>u2)</highlight></codeline>
-<codeline lineno="103"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u1:<sp/>steering<sp/>angle<sp/>velocity<sp/>of<sp/>front<sp/>wheels</highlight></codeline>
-<codeline lineno="104"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u2:<sp/>longitudinal<sp/>acceleration<sp/></highlight></codeline>
-<codeline lineno="105"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="106"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="107"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>(numpy.ndarray):<sp/>right<sp/>hand<sp/>side<sp/>of<sp/>differential<sp/>equations</highlight></codeline>
-<codeline lineno="108"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>wheelbase</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/>lwb<sp/>=<sp/>lf<sp/>+<sp/>lr</highlight></codeline>
-<codeline lineno="111"><highlight class="normal"></highlight></codeline>
-<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>constraints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="113"><highlight class="normal"><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([steering_constraint(x[2],<sp/>u_init[0],<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max),<sp/>accl_constraints(x[3],<sp/>u_init[1],<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)])</highlight></codeline>
-<codeline lineno="114"><highlight class="normal"></highlight></codeline>
-<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>system<sp/>dynamics</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="116"><highlight class="normal"><sp/><sp/><sp/><sp/>f<sp/>=<sp/>np.array([x[3]*np.cos(x[4]),</highlight></codeline>
-<codeline lineno="117"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x[3]*np.sin(x[4]),</highlight></codeline>
-<codeline lineno="118"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u[0],</highlight></codeline>
-<codeline lineno="119"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u[1],</highlight></codeline>
-<codeline lineno="120"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x[3]/lwb*np.tan(x[2])])</highlight></codeline>
-<codeline lineno="121"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>f</highlight></codeline>
-<codeline lineno="122"><highlight class="normal"></highlight></codeline>
-<codeline lineno="123"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="124"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">vehicle_dynamics_st(x,<sp/>u_init,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="126"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Single<sp/>Track<sp/>Dynamic<sp/>Vehicle<sp/>Dynamics.</highlight></codeline>
-<codeline lineno="127"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="128"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="129"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(numpy.ndarray<sp/>(3,<sp/>)):<sp/>vehicle<sp/>state<sp/>vector<sp/>(x1,<sp/>x2,<sp/>x3,<sp/>x4,<sp/>x5,<sp/>x6,<sp/>x7)</highlight></codeline>
-<codeline lineno="130"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x1:<sp/>x<sp/>position<sp/>in<sp/>global<sp/>coordinates</highlight></codeline>
-<codeline lineno="131"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x2:<sp/>y<sp/>position<sp/>in<sp/>global<sp/>coordinates</highlight></codeline>
-<codeline lineno="132"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x3:<sp/>steering<sp/>angle<sp/>of<sp/>front<sp/>wheels</highlight></codeline>
-<codeline lineno="133"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x4:<sp/>velocity<sp/>in<sp/>x<sp/>direction</highlight></codeline>
-<codeline lineno="134"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x5:<sp/>yaw<sp/>angle</highlight></codeline>
-<codeline lineno="135"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x6:<sp/>yaw<sp/>rate</highlight></codeline>
-<codeline lineno="136"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x7:<sp/>slip<sp/>angle<sp/>at<sp/>vehicle<sp/>center</highlight></codeline>
-<codeline lineno="137"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>(numpy.ndarray<sp/>(2,<sp/>)):<sp/>control<sp/>input<sp/>vector<sp/>(u1,<sp/>u2)</highlight></codeline>
-<codeline lineno="138"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u1:<sp/>steering<sp/>angle<sp/>velocity<sp/>of<sp/>front<sp/>wheels</highlight></codeline>
-<codeline lineno="139"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u2:<sp/>longitudinal<sp/>acceleration<sp/></highlight></codeline>
-<codeline lineno="140"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="141"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="142"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>(numpy.ndarray):<sp/>right<sp/>hand<sp/>side<sp/>of<sp/>differential<sp/>equations</highlight></codeline>
-<codeline lineno="143"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="144"><highlight class="normal"></highlight></codeline>
-<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>gravity<sp/>constant<sp/>m/s^2</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"></highlight></codeline>
-<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>constraints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([steering_constraint(x[2],<sp/>u_init[0],<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max),<sp/>accl_constraints(x[3],<sp/>u_init[1],<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)])</highlight></codeline>
-<codeline lineno="150"><highlight class="normal"></highlight></codeline>
-<codeline lineno="151"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>switch<sp/>to<sp/>kinematic<sp/>model<sp/>for<sp/>small<sp/>velocities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>abs(x[3])<sp/>&lt;<sp/>0.1:</highlight></codeline>
-<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>wheelbase</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>lwb<sp/>=<sp/>lf<sp/>+<sp/>lr</highlight></codeline>
-<codeline lineno="155"><highlight class="normal"></highlight></codeline>
-<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>system<sp/>dynamics</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_ks<sp/>=<sp/>x[0:5]</highlight></codeline>
-<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_ks<sp/>=<sp/>vehicle_dynamics_ks(x_ks,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)</highlight></codeline>
-<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>=<sp/>np.hstack((f_ks,<sp/>np.array([u[1]/lwb*np.tan(x[2])+x[3]/(lwb*np.cos(x[2])**2)*u[0],<sp/></highlight></codeline>
-<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>0])))</highlight></codeline>
-<codeline lineno="161"><highlight class="normal"></highlight></codeline>
-<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>system<sp/>dynamics</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>=<sp/>np.array([x[3]*np.cos(x[6]<sp/>+<sp/>x[4]),<sp/></highlight></codeline>
-<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x[3]*np.sin(x[6]<sp/>+<sp/>x[4]),<sp/></highlight></codeline>
-<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u[0],<sp/></highlight></codeline>
-<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u[1],<sp/></highlight></codeline>
-<codeline lineno="168"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x[5],<sp/></highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>-mu*m/(x[3]*I*(lr+lf))*(lf**2*C_Sf*(g*lr-u[1]*h)<sp/>+<sp/>lr**2*C_Sr*(g*lf<sp/>+<sp/>u[1]*h))*x[5]<sp/>\</highlight></codeline>
-<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>+mu*m/(I*(lr+lf))*(lr*C_Sr*(g*lf<sp/>+<sp/>u[1]*h)<sp/>-<sp/>lf*C_Sf*(g*lr<sp/>-<sp/>u[1]*h))*x[6]<sp/>\</highlight></codeline>
-<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>+mu*m/(I*(lr+lf))*lf*C_Sf*(g*lr<sp/>-<sp/>u[1]*h)*x[2],<sp/></highlight></codeline>
-<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(mu/(x[3]**2*(lr+lf))*(C_Sr*(g*lf<sp/>+<sp/>u[1]*h)*lr<sp/>-<sp/>C_Sf*(g*lr<sp/>-<sp/>u[1]*h)*lf)-1)*x[5]<sp/>\</highlight></codeline>
-<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>-mu/(x[3]*(lr+lf))*(C_Sr*(g*lf<sp/>+<sp/>u[1]*h)<sp/>+<sp/>C_Sf*(g*lr-u[1]*h))*x[6]<sp/>\</highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>+mu/(x[3]*(lr+lf))*(C_Sf*(g*lr-u[1]*h))*x[2]])</highlight></codeline>
-<codeline lineno="175"><highlight class="normal"></highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>f</highlight></codeline>
-<codeline lineno="177"><highlight class="normal"></highlight></codeline>
-<codeline lineno="178"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="179"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">pid(speed,<sp/>steer,<sp/>current_speed,<sp/>current_steer,<sp/>max_sv,<sp/>max_a,<sp/>max_v,<sp/>min_v):</highlight></codeline>
-<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="181"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Basic<sp/>controller<sp/>for<sp/>speed/steer<sp/>-&gt;<sp/>accl./steer<sp/>vel.</highlight></codeline>
-<codeline lineno="182"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="183"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="184"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>speed<sp/>(float):<sp/>desired<sp/>input<sp/>speed</highlight></codeline>
-<codeline lineno="185"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steer<sp/>(float):<sp/>desired<sp/>input<sp/>steering<sp/>angle</highlight></codeline>
-<codeline lineno="186"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="187"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="188"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>(float):<sp/>desired<sp/>input<sp/>acceleration</highlight></codeline>
-<codeline lineno="189"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv<sp/>(float):<sp/>desired<sp/>input<sp/>steering<sp/>velocity</highlight></codeline>
-<codeline lineno="190"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="191"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>steering</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="192"><highlight class="normal"><sp/><sp/><sp/><sp/>steer_diff<sp/>=<sp/>steer<sp/>-<sp/>current_steer</highlight></codeline>
-<codeline lineno="193"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>np.fabs(steer_diff)<sp/>&gt;<sp/>1e-4:</highlight></codeline>
-<codeline lineno="194"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv<sp/>=<sp/>(steer_diff<sp/>/<sp/>np.fabs(steer_diff))<sp/>*<sp/>max_sv</highlight></codeline>
-<codeline lineno="195"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="196"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv<sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="197"><highlight class="normal"></highlight></codeline>
-<codeline lineno="198"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>accl</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/>vel_diff<sp/>=<sp/>speed<sp/>-<sp/>current_speed</highlight></codeline>
-<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>currently<sp/>forward</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>current_speed<sp/>&gt;<sp/>0.:</highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(vel_diff<sp/>&gt;<sp/>0):</highlight></codeline>
-<codeline lineno="203"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>accelerate</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>kp<sp/>=<sp/>2.0<sp/>*<sp/>max_a<sp/>/<sp/>max_v</highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>kp<sp/>*<sp/>vel_diff</highlight></codeline>
-<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>braking</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>kp<sp/>=<sp/>2.0<sp/>*<sp/>max_a<sp/>/<sp/>(-min_v)</highlight></codeline>
-<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>kp<sp/>*<sp/>vel_diff</highlight></codeline>
-<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>currently<sp/>backwards</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(vel_diff<sp/>&gt;<sp/>0):</highlight></codeline>
-<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>braking</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>kp<sp/>=<sp/>2.0<sp/>*<sp/>max_a<sp/>/<sp/>max_v</highlight></codeline>
-<codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>kp<sp/>*<sp/>vel_diff</highlight></codeline>
-<codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>accelerating</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="218"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>kp<sp/>=<sp/>2.0<sp/>*<sp/>max_a<sp/>/<sp/>(-min_v)</highlight></codeline>
-<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>kp<sp/>*<sp/>vel_diff</highlight></codeline>
-<codeline lineno="220"><highlight class="normal"></highlight></codeline>
-<codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>accl,<sp/>sv</highlight></codeline>
-<codeline lineno="222"><highlight class="normal"></highlight></codeline>
-<codeline lineno="223"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">func_KS(x,<sp/>t,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="224"><highlight class="normal"><sp/><sp/><sp/><sp/>f<sp/>=<sp/>vehicle_dynamics_ks(x,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)</highlight></codeline>
-<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>f</highlight></codeline>
-<codeline lineno="226"><highlight class="normal"></highlight></codeline>
-<codeline lineno="227"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">func_ST(x,<sp/>t,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/>f<sp/>=<sp/>vehicle_dynamics_st(x,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)</highlight></codeline>
-<codeline lineno="229"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>f</highlight></codeline>
-<codeline lineno="230"><highlight class="normal"></highlight></codeline>
-<codeline lineno="231" refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test" kindref="compound">DynamicsTest</ref>(unittest.TestCase):</highlight></codeline>
-<codeline lineno="232"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">setUp(self):</highlight></codeline>
-<codeline lineno="233"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>test<sp/>params</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="234"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref><sp/>=<sp/>1.0489</highlight></codeline>
-<codeline lineno="235"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref><sp/>=<sp/>21.92/1.0489</highlight></codeline>
-<codeline lineno="236"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref><sp/>=<sp/>21.92/1.0489</highlight></codeline>
-<codeline lineno="237"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref><sp/>=<sp/>0.3048*3.793293</highlight></codeline>
-<codeline lineno="238"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref><sp/>=<sp/>0.3048*4.667707</highlight></codeline>
-<codeline lineno="239"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref><sp/>=<sp/>0.3048*2.01355</highlight></codeline>
-<codeline lineno="240"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref><sp/>=<sp/>4.4482216152605/0.3048*74.91452</highlight></codeline>
-<codeline lineno="241"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref><sp/>=<sp/>4.4482216152605*0.3048*1321.416</highlight></codeline>
-<codeline lineno="242"><highlight class="normal"></highlight></codeline>
-<codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#steering<sp/>constraints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="244"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref><sp/>=<sp/>-1.066<sp/><sp/></highlight><highlight class="comment">#minimum<sp/>steering<sp/>angle<sp/>[rad]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref><sp/>=<sp/>1.066<sp/><sp/></highlight><highlight class="comment">#maximum<sp/>steering<sp/>angle<sp/>[rad]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="246"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref><sp/>=<sp/>-0.4<sp/><sp/></highlight><highlight class="comment">#minimum<sp/>steering<sp/>velocity<sp/>[rad/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="247"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref><sp/>=<sp/>0.4<sp/><sp/></highlight><highlight class="comment">#maximum<sp/>steering<sp/>velocity<sp/>[rad/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="248"><highlight class="normal"></highlight></codeline>
-<codeline lineno="249"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#longitudinal<sp/>constraints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="250"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref><sp/>=<sp/>-13.6<sp/><sp/></highlight><highlight class="comment">#minimum<sp/>velocity<sp/>[m/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="251"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref><sp/>=<sp/>50.8<sp/><sp/></highlight><highlight class="comment">#minimum<sp/>velocity<sp/>[m/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="252"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref><sp/>=<sp/>7.319<sp/><sp/></highlight><highlight class="comment">#switching<sp/>velocity<sp/>[m/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="253"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref><sp/>=<sp/>11.5<sp/><sp/></highlight><highlight class="comment">#maximum<sp/>absolute<sp/>acceleration<sp/>[m/s^2]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="254"><highlight class="normal"></highlight></codeline>
-<codeline lineno="255"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_derivatives(self):</highlight></codeline>
-<codeline lineno="256"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>derivatives</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="257"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_ks_gt<sp/>=<sp/>[16.3475935934250209,<sp/>0.4819314886013121,<sp/>0.1500000000000000,<sp/>5.1464424102339752,<sp/>0.2401426578627629]</highlight></codeline>
-<codeline lineno="258"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_st_gt<sp/>=<sp/>[15.7213512030862397,<sp/>0.0925527979719355,<sp/>0.1500000000000000,<sp/>5.3536773276413925,<sp/>0.0529001056654038,<sp/>0.6435589397748606,<sp/>0.0313297971641291]</highlight></codeline>
-<codeline lineno="259"><highlight class="normal"></highlight></codeline>
-<codeline lineno="260"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>system<sp/>dynamics</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="261"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="262"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_ks<sp/>=<sp/>np.array([3.9579422297936526,<sp/>0.0391650102771405,<sp/>0.0378491427211811,<sp/>16.3546957860883566,<sp/>0.0294717351052816])</highlight></codeline>
-<codeline lineno="263"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_st<sp/>=<sp/>np.array([2.0233348142065677,<sp/>0.0041907137716636,<sp/>0.0197545248559617,<sp/>15.7216236334290116,<sp/>0.0025857914776859,<sp/>0.0529001056654038,<sp/>0.0033012170610298])</highlight></codeline>
-<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_delta<sp/>=<sp/>0.15</highlight></codeline>
-<codeline lineno="265"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>acc<sp/>=<sp/>0.63*g</highlight></codeline>
-<codeline lineno="266"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([v_delta,<sp/><sp/>acc])</highlight></codeline>
-<codeline lineno="267"><highlight class="normal"></highlight></codeline>
-<codeline lineno="268"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_ks<sp/>=<sp/>vehicle_dynamics_ks(x_ks,<sp/>u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>)</highlight></codeline>
-<codeline lineno="269"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_st<sp/>=<sp/>vehicle_dynamics_st(x_st,<sp/>u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>)</highlight></codeline>
-<codeline lineno="270"><highlight class="normal"></highlight></codeline>
-<codeline lineno="271"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(10000):</highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_st<sp/>=<sp/>vehicle_dynamics_st(x_st,<sp/>u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>)</highlight></codeline>
-<codeline lineno="274"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>duration<sp/>=<sp/>time.time()<sp/>-<sp/>start</highlight></codeline>
-<codeline lineno="275"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>avg_fps<sp/>=<sp/>10000/duration</highlight></codeline>
-<codeline lineno="276"><highlight class="normal"></highlight></codeline>
-<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertAlmostEqual(np.max(np.abs(f_ks_gt-f_ks)),<sp/>0.)</highlight></codeline>
-<codeline lineno="278"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertAlmostEqual(np.max(np.abs(f_st_gt-f_st)),<sp/>0.)</highlight></codeline>
-<codeline lineno="279"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertGreater(avg_fps,<sp/>5000)</highlight></codeline>
-<codeline lineno="280"><highlight class="normal"></highlight></codeline>
-<codeline lineno="281"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_zeroinit_roll(self):</highlight></codeline>
-<codeline lineno="282"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.integrate<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>odeint</highlight></codeline>
-<codeline lineno="283"><highlight class="normal"></highlight></codeline>
-<codeline lineno="284"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>testing<sp/>for<sp/>zero<sp/>initial<sp/>state,<sp/>zero<sp/>input<sp/>singularities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="285"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="286"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_start<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="287"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_final<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="288"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="290"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Psi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="291"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dotPsi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sy0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="294"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>initial_state<sp/>=<sp/>[0,sy0,delta0,vel0,Psi0,dotPsi0,beta0]</highlight></codeline>
-<codeline lineno="295"><highlight class="normal"></highlight></codeline>
-<codeline lineno="296"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_KS<sp/>=<sp/>np.array(initial_state[0:5])</highlight></codeline>
-<codeline lineno="297"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_ST<sp/>=<sp/>np.array(initial_state)</highlight></codeline>
-<codeline lineno="298"><highlight class="normal"></highlight></codeline>
-<codeline lineno="299"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>time<sp/>vector</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="300"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t<sp/>=<sp/>np.arange(t_start,<sp/>t_final,<sp/>1e-4)</highlight></codeline>
-<codeline lineno="301"><highlight class="normal"></highlight></codeline>
-<codeline lineno="302"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>set<sp/>input:<sp/>rolling<sp/>car<sp/>(velocity<sp/>should<sp/>stay<sp/>constant)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="303"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([0.,<sp/>0.])</highlight></codeline>
-<codeline lineno="304"><highlight class="normal"></highlight></codeline>
-<codeline lineno="305"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="306"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_roll_st<sp/>=<sp/>odeint(func_ST,<sp/>x0_ST,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="307"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="308"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_roll_ks<sp/>=<sp/>odeint(func_KS,<sp/>x0_KS,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="309"><highlight class="normal"></highlight></codeline>
-<codeline lineno="310"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(x_roll_st[-1]==x0_ST))</highlight></codeline>
-<codeline lineno="311"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(x_roll_ks[-1]==x0_KS))</highlight></codeline>
-<codeline lineno="312"><highlight class="normal"></highlight></codeline>
-<codeline lineno="313"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_zeroinit_dec(self):</highlight></codeline>
-<codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.integrate<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>odeint</highlight></codeline>
-<codeline lineno="315"><highlight class="normal"></highlight></codeline>
-<codeline lineno="316"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>testing<sp/>for<sp/>zero<sp/>initial<sp/>state,<sp/>decelerating<sp/>input<sp/>singularities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="317"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="318"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_start<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="319"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_final<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="320"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="321"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="322"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Psi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="323"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dotPsi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="324"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="325"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sy0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="326"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>initial_state<sp/>=<sp/>[0,sy0,delta0,vel0,Psi0,dotPsi0,beta0]</highlight></codeline>
-<codeline lineno="327"><highlight class="normal"></highlight></codeline>
-<codeline lineno="328"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_KS<sp/>=<sp/>np.array(initial_state[0:5])</highlight></codeline>
-<codeline lineno="329"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_ST<sp/>=<sp/>np.array(initial_state)</highlight></codeline>
-<codeline lineno="330"><highlight class="normal"></highlight></codeline>
-<codeline lineno="331"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>time<sp/>vector</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="332"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t<sp/>=<sp/>np.arange(t_start,<sp/>t_final,<sp/>1e-4)</highlight></codeline>
-<codeline lineno="333"><highlight class="normal"></highlight></codeline>
-<codeline lineno="334"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>set<sp/>decel<sp/>input</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="335"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([0.,<sp/>-0.7*g])</highlight></codeline>
-<codeline lineno="336"><highlight class="normal"></highlight></codeline>
-<codeline lineno="337"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="338"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_dec_st<sp/>=<sp/>odeint(func_ST,<sp/>x0_ST,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="339"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="340"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_dec_ks<sp/>=<sp/>odeint(func_KS,<sp/>x0_KS,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="341"><highlight class="normal"></highlight></codeline>
-<codeline lineno="342"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="343"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_dec_st_gt<sp/>=<sp/>[-3.4335000000000013,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>-6.8670000000000018,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000]</highlight></codeline>
-<codeline lineno="344"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="345"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_dec_ks_gt<sp/>=<sp/>[-3.4335000000000013,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>-6.8670000000000018,<sp/>0.0000000000000000]</highlight></codeline>
-<codeline lineno="346"><highlight class="normal"></highlight></codeline>
-<codeline lineno="347"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_dec_st[-1]<sp/>-<sp/>x_dec_st_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="348"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_dec_ks[-1]<sp/>-<sp/>x_dec_ks_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="349"><highlight class="normal"></highlight></codeline>
-<codeline lineno="350"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_zeroinit_acc(self):</highlight></codeline>
-<codeline lineno="351"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.integrate<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>odeint</highlight></codeline>
-<codeline lineno="352"><highlight class="normal"></highlight></codeline>
-<codeline lineno="353"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>testing<sp/>for<sp/>zero<sp/>initial<sp/>state,<sp/>accelerating<sp/>with<sp/>left<sp/>steer<sp/>input<sp/>singularities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="354"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>wheel<sp/>spin<sp/>and<sp/>velocity<sp/>should<sp/>increase<sp/>more<sp/>wheel<sp/>spin<sp/>at<sp/>rear</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="355"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="356"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_start<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="357"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_final<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="358"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="359"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="360"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Psi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="361"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dotPsi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="362"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="363"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sy0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="364"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>initial_state<sp/>=<sp/>[0,sy0,delta0,vel0,Psi0,dotPsi0,beta0]</highlight></codeline>
-<codeline lineno="365"><highlight class="normal"></highlight></codeline>
-<codeline lineno="366"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_KS<sp/>=<sp/>np.array(initial_state[0:5])</highlight></codeline>
-<codeline lineno="367"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_ST<sp/>=<sp/>np.array(initial_state)</highlight></codeline>
-<codeline lineno="368"><highlight class="normal"></highlight></codeline>
-<codeline lineno="369"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>time<sp/>vector</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="370"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t<sp/>=<sp/>np.arange(t_start,<sp/>t_final,<sp/>1e-4)</highlight></codeline>
-<codeline lineno="371"><highlight class="normal"></highlight></codeline>
-<codeline lineno="372"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>set<sp/>decel<sp/>input</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="373"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([0.15,<sp/>0.63*g])</highlight></codeline>
-<codeline lineno="374"><highlight class="normal"></highlight></codeline>
-<codeline lineno="375"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="376"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_acc_st<sp/>=<sp/>odeint(func_ST,<sp/>x0_ST,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="377"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="378"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_acc_ks<sp/>=<sp/>odeint(func_KS,<sp/>x0_KS,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="379"><highlight class="normal"></highlight></codeline>
-<codeline lineno="380"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="381"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_acc_st_gt<sp/>=<sp/>[3.0731976046859715,<sp/>0.2869835398304389,<sp/>0.1500000000000000,<sp/>6.1802999999999999,<sp/>0.1097747074946325,<sp/>0.3248268063223301,<sp/>0.0697547542798040]</highlight></codeline>
-<codeline lineno="382"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="383"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_acc_ks_gt<sp/>=<sp/>[3.0845676868494927,<sp/>0.1484249221523042,<sp/>0.1500000000000000,<sp/>6.1803000000000017,<sp/>0.1203664469224163]</highlight></codeline>
-<codeline lineno="384"><highlight class="normal"></highlight></codeline>
-<codeline lineno="385"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_acc_st[-1]<sp/>-<sp/>x_acc_st_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="386"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_acc_ks[-1]<sp/>-<sp/>x_acc_ks_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="387"><highlight class="normal"></highlight></codeline>
-<codeline lineno="388"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_zeroinit_rollleft(self):</highlight></codeline>
-<codeline lineno="389"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.integrate<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>odeint</highlight></codeline>
-<codeline lineno="390"><highlight class="normal"></highlight></codeline>
-<codeline lineno="391"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>testing<sp/>for<sp/>zero<sp/>initial<sp/>state,<sp/>rolling<sp/>and<sp/>steering<sp/>left<sp/>input<sp/>singularities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="392"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="393"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_start<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="394"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_final<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="395"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="396"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="397"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Psi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="398"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dotPsi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="399"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="400"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sy0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="401"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>initial_state<sp/>=<sp/>[0,sy0,delta0,vel0,Psi0,dotPsi0,beta0]</highlight></codeline>
-<codeline lineno="402"><highlight class="normal"></highlight></codeline>
-<codeline lineno="403"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_KS<sp/>=<sp/>np.array(initial_state[0:5])</highlight></codeline>
-<codeline lineno="404"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_ST<sp/>=<sp/>np.array(initial_state)</highlight></codeline>
-<codeline lineno="405"><highlight class="normal"></highlight></codeline>
-<codeline lineno="406"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>time<sp/>vector</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="407"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t<sp/>=<sp/>np.arange(t_start,<sp/>t_final,<sp/>1e-4)</highlight></codeline>
-<codeline lineno="408"><highlight class="normal"></highlight></codeline>
-<codeline lineno="409"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>set<sp/>decel<sp/>input</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="410"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([0.15,<sp/>0.])</highlight></codeline>
-<codeline lineno="411"><highlight class="normal"></highlight></codeline>
-<codeline lineno="412"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="413"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_left_st<sp/>=<sp/>odeint(func_ST,<sp/>x0_ST,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="414"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="415"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_left_ks<sp/>=<sp/>odeint(func_KS,<sp/>x0_KS,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="416"><highlight class="normal"></highlight></codeline>
-<codeline lineno="417"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="418"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_left_st_gt<sp/>=<sp/>[0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.1500000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000]</highlight></codeline>
-<codeline lineno="419"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="420"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_left_ks_gt<sp/>=<sp/>[0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.1500000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000]</highlight></codeline>
-<codeline lineno="421"><highlight class="normal"></highlight></codeline>
-<codeline lineno="422"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_left_st[-1]<sp/>-<sp/>x_left_st_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="423"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_left_ks[-1]<sp/>-<sp/>x_left_ks_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="424"><highlight class="normal"></highlight></codeline>
-<codeline lineno="425"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>__name__<sp/>==<sp/></highlight><highlight class="stringliteral">&apos;__main__&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="426"><highlight class="normal"><sp/><sp/><sp/><sp/>unittest.main()</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/dynamics__test_8py.xml b/docs/xml/dynamics__test_8py.xml
deleted file mode 100644
index 7ed9ed57..00000000
--- a/docs/xml/dynamics__test_8py.xml
+++ /dev/null
@@ -1,411 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="dynamics__test_8py" kind="file" language="Python">
-    <compoundname>dynamics_test.py</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test" prot="public">f110_gym::unittest::dynamics_test::DynamicsTest</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1dynamics__test">f110_gym::unittest::dynamics_test</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>Copyright<sp/>2020<sp/>Technical<sp/>University<sp/>of<sp/>Munich,<sp/>Professorship<sp/>of<sp/>Cyber-Physical<sp/>Systems,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Redistribution<sp/>and<sp/>use<sp/>in<sp/>source<sp/>and<sp/>binary<sp/>forms,<sp/>with<sp/>or<sp/>without<sp/>modification,<sp/>are<sp/>permitted<sp/>provided<sp/>that<sp/>the<sp/>following<sp/>conditions<sp/>are<sp/>met:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>1.<sp/>Redistributions<sp/>of<sp/>source<sp/>code<sp/>must<sp/>retain<sp/>the<sp/>above<sp/>copyright<sp/>notice,<sp/>this<sp/>list<sp/>of<sp/>conditions<sp/>and<sp/>the<sp/>following<sp/>disclaimer.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>2.<sp/>Redistributions<sp/>in<sp/>binary<sp/>form<sp/>must<sp/>reproduce<sp/>the<sp/>above<sp/>copyright<sp/>notice,<sp/>this<sp/>list<sp/>of<sp/>conditions<sp/>and<sp/>the<sp/>following<sp/>disclaimer<sp/>in<sp/>the<sp/>documentation<sp/>and/or<sp/>other<sp/>materials<sp/>provided<sp/>with<sp/>the<sp/>distribution.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>3.<sp/>Neither<sp/>the<sp/>name<sp/>of<sp/>the<sp/>copyright<sp/>holder<sp/>nor<sp/>the<sp/>names<sp/>of<sp/>its<sp/>contributors<sp/>may<sp/>be<sp/>used<sp/>to<sp/>endorse<sp/>or<sp/>promote<sp/>products<sp/>derived<sp/>from<sp/>this<sp/>software<sp/>without<sp/>specific<sp/>prior<sp/>written<sp/>permission.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THIS<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>BY<sp/>THE<sp/>COPYRIGHT<sp/>HOLDERS<sp/>AND<sp/>CONTRIBUTORS<sp/>&quot;AS<sp/>IS&quot;<sp/>AND<sp/>ANY<sp/>EXPRESS<sp/>OR<sp/>IMPLIED<sp/>WARRANTIES,<sp/>INCLUDING,<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO,<sp/>THE<sp/>IMPLIED<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY<sp/>AND<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>ARE<sp/>DISCLAIMED.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE<sp/>COPYRIGHT<sp/>HOLDER<sp/>OR<sp/>CONTRIBUTORS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>DIRECT,<sp/>INDIRECT,<sp/>INCIDENTAL,<sp/>SPECIAL,<sp/>EXEMPLARY,<sp/>OR<sp/>CONSEQUENTIAL<sp/>DAMAGES<sp/>(INCLUDING,<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO,<sp/>PROCUREMENT<sp/>OF<sp/>SUBSTITUTE<sp/>GOODS<sp/>OR<sp/>SERVICES;<sp/>LOSS<sp/>OF<sp/>USE,<sp/>DATA,<sp/>OR<sp/>PROFITS;<sp/>OR<sp/>BUSINESS<sp/>INTERRUPTION)<sp/>HOWEVER<sp/>CAUSED<sp/>AND<sp/>ON<sp/>ANY<sp/>THEORY<sp/>OF<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>CONTRACT,<sp/>STRICT<sp/>LIABILITY,<sp/>OR<sp/>TORT<sp/>(INCLUDING<sp/>NEGLIGENCE<sp/>OR<sp/>OTHERWISE)<sp/>ARISING<sp/>IN<sp/>ANY<sp/>WAY<sp/>OUT<sp/>OF<sp/>THE<sp/>USE<sp/>OF<sp/>THIS<sp/>SOFTWARE,<sp/>EVEN<sp/>IF<sp/>ADVISED<sp/>OF<sp/>THE<sp/>POSSIBILITY<sp/>OF<sp/>SUCH<sp/>DAMAGE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="16"><highlight class="stringliteral">Prototype<sp/>of<sp/>vehicle<sp/>dynamics<sp/>functions<sp/>and<sp/>classes<sp/>for<sp/>simulating<sp/>2D<sp/>Single<sp/></highlight></codeline>
-<codeline lineno="17"><highlight class="stringliteral">Track<sp/>dynamic<sp/>model</highlight></codeline>
-<codeline lineno="18"><highlight class="stringliteral">Following<sp/>the<sp/>implementation<sp/>of<sp/>commanroad&apos;s<sp/>Single<sp/>Track<sp/>Dynamics<sp/>model</highlight></codeline>
-<codeline lineno="19"><highlight class="stringliteral">Original<sp/>implementation:<sp/>https://gitlab.lrz.de/tum-cps/commonroad-vehicle-models/</highlight></codeline>
-<codeline lineno="20"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="21"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>numba<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>njit</highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight></codeline>
-<codeline lineno="26"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>unittest</highlight></codeline>
-<codeline lineno="27"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>time</highlight></codeline>
-<codeline lineno="28"><highlight class="normal"></highlight></codeline>
-<codeline lineno="29"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">accl_constraints(vel,<sp/>accl,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="32"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Acceleration<sp/>constraints,<sp/>adjusts<sp/>the<sp/>acceleration<sp/>based<sp/>on<sp/>constraints</highlight></codeline>
-<codeline lineno="33"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="34"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="35"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel<sp/>(float):<sp/>current<sp/>velocity<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="36"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>(float):<sp/>unconstraint<sp/>desired<sp/>acceleration</highlight></codeline>
-<codeline lineno="37"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_switch<sp/>(float):<sp/>switching<sp/>velocity<sp/>(velocity<sp/>at<sp/>which<sp/>the<sp/>acceleration<sp/>is<sp/>no<sp/>longer<sp/>able<sp/>to<sp/>create<sp/>wheel<sp/>spin)</highlight></codeline>
-<codeline lineno="38"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a_max<sp/>(float):<sp/>maximum<sp/>allowed<sp/>acceleration</highlight></codeline>
-<codeline lineno="39"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_min<sp/>(float):<sp/>minimum<sp/>allowed<sp/>velocity</highlight></codeline>
-<codeline lineno="40"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_max<sp/>(float):<sp/>maximum<sp/>allowed<sp/>velocity</highlight></codeline>
-<codeline lineno="41"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="42"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="43"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>(float):<sp/>adjusted<sp/>acceleration</highlight></codeline>
-<codeline lineno="44"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="45"><highlight class="normal"></highlight></codeline>
-<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>positive<sp/>accl<sp/>limit</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>vel<sp/>&gt;<sp/>v_switch:</highlight></codeline>
-<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pos_limit<sp/>=<sp/>a_max*v_switch/vel</highlight></codeline>
-<codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pos_limit<sp/>=<sp/>a_max</highlight></codeline>
-<codeline lineno="51"><highlight class="normal"></highlight></codeline>
-<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>accl<sp/>limit<sp/>reached?</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(vel<sp/>&lt;=<sp/>v_min<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>accl<sp/>&lt;=<sp/>0)<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>(vel<sp/>&gt;=<sp/>v_max<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>accl<sp/>&gt;=<sp/>0):</highlight></codeline>
-<codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="55"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>accl<sp/>&lt;=<sp/>-a_max:</highlight></codeline>
-<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>-a_max</highlight></codeline>
-<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>accl<sp/>&gt;=<sp/>pos_limit:</highlight></codeline>
-<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>=<sp/>pos_limit</highlight></codeline>
-<codeline lineno="59"><highlight class="normal"></highlight></codeline>
-<codeline lineno="60"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>accl</highlight></codeline>
-<codeline lineno="61"><highlight class="normal"></highlight></codeline>
-<codeline lineno="62"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="63"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">steering_constraint(steering_angle,<sp/>steering_velocity,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max):</highlight></codeline>
-<codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="65"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Steering<sp/>constraints,<sp/>adjusts<sp/>the<sp/>steering<sp/>velocity<sp/>based<sp/>on<sp/>constraints</highlight></codeline>
-<codeline lineno="66"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="67"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="68"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_angle<sp/>(float):<sp/>current<sp/>steering_angle<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="69"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>(float):<sp/>unconstraint<sp/>desired<sp/>steering_velocity</highlight></codeline>
-<codeline lineno="70"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>s_min<sp/>(float):<sp/>minimum<sp/>steering<sp/>angle</highlight></codeline>
-<codeline lineno="71"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>s_max<sp/>(float):<sp/>maximum<sp/>steering<sp/>angle</highlight></codeline>
-<codeline lineno="72"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv_min<sp/>(float):<sp/>minimum<sp/>steering<sp/>velocity</highlight></codeline>
-<codeline lineno="73"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv_max<sp/>(float):<sp/>maximum<sp/>steering<sp/>velocity</highlight></codeline>
-<codeline lineno="74"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="75"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="76"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>(float):<sp/>adjusted<sp/>steering<sp/>velocity</highlight></codeline>
-<codeline lineno="77"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="78"><highlight class="normal"></highlight></codeline>
-<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>constraint<sp/>steering<sp/>velocity</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(steering_angle<sp/>&lt;=<sp/>s_min<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>steering_velocity<sp/>&lt;=<sp/>0)<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>(steering_angle<sp/>&gt;=<sp/>s_max<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>steering_velocity<sp/>&gt;=<sp/>0):</highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>steering_velocity<sp/>&lt;=<sp/>sv_min:</highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>=<sp/>sv_min</highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>steering_velocity<sp/>&gt;=<sp/>sv_max:</highlight></codeline>
-<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steering_velocity<sp/>=<sp/>sv_max</highlight></codeline>
-<codeline lineno="86"><highlight class="normal"></highlight></codeline>
-<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>steering_velocity</highlight></codeline>
-<codeline lineno="88"><highlight class="normal"></highlight></codeline>
-<codeline lineno="89"><highlight class="normal"></highlight></codeline>
-<codeline lineno="90"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="91"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">vehicle_dynamics_ks(x,<sp/>u_init,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="93"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Single<sp/>Track<sp/>Kinematic<sp/>Vehicle<sp/>Dynamics.</highlight></codeline>
-<codeline lineno="94"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="95"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="96"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(numpy.ndarray<sp/>(3,<sp/>)):<sp/>vehicle<sp/>state<sp/>vector<sp/>(x1,<sp/>x2,<sp/>x3,<sp/>x4,<sp/>x5)</highlight></codeline>
-<codeline lineno="97"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x1:<sp/>x<sp/>position<sp/>in<sp/>global<sp/>coordinates</highlight></codeline>
-<codeline lineno="98"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x2:<sp/>y<sp/>position<sp/>in<sp/>global<sp/>coordinates</highlight></codeline>
-<codeline lineno="99"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x3:<sp/>steering<sp/>angle<sp/>of<sp/>front<sp/>wheels</highlight></codeline>
-<codeline lineno="100"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x4:<sp/>velocity<sp/>in<sp/>x<sp/>direction</highlight></codeline>
-<codeline lineno="101"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x5:<sp/>yaw<sp/>angle</highlight></codeline>
-<codeline lineno="102"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>(numpy.ndarray<sp/>(2,<sp/>)):<sp/>control<sp/>input<sp/>vector<sp/>(u1,<sp/>u2)</highlight></codeline>
-<codeline lineno="103"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u1:<sp/>steering<sp/>angle<sp/>velocity<sp/>of<sp/>front<sp/>wheels</highlight></codeline>
-<codeline lineno="104"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u2:<sp/>longitudinal<sp/>acceleration<sp/></highlight></codeline>
-<codeline lineno="105"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="106"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="107"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>(numpy.ndarray):<sp/>right<sp/>hand<sp/>side<sp/>of<sp/>differential<sp/>equations</highlight></codeline>
-<codeline lineno="108"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>wheelbase</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/>lwb<sp/>=<sp/>lf<sp/>+<sp/>lr</highlight></codeline>
-<codeline lineno="111"><highlight class="normal"></highlight></codeline>
-<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>constraints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="113"><highlight class="normal"><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([steering_constraint(x[2],<sp/>u_init[0],<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max),<sp/>accl_constraints(x[3],<sp/>u_init[1],<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)])</highlight></codeline>
-<codeline lineno="114"><highlight class="normal"></highlight></codeline>
-<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>system<sp/>dynamics</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="116"><highlight class="normal"><sp/><sp/><sp/><sp/>f<sp/>=<sp/>np.array([x[3]*np.cos(x[4]),</highlight></codeline>
-<codeline lineno="117"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x[3]*np.sin(x[4]),</highlight></codeline>
-<codeline lineno="118"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u[0],</highlight></codeline>
-<codeline lineno="119"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u[1],</highlight></codeline>
-<codeline lineno="120"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x[3]/lwb*np.tan(x[2])])</highlight></codeline>
-<codeline lineno="121"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>f</highlight></codeline>
-<codeline lineno="122"><highlight class="normal"></highlight></codeline>
-<codeline lineno="123"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="124"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">vehicle_dynamics_st(x,<sp/>u_init,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="126"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Single<sp/>Track<sp/>Dynamic<sp/>Vehicle<sp/>Dynamics.</highlight></codeline>
-<codeline lineno="127"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="128"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="129"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(numpy.ndarray<sp/>(3,<sp/>)):<sp/>vehicle<sp/>state<sp/>vector<sp/>(x1,<sp/>x2,<sp/>x3,<sp/>x4,<sp/>x5,<sp/>x6,<sp/>x7)</highlight></codeline>
-<codeline lineno="130"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x1:<sp/>x<sp/>position<sp/>in<sp/>global<sp/>coordinates</highlight></codeline>
-<codeline lineno="131"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x2:<sp/>y<sp/>position<sp/>in<sp/>global<sp/>coordinates</highlight></codeline>
-<codeline lineno="132"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x3:<sp/>steering<sp/>angle<sp/>of<sp/>front<sp/>wheels</highlight></codeline>
-<codeline lineno="133"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x4:<sp/>velocity<sp/>in<sp/>x<sp/>direction</highlight></codeline>
-<codeline lineno="134"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x5:<sp/>yaw<sp/>angle</highlight></codeline>
-<codeline lineno="135"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x6:<sp/>yaw<sp/>rate</highlight></codeline>
-<codeline lineno="136"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x7:<sp/>slip<sp/>angle<sp/>at<sp/>vehicle<sp/>center</highlight></codeline>
-<codeline lineno="137"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>(numpy.ndarray<sp/>(2,<sp/>)):<sp/>control<sp/>input<sp/>vector<sp/>(u1,<sp/>u2)</highlight></codeline>
-<codeline lineno="138"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u1:<sp/>steering<sp/>angle<sp/>velocity<sp/>of<sp/>front<sp/>wheels</highlight></codeline>
-<codeline lineno="139"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u2:<sp/>longitudinal<sp/>acceleration<sp/></highlight></codeline>
-<codeline lineno="140"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="141"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="142"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>(numpy.ndarray):<sp/>right<sp/>hand<sp/>side<sp/>of<sp/>differential<sp/>equations</highlight></codeline>
-<codeline lineno="143"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="144"><highlight class="normal"></highlight></codeline>
-<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>gravity<sp/>constant<sp/>m/s^2</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"></highlight></codeline>
-<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>constraints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([steering_constraint(x[2],<sp/>u_init[0],<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max),<sp/>accl_constraints(x[3],<sp/>u_init[1],<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)])</highlight></codeline>
-<codeline lineno="150"><highlight class="normal"></highlight></codeline>
-<codeline lineno="151"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>switch<sp/>to<sp/>kinematic<sp/>model<sp/>for<sp/>small<sp/>velocities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>abs(x[3])<sp/>&lt;<sp/>0.1:</highlight></codeline>
-<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>wheelbase</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>lwb<sp/>=<sp/>lf<sp/>+<sp/>lr</highlight></codeline>
-<codeline lineno="155"><highlight class="normal"></highlight></codeline>
-<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>system<sp/>dynamics</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_ks<sp/>=<sp/>x[0:5]</highlight></codeline>
-<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_ks<sp/>=<sp/>vehicle_dynamics_ks(x_ks,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)</highlight></codeline>
-<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>=<sp/>np.hstack((f_ks,<sp/>np.array([u[1]/lwb*np.tan(x[2])+x[3]/(lwb*np.cos(x[2])**2)*u[0],<sp/></highlight></codeline>
-<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>0])))</highlight></codeline>
-<codeline lineno="161"><highlight class="normal"></highlight></codeline>
-<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>system<sp/>dynamics</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>=<sp/>np.array([x[3]*np.cos(x[6]<sp/>+<sp/>x[4]),<sp/></highlight></codeline>
-<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x[3]*np.sin(x[6]<sp/>+<sp/>x[4]),<sp/></highlight></codeline>
-<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u[0],<sp/></highlight></codeline>
-<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u[1],<sp/></highlight></codeline>
-<codeline lineno="168"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x[5],<sp/></highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>-mu*m/(x[3]*I*(lr+lf))*(lf**2*C_Sf*(g*lr-u[1]*h)<sp/>+<sp/>lr**2*C_Sr*(g*lf<sp/>+<sp/>u[1]*h))*x[5]<sp/>\</highlight></codeline>
-<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>+mu*m/(I*(lr+lf))*(lr*C_Sr*(g*lf<sp/>+<sp/>u[1]*h)<sp/>-<sp/>lf*C_Sf*(g*lr<sp/>-<sp/>u[1]*h))*x[6]<sp/>\</highlight></codeline>
-<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>+mu*m/(I*(lr+lf))*lf*C_Sf*(g*lr<sp/>-<sp/>u[1]*h)*x[2],<sp/></highlight></codeline>
-<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(mu/(x[3]**2*(lr+lf))*(C_Sr*(g*lf<sp/>+<sp/>u[1]*h)*lr<sp/>-<sp/>C_Sf*(g*lr<sp/>-<sp/>u[1]*h)*lf)-1)*x[5]<sp/>\</highlight></codeline>
-<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>-mu/(x[3]*(lr+lf))*(C_Sr*(g*lf<sp/>+<sp/>u[1]*h)<sp/>+<sp/>C_Sf*(g*lr-u[1]*h))*x[6]<sp/>\</highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>+mu/(x[3]*(lr+lf))*(C_Sf*(g*lr-u[1]*h))*x[2]])</highlight></codeline>
-<codeline lineno="175"><highlight class="normal"></highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>f</highlight></codeline>
-<codeline lineno="177"><highlight class="normal"></highlight></codeline>
-<codeline lineno="178"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="179"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">pid(speed,<sp/>steer):</highlight></codeline>
-<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="181"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Basic<sp/>controller<sp/>for<sp/>speed/steer<sp/>-&gt;<sp/>accl./steer<sp/>vel.</highlight></codeline>
-<codeline lineno="182"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="183"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="184"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>speed<sp/>(float):<sp/>desired<sp/>input<sp/>speed</highlight></codeline>
-<codeline lineno="185"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steer<sp/>(float):<sp/>desired<sp/>input<sp/>steering<sp/>angle</highlight></codeline>
-<codeline lineno="186"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="187"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="188"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accl<sp/>(float):<sp/>desired<sp/>input<sp/>acceleration</highlight></codeline>
-<codeline lineno="189"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv<sp/>(float):<sp/>desired<sp/>input<sp/>steering<sp/>velocity</highlight></codeline>
-<codeline lineno="190"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="191"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="192"><highlight class="normal"></highlight></codeline>
-<codeline lineno="193"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">func_KS(x,<sp/>t,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="194"><highlight class="normal"><sp/><sp/><sp/><sp/>f<sp/>=<sp/>vehicle_dynamics_ks(x,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)</highlight></codeline>
-<codeline lineno="195"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>f</highlight></codeline>
-<codeline lineno="196"><highlight class="normal"></highlight></codeline>
-<codeline lineno="197"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">func_ST(x,<sp/>t,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max):</highlight></codeline>
-<codeline lineno="198"><highlight class="normal"><sp/><sp/><sp/><sp/>f<sp/>=<sp/>vehicle_dynamics_st(x,<sp/>u,<sp/>mu,<sp/>C_Sf,<sp/>C_Sr,<sp/>lf,<sp/>lr,<sp/>h,<sp/>m,<sp/>I,<sp/>s_min,<sp/>s_max,<sp/>sv_min,<sp/>sv_max,<sp/>v_switch,<sp/>a_max,<sp/>v_min,<sp/>v_max)</highlight></codeline>
-<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>f</highlight></codeline>
-<codeline lineno="200"><highlight class="normal"></highlight></codeline>
-<codeline lineno="201" refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test" kindref="compound">DynamicsTest</ref>(unittest.TestCase):</highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">setUp(self):</highlight></codeline>
-<codeline lineno="203"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>test<sp/>params</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref><sp/>=<sp/>1.0489</highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref><sp/>=<sp/>21.92/1.0489</highlight></codeline>
-<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref><sp/>=<sp/>21.92/1.0489</highlight></codeline>
-<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref><sp/>=<sp/>0.3048*3.793293</highlight></codeline>
-<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref><sp/>=<sp/>0.3048*4.667707</highlight></codeline>
-<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref><sp/>=<sp/>0.3048*2.01355</highlight></codeline>
-<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref><sp/>=<sp/>4.4482216152605/0.3048*74.91452</highlight></codeline>
-<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref><sp/>=<sp/>4.4482216152605*0.3048*1321.416</highlight></codeline>
-<codeline lineno="212"><highlight class="normal"></highlight></codeline>
-<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#steering<sp/>constraints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref><sp/>=<sp/>-1.066<sp/><sp/></highlight><highlight class="comment">#minimum<sp/>steering<sp/>angle<sp/>[rad]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref><sp/>=<sp/>1.066<sp/><sp/></highlight><highlight class="comment">#maximum<sp/>steering<sp/>angle<sp/>[rad]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref><sp/>=<sp/>-0.4<sp/><sp/></highlight><highlight class="comment">#minimum<sp/>steering<sp/>velocity<sp/>[rad/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref><sp/>=<sp/>0.4<sp/><sp/></highlight><highlight class="comment">#maximum<sp/>steering<sp/>velocity<sp/>[rad/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="218"><highlight class="normal"></highlight></codeline>
-<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#longitudinal<sp/>constraints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref><sp/>=<sp/>-13.6<sp/><sp/></highlight><highlight class="comment">#minimum<sp/>velocity<sp/>[m/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref><sp/>=<sp/>50.8<sp/><sp/></highlight><highlight class="comment">#minimum<sp/>velocity<sp/>[m/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="222"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref><sp/>=<sp/>7.319<sp/><sp/></highlight><highlight class="comment">#switching<sp/>velocity<sp/>[m/s]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="223"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref><sp/>=<sp/>11.5<sp/><sp/></highlight><highlight class="comment">#maximum<sp/>absolute<sp/>acceleration<sp/>[m/s^2]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="224"><highlight class="normal"></highlight></codeline>
-<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_derivatives(self):</highlight></codeline>
-<codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>derivatives</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="227"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_ks_gt<sp/>=<sp/>[16.3475935934250209,<sp/>0.4819314886013121,<sp/>0.1500000000000000,<sp/>5.1464424102339752,<sp/>0.2401426578627629]</highlight></codeline>
-<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_st_gt<sp/>=<sp/>[15.7213512030862397,<sp/>0.0925527979719355,<sp/>0.1500000000000000,<sp/>5.3536773276413925,<sp/>0.0529001056654038,<sp/>0.6435589397748606,<sp/>0.0313297971641291]</highlight></codeline>
-<codeline lineno="229"><highlight class="normal"></highlight></codeline>
-<codeline lineno="230"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>system<sp/>dynamics</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="232"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_ks<sp/>=<sp/>np.array([3.9579422297936526,<sp/>0.0391650102771405,<sp/>0.0378491427211811,<sp/>16.3546957860883566,<sp/>0.0294717351052816])</highlight></codeline>
-<codeline lineno="233"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_st<sp/>=<sp/>np.array([2.0233348142065677,<sp/>0.0041907137716636,<sp/>0.0197545248559617,<sp/>15.7216236334290116,<sp/>0.0025857914776859,<sp/>0.0529001056654038,<sp/>0.0033012170610298])</highlight></codeline>
-<codeline lineno="234"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_delta<sp/>=<sp/>0.15</highlight></codeline>
-<codeline lineno="235"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>acc<sp/>=<sp/>0.63*g</highlight></codeline>
-<codeline lineno="236"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([v_delta,<sp/><sp/>acc])</highlight></codeline>
-<codeline lineno="237"><highlight class="normal"></highlight></codeline>
-<codeline lineno="238"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_ks<sp/>=<sp/>vehicle_dynamics_ks(x_ks,<sp/>u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>)</highlight></codeline>
-<codeline lineno="239"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_st<sp/>=<sp/>vehicle_dynamics_st(x_st,<sp/>u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>)</highlight></codeline>
-<codeline lineno="240"><highlight class="normal"></highlight></codeline>
-<codeline lineno="241"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="242"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(10000):</highlight></codeline>
-<codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f_st<sp/>=<sp/>vehicle_dynamics_st(x_st,<sp/>u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>)</highlight></codeline>
-<codeline lineno="244"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>duration<sp/>=<sp/>time.time()<sp/>-<sp/>start</highlight></codeline>
-<codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>avg_fps<sp/>=<sp/>10000/duration</highlight></codeline>
-<codeline lineno="246"><highlight class="normal"></highlight></codeline>
-<codeline lineno="247"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertAlmostEqual(np.max(np.abs(f_ks_gt-f_ks)),<sp/>0.)</highlight></codeline>
-<codeline lineno="248"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertAlmostEqual(np.max(np.abs(f_st_gt-f_st)),<sp/>0.)</highlight></codeline>
-<codeline lineno="249"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertGreater(avg_fps,<sp/>5000)</highlight></codeline>
-<codeline lineno="250"><highlight class="normal"></highlight></codeline>
-<codeline lineno="251"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_zeroinit_roll(self):</highlight></codeline>
-<codeline lineno="252"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.integrate<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>odeint</highlight></codeline>
-<codeline lineno="253"><highlight class="normal"></highlight></codeline>
-<codeline lineno="254"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>testing<sp/>for<sp/>zero<sp/>initial<sp/>state,<sp/>zero<sp/>input<sp/>singularities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="255"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="256"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_start<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="257"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_final<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="258"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="259"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="260"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Psi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="261"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dotPsi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="262"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="263"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sy0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>initial_state<sp/>=<sp/>[0,sy0,delta0,vel0,Psi0,dotPsi0,beta0]</highlight></codeline>
-<codeline lineno="265"><highlight class="normal"></highlight></codeline>
-<codeline lineno="266"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_KS<sp/>=<sp/>np.array(initial_state[0:5])</highlight></codeline>
-<codeline lineno="267"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_ST<sp/>=<sp/>np.array(initial_state)</highlight></codeline>
-<codeline lineno="268"><highlight class="normal"></highlight></codeline>
-<codeline lineno="269"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>time<sp/>vector</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="270"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t<sp/>=<sp/>np.arange(t_start,<sp/>t_final,<sp/>1e-4)</highlight></codeline>
-<codeline lineno="271"><highlight class="normal"></highlight></codeline>
-<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>set<sp/>input:<sp/>rolling<sp/>car<sp/>(velocity<sp/>should<sp/>stay<sp/>constant)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([0.,<sp/>0.])</highlight></codeline>
-<codeline lineno="274"><highlight class="normal"></highlight></codeline>
-<codeline lineno="275"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="276"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_roll_st<sp/>=<sp/>odeint(func_ST,<sp/>x0_ST,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="278"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_roll_ks<sp/>=<sp/>odeint(func_KS,<sp/>x0_KS,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="279"><highlight class="normal"></highlight></codeline>
-<codeline lineno="280"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(x_roll_st[-1]==x0_ST))</highlight></codeline>
-<codeline lineno="281"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(x_roll_ks[-1]==x0_KS))</highlight></codeline>
-<codeline lineno="282"><highlight class="normal"></highlight></codeline>
-<codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_zeroinit_dec(self):</highlight></codeline>
-<codeline lineno="284"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.integrate<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>odeint</highlight></codeline>
-<codeline lineno="285"><highlight class="normal"></highlight></codeline>
-<codeline lineno="286"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>testing<sp/>for<sp/>zero<sp/>initial<sp/>state,<sp/>decelerating<sp/>input<sp/>singularities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="287"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="288"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_start<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_final<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="290"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="291"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Psi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dotPsi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="294"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="295"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sy0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="296"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>initial_state<sp/>=<sp/>[0,sy0,delta0,vel0,Psi0,dotPsi0,beta0]</highlight></codeline>
-<codeline lineno="297"><highlight class="normal"></highlight></codeline>
-<codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_KS<sp/>=<sp/>np.array(initial_state[0:5])</highlight></codeline>
-<codeline lineno="299"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_ST<sp/>=<sp/>np.array(initial_state)</highlight></codeline>
-<codeline lineno="300"><highlight class="normal"></highlight></codeline>
-<codeline lineno="301"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>time<sp/>vector</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="302"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t<sp/>=<sp/>np.arange(t_start,<sp/>t_final,<sp/>1e-4)</highlight></codeline>
-<codeline lineno="303"><highlight class="normal"></highlight></codeline>
-<codeline lineno="304"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>set<sp/>decel<sp/>input</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="305"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([0.,<sp/>-0.7*g])</highlight></codeline>
-<codeline lineno="306"><highlight class="normal"></highlight></codeline>
-<codeline lineno="307"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="308"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_dec_st<sp/>=<sp/>odeint(func_ST,<sp/>x0_ST,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="309"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="310"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_dec_ks<sp/>=<sp/>odeint(func_KS,<sp/>x0_KS,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="311"><highlight class="normal"></highlight></codeline>
-<codeline lineno="312"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="313"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_dec_st_gt<sp/>=<sp/>[-3.4335000000000013,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>-6.8670000000000018,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000]</highlight></codeline>
-<codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="315"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_dec_ks_gt<sp/>=<sp/>[-3.4335000000000013,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>-6.8670000000000018,<sp/>0.0000000000000000]</highlight></codeline>
-<codeline lineno="316"><highlight class="normal"></highlight></codeline>
-<codeline lineno="317"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_dec_st[-1]<sp/>-<sp/>x_dec_st_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="318"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_dec_ks[-1]<sp/>-<sp/>x_dec_ks_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="319"><highlight class="normal"></highlight></codeline>
-<codeline lineno="320"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_zeroinit_acc(self):</highlight></codeline>
-<codeline lineno="321"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.integrate<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>odeint</highlight></codeline>
-<codeline lineno="322"><highlight class="normal"></highlight></codeline>
-<codeline lineno="323"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>testing<sp/>for<sp/>zero<sp/>initial<sp/>state,<sp/>accelerating<sp/>with<sp/>left<sp/>steer<sp/>input<sp/>singularities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="324"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>wheel<sp/>spin<sp/>and<sp/>velocity<sp/>should<sp/>increase<sp/>more<sp/>wheel<sp/>spin<sp/>at<sp/>rear</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="325"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="326"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_start<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="327"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_final<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="328"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="329"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="330"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Psi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="331"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dotPsi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="332"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="333"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sy0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="334"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>initial_state<sp/>=<sp/>[0,sy0,delta0,vel0,Psi0,dotPsi0,beta0]</highlight></codeline>
-<codeline lineno="335"><highlight class="normal"></highlight></codeline>
-<codeline lineno="336"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_KS<sp/>=<sp/>np.array(initial_state[0:5])</highlight></codeline>
-<codeline lineno="337"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_ST<sp/>=<sp/>np.array(initial_state)</highlight></codeline>
-<codeline lineno="338"><highlight class="normal"></highlight></codeline>
-<codeline lineno="339"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>time<sp/>vector</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="340"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t<sp/>=<sp/>np.arange(t_start,<sp/>t_final,<sp/>1e-4)</highlight></codeline>
-<codeline lineno="341"><highlight class="normal"></highlight></codeline>
-<codeline lineno="342"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>set<sp/>decel<sp/>input</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="343"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([0.15,<sp/>0.63*g])</highlight></codeline>
-<codeline lineno="344"><highlight class="normal"></highlight></codeline>
-<codeline lineno="345"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="346"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_acc_st<sp/>=<sp/>odeint(func_ST,<sp/>x0_ST,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="347"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="348"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_acc_ks<sp/>=<sp/>odeint(func_KS,<sp/>x0_KS,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="349"><highlight class="normal"></highlight></codeline>
-<codeline lineno="350"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="351"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_acc_st_gt<sp/>=<sp/>[3.0731976046859715,<sp/>0.2869835398304389,<sp/>0.1500000000000000,<sp/>6.1802999999999999,<sp/>0.1097747074946325,<sp/>0.3248268063223301,<sp/>0.0697547542798040]</highlight></codeline>
-<codeline lineno="352"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="353"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_acc_ks_gt<sp/>=<sp/>[3.0845676868494927,<sp/>0.1484249221523042,<sp/>0.1500000000000000,<sp/>6.1803000000000017,<sp/>0.1203664469224163]</highlight></codeline>
-<codeline lineno="354"><highlight class="normal"></highlight></codeline>
-<codeline lineno="355"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_acc_st[-1]<sp/>-<sp/>x_acc_st_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="356"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_acc_ks[-1]<sp/>-<sp/>x_acc_ks_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="357"><highlight class="normal"></highlight></codeline>
-<codeline lineno="358"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_zeroinit_rollleft(self):</highlight></codeline>
-<codeline lineno="359"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.integrate<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>odeint</highlight></codeline>
-<codeline lineno="360"><highlight class="normal"></highlight></codeline>
-<codeline lineno="361"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>testing<sp/>for<sp/>zero<sp/>initial<sp/>state,<sp/>rolling<sp/>and<sp/>steering<sp/>left<sp/>input<sp/>singularities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="362"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>g<sp/>=<sp/>9.81</highlight></codeline>
-<codeline lineno="363"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_start<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="364"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t_final<sp/>=<sp/>1.</highlight></codeline>
-<codeline lineno="365"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="366"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="367"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Psi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="368"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dotPsi0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="369"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="370"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sy0<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="371"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>initial_state<sp/>=<sp/>[0,sy0,delta0,vel0,Psi0,dotPsi0,beta0]</highlight></codeline>
-<codeline lineno="372"><highlight class="normal"></highlight></codeline>
-<codeline lineno="373"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_KS<sp/>=<sp/>np.array(initial_state[0:5])</highlight></codeline>
-<codeline lineno="374"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x0_ST<sp/>=<sp/>np.array(initial_state)</highlight></codeline>
-<codeline lineno="375"><highlight class="normal"></highlight></codeline>
-<codeline lineno="376"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>time<sp/>vector</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="377"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>t<sp/>=<sp/>np.arange(t_start,<sp/>t_final,<sp/>1e-4)</highlight></codeline>
-<codeline lineno="378"><highlight class="normal"></highlight></codeline>
-<codeline lineno="379"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>set<sp/>decel<sp/>input</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="380"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>u<sp/>=<sp/>np.array([0.15,<sp/>0.])</highlight></codeline>
-<codeline lineno="381"><highlight class="normal"></highlight></codeline>
-<codeline lineno="382"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="383"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_left_st<sp/>=<sp/>odeint(func_ST,<sp/>x0_ST,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="384"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulate<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="385"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_left_ks<sp/>=<sp/>odeint(func_KS,<sp/>x0_KS,<sp/>t,<sp/>args=(u,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kindref="member">mu</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kindref="member">C_Sf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kindref="member">C_Sr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kindref="member">lf</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kindref="member">lr</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kindref="member">h</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kindref="member">m</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kindref="member">I</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kindref="member">s_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kindref="member">s_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kindref="member">sv_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kindref="member">sv_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kindref="member">v_switch</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kindref="member">a_max</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kindref="member">v_min</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kindref="member">v_max</ref>))</highlight></codeline>
-<codeline lineno="386"><highlight class="normal"></highlight></codeline>
-<codeline lineno="387"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="388"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_left_st_gt<sp/>=<sp/>[0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.1500000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000]</highlight></codeline>
-<codeline lineno="389"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ground<sp/>truth<sp/>for<sp/>kinematic<sp/>single-track<sp/>model</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="390"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_left_ks_gt<sp/>=<sp/>[0.0000000000000000,<sp/>0.0000000000000000,<sp/>0.1500000000000000,<sp/>0.0000000000000000,<sp/>0.0000000000000000]</highlight></codeline>
-<codeline lineno="391"><highlight class="normal"></highlight></codeline>
-<codeline lineno="392"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_left_st[-1]<sp/>-<sp/>x_left_st_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="393"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertTrue(all(abs(x_left_ks[-1]<sp/>-<sp/>x_left_ks_gt)<sp/>&lt;<sp/>1e-2))</highlight></codeline>
-<codeline lineno="394"><highlight class="normal"></highlight></codeline>
-<codeline lineno="395"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>__name__<sp/>==<sp/></highlight><highlight class="stringliteral">&apos;__main__&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="396"><highlight class="normal"><sp/><sp/><sp/><sp/>unittest.main()</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/envs_2____init_____8py.xml b/docs/xml/envs_2____init_____8py.xml
deleted file mode 100644
index f379fa78..00000000
--- a/docs/xml/envs_2____init_____8py.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="envs_2____init_____8py" kind="file" language="Python">
-    <compoundname>__init__.py</compoundname>
-    <innernamespace refid="namespacef110__gym_1_1envs">f110_gym::envs</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1f110__env" kindref="compound">f110_gym.envs.f110_env</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>F110Env</highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1dynamic__models" kindref="compound">f110_gym.envs.dynamic_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1laser__models" kindref="compound">f110_gym.envs.laser_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1base__classes" kindref="compound">f110_gym.envs.base_classes</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1collision__models" kindref="compound">f110_gym.envs.collision_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/__init__.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/f110__env_8py.xml b/docs/xml/f110__env_8py.xml
deleted file mode 100644
index 666383d3..00000000
--- a/docs/xml/f110__env_8py.xml
+++ /dev/null
@@ -1,380 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="f110__env_8py" kind="file" language="Python">
-    <compoundname>f110_env.py</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env" prot="public">f110_gym::envs::f110_env::F110Env</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1f110__env">f110_gym::envs::f110_env</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight><highlight class="stringliteral">&apos;&apos;&apos;</highlight></codeline>
-<codeline lineno="24"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="25"><highlight class="stringliteral">&apos;&apos;&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="26"><highlight class="normal"></highlight></codeline>
-<codeline lineno="27"><highlight class="normal"></highlight><highlight class="comment">#<sp/>gym<sp/>imports</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="28"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>gym</highlight></codeline>
-<codeline lineno="29"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>gym<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>error,<sp/>spaces,<sp/>utils</highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>gym.utils<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>seeding</highlight></codeline>
-<codeline lineno="31"><highlight class="normal"></highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight><highlight class="comment">#<sp/>base<sp/>classes</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="33"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1base__classes" kindref="compound">f110_gym.envs.base_classes</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>Simulator</highlight></codeline>
-<codeline lineno="34"><highlight class="normal"></highlight></codeline>
-<codeline lineno="35"><highlight class="normal"></highlight><highlight class="comment">#<sp/>others</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="36"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="37"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>os</highlight></codeline>
-<codeline lineno="38"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>time</highlight></codeline>
-<codeline lineno="39"><highlight class="normal"></highlight></codeline>
-<codeline lineno="40"><highlight class="normal"></highlight><highlight class="comment">#<sp/>gl</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="41"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>pyglet</highlight></codeline>
-<codeline lineno="42"><highlight class="normal">pyglet.options[</highlight><highlight class="stringliteral">&apos;debug_gl&apos;</highlight><highlight class="normal">]<sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="43"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>pyglet<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>gl</highlight></codeline>
-<codeline lineno="44"><highlight class="normal"></highlight></codeline>
-<codeline lineno="45"><highlight class="normal"></highlight><highlight class="comment">#<sp/>constants</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="46"><highlight class="normal"></highlight></codeline>
-<codeline lineno="47"><highlight class="normal"></highlight><highlight class="comment">#<sp/>rendering</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="48"><highlight class="normal">VIDEO_W<sp/>=<sp/>600</highlight></codeline>
-<codeline lineno="49"><highlight class="normal">VIDEO_H<sp/>=<sp/>400</highlight></codeline>
-<codeline lineno="50"><highlight class="normal">WINDOW_W<sp/>=<sp/>1000</highlight></codeline>
-<codeline lineno="51"><highlight class="normal">WINDOW_H<sp/>=<sp/>800</highlight></codeline>
-<codeline lineno="52"><highlight class="normal"></highlight></codeline>
-<codeline lineno="53" refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env" kindref="compound">F110Env</ref>(gym.Env,<sp/>utils.EzPickle):</highlight></codeline>
-<codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="55"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>OpenAI<sp/>gym<sp/>environment<sp/>for<sp/>F1TENTH</highlight></codeline>
-<codeline lineno="56"><highlight class="stringliteral"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="57"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Env<sp/>should<sp/>be<sp/>initialized<sp/>by<sp/>calling<sp/>gym.make(&apos;f110_gym:f110-v0&apos;,<sp/>**kwargs)</highlight></codeline>
-<codeline lineno="58"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="59"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="60"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>kwargs:</highlight></codeline>
-<codeline lineno="61"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>seed<sp/>(int):<sp/>seed<sp/>for<sp/>random<sp/>state<sp/>and<sp/>reproducibility</highlight></codeline>
-<codeline lineno="62"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="63"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map<sp/>(str,<sp/>default=&apos;vegas&apos;):<sp/>name<sp/>of<sp/>the<sp/>map<sp/>used<sp/>for<sp/>the<sp/>environment.<sp/>Currently,<sp/>available<sp/>environments<sp/>include:<sp/>&apos;berlin&apos;,<sp/>&apos;vegas&apos;,<sp/>&apos;skirk&apos;.<sp/>You<sp/>could<sp/>use<sp/>a<sp/>string<sp/>of<sp/>the<sp/>absolute<sp/>path<sp/>to<sp/>the<sp/>yaml<sp/>file<sp/>of<sp/>your<sp/>custom<sp/>map.</highlight></codeline>
-<codeline lineno="64"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="65"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>(str,<sp/>default=&apos;png&apos;):<sp/>image<sp/>extension<sp/>of<sp/>the<sp/>map<sp/>image<sp/>file.<sp/>For<sp/>example<sp/>&apos;png&apos;,<sp/>&apos;pgm&apos;</highlight></codeline>
-<codeline lineno="66"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="67"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>params<sp/>(dict,<sp/>default={&apos;mu&apos;:<sp/>1.0489,<sp/>&apos;C_Sf&apos;:,<sp/>&apos;C_Sr&apos;:,<sp/>&apos;lf&apos;:<sp/>0.15875,<sp/>&apos;lr&apos;:<sp/>0.17145,<sp/>&apos;h&apos;:<sp/>0.074,<sp/>&apos;m&apos;:<sp/>3.74,<sp/>&apos;I&apos;:<sp/>0.04712,<sp/>&apos;s_min&apos;:<sp/>-0.4189,<sp/>&apos;s_max&apos;:<sp/>0.4189,<sp/>&apos;sv_min&apos;:<sp/>-3.2,<sp/>&apos;sv_max&apos;:<sp/>3.2,<sp/>&apos;v_switch&apos;:7.319,<sp/>&apos;a_max&apos;:<sp/>9.51,<sp/>&apos;v_min&apos;:-5.0,<sp/>&apos;v_max&apos;:<sp/>20.0,<sp/>&apos;width&apos;:<sp/>0.31,<sp/>&apos;length&apos;:<sp/>0.58}):<sp/>dictionary<sp/>of<sp/>vehicle<sp/>parameters.</highlight></codeline>
-<codeline lineno="68"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mu:<sp/>surface<sp/>friction<sp/>coefficient</highlight></codeline>
-<codeline lineno="69"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>C_Sf:<sp/>Cornering<sp/>stiffness<sp/>coefficient,<sp/>front</highlight></codeline>
-<codeline lineno="70"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>C_Sr:<sp/>Cornering<sp/>stiffness<sp/>coefficient,<sp/>rear</highlight></codeline>
-<codeline lineno="71"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>lf:<sp/>Distance<sp/>from<sp/>center<sp/>of<sp/>gravity<sp/>to<sp/>front<sp/>axle</highlight></codeline>
-<codeline lineno="72"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>lr:<sp/>Distance<sp/>from<sp/>center<sp/>of<sp/>gravity<sp/>to<sp/>rear<sp/>axle</highlight></codeline>
-<codeline lineno="73"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>h:<sp/>Height<sp/>of<sp/>center<sp/>of<sp/>gravity</highlight></codeline>
-<codeline lineno="74"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>m:<sp/>Total<sp/>mass<sp/>of<sp/>the<sp/>vehicle</highlight></codeline>
-<codeline lineno="75"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>I:<sp/>Moment<sp/>of<sp/>inertial<sp/>of<sp/>the<sp/>entire<sp/>vehicle<sp/>about<sp/>the<sp/>z<sp/>axis</highlight></codeline>
-<codeline lineno="76"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>s_min:<sp/>Minimum<sp/>steering<sp/>angle<sp/>constraint</highlight></codeline>
-<codeline lineno="77"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>s_max:<sp/>Maximum<sp/>steering<sp/>angle<sp/>constraint</highlight></codeline>
-<codeline lineno="78"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv_min:<sp/>Minimum<sp/>steering<sp/>velocity<sp/>constraint</highlight></codeline>
-<codeline lineno="79"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sv_max:<sp/>Maximum<sp/>steering<sp/>velocity<sp/>constraint</highlight></codeline>
-<codeline lineno="80"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_switch:<sp/>Switching<sp/>velocity<sp/>(velocity<sp/>at<sp/>which<sp/>the<sp/>acceleration<sp/>is<sp/>no<sp/>longer<sp/>able<sp/>to<sp/>create<sp/>wheel<sp/>spin)</highlight></codeline>
-<codeline lineno="81"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>a_max:<sp/>Maximum<sp/>longitudinal<sp/>acceleration</highlight></codeline>
-<codeline lineno="82"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_min:<sp/>Minimum<sp/>longitudinal<sp/>velocity</highlight></codeline>
-<codeline lineno="83"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v_max:<sp/>Maximum<sp/>longitudinal<sp/>velocity</highlight></codeline>
-<codeline lineno="84"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>width:<sp/>width<sp/>of<sp/>the<sp/>vehicle<sp/>in<sp/>meters</highlight></codeline>
-<codeline lineno="85"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>length:<sp/>length<sp/>of<sp/>the<sp/>vehicle<sp/>in<sp/>meters</highlight></codeline>
-<codeline lineno="86"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="87"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_agents<sp/>(int,<sp/>default=2):<sp/>number<sp/>of<sp/>agents<sp/>in<sp/>the<sp/>environment</highlight></codeline>
-<codeline lineno="88"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="89"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>timestep<sp/>(float,<sp/>default=0.01):<sp/>physics<sp/>timestep</highlight></codeline>
-<codeline lineno="90"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="91"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ego_idx<sp/>(int,<sp/>default=0):<sp/>ego&apos;s<sp/>index<sp/>in<sp/>list<sp/>of<sp/>agents</highlight></codeline>
-<codeline lineno="92"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/>metadata<sp/>=<sp/>{</highlight><highlight class="stringliteral">&apos;render.modes&apos;</highlight><highlight class="normal">:<sp/>[</highlight><highlight class="stringliteral">&apos;human&apos;</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">&apos;human_fast&apos;</highlight><highlight class="normal">]}</highlight></codeline>
-<codeline lineno="94"><highlight class="normal"></highlight></codeline>
-<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">__init__(self,<sp/>**kwargs):<sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>kwargs<sp/>extraction</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>np.random.seed(kwargs[</highlight><highlight class="stringliteral">&apos;seed&apos;</highlight><highlight class="normal">])</highlight></codeline>
-<codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="100"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">pass</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="101"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="102"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbb8c9dad98bbad696936dec9633939" kindref="member">map_name</ref><sp/>=<sp/>kwargs[</highlight><highlight class="stringliteral">&apos;map&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>different<sp/>default<sp/>maps</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbb8c9dad98bbad696936dec9633939" kindref="member">map_name</ref><sp/>==<sp/></highlight><highlight class="stringliteral">&apos;berlin&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="105"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a584bf97317bbe8d38d8e0136753ded60" kindref="member">map_path</ref><sp/>=<sp/>os.path.dirname(os.path.abspath(__file__))<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;/maps/berlin.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbb8c9dad98bbad696936dec9633939" kindref="member">map_name</ref><sp/>==<sp/></highlight><highlight class="stringliteral">&apos;skirk&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a584bf97317bbe8d38d8e0136753ded60" kindref="member">map_path</ref><sp/>=<sp/>os.path.dirname(os.path.abspath(__file__))<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;/maps/skirk.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbb8c9dad98bbad696936dec9633939" kindref="member">map_name</ref><sp/>==<sp/></highlight><highlight class="stringliteral">&apos;levine&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a584bf97317bbe8d38d8e0136753ded60" kindref="member">map_path</ref><sp/>=<sp/>os.path.dirname(os.path.abspath(__file__))<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;/maps/levine.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a584bf97317bbe8d38d8e0136753ded60" kindref="member">map_path</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbb8c9dad98bbad696936dec9633939" kindref="member">map_name</ref><sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="113"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a584bf97317bbe8d38d8e0136753ded60" kindref="member">map_path</ref><sp/>=<sp/>os.path.dirname(os.path.abspath(__file__))<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;/maps/vegas.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="114"><highlight class="normal"></highlight></codeline>
-<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="116"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a147cde741845fcded400365a9d495ce3" kindref="member">map_ext</ref><sp/>=<sp/>kwargs[</highlight><highlight class="stringliteral">&apos;map_ext&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="117"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="118"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a147cde741845fcded400365a9d495ce3" kindref="member">map_ext</ref><sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="119"><highlight class="normal"></highlight></codeline>
-<codeline lineno="120"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="121"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab1c1a4b9cb08b685c597b1d40402a479" kindref="member">params</ref><sp/>=<sp/>kwargs[</highlight><highlight class="stringliteral">&apos;params&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="122"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="123"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab1c1a4b9cb08b685c597b1d40402a479" kindref="member">params</ref><sp/>=<sp/>{</highlight><highlight class="stringliteral">&apos;mu&apos;</highlight><highlight class="normal">:<sp/>1.0489,<sp/></highlight><highlight class="stringliteral">&apos;C_Sf&apos;</highlight><highlight class="normal">:<sp/>4.718,<sp/></highlight><highlight class="stringliteral">&apos;C_Sr&apos;</highlight><highlight class="normal">:<sp/>5.4562,<sp/></highlight><highlight class="stringliteral">&apos;lf&apos;</highlight><highlight class="normal">:<sp/>0.15875,<sp/></highlight><highlight class="stringliteral">&apos;lr&apos;</highlight><highlight class="normal">:<sp/>0.17145,<sp/></highlight><highlight class="stringliteral">&apos;h&apos;</highlight><highlight class="normal">:<sp/>0.074,<sp/></highlight><highlight class="stringliteral">&apos;m&apos;</highlight><highlight class="normal">:<sp/>3.74,<sp/></highlight><highlight class="stringliteral">&apos;I&apos;</highlight><highlight class="normal">:<sp/>0.04712,<sp/></highlight><highlight class="stringliteral">&apos;s_min&apos;</highlight><highlight class="normal">:<sp/>-0.4189,<sp/></highlight><highlight class="stringliteral">&apos;s_max&apos;</highlight><highlight class="normal">:<sp/>0.4189,<sp/></highlight><highlight class="stringliteral">&apos;sv_min&apos;</highlight><highlight class="normal">:<sp/>-3.2,<sp/></highlight><highlight class="stringliteral">&apos;sv_max&apos;</highlight><highlight class="normal">:<sp/>3.2,<sp/></highlight><highlight class="stringliteral">&apos;v_switch&apos;</highlight><highlight class="normal">:<sp/>7.319,<sp/></highlight><highlight class="stringliteral">&apos;a_max&apos;</highlight><highlight class="normal">:<sp/>9.51,<sp/></highlight><highlight class="stringliteral">&apos;v_min&apos;</highlight><highlight class="normal">:-5.0,<sp/></highlight><highlight class="stringliteral">&apos;v_max&apos;</highlight><highlight class="normal">:<sp/>20.0,<sp/></highlight><highlight class="stringliteral">&apos;width&apos;</highlight><highlight class="normal">:<sp/>0.31,<sp/></highlight><highlight class="stringliteral">&apos;length&apos;</highlight><highlight class="normal">:<sp/>0.58}</highlight></codeline>
-<codeline lineno="124"><highlight class="normal"></highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simulation<sp/>parameters</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="127"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref><sp/>=<sp/>kwargs[</highlight><highlight class="stringliteral">&apos;num_agents&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref><sp/>=<sp/>2</highlight></codeline>
-<codeline lineno="130"><highlight class="normal"></highlight></codeline>
-<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1abdc8699b0f8fb2412efef070affa8ccb" kindref="member">timestep</ref><sp/>=<sp/>kwargs[</highlight><highlight class="stringliteral">&apos;timestep&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1abdc8699b0f8fb2412efef070affa8ccb" kindref="member">timestep</ref><sp/>=<sp/>0.01</highlight></codeline>
-<codeline lineno="135"><highlight class="normal"></highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>default<sp/>ego<sp/>index</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="138"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aebce8c6c42f258d8c561da27dde0c01b" kindref="member">ego_idx</ref><sp/>=<sp/>kwargs[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aebce8c6c42f258d8c561da27dde0c01b" kindref="member">ego_idx</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="141"><highlight class="normal"></highlight></codeline>
-<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>radius<sp/>to<sp/>consider<sp/>done</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="143"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a2496c3576ebb86df560fb09004583527" kindref="member">start_thresh</ref><sp/>=<sp/>0.5<sp/><sp/></highlight><highlight class="comment">#<sp/>10cm</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="144"><highlight class="normal"></highlight></codeline>
-<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>env<sp/>states</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae83c6ed936fe9e1a542be6b2eb76395c" kindref="member">poses_x</ref><sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a03432e028beff28596178dc9236fc4e8" kindref="member">poses_y</ref><sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a3ffb6fa7e705c18d5316444488cb649b" kindref="member">poses_theta</ref><sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ada1a8cc0681447645b811448f516885a" kindref="member">collisions</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref>,<sp/>))</highlight></codeline>
-<codeline lineno="150"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>collision_idx<sp/>not<sp/>used<sp/>yet</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="151"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.collision_idx<sp/>=<sp/>-1<sp/>*<sp/>np.ones((self.num_agents,<sp/>))</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="152"><highlight class="normal"></highlight></codeline>
-<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>loop<sp/>completion</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc0a35ce8ff234279acffc66092d72a1" kindref="member">near_start</ref><sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6c19f5c3146fa6be496639ab4ed0d63f" kindref="member">num_toggles</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="156"><highlight class="normal"></highlight></codeline>
-<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>race<sp/>info</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a83f64f867c24f12d9ad3e14745e23aa1" kindref="member">lap_times</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref>,<sp/>))</highlight></codeline>
-<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a0b2cc3bd151748987c6e23f34f16d1a2" kindref="member">lap_counts</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref>,<sp/>))</highlight></codeline>
-<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6539fde56adcb5755acfe1c86251f193" kindref="member">current_time</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="161"><highlight class="normal"></highlight></codeline>
-<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>finish<sp/>line<sp/>info</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6c19f5c3146fa6be496639ab4ed0d63f" kindref="member">num_toggles</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc0a35ce8ff234279acffc66092d72a1" kindref="member">near_start</ref><sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a24602450e500c08f3190672922de25de" kindref="member">near_starts</ref><sp/>=<sp/>np.array([</highlight><highlight class="keyword">True</highlight><highlight class="normal">]*self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref>)</highlight></codeline>
-<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a45f4f52ca91b4efa14118d3718213eb6" kindref="member">toggle_list</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref>,))</highlight></codeline>
-<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae867a64de7fea1f98cb6db6e9ff9d4ed" kindref="member">start_xs</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref>,<sp/>))</highlight></codeline>
-<codeline lineno="168"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a814ae4233f0c96728a9a5f47f5add06e" kindref="member">start_ys</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref>,<sp/>))</highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a064dc8d975b3da3e0ac29f73b626b6aa" kindref="member">start_thetas</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref>,<sp/>))</highlight></codeline>
-<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a613e153a969b6e3df72893eed2da061f" kindref="member">start_rot</ref><sp/>=<sp/>np.eye(2)</highlight></codeline>
-<codeline lineno="171"><highlight class="normal"></highlight></codeline>
-<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>initiate<sp/>stuff</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aa8a35ba4818fe79c1e2c6f9058a31dde" kindref="member">sim</ref><sp/>=<sp/><ref refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator" kindref="compound">Simulator</ref>(self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab1c1a4b9cb08b685c597b1d40402a479" kindref="member">params</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kindref="member">num_agents</ref>)</highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aa8a35ba4818fe79c1e2c6f9058a31dde" kindref="member">sim</ref>.set_map(self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a584bf97317bbe8d38d8e0136753ded60" kindref="member">map_path</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a147cde741845fcded400365a9d495ce3" kindref="member">map_ext</ref>)</highlight></codeline>
-<codeline lineno="175"><highlight class="normal"></highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>rendering</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="177"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aaa2e9426a3f641b295203f9166c33fac" kindref="member">renderer</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ad293c8b43306e47c4430b16b9f7b8d8c" kindref="member">current_obs</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="179"><highlight class="normal"></highlight></codeline>
-<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae193b905b3d1c213ec4324283ebdf201" kindref="member">__del__</ref>(self):</highlight></codeline>
-<codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="182"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Finalizer,<sp/>does<sp/>cleanup</highlight></codeline>
-<codeline lineno="183"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="184"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">pass</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="185"><highlight class="normal"></highlight></codeline>
-<codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_check_done(self):</highlight></codeline>
-<codeline lineno="187"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="188"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Check<sp/>if<sp/>the<sp/>current<sp/>rollout<sp/>is<sp/>done</highlight></codeline>
-<codeline lineno="189"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="190"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="191"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="192"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="193"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="194"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>done<sp/>(bool):<sp/>whether<sp/>the<sp/>rollout<sp/>is<sp/>done</highlight></codeline>
-<codeline lineno="195"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>toggle_list<sp/>(list[int]):<sp/>each<sp/>agent&apos;s<sp/>toggle<sp/>list<sp/>for<sp/>crossing<sp/>the<sp/>finish<sp/>zone</highlight></codeline>
-<codeline lineno="196"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="197"><highlight class="normal"></highlight></codeline>
-<codeline lineno="198"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>this<sp/>is<sp/>assuming<sp/>2<sp/>agents</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>switch<sp/>to<sp/>maybe<sp/>s-based</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>left_t<sp/>=<sp/>2</highlight></codeline>
-<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>right_t<sp/>=<sp/>2</highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="203"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses_x<sp/>=<sp/>np.array(self.poses_x)-self.start_xs</highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses_y<sp/>=<sp/>np.array(self.poses_y)-self.start_ys</highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta_pt<sp/>=<sp/>np.dot(self.start_rot,<sp/>np.stack((poses_x,<sp/>poses_y),<sp/>axis=0))</highlight></codeline>
-<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y<sp/>=<sp/>delta_pt[1,:]</highlight></codeline>
-<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>idx1<sp/>=<sp/>temp_y<sp/>&gt;<sp/>left_t</highlight></codeline>
-<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>idx2<sp/>=<sp/>temp_y<sp/>&lt;<sp/>-right_t</highlight></codeline>
-<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y[idx1]<sp/>-=<sp/>left_t</highlight></codeline>
-<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y[idx2]<sp/>=<sp/>-right_t<sp/>-<sp/>temp_y[idx2]</highlight></codeline>
-<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y[np.invert(np.logical_or(idx1,<sp/>idx2))]<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="212"><highlight class="normal"></highlight></codeline>
-<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dist2<sp/>=<sp/>delta_pt[0,:]**2<sp/>+<sp/>temp_y**2</highlight></codeline>
-<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>closes<sp/>=<sp/>dist2<sp/>&lt;=<sp/>0.1</highlight></codeline>
-<codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(self.num_agents):</highlight></codeline>
-<codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>closes[i]<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>self.near_starts[i]:</highlight></codeline>
-<codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.near_starts[i]<sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="218"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.toggle_list[i]<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>closes[i]<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>self.near_starts[i]:</highlight></codeline>
-<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.near_starts[i]<sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.toggle_list[i]<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="222"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.lap_counts[i]<sp/>=<sp/>self.toggle_list[i]<sp/>//<sp/>2</highlight></codeline>
-<codeline lineno="223"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.toggle_list[i]<sp/>&lt;<sp/>4:</highlight></codeline>
-<codeline lineno="224"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.lap_times[i]<sp/>=<sp/>self.current_time</highlight></codeline>
-<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>done<sp/>=<sp/>(self.collisions[self.ego_idx])<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>np.all(self.toggle_list<sp/>&gt;=<sp/>4)</highlight></codeline>
-<codeline lineno="227"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>done,<sp/>self.toggle_list<sp/>&gt;=<sp/>4</highlight></codeline>
-<codeline lineno="229"><highlight class="normal"></highlight></codeline>
-<codeline lineno="230"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_update_state(self,<sp/>obs_dict):</highlight></codeline>
-<codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="232"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Update<sp/>the<sp/>env&apos;s<sp/>states<sp/>according<sp/>to<sp/>observations</highlight></codeline>
-<codeline lineno="233"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="234"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="235"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs_dict<sp/>(dict):<sp/>dictionary<sp/>of<sp/>observation</highlight></codeline>
-<codeline lineno="236"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="237"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="238"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="239"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="240"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.poses_x<sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;poses_x&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="241"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.poses_y<sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;poses_y&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="242"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.poses_theta<sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;poses_theta&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.collisions<sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;collisions&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="244"><highlight class="normal"></highlight></codeline>
-<codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a0df471828ba39c5228bf5c814a5d0e6e" kindref="member">step</ref>(self,<sp/>action):</highlight></codeline>
-<codeline lineno="246"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="247"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Step<sp/>function<sp/>for<sp/>the<sp/>gym<sp/>env</highlight></codeline>
-<codeline lineno="248"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="249"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="250"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>action<sp/>(np.ndarray(num_agents,<sp/>2))</highlight></codeline>
-<codeline lineno="251"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="252"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="253"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs<sp/>(dict):<sp/>observation<sp/>of<sp/>the<sp/>current<sp/>step</highlight></codeline>
-<codeline lineno="254"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reward<sp/>(float,<sp/>default=self.timestep):<sp/>step<sp/>reward,<sp/>currently<sp/>is<sp/>physics<sp/>timestep</highlight></codeline>
-<codeline lineno="255"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>done<sp/>(bool):<sp/>if<sp/>the<sp/>simulation<sp/>is<sp/>done</highlight></codeline>
-<codeline lineno="256"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>info<sp/>(dict):<sp/>auxillary<sp/>information<sp/>dictionary</highlight></codeline>
-<codeline lineno="257"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="258"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="259"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>call<sp/>simulation<sp/>step</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="260"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs<sp/>=<sp/>self.sim.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a0df471828ba39c5228bf5c814a5d0e6e" kindref="member">step</ref>(action)</highlight></codeline>
-<codeline lineno="261"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;lap_times&apos;</highlight><highlight class="normal">]<sp/>=<sp/>self.lap_times</highlight></codeline>
-<codeline lineno="262"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;lap_counts&apos;</highlight><highlight class="normal">]<sp/>=<sp/>self.lap_counts</highlight></codeline>
-<codeline lineno="263"><highlight class="normal"></highlight></codeline>
-<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.current_obs<sp/>=<sp/>obs</highlight></codeline>
-<codeline lineno="265"><highlight class="normal"></highlight></codeline>
-<codeline lineno="266"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>times</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="267"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reward<sp/>=<sp/>self.timestep</highlight></codeline>
-<codeline lineno="268"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.current_time<sp/>=<sp/>self.current_time<sp/>+<sp/>self.timestep</highlight></codeline>
-<codeline lineno="269"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="270"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>data<sp/>member</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="271"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self._update_state(obs)</highlight></codeline>
-<codeline lineno="272"><highlight class="normal"></highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>check<sp/>done</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="274"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>done,<sp/>toggle_list<sp/>=<sp/>self._check_done()</highlight></codeline>
-<codeline lineno="275"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>info<sp/>=<sp/>{</highlight><highlight class="stringliteral">&apos;checkpoint_done&apos;</highlight><highlight class="normal">:<sp/>toggle_list}</highlight></codeline>
-<codeline lineno="276"><highlight class="normal"></highlight></codeline>
-<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>obs,<sp/>reward,<sp/>done,<sp/>info</highlight></codeline>
-<codeline lineno="278"><highlight class="normal"></highlight></codeline>
-<codeline lineno="279"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab213d62cea216bbd82d0f6d7061452fb" kindref="member">reset</ref>(self,<sp/>poses):</highlight></codeline>
-<codeline lineno="280"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="281"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Reset<sp/>the<sp/>gym<sp/>environment<sp/>by<sp/>given<sp/>poses</highlight></codeline>
-<codeline lineno="282"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="283"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="284"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses<sp/>(np.ndarray<sp/>(num_agents,<sp/>3)):<sp/>poses<sp/>to<sp/>reset<sp/>agents<sp/>to</highlight></codeline>
-<codeline lineno="285"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="286"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="287"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs<sp/>(dict):<sp/>observation<sp/>of<sp/>the<sp/>current<sp/>step</highlight></codeline>
-<codeline lineno="288"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reward<sp/>(float,<sp/>default=self.timestep):<sp/>step<sp/>reward,<sp/>currently<sp/>is<sp/>physics<sp/>timestep</highlight></codeline>
-<codeline lineno="289"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>done<sp/>(bool):<sp/>if<sp/>the<sp/>simulation<sp/>is<sp/>done</highlight></codeline>
-<codeline lineno="290"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>info<sp/>(dict):<sp/>auxillary<sp/>information<sp/>dictionary</highlight></codeline>
-<codeline lineno="291"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>reset<sp/>counters<sp/>and<sp/>data<sp/>members</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.current_time<sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="294"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.collisions<sp/>=<sp/>np.zeros((self.num_agents,<sp/>))</highlight></codeline>
-<codeline lineno="295"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.num_toggles<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="296"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.near_start<sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="297"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.near_starts<sp/>=<sp/>np.array([</highlight><highlight class="keyword">True</highlight><highlight class="normal">]*self.num_agents)</highlight></codeline>
-<codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.toggle_list<sp/>=<sp/>np.zeros((self.num_agents,))</highlight></codeline>
-<codeline lineno="299"><highlight class="normal"></highlight></codeline>
-<codeline lineno="300"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>states<sp/>after<sp/>reset</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="301"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.start_xs<sp/>=<sp/>poses[:,<sp/>0]</highlight></codeline>
-<codeline lineno="302"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.start_ys<sp/>=<sp/>poses[:,<sp/>1]</highlight></codeline>
-<codeline lineno="303"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.start_thetas<sp/>=<sp/>poses[:,<sp/>2]</highlight></codeline>
-<codeline lineno="304"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.start_rot<sp/>=<sp/>np.array([[np.cos(-self.start_thetas[self.ego_idx]),<sp/>-np.sin(-self.start_thetas[self.ego_idx])],<sp/>[np.sin(-self.start_thetas[self.ego_idx]),<sp/>np.cos(-self.start_thetas[self.ego_idx])]])</highlight></codeline>
-<codeline lineno="305"><highlight class="normal"></highlight></codeline>
-<codeline lineno="306"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>call<sp/>reset<sp/>to<sp/>simulator</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="307"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.sim.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab213d62cea216bbd82d0f6d7061452fb" kindref="member">reset</ref>(poses)</highlight></codeline>
-<codeline lineno="308"><highlight class="normal"></highlight></codeline>
-<codeline lineno="309"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>get<sp/>no<sp/>input<sp/>observations</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="310"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>action<sp/>=<sp/>np.zeros((self.num_agents,<sp/>2))</highlight></codeline>
-<codeline lineno="311"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs,<sp/>reward,<sp/>done,<sp/>info<sp/>=<sp/>self.step(action)</highlight></codeline>
-<codeline lineno="312"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>obs,<sp/>reward,<sp/>done,<sp/>info</highlight></codeline>
-<codeline lineno="313"><highlight class="normal"></highlight></codeline>
-<codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc210c3941c1548692c75c961ad443df" kindref="member">update_map</ref>(self,<sp/>map_path,<sp/>map_ext):</highlight></codeline>
-<codeline lineno="315"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="316"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Updates<sp/>the<sp/>map<sp/>used<sp/>by<sp/>simulation</highlight></codeline>
-<codeline lineno="317"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="318"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="319"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>(str):<sp/>absolute<sp/>path<sp/>to<sp/>the<sp/>map<sp/>yaml<sp/>file</highlight></codeline>
-<codeline lineno="320"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>(str):<sp/>extension<sp/>of<sp/>the<sp/>map<sp/>image<sp/>file</highlight></codeline>
-<codeline lineno="321"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="322"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="323"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="324"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="325"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.sim.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="326"><highlight class="normal"></highlight></codeline>
-<codeline lineno="327"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a79d419bbf2ff0e377d808e4a8f41cc81" kindref="member">update_params</ref>(self,<sp/>params,<sp/>index=-1):</highlight></codeline>
-<codeline lineno="328"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="329"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Updates<sp/>the<sp/>parameters<sp/>used<sp/>by<sp/>simulation<sp/>for<sp/>vehicles</highlight></codeline>
-<codeline lineno="330"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="331"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="332"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>params<sp/>(dict):<sp/>dictionary<sp/>of<sp/>parameters</highlight></codeline>
-<codeline lineno="333"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>index<sp/>(int,<sp/>default=-1):<sp/>if<sp/>&gt;=<sp/>0<sp/>then<sp/>only<sp/>update<sp/>a<sp/>specific<sp/>agent&apos;s<sp/>params</highlight></codeline>
-<codeline lineno="334"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="335"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="336"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="337"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="338"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.sim.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a79d419bbf2ff0e377d808e4a8f41cc81" kindref="member">update_params</ref>(params,<sp/>agent_idx=index)</highlight></codeline>
-<codeline lineno="339"><highlight class="normal"></highlight></codeline>
-<codeline lineno="340"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab8e76450e63ef88c1ac9721f717fa375" kindref="member">render</ref>(self,<sp/>mode=&apos;human&apos;):</highlight></codeline>
-<codeline lineno="341"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="342"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Renders<sp/>the<sp/>environment<sp/>with<sp/>pyglet.<sp/>Use<sp/>mouse<sp/>scroll<sp/>in<sp/>the<sp/>window<sp/>to<sp/>zoom<sp/>in/out,<sp/>use<sp/>mouse<sp/>click<sp/>drag<sp/>to<sp/>pan.<sp/>Shows<sp/>the<sp/>agents,<sp/>the<sp/>map,<sp/>current<sp/>fps<sp/>(bottom<sp/>left<sp/>corner),<sp/>and<sp/>the<sp/>race<sp/>information<sp/>near<sp/>as<sp/>text.</highlight></codeline>
-<codeline lineno="343"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="344"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="345"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mode<sp/>(str,<sp/>default=&apos;human&apos;):<sp/>rendering<sp/>mode,<sp/>currently<sp/>supports:</highlight></codeline>
-<codeline lineno="346"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&apos;human&apos;:<sp/>slowed<sp/>down<sp/>rendering<sp/>such<sp/>that<sp/>the<sp/>env<sp/>is<sp/>rendered<sp/>in<sp/>a<sp/>way<sp/>that<sp/>sim<sp/>time<sp/>elapsed<sp/>is<sp/>close<sp/>to<sp/>real<sp/>time<sp/>elapsed</highlight></codeline>
-<codeline lineno="347"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&apos;human_fast&apos;:<sp/>render<sp/>as<sp/>fast<sp/>as<sp/>possible</highlight></codeline>
-<codeline lineno="348"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="349"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="350"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="351"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="352"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">assert</highlight><highlight class="normal"><sp/>mode<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>[</highlight><highlight class="stringliteral">&apos;human&apos;</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">&apos;human_fast&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="353"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.renderer<sp/></highlight><highlight class="keywordflow">is</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="354"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>first<sp/>call,<sp/>initialize<sp/>everything</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="355"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1rendering" kindref="compound">f110_gym.envs.rendering</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>EnvRenderer</highlight></codeline>
-<codeline lineno="356"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.renderer<sp/>=<sp/>EnvRenderer(WINDOW_W,<sp/>WINDOW_H)</highlight></codeline>
-<codeline lineno="357"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.renderer.<ref refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc210c3941c1548692c75c961ad443df" kindref="member">update_map</ref>(self.map_name,<sp/>self.map_ext)</highlight></codeline>
-<codeline lineno="358"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.renderer.update_obs(self.current_obs)</highlight></codeline>
-<codeline lineno="359"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.renderer.dispatch_events()</highlight></codeline>
-<codeline lineno="360"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.renderer.on_draw()</highlight></codeline>
-<codeline lineno="361"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.renderer.flip()</highlight></codeline>
-<codeline lineno="362"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>mode<sp/>==<sp/></highlight><highlight class="stringliteral">&apos;human&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="363"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>time.sleep(0.005)</highlight></codeline>
-<codeline lineno="364"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>mode<sp/>==<sp/></highlight><highlight class="stringliteral">&apos;human_fast&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="365"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">pass</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/f110__env__backup_8py.xml b/docs/xml/f110__env__backup_8py.xml
deleted file mode 100644
index 7b59ab6e..00000000
--- a/docs/xml/f110__env__backup_8py.xml
+++ /dev/null
@@ -1,602 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="f110__env__backup_8py" kind="file" language="Python">
-    <compoundname>f110_env_backup.py</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env" prot="public">f110_gym::envs::f110_env_backup::F110Env</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1f110__env__backup">f110_gym::envs::f110_env_backup</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight><highlight class="stringliteral">&apos;&apos;&apos;</highlight></codeline>
-<codeline lineno="24"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="25"><highlight class="stringliteral">&apos;&apos;&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="26"><highlight class="normal"></highlight></codeline>
-<codeline lineno="27"><highlight class="normal"></highlight><highlight class="comment">#<sp/>gym<sp/>imports</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="28"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>gym</highlight></codeline>
-<codeline lineno="29"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>gym<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>error,<sp/>spaces,<sp/>utils</highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>gym.utils<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>seeding</highlight></codeline>
-<codeline lineno="31"><highlight class="normal"></highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight><highlight class="comment">#<sp/>zmq<sp/>imports</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="33"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>zmq</highlight></codeline>
-<codeline lineno="34"><highlight class="normal"></highlight></codeline>
-<codeline lineno="35"><highlight class="normal"></highlight><highlight class="comment">#<sp/>protobuf<sp/>import</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="36"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>sim_requests_pb2</highlight></codeline>
-<codeline lineno="37"><highlight class="normal"></highlight></codeline>
-<codeline lineno="38"><highlight class="normal"></highlight><highlight class="comment">#<sp/>others</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="39"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="40"><highlight class="normal"></highlight></codeline>
-<codeline lineno="41"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>numba<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>njit</highlight></codeline>
-<codeline lineno="42"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.ndimage<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>distance_transform_edt<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>edt</highlight></codeline>
-<codeline lineno="43"><highlight class="normal"></highlight></codeline>
-<codeline lineno="44"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>PIL<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>Image</highlight></codeline>
-<codeline lineno="45"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>sys</highlight></codeline>
-<codeline lineno="46"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>os</highlight></codeline>
-<codeline lineno="47"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>signal</highlight></codeline>
-<codeline lineno="48"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>subprocess</highlight></codeline>
-<codeline lineno="49"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>math</highlight></codeline>
-<codeline lineno="50"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>yaml</highlight></codeline>
-<codeline lineno="51"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>csv</highlight></codeline>
-<codeline lineno="52"><highlight class="normal"></highlight></codeline>
-<codeline lineno="53"><highlight class="normal"></highlight><highlight class="comment">#<sp/>from<sp/>matplotlib.pyplot<sp/>import<sp/>imshow</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="54"><highlight class="normal"></highlight><highlight class="comment">#<sp/>import<sp/>matplotlib.pyplot<sp/>as<sp/>plt</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="55"><highlight class="normal"></highlight></codeline>
-<codeline lineno="56" refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env" kindref="compound">F110Env</ref>(gym.Env,<sp/>utils.EzPickle):</highlight></codeline>
-<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="58"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>OpenAI<sp/>gym<sp/>environment<sp/>for<sp/>F1/10<sp/>simulator</highlight></codeline>
-<codeline lineno="59"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Use<sp/>0mq&apos;s<sp/>REQ-REP<sp/>pattern<sp/>to<sp/>communicate<sp/>to<sp/>the<sp/>C++<sp/>simulator</highlight></codeline>
-<codeline lineno="60"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>ONE<sp/>env<sp/>has<sp/>ONE<sp/>corresponding<sp/>C++<sp/>instance</highlight></codeline>
-<codeline lineno="61"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Need<sp/>to<sp/>create<sp/>env<sp/>with<sp/>map<sp/>input,<sp/>full<sp/>path<sp/>to<sp/>map<sp/>yaml<sp/>file,<sp/>map<sp/>pgm<sp/>image<sp/>and<sp/>yaml<sp/>should<sp/>be<sp/>in<sp/>same<sp/>directory</highlight></codeline>
-<codeline lineno="62"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="63"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>should<sp/>be<sp/>initialized<sp/>with<sp/>a<sp/>map,<sp/>a<sp/>timestep,<sp/>and<sp/>number<sp/>of<sp/>agents</highlight></codeline>
-<codeline lineno="64"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/>metadata<sp/>=<sp/>{</highlight><highlight class="stringliteral">&apos;render.modes&apos;</highlight><highlight class="normal">:<sp/>[]}</highlight></codeline>
-<codeline lineno="66"><highlight class="normal"></highlight></codeline>
-<codeline lineno="67"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">__init__(self):</highlight></codeline>
-<codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>simualtor<sp/>params</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2efb58b38020d194c865ac289009ba4a" kindref="member">params_set</ref><sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="70"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a58740f3bf62a7bf263a13b47cdf5d797" kindref="member">map_inited</ref><sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>params<sp/>list<sp/>is<sp/>[mu,<sp/>h_cg,<sp/>l_r,<sp/>cs_f,<sp/>cs_r,<sp/>I_z,<sp/>mass]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" kindref="member">params</ref><sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="73"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>add<sp/>multi<sp/>agent<sp/>stuff,<sp/>need<sp/>a<sp/>_add_agent<sp/>function<sp/>of<sp/>sth</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kindref="member">num_agents</ref><sp/>=<sp/>2</highlight></codeline>
-<codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a89f5296784405aeaa52325a8dac4420e" kindref="member">timestep</ref><sp/>=<sp/>0.01</highlight></codeline>
-<codeline lineno="76"><highlight class="normal"></highlight></codeline>
-<codeline lineno="77"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>clean<sp/>up<sp/>the<sp/>map<sp/>path<sp/>stuff,<sp/>right<sp/>now<sp/>it&apos;s<sp/>a<sp/>init_map<sp/>function</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad417d87c39e8046ab2a66fd11d5910b8" kindref="member">map_path</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="80"><highlight class="normal"></highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>current_dir<sp/>=<sp/>os.path.dirname(os.path.abspath(__file__))</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>map_path<sp/>=<sp/>current_dir<sp/>+<sp/>&apos;/../../../maps/levine.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="83"><highlight class="normal"></highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>default</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae4babdba55642fab735d03c5672ed5ad" kindref="member">ego_idx</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="86"><highlight class="normal"></highlight></codeline>
-<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>also<sp/>set<sp/>these<sp/>things<sp/>in<sp/>init<sp/>function?</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="88"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae2047312369a5e949b09e1c5b067412f" kindref="member">timeout</ref><sp/>=<sp/>120.0</highlight></codeline>
-<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>radius<sp/>to<sp/>consider<sp/>done</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1af3d3f69953f78a141b98f3d738a15530" kindref="member">start_thresh</ref><sp/>=<sp/>0.5<sp/><sp/></highlight><highlight class="comment">#<sp/>10cm</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="91"><highlight class="normal"></highlight></codeline>
-<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>env<sp/>states</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>more<sp/>accurate<sp/>description<sp/>should<sp/>be<sp/>ego<sp/>car<sp/>state</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="94"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>might<sp/>not<sp/>need<sp/>to<sp/>keep<sp/>scan</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0a9dbd46041d336a1d6b28ea01418d91" kindref="member">x</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2fd95411b8a24759642863111ed0f513" kindref="member">y</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1dc4f5c9ab99353e2c364d42daf5a180" kindref="member">theta</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="98"><highlight class="normal"></highlight></codeline>
-<codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a68efc45c0a66e4652697146e18c8a570" kindref="member">in_collision</ref><sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="100"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a88dd2fd1f2dc0ef251a079d3e74622fe" kindref="member">collision_angle</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="101"><highlight class="normal"></highlight></codeline>
-<codeline lineno="102"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>loop<sp/>completion</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1c3ac639a2b0773d99043c2b911970d7" kindref="member">near_start</ref><sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac19a932655f1f9a6e8065df37bbe9f80" kindref="member">num_toggles</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="105"><highlight class="normal"></highlight></codeline>
-<codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>race<sp/>info</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa7af900e93ae4b180e89e7d48e242033" kindref="member">lap_times</ref><sp/>=<sp/>[0.0,<sp/>0.0]</highlight></codeline>
-<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a3eb59d52fbc4d767e2c7ed0c64b8650f" kindref="member">lap_counts</ref><sp/>=<sp/>[0,<sp/>0]</highlight></codeline>
-<codeline lineno="109"><highlight class="normal"></highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>load<sp/>the<sp/>map<sp/>(same<sp/>as<sp/>ROS<sp/>.yaml<sp/>format)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>if<sp/>not<sp/>map_path.endswith(&apos;.yaml&apos;):</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>Please<sp/>use<sp/>a<sp/>yaml<sp/>file<sp/>for<sp/>map<sp/>input.&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="113"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>sys.exit()</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="114"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>img</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>map_img_path<sp/>=<sp/>&apos;levine.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="116"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.map_img<sp/>=<sp/>cv2.imread(map_img_path,<sp/>0)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="117"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.map_img<sp/>=<sp/>cv2.flip(self.map_img,<sp/>0)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="118"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.map_img<sp/>=<sp/>np.array(Image.open(map_img_path).transpose(Image.FLIP_TOP_BOTTOM))</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="119"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.map_img<sp/>=<sp/>self.map_img.astype(np.float64)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="120"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.map_img<sp/>=<sp/>self.map_img[::-1]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="121"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.map_img<sp/>=<sp/>np.dot(self.map_img[...,<sp/>:3],<sp/>[0.29,<sp/>0.57,<sp/>0.14])</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="122"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>plt.imshow(self.map_img)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="123"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>plt.show()</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="124"><highlight class="normal"></highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>map<sp/>metadata</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.map_height<sp/>=<sp/>self.map_img.shape[0]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="127"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.map_width<sp/>=<sp/>self.map_img.shape[1]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a476dab30a81d8794d89f0bd85b3e7884" kindref="member">map_height</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2f4a85b1b83b203bc5549b6bff0bf2d1" kindref="member">map_width</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="130"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1ec9b2bc2142334a2b8a2d028adcace8" kindref="member">map_resolution</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a7456387ff1b9e6832dd205ed891bc750" kindref="member">free_thresh</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2e1491609720111b7065748ad37e8512" kindref="member">origin</ref><sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>metadata</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>with<sp/>open(map_path,<sp/>&apos;r&apos;)<sp/>as<sp/>yaml_stream:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="135"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>try:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_metadata<sp/>=<sp/>yaml.safe_load(yaml_stream)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.map_resolution<sp/>=<sp/>map_metadata[&apos;resolution&apos;]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="138"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.origin<sp/>=<sp/>map_metadata[&apos;origin&apos;]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>#<sp/>print(self.origin)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>#<sp/>self.free_thresh?????</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>except<sp/>yaml.YAMLError<sp/>as<sp/>ex:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(ex)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="143"><highlight class="normal"></highlight></codeline>
-<codeline lineno="144"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>create<sp/>zmq<sp/>stuff</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>port<sp/>number<sp/>range<sp/>from<sp/>6666<sp/>-<sp/>6766</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>max<sp/>100<sp/>tries<sp/>to<sp/>connect/bind</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="147"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>tries<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>max_tries<sp/>=<sp/>100</highlight></codeline>
-<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>min_port<sp/>=<sp/>6666</highlight></codeline>
-<codeline lineno="150"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0e6a85d0de7165369ce8fcd18be9d885" kindref="member">port</ref><sp/>=<sp/>min_port</highlight></codeline>
-<codeline lineno="151"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa3367f6570455c5311e075b4b9f91c56" kindref="member">context</ref><sp/>=<sp/>zmq.Context()</highlight></codeline>
-<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kindref="member">socket</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa3367f6570455c5311e075b4b9f91c56" kindref="member">context</ref>.socket(zmq.PAIR)</highlight></codeline>
-<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>tries<sp/>&lt;<sp/>max_tries:</highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kindref="member">socket</ref>.bind(</highlight><highlight class="stringliteral">&apos;tcp://*:%s&apos;</highlight><highlight class="normal"><sp/>%<sp/>str(min_port<sp/>+<sp/>tries))</highlight></codeline>
-<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.socket.connect(&apos;tcp://localhost:6666&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0e6a85d0de7165369ce8fcd18be9d885" kindref="member">port</ref><sp/>=<sp/>min_port<sp/>+<sp/>tries</highlight></codeline>
-<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>tries<sp/>=<sp/>tries<sp/>+<sp/>1</highlight></codeline>
-<codeline lineno="161"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>retrying<sp/>for<sp/>&apos;<sp/>+<sp/>str(tries)<sp/>+<sp/>&apos;<sp/>times&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="162"><highlight class="normal"></highlight></codeline>
-<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Gym<sp/>env<sp/>-<sp/>Connected<sp/>env<sp/>to<sp/>port:<sp/>&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0e6a85d0de7165369ce8fcd18be9d885" kindref="member">port</ref>))</highlight></codeline>
-<codeline lineno="164"><highlight class="normal"></highlight></codeline>
-<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>create<sp/>cpp<sp/>instance<sp/>if<sp/>create<sp/>then<sp/>need<sp/>to<sp/>pass<sp/>port<sp/>number</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>subprocess<sp/>call<sp/>assumes<sp/>directory<sp/>structure</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>init<sp/>sim<sp/>with<sp/>arguments:<sp/>[ex<sp/>timestep<sp/>num_agents<sp/>port_num]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="168"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>include<sp/>other<sp/>car<sp/>params<sp/>in<sp/>argument</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>args<sp/>=<sp/>[&apos;../build/sim_server&apos;,<sp/>str(self.timestep),<sp/>str(self.num_agents),<sp/>str(self.port)]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.sim_p<sp/>=<sp/>subprocess.Popen(args)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a23d4e3c74f19290571ce06f57c68de01" kindref="member">sim_p</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="172"><highlight class="normal"></highlight></codeline>
-<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>env<sp/>created,<sp/>waiting<sp/>for<sp/>params...&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="174"><highlight class="normal"></highlight></codeline>
-<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab53974d19ae639eaa8d922db303d21c4" kindref="member">__del__</ref>(self):</highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="177"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Finalizer,<sp/>does<sp/>cleanup</highlight></codeline>
-<codeline lineno="178"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a23d4e3c74f19290571ce06f57c68de01" kindref="member">sim_p</ref><sp/></highlight><highlight class="keywordflow">is</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">pass</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>os.kill(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a23d4e3c74f19290571ce06f57c68de01" kindref="member">sim_p</ref>.pid,<sp/>signal.SIGTERM)</highlight></codeline>
-<codeline lineno="183"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>Sim<sp/>child<sp/>process<sp/>killed.&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="184"><highlight class="normal"></highlight></codeline>
-<codeline lineno="185"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_start_executable(self,<sp/>path):</highlight></codeline>
-<codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mu<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" kindref="member">params</ref>[0]</highlight></codeline>
-<codeline lineno="187"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>h_cg<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" kindref="member">params</ref>[1]</highlight></codeline>
-<codeline lineno="188"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>l_r<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" kindref="member">params</ref>[2]</highlight></codeline>
-<codeline lineno="189"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>cs_f<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" kindref="member">params</ref>[3]</highlight></codeline>
-<codeline lineno="190"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>cs_r<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" kindref="member">params</ref>[4]</highlight></codeline>
-<codeline lineno="191"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>I_z<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" kindref="member">params</ref>[5]</highlight></codeline>
-<codeline lineno="192"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mass<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" kindref="member">params</ref>[6]</highlight></codeline>
-<codeline lineno="193"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>args<sp/>=<sp/>[path+</highlight><highlight class="stringliteral">&apos;sim_server&apos;</highlight><highlight class="normal">,<sp/>str(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a89f5296784405aeaa52325a8dac4420e" kindref="member">timestep</ref>),<sp/>str(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kindref="member">num_agents</ref>),<sp/>str(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0e6a85d0de7165369ce8fcd18be9d885" kindref="member">port</ref>),<sp/>str(mu),<sp/>str(h_cg),<sp/>str(l_r),<sp/>str(cs_f),<sp/>str(cs_r),<sp/>str(I_z),<sp/>str(mass)]</highlight></codeline>
-<codeline lineno="194"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a23d4e3c74f19290571ce06f57c68de01" kindref="member">sim_p</ref><sp/>=<sp/>subprocess.Popen(args)</highlight></codeline>
-<codeline lineno="195"><highlight class="normal"></highlight></codeline>
-<codeline lineno="196"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_set_map(self):</highlight></codeline>
-<codeline lineno="197"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="198"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Sets<sp/>the<sp/>map<sp/>for<sp/>the<sp/>simulator<sp/>instance</highlight></codeline>
-<codeline lineno="199"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a58740f3bf62a7bf263a13b47cdf5d797" kindref="member">map_inited</ref>:</highlight></codeline>
-<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Gym<sp/>env<sp/>-<sp/>Sim<sp/>map<sp/>not<sp/>initialized,<sp/>call<sp/>env.init_map()<sp/>to<sp/>init<sp/>map.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>create<sp/>and<sp/>fill<sp/>in<sp/>protobuf</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="203"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_proto<sp/>=<sp/>sim_requests_pb2.SimRequest()</highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_proto.type<sp/>=<sp/>1</highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_proto.map_request.map.extend((1.<sp/>-<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref>/255.).flatten().tolist())</highlight></codeline>
-<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_proto.map_request.origin_x<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2e1491609720111b7065748ad37e8512" kindref="member">origin</ref>[0]</highlight></codeline>
-<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_proto.map_request.origin_y<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2e1491609720111b7065748ad37e8512" kindref="member">origin</ref>[1]</highlight></codeline>
-<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_proto.map_request.map_resolution<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1ec9b2bc2142334a2b8a2d028adcace8" kindref="member">map_resolution</ref></highlight></codeline>
-<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>double<sp/>check<sp/>if<sp/>this<sp/>value<sp/>is<sp/>valid</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_proto.map_request.free_threshold<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a7456387ff1b9e6832dd205ed891bc750" kindref="member">free_thresh</ref></highlight></codeline>
-<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_proto.map_request.map_height<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a476dab30a81d8794d89f0bd85b3e7884" kindref="member">map_height</ref></highlight></codeline>
-<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_proto.map_request.map_width<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2f4a85b1b83b203bc5549b6bff0bf2d1" kindref="member">map_width</ref></highlight></codeline>
-<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>serialization</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_request_string<sp/>=<sp/>map_request_proto.SerializeToString()</highlight></codeline>
-<codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>send<sp/>set<sp/>map<sp/>request</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>Sending<sp/>set<sp/>map<sp/>request...&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kindref="member">socket</ref>.send(map_request_string)</highlight></codeline>
-<codeline lineno="218"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>Map<sp/>request<sp/>sent.&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>receive<sp/>response<sp/>from<sp/>sim<sp/>instance</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sim_response_string<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kindref="member">socket</ref>.recv()</highlight></codeline>
-<codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>parse<sp/>map<sp/>response<sp/>proto</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="222"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sim_response_proto<sp/>=<sp/>sim_requests_pb2.SimResponse()</highlight></codeline>
-<codeline lineno="223"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sim_response_proto.ParseFromString(sim_response_string)</highlight></codeline>
-<codeline lineno="224"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>get<sp/>results</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>set_map_result<sp/>=<sp/>sim_response_proto.map_result.result</highlight></codeline>
-<codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>set_map_result<sp/>==<sp/>1:</highlight></codeline>
-<codeline lineno="227"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Gym<sp/>env<sp/>-<sp/>Set<sp/>map<sp/>failed,<sp/>exiting...&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sys.exit()</highlight></codeline>
-<codeline lineno="229"><highlight class="normal"></highlight></codeline>
-<codeline lineno="230"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_check_done(self):</highlight></codeline>
-<codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="232"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Check<sp/>if<sp/>the<sp/>episode<sp/>is<sp/>done</highlight></codeline>
-<codeline lineno="233"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>This<sp/>is<sp/>in<sp/>terms<sp/>of<sp/>the<sp/>ego<sp/>car</highlight></codeline>
-<codeline lineno="234"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>For<sp/>our<sp/>case,<sp/>whether<sp/>the<sp/>car<sp/>ends<sp/>up<sp/>close<sp/>enough<sp/>to<sp/>the<sp/>starting<sp/>point</highlight></codeline>
-<codeline lineno="235"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>And<sp/>if<sp/>accumulated<sp/>time<sp/>is<sp/>over<sp/>the<sp/>timeout</highlight></codeline>
-<codeline lineno="236"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>return<sp/>true<sp/>if<sp/>done,<sp/>false<sp/>if<sp/>not</highlight></codeline>
-<codeline lineno="237"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>This<sp/>assumes<sp/>start<sp/>is<sp/>always<sp/>(0,<sp/>0)</highlight></codeline>
-<codeline lineno="238"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="239"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="240"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>start<sp/>not<sp/>always<sp/>0,<sp/>0</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="241"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>dist_to_start<sp/>=<sp/>math.sqrt((self.x-self.start_x)<sp/>**<sp/>2<sp/>+<sp/>(self.y-self.start_y)<sp/>**<sp/>2)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="242"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>left_t<sp/>=<sp/>2</highlight></codeline>
-<codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>right_t<sp/>=<sp/>2</highlight></codeline>
-<codeline lineno="244"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>timeout<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab629b0d75ade059476f2bf4237798101" kindref="member">current_time</ref><sp/>&gt;=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae2047312369a5e949b09e1c5b067412f" kindref="member">timeout</ref></highlight></codeline>
-<codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a59e7a0edc30712fb482c246e01a72368" kindref="member">double_finish</ref>:</highlight></codeline>
-<codeline lineno="246"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses_x<sp/>=<sp/>np.array(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aeb9374dba01e21d5fd618d0736573f77" kindref="member">all_x</ref>)-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a894820aea9c0b9c750f165798ab60ba0" kindref="member">start_xs</ref></highlight></codeline>
-<codeline lineno="247"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses_y<sp/>=<sp/>np.array(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aebf4ff49efe573bdbe29b190528256f1" kindref="member">all_y</ref>)-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae28edcae46735a4e684140aa05fd099b" kindref="member">start_ys</ref></highlight></codeline>
-<codeline lineno="248"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta_pt<sp/>=<sp/>np.dot(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a50b6912954290c4c5fb9165fc0103628" kindref="member">start_rot</ref>,<sp/>np.stack((poses_x,<sp/>poses_y),<sp/>axis=0))</highlight></codeline>
-<codeline lineno="249"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y<sp/>=<sp/>delta_pt[1,:]</highlight></codeline>
-<codeline lineno="250"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>idx1<sp/>=<sp/>temp_y<sp/>&gt;<sp/>left_t</highlight></codeline>
-<codeline lineno="251"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>idx2<sp/>=<sp/>temp_y<sp/>&lt;<sp/>-right_t</highlight></codeline>
-<codeline lineno="252"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y[idx1]<sp/>-=<sp/>left_t</highlight></codeline>
-<codeline lineno="253"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y[idx2]<sp/>=<sp/>-right_t<sp/>-<sp/>temp_y[idx2]</highlight></codeline>
-<codeline lineno="254"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y[np.invert(np.logical_or(idx1,<sp/>idx2))]<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="255"><highlight class="normal"></highlight></codeline>
-<codeline lineno="256"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dist2<sp/>=<sp/>delta_pt[0,:]**2<sp/>+<sp/>temp_y**2</highlight></codeline>
-<codeline lineno="257"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>closes<sp/>=<sp/>dist2<sp/>&lt;=<sp/>0.1</highlight></codeline>
-<codeline lineno="258"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kindref="member">num_agents</ref>):</highlight></codeline>
-<codeline lineno="259"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>closes[i]<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab224af4cddca309ab854b9c26f40868f" kindref="member">near_starts</ref>[i]:</highlight></codeline>
-<codeline lineno="260"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab224af4cddca309ab854b9c26f40868f" kindref="member">near_starts</ref>[i]<sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="261"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kindref="member">toggle_list</ref>[i]<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="262"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>closes[i]<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab224af4cddca309ab854b9c26f40868f" kindref="member">near_starts</ref>[i]:</highlight></codeline>
-<codeline lineno="263"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab224af4cddca309ab854b9c26f40868f" kindref="member">near_starts</ref>[i]<sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kindref="member">toggle_list</ref>[i]<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="265"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>done<sp/>=<sp/>(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a68efc45c0a66e4652697146e18c8a570" kindref="member">in_collision</ref><sp/>|<sp/>(timeout)<sp/>|<sp/>np.all(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kindref="member">toggle_list</ref><sp/>&gt;=<sp/>4))</highlight></codeline>
-<codeline lineno="266"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>only<sp/>for<sp/>two<sp/>cars<sp/>atm</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="267"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a3eb59d52fbc4d767e2c7ed0c64b8650f" kindref="member">lap_counts</ref>[0]<sp/>=<sp/>np.floor(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kindref="member">toggle_list</ref>[0]<sp/>/<sp/>2)</highlight></codeline>
-<codeline lineno="268"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a3eb59d52fbc4d767e2c7ed0c64b8650f" kindref="member">lap_counts</ref>[1]<sp/>=<sp/>np.floor(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kindref="member">toggle_list</ref>[1]<sp/>/<sp/>2)</highlight></codeline>
-<codeline lineno="269"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kindref="member">toggle_list</ref>[0]<sp/>&lt;<sp/>4:</highlight></codeline>
-<codeline lineno="270"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa7af900e93ae4b180e89e7d48e242033" kindref="member">lap_times</ref>[0]<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab629b0d75ade059476f2bf4237798101" kindref="member">current_time</ref></highlight></codeline>
-<codeline lineno="271"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kindref="member">toggle_list</ref>[1]<sp/>&lt;<sp/>4:</highlight></codeline>
-<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa7af900e93ae4b180e89e7d48e242033" kindref="member">lap_times</ref>[1]<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab629b0d75ade059476f2bf4237798101" kindref="member">current_time</ref></highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>done,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kindref="member">toggle_list</ref><sp/>&gt;=<sp/>4</highlight></codeline>
-<codeline lineno="274"><highlight class="normal"></highlight></codeline>
-<codeline lineno="275"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>delta_pt<sp/>=<sp/>np.dot(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a50b6912954290c4c5fb9165fc0103628" kindref="member">start_rot</ref>,<sp/>np.array([self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0a9dbd46041d336a1d6b28ea01418d91" kindref="member">x</ref>-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab5e2d4e41534916caaa9fa2a94979053" kindref="member">start_x</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2fd95411b8a24759642863111ed0f513" kindref="member">y</ref>-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0959bbc593917d214789b9785a8f8b0c" kindref="member">start_y</ref>]))</highlight></codeline>
-<codeline lineno="276"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>delta_pt[1]<sp/>&gt;<sp/>left_t:<sp/></highlight><highlight class="comment">#<sp/>left</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y<sp/>=<sp/>delta_pt[1]-left_t</highlight></codeline>
-<codeline lineno="278"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>delta_pt[1]<sp/>&lt;<sp/>-right_t:<sp/></highlight><highlight class="comment">#<sp/>right</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="279"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y<sp/>=<sp/>-right_t<sp/>-<sp/>delta_pt[1]</highlight></codeline>
-<codeline lineno="280"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="281"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>temp_y<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="282"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dist2<sp/>=<sp/>delta_pt[0]**2<sp/>+<sp/>temp_y**2</highlight></codeline>
-<codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>close<sp/>=<sp/>dist2<sp/>&lt;=<sp/>0.1</highlight></codeline>
-<codeline lineno="284"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>close<sp/>=<sp/>dist_to_start<sp/>&lt;=<sp/>self.start_thresh</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="285"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>close<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1c3ac639a2b0773d99043c2b911970d7" kindref="member">near_start</ref>:</highlight></codeline>
-<codeline lineno="286"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1c3ac639a2b0773d99043c2b911970d7" kindref="member">near_start</ref><sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="287"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac19a932655f1f9a6e8065df37bbe9f80" kindref="member">num_toggles</ref><sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="288"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>close<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1c3ac639a2b0773d99043c2b911970d7" kindref="member">near_start</ref>:</highlight></codeline>
-<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1c3ac639a2b0773d99043c2b911970d7" kindref="member">near_start</ref><sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="290"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac19a932655f1f9a6e8065df37bbe9f80" kindref="member">num_toggles</ref><sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="291"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>done<sp/>=<sp/>(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a68efc45c0a66e4652697146e18c8a570" kindref="member">in_collision</ref><sp/>|<sp/>(timeout)<sp/>|<sp/>(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac19a932655f1f9a6e8065df37bbe9f80" kindref="member">num_toggles</ref><sp/>&gt;=<sp/>4))</highlight></codeline>
-<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>done</highlight></codeline>
-<codeline lineno="293"><highlight class="normal"></highlight></codeline>
-<codeline lineno="294"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_check_passed(self):</highlight></codeline>
-<codeline lineno="295"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="296"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns<sp/>the<sp/>times<sp/>that<sp/>the<sp/>ego<sp/>car<sp/>overtook<sp/>the<sp/>other<sp/>car</highlight></codeline>
-<codeline lineno="297"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>0</highlight></codeline>
-<codeline lineno="299"><highlight class="normal"></highlight></codeline>
-<codeline lineno="300"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_update_state(self,<sp/>obs_dict):</highlight></codeline>
-<codeline lineno="301"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="302"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Update<sp/>the<sp/>env&apos;s<sp/>states<sp/>according<sp/>to<sp/>observations</highlight></codeline>
-<codeline lineno="303"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs<sp/>is<sp/>observation<sp/>dictionary</highlight></codeline>
-<codeline lineno="304"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="305"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0a9dbd46041d336a1d6b28ea01418d91" kindref="member">x</ref><sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;poses_x&apos;</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]]</highlight></codeline>
-<codeline lineno="306"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2fd95411b8a24759642863111ed0f513" kindref="member">y</ref><sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;poses_y&apos;</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]]</highlight></codeline>
-<codeline lineno="307"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a59e7a0edc30712fb482c246e01a72368" kindref="member">double_finish</ref>:</highlight></codeline>
-<codeline lineno="308"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aeb9374dba01e21d5fd618d0736573f77" kindref="member">all_x</ref><sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;poses_x&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="309"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aebf4ff49efe573bdbe29b190528256f1" kindref="member">all_y</ref><sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;poses_y&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="310"><highlight class="normal"></highlight></codeline>
-<codeline lineno="311"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1dc4f5c9ab99353e2c364d42daf5a180" kindref="member">theta</ref><sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;poses_theta&apos;</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]]</highlight></codeline>
-<codeline lineno="312"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a68efc45c0a66e4652697146e18c8a570" kindref="member">in_collision</ref><sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;collisions&apos;</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]]</highlight></codeline>
-<codeline lineno="313"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a88dd2fd1f2dc0ef251a079d3e74622fe" kindref="member">collision_angle</ref><sp/>=<sp/>obs_dict[</highlight><highlight class="stringliteral">&apos;collision_angles&apos;</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]]</highlight></codeline>
-<codeline lineno="314"><highlight class="normal"></highlight></codeline>
-<codeline lineno="315"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>do<sp/>we<sp/>do<sp/>the<sp/>ray<sp/>casting<sp/>here<sp/>or<sp/>in<sp/>C++?</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="316"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>if<sp/>speed<sp/>is<sp/>a<sp/>concern<sp/>do<sp/>it<sp/>in<sp/>C++?</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="317"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>numba<sp/>shouldn&apos;t<sp/>be<sp/>a<sp/>dependency<sp/>of<sp/>gym<sp/>env</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="318"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">_raycast_opponents(self,<sp/>obs_dict):</highlight></codeline>
-<codeline lineno="319"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>find<sp/>the<sp/>angle<sp/>of<sp/>beam<sp/>of<sp/>each<sp/>car<sp/>in<sp/>each<sp/>other&apos;s<sp/>fov</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="320"><highlight class="normal"></highlight></codeline>
-<codeline lineno="321"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>set<sp/>range<sp/>of<sp/>beams<sp/>to<sp/>raycast,<sp/>ego<sp/>and<sp/>op</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="322"><highlight class="normal"></highlight></codeline>
-<codeline lineno="323"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>raycast<sp/>beams,<sp/>two<sp/>set</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="324"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_obs<sp/>=<sp/>{}</highlight></codeline>
-<codeline lineno="325"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>new_obs</highlight></codeline>
-<codeline lineno="326"><highlight class="normal"></highlight></codeline>
-<codeline lineno="327"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">step(self,<sp/>action):</highlight></codeline>
-<codeline lineno="328"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>can&apos;t<sp/>step<sp/>if<sp/>params<sp/>not<sp/>set</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="329"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2efb58b38020d194c865ac289009ba4a" kindref="member">params_set</ref>:</highlight></codeline>
-<codeline lineno="330"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;ERROR<sp/>-<sp/>Gym<sp/>Env<sp/>-<sp/>Params<sp/>not<sp/>set,<sp/>call<sp/>update<sp/>params<sp/>before<sp/>stepping.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="331"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sys.exit()</highlight></codeline>
-<codeline lineno="332"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>action<sp/>is<sp/>a<sp/>list<sp/>of<sp/>steering<sp/>angles<sp/>+<sp/>command<sp/>velocities</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="333"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>also<sp/>a<sp/>ego<sp/>car<sp/>index</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="334"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>action<sp/>should<sp/>a<sp/>DICT<sp/>with<sp/>{&apos;ego_idx&apos;:<sp/>int,<sp/>&apos;speed&apos;:[],<sp/>&apos;steer&apos;:[]}</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="335"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>step_request_proto<sp/>=<sp/>sim_requests_pb2.SimRequest()</highlight></codeline>
-<codeline lineno="336"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>step_request_proto.type<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="337"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>step_request_proto.step_request.ego_idx<sp/>=<sp/>action[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="338"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>step_request_proto.step_request.requested_vel.extend(action[</highlight><highlight class="stringliteral">&apos;speed&apos;</highlight><highlight class="normal">])</highlight></codeline>
-<codeline lineno="339"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>step_request_proto.step_request.requested_ang.extend(action[</highlight><highlight class="stringliteral">&apos;steer&apos;</highlight><highlight class="normal">])</highlight></codeline>
-<codeline lineno="340"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>serialization</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="341"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>step_request_string<sp/>=<sp/>step_request_proto.SerializeToString()</highlight></codeline>
-<codeline lineno="342"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>send<sp/>step<sp/>request</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="343"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kindref="member">socket</ref>.send(step_request_string)</highlight></codeline>
-<codeline lineno="344"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>receive<sp/>response<sp/>from<sp/>sim<sp/>instance</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="345"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sim_response_string<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kindref="member">socket</ref>.recv()</highlight></codeline>
-<codeline lineno="346"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>Received<sp/>response<sp/>for<sp/>step<sp/>request.&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="347"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>parse<sp/>map<sp/>response<sp/>proto</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="348"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sim_response_proto<sp/>=<sp/>sim_requests_pb2.SimResponse()</highlight></codeline>
-<codeline lineno="349"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sim_response_proto.ParseFromString(sim_response_string)</highlight></codeline>
-<codeline lineno="350"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>get<sp/>results</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="351"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>make<sp/>sure<sp/>we<sp/>have<sp/>the<sp/>right<sp/>type<sp/>of<sp/>response</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="352"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>response_type<sp/>=<sp/>sim_response_proto.type</highlight></codeline>
-<codeline lineno="353"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>also<sp/>check<sp/>for<sp/>stepping<sp/>fail</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="354"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>response_type<sp/>==<sp/>0:</highlight></codeline>
-<codeline lineno="355"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Gym<sp/>env<sp/>-<sp/>Wrong<sp/>response<sp/>type<sp/>for<sp/>stepping,<sp/>exiting...&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="356"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sys.exit()</highlight></codeline>
-<codeline lineno="357"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observations_proto<sp/>=<sp/>sim_response_proto.sim_obs</highlight></codeline>
-<codeline lineno="358"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>make<sp/>sure<sp/>the<sp/>ego<sp/>idx<sp/>matches</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="359"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>observations_proto.ego_idx<sp/>==<sp/>action[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]:</highlight></codeline>
-<codeline lineno="360"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Gym<sp/>env<sp/>-<sp/>Ego<sp/>index<sp/>mismatch,<sp/>exiting...&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="361"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sys.exit()</highlight></codeline>
-<codeline lineno="362"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>get<sp/>observations</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="363"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>carobs_list<sp/>=<sp/>observations_proto.observations</highlight></codeline>
-<codeline lineno="364"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>construct<sp/>observation<sp/>dict</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="365"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Observation<sp/>DICT,<sp/>assume<sp/>indices<sp/>consistent:<sp/>{&apos;ego_idx&apos;:int,<sp/>&apos;scans&apos;:[[]],<sp/>&apos;poses_x&apos;:[],<sp/>&apos;poses_y&apos;:[],<sp/>&apos;poses_theta&apos;:[],<sp/>&apos;linear_vels_x&apos;:[],<sp/>&apos;linear_vels_y&apos;:[],<sp/>&apos;ang_vels_z&apos;:[],<sp/>&apos;collisions&apos;:[],<sp/>&apos;collision_angles&apos;:[]}</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="366"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs<sp/>=<sp/>{</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">:<sp/>observations_proto.ego_idx,<sp/></highlight><highlight class="stringliteral">&apos;scans&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;poses_x&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;poses_y&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;poses_theta&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;linear_vels_x&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;linear_vels_y&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;ang_vels_z&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;collisions&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;collision_angles&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;lap_times&apos;</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;lap_counts&apos;</highlight><highlight class="normal">:<sp/>[]}</highlight></codeline>
-<codeline lineno="367"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>car_obs<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>carobs_list:</highlight></codeline>
-<codeline lineno="368"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;scans&apos;</highlight><highlight class="normal">].append(car_obs.scan)</highlight></codeline>
-<codeline lineno="369"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;poses_x&apos;</highlight><highlight class="normal">].append(car_obs.pose_x)</highlight></codeline>
-<codeline lineno="370"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;poses_y&apos;</highlight><highlight class="normal">].append(car_obs.pose_y)</highlight></codeline>
-<codeline lineno="371"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>abs(car_obs.theta)<sp/>&lt;<sp/>np.pi:</highlight></codeline>
-<codeline lineno="372"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;poses_theta&apos;</highlight><highlight class="normal">].append(car_obs.theta)</highlight></codeline>
-<codeline lineno="373"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="374"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;poses_theta&apos;</highlight><highlight class="normal">].append(-((2<sp/>*<sp/>np.pi)<sp/>-<sp/>car_obs.theta))</highlight></codeline>
-<codeline lineno="375"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;linear_vels_x&apos;</highlight><highlight class="normal">].append(car_obs.linear_vel_x)</highlight></codeline>
-<codeline lineno="376"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;linear_vels_y&apos;</highlight><highlight class="normal">].append(car_obs.linear_vel_y)</highlight></codeline>
-<codeline lineno="377"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;ang_vels_z&apos;</highlight><highlight class="normal">].append(car_obs.ang_vel_z)</highlight></codeline>
-<codeline lineno="378"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;collisions&apos;</highlight><highlight class="normal">].append(car_obs.collision)</highlight></codeline>
-<codeline lineno="379"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;collision_angles&apos;</highlight><highlight class="normal">].append(car_obs.collision_angle)</highlight></codeline>
-<codeline lineno="380"><highlight class="normal"></highlight></codeline>
-<codeline lineno="381"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;lap_times&apos;</highlight><highlight class="normal">]<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa7af900e93ae4b180e89e7d48e242033" kindref="member">lap_times</ref></highlight></codeline>
-<codeline lineno="382"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs[</highlight><highlight class="stringliteral">&apos;lap_counts&apos;</highlight><highlight class="normal">]<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a3eb59d52fbc4d767e2c7ed0c64b8650f" kindref="member">lap_counts</ref></highlight></codeline>
-<codeline lineno="383"><highlight class="normal"></highlight></codeline>
-<codeline lineno="384"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>do<sp/>we<sp/>need<sp/>step<sp/>reward?</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="385"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reward<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a89f5296784405aeaa52325a8dac4420e" kindref="member">timestep</ref></highlight></codeline>
-<codeline lineno="386"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>accumulated<sp/>time<sp/>in<sp/>env</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="387"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab629b0d75ade059476f2bf4237798101" kindref="member">current_time</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab629b0d75ade059476f2bf4237798101" kindref="member">current_time</ref><sp/>+<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a89f5296784405aeaa52325a8dac4420e" kindref="member">timestep</ref></highlight></codeline>
-<codeline lineno="388"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>donezo<sp/>should<sp/>be<sp/>done<sp/>in<sp/>simulator?<sp/>could<sp/>be<sp/>done<sp/>here<sp/>as<sp/>well</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="389"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2bf2e9b454b5088eee0cacfaf806ef5a" kindref="member">_update_state</ref>(obs)</highlight></codeline>
-<codeline lineno="390"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a59e7a0edc30712fb482c246e01a72368" kindref="member">double_finish</ref>:</highlight></codeline>
-<codeline lineno="391"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>done,<sp/>temp<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0fd67b8765be08da96125421849d3144" kindref="member">_check_done</ref>()</highlight></codeline>
-<codeline lineno="392"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>info<sp/>=<sp/>{</highlight><highlight class="stringliteral">&apos;checkpoint_done&apos;</highlight><highlight class="normal">:<sp/>temp}</highlight></codeline>
-<codeline lineno="393"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="394"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>done<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0fd67b8765be08da96125421849d3144" kindref="member">_check_done</ref>()</highlight></codeline>
-<codeline lineno="395"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>info<sp/>=<sp/>{}</highlight></codeline>
-<codeline lineno="396"><highlight class="normal"></highlight></codeline>
-<codeline lineno="397"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>return<sp/>obs,<sp/>reward,<sp/>done,<sp/>info</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="398"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>obs,<sp/>reward,<sp/>done,<sp/>info</highlight></codeline>
-<codeline lineno="399"><highlight class="normal"></highlight></codeline>
-<codeline lineno="400"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">reset(self,<sp/>poses=None):</highlight></codeline>
-<codeline lineno="401"><highlight class="normal"></highlight></codeline>
-<codeline lineno="402"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab629b0d75ade059476f2bf4237798101" kindref="member">current_time</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="403"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a68efc45c0a66e4652697146e18c8a570" kindref="member">in_collision</ref><sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="404"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a34545b59df83e520f7c3031106c5c954" kindref="member">collision_angles</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="405"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac19a932655f1f9a6e8065df37bbe9f80" kindref="member">num_toggles</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="406"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1c3ac639a2b0773d99043c2b911970d7" kindref="member">near_start</ref><sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="407"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab224af4cddca309ab854b9c26f40868f" kindref="member">near_starts</ref><sp/>=<sp/>np.array([</highlight><highlight class="keyword">True</highlight><highlight class="normal">]*self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kindref="member">num_agents</ref>)</highlight></codeline>
-<codeline lineno="408"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kindref="member">toggle_list</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kindref="member">num_agents</ref>,))</highlight></codeline>
-<codeline lineno="409"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>poses:</highlight></codeline>
-<codeline lineno="410"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose_x<sp/>=<sp/>poses[</highlight><highlight class="stringliteral">&apos;x&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="411"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose_y<sp/>=<sp/>poses[</highlight><highlight class="stringliteral">&apos;y&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="412"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose_theta<sp/>=<sp/>poses[</highlight><highlight class="stringliteral">&apos;theta&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="413"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab5e2d4e41534916caaa9fa2a94979053" kindref="member">start_x</ref><sp/>=<sp/>pose_x[0]</highlight></codeline>
-<codeline lineno="414"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0959bbc593917d214789b9785a8f8b0c" kindref="member">start_y</ref><sp/>=<sp/>pose_y[0]</highlight></codeline>
-<codeline lineno="415"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref><sp/>=<sp/>pose_theta[0]</highlight></codeline>
-<codeline lineno="416"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a894820aea9c0b9c750f165798ab60ba0" kindref="member">start_xs</ref><sp/>=<sp/>np.array(pose_x)</highlight></codeline>
-<codeline lineno="417"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae28edcae46735a4e684140aa05fd099b" kindref="member">start_ys</ref><sp/>=<sp/>np.array(pose_y)</highlight></codeline>
-<codeline lineno="418"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a82dcb09e9adb3f73dc1c61a3e406dfe9" kindref="member">start_thetas</ref><sp/>=<sp/>np.array(pose_theta)</highlight></codeline>
-<codeline lineno="419"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a50b6912954290c4c5fb9165fc0103628" kindref="member">start_rot</ref><sp/>=<sp/>np.array([[np.cos(-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref>),<sp/>-np.sin(-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref>)],</highlight></codeline>
-<codeline lineno="420"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[np.sin(-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref>),<sp/>np.cos(-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref>)]])</highlight></codeline>
-<codeline lineno="421"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>create<sp/>reset<sp/>by<sp/>pose<sp/>proto</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="422"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto<sp/>=<sp/>sim_requests_pb2.SimRequest()</highlight></codeline>
-<codeline lineno="423"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto.type<sp/>=<sp/>4</highlight></codeline>
-<codeline lineno="424"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto.reset_bypose_request.num_cars<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kindref="member">num_agents</ref></highlight></codeline>
-<codeline lineno="425"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto.reset_bypose_request.ego_idx<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="426"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto.reset_bypose_request.car_x.extend(pose_x)</highlight></codeline>
-<codeline lineno="427"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto.reset_bypose_request.car_y.extend(pose_y)</highlight></codeline>
-<codeline lineno="428"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto.reset_bypose_request.car_theta.extend(pose_theta)</highlight></codeline>
-<codeline lineno="429"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_string<sp/>=<sp/>reset_request_proto.SerializeToString()</highlight></codeline>
-<codeline lineno="430"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kindref="member">socket</ref>.send(reset_request_string)</highlight></codeline>
-<codeline lineno="431"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="432"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>create<sp/>reset<sp/>proto</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="433"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab5e2d4e41534916caaa9fa2a94979053" kindref="member">start_x</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="434"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0959bbc593917d214789b9785a8f8b0c" kindref="member">start_y</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="435"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref><sp/>=<sp/>0.0</highlight></codeline>
-<codeline lineno="436"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a50b6912954290c4c5fb9165fc0103628" kindref="member">start_rot</ref><sp/>=<sp/>np.array([[np.cos(-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref>),<sp/>-np.sin(-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref>)],</highlight></codeline>
-<codeline lineno="437"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[np.sin(-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref>),<sp/>np.cos(-self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kindref="member">start_theta</ref>)]])</highlight></codeline>
-<codeline lineno="438"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto<sp/>=<sp/>sim_requests_pb2.SimRequest()</highlight></codeline>
-<codeline lineno="439"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto.type<sp/>=<sp/>2</highlight></codeline>
-<codeline lineno="440"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto.reset_request.num_cars<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kindref="member">num_agents</ref></highlight></codeline>
-<codeline lineno="441"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_proto.reset_request.ego_idx<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="442"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>serialize<sp/>reset<sp/>proto</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="443"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_request_string<sp/>=<sp/>reset_request_proto.SerializeToString()</highlight></codeline>
-<codeline lineno="444"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>send<sp/>reset<sp/>proto<sp/>string</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="445"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kindref="member">socket</ref>.send(reset_request_string)</highlight></codeline>
-<codeline lineno="446"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>receive<sp/>response<sp/>from<sp/>sim</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="447"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_response_string<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kindref="member">socket</ref>.recv()</highlight></codeline>
-<codeline lineno="448"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_response_proto<sp/>=<sp/>sim_requests_pb2.SimResponse()</highlight></codeline>
-<codeline lineno="449"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>reset_response_proto.ParseFromString(reset_response_string)</highlight></codeline>
-<codeline lineno="450"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>reset_response_proto.reset_resp.result:</highlight></codeline>
-<codeline lineno="451"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Gym<sp/>env<sp/>-<sp/>Reset<sp/>failed&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="452"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>failure<sp/>handling</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="453"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="454"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>return<sp/>with<sp/>gym<sp/>convention,<sp/>one<sp/>step?</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="455"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vels<sp/>=<sp/>[0.0]<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kindref="member">num_agents</ref></highlight></codeline>
-<codeline lineno="456"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>angs<sp/>=<sp/>[0.0]<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kindref="member">num_agents</ref></highlight></codeline>
-<codeline lineno="457"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>action<sp/>=<sp/>{</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">:<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae4babdba55642fab735d03c5672ed5ad" kindref="member">ego_idx</ref>,<sp/></highlight><highlight class="stringliteral">&apos;speed&apos;</highlight><highlight class="normal">:<sp/>vels,<sp/></highlight><highlight class="stringliteral">&apos;steer&apos;</highlight><highlight class="normal">:<sp/>angs}</highlight></codeline>
-<codeline lineno="458"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>Reset<sp/>done&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="459"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs,<sp/>reward,<sp/>done,<sp/>info<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a5613fa6844441b3e94e6c75d2d6235e7" kindref="member">step</ref>(action)</highlight></codeline>
-<codeline lineno="460"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>step<sp/>done<sp/>for<sp/>reset&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="461"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>obs,<sp/>reward,<sp/>done,<sp/>info</highlight></codeline>
-<codeline lineno="462"><highlight class="normal"></highlight></codeline>
-<codeline lineno="463"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1acb0331bb92b190cdd592060385726160" kindref="member">init_map</ref>(self,<sp/>map_path,<sp/>img_ext,<sp/>rgb,<sp/>flip):</highlight></codeline>
-<codeline lineno="464"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="465"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>init<sp/>a<sp/>map<sp/>for<sp/>the<sp/>gym<sp/>env</highlight></codeline>
-<codeline lineno="466"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path:<sp/>full<sp/>path<sp/>for<sp/>the<sp/>yaml,<sp/>same<sp/>as<sp/>ROS,<sp/>img<sp/>and<sp/>yaml<sp/>in<sp/>same<sp/>dir</highlight></codeline>
-<codeline lineno="467"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rgb:<sp/>map<sp/>grayscale<sp/>or<sp/>rgb</highlight></codeline>
-<codeline lineno="468"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>flip:<sp/>if<sp/>map<sp/>needs<sp/>flipping</highlight></codeline>
-<codeline lineno="469"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="470"><highlight class="normal"></highlight></codeline>
-<codeline lineno="471"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad417d87c39e8046ab2a66fd11d5910b8" kindref="member">map_path</ref><sp/>=<sp/>map_path</highlight></codeline>
-<codeline lineno="472"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>map_path.endswith(</highlight><highlight class="stringliteral">&apos;.yaml&apos;</highlight><highlight class="normal">):</highlight></codeline>
-<codeline lineno="473"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Gym<sp/>env<sp/>-<sp/>Please<sp/>use<sp/>a<sp/>yaml<sp/>file<sp/>for<sp/>map<sp/>initialization.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="474"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Exiting...&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="475"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sys.exit()</highlight></codeline>
-<codeline lineno="476"><highlight class="normal"></highlight></codeline>
-<codeline lineno="477"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>split<sp/>yaml<sp/>ext<sp/>name</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="478"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_img_path<sp/>=<sp/>os.path.splitext(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad417d87c39e8046ab2a66fd11d5910b8" kindref="member">map_path</ref>)[0]<sp/>+<sp/>img_ext</highlight></codeline>
-<codeline lineno="479"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref><sp/>=<sp/>np.array(Image.open(map_img_path).transpose(Image.FLIP_TOP_BOTTOM))</highlight></codeline>
-<codeline lineno="480"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref>.astype(np.float64)</highlight></codeline>
-<codeline lineno="481"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>flip:</highlight></codeline>
-<codeline lineno="482"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref>[::-1]</highlight></codeline>
-<codeline lineno="483"><highlight class="normal"></highlight></codeline>
-<codeline lineno="484"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>rgb:</highlight></codeline>
-<codeline lineno="485"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref><sp/>=<sp/>np.dot(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref>[...,<sp/>:3],<sp/>[0.29,<sp/>0.57,<sp/>0.14])</highlight></codeline>
-<codeline lineno="486"><highlight class="normal"></highlight></codeline>
-<codeline lineno="487"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>map<sp/>metadata</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="488"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a476dab30a81d8794d89f0bd85b3e7884" kindref="member">map_height</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref>.shape[0]</highlight></codeline>
-<codeline lineno="489"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2f4a85b1b83b203bc5549b6bff0bf2d1" kindref="member">map_width</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kindref="member">map_img</ref>.shape[1]</highlight></codeline>
-<codeline lineno="490"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a7456387ff1b9e6832dd205ed891bc750" kindref="member">free_thresh</ref><sp/>=<sp/>0.6<sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>double<sp/>check</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="491"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">with</highlight><highlight class="normal"><sp/>open(self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad417d87c39e8046ab2a66fd11d5910b8" kindref="member">map_path</ref>,<sp/></highlight><highlight class="stringliteral">&apos;r&apos;</highlight><highlight class="normal">)<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>yaml_stream:</highlight></codeline>
-<codeline lineno="492"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="493"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_metadata<sp/>=<sp/>yaml.safe_load(yaml_stream)</highlight></codeline>
-<codeline lineno="494"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1ec9b2bc2142334a2b8a2d028adcace8" kindref="member">map_resolution</ref><sp/>=<sp/>map_metadata[</highlight><highlight class="stringliteral">&apos;resolution&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="495"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2e1491609720111b7065748ad37e8512" kindref="member">origin</ref><sp/>=<sp/>map_metadata[</highlight><highlight class="stringliteral">&apos;origin&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="496"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal"><sp/>yaml.YAMLError<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>ex:</highlight></codeline>
-<codeline lineno="497"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(ex)</highlight></codeline>
-<codeline lineno="498"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a58740f3bf62a7bf263a13b47cdf5d797" kindref="member">map_inited</ref><sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="499"><highlight class="normal"></highlight></codeline>
-<codeline lineno="500"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>load<sp/>waypoints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="501"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.csv_path<sp/>=<sp/>os.path.splitext(self.map_path)[0]<sp/>+<sp/>&apos;.csv&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="502"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>with<sp/>open(self.csv_path)<sp/>as<sp/>f:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="503"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>self.waypoints<sp/>=<sp/>[tuple(line)<sp/>for<sp/>line<sp/>in<sp/>csv.reader(f)]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="504"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>#<sp/>waypoints<sp/>are<sp/>[x,<sp/>y,<sp/>speed,<sp/>theta]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="505"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>self.waypoints<sp/>=<sp/>np.array([(float(pt[0]),<sp/>float(pt[1]),<sp/>float(pt[2]),<sp/>float(pt[3]))<sp/>for<sp/>pt<sp/>in<sp/>self.waypoints])</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="506"><highlight class="normal"></highlight></codeline>
-<codeline lineno="507"><highlight class="normal"></highlight></codeline>
-<codeline lineno="508"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">render(self,<sp/>mode=&apos;human&apos;,<sp/>close=False):</highlight></codeline>
-<codeline lineno="509"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="510"><highlight class="normal"></highlight></codeline>
-<codeline lineno="511"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>def<sp/>get_min_dist(self,<sp/>position):</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="512"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>wpts<sp/>=<sp/>self.waypoints[:,<sp/>0:2]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="513"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/><sp/>#<sp/>=<sp/>position[0:2]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="514"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>nearest_point,<sp/>nearest_dist,<sp/>t,<sp/>i<sp/>=<sp/>self.nearest_point_on_trajectory(position,<sp/>wpts)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="515"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>#<sp/>speed<sp/>=<sp/>self.waypoints[i,<sp/>2]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="516"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>return<sp/>nearest_dist</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="517"><highlight class="normal"></highlight></codeline>
-<codeline lineno="518"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>def<sp/>nearest_point_on_trajectory(self,<sp/>point,<sp/>trajectory):</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="519"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>&apos;&apos;&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="520"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>Return<sp/>the<sp/>nearest<sp/>point<sp/>along<sp/>the<sp/>given<sp/>piecewise<sp/>linear<sp/>trajectory.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="521"><highlight class="normal"></highlight></codeline>
-<codeline lineno="522"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>Same<sp/>as<sp/>nearest_point_on_line_segment,<sp/>but<sp/>vectorized.<sp/>This<sp/>method<sp/>is<sp/>quite<sp/>fast,<sp/>time<sp/>constraints<sp/>should</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="523"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>not<sp/>be<sp/>an<sp/>issue<sp/>so<sp/>long<sp/>as<sp/>trajectories<sp/>are<sp/>not<sp/>insanely<sp/>long.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="524"><highlight class="normal"></highlight></codeline>
-<codeline lineno="525"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Order<sp/>of<sp/>magnitude:<sp/>trajectory<sp/>length:<sp/>1000<sp/>--&gt;<sp/>0.0002<sp/>second<sp/>computation<sp/>(5000fps)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="526"><highlight class="normal"></highlight></codeline>
-<codeline lineno="527"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>point:<sp/>size<sp/>2<sp/>numpy<sp/>array</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="528"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>trajectory:<sp/>Nx2<sp/>matrix<sp/>of<sp/>(x,y)<sp/>trajectory<sp/>waypoints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="529"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>-<sp/>these<sp/>must<sp/>be<sp/>unique.<sp/>If<sp/>they<sp/>are<sp/>not<sp/>unique,<sp/>a<sp/>divide<sp/>by<sp/>0<sp/>error<sp/>will<sp/>destroy<sp/>the<sp/>world</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="530"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>&apos;&apos;&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="531"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>diffs<sp/>=<sp/>trajectory[1:,:]<sp/>-<sp/>trajectory[:-1,:]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="532"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>l2s<sp/><sp/><sp/>=<sp/>diffs[:,0]**2<sp/>+<sp/>diffs[:,1]**2</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="533"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>#<sp/>this<sp/>is<sp/>equivalent<sp/>to<sp/>the<sp/>elementwise<sp/>dot<sp/>product</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="534"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>dots<sp/>=<sp/>np.sum((point<sp/>-<sp/>trajectory[:-1,:])<sp/>*<sp/>diffs[:,:],<sp/>axis=1)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="535"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>t<sp/>=<sp/>np.clip(dots<sp/>/<sp/>l2s,<sp/>0.0,<sp/>1.0)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="536"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>projections<sp/>=<sp/>trajectory[:-1,:]<sp/>+<sp/>(t*diffs.T).T</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="537"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>dists<sp/>=<sp/>np.linalg.norm(point<sp/>-<sp/>projections,axis=1)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="538"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>min_dist_segment<sp/>=<sp/>np.argmin(dists)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="539"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>return<sp/>projections[min_dist_segment],<sp/>dists[min_dist_segment],<sp/>t[min_dist_segment],<sp/>min_dist_segment</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="540"><highlight class="normal"></highlight></codeline>
-<codeline lineno="541"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">update_params(self,<sp/>mu,<sp/>h_cg,<sp/>l_r,<sp/>cs_f,<sp/>cs_r,<sp/>I_z,<sp/>mass,<sp/>exe_path,<sp/>double_finish=False):</highlight></codeline>
-<codeline lineno="542"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>if<sp/>not<sp/>self.sim_p<sp/>is<sp/>None:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="543"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>Sim<sp/>server<sp/>exists,<sp/>killing...&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="544"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>self.socket.send(b&apos;dead&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="545"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>self.sim_p.kill()</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="546"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>os.kill(self.sim_p.pid,<sp/>signal.SIGINT)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="547"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/><sp/><sp/><sp/><sp/>self.sim_p<sp/>=<sp/>None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="548"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;in<sp/>update<sp/>params&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="549"><highlight class="normal"></highlight></codeline>
-<codeline lineno="550"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.params<sp/>=<sp/>[mu,<sp/>h_cg,<sp/>l_r,<sp/>cs_f,<sp/>cs_r,<sp/>I_z,<sp/>mass]</highlight></codeline>
-<codeline lineno="551"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.params_set<sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="552"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.sim_p<sp/></highlight><highlight class="keywordflow">is</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="553"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;starting<sp/>ex<sp/>and<sp/>setting<sp/>map&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="554"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self._start_executable(exe_path)</highlight></codeline>
-<codeline lineno="555"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self._set_map()</highlight></codeline>
-<codeline lineno="556"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.double_finish<sp/>=<sp/>double_finish</highlight></codeline>
-<codeline lineno="557"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;before<sp/>creating<sp/>proto&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="558"><highlight class="normal"></highlight></codeline>
-<codeline lineno="559"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>create<sp/>update<sp/>proto</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="560"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_proto<sp/>=<sp/>sim_requests_pb2.SimRequest()</highlight></codeline>
-<codeline lineno="561"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_proto.type<sp/>=<sp/>3</highlight></codeline>
-<codeline lineno="562"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_proto.update_request.mu<sp/>=<sp/>mu</highlight></codeline>
-<codeline lineno="563"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_proto.update_request.h_cg<sp/>=<sp/>h_cg</highlight></codeline>
-<codeline lineno="564"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_proto.update_request.l_r<sp/>=<sp/>l_r</highlight></codeline>
-<codeline lineno="565"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_proto.update_request.cs_f<sp/>=<sp/>cs_f</highlight></codeline>
-<codeline lineno="566"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_proto.update_request.cs_r<sp/>=<sp/>cs_r</highlight></codeline>
-<codeline lineno="567"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_proto.update_request.I_z<sp/>=<sp/>I_z</highlight></codeline>
-<codeline lineno="568"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_proto.update_request.mass<sp/>=<sp/>mass</highlight></codeline>
-<codeline lineno="569"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>serialize<sp/>reset<sp/>proto</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="570"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_param_string<sp/>=<sp/>update_param_proto.SerializeToString()</highlight></codeline>
-<codeline lineno="571"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;proto<sp/>serialized&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="572"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>send<sp/>update<sp/>param<sp/>request</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="573"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.socket.send(update_param_string)</highlight></codeline>
-<codeline lineno="574"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>Update<sp/>param<sp/>request<sp/>sent.&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="575"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>receive<sp/>response</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="576"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_response_string<sp/>=<sp/>self.socket.recv()</highlight></codeline>
-<codeline lineno="577"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_response_proto<sp/>=<sp/>sim_requests_pb2.SimResponse()</highlight></codeline>
-<codeline lineno="578"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>update_response_proto.ParseFromString(update_response_string)</highlight></codeline>
-<codeline lineno="579"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>update_response_proto.update_resp.result:</highlight></codeline>
-<codeline lineno="580"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Gym<sp/>env<sp/>-<sp/>Update<sp/>param<sp/>failed&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="581"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="582"><highlight class="normal"></highlight></codeline>
-<codeline lineno="583"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Gym<sp/>env<sp/>-<sp/>params<sp/>updated.&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="584"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>start<sp/>executable</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="585"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self._start_executable()</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="586"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>call<sp/>set<sp/>map</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="587"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self._set_map()</highlight><highlight class="normal"></highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/f110__gym_2____init_____8py.xml b/docs/xml/f110__gym_2____init_____8py.xml
deleted file mode 100644
index 60c6cb38..00000000
--- a/docs/xml/f110__gym_2____init_____8py.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.1" xml:lang="en-US">
-  <compounddef id="f110__gym_2____init_____8py" kind="file" language="Python">
-    <compoundname>__init__.py</compoundname>
-    <innernamespace refid="namespacef110__gym">f110_gym</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="keyword">from</highlight><highlight class="normal"><sp/>gym.envs.registration<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>register</highlight></codeline>
-<codeline lineno="2"><highlight class="normal">register(</highlight></codeline>
-<codeline lineno="3"><highlight class="normal"><sp/><sp/><sp/><sp/>id=</highlight><highlight class="stringliteral">&apos;f110-v0&apos;</highlight><highlight class="normal">,</highlight></codeline>
-<codeline lineno="4"><highlight class="normal"><sp/><sp/><sp/><sp/>entry_point=</highlight><highlight class="stringliteral">&apos;f110_gym.envs:F110Env&apos;</highlight><highlight class="normal">,</highlight></codeline>
-<codeline lineno="5"><highlight class="normal"><sp/><sp/><sp/><sp/>)</highlight></codeline>
-    </programlisting>
-    <location file="/home/f1tenth-eval/f1tenth_gym/gym/f110_gym/__init__.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/f110__gym_2envs_2____init_____8py.xml b/docs/xml/f110__gym_2envs_2____init_____8py.xml
deleted file mode 100644
index b4c45408..00000000
--- a/docs/xml/f110__gym_2envs_2____init_____8py.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.1" xml:lang="en-US">
-  <compounddef id="f110__gym_2envs_2____init_____8py" kind="file" language="Python">
-    <compoundname>__init__.py</compoundname>
-    <innernamespace refid="namespacef110__gym_1_1envs">f110_gym::envs</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1f110__env" kindref="compound">f110_gym.envs.f110_env</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>F110Env</highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1dynamic__models" kindref="compound">f110_gym.envs.dynamic_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1laser__models" kindref="compound">f110_gym.envs.laser_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1base__classes" kindref="compound">f110_gym.envs.base_classes</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1collision__models" kindref="compound">f110_gym.envs.collision_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-    </programlisting>
-    <location file="/home/f1tenth-eval/f1tenth_gym/gym/f110_gym/envs/__init__.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/f110__gym_2unittest_2____init_____8py.xml b/docs/xml/f110__gym_2unittest_2____init_____8py.xml
deleted file mode 100644
index 43b2b593..00000000
--- a/docs/xml/f110__gym_2unittest_2____init_____8py.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.1" xml:lang="en-US">
-  <compounddef id="f110__gym_2unittest_2____init_____8py" kind="file" language="Python">
-    <compoundname>__init__.py</compoundname>
-    <innernamespace refid="namespacef110__gym_1_1unittest">f110_gym::unittest</innernamespace>
-    <innernamespace refid="namespacegym_1_1envs_1_1unittest_1_1scan__sim">gym::envs::unittest::scan_sim</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacegym_1_1envs_1_1unittest_1_1scan__sim" kindref="compound">gym.envs.unittest.scan_sim</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-    </programlisting>
-    <location file="/home/f1tenth-eval/f1tenth_gym/gym/f110_gym/unittest/__init__.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/index.xml b/docs/xml/index.xml
deleted file mode 100644
index ac873c31..00000000
--- a/docs/xml/index.xml
+++ /dev/null
@@ -1,572 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygenindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="index.xsd" version="1.8.17">
-  <compound refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app" kind="class"><name>f110_gym::unittest::pyglet_test_camera::App</name>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1aaca4f571369fc95e45355634d41fc24e" kind="variable"><name>left</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a9c3fdc6ea9bbe0407668091c4b6effb5" kind="variable"><name>right</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a155af5e767867bdf910d8b0936219b5a" kind="variable"><name>bottom</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2145d5c781e3f33fefd7b46af2fadd69" kind="variable"><name>top</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" kind="variable"><name>zoom_level</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1af92e414bc48f782207e5891ea82e3ad1" kind="variable"><name>zoomed_width</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2f88138801a909d8826f61792745409f" kind="variable"><name>zoomed_height</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a199a531d847f94eb9d32b481c2af26e1" kind="function"><name>__init__</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1abadceb7d7c110cfa99df741b6ccae7e0" kind="function"><name>init_gl</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a4d55c63110f9bd78721a57e88e199cd8" kind="function"><name>on_resize</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1ab20811f9348c1eb9beb45c95e6b1ba42" kind="function"><name>on_mouse_drag</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a3846658fe03460fa2f057e5b954fc28f" kind="function"><name>on_mouse_scroll</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1abaf8b849008238cb0c17901b87329a71" kind="function"><name>on_draw</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a4478fc4a6666cf2d5cb5a3d574250404" kind="function"><name>run</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" kind="class"><name>f110_gym::unittest::pyglet_test::Camera</name>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kind="variable"><name>_window</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kind="variable"><name>_zoom</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a81dae02fbeac037bfcba9afeeac9a0ca" kind="variable"><name>scroll_speed</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa8efeba81038cc57db534857a61b0d4b" kind="variable"><name>max_zoom</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa5e9b9a6cca61ed9f997cd23ed1ea8b6" kind="variable"><name>min_zoom</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" kind="variable"><name>offset_x</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" kind="variable"><name>offset_y</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa972fc123abe2bc9f8dd5bdba0025f20" kind="function"><name>__init__</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1ab01149f5d7b76ca39aa8c2604c8a65db" kind="function"><name>zoom</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a6f0bedfc6f5801b398d5ce537d70c059" kind="function"><name>zoom</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a3d2948dc5b1a9d2a6c597a2850ac989b" kind="function"><name>position</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1ac8e5a2d90df8cd68463746be6e65bee8" kind="function"><name>position</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aab35e83f0748c949b8e3a8414097d193" kind="function"><name>move</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a1b32a1178f97029e2833a1f127a2c114" kind="function"><name>begin</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a30b46cfaa38e4956b06bfe9e98c3cbe3" kind="function"><name>end</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a7823f2901412f9075d7de211c14ad534" kind="function"><name>__enter__</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a05542a21a9fa4adc9bcac8c77d37c2ad" kind="function"><name>__exit__</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera" kind="class"><name>f110_gym::unittest::pyglet_test::CenteredCamera</name>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera_1ae864ffed52c4415558b3bd15ad42c87a" kind="function"><name>begin</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera_1a37149e6bf7b5e551f38201696d01794e" kind="function"><name>end</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests" kind="class"><name>f110_gym::unittest::collision_checks::CollisionTests</name>
-    <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a0585073942d116dea495e02c4b79f7f0" kind="variable"><name>vertices1</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a407fd8ac2cb6e79b84590434fc6d7c6d" kind="variable"><name>length</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a4b7f88b6f9a80c8bef02a1856ac068de" kind="variable"><name>width</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1acf1126ffde5105c455d850ff5286e4b7" kind="function"><name>setUp</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a8de52029859d1c7731e5683d23ccf007" kind="function"><name>test_get_vert</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1acc104fececdc2724a5c5e8998100b633" kind="function"><name>test_get_vert_fps</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1a8ea861cfb3721bfa636ada8787cc3b85" kind="function"><name>test_random_collision</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests_1ab764a2cbf50b5cab461c5d6d017856b9" kind="function"><name>test_fps</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests" kind="class"><name>f110_gym::envs::collision_models::CollisionTests</name>
-    <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a8ec590c2d0ff249236b6167903b177e4" kind="variable"><name>vertices1</name></member>
-    <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a9cbff98529b08cc1cd52b56ba407e55e" kind="variable"><name>length</name></member>
-    <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a00391f07693559253e82dbbe849da73e" kind="variable"><name>width</name></member>
-    <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a4aa54131afe81f4a6790930e7d5a639e" kind="function"><name>setUp</name></member>
-    <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a3137d9576fd99c1f56980a6cc61dc58f" kind="function"><name>test_get_vert</name></member>
-    <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a588513dfce9c9c7843f2aef501e993f1" kind="function"><name>test_get_vert_fps</name></member>
-    <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a484c3bfdab68d8ff8d298191a0cfdd4b" kind="function"><name>test_random_collision</name></member>
-    <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1af59482dbded9f1f915e666553316855d" kind="function"><name>test_multiple_collisions</name></member>
-    <member refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests_1a95425d03ea60792f2e523f3838ee9928" kind="function"><name>test_fps</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test" kind="class"><name>f110_gym::envs::dynamic_models::DynamicsTest</name>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ac283c8565d5702a36fe2aef5ac801ec6" kind="variable"><name>mu</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1ace0f724e5d6de2b84ad6f26aa1f825de" kind="variable"><name>C_Sf</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef6d0ca5f09db415133dd4fefe04a61" kind="variable"><name>C_Sr</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a46f6b69e0406f1cb669efe188354e88b" kind="variable"><name>lf</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8c72ad994a42ae128b4b3902b8963ce7" kind="variable"><name>lr</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3d565e1337d599401b34e4c6473d07e4" kind="variable"><name>h</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af07025dc1443d5b524c54cabcda24092" kind="variable"><name>m</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a80b2b5e9fd9772596b8c0441ac3501a2" kind="variable"><name>I</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a703d1a956eba2dc93e5db243995105e6" kind="variable"><name>s_min</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8269ff10bd35d86f1a02190ab39fb897" kind="variable"><name>s_max</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a17ce4b00ab832e2cccf565796aa77d56" kind="variable"><name>sv_min</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abce143f8803056ea016677f51bc7179a" kind="variable"><name>sv_max</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee44ef320e9d70ffa4d0966cec9962ef" kind="variable"><name>v_min</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aa6c8d413765dd13de77f1dcd1038d759" kind="variable"><name>v_max</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aeb89635ca78746bfba5025b7e9890be4" kind="variable"><name>v_switch</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1af37b667196efbbced8b042c53c159641" kind="variable"><name>a_max</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a5ef057974425be84e5672fec6367237b" kind="function"><name>setUp</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a8d72833c7e5cf3717a4326ee6809c527" kind="function"><name>test_derivatives</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a00e95bc713471556c1d5f62c70d50f78" kind="function"><name>test_zeroinit_roll</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1aee6c565405df1ec196e88d5ca42238cd" kind="function"><name>test_zeroinit_dec</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1abfdac96452f8e54e0233b68626cf33bf" kind="function"><name>test_zeroinit_acc</name></member>
-    <member refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test_1a3e47a38cf845b941eea719550bcc1994" kind="function"><name>test_zeroinit_rollleft</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test" kind="class"><name>f110_gym::unittest::dynamics_test::DynamicsTest</name>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a48626036e76ba11fd936f4de26bf6ce0" kind="variable"><name>mu</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a74cd8e77b722fb8d92a392a4fc2dcbc7" kind="variable"><name>C_Sf</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d3bbaee07094af4095dfd258cebd10d" kind="variable"><name>C_Sr</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7c0f434a69248caa58b34a50dbca3f2e" kind="variable"><name>lf</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac9ac96fd528006d18d309b0a49c3b8b9" kind="variable"><name>lr</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a779b25a77fc53165bd39448ece8d9f7c" kind="variable"><name>h</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90efa4ba6c24eb526afa67eceb153be2" kind="variable"><name>m</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aebb331386dd83145c82d5bedf1cae5b1" kind="variable"><name>I</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ab762929e3e5bb2db0c153a203ffe5273" kind="variable"><name>s_min</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a8089d918c83d2631fbd7550557049956" kind="variable"><name>s_max</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a78c38627c81a0da299fcec08c600bfd1" kind="variable"><name>sv_min</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ac16553e55f0c5e695994719ce1381b5b" kind="variable"><name>sv_max</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1adadbd3f491f56eaee3da91244cf8cc06" kind="variable"><name>v_min</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a906eb31597c8374bb916f6644780dc0c" kind="variable"><name>v_max</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a6d2c11940d9e0529f4ecba00d92fb7de" kind="variable"><name>v_switch</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a90bf691612ff54dc56c54e03fe8a27f8" kind="variable"><name>a_max</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1ae9a07469d0654888251d3bf6e76b6b49" kind="function"><name>setUp</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a084bad82c8b5d2879bcdd84ff4ddfbcb" kind="function"><name>test_derivatives</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a2119ee12155d35d32dfdff6ef9948635" kind="function"><name>test_zeroinit_roll</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a7be24bdc75f206643e35081eae280120" kind="function"><name>test_zeroinit_dec</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1aaf4fa412b0c16cb6bc89dd58b36d8e44" kind="function"><name>test_zeroinit_acc</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test_1a386d5445884c46ecec8205ada9a3a185" kind="function"><name>test_zeroinit_rollleft</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer" kind="class"><name>f110_gym::envs::rendering::EnvRenderer</name>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10e0980201fca6f3392fc5c333a6ad99" kind="variable"><name>left</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1acb665a6f4d150da3b2159b1cd86f4117" kind="variable"><name>right</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ab6f1d3bbdf185a2489a9c444413e72b6" kind="variable"><name>bottom</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a6e8e1a6e3f6c1f681f0fcbe6c04ffc27" kind="variable"><name>top</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kind="variable"><name>zoom_level</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1af71d3702c2e9fa5e8e109111b4a337ce" kind="variable"><name>zoomed_width</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a769be9782b9452fd8c3c1984985e419b" kind="variable"><name>zoomed_height</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0f6f622b6ffe98f7ee038c2ce72af276" kind="variable"><name>batch</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae423459dd9ee2da53cf7929e4591e366" kind="variable"><name>map_points</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a227e60c781a0e50f827ea2f4f11a3f85" kind="variable"><name>poses</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a8a458f2ce6a733888d1a6bfaab243f31" kind="variable"><name>vertices</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad3328a46ae8641dc60b24d53219ffcb3" kind="variable"><name>score_label</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a2ecadd7a3ea2a4525bd7b0b4d362db81" kind="variable"><name>fps_display</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad2c50c6e7d890771c7173768b6eef5c2" kind="variable"><name>ego_idx</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a4d90f610c36a7c83b054a2233276f36a" kind="variable"><name>cars</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a1b24abdbb4d13744255ebfdb3d509354" kind="function"><name>__init__</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae9c12c08c2f799504b6390b2d0ffda3f" kind="function"><name>update_map</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ac8bbef5b8910515dd18c8a6624730898" kind="function"><name>on_resize</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a557710400bb370a7509dbc17658eadd8" kind="function"><name>on_mouse_drag</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10f7c38d921015b5574ba0c858a245bb" kind="function"><name>on_mouse_scroll</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a05cb0faf5893e3cbed58cf20d0997bf7" kind="function"><name>on_close</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0cbcdabef2cdda765d6721ca796ecfd0" kind="function"><name>on_draw</name></member>
-    <member refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a1b9284f2e59c9000f10bd18e1ec6a9b3" kind="function"><name>update_obs</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env" kind="class"><name>f110_gym::envs::f110_env_backup::F110Env</name>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a33621c905b3ce566450c77b923ef79ee" kind="variable"><name>metadata</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2efb58b38020d194c865ac289009ba4a" kind="variable"><name>params_set</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a58740f3bf62a7bf263a13b47cdf5d797" kind="variable"><name>map_inited</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9e292f161315ed1a0f3c3886bf49ded9" kind="variable"><name>params</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac6a6a423017697870d6f1c6828325336" kind="variable"><name>num_agents</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a89f5296784405aeaa52325a8dac4420e" kind="variable"><name>timestep</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad417d87c39e8046ab2a66fd11d5910b8" kind="variable"><name>map_path</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a52b5d0f196c9cd9e34464d3cf4cf1f34" kind="variable"><name>map_img</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae4babdba55642fab735d03c5672ed5ad" kind="variable"><name>ego_idx</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae2047312369a5e949b09e1c5b067412f" kind="variable"><name>timeout</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1af3d3f69953f78a141b98f3d738a15530" kind="variable"><name>start_thresh</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0a9dbd46041d336a1d6b28ea01418d91" kind="variable"><name>x</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2fd95411b8a24759642863111ed0f513" kind="variable"><name>y</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1dc4f5c9ab99353e2c364d42daf5a180" kind="variable"><name>theta</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a68efc45c0a66e4652697146e18c8a570" kind="variable"><name>in_collision</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a88dd2fd1f2dc0ef251a079d3e74622fe" kind="variable"><name>collision_angle</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1c3ac639a2b0773d99043c2b911970d7" kind="variable"><name>near_start</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ac19a932655f1f9a6e8065df37bbe9f80" kind="variable"><name>num_toggles</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa7af900e93ae4b180e89e7d48e242033" kind="variable"><name>lap_times</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a3eb59d52fbc4d767e2c7ed0c64b8650f" kind="variable"><name>lap_counts</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a476dab30a81d8794d89f0bd85b3e7884" kind="variable"><name>map_height</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2f4a85b1b83b203bc5549b6bff0bf2d1" kind="variable"><name>map_width</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1ec9b2bc2142334a2b8a2d028adcace8" kind="variable"><name>map_resolution</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a7456387ff1b9e6832dd205ed891bc750" kind="variable"><name>free_thresh</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2e1491609720111b7065748ad37e8512" kind="variable"><name>origin</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0e6a85d0de7165369ce8fcd18be9d885" kind="variable"><name>port</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aa3367f6570455c5311e075b4b9f91c56" kind="variable"><name>context</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afc0972d462163211e9b9e47a2844e64f" kind="variable"><name>socket</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a23d4e3c74f19290571ce06f57c68de01" kind="variable"><name>sim_p</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aeb9374dba01e21d5fd618d0736573f77" kind="variable"><name>all_x</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1aebf4ff49efe573bdbe29b190528256f1" kind="variable"><name>all_y</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab629b0d75ade059476f2bf4237798101" kind="variable"><name>current_time</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a34545b59df83e520f7c3031106c5c954" kind="variable"><name>collision_angles</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab224af4cddca309ab854b9c26f40868f" kind="variable"><name>near_starts</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad6e649f8338d89746244b9e6c4bce71b" kind="variable"><name>toggle_list</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab5e2d4e41534916caaa9fa2a94979053" kind="variable"><name>start_x</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0959bbc593917d214789b9785a8f8b0c" kind="variable"><name>start_y</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a6f808319f37385f5f8f8e9198ad208f6" kind="variable"><name>start_theta</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a894820aea9c0b9c750f165798ab60ba0" kind="variable"><name>start_xs</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ae28edcae46735a4e684140aa05fd099b" kind="variable"><name>start_ys</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a82dcb09e9adb3f73dc1c61a3e406dfe9" kind="variable"><name>start_thetas</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a50b6912954290c4c5fb9165fc0103628" kind="variable"><name>start_rot</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a59e7a0edc30712fb482c246e01a72368" kind="variable"><name>double_finish</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a20cf7bc892fe043174eb7c656b49e54d" kind="function"><name>__init__</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ab53974d19ae639eaa8d922db303d21c4" kind="function"><name>__del__</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a5613fa6844441b3e94e6c75d2d6235e7" kind="function"><name>step</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1acc334d94e1a842ed26b8820a9730566e" kind="function"><name>reset</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1acb0331bb92b190cdd592060385726160" kind="function"><name>init_map</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1ad8af92604458991c85e4714ea1db581d" kind="function"><name>render</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1afd60c71c7b15c805310a4ac3510d70d2" kind="function"><name>update_params</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a9d9675c2f9268fc77a8521ffdcf09b07" kind="function"><name>_start_executable</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a21067a7283751af26448552a976a9c71" kind="function"><name>_set_map</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a0fd67b8765be08da96125421849d3144" kind="function"><name>_check_done</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a1d022634e984cb72c21b0a4b097dd4bc" kind="function"><name>_check_passed</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a2bf2e9b454b5088eee0cacfaf806ef5a" kind="function"><name>_update_state</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env_1a8c9a1d3421c51841565bee8a1f9a464c" kind="function"><name>_raycast_opponents</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env" kind="class"><name>f110_gym::envs::f110_env::F110Env</name>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aee31e18855f6a73aa5051d7e4d693aa8" kind="variable"><name>metadata</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbb8c9dad98bbad696936dec9633939" kind="variable"><name>map_name</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a584bf97317bbe8d38d8e0136753ded60" kind="variable"><name>map_path</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a147cde741845fcded400365a9d495ce3" kind="variable"><name>map_ext</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab1c1a4b9cb08b685c597b1d40402a479" kind="variable"><name>params</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a4eefdcfd9a5f09eedfad9b27bf6ce45e" kind="variable"><name>num_agents</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1abdc8699b0f8fb2412efef070affa8ccb" kind="variable"><name>timestep</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aebce8c6c42f258d8c561da27dde0c01b" kind="variable"><name>ego_idx</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a2496c3576ebb86df560fb09004583527" kind="variable"><name>start_thresh</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae83c6ed936fe9e1a542be6b2eb76395c" kind="variable"><name>poses_x</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a03432e028beff28596178dc9236fc4e8" kind="variable"><name>poses_y</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a3ffb6fa7e705c18d5316444488cb649b" kind="variable"><name>poses_theta</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ada1a8cc0681447645b811448f516885a" kind="variable"><name>collisions</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc0a35ce8ff234279acffc66092d72a1" kind="variable"><name>near_start</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6c19f5c3146fa6be496639ab4ed0d63f" kind="variable"><name>num_toggles</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a83f64f867c24f12d9ad3e14745e23aa1" kind="variable"><name>lap_times</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a0b2cc3bd151748987c6e23f34f16d1a2" kind="variable"><name>lap_counts</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6539fde56adcb5755acfe1c86251f193" kind="variable"><name>current_time</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a24602450e500c08f3190672922de25de" kind="variable"><name>near_starts</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a45f4f52ca91b4efa14118d3718213eb6" kind="variable"><name>toggle_list</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae867a64de7fea1f98cb6db6e9ff9d4ed" kind="variable"><name>start_xs</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a814ae4233f0c96728a9a5f47f5add06e" kind="variable"><name>start_ys</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a064dc8d975b3da3e0ac29f73b626b6aa" kind="variable"><name>start_thetas</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a613e153a969b6e3df72893eed2da061f" kind="variable"><name>start_rot</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aa8a35ba4818fe79c1e2c6f9058a31dde" kind="variable"><name>sim</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1aaa2e9426a3f641b295203f9166c33fac" kind="variable"><name>renderer</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ad293c8b43306e47c4430b16b9f7b8d8c" kind="variable"><name>current_obs</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a6fbba07db5d7d79bdd27f3487192e6e2" kind="function"><name>__init__</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ae193b905b3d1c213ec4324283ebdf201" kind="function"><name>__del__</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a0df471828ba39c5228bf5c814a5d0e6e" kind="function"><name>step</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab213d62cea216bbd82d0f6d7061452fb" kind="function"><name>reset</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1afc210c3941c1548692c75c961ad443df" kind="function"><name>update_map</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a79d419bbf2ff0e377d808e4a8f41cc81" kind="function"><name>update_params</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ab8e76450e63ef88c1ac9721f717fa375" kind="function"><name>render</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1a1422010e34cb61bad1e3321c2df7e58d" kind="function"><name>_check_done</name></member>
-    <member refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env_1ada4d88e20d24bdddc03e5acfe1be325a" kind="function"><name>_update_state</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car" kind="class"><name>f110_gym::envs::base_classes::RaceCar</name>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af3ba3709a5dfd62c730a8896126a2539" kind="variable"><name>params</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5408c25f5507645e351b33c7b93d09e9" kind="variable"><name>is_ego</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a507e48bfae2cd153ce988acfa915f4e3" kind="variable"><name>time_step</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a32283ca467927cb92fd4cebaf4572788" kind="variable"><name>num_beams</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1ab17edc5d7143043b17160ce593da0e05" kind="variable"><name>fov</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aea2c21a52410444a2502ee4e7d370bad" kind="variable"><name>state</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a3dc163d182be2760a4f8322417fd2332" kind="variable"><name>opp_poses</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5f298f55e8dc14fb39e5145699e90bfa" kind="variable"><name>accel</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5a1dbcba00b5c54afc700873df015eba" kind="variable"><name>steer_angle_vel</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a462d1ce0e070187aba97a24d75961884" kind="variable"><name>steer_buffer</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a51405046f30a27487241455cb51481ff" kind="variable"><name>steer_buffer_size</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a04ac46193f2706b71aa6ccc616484a1b" kind="variable"><name>in_collision</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a5eb8a1fa8d27dfccd008573e2d720c44" kind="variable"><name>ttc_thresh</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a35674ca4c4a0eda359249216bee094b3" kind="variable"><name>scan_simulator</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1aeaedd3e39c14a7904e8417ad264b3168" kind="variable"><name>current_scan</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a47e2229884b30c3640f75cc46a4b1fe9" kind="variable"><name>cosines</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7a416feebdc5bf3289495877a722ac5e" kind="variable"><name>scan_angles</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a45934ce2c731e21cee3b3890d5713a1e" kind="variable"><name>side_distances</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1af342754a877c42b3828a03b6425801d4" kind="function"><name>__init__</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a6ab5b5dd420b182b5156ee9566c03411" kind="function"><name>update_params</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a2a60c9ee34f2f09fb0a7e5cc7b287897" kind="function"><name>set_map</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a0fa587dc3c1a12c9217f0bd093c1bc08" kind="function"><name>reset</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a7d15e74a1b82646675d60ce02cdce6b5" kind="function"><name>ray_cast_agents</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a4577a30fd8879de7df1d0ace7702f450" kind="function"><name>check_ttc</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1ae12c14c1353e6aab2f72036593d85518" kind="function"><name>update_pose</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a4800c5ac90ba93b79a0338e5e34ead43" kind="function"><name>update_opp_poses</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car_1a356ec05a0a0c056f4d43f5fb0451c83d" kind="function"><name>update_scan</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" kind="class"><name>f110_gym::unittest::scan_sim::ScanSimulator2D</name>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab651a44dfee70e7f2c2c8389b95e6e51" kind="variable"><name>num_beams</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a675555c29ace0ea5ddea92835965e654" kind="variable"><name>fov</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af5f188b7150482f5518461af89d61fe7" kind="variable"><name>std_dev</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ae0b3e8aec78d765f2c64fc274b9e447f" kind="variable"><name>eps</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1aad699977c807e3ad150b6dac8b2bb1a0" kind="variable"><name>theta_dis</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a510e60d159e716bcd62b54dac8a69066" kind="variable"><name>max_range</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7cf918616a14c3d8f76bc359cf2f1c4c" kind="variable"><name>angle_increment</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a52a218f72d96e62281f00e3aa01f6616" kind="variable"><name>theta_index_increment</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a6fb0a8e58e42af2934c5f3e35ab3488e" kind="variable"><name>orig_c</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac1a4dcaf191c8308accbcf86999efd5c" kind="variable"><name>orig_s</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a49263002630bb21764217caa6c3314b7" kind="variable"><name>orig_x</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab6b56af3b1396d900b097d4e0463941f" kind="variable"><name>orig_y</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7b15deec5d81ddfa0c6297523cdfc295" kind="variable"><name>map_height</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac5acff270a2a66d20a8bb514001cc3c4" kind="variable"><name>map_width</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a935128be3649ba7d230f63bf7480bfa1" kind="variable"><name>map_resolution</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a184ddbfb8a5aaebb9c523625f716ad7c" kind="variable"><name>dt</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1afcb7de24911c98dd85473247c7d4af17" kind="variable"><name>rng</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af2c50f973462f4717c9c02d6c8d47004" kind="variable"><name>sines</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a578ecb22495b2d227517b8a54a505c7e" kind="variable"><name>cosines</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kind="variable"><name>map_img</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a62fb5e7c6a7060685208643a265aaa95" kind="variable"><name>origin</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1aaa079c96c4018da2b7e80388bcd2d417" kind="function"><name>__init__</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a00925f5100ae8b2e556154e8935ea86e" kind="function"><name>set_map</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a038a0fc7e42df7827c175fdb3755f2c4" kind="function"><name>scan</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a492d1949d030fb6b8665f399db5cdb4d" kind="function"><name>get_increment</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" kind="class"><name>f110_gym::envs::laser_models::ScanSimulator2D</name>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a8fd8d9f11c319090584c221e51aa4975" kind="variable"><name>num_beams</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae57ad1092f12be1967de4853eca1327d" kind="variable"><name>fov</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a2aa400b42babfa82f677356aaa16a0f4" kind="variable"><name>std_dev</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a02bf0c833e93628643a20cceeb33b029" kind="variable"><name>eps</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af21e0a0ddd2fc95ec4291db6b33cd591" kind="variable"><name>theta_dis</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af08e1ef6b6397c51fdd3e612dceb17b5" kind="variable"><name>max_range</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a68ab73d8b055703de7c4eb33ec54520a" kind="variable"><name>angle_increment</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aabde525512f31433f532639175f50ba3" kind="variable"><name>theta_index_increment</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12a635318c521153364d75b103905673" kind="variable"><name>orig_c</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedb545195be8c54364e38ccf0c0b3d00" kind="variable"><name>orig_s</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aecd0f30707bb8c82f59ae48ae2a478c2" kind="variable"><name>orig_x</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a03e555b505b745f98dfd8a5cc4e1d013" kind="variable"><name>orig_y</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae2c136fdda428bed3de1f7ab30cda72c" kind="variable"><name>map_height</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a53beebf974cdf3cb04dac5e4311b2f36" kind="variable"><name>map_width</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a11d13f00e6d8a08d7b758f420ff464c5" kind="variable"><name>map_resolution</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a617e6b987673100484c5fdb0c17c9848" kind="variable"><name>dt</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a6a2a4cc31c05bb623699e24df56d8989" kind="variable"><name>rng</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a76ce07e27a1f3efecae222b25bfd3c98" kind="variable"><name>sines</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedc4121c126a5bcda9b5f321cb679208" kind="variable"><name>cosines</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kind="variable"><name>map_img</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a301f79d5db56a5c5eeb44f33ac3d0b7d" kind="variable"><name>origin</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a006ba0ddc5d9d6d2f2b74e945ef61f2c" kind="function"><name>__init__</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a989dd691fd4c08d0f18d6c241862d03c" kind="function"><name>set_map</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12c4b2f39bda5dd3a1ea14e70e4370cc" kind="function"><name>scan</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ab11345c77e843234e6a71f3f0293d4f5" kind="function"><name>get_increment</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests" kind="class"><name>f110_gym::unittest::scan_sim::ScanTests</name>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" kind="variable"><name>num_beams</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" kind="variable"><name>fov</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" kind="variable"><name>num_test</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1ad63cebbd6245dfa62dd57168287598b1" kind="variable"><name>test_poses</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a44186810ed5ab4fecb230b7a842d294a" kind="variable"><name>berlin_scan</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a9c595846d38b4691fd34352eea08cdcf" kind="variable"><name>skirk_scan</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a24b9cbdb8f7d0ed8cea83067baf28c5e" kind="function"><name>setUp</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1adef88a30b7aa6e2f3daa6ffecd979562" kind="function"><name>test_map_berlin</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1aa76985ccd5313eaf5c8e7cc5892ca155" kind="function"><name>test_map_skirk</name></member>
-    <member refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a1133ea3a82cffacc03e22a273d6e8cae" kind="function"><name>test_fps</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests" kind="class"><name>f110_gym::envs::laser_models::ScanTests</name>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" kind="variable"><name>num_beams</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" kind="variable"><name>fov</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" kind="variable"><name>num_test</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a31eb3b8ba28e16af8b39bd39c2254090" kind="variable"><name>test_poses</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a2958e581294bc423f58a1df94a030b9e" kind="variable"><name>berlin_scan</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1abfb81eedfc585622f28ba8f81443af80" kind="variable"><name>skirk_scan</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a55ab0dc9841fe835d01b87b9b0fce3c0" kind="function"><name>setUp</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a54056154757449495862bb07f7fd4119" kind="function"><name>test_map_berlin</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac7855c2d63a63159b19ecc01f92194bc" kind="function"><name>test_map_skirk</name></member>
-    <member refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a38ed452c3c86c8812726a8524d1eb034" kind="function"><name>test_fps</name></member>
-  </compound>
-  <compound refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator" kind="class"><name>f110_gym::envs::base_classes::Simulator</name>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ad99c964e6df64e8264ab729be118aa8c" kind="variable"><name>num_agents</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1aab539724143dd42fca12ec1d6043c984" kind="variable"><name>time_step</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a08fd902fa242da70c1bcf34a1fe80802" kind="variable"><name>ego_idx</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a877c852c32ff108df0ff6bfa2ab3bf6f" kind="variable"><name>params</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ade120757dde31d2130e4b0f9b01e3a7d" kind="variable"><name>agent_poses</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ae665b35ec7d9ced7de789a02cafdd566" kind="variable"><name>agents</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a2266104910535f06f31c1212e62fde8b" kind="variable"><name>collisions</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a5d716c6ccd3b649f407560f28bdcd84d" kind="variable"><name>collision_idx</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ab865873c6f0afa3741add4f39e5fd872" kind="function"><name>__init__</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a0a566351f20a16b7545fcd20ca9adb57" kind="function"><name>set_map</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a974c58957a6b14582149d704ef28a68c" kind="function"><name>update_params</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1a7f32c68e14bf47447ce9599c8db21236" kind="function"><name>check_collision</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1af1fb175457362d7419301180b1b3b4c6" kind="function"><name>step</name></member>
-    <member refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator_1ab63c655ff0cd1bb2accce7be9fff69e8" kind="function"><name>reset</name></member>
-  </compound>
-  <compound refid="namespacef110__gym" kind="namespace"><name>f110_gym</name>
-    <member refid="____init_____8py_1a053265813f14380af323db53967da5f4" kind="variable"><name>id</name></member>
-    <member refid="____init_____8py_1a5a9b8348f0cb72c71b742a16e2bd2c4e" kind="variable"><name>entry_point</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1envs" kind="namespace"><name>f110_gym::envs</name>
-  </compound>
-  <compound refid="namespacef110__gym_1_1envs_1_1base__classes" kind="namespace"><name>f110_gym::envs::base_classes</name>
-  </compound>
-  <compound refid="namespacef110__gym_1_1envs_1_1collision__models" kind="namespace"><name>f110_gym::envs::collision_models</name>
-    <member refid="collision__models_8py_1a3f4abf61f205b8557a851b8dc0c28f80" kind="variable"><name>cache</name></member>
-    <member refid="collision__models_8py_1a7f066238cdec7f7f53b10bcb26647752" kind="function"><name>perpendicular</name></member>
-    <member refid="collision__models_8py_1a8229a841f9f647231dad0a56b8b0c303" kind="function"><name>tripleProduct</name></member>
-    <member refid="collision__models_8py_1ab37064c328f60306b8c34aeb1360f684" kind="function"><name>avgPoint</name></member>
-    <member refid="collision__models_8py_1a2f317029afdf11c1bd71062939fcabac" kind="function"><name>indexOfFurthestPoint</name></member>
-    <member refid="collision__models_8py_1a03c077ea056df0f1ab45ca392fb79a54" kind="function"><name>support</name></member>
-    <member refid="collision__models_8py_1a653f859844d65a7ae27a6ae46631fea7" kind="function"><name>collision</name></member>
-    <member refid="collision__models_8py_1aa40d5d95afb6a98d4c2766acbf174adb" kind="function"><name>collision_multiple</name></member>
-    <member refid="collision__models_8py_1a246a31b398ede8d389c1968899be94ac" kind="function"><name>get_trmtx</name></member>
-    <member refid="collision__models_8py_1a344bb9ab1af76db9d028fd7f89384231" kind="function"><name>get_vertices</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1envs_1_1dynamic__models" kind="namespace"><name>f110_gym::envs::dynamic_models</name>
-    <member refid="dynamic__models_8py_1ab8a10c74a1f1dbbfd4adf3d8b264647f" kind="variable"><name>cache</name></member>
-    <member refid="dynamic__models_8py_1a431101ae67a4c958eb02126cf2ee5e66" kind="function"><name>accl_constraints</name></member>
-    <member refid="dynamic__models_8py_1a08dd4fc40f33742219b2798addf0aaf2" kind="function"><name>steering_constraint</name></member>
-    <member refid="dynamic__models_8py_1a44ce97966ffccf3d94aad7e3a766cf91" kind="function"><name>vehicle_dynamics_ks</name></member>
-    <member refid="dynamic__models_8py_1a2491848cc1db2e106c039da6ed7041c6" kind="function"><name>vehicle_dynamics_st</name></member>
-    <member refid="dynamic__models_8py_1acadb3628c14a8cc2a59509833762f9c5" kind="function"><name>pid</name></member>
-    <member refid="dynamic__models_8py_1a57b901e4cb2e0ad2ff8df6ad2b6035b1" kind="function"><name>func_KS</name></member>
-    <member refid="dynamic__models_8py_1a99b883cf5f7f438b805dcbc2cff6b4ef" kind="function"><name>func_ST</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1envs_1_1f110__env" kind="namespace"><name>f110_gym::envs::f110_env</name>
-    <member refid="f110__env_8py_1a118efb91786ec1caaf67464c1d4d4962" kind="variable"><name>VIDEO_W</name></member>
-    <member refid="f110__env_8py_1ac753c679a3d5a173c8ad99d14c5fc47b" kind="variable"><name>VIDEO_H</name></member>
-    <member refid="f110__env_8py_1a72a6be22a508a795985d604b0add267d" kind="variable"><name>WINDOW_W</name></member>
-    <member refid="f110__env_8py_1a9a35e98c8a439e76515bdcd473fd9e2d" kind="variable"><name>WINDOW_H</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1envs_1_1f110__env__backup" kind="namespace"><name>f110_gym::envs::f110_env_backup</name>
-  </compound>
-  <compound refid="namespacef110__gym_1_1envs_1_1laser__models" kind="namespace"><name>f110_gym::envs::laser_models</name>
-    <member refid="laser__models_8py_1a7898aaf5a3f1aa50a77e241bcc99812f" kind="function"><name>get_dt</name></member>
-    <member refid="laser__models_8py_1a9e392a639b2b55df60f828ae13a88fef" kind="function"><name>xy_2_rc</name></member>
-    <member refid="laser__models_8py_1adc41ff0ca728f48f7bbc304eae86445f" kind="function"><name>distance_transform</name></member>
-    <member refid="laser__models_8py_1a5a9617e07fa391720bfa8e48de4e29ea" kind="function"><name>trace_ray</name></member>
-    <member refid="laser__models_8py_1a479dfd891b317f6625c5075b0aa73579" kind="function"><name>get_scan</name></member>
-    <member refid="laser__models_8py_1abb054b963ce9a2b09aaf27d5b7c94776" kind="function"><name>check_ttc_jit</name></member>
-    <member refid="laser__models_8py_1a63c2d60d1bb4f8399198bec4b423034b" kind="function"><name>cross</name></member>
-    <member refid="laser__models_8py_1a3ca13ea1c8037713bf309a354c614cc3" kind="function"><name>are_collinear</name></member>
-    <member refid="laser__models_8py_1a1bc7982bd73954850a7b9c3c53d98b0f" kind="function"><name>get_range</name></member>
-    <member refid="laser__models_8py_1ad4250e0339dc216ca15099bcfca8eb07" kind="function"><name>ray_cast</name></member>
-    <member refid="laser__models_8py_1a369f6a199d7e45afbbeafa1a04879dd3" kind="function"><name>main</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1envs_1_1rendering" kind="namespace"><name>f110_gym::envs::rendering</name>
-    <member refid="rendering_8py_1adcb93d33a17b4cc05e3a17a79389ca9f" kind="variable"><name>ZOOM_IN_FACTOR</name></member>
-    <member refid="rendering_8py_1aacc77603b42e49b0cfad2a0d5156d033" kind="variable"><name>ZOOM_OUT_FACTOR</name></member>
-    <member refid="rendering_8py_1a15030f21ebdcc600d4cdcba2cb4efdbb" kind="variable"><name>CAR_LENGTH</name></member>
-    <member refid="rendering_8py_1abad083fa3d5353b3326b71aedf095e69" kind="variable"><name>CAR_WIDTH</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1unittest" kind="namespace"><name>f110_gym::unittest</name>
-  </compound>
-  <compound refid="namespacef110__gym_1_1unittest_1_1collision__checks" kind="namespace"><name>f110_gym::unittest::collision_checks</name>
-    <member refid="collision__checks_8py_1a01c6f10da145f4b9db113a17360e45ed" kind="variable"><name>cache</name></member>
-    <member refid="collision__checks_8py_1a1718aedaf888fb6bcc90e1814732e56e" kind="function"><name>perpendicular</name></member>
-    <member refid="collision__checks_8py_1a662cb9cf2ce661a420f4aa6170856959" kind="function"><name>tripleProduct</name></member>
-    <member refid="collision__checks_8py_1ace038ce6c1efa0f8884f63d84a1a8e9d" kind="function"><name>avgPoint</name></member>
-    <member refid="collision__checks_8py_1afed234ffedde9f63c687aabc78ecf191" kind="function"><name>indexOfFurthestPoint</name></member>
-    <member refid="collision__checks_8py_1a2c384f130b286e7c1d1dc3dd7b04dcfc" kind="function"><name>support</name></member>
-    <member refid="collision__checks_8py_1ae6955c70ffe9171e85ef49d48c0ffbfc" kind="function"><name>collision</name></member>
-    <member refid="collision__checks_8py_1a696ebc81dbf2bb5f08dd7a8bc9aca517" kind="function"><name>get_trmtx</name></member>
-    <member refid="collision__checks_8py_1aafb53c9e57ec13d9b34ec1cc4a4e6197" kind="function"><name>get_vertices</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1unittest_1_1dynamics__test" kind="namespace"><name>f110_gym::unittest::dynamics_test</name>
-    <member refid="dynamics__test_8py_1a158e09a987de07230ae61a296fd35d65" kind="variable"><name>cache</name></member>
-    <member refid="dynamics__test_8py_1aec9c2f3b2629f179fad25db2d240924a" kind="function"><name>accl_constraints</name></member>
-    <member refid="dynamics__test_8py_1a179f2b21768e81215cc2298cdd226c6e" kind="function"><name>steering_constraint</name></member>
-    <member refid="dynamics__test_8py_1adce043c0433e0993c7aced5dd6b0475c" kind="function"><name>vehicle_dynamics_ks</name></member>
-    <member refid="dynamics__test_8py_1ae0437476ef39a9fc5bc592ef2bfee40b" kind="function"><name>vehicle_dynamics_st</name></member>
-    <member refid="dynamics__test_8py_1a6a70b034b943e12edb3aa7f50c12f607" kind="function"><name>pid</name></member>
-    <member refid="dynamics__test_8py_1a8c9025a83517af7f85dddb53f1b04bb7" kind="function"><name>func_KS</name></member>
-    <member refid="dynamics__test_8py_1a6ccba55ff647ba033dec08a79dc5c74e" kind="function"><name>func_ST</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1unittest_1_1legacy__scan__gen" kind="namespace"><name>f110_gym::unittest::legacy_scan_gen</name>
-    <member refid="legacy__scan__gen_8py_1a3acf2d94fb6d1955f85ef97490d79597" kind="variable"><name>thetas</name></member>
-    <member refid="legacy__scan__gen_8py_1a3c16a5361e5e50935df3d60cc43be9d8" kind="variable"><name>executable_dir</name></member>
-    <member refid="legacy__scan__gen_8py_1ad230fce994060d2760dbaa3011046d99" kind="variable"><name>mass</name></member>
-    <member refid="legacy__scan__gen_8py_1a9b23723bde43aa19f3103b670e48a274" kind="variable"><name>l_r</name></member>
-    <member refid="legacy__scan__gen_8py_1aec6027e075b6c232872ecdeb9557901f" kind="variable"><name>I_z</name></member>
-    <member refid="legacy__scan__gen_8py_1a4b8eae395b3ba7745b4707730a4e0342" kind="variable"><name>mu</name></member>
-    <member refid="legacy__scan__gen_8py_1a4a2f09273283a00dd9f0e2a0202819d8" kind="variable"><name>h_cg</name></member>
-    <member refid="legacy__scan__gen_8py_1a3ecbcf35be2c3b1c5de27a80a75fd6b6" kind="variable"><name>cs_f</name></member>
-    <member refid="legacy__scan__gen_8py_1a187af2aab0e56a6814c20dc624e44066" kind="variable"><name>cs_r</name></member>
-    <member refid="legacy__scan__gen_8py_1a5dc0c5eb3920673ad54793bf5a242c7f" kind="variable"><name>num_test</name></member>
-    <member refid="legacy__scan__gen_8py_1a16cb81b5670b7cb02da350ca06e782e0" kind="variable"><name>test_poses</name></member>
-    <member refid="legacy__scan__gen_8py_1a13cfce268a3d58a9bb340c49e52c7358" kind="variable"><name>num</name></member>
-    <member refid="legacy__scan__gen_8py_1a9b44a820cb923dd21ad53ca3ce1a1a3e" kind="variable"><name>map_path</name></member>
-    <member refid="legacy__scan__gen_8py_1a104eddedf6dffa3cfbb48fd10a54fbaa" kind="variable"><name>map_ext</name></member>
-    <member refid="legacy__scan__gen_8py_1a61f0e3e1d2267e520e06606e1face7b1" kind="variable"><name>racecar_env</name></member>
-    <member refid="legacy__scan__gen_8py_1adb3290404d3f4b8b78c064260da612b4" kind="variable"><name>double_finish</name></member>
-    <member refid="legacy__scan__gen_8py_1af8a3966f4a9b1c148801c9f0faeb2ab9" kind="variable"><name>vegas_scan</name></member>
-    <member refid="legacy__scan__gen_8py_1ae0259831a38cf476e0dd42babc9961bf" kind="variable"><name>x</name></member>
-    <member refid="legacy__scan__gen_8py_1a2b203158766bea1a4c5f63348e259b68" kind="variable"><name>y</name></member>
-    <member refid="legacy__scan__gen_8py_1a04710a5417dc947ecea68c85b283ae50" kind="variable"><name>theta</name></member>
-    <member refid="legacy__scan__gen_8py_1aa1acb0415bfee00854f8be477f4e7f44" kind="variable"><name>obs</name></member>
-    <member refid="legacy__scan__gen_8py_1a9520e850caa600c8d5083e90ac4fe127" kind="variable"><name>_</name></member>
-    <member refid="legacy__scan__gen_8py_1ac94bf3002239f74774b33264d13e088d" kind="variable"><name>berlin_scan</name></member>
-    <member refid="legacy__scan__gen_8py_1a7569d745c961e7f9967aad0c5d6f2672" kind="variable"><name>skirk_scan</name></member>
-    <member refid="legacy__scan__gen_8py_1a8385064c1f35018e19bd2c8fe359cc3c" kind="variable"><name>vegas</name></member>
-    <member refid="legacy__scan__gen_8py_1a0413a2d9da052bbc95719cafd822cbb5" kind="variable"><name>berlin</name></member>
-    <member refid="legacy__scan__gen_8py_1a1943209d1e4c42cb37681e790e21a71e" kind="variable"><name>skirk</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1unittest_1_1pyglet__test" kind="namespace"><name>f110_gym::unittest::pyglet_test</name>
-    <member refid="pyglet__test_8py_1a3d69f486cb21f39a06dad8857f9b7d50" kind="variable"><name>parser</name></member>
-    <member refid="pyglet__test_8py_1a981fb3f820ad2e7741085fe4f5dea096" kind="variable"><name>type</name></member>
-    <member refid="pyglet__test_8py_1a2005fab57ddd5da6ff3394c03dc13cd5" kind="variable"><name>str</name></member>
-    <member refid="pyglet__test_8py_1acc7e94317a1b95945b9baf3623660350" kind="variable"><name>required</name></member>
-    <member refid="pyglet__test_8py_1a41b4d9d2099f3bffde0a78849b8f6e9b" kind="variable"><name>True</name></member>
-    <member refid="pyglet__test_8py_1af457772f551e51c84059b1619cac6f6f" kind="variable"><name>help</name></member>
-    <member refid="pyglet__test_8py_1a45eb1549d05c60fdad09c712bda5a759" kind="variable"><name>args</name></member>
-    <member refid="pyglet__test_8py_1a3174957b3d9e1f51302c419ae772a7d7" kind="variable"><name>map_metada</name></member>
-    <member refid="pyglet__test_8py_1a087834fb591571e3b9590537ab43f2a4" kind="variable"><name>map_resolution</name></member>
-    <member refid="pyglet__test_8py_1a7ccec01d1694c9ce188a100eae74a9eb" kind="variable"><name>origin</name></member>
-    <member refid="pyglet__test_8py_1a489a47127c8b26ff6a6c2f32b22b7c4e" kind="variable"><name>origin_x</name></member>
-    <member refid="pyglet__test_8py_1a8ba1eb7ca846ae091a7a0208bab2d8e5" kind="variable"><name>origin_y</name></member>
-    <member refid="pyglet__test_8py_1afae1d6e5e857392c773fb99b539676bc" kind="variable"><name>map_img</name></member>
-    <member refid="pyglet__test_8py_1a481a4c3d659a7730333145e5fe7c4367" kind="variable"><name>map_height</name></member>
-    <member refid="pyglet__test_8py_1a2e254b24420bdda87cd30f367b65552d" kind="variable"><name>map_width</name></member>
-    <member refid="pyglet__test_8py_1a4c371730daa6fa2b932e0d6bdc28e700" kind="variable"><name>range_x</name></member>
-    <member refid="pyglet__test_8py_1a85be62a46ea83891f58f723d84164389" kind="variable"><name>range_y</name></member>
-    <member refid="pyglet__test_8py_1a2b3d64a285759e09b06db641e7b3ef76" kind="variable"><name>map_x</name></member>
-    <member refid="pyglet__test_8py_1a7a58fce71597c750f41fe4aa8f5d0d89" kind="variable"><name>map_y</name></member>
-    <member refid="pyglet__test_8py_1a3186da83d330b11ad5d0f0adfc57dab7" kind="variable"><name>map_z</name></member>
-    <member refid="pyglet__test_8py_1aa4a56a9e36d04e7211af58fc468903ba" kind="variable"><name>map_coords</name></member>
-    <member refid="pyglet__test_8py_1a83cf143d5d4d4fbe4aa56cf8c6699c78" kind="variable"><name>map_mask</name></member>
-    <member refid="pyglet__test_8py_1a53860be358d7cdfc130c75ca444c9939" kind="variable"><name>map_mask_flat</name></member>
-    <member refid="pyglet__test_8py_1a8c5958c53e522bb0dc390ad0421a6057" kind="variable"><name>map_points</name></member>
-    <member refid="pyglet__test_8py_1a61b9b5ee2dc42c296dc48e8ddaf5a173" kind="variable"><name>config</name></member>
-    <member refid="pyglet__test_8py_1abbdafa8876f8f50a0f98b0ccf20e58df" kind="variable"><name>window</name></member>
-    <member refid="pyglet__test_8py_1a1546787b3b7976676236a790f8d70c5c" kind="variable"><name>cam</name></member>
-    <member refid="pyglet__test_8py_1a3405d8b8ab8878375ce14241e071c6fd" kind="variable"><name>batch</name></member>
-    <member refid="pyglet__test_8py_1a88390b60af94b8cc39c9c11c7471bea5" kind="variable"><name>points</name></member>
-    <member refid="pyglet__test_8py_1a3710a56d6d768172240edd7f43b56d90" kind="variable"><name>particle</name></member>
-    <member refid="pyglet__test_8py_1adf83272f4af52d9e64b6469c409f49c2" kind="function"><name>on_resize</name></member>
-    <member refid="pyglet__test_8py_1a8e03464647800bf112a3656d9679c1c4" kind="function"><name>loop</name></member>
-    <member refid="pyglet__test_8py_1adf4782832213b50f1e079698656cdddb" kind="function"><name>on_draw</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1unittest_1_1pyglet__test__camera" kind="namespace"><name>f110_gym::unittest::pyglet_test_camera</name>
-    <member refid="pyglet__test__camera_8py_1ad60c292ad7eac4ed7de1777dcd5435b2" kind="variable"><name>ZOOM_IN_FACTOR</name></member>
-    <member refid="pyglet__test__camera_8py_1a4ec694cd82738b571eaaa90eea919fe8" kind="variable"><name>ZOOM_OUT_FACTOR</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1unittest_1_1random__trackgen" kind="namespace"><name>f110_gym::unittest::random_trackgen</name>
-    <member refid="random__trackgen_8py_1a9d47282619ade831e74f78ea802fdd0c" kind="variable"><name>parser</name></member>
-    <member refid="random__trackgen_8py_1a7487bc05dd5dec9378a0cef668123d11" kind="variable"><name>type</name></member>
-    <member refid="random__trackgen_8py_1a0726f3cb3017bc7a0e22ffb30e53eefa" kind="variable"><name>int</name></member>
-    <member refid="random__trackgen_8py_1aa72b8a2db3b63f9ed42cb896235fb4ac" kind="variable"><name>default</name></member>
-    <member refid="random__trackgen_8py_1acfe582339d8be9075a6160eae33e10aa" kind="variable"><name>help</name></member>
-    <member refid="random__trackgen_8py_1adaa99201e805097500ed2491766a2938" kind="variable"><name>args</name></member>
-    <member refid="random__trackgen_8py_1a3457cee9b138a50f02af8eb4e071173e" kind="variable"><name>NUM_MAPS</name></member>
-    <member refid="random__trackgen_8py_1a2fe20a3d4b091cfa0c3eb867adc992ce" kind="variable"><name>WIDTH</name></member>
-    <member refid="random__trackgen_8py_1a8f9627599e2526027f715cd162b7155f" kind="variable"><name>track</name></member>
-    <member refid="random__trackgen_8py_1a55ebef782ee46bdd7cd03aa6a404cd02" kind="variable"><name>track_int</name></member>
-    <member refid="random__trackgen_8py_1a492ff0fd0e3e2e4b53c804fe4656e19f" kind="variable"><name>track_ext</name></member>
-    <member refid="random__trackgen_8py_1af5ac6d92744435a0c2572146ec14cd00" kind="function"><name>create_track</name></member>
-    <member refid="random__trackgen_8py_1a10f9f980a813a2beca515c9965995c12" kind="function"><name>convert_track</name></member>
-  </compound>
-  <compound refid="namespacef110__gym_1_1unittest_1_1scan__sim" kind="namespace"><name>f110_gym::unittest::scan_sim</name>
-    <member refid="scan__sim_8py_1a79849d1485e5078a2792710ce3c7fc97" kind="function"><name>get_dt</name></member>
-    <member refid="scan__sim_8py_1a990edc2fbfab8d957303d4b100bc6c9a" kind="function"><name>xy_2_rc</name></member>
-    <member refid="scan__sim_8py_1aa2c2d251010dae8940a87e69cadffa07" kind="function"><name>distance_transform</name></member>
-    <member refid="scan__sim_8py_1a0f9a2bc118cafc22f7ae057be76d01dd" kind="function"><name>trace_ray</name></member>
-    <member refid="scan__sim_8py_1ad9b4dde85991dfc78a65b7804c27d010" kind="function"><name>get_scan</name></member>
-    <member refid="scan__sim_8py_1a710653eef2a82aae113e889794ee511e" kind="function"><name>main</name></member>
-  </compound>
-  <compound refid="namespacegym_1_1envs_1_1unittest_1_1scan__sim" kind="namespace"><name>gym::envs::unittest::scan_sim</name>
-  </compound>
-  <compound refid="namespacepyglet_1_1gl" kind="namespace"><name>pyglet::gl</name>
-  </compound>
-  <compound refid="____init_____8py" kind="file"><name>__init__.py</name>
-  </compound>
-  <compound refid="envs_2____init_____8py" kind="file"><name>__init__.py</name>
-  </compound>
-  <compound refid="unittest_2____init_____8py" kind="file"><name>__init__.py</name>
-  </compound>
-  <compound refid="base__classes_8py" kind="file"><name>base_classes.py</name>
-  </compound>
-  <compound refid="collision__models_8py" kind="file"><name>collision_models.py</name>
-  </compound>
-  <compound refid="dynamic__models_8py" kind="file"><name>dynamic_models.py</name>
-  </compound>
-  <compound refid="f110__env_8py" kind="file"><name>f110_env.py</name>
-  </compound>
-  <compound refid="f110__env__backup_8py" kind="file"><name>f110_env_backup.py</name>
-  </compound>
-  <compound refid="laser__models_8py" kind="file"><name>laser_models.py</name>
-  </compound>
-  <compound refid="rendering_8py" kind="file"><name>rendering.py</name>
-  </compound>
-  <compound refid="collision__checks_8py" kind="file"><name>collision_checks.py</name>
-  </compound>
-  <compound refid="dynamics__test_8py" kind="file"><name>dynamics_test.py</name>
-  </compound>
-  <compound refid="legacy__scan__gen_8py" kind="file"><name>legacy_scan_gen.py</name>
-  </compound>
-  <compound refid="pyglet__test_8py" kind="file"><name>pyglet_test.py</name>
-  </compound>
-  <compound refid="pyglet__test__camera_8py" kind="file"><name>pyglet_test_camera.py</name>
-  </compound>
-  <compound refid="random__trackgen_8py" kind="file"><name>random_trackgen.py</name>
-  </compound>
-  <compound refid="scan__sim_8py" kind="file"><name>scan_sim.py</name>
-  </compound>
-  <compound refid="dir_87aab0849a7ff80b67f27d7f0ecafd88" kind="dir"><name>/home/billyzheng/f1tenth_gym/gym/f110_gym/envs</name>
-  </compound>
-  <compound refid="dir_0d9aa0052a6017cb7aea189bf393af42" kind="dir"><name>/home/billyzheng/f1tenth_gym/gym/f110_gym</name>
-  </compound>
-  <compound refid="dir_cc06cd2fc16f827f09405fcedd02c7bb" kind="dir"><name>/home/billyzheng/f1tenth_gym/gym</name>
-  </compound>
-  <compound refid="dir_70fc25f479e8e19f7e6bd12b95eca2dc" kind="dir"><name>/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest</name>
-  </compound>
-</doxygenindex>
diff --git a/docs/xml/index.xsd b/docs/xml/index.xsd
deleted file mode 100644
index 04cb2f13..00000000
--- a/docs/xml/index.xsd
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <xsd:element name="doxygenindex" type="DoxygenType"/>
-
-  <xsd:complexType name="DoxygenType">
-    <xsd:sequence>
-      <xsd:element name="compound" type="CompoundType" minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-    <xsd:attribute name="version" type="xsd:string" use="required"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="CompoundType">
-    <xsd:sequence>
-      <xsd:element name="name" type="xsd:string"/>
-      <xsd:element name="member" type="MemberType" minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-    <xsd:attribute name="refid" type="xsd:string" use="required"/>
-    <xsd:attribute name="kind" type="CompoundKind" use="required"/>
-  </xsd:complexType>
-
-  <xsd:complexType name="MemberType">
-    <xsd:sequence>
-      <xsd:element name="name" type="xsd:string"/>
-    </xsd:sequence>
-    <xsd:attribute name="refid" type="xsd:string" use="required"/>
-    <xsd:attribute name="kind" type="MemberKind" use="required"/>
-  </xsd:complexType>
-  
-  <xsd:simpleType name="CompoundKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="class"/>
-      <xsd:enumeration value="struct"/>
-      <xsd:enumeration value="union"/>
-      <xsd:enumeration value="interface"/>
-      <xsd:enumeration value="protocol"/>
-      <xsd:enumeration value="category"/>
-      <xsd:enumeration value="exception"/>
-      <xsd:enumeration value="file"/>
-      <xsd:enumeration value="namespace"/>
-      <xsd:enumeration value="group"/>
-      <xsd:enumeration value="page"/>
-      <xsd:enumeration value="example"/>
-      <xsd:enumeration value="dir"/>
-      <xsd:enumeration value="type"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-
-  <xsd:simpleType name="MemberKind">
-    <xsd:restriction base="xsd:string">
-      <xsd:enumeration value="define"/>
-      <xsd:enumeration value="property"/>
-      <xsd:enumeration value="event"/>
-      <xsd:enumeration value="variable"/>
-      <xsd:enumeration value="typedef"/>
-      <xsd:enumeration value="enum"/>
-      <xsd:enumeration value="enumvalue"/>
-      <xsd:enumeration value="function"/>
-      <xsd:enumeration value="signal"/>
-      <xsd:enumeration value="prototype"/>
-      <xsd:enumeration value="friend"/>
-      <xsd:enumeration value="dcop"/>
-      <xsd:enumeration value="slot"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-
-</xsd:schema>
-
diff --git a/docs/xml/laser__models_8py.xml b/docs/xml/laser__models_8py.xml
deleted file mode 100644
index a339a27b..00000000
--- a/docs/xml/laser__models_8py.xml
+++ /dev/null
@@ -1,596 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="laser__models_8py" kind="file" language="Python">
-    <compoundname>laser_models.py</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" prot="public">f110_gym::envs::laser_models::ScanSimulator2D</innerclass>
-    <innerclass refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests" prot="public">f110_gym::envs::laser_models::ScanTests</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1laser__models">f110_gym::envs::laser_models</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="26"><highlight class="stringliteral">Prototype<sp/>of<sp/>Utility<sp/>functions<sp/>and<sp/>classes<sp/>for<sp/>simulating<sp/>2D<sp/>LIDAR<sp/>scans</highlight></codeline>
-<codeline lineno="27"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="28"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="29"><highlight class="normal"></highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="31"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>numba<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>njit</highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.ndimage<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>distance_transform_edt<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>edt</highlight></codeline>
-<codeline lineno="33"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>PIL<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>Image</highlight></codeline>
-<codeline lineno="34"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>os</highlight></codeline>
-<codeline lineno="35"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>yaml</highlight></codeline>
-<codeline lineno="36"><highlight class="normal"></highlight></codeline>
-<codeline lineno="37"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>unittest</highlight></codeline>
-<codeline lineno="38"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>timeit</highlight></codeline>
-<codeline lineno="39"><highlight class="normal"></highlight></codeline>
-<codeline lineno="40"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_dt(bitmap,<sp/>resolution):</highlight></codeline>
-<codeline lineno="41"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="42"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Distance<sp/>transformation,<sp/>returns<sp/>the<sp/>distance<sp/>matrix<sp/>from<sp/>the<sp/>input<sp/>bitmap.</highlight></codeline>
-<codeline lineno="43"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Uses<sp/>scipy.ndimage,<sp/>cannot<sp/>be<sp/>JITted.</highlight></codeline>
-<codeline lineno="44"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="45"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="46"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>bitmap<sp/>(numpy.ndarray,<sp/>(n,<sp/>m)):<sp/>input<sp/>binary<sp/>bitmap<sp/>of<sp/>the<sp/>environment,<sp/>where<sp/>0<sp/>is<sp/>obstacles,<sp/>and<sp/>255<sp/>(or<sp/>anything<sp/>&gt;<sp/>0)<sp/>is<sp/>freespace</highlight></codeline>
-<codeline lineno="47"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>resolution<sp/>(float):<sp/>resolution<sp/>of<sp/>the<sp/>input<sp/>bitmap<sp/>(m/cell)</highlight></codeline>
-<codeline lineno="48"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="49"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="50"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dt<sp/>(numpy.ndarray,<sp/>(n,<sp/>m)):<sp/>output<sp/>distance<sp/>matrix,<sp/>where<sp/>each<sp/>cell<sp/>has<sp/>the<sp/>corresponding<sp/>distance<sp/>(in<sp/>meters)<sp/>to<sp/>the<sp/>closest<sp/>obstacle</highlight></codeline>
-<codeline lineno="51"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/>dt<sp/>=<sp/>resolution<sp/>*<sp/>edt(bitmap)</highlight></codeline>
-<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>dt</highlight></codeline>
-<codeline lineno="54"><highlight class="normal"></highlight></codeline>
-<codeline lineno="55"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="56"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">xy_2_rc(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution):</highlight></codeline>
-<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="58"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Translate<sp/>(x,<sp/>y)<sp/>coordinate<sp/>into<sp/>(r,<sp/>c)<sp/>in<sp/>the<sp/>matrix</highlight></codeline>
-<codeline lineno="59"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="60"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="61"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(float):<sp/>coordinate<sp/>in<sp/>x<sp/>(m)</highlight></codeline>
-<codeline lineno="62"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>(float):<sp/>coordinate<sp/>in<sp/>y<sp/>(m)</highlight></codeline>
-<codeline lineno="63"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>orig_x<sp/>(float):<sp/>x<sp/>coordinate<sp/>of<sp/>the<sp/>map<sp/>origin<sp/>(m)</highlight></codeline>
-<codeline lineno="64"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>orig_y<sp/>(float):<sp/>y<sp/>coordinate<sp/>of<sp/>the<sp/>map<sp/>origin<sp/>(m)</highlight></codeline>
-<codeline lineno="65"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="66"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="67"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>r<sp/>(int):<sp/>row<sp/>number<sp/>in<sp/>the<sp/>transform<sp/>matrix<sp/>of<sp/>the<sp/>given<sp/>point</highlight></codeline>
-<codeline lineno="68"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>c<sp/>(int):<sp/>column<sp/>number<sp/>in<sp/>the<sp/>transform<sp/>matrix<sp/>of<sp/>the<sp/>given<sp/>point</highlight></codeline>
-<codeline lineno="69"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="70"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>translation</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/>x_trans<sp/>=<sp/>x<sp/>-<sp/>orig_x</highlight></codeline>
-<codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/>y_trans<sp/>=<sp/>y<sp/>-<sp/>orig_y</highlight></codeline>
-<codeline lineno="73"><highlight class="normal"></highlight></codeline>
-<codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>rotation</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/>x_rot<sp/>=<sp/>x_trans<sp/>*<sp/>orig_c<sp/>+<sp/>y_trans<sp/>*<sp/>orig_s</highlight></codeline>
-<codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/>y_rot<sp/>=<sp/>-x_trans<sp/>*<sp/>orig_s<sp/>+<sp/>y_trans<sp/>*<sp/>orig_c</highlight></codeline>
-<codeline lineno="77"><highlight class="normal"></highlight></codeline>
-<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>clip<sp/>the<sp/>state<sp/>to<sp/>be<sp/>a<sp/>cell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>x_rot<sp/>&lt;<sp/>0<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>x_rot<sp/>&gt;=<sp/>width<sp/>*<sp/>resolution<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>y_rot<sp/>&lt;<sp/>0<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>y_rot<sp/>&gt;=<sp/>height<sp/>*<sp/>resolution:</highlight></codeline>
-<codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>c<sp/>=<sp/>-1</highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>r<sp/>=<sp/>-1</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>c<sp/>=<sp/>int(x_rot/resolution)</highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>r<sp/>=<sp/>int(y_rot/resolution)</highlight></codeline>
-<codeline lineno="85"><highlight class="normal"></highlight></codeline>
-<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>r,<sp/>c</highlight></codeline>
-<codeline lineno="87"><highlight class="normal"></highlight></codeline>
-<codeline lineno="88"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="89"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">distance_transform(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt):</highlight></codeline>
-<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="91"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Look<sp/>up<sp/>corresponding<sp/>distance<sp/>in<sp/>the<sp/>distance<sp/>matrix</highlight></codeline>
-<codeline lineno="92"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="93"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="94"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(float):<sp/>x<sp/>coordinate<sp/>of<sp/>the<sp/>lookup<sp/>point</highlight></codeline>
-<codeline lineno="95"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>(float):<sp/>y<sp/>coordinate<sp/>of<sp/>the<sp/>lookup<sp/>point</highlight></codeline>
-<codeline lineno="96"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>orig_x<sp/>(float):<sp/>x<sp/>coordinate<sp/>of<sp/>the<sp/>map<sp/>origin<sp/>(m)</highlight></codeline>
-<codeline lineno="97"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>orig_y<sp/>(float):<sp/>y<sp/>coordinate<sp/>of<sp/>the<sp/>map<sp/>origin<sp/>(m)</highlight></codeline>
-<codeline lineno="98"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="99"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="100"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>distance<sp/>(float):<sp/>corresponding<sp/>shortest<sp/>distance<sp/>to<sp/>obstacle<sp/>in<sp/>meters</highlight></codeline>
-<codeline lineno="101"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="102"><highlight class="normal"><sp/><sp/><sp/><sp/>r,<sp/>c<sp/>=<sp/>xy_2_rc(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution)</highlight></codeline>
-<codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/>distance<sp/>=<sp/>dt[r,<sp/>c]</highlight></codeline>
-<codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>distance</highlight></codeline>
-<codeline lineno="105"><highlight class="normal"></highlight></codeline>
-<codeline lineno="106"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="107"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">trace_ray(x,<sp/>y,<sp/>theta_index,<sp/>sines,<sp/>cosines,<sp/>eps,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt,<sp/>max_range):</highlight></codeline>
-<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="109"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Find<sp/>the<sp/>length<sp/>of<sp/>a<sp/>specific<sp/>ray<sp/>at<sp/>a<sp/>specific<sp/>scan<sp/>angle<sp/>theta</highlight></codeline>
-<codeline lineno="110"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Purely<sp/>math<sp/>calculation<sp/>and<sp/>loops,<sp/>should<sp/>be<sp/>JITted.</highlight></codeline>
-<codeline lineno="111"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="112"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="113"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(float):<sp/>current<sp/>x<sp/>coordinate<sp/>of<sp/>the<sp/>ego<sp/>(scan)<sp/>frame</highlight></codeline>
-<codeline lineno="114"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>(float):<sp/>current<sp/>y<sp/>coordinate<sp/>of<sp/>the<sp/>ego<sp/>(scan)<sp/>frame</highlight></codeline>
-<codeline lineno="115"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index(int):<sp/>current<sp/>index<sp/>of<sp/>the<sp/>scan<sp/>beam<sp/>in<sp/>the<sp/>scan<sp/>range</highlight></codeline>
-<codeline lineno="116"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sines<sp/>(numpy.ndarray<sp/>(n,<sp/>)):<sp/>pre-calculated<sp/>sines<sp/>of<sp/>the<sp/>angle<sp/>array</highlight></codeline>
-<codeline lineno="117"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>cosines<sp/>(numpy.ndarray<sp/>(n,<sp/>)):<sp/>pre-calculated<sp/>cosines<sp/>...</highlight></codeline>
-<codeline lineno="118"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="119"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="120"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>total_distance<sp/>(float):<sp/>the<sp/>distance<sp/>to<sp/>first<sp/>obstacle<sp/>on<sp/>the<sp/>current<sp/>scan<sp/>beam</highlight></codeline>
-<codeline lineno="121"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="122"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="123"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>int<sp/>casting,<sp/>and<sp/>index<sp/>precal<sp/>trigs</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="124"><highlight class="normal"><sp/><sp/><sp/><sp/>theta_index_<sp/>=<sp/>int(theta_index)</highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/>s<sp/>=<sp/>sines[theta_index_]</highlight></codeline>
-<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/>c<sp/>=<sp/>cosines[theta_index_]</highlight></codeline>
-<codeline lineno="127"><highlight class="normal"></highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>distance<sp/>to<sp/>nearest<sp/>initialization</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/>dist_to_nearest<sp/>=<sp/>distance_transform(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt)</highlight></codeline>
-<codeline lineno="130"><highlight class="normal"><sp/><sp/><sp/><sp/>total_dist<sp/>=<sp/>dist_to_nearest</highlight></codeline>
-<codeline lineno="131"><highlight class="normal"></highlight></codeline>
-<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ray<sp/>tracing<sp/>iterations</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>dist_to_nearest<sp/>&gt;<sp/>eps<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>total_dist<sp/>&lt;=<sp/>max_range:</highlight></codeline>
-<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>move<sp/>in<sp/>the<sp/>direction<sp/>of<sp/>the<sp/>ray<sp/>by<sp/>dist_to_nearest</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="135"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>+=<sp/>dist_to_nearest<sp/>*<sp/>c</highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>+=<sp/>dist_to_nearest<sp/>*<sp/>s</highlight></codeline>
-<codeline lineno="137"><highlight class="normal"></highlight></codeline>
-<codeline lineno="138"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>dist_to_nearest<sp/>for<sp/>current<sp/>point<sp/>on<sp/>ray</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>also<sp/>keeps<sp/>track<sp/>of<sp/>total<sp/>ray<sp/>length</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dist_to_nearest<sp/>=<sp/>distance_transform(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt)</highlight></codeline>
-<codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>total_dist<sp/>+=<sp/>dist_to_nearest</highlight></codeline>
-<codeline lineno="142"><highlight class="normal"></highlight></codeline>
-<codeline lineno="143"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>total_dist<sp/>&gt;<sp/>max_range:</highlight></codeline>
-<codeline lineno="144"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>total_dist<sp/>=<sp/>max_range</highlight></codeline>
-<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>total_dist</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"></highlight></codeline>
-<codeline lineno="148"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="149"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_scan(pose,<sp/>theta_dis,<sp/>fov,<sp/>num_beams,<sp/>theta_index_increment,<sp/>sines,<sp/>cosines,<sp/>eps,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt,<sp/>max_range):</highlight></codeline>
-<codeline lineno="150"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="151"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Perform<sp/>the<sp/>scan<sp/>for<sp/>each<sp/>discretized<sp/>angle<sp/>of<sp/>each<sp/>beam<sp/>of<sp/>the<sp/>laser,<sp/>loop<sp/>heavy,<sp/>should<sp/>be<sp/>JITted</highlight></codeline>
-<codeline lineno="152"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="153"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="154"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(numpy.ndarray(3,<sp/>)):<sp/>current<sp/>pose<sp/>of<sp/>the<sp/>scan<sp/>frame<sp/>in<sp/>the<sp/>map</highlight></codeline>
-<codeline lineno="155"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_dis<sp/>(int):<sp/>number<sp/>of<sp/>steps<sp/>to<sp/>discretize<sp/>the<sp/>angles<sp/>between<sp/>0<sp/>and<sp/>2pi<sp/>for<sp/>look<sp/>up</highlight></codeline>
-<codeline lineno="156"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fov<sp/>(float):<sp/>field<sp/>of<sp/>view<sp/>of<sp/>the<sp/>laser<sp/>scan</highlight></codeline>
-<codeline lineno="157"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_beams<sp/>(int):<sp/>number<sp/>of<sp/>beams<sp/>in<sp/>the<sp/>scan</highlight></codeline>
-<codeline lineno="158"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index_increment<sp/>(float):<sp/>increment<sp/>between<sp/>angle<sp/>indices<sp/>after<sp/>discretization</highlight></codeline>
-<codeline lineno="159"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="160"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="161"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>(numpy.ndarray(n,<sp/>)):<sp/>resulting<sp/>laser<sp/>scan<sp/>at<sp/>the<sp/>pose,<sp/>n=num_beams</highlight></codeline>
-<codeline lineno="162"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>empty<sp/>scan<sp/>array<sp/>init</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>np.empty((num_beams,))</highlight></codeline>
-<codeline lineno="165"><highlight class="normal"></highlight></codeline>
-<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>make<sp/>theta<sp/>discrete<sp/>by<sp/>mapping<sp/>the<sp/>range<sp/>[-pi,<sp/>pi]<sp/>onto<sp/>[0,<sp/>theta_dis]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/>theta_index<sp/>=<sp/>theta_dis<sp/>*<sp/>(pose[2]<sp/>-<sp/>fov/2.)/(2.<sp/>*<sp/>np.pi)</highlight></codeline>
-<codeline lineno="168"><highlight class="normal"></highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>make<sp/>sure<sp/>it&apos;s<sp/>wrapped<sp/>properly</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/>theta_index<sp/>=<sp/>np.fmod(theta_index,<sp/>theta_dis)</highlight></codeline>
-<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>(theta_index<sp/>&lt;<sp/>0):</highlight></codeline>
-<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index<sp/>+=<sp/>theta_dis</highlight></codeline>
-<codeline lineno="173"><highlight class="normal"></highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>sweep<sp/>through<sp/>each<sp/>beam</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(0,<sp/>num_beams):</highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>trace<sp/>the<sp/>current<sp/>beam</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="177"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan[i]<sp/>=<sp/>trace_ray(pose[0],<sp/>pose[1],<sp/>theta_index,<sp/>sines,<sp/>cosines,<sp/>eps,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt,<sp/>max_range)</highlight></codeline>
-<codeline lineno="178"><highlight class="normal"></highlight></codeline>
-<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>increment<sp/>the<sp/>beam<sp/>index</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index<sp/>+=<sp/>theta_index_increment</highlight></codeline>
-<codeline lineno="181"><highlight class="normal"></highlight></codeline>
-<codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>make<sp/>sure<sp/>it<sp/>stays<sp/>in<sp/>the<sp/>range<sp/>[0,<sp/>theta_dis)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="183"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>theta_index<sp/>&gt;=<sp/>theta_dis:</highlight></codeline>
-<codeline lineno="184"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index<sp/>-=<sp/>theta_dis</highlight></codeline>
-<codeline lineno="185"><highlight class="normal"></highlight></codeline>
-<codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>scan</highlight></codeline>
-<codeline lineno="187"><highlight class="normal"></highlight></codeline>
-<codeline lineno="188"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="189"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">check_ttc_jit(scan,<sp/>vel,<sp/>scan_angles,<sp/>cosines,<sp/>side_distances,<sp/>ttc_thresh):</highlight></codeline>
-<codeline lineno="190"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="191"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Checks<sp/>the<sp/>iTTC<sp/>of<sp/>each<sp/>beam<sp/>in<sp/>a<sp/>scan<sp/>for<sp/>collision<sp/>with<sp/>environment</highlight></codeline>
-<codeline lineno="192"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="193"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="194"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>(np.ndarray(num_beams,<sp/>)):<sp/>current<sp/>scan<sp/>to<sp/>check</highlight></codeline>
-<codeline lineno="195"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vel<sp/>(float):<sp/>current<sp/>velocity</highlight></codeline>
-<codeline lineno="196"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_angles<sp/>(np.ndarray(num_beams,<sp/>)):<sp/>precomped<sp/>angles<sp/>of<sp/>each<sp/>beam</highlight></codeline>
-<codeline lineno="197"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>cosines<sp/>(np.ndarray(num_beams,<sp/>)):<sp/>precomped<sp/>cosines<sp/>of<sp/>the<sp/>scan<sp/>angles</highlight></codeline>
-<codeline lineno="198"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>side_distances<sp/>(np.ndarray(num_beams,<sp/>)):<sp/>precomped<sp/>distances<sp/>at<sp/>each<sp/>beam<sp/>from<sp/>the<sp/>laser<sp/>to<sp/>the<sp/>sides<sp/>of<sp/>the<sp/>car</highlight></codeline>
-<codeline lineno="199"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ttc_thresh<sp/>(float):<sp/>threshold<sp/>for<sp/>iTTC<sp/>for<sp/>collision</highlight></codeline>
-<codeline lineno="200"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="201"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="202"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>in_collision<sp/>(bool):<sp/>whether<sp/>vehicle<sp/>is<sp/>in<sp/>collision<sp/>with<sp/>environment</highlight></codeline>
-<codeline lineno="203"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>collision_angle<sp/>(float):<sp/>at<sp/>which<sp/>angle<sp/>the<sp/>collision<sp/>happened</highlight></codeline>
-<codeline lineno="204"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>vel<sp/>!=<sp/>0.0:</highlight></codeline>
-<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_beams<sp/>=<sp/>scan.shape[0]</highlight></codeline>
-<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(num_beams):</highlight></codeline>
-<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>proj_vel<sp/>=<sp/>vel*cosines[i]</highlight></codeline>
-<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ttc<sp/>=<sp/>(scan[i]<sp/>-<sp/>side_distances[i])/proj_vel</highlight></codeline>
-<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(ttc<sp/>&lt;<sp/>ttc_thresh)<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>(ttc<sp/>&gt;=<sp/>0.0):</highlight></codeline>
-<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>in_collision<sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>in_collision<sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="215"><highlight class="normal"></highlight></codeline>
-<codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>in_collision</highlight></codeline>
-<codeline lineno="217"><highlight class="normal"></highlight></codeline>
-<codeline lineno="218"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="219"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">cross(v1,<sp/>v2):</highlight></codeline>
-<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="221"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Cross<sp/>product<sp/>of<sp/>two<sp/>2-vectors</highlight></codeline>
-<codeline lineno="222"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="223"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="224"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>v1,<sp/>v2<sp/>(np.ndarray(2,<sp/>)):<sp/>input<sp/>vectors</highlight></codeline>
-<codeline lineno="225"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="226"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="227"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>crossproduct<sp/>(float):<sp/>cross<sp/>product</highlight></codeline>
-<codeline lineno="228"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="229"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>v1[0]*v2[1]-v1[1]*v2[0]</highlight></codeline>
-<codeline lineno="230"><highlight class="normal"></highlight></codeline>
-<codeline lineno="231"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="232"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">are_collinear(pt_a,<sp/>pt_b,<sp/>pt_c):</highlight></codeline>
-<codeline lineno="233"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="234"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Checks<sp/>if<sp/>three<sp/>points<sp/>are<sp/>collinear<sp/>in<sp/>2D</highlight></codeline>
-<codeline lineno="235"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="236"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="237"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pt_a,<sp/>pt_b,<sp/>pt_c<sp/>(np.ndarray(2,<sp/>)):<sp/>points<sp/>to<sp/>check<sp/>in<sp/>2D</highlight></codeline>
-<codeline lineno="238"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="239"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="240"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>col<sp/>(bool):<sp/>whether<sp/>three<sp/>points<sp/>are<sp/>collinear</highlight></codeline>
-<codeline lineno="241"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="242"><highlight class="normal"><sp/><sp/><sp/><sp/>tol<sp/>=<sp/>1e-8</highlight></codeline>
-<codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/>ba<sp/>=<sp/>pt_b<sp/>-<sp/>pt_a</highlight></codeline>
-<codeline lineno="244"><highlight class="normal"><sp/><sp/><sp/><sp/>ca<sp/>=<sp/>pt_a<sp/>-<sp/>pt_c</highlight></codeline>
-<codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/>col<sp/>=<sp/>np.fabs(cross(ba,<sp/>ca))<sp/>&lt;<sp/>tol</highlight></codeline>
-<codeline lineno="246"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>col</highlight></codeline>
-<codeline lineno="247"><highlight class="normal"></highlight></codeline>
-<codeline lineno="248"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="249"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_range(pose,<sp/>beam_theta,<sp/>va,<sp/>vb):</highlight></codeline>
-<codeline lineno="250"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="251"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Get<sp/>the<sp/>distance<sp/>at<sp/>a<sp/>beam<sp/>angle<sp/>to<sp/>the<sp/>vector<sp/>formed<sp/>by<sp/>two<sp/>of<sp/>the<sp/>four<sp/>vertices<sp/>of<sp/>a<sp/>vehicle</highlight></codeline>
-<codeline lineno="252"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="253"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="254"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(np.ndarray(3,<sp/>)):<sp/>pose<sp/>of<sp/>the<sp/>scanning<sp/>vehicle</highlight></codeline>
-<codeline lineno="255"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beam_theta<sp/>(float):<sp/>angle<sp/>of<sp/>the<sp/>current<sp/>beam<sp/>(world<sp/>frame)</highlight></codeline>
-<codeline lineno="256"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>va,<sp/>vb<sp/>(np.ndarray(2,<sp/>)):<sp/>the<sp/>two<sp/>vertices<sp/>forming<sp/>an<sp/>edge</highlight></codeline>
-<codeline lineno="257"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="258"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="259"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>distance<sp/>(float):<sp/>smallest<sp/>distance<sp/>at<sp/>beam<sp/>theta<sp/>from<sp/>scanning<sp/>pose<sp/>to<sp/>edge</highlight></codeline>
-<codeline lineno="260"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="261"><highlight class="normal"><sp/><sp/><sp/><sp/>o<sp/>=<sp/>pose[0:2]</highlight></codeline>
-<codeline lineno="262"><highlight class="normal"><sp/><sp/><sp/><sp/>v1<sp/>=<sp/>o<sp/>-<sp/>va</highlight></codeline>
-<codeline lineno="263"><highlight class="normal"><sp/><sp/><sp/><sp/>v2<sp/>=<sp/>vb<sp/>-<sp/>va</highlight></codeline>
-<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/>v3<sp/>=<sp/>np.array([np.cos(beam_theta<sp/>+<sp/>np.pi/2.),<sp/>np.sin(beam_theta<sp/>+<sp/>np.pi/2.)])</highlight></codeline>
-<codeline lineno="265"><highlight class="normal"></highlight></codeline>
-<codeline lineno="266"><highlight class="normal"><sp/><sp/><sp/><sp/>denom<sp/>=<sp/>v2.dot(v3)</highlight></codeline>
-<codeline lineno="267"><highlight class="normal"><sp/><sp/><sp/><sp/>distance<sp/>=<sp/>np.inf</highlight></codeline>
-<codeline lineno="268"><highlight class="normal"></highlight></codeline>
-<codeline lineno="269"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>np.fabs(denom)<sp/>&gt;<sp/>0.0:</highlight></codeline>
-<codeline lineno="270"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d1<sp/>=<sp/>cross(v2,<sp/>v1)<sp/>/<sp/>denom</highlight></codeline>
-<codeline lineno="271"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>d2<sp/>=<sp/>v1.dot(v3)<sp/>/<sp/>denom</highlight></codeline>
-<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>d1<sp/>&gt;=<sp/>0.0<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>d2<sp/>&gt;=<sp/>0.0<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>d2<sp/>&lt;=<sp/>1.0:</highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>distance<sp/>=<sp/>d1</highlight></codeline>
-<codeline lineno="274"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>are_collinear(o,<sp/>va,<sp/>vb):</highlight></codeline>
-<codeline lineno="275"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>da<sp/>=<sp/>np.linalg.norm(va<sp/>-<sp/>o)</highlight></codeline>
-<codeline lineno="276"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>db<sp/>=<sp/>np.linalg.norm(vb<sp/>-<sp/>o)</highlight></codeline>
-<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>distance<sp/>=<sp/>min(da,<sp/>db)</highlight></codeline>
-<codeline lineno="278"><highlight class="normal"></highlight></codeline>
-<codeline lineno="279"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>distance</highlight></codeline>
-<codeline lineno="280"><highlight class="normal"></highlight></codeline>
-<codeline lineno="281"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="282"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">ray_cast(pose,<sp/>scan,<sp/>scan_angles,<sp/>vertices):</highlight></codeline>
-<codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="284"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Modify<sp/>a<sp/>scan<sp/>by<sp/>ray<sp/>casting<sp/>onto<sp/>another<sp/>agent&apos;s<sp/>four<sp/>vertices</highlight></codeline>
-<codeline lineno="285"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="286"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="287"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(np.ndarray(3,<sp/>)):<sp/>pose<sp/>of<sp/>the<sp/>vehicle<sp/>performing<sp/>scan</highlight></codeline>
-<codeline lineno="288"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>(np.ndarray(num_beams,<sp/>)):<sp/>original<sp/>scan<sp/>to<sp/>modify</highlight></codeline>
-<codeline lineno="289"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_angles<sp/>(np.ndarray(num_beams,<sp/>)):<sp/>corresponding<sp/>beam<sp/>angles</highlight></codeline>
-<codeline lineno="290"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>(np.ndarray(4,<sp/>2)):<sp/>four<sp/>vertices<sp/>of<sp/>a<sp/>vehicle<sp/>pose</highlight></codeline>
-<codeline lineno="291"><highlight class="stringliteral"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="292"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="293"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_scan<sp/>(np.ndarray(num_beams,<sp/>)):<sp/>modified<sp/>scan</highlight></codeline>
-<codeline lineno="294"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="295"><highlight class="normal"><sp/><sp/><sp/><sp/>num_beams<sp/>=<sp/>scan.shape[0]</highlight></codeline>
-<codeline lineno="296"><highlight class="normal"></highlight></codeline>
-<codeline lineno="297"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>pad<sp/>vertices<sp/>so<sp/>loops<sp/>around</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/>looped_vertices<sp/>=<sp/>np.empty((5,<sp/>2))</highlight></codeline>
-<codeline lineno="299"><highlight class="normal"><sp/><sp/><sp/><sp/>looped_vertices[0:4,<sp/>:]<sp/>=<sp/>vertices</highlight></codeline>
-<codeline lineno="300"><highlight class="normal"><sp/><sp/><sp/><sp/>looped_vertices[4,<sp/>:]<sp/>=<sp/>vertices[0,<sp/>:]</highlight></codeline>
-<codeline lineno="301"><highlight class="normal"></highlight></codeline>
-<codeline lineno="302"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>looping<sp/>over<sp/>beams</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="303"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(num_beams):</highlight></codeline>
-<codeline lineno="304"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>looping<sp/>over<sp/>vertices</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="305"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>j<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(4):</highlight></codeline>
-<codeline lineno="306"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>check<sp/>if<sp/>original<sp/>scan<sp/>is<sp/>longer<sp/>than<sp/>ray<sp/>casted<sp/>distance</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="307"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_range<sp/>=<sp/>get_range(pose,<sp/>pose[2]+scan_angles[i],<sp/>looped_vertices[j,:],<sp/>looped_vertices[j+1,:])</highlight></codeline>
-<codeline lineno="308"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>scan_range<sp/>&lt;<sp/>scan[i]:</highlight></codeline>
-<codeline lineno="309"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan[i]<sp/>=<sp/>scan_range</highlight></codeline>
-<codeline lineno="310"><highlight class="normal"></highlight></codeline>
-<codeline lineno="311"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>scan</highlight></codeline>
-<codeline lineno="312"><highlight class="normal"></highlight></codeline>
-<codeline lineno="313" refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(object):</highlight></codeline>
-<codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="315"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>2D<sp/>LIDAR<sp/>scan<sp/>simulator<sp/>class</highlight></codeline>
-<codeline lineno="316"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="317"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Init<sp/>params:</highlight></codeline>
-<codeline lineno="318"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_beams<sp/>(int):<sp/>number<sp/>of<sp/>beams<sp/>in<sp/>the<sp/>scan</highlight></codeline>
-<codeline lineno="319"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fov<sp/>(float):<sp/>field<sp/>of<sp/>view<sp/>of<sp/>the<sp/>laser<sp/>scan</highlight></codeline>
-<codeline lineno="320"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std_dev<sp/>(float,<sp/>default=0.01):<sp/>standard<sp/>deviation<sp/>of<sp/>the<sp/>generated<sp/>whitenoise<sp/>in<sp/>the<sp/>scan</highlight></codeline>
-<codeline lineno="321"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>eps<sp/>(float,<sp/>default=0.0001):<sp/>ray<sp/>tracing<sp/>iteration<sp/>termination<sp/>condition</highlight></codeline>
-<codeline lineno="322"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_dis<sp/>(int,<sp/>default=2000):<sp/>number<sp/>of<sp/>steps<sp/>to<sp/>discretize<sp/>the<sp/>angles<sp/>between<sp/>0<sp/>and<sp/>2pi<sp/>for<sp/>look<sp/>up</highlight></codeline>
-<codeline lineno="323"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>max_range<sp/>(float,<sp/>default=30.0):<sp/>maximum<sp/>range<sp/>of<sp/>the<sp/>laser</highlight></codeline>
-<codeline lineno="324"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>seed<sp/>(int,<sp/>default=123):<sp/>seed<sp/>for<sp/>random<sp/>number<sp/>generator<sp/>for<sp/>the<sp/>whitenoise<sp/>in<sp/>scan</highlight></codeline>
-<codeline lineno="325"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="326"><highlight class="normal"></highlight></codeline>
-<codeline lineno="327"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">__init__(self,<sp/>num_beams,<sp/>fov,<sp/>std_dev=0.01,<sp/>eps=0.0001,<sp/>theta_dis=2000,<sp/>max_range=30.0,<sp/>seed=123):</highlight></codeline>
-<codeline lineno="328"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>initialization<sp/></highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="329"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a8fd8d9f11c319090584c221e51aa4975" kindref="member">num_beams</ref><sp/>=<sp/>num_beams</highlight></codeline>
-<codeline lineno="330"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae57ad1092f12be1967de4853eca1327d" kindref="member">fov</ref><sp/>=<sp/>fov</highlight></codeline>
-<codeline lineno="331"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a2aa400b42babfa82f677356aaa16a0f4" kindref="member">std_dev</ref><sp/>=<sp/>std_dev</highlight></codeline>
-<codeline lineno="332"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a02bf0c833e93628643a20cceeb33b029" kindref="member">eps</ref><sp/>=<sp/>eps</highlight></codeline>
-<codeline lineno="333"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af21e0a0ddd2fc95ec4291db6b33cd591" kindref="member">theta_dis</ref><sp/>=<sp/>theta_dis</highlight></codeline>
-<codeline lineno="334"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af08e1ef6b6397c51fdd3e612dceb17b5" kindref="member">max_range</ref><sp/>=<sp/>max_range</highlight></codeline>
-<codeline lineno="335"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a68ab73d8b055703de7c4eb33ec54520a" kindref="member">angle_increment</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae57ad1092f12be1967de4853eca1327d" kindref="member">fov</ref><sp/>/<sp/>(self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a8fd8d9f11c319090584c221e51aa4975" kindref="member">num_beams</ref><sp/>-<sp/>1)</highlight></codeline>
-<codeline lineno="336"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aabde525512f31433f532639175f50ba3" kindref="member">theta_index_increment</ref><sp/>=<sp/>theta_dis<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a68ab73d8b055703de7c4eb33ec54520a" kindref="member">angle_increment</ref><sp/>/<sp/>(2.<sp/>*<sp/>np.pi)</highlight></codeline>
-<codeline lineno="337"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12a635318c521153364d75b103905673" kindref="member">orig_c</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="338"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedb545195be8c54364e38ccf0c0b3d00" kindref="member">orig_s</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="339"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aecd0f30707bb8c82f59ae48ae2a478c2" kindref="member">orig_x</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="340"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a03e555b505b745f98dfd8a5cc4e1d013" kindref="member">orig_y</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="341"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae2c136fdda428bed3de1f7ab30cda72c" kindref="member">map_height</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="342"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a53beebf974cdf3cb04dac5e4311b2f36" kindref="member">map_width</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="343"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a11d13f00e6d8a08d7b758f420ff464c5" kindref="member">map_resolution</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="344"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a617e6b987673100484c5fdb0c17c9848" kindref="member">dt</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="345"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="346"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>white<sp/>noise<sp/>generator</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="347"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a6a2a4cc31c05bb623699e24df56d8989" kindref="member">rng</ref><sp/>=<sp/>np.random.default_rng(seed=seed)</highlight></codeline>
-<codeline lineno="348"><highlight class="normal"></highlight></codeline>
-<codeline lineno="349"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>precomputing<sp/>corresponding<sp/>cosines<sp/>and<sp/>sines<sp/>of<sp/>the<sp/>angle<sp/>array</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="350"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_arr<sp/>=<sp/>np.linspace(0.0,<sp/>2*np.pi,<sp/>num=theta_dis)</highlight></codeline>
-<codeline lineno="351"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a76ce07e27a1f3efecae222b25bfd3c98" kindref="member">sines</ref><sp/>=<sp/>np.sin(theta_arr)</highlight></codeline>
-<codeline lineno="352"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedc4121c126a5bcda9b5f321cb679208" kindref="member">cosines</ref><sp/>=<sp/>np.cos(theta_arr)</highlight></codeline>
-<codeline lineno="353"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="354"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a989dd691fd4c08d0f18d6c241862d03c" kindref="member">set_map</ref>(self,<sp/>map_path,<sp/>map_ext):</highlight></codeline>
-<codeline lineno="355"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="356"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Set<sp/>the<sp/>bitmap<sp/>of<sp/>the<sp/>scan<sp/>simulator<sp/>by<sp/>path</highlight></codeline>
-<codeline lineno="357"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="358"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="359"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>(str):<sp/>path<sp/>to<sp/>the<sp/>map<sp/>yaml<sp/>file</highlight></codeline>
-<codeline lineno="360"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>(str):<sp/>extension<sp/>(image<sp/>type)<sp/>of<sp/>the<sp/>map<sp/>image</highlight></codeline>
-<codeline lineno="361"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="362"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="363"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>flag<sp/>(bool):<sp/>if<sp/>image<sp/>reading<sp/>and<sp/>loading<sp/>is<sp/>successful</highlight></codeline>
-<codeline lineno="364"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="365"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>do<sp/>we<sp/>open<sp/>the<sp/>option<sp/>to<sp/>flip<sp/>the<sp/>images,<sp/>and<sp/>turn<sp/>rgb<sp/>into<sp/>grayscale?<sp/>or<sp/>specify<sp/>the<sp/>exact<sp/>requirements<sp/>in<sp/>documentation.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="366"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>throw<sp/>error<sp/>if<sp/>image<sp/>specification<sp/>isn&apos;t<sp/>met</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="367"><highlight class="normal"></highlight></codeline>
-<codeline lineno="368"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>image</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="369"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_img_path<sp/>=<sp/>os.path.splitext(map_path)[0]<sp/>+<sp/>map_ext</highlight></codeline>
-<codeline lineno="370"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref><sp/>=<sp/>np.array(Image.open(map_img_path).transpose(Image.FLIP_TOP_BOTTOM))</highlight></codeline>
-<codeline lineno="371"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref>.astype(np.float64)</highlight></codeline>
-<codeline lineno="372"><highlight class="normal"></highlight></codeline>
-<codeline lineno="373"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>grayscale<sp/>-&gt;<sp/>binary</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="374"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref>[self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref><sp/>&lt;=<sp/>128.]<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="375"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref>[self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref><sp/>&gt;<sp/>128.]<sp/>=<sp/>255.</highlight></codeline>
-<codeline lineno="376"><highlight class="normal"></highlight></codeline>
-<codeline lineno="377"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae2c136fdda428bed3de1f7ab30cda72c" kindref="member">map_height</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref>.shape[0]</highlight></codeline>
-<codeline lineno="378"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a53beebf974cdf3cb04dac5e4311b2f36" kindref="member">map_width</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref>.shape[1]</highlight></codeline>
-<codeline lineno="379"><highlight class="normal"></highlight></codeline>
-<codeline lineno="380"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>yaml</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="381"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">with</highlight><highlight class="normal"><sp/>open(map_path,<sp/></highlight><highlight class="stringliteral">&apos;r&apos;</highlight><highlight class="normal">)<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>yaml_stream:</highlight></codeline>
-<codeline lineno="382"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="383"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_metadata<sp/>=<sp/>yaml.safe_load(yaml_stream)</highlight></codeline>
-<codeline lineno="384"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a11d13f00e6d8a08d7b758f420ff464c5" kindref="member">map_resolution</ref><sp/>=<sp/>map_metadata[</highlight><highlight class="stringliteral">&apos;resolution&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="385"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a301f79d5db56a5c5eeb44f33ac3d0b7d" kindref="member">origin</ref><sp/>=<sp/>map_metadata[</highlight><highlight class="stringliteral">&apos;origin&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="386"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal"><sp/>yaml.YAMLError<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>ex:</highlight></codeline>
-<codeline lineno="387"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(ex)</highlight></codeline>
-<codeline lineno="388"><highlight class="normal"></highlight></codeline>
-<codeline lineno="389"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>calculate<sp/>map<sp/>parameters</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="390"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aecd0f30707bb8c82f59ae48ae2a478c2" kindref="member">orig_x</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a301f79d5db56a5c5eeb44f33ac3d0b7d" kindref="member">origin</ref>[0]</highlight></codeline>
-<codeline lineno="391"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a03e555b505b745f98dfd8a5cc4e1d013" kindref="member">orig_y</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a301f79d5db56a5c5eeb44f33ac3d0b7d" kindref="member">origin</ref>[1]</highlight></codeline>
-<codeline lineno="392"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedb545195be8c54364e38ccf0c0b3d00" kindref="member">orig_s</ref><sp/>=<sp/>np.sin(self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a301f79d5db56a5c5eeb44f33ac3d0b7d" kindref="member">origin</ref>[2])</highlight></codeline>
-<codeline lineno="393"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12a635318c521153364d75b103905673" kindref="member">orig_c</ref><sp/>=<sp/>np.cos(self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a301f79d5db56a5c5eeb44f33ac3d0b7d" kindref="member">origin</ref>[2])</highlight></codeline>
-<codeline lineno="394"><highlight class="normal"></highlight></codeline>
-<codeline lineno="395"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>get<sp/>the<sp/>distance<sp/>transform</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="396"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a617e6b987673100484c5fdb0c17c9848" kindref="member">dt</ref><sp/>=<sp/>get_dt(self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af63828a83efca93f50b04324fdd74820" kindref="member">map_img</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a11d13f00e6d8a08d7b758f420ff464c5" kindref="member">map_resolution</ref>)</highlight></codeline>
-<codeline lineno="397"><highlight class="normal"></highlight></codeline>
-<codeline lineno="398"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="399"><highlight class="normal"></highlight></codeline>
-<codeline lineno="400"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12c4b2f39bda5dd3a1ea14e70e4370cc" kindref="member">scan</ref>(self,<sp/>pose):</highlight></codeline>
-<codeline lineno="401"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="402"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Perform<sp/>simulated<sp/>2D<sp/>scan<sp/>by<sp/>pose<sp/>on<sp/>the<sp/>given<sp/>map</highlight></codeline>
-<codeline lineno="403"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="404"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="405"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(numpy.ndarray<sp/>(3,<sp/>)):<sp/>pose<sp/>of<sp/>the<sp/>scan<sp/>frame<sp/>(x,<sp/>y,<sp/>theta)</highlight></codeline>
-<codeline lineno="406"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="407"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="408"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>(numpy.ndarray<sp/>(n,<sp/>)):<sp/>data<sp/>array<sp/>of<sp/>the<sp/>laserscan,<sp/>n=num_beams</highlight></codeline>
-<codeline lineno="409"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="410"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Raises:</highlight></codeline>
-<codeline lineno="411"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ValueError:<sp/>when<sp/>scan<sp/>is<sp/>called<sp/>before<sp/>a<sp/>map<sp/>is<sp/>set</highlight></codeline>
-<codeline lineno="412"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="413"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae2c136fdda428bed3de1f7ab30cda72c" kindref="member">map_height</ref><sp/></highlight><highlight class="keywordflow">is</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="414"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">raise</highlight><highlight class="normal"><sp/>ValueError(</highlight><highlight class="stringliteral">&apos;Map<sp/>is<sp/>not<sp/>set<sp/>for<sp/>scan<sp/>simulator.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="415"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>get_scan(pose,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af21e0a0ddd2fc95ec4291db6b33cd591" kindref="member">theta_dis</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae57ad1092f12be1967de4853eca1327d" kindref="member">fov</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a8fd8d9f11c319090584c221e51aa4975" kindref="member">num_beams</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aabde525512f31433f532639175f50ba3" kindref="member">theta_index_increment</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a76ce07e27a1f3efecae222b25bfd3c98" kindref="member">sines</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedc4121c126a5bcda9b5f321cb679208" kindref="member">cosines</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a02bf0c833e93628643a20cceeb33b029" kindref="member">eps</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aecd0f30707bb8c82f59ae48ae2a478c2" kindref="member">orig_x</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a03e555b505b745f98dfd8a5cc4e1d013" kindref="member">orig_y</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a12a635318c521153364d75b103905673" kindref="member">orig_c</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1aedb545195be8c54364e38ccf0c0b3d00" kindref="member">orig_s</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1ae2c136fdda428bed3de1f7ab30cda72c" kindref="member">map_height</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a53beebf974cdf3cb04dac5e4311b2f36" kindref="member">map_width</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a11d13f00e6d8a08d7b758f420ff464c5" kindref="member">map_resolution</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a617e6b987673100484c5fdb0c17c9848" kindref="member">dt</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1af08e1ef6b6397c51fdd3e612dceb17b5" kindref="member">max_range</ref>)</highlight></codeline>
-<codeline lineno="416"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>noise<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a6a2a4cc31c05bb623699e24df56d8989" kindref="member">rng</ref>.normal(0.,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a2aa400b42babfa82f677356aaa16a0f4" kindref="member">std_dev</ref>,<sp/>size=self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a8fd8d9f11c319090584c221e51aa4975" kindref="member">num_beams</ref>)</highlight></codeline>
-<codeline lineno="417"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>final_scan<sp/>=<sp/>scan<sp/>+<sp/>noise</highlight></codeline>
-<codeline lineno="418"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>final_scan</highlight></codeline>
-<codeline lineno="419"><highlight class="normal"></highlight></codeline>
-<codeline lineno="420"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_increment(self):</highlight></codeline>
-<codeline lineno="421"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d_1a68ab73d8b055703de7c4eb33ec54520a" kindref="member">angle_increment</ref></highlight></codeline>
-<codeline lineno="422"><highlight class="normal"></highlight></codeline>
-<codeline lineno="423"><highlight class="normal"></highlight></codeline>
-<codeline lineno="424"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="425"><highlight class="stringliteral">Unit<sp/>tests<sp/>for<sp/>the<sp/>2D<sp/>scan<sp/>simulator<sp/>class</highlight></codeline>
-<codeline lineno="426"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="427"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="428"><highlight class="stringliteral">Test<sp/>cases:</highlight></codeline>
-<codeline lineno="429"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>1,<sp/>2:<sp/>Comparison<sp/>between<sp/>generated<sp/>scan<sp/>array<sp/>of<sp/>the<sp/>new<sp/>simulator<sp/>and<sp/>the<sp/>legacy<sp/>C++<sp/>simulator,<sp/>generated<sp/>data<sp/>used,<sp/>MSE<sp/>is<sp/>used<sp/>as<sp/>the<sp/>metric</highlight></codeline>
-<codeline lineno="430"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>2.<sp/>FPS<sp/>test,<sp/>should<sp/>be<sp/>greater<sp/>than<sp/>500</highlight></codeline>
-<codeline lineno="431"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="432"><highlight class="normal"></highlight></codeline>
-<codeline lineno="433"><highlight class="normal"></highlight></codeline>
-<codeline lineno="434" refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests" kindref="compound">ScanTests</ref>(unittest.TestCase):</highlight></codeline>
-<codeline lineno="435"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">setUp(self):</highlight></codeline>
-<codeline lineno="436"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>test<sp/>params</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="437"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" kindref="member">num_beams</ref><sp/>=<sp/>1080</highlight></codeline>
-<codeline lineno="438"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" kindref="member">fov</ref><sp/>=<sp/>4.7</highlight></codeline>
-<codeline lineno="439"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="440"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" kindref="member">num_test</ref><sp/>=<sp/>10</highlight></codeline>
-<codeline lineno="441"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a31eb3b8ba28e16af8b39bd39c2254090" kindref="member">test_poses</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" kindref="member">num_test</ref>,<sp/>3))</highlight></codeline>
-<codeline lineno="442"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a31eb3b8ba28e16af8b39bd39c2254090" kindref="member">test_poses</ref>[:,<sp/>2]<sp/>=<sp/>np.linspace(-1.,<sp/>1.,<sp/>num=self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" kindref="member">num_test</ref>)</highlight></codeline>
-<codeline lineno="443"><highlight class="normal"></highlight></codeline>
-<codeline lineno="444"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>legacy<sp/>gym<sp/>data</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="445"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sample_scan<sp/>=<sp/>np.load(</highlight><highlight class="stringliteral">&apos;legacy_scan.npz&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="446"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a2958e581294bc423f58a1df94a030b9e" kindref="member">berlin_scan</ref><sp/>=<sp/>sample_scan[</highlight><highlight class="stringliteral">&apos;berlin&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="447"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1abfb81eedfc585622f28ba8f81443af80" kindref="member">skirk_scan</ref><sp/>=<sp/>sample_scan[</highlight><highlight class="stringliteral">&apos;skirk&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="448"><highlight class="normal"></highlight></codeline>
-<codeline lineno="449"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_map_berlin(self):</highlight></codeline>
-<codeline lineno="450"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim<sp/>=<sp/><ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" kindref="member">num_beams</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" kindref="member">fov</ref>)</highlight></codeline>
-<codeline lineno="451"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_berlin<sp/>=<sp/>np.empty((self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" kindref="member">num_test</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" kindref="member">num_beams</ref>))</highlight></codeline>
-<codeline lineno="452"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../maps/berlin.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="453"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="454"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="455"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>scan<sp/>gen<sp/>loop</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="456"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" kindref="member">num_test</ref>):</highlight></codeline>
-<codeline lineno="457"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>test_pose<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a31eb3b8ba28e16af8b39bd39c2254090" kindref="member">test_poses</ref>[i]</highlight></codeline>
-<codeline lineno="458"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_berlin[i,:]<sp/>=<sp/>scan_sim.scan(test_pose)</highlight></codeline>
-<codeline lineno="459"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>diff<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a2958e581294bc423f58a1df94a030b9e" kindref="member">berlin_scan</ref><sp/>-<sp/>new_berlin</highlight></codeline>
-<codeline lineno="460"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mse<sp/>=<sp/>np.mean(diff**2)</highlight></codeline>
-<codeline lineno="461"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Levine<sp/>distance<sp/>test,<sp/>norm:<sp/>&apos;<sp/>+<sp/>str(norm))</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="462"><highlight class="normal"></highlight></codeline>
-<codeline lineno="463"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>plotting</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="464"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="465"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta<sp/>=<sp/>np.linspace(-self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" kindref="member">fov</ref>/2.,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" kindref="member">fov</ref>/2.,<sp/>num=self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" kindref="member">num_beams</ref>)</highlight></codeline>
-<codeline lineno="466"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.polar(theta,<sp/>new_berlin[1,:],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="467"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.polar(theta,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a2958e581294bc423f58a1df94a030b9e" kindref="member">berlin_scan</ref>[1,:],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="468"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.show()</highlight></codeline>
-<codeline lineno="469"><highlight class="normal"></highlight></codeline>
-<codeline lineno="470"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertLess(mse,<sp/>2.)</highlight></codeline>
-<codeline lineno="471"><highlight class="normal"></highlight></codeline>
-<codeline lineno="472"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_map_skirk(self):</highlight></codeline>
-<codeline lineno="473"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim<sp/>=<sp/><ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" kindref="member">num_beams</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" kindref="member">fov</ref>)</highlight></codeline>
-<codeline lineno="474"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_skirk<sp/>=<sp/>np.empty((self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" kindref="member">num_test</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" kindref="member">num_beams</ref>))</highlight></codeline>
-<codeline lineno="475"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../maps/skirk.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="476"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="477"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="478"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;map<sp/>set&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="479"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>scan<sp/>gen<sp/>loop</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="480"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1ac0c91b73132b25fce081ec9c11c91abe" kindref="member">num_test</ref>):</highlight></codeline>
-<codeline lineno="481"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>test_pose<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a31eb3b8ba28e16af8b39bd39c2254090" kindref="member">test_poses</ref>[i]</highlight></codeline>
-<codeline lineno="482"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_skirk[i,:]<sp/>=<sp/>scan_sim.scan(test_pose)</highlight></codeline>
-<codeline lineno="483"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>diff<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1abfb81eedfc585622f28ba8f81443af80" kindref="member">skirk_scan</ref><sp/>-<sp/>new_skirk</highlight></codeline>
-<codeline lineno="484"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mse<sp/>=<sp/>np.mean(diff**2)</highlight></codeline>
-<codeline lineno="485"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;skirk<sp/>distance<sp/>test,<sp/>mse:<sp/>&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(mse))</highlight></codeline>
-<codeline lineno="486"><highlight class="normal"></highlight></codeline>
-<codeline lineno="487"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>plotting</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="488"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="489"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta<sp/>=<sp/>np.linspace(-self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" kindref="member">fov</ref>/2.,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" kindref="member">fov</ref>/2.,<sp/>num=self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" kindref="member">num_beams</ref>)</highlight></codeline>
-<codeline lineno="490"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.polar(theta,<sp/>new_skirk[1,:],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="491"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.polar(theta,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1abfb81eedfc585622f28ba8f81443af80" kindref="member">skirk_scan</ref>[1,:],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="492"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.show()</highlight></codeline>
-<codeline lineno="493"><highlight class="normal"></highlight></codeline>
-<codeline lineno="494"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertLess(mse,<sp/>2.)</highlight></codeline>
-<codeline lineno="495"><highlight class="normal"></highlight></codeline>
-<codeline lineno="496"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_fps(self):</highlight></codeline>
-<codeline lineno="497"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>scan<sp/>fps<sp/>should<sp/>be<sp/>greater<sp/>than<sp/>500</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="498"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim<sp/>=<sp/><ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1af13ee1aeb4326b4391e30f64ae267ca6" kindref="member">num_beams</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests_1a5377c17def38ead4ba0fc005ba239b3a" kindref="member">fov</ref>)</highlight></codeline>
-<codeline lineno="499"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../maps/skirk.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="500"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="501"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="502"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="503"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>time</highlight></codeline>
-<codeline lineno="504"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="505"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(10000):</highlight></codeline>
-<codeline lineno="506"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_test<sp/>=<sp/>i/10000</highlight></codeline>
-<codeline lineno="507"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>scan_sim.scan(np.array([x_test,<sp/>0.,<sp/>0.]))</highlight></codeline>
-<codeline lineno="508"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>end<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="509"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fps<sp/>=<sp/>10000/(end-start)</highlight></codeline>
-<codeline lineno="510"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;FPS<sp/>test&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="511"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Elapsed<sp/>time:<sp/>&apos;<sp/>+<sp/>str(end-start)<sp/>+<sp/>&apos;<sp/>,<sp/>FPS:<sp/>&apos;<sp/>+<sp/>str(1/fps))</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="512"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertGreater(fps,<sp/>500.)</highlight></codeline>
-<codeline lineno="513"><highlight class="normal"></highlight></codeline>
-<codeline lineno="514"><highlight class="normal"></highlight></codeline>
-<codeline lineno="515"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">main():</highlight></codeline>
-<codeline lineno="516"><highlight class="normal"><sp/><sp/><sp/><sp/>num_beams<sp/>=<sp/>1080</highlight></codeline>
-<codeline lineno="517"><highlight class="normal"><sp/><sp/><sp/><sp/>fov<sp/>=<sp/>4.7</highlight></codeline>
-<codeline lineno="518"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>map_path<sp/>=<sp/>&apos;../envs/maps/berlin.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="519"><highlight class="normal"><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;/home/f1tenth-eval/tunercar/es/maps/map0.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="520"><highlight class="normal"><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="521"><highlight class="normal"><sp/><sp/><sp/><sp/>scan_sim<sp/>=<sp/><ref refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(num_beams,<sp/>fov)</highlight></codeline>
-<codeline lineno="522"><highlight class="normal"><sp/><sp/><sp/><sp/>scan_sim.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="523"><highlight class="normal"><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>scan_sim.scan(np.array([0.,<sp/>0.,<sp/>0.]))</highlight></codeline>
-<codeline lineno="524"><highlight class="normal"></highlight></codeline>
-<codeline lineno="525"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>fps<sp/>test</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="526"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>time</highlight></codeline>
-<codeline lineno="527"><highlight class="normal"><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="528"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(10000):</highlight></codeline>
-<codeline lineno="529"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_test<sp/>=<sp/>i/10000</highlight></codeline>
-<codeline lineno="530"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>scan_sim.scan(np.array([x_test,<sp/>0.,<sp/>0.]))</highlight></codeline>
-<codeline lineno="531"><highlight class="normal"><sp/><sp/><sp/><sp/>end<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="532"><highlight class="normal"><sp/><sp/><sp/><sp/>fps<sp/>=<sp/>(end-start)/10000</highlight></codeline>
-<codeline lineno="533"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;FPS<sp/>test&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="534"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Elapsed<sp/>time:<sp/>&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(end-start)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;<sp/>,<sp/>FPS:<sp/>&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(1/fps))</highlight></codeline>
-<codeline lineno="535"><highlight class="normal"></highlight></codeline>
-<codeline lineno="536"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>visualization</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="537"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="538"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>matplotlib.animation<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>FuncAnimation</highlight></codeline>
-<codeline lineno="539"><highlight class="normal"><sp/><sp/><sp/><sp/>num_iter<sp/>=<sp/>100</highlight></codeline>
-<codeline lineno="540"><highlight class="normal"><sp/><sp/><sp/><sp/>theta<sp/>=<sp/>np.linspace(-fov/2.,<sp/>fov/2.,<sp/>num=num_beams)</highlight></codeline>
-<codeline lineno="541"><highlight class="normal"><sp/><sp/><sp/><sp/>fig<sp/>=<sp/>plt.figure()</highlight></codeline>
-<codeline lineno="542"><highlight class="normal"><sp/><sp/><sp/><sp/>ax<sp/>=<sp/>fig.add_subplot(111,<sp/>projection=</highlight><highlight class="stringliteral">&apos;polar&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="543"><highlight class="normal"><sp/><sp/><sp/><sp/>ax.set_ylim(0,<sp/>31)</highlight></codeline>
-<codeline lineno="544"><highlight class="normal"><sp/><sp/><sp/><sp/>line,<sp/>=<sp/>ax.plot([],<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="545"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">update(i):</highlight></codeline>
-<codeline lineno="546"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>x_ani<sp/>=<sp/>i<sp/>*<sp/>3.<sp/>/<sp/>num_iter</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="547"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_ani<sp/>=<sp/>-i<sp/>*<sp/>2<sp/>*<sp/>np.pi<sp/>/<sp/>num_iter</highlight></codeline>
-<codeline lineno="548"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_ani<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="549"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>current_scan<sp/>=<sp/>scan_sim.scan(np.array([x_ani,<sp/>0.,<sp/>theta_ani]))</highlight></codeline>
-<codeline lineno="550"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(np.max(current_scan))</highlight></codeline>
-<codeline lineno="551"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>line.set_data(theta,<sp/>current_scan)</highlight></codeline>
-<codeline lineno="552"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>line,<sp/></highlight></codeline>
-<codeline lineno="553"><highlight class="normal"><sp/><sp/><sp/><sp/>ani<sp/>=<sp/>FuncAnimation(fig,<sp/>update,<sp/>frames=num_iter,<sp/>blit=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="554"><highlight class="normal"><sp/><sp/><sp/><sp/>plt.show()</highlight></codeline>
-<codeline lineno="555"><highlight class="normal"></highlight></codeline>
-<codeline lineno="556"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>__name__<sp/>==<sp/></highlight><highlight class="stringliteral">&apos;__main__&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="557"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>unittest.main()</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="558"><highlight class="normal"><sp/><sp/><sp/><sp/>main()</highlight></codeline>
-<codeline lineno="559"><highlight class="normal"></highlight></codeline>
-<codeline lineno="560"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>import<sp/>time<sp/></highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="561"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>pt_a<sp/>=<sp/>np.array([1.,<sp/>1.])</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="562"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>pt_b<sp/>=<sp/>np.array([1.,<sp/>2.])</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="563"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>pt_c<sp/>=<sp/>np.array([1.,<sp/>3.])</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="564"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>col<sp/>=<sp/>are_collinear(pt_a,<sp/>pt_b,<sp/>pt_c)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="565"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(col)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="566"><highlight class="normal"></highlight></codeline>
-<codeline lineno="567"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>pose<sp/>=<sp/>np.array([0.,<sp/>0.,<sp/>-1.])</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="568"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>beam_theta<sp/>=<sp/>0.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="569"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>start<sp/>=<sp/>time.time()</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="570"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>dist<sp/>=<sp/>get_range(pose,<sp/>beam_theta,<sp/>pt_a,<sp/>pt_b)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="571"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(dist,<sp/>time.time()-start)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="572"><highlight class="normal"></highlight></codeline>
-<codeline lineno="573"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>num_beams<sp/>=<sp/>1080</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="574"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>scan<sp/>=<sp/>100.*np.ones((num_beams,<sp/>))</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="575"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>scan_angles<sp/>=<sp/>np.linspace(-2.35,<sp/>2.35,<sp/>num=num_beams)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="576"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>assert<sp/>scan.shape[0]<sp/>==<sp/>scan_angles.shape[0]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="577"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>vertices<sp/>=<sp/>np.asarray([[4,11.],[5,5],[9,9],[10,10]])</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="578"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>start<sp/>=<sp/>time.time()</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="579"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>new_scan<sp/>=<sp/>ray_cast(pose,<sp/>scan,<sp/>scan_angles,<sp/>vertices)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="580"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(time.time()-start)</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/legacy__scan__gen_8py.xml b/docs/xml/legacy__scan__gen_8py.xml
deleted file mode 100644
index 35fcecee..00000000
--- a/docs/xml/legacy__scan__gen_8py.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="legacy__scan__gen_8py" kind="file" language="Python">
-    <compoundname>legacy_scan_gen.py</compoundname>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1legacy__scan__gen">f110_gym::unittest::legacy_scan_gen</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="26"><highlight class="stringliteral">Utility<sp/>functions<sp/>to<sp/>generate<sp/>sample<sp/>scan<sp/>data<sp/>from<sp/>legacy<sp/>C++<sp/>backend</highlight></codeline>
-<codeline lineno="27"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="28"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="29"><highlight class="stringliteral">The<sp/>script<sp/>generates<sp/>sample<sp/>scan<sp/>data<sp/>for<sp/>3<sp/>different<sp/>maps<sp/>used<sp/>in<sp/>the<sp/>unit<sp/>tests.</highlight></codeline>
-<codeline lineno="30"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="31"><highlight class="stringliteral">Map<sp/>1:<sp/>Levine</highlight></codeline>
-<codeline lineno="32"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="33"><highlight class="stringliteral">Map<sp/>2:<sp/>Berlin</highlight></codeline>
-<codeline lineno="34"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="35"><highlight class="stringliteral">Map<sp/>3:<sp/>Skirkanich</highlight></codeline>
-<codeline lineno="36"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="37"><highlight class="normal"></highlight></codeline>
-<codeline lineno="38"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="39"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>gym</highlight></codeline>
-<codeline lineno="40"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="41"><highlight class="normal"></highlight></codeline>
-<codeline lineno="42"><highlight class="normal">thetas<sp/>=<sp/>np.linspace(-2.35,<sp/>2.35,<sp/>num=1080)</highlight></codeline>
-<codeline lineno="43"><highlight class="normal"></highlight></codeline>
-<codeline lineno="44"><highlight class="normal"></highlight><highlight class="comment">#<sp/>init</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="45"><highlight class="normal">executable_dir<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../build/&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="46"><highlight class="normal">mass=<sp/>3.74</highlight></codeline>
-<codeline lineno="47"><highlight class="normal">l_r<sp/>=<sp/>0.17145</highlight></codeline>
-<codeline lineno="48"><highlight class="normal">I_z<sp/>=<sp/>0.04712</highlight></codeline>
-<codeline lineno="49"><highlight class="normal">mu<sp/>=<sp/>0.523</highlight></codeline>
-<codeline lineno="50"><highlight class="normal">h_cg<sp/>=<sp/>0.074</highlight></codeline>
-<codeline lineno="51"><highlight class="normal">cs_f<sp/>=<sp/>4.718</highlight></codeline>
-<codeline lineno="52"><highlight class="normal">cs_r<sp/>=<sp/>5.4562</highlight></codeline>
-<codeline lineno="53"><highlight class="normal"></highlight></codeline>
-<codeline lineno="54"><highlight class="normal"></highlight><highlight class="comment">#<sp/>test<sp/>poses</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="55"><highlight class="normal">num_test<sp/>=<sp/>10</highlight></codeline>
-<codeline lineno="56"><highlight class="normal">test_poses<sp/>=<sp/>np.zeros((num_test,<sp/>3))</highlight></codeline>
-<codeline lineno="57"><highlight class="normal">test_poses[:,<sp/>2]<sp/>=<sp/>np.linspace(-1.,<sp/>1.,<sp/>num=num_test)</highlight></codeline>
-<codeline lineno="58"><highlight class="normal"></highlight></codeline>
-<codeline lineno="59"><highlight class="normal"></highlight><highlight class="comment">#<sp/>map<sp/>1:<sp/>vegas</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="60"><highlight class="normal">map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../maps/vegas.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="61"><highlight class="normal">map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="62"><highlight class="normal">racecar_env<sp/>=<sp/>gym.make(</highlight><highlight class="stringliteral">&apos;f110_gym:f110-v0&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="63"><highlight class="normal">racecar_env.init_map(map_path,<sp/>map_ext,<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal">,<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="64"><highlight class="normal">racecar_env.update_params(mu,<sp/>h_cg,<sp/>l_r,<sp/>cs_f,<sp/>cs_r,<sp/>I_z,<sp/>mass,<sp/>executable_dir,<sp/>double_finish=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="65"><highlight class="normal">vegas_scan<sp/>=<sp/>np.empty((num_test,<sp/>1080))</highlight></codeline>
-<codeline lineno="66"><highlight class="normal"></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(test_poses.shape[0]):</highlight></codeline>
-<codeline lineno="67"><highlight class="normal"><sp/><sp/><sp/><sp/>x<sp/>=<sp/>[test_poses[i,<sp/>0],<sp/>200.]</highlight></codeline>
-<codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/>y<sp/>=<sp/>[test_poses[i,<sp/>1],<sp/>200.]</highlight></codeline>
-<codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/>theta<sp/>=<sp/>[test_poses[i,<sp/>2],<sp/>0.]</highlight></codeline>
-<codeline lineno="70"><highlight class="normal"><sp/><sp/><sp/><sp/>obs,_,_,_<sp/>=<sp/>racecar_env.reset({</highlight><highlight class="stringliteral">&apos;x&apos;</highlight><highlight class="normal">:<sp/>x,<sp/></highlight><highlight class="stringliteral">&apos;y&apos;</highlight><highlight class="normal">:<sp/>y,<sp/></highlight><highlight class="stringliteral">&apos;theta&apos;</highlight><highlight class="normal">:<sp/>theta})</highlight></codeline>
-<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/>vegas_scan[i,:]<sp/>=<sp/>obs[</highlight><highlight class="stringliteral">&apos;scans&apos;</highlight><highlight class="normal">][0]</highlight></codeline>
-<codeline lineno="72"><highlight class="normal"></highlight></codeline>
-<codeline lineno="73"><highlight class="normal"></highlight><highlight class="comment">#<sp/>map<sp/>2:<sp/>berlin</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="74"><highlight class="normal">map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../maps/berlin.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="75"><highlight class="normal">map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="76"><highlight class="normal">racecar_env<sp/>=<sp/>gym.make(</highlight><highlight class="stringliteral">&apos;f110_gym:f110-v0&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="77"><highlight class="normal">racecar_env.init_map(map_path,<sp/>map_ext,<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal">,<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="78"><highlight class="normal">racecar_env.update_params(mu,<sp/>h_cg,<sp/>l_r,<sp/>cs_f,<sp/>cs_r,<sp/>I_z,<sp/>mass,<sp/>executable_dir,<sp/>double_finish=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="79"><highlight class="normal">berlin_scan<sp/>=<sp/>np.empty((num_test,<sp/>1080))</highlight></codeline>
-<codeline lineno="80"><highlight class="normal"></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(test_poses.shape[0]):</highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/>x<sp/>=<sp/>[test_poses[i,<sp/>0],<sp/>200.]</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/>y<sp/>=<sp/>[test_poses[i,<sp/>1],<sp/>200.]</highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/>theta<sp/>=<sp/>[test_poses[i,<sp/>2],<sp/>0.]</highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/>obs,_,_,_<sp/>=<sp/>racecar_env.reset({</highlight><highlight class="stringliteral">&apos;x&apos;</highlight><highlight class="normal">:<sp/>x,<sp/></highlight><highlight class="stringliteral">&apos;y&apos;</highlight><highlight class="normal">:<sp/>y,<sp/></highlight><highlight class="stringliteral">&apos;theta&apos;</highlight><highlight class="normal">:<sp/>theta})</highlight></codeline>
-<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/>berlin_scan[i,:]<sp/>=<sp/>obs[</highlight><highlight class="stringliteral">&apos;scans&apos;</highlight><highlight class="normal">][0]</highlight></codeline>
-<codeline lineno="86"><highlight class="normal"></highlight></codeline>
-<codeline lineno="87"><highlight class="normal"></highlight><highlight class="comment">#<sp/>map<sp/>3:<sp/>skirk</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="88"><highlight class="normal">map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../maps/skirk.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="89"><highlight class="normal">map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="90"><highlight class="normal">racecar_env<sp/>=<sp/>gym.make(</highlight><highlight class="stringliteral">&apos;f110_gym:f110-v0&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="91"><highlight class="normal">racecar_env.init_map(map_path,<sp/>map_ext,<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal">,<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="92"><highlight class="normal">racecar_env.update_params(mu,<sp/>h_cg,<sp/>l_r,<sp/>cs_f,<sp/>cs_r,<sp/>I_z,<sp/>mass,<sp/>executable_dir,<sp/>double_finish=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="93"><highlight class="normal">skirk_scan<sp/>=<sp/>np.empty((num_test,<sp/>1080))</highlight></codeline>
-<codeline lineno="94"><highlight class="normal"></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(test_poses.shape[0]):</highlight></codeline>
-<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/>x<sp/>=<sp/>[test_poses[i,<sp/>0],<sp/>200.]</highlight></codeline>
-<codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/>y<sp/>=<sp/>[test_poses[i,<sp/>1],<sp/>200.]</highlight></codeline>
-<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/>theta<sp/>=<sp/>[test_poses[i,<sp/>2],<sp/>0.]</highlight></codeline>
-<codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/>obs,_,_,_<sp/>=<sp/>racecar_env.reset({</highlight><highlight class="stringliteral">&apos;x&apos;</highlight><highlight class="normal">:<sp/>x,<sp/></highlight><highlight class="stringliteral">&apos;y&apos;</highlight><highlight class="normal">:<sp/>y,<sp/></highlight><highlight class="stringliteral">&apos;theta&apos;</highlight><highlight class="normal">:<sp/>theta})</highlight></codeline>
-<codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/>skirk_scan[i,:]<sp/>=<sp/>obs[</highlight><highlight class="stringliteral">&apos;scans&apos;</highlight><highlight class="normal">][0]</highlight></codeline>
-<codeline lineno="100"><highlight class="normal"></highlight></codeline>
-<codeline lineno="101"><highlight class="normal"></highlight><highlight class="comment">#<sp/>package<sp/>data</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="102"><highlight class="normal">np.savez_compressed(</highlight><highlight class="stringliteral">&apos;legacy_scan.npz&apos;</highlight><highlight class="normal">,<sp/>vegas=vegas_scan,<sp/>berlin=berlin_scan,<sp/>skirk=skirk_scan)</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym.xml b/docs/xml/namespacef110__gym.xml
deleted file mode 100644
index 24c2de95..00000000
--- a/docs/xml/namespacef110__gym.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym" kind="namespace" language="Python">
-    <compoundname>f110_gym</compoundname>
-    <innernamespace refid="namespacef110__gym_1_1envs">f110_gym::envs</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1unittest">f110_gym::unittest</innernamespace>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="____init_____8py_1a053265813f14380af323db53967da5f4" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.id</definition>
-        <argsstring></argsstring>
-        <name>id</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/__init__.py" line="3" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/__init__.py" bodystart="3" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="____init_____8py_1a5a9b8348f0cb72c71b742a16e2bd2c4e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym.entry_point</definition>
-        <argsstring></argsstring>
-        <name>entry_point</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/__init__.py" line="4" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/__init__.py" bodystart="4" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/__init__.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1envs.xml b/docs/xml/namespacef110__gym_1_1envs.xml
deleted file mode 100644
index 38c8b891..00000000
--- a/docs/xml/namespacef110__gym_1_1envs.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1envs" kind="namespace" language="Python">
-    <compoundname>f110_gym::envs</compoundname>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1base__classes">f110_gym::envs::base_classes</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1collision__models">f110_gym::envs::collision_models</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1dynamic__models">f110_gym::envs::dynamic_models</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1f110__env">f110_gym::envs::f110_env</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1f110__env__backup">f110_gym::envs::f110_env_backup</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1laser__models">f110_gym::envs::laser_models</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1rendering">f110_gym::envs::rendering</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/__init__.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1envs_1_1base__classes.xml b/docs/xml/namespacef110__gym_1_1envs_1_1base__classes.xml
deleted file mode 100644
index 42a5c630..00000000
--- a/docs/xml/namespacef110__gym_1_1envs_1_1base__classes.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1envs_1_1base__classes" kind="namespace" language="Python">
-    <compoundname>f110_gym::envs::base_classes</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1base__classes_1_1_race_car" prot="public">f110_gym::envs::base_classes::RaceCar</innerclass>
-    <innerclass refid="classf110__gym_1_1envs_1_1base__classes_1_1_simulator" prot="public">f110_gym::envs::base_classes::Simulator</innerclass>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/base_classes.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1envs_1_1collision__models.xml b/docs/xml/namespacef110__gym_1_1envs_1_1collision__models.xml
deleted file mode 100644
index dd847980..00000000
--- a/docs/xml/namespacef110__gym_1_1envs_1_1collision__models.xml
+++ /dev/null
@@ -1,292 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1envs_1_1collision__models" kind="namespace" language="Python">
-    <compoundname>f110_gym::envs::collision_models</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1collision__models_1_1_collision_tests" prot="public">f110_gym::envs::collision_models::CollisionTests</innerclass>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="collision__models_8py_1a3f4abf61f205b8557a851b8dc0c28f80" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::envs::collision_models.cache</definition>
-        <argsstring></argsstring>
-        <name>cache</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="34" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="34" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="func">
-      <memberdef kind="function" id="collision__models_8py_1a7f066238cdec7f7f53b10bcb26647752" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.perpendicular</definition>
-        <argsstring>(pt)</argsstring>
-        <name>perpendicular</name>
-        <param>
-          <type>pt</type>
-          <defname>pt</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Return a 2-vector&apos;s perpendicular vector
-
-Args:
-    pt (np.ndarray, (2,)): input vector
-
-Returns:
-    pt (np.ndarray, (2,)): perpendicular vector
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="35" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="35" bodyend="51"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__models_8py_1a8229a841f9f647231dad0a56b8b0c303" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.tripleProduct</definition>
-        <argsstring>(a, b, c)</argsstring>
-        <name>tripleProduct</name>
-        <param>
-          <type>a</type>
-          <defname>a</defname>
-        </param>
-        <param>
-          <type>b</type>
-          <defname>b</defname>
-        </param>
-        <param>
-          <type>c</type>
-          <defname>c</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Return triple product of three vectors
-
-Args:
-    a, b, c (np.ndarray, (2,)): input vectors
-
-Returns:
-    (np.ndarray, (2,)): triple product
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="52" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="52" bodyend="67"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__models_8py_1ab37064c328f60306b8c34aeb1360f684" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.avgPoint</definition>
-        <argsstring>(vertices)</argsstring>
-        <name>avgPoint</name>
-        <param>
-          <type>vertices</type>
-          <defname>vertices</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Return the average point of multiple vertices
-
-Args:
-    vertices (np.ndarray, (n, 2)): the vertices we want to find avg on
-
-Returns:
-    avg (np.ndarray, (2,)): average point of the vertices
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="68" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="68" bodyend="81"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__models_8py_1a2f317029afdf11c1bd71062939fcabac" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.indexOfFurthestPoint</definition>
-        <argsstring>(vertices, d)</argsstring>
-        <name>indexOfFurthestPoint</name>
-        <param>
-          <type>vertices</type>
-          <defname>vertices</defname>
-        </param>
-        <param>
-          <type>d</type>
-          <defname>d</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Return the index of the vertex furthest away along a direction in the list of vertices
-
-Args:
-    vertices (np.ndarray, (n, 2)): the vertices we want to find avg on
-
-Returns:
-    idx (int): index of the furthest point
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="82" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="82" bodyend="95"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__models_8py_1a03c077ea056df0f1ab45ca392fb79a54" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.support</definition>
-        <argsstring>(vertices1, vertices2, d)</argsstring>
-        <name>support</name>
-        <param>
-          <type>vertices1</type>
-          <defname>vertices1</defname>
-        </param>
-        <param>
-          <type>vertices2</type>
-          <defname>vertices2</defname>
-        </param>
-        <param>
-          <type>d</type>
-          <defname>d</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Minkowski sum support function for GJK
-
-Args:
-    vertices1 (np.ndarray, (n, 2)): vertices of the first body
-    vertices2 (np.ndarray, (n, 2)): vertices of the second body
-    d (np.ndarray, (2, )): direction to find the support along
-
-Returns:
-    support (np.ndarray, (n, 2)): Minkowski sum
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="96" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="96" bodyend="113"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__models_8py_1a653f859844d65a7ae27a6ae46631fea7" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.collision</definition>
-        <argsstring>(vertices1, vertices2)</argsstring>
-        <name>collision</name>
-        <param>
-          <type>vertices1</type>
-          <defname>vertices1</defname>
-        </param>
-        <param>
-          <type>vertices2</type>
-          <defname>vertices2</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>GJK test to see whether two bodies overlap
-
-Args:
-    vertices1 (np.ndarray, (n, 2)): vertices of the first body
-    vertices2 (np.ndarray, (n, 2)): vertices of the second body
-
-Returns:
-    overlap (boolean): True if two bodies collide
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="114" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="114" bodyend="184"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__models_8py_1aa40d5d95afb6a98d4c2766acbf174adb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.collision_multiple</definition>
-        <argsstring>(vertices)</argsstring>
-        <name>collision_multiple</name>
-        <param>
-          <type>vertices</type>
-          <defname>vertices</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Check pair-wise collisions for all provided vertices
-
-Args:
-    vertices (np.ndarray (num_bodies, 4, 2)): all vertices for checking pair-wise collision
-
-Returns:
-    collisions (np.ndarray (num_vertices, )): whether each body is in collision
-    collision_idx (np.ndarray (num_vertices, )): which index of other body is each index&apos;s body is in collision, -1 if not in collision
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="185" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="185" bodyend="218"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__models_8py_1a246a31b398ede8d389c1968899be94ac" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.get_trmtx</definition>
-        <argsstring>(pose)</argsstring>
-        <name>get_trmtx</name>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Get transformation matrix of vehicle frame -&gt; global frame
-
-Args:
-    pose (np.ndarray (3, )): current pose of the vehicle
-
-return:
-    H (np.ndarray (4, 4)): transformation matrix
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="219" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="219" bodyend="237"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__models_8py_1a344bb9ab1af76db9d028fd7f89384231" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.collision_models.get_vertices</definition>
-        <argsstring>(pose, length, width)</argsstring>
-        <name>get_vertices</name>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <param>
-          <type>length</type>
-          <defname>length</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Utility function to return vertices of the car body given pose and size
-
-Args:
-    pose (np.ndarray, (3, )): current world coordinate pose of the vehicle
-    length (float): car length
-    width (float): car width
-
-Returns:
-    vertices (np.ndarray, (4, 2)): corner vertices of the vehicle body
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="238" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" bodystart="238" bodyend="267"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/collision_models.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1envs_1_1dynamic__models.xml b/docs/xml/namespacef110__gym_1_1envs_1_1dynamic__models.xml
deleted file mode 100644
index ef796cc2..00000000
--- a/docs/xml/namespacef110__gym_1_1envs_1_1dynamic__models.xml
+++ /dev/null
@@ -1,566 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1envs_1_1dynamic__models" kind="namespace" language="Python">
-    <compoundname>f110_gym::envs::dynamic_models</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1dynamic__models_1_1_dynamics_test" prot="public">f110_gym::envs::dynamic_models::DynamicsTest</innerclass>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="dynamic__models_8py_1ab8a10c74a1f1dbbfd4adf3d8b264647f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::envs::dynamic_models.cache</definition>
-        <argsstring></argsstring>
-        <name>cache</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="29" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="29" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="func">
-      <memberdef kind="function" id="dynamic__models_8py_1a431101ae67a4c958eb02126cf2ee5e66" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.accl_constraints</definition>
-        <argsstring>(vel, accl, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>accl_constraints</name>
-        <param>
-          <type>vel</type>
-          <defname>vel</defname>
-        </param>
-        <param>
-          <type>accl</type>
-          <defname>accl</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Acceleration constraints, adjusts the acceleration based on constraints
-
-    Args:
-        vel (float): current velocity of the vehicle
-        accl (float): unconstraint desired acceleration
-        v_switch (float): switching velocity (velocity at which the acceleration is no longer able to create wheel spin)
-        a_max (float): maximum allowed acceleration
-        v_min (float): minimum allowed velocity
-        v_max (float): maximum allowed velocity
-
-    Returns:
-        accl (float): adjusted acceleration
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="30" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="30" bodyend="62"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamic__models_8py_1a08dd4fc40f33742219b2798addf0aaf2" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.steering_constraint</definition>
-        <argsstring>(steering_angle, steering_velocity, s_min, s_max, sv_min, sv_max)</argsstring>
-        <name>steering_constraint</name>
-        <param>
-          <type>steering_angle</type>
-          <defname>steering_angle</defname>
-        </param>
-        <param>
-          <type>steering_velocity</type>
-          <defname>steering_velocity</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Steering constraints, adjusts the steering velocity based on constraints
-
-    Args:
-        steering_angle (float): current steering_angle of the vehicle
-        steering_velocity (float): unconstraint desired steering_velocity
-        s_min (float): minimum steering angle
-        s_max (float): maximum steering angle
-        sv_min (float): minimum steering velocity
-        sv_max (float): maximum steering velocity
-
-    Returns:
-        steering_velocity (float): adjusted steering velocity
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="63" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="63" bodyend="90"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamic__models_8py_1a44ce97966ffccf3d94aad7e3a766cf91" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.vehicle_dynamics_ks</definition>
-        <argsstring>(x, u_init, mu, C_Sf, C_Sr, lf, lr, h, m, I, s_min, s_max, sv_min, sv_max, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>vehicle_dynamics_ks</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>u_init</type>
-          <defname>u_init</defname>
-        </param>
-        <param>
-          <type>mu</type>
-          <defname>mu</defname>
-        </param>
-        <param>
-          <type>C_Sf</type>
-          <defname>C_Sf</defname>
-        </param>
-        <param>
-          <type>C_Sr</type>
-          <defname>C_Sr</defname>
-        </param>
-        <param>
-          <type>lf</type>
-          <defname>lf</defname>
-        </param>
-        <param>
-          <type>lr</type>
-          <defname>lr</defname>
-        </param>
-        <param>
-          <type>h</type>
-          <defname>h</defname>
-        </param>
-        <param>
-          <type>m</type>
-          <defname>m</defname>
-        </param>
-        <param>
-          <type>I</type>
-          <defname>I</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Single Track Kinematic Vehicle Dynamics.
-
-    Args:
-        x (numpy.ndarray (3, )): vehicle state vector (x1, x2, x3, x4, x5)
-            x1: x position in global coordinates
-            x2: y position in global coordinates
-            x3: steering angle of front wheels
-            x4: velocity in x direction
-            x5: yaw angle
-        u (numpy.ndarray (2, )): control input vector (u1, u2)
-            u1: steering angle velocity of front wheels
-            u2: longitudinal acceleration 
-
-    Returns:
-        f (numpy.ndarray): right hand side of differential equations
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="91" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="91" bodyend="123"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamic__models_8py_1a2491848cc1db2e106c039da6ed7041c6" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.vehicle_dynamics_st</definition>
-        <argsstring>(x, u_init, mu, C_Sf, C_Sr, lf, lr, h, m, I, s_min, s_max, sv_min, sv_max, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>vehicle_dynamics_st</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>u_init</type>
-          <defname>u_init</defname>
-        </param>
-        <param>
-          <type>mu</type>
-          <defname>mu</defname>
-        </param>
-        <param>
-          <type>C_Sf</type>
-          <defname>C_Sf</defname>
-        </param>
-        <param>
-          <type>C_Sr</type>
-          <defname>C_Sr</defname>
-        </param>
-        <param>
-          <type>lf</type>
-          <defname>lf</defname>
-        </param>
-        <param>
-          <type>lr</type>
-          <defname>lr</defname>
-        </param>
-        <param>
-          <type>h</type>
-          <defname>h</defname>
-        </param>
-        <param>
-          <type>m</type>
-          <defname>m</defname>
-        </param>
-        <param>
-          <type>I</type>
-          <defname>I</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Single Track Dynamic Vehicle Dynamics.
-
-    Args:
-        x (numpy.ndarray (3, )): vehicle state vector (x1, x2, x3, x4, x5, x6, x7)
-            x1: x position in global coordinates
-            x2: y position in global coordinates
-            x3: steering angle of front wheels
-            x4: velocity in x direction
-            x5: yaw angle
-            x6: yaw rate
-            x7: slip angle at vehicle center
-        u (numpy.ndarray (2, )): control input vector (u1, u2)
-            u1: steering angle velocity of front wheels
-            u2: longitudinal acceleration 
-
-    Returns:
-        f (numpy.ndarray): right hand side of differential equations
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="124" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="124" bodyend="178"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamic__models_8py_1acadb3628c14a8cc2a59509833762f9c5" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.pid</definition>
-        <argsstring>(speed, steer, current_speed, current_steer, max_sv, max_a, max_v, min_v)</argsstring>
-        <name>pid</name>
-        <param>
-          <type>speed</type>
-          <defname>speed</defname>
-        </param>
-        <param>
-          <type>steer</type>
-          <defname>steer</defname>
-        </param>
-        <param>
-          <type>current_speed</type>
-          <defname>current_speed</defname>
-        </param>
-        <param>
-          <type>current_steer</type>
-          <defname>current_steer</defname>
-        </param>
-        <param>
-          <type>max_sv</type>
-          <defname>max_sv</defname>
-        </param>
-        <param>
-          <type>max_a</type>
-          <defname>max_a</defname>
-        </param>
-        <param>
-          <type>max_v</type>
-          <defname>max_v</defname>
-        </param>
-        <param>
-          <type>min_v</type>
-          <defname>min_v</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Basic controller for speed/steer -&gt; accl./steer vel.
-
-    Args:
-        speed (float): desired input speed
-        steer (float): desired input steering angle
-
-    Returns:
-        accl (float): desired input acceleration
-        sv (float): desired input steering velocity
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="179" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="179" bodyend="222"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamic__models_8py_1a57b901e4cb2e0ad2ff8df6ad2b6035b1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.func_KS</definition>
-        <argsstring>(x, t, u, mu, C_Sf, C_Sr, lf, lr, h, m, I, s_min, s_max, sv_min, sv_max, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>func_KS</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>t</type>
-          <defname>t</defname>
-        </param>
-        <param>
-          <type>u</type>
-          <defname>u</defname>
-        </param>
-        <param>
-          <type>mu</type>
-          <defname>mu</defname>
-        </param>
-        <param>
-          <type>C_Sf</type>
-          <defname>C_Sf</defname>
-        </param>
-        <param>
-          <type>C_Sr</type>
-          <defname>C_Sr</defname>
-        </param>
-        <param>
-          <type>lf</type>
-          <defname>lf</defname>
-        </param>
-        <param>
-          <type>lr</type>
-          <defname>lr</defname>
-        </param>
-        <param>
-          <type>h</type>
-          <defname>h</defname>
-        </param>
-        <param>
-          <type>m</type>
-          <defname>m</defname>
-        </param>
-        <param>
-          <type>I</type>
-          <defname>I</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="223" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="223" bodyend="226"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamic__models_8py_1a99b883cf5f7f438b805dcbc2cff6b4ef" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.dynamic_models.func_ST</definition>
-        <argsstring>(x, t, u, mu, C_Sf, C_Sr, lf, lr, h, m, I, s_min, s_max, sv_min, sv_max, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>func_ST</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>t</type>
-          <defname>t</defname>
-        </param>
-        <param>
-          <type>u</type>
-          <defname>u</defname>
-        </param>
-        <param>
-          <type>mu</type>
-          <defname>mu</defname>
-        </param>
-        <param>
-          <type>C_Sf</type>
-          <defname>C_Sf</defname>
-        </param>
-        <param>
-          <type>C_Sr</type>
-          <defname>C_Sr</defname>
-        </param>
-        <param>
-          <type>lf</type>
-          <defname>lf</defname>
-        </param>
-        <param>
-          <type>lr</type>
-          <defname>lr</defname>
-        </param>
-        <param>
-          <type>h</type>
-          <defname>h</defname>
-        </param>
-        <param>
-          <type>m</type>
-          <defname>m</defname>
-        </param>
-        <param>
-          <type>I</type>
-          <defname>I</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="227" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" bodystart="227" bodyend="230"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/dynamic_models.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1envs_1_1f110__env.xml b/docs/xml/namespacef110__gym_1_1envs_1_1f110__env.xml
deleted file mode 100644
index 8988d293..00000000
--- a/docs/xml/namespacef110__gym_1_1envs_1_1f110__env.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1envs_1_1f110__env" kind="namespace" language="Python">
-    <compoundname>f110_gym::envs::f110_env</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1f110__env_1_1_f110_env" prot="public">f110_gym::envs::f110_env::F110Env</innerclass>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="f110__env_8py_1a118efb91786ec1caaf67464c1d4d4962" prot="public" static="no" mutable="no">
-        <type>int</type>
-        <definition>int f110_gym::envs::f110_env.VIDEO_W</definition>
-        <argsstring></argsstring>
-        <name>VIDEO_W</name>
-        <initializer>=  600</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="48" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="48" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="f110__env_8py_1ac753c679a3d5a173c8ad99d14c5fc47b" prot="public" static="no" mutable="no">
-        <type>int</type>
-        <definition>int f110_gym::envs::f110_env.VIDEO_H</definition>
-        <argsstring></argsstring>
-        <name>VIDEO_H</name>
-        <initializer>=  400</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="49" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="49" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="f110__env_8py_1a72a6be22a508a795985d604b0add267d" prot="public" static="no" mutable="no">
-        <type>int</type>
-        <definition>int f110_gym::envs::f110_env.WINDOW_W</definition>
-        <argsstring></argsstring>
-        <name>WINDOW_W</name>
-        <initializer>=  1000</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="50" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="50" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="f110__env_8py_1a9a35e98c8a439e76515bdcd473fd9e2d" prot="public" static="no" mutable="no">
-        <type>int</type>
-        <definition>int f110_gym::envs::f110_env.WINDOW_H</definition>
-        <argsstring></argsstring>
-        <name>WINDOW_H</name>
-        <initializer>=  800</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="51" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" bodystart="51" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1envs_1_1f110__env__backup.xml b/docs/xml/namespacef110__gym_1_1envs_1_1f110__env__backup.xml
deleted file mode 100644
index d8f723c9..00000000
--- a/docs/xml/namespacef110__gym_1_1envs_1_1f110__env__backup.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1envs_1_1f110__env__backup" kind="namespace" language="Python">
-    <compoundname>f110_gym::envs::f110_env_backup</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1f110__env__backup_1_1_f110_env" prot="public">f110_gym::envs::f110_env_backup::F110Env</innerclass>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/f110_env_backup.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1envs_1_1laser__models.xml b/docs/xml/namespacef110__gym_1_1envs_1_1laser__models.xml
deleted file mode 100644
index f957991a..00000000
--- a/docs/xml/namespacef110__gym_1_1envs_1_1laser__models.xml
+++ /dev/null
@@ -1,555 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1envs_1_1laser__models" kind="namespace" language="Python">
-    <compoundname>f110_gym::envs::laser_models</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_simulator2_d" prot="public">f110_gym::envs::laser_models::ScanSimulator2D</innerclass>
-    <innerclass refid="classf110__gym_1_1envs_1_1laser__models_1_1_scan_tests" prot="public">f110_gym::envs::laser_models::ScanTests</innerclass>
-      <sectiondef kind="func">
-      <memberdef kind="function" id="laser__models_8py_1a7898aaf5a3f1aa50a77e241bcc99812f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.get_dt</definition>
-        <argsstring>(bitmap, resolution)</argsstring>
-        <name>get_dt</name>
-        <param>
-          <type>bitmap</type>
-          <defname>bitmap</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Distance transformation, returns the distance matrix from the input bitmap.
-Uses scipy.ndimage, cannot be JITted.
-
-    Args:
-        bitmap (numpy.ndarray, (n, m)): input binary bitmap of the environment, where 0 is obstacles, and 255 (or anything &gt; 0) is freespace
-        resolution (float): resolution of the input bitmap (m/cell)
-
-    Returns:
-        dt (numpy.ndarray, (n, m)): output distance matrix, where each cell has the corresponding distance (in meters) to the closest obstacle
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="40" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="40" bodyend="55"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1a9e392a639b2b55df60f828ae13a88fef" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.xy_2_rc</definition>
-        <argsstring>(x, y, orig_x, orig_y, orig_c, orig_s, height, width, resolution)</argsstring>
-        <name>xy_2_rc</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>orig_x</type>
-          <defname>orig_x</defname>
-        </param>
-        <param>
-          <type>orig_y</type>
-          <defname>orig_y</defname>
-        </param>
-        <param>
-          <type>orig_c</type>
-          <defname>orig_c</defname>
-        </param>
-        <param>
-          <type>orig_s</type>
-          <defname>orig_s</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Translate (x, y) coordinate into (r, c) in the matrix
-
-    Args:
-        x (float): coordinate in x (m)
-        y (float): coordinate in y (m)
-        orig_x (float): x coordinate of the map origin (m)
-        orig_y (float): y coordinate of the map origin (m)
-    
-    Returns:
-        r (int): row number in the transform matrix of the given point
-        c (int): column number in the transform matrix of the given point
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="56" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="56" bodyend="88"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1adc41ff0ca728f48f7bbc304eae86445f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.distance_transform</definition>
-        <argsstring>(x, y, orig_x, orig_y, orig_c, orig_s, height, width, resolution, dt)</argsstring>
-        <name>distance_transform</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>orig_x</type>
-          <defname>orig_x</defname>
-        </param>
-        <param>
-          <type>orig_y</type>
-          <defname>orig_y</defname>
-        </param>
-        <param>
-          <type>orig_c</type>
-          <defname>orig_c</defname>
-        </param>
-        <param>
-          <type>orig_s</type>
-          <defname>orig_s</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <param>
-          <type>dt</type>
-          <defname>dt</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Look up corresponding distance in the distance matrix
-
-    Args:
-        x (float): x coordinate of the lookup point
-        y (float): y coordinate of the lookup point
-        orig_x (float): x coordinate of the map origin (m)
-        orig_y (float): y coordinate of the map origin (m)
-
-    Returns:
-        distance (float): corresponding shortest distance to obstacle in meters
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="89" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="89" bodyend="106"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1a5a9617e07fa391720bfa8e48de4e29ea" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.trace_ray</definition>
-        <argsstring>(x, y, theta_index, sines, cosines, eps, orig_x, orig_y, orig_c, orig_s, height, width, resolution, dt, max_range)</argsstring>
-        <name>trace_ray</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>theta_index</type>
-          <defname>theta_index</defname>
-        </param>
-        <param>
-          <type>sines</type>
-          <defname>sines</defname>
-        </param>
-        <param>
-          <type>cosines</type>
-          <defname>cosines</defname>
-        </param>
-        <param>
-          <type>eps</type>
-          <defname>eps</defname>
-        </param>
-        <param>
-          <type>orig_x</type>
-          <defname>orig_x</defname>
-        </param>
-        <param>
-          <type>orig_y</type>
-          <defname>orig_y</defname>
-        </param>
-        <param>
-          <type>orig_c</type>
-          <defname>orig_c</defname>
-        </param>
-        <param>
-          <type>orig_s</type>
-          <defname>orig_s</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <param>
-          <type>dt</type>
-          <defname>dt</defname>
-        </param>
-        <param>
-          <type>max_range</type>
-          <defname>max_range</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Find the length of a specific ray at a specific scan angle theta
-Purely math calculation and loops, should be JITted.
-
-    Args:
-        x (float): current x coordinate of the ego (scan) frame
-        y (float): current y coordinate of the ego (scan) frame
-        theta_index(int): current index of the scan beam in the scan range
-        sines (numpy.ndarray (n, )): pre-calculated sines of the angle array
-        cosines (numpy.ndarray (n, )): pre-calculated cosines ...
-
-    Returns:
-        total_distance (float): the distance to first obstacle on the current scan beam
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="107" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="107" bodyend="148"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1a479dfd891b317f6625c5075b0aa73579" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.get_scan</definition>
-        <argsstring>(pose, theta_dis, fov, num_beams, theta_index_increment, sines, cosines, eps, orig_x, orig_y, orig_c, orig_s, height, width, resolution, dt, max_range)</argsstring>
-        <name>get_scan</name>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <param>
-          <type>theta_dis</type>
-          <defname>theta_dis</defname>
-        </param>
-        <param>
-          <type>fov</type>
-          <defname>fov</defname>
-        </param>
-        <param>
-          <type>num_beams</type>
-          <defname>num_beams</defname>
-        </param>
-        <param>
-          <type>theta_index_increment</type>
-          <defname>theta_index_increment</defname>
-        </param>
-        <param>
-          <type>sines</type>
-          <defname>sines</defname>
-        </param>
-        <param>
-          <type>cosines</type>
-          <defname>cosines</defname>
-        </param>
-        <param>
-          <type>eps</type>
-          <defname>eps</defname>
-        </param>
-        <param>
-          <type>orig_x</type>
-          <defname>orig_x</defname>
-        </param>
-        <param>
-          <type>orig_y</type>
-          <defname>orig_y</defname>
-        </param>
-        <param>
-          <type>orig_c</type>
-          <defname>orig_c</defname>
-        </param>
-        <param>
-          <type>orig_s</type>
-          <defname>orig_s</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <param>
-          <type>dt</type>
-          <defname>dt</defname>
-        </param>
-        <param>
-          <type>max_range</type>
-          <defname>max_range</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Perform the scan for each discretized angle of each beam of the laser, loop heavy, should be JITted
-
-    Args:
-        pose (numpy.ndarray(3, )): current pose of the scan frame in the map
-        theta_dis (int): number of steps to discretize the angles between 0 and 2pi for look up
-        fov (float): field of view of the laser scan
-        num_beams (int): number of beams in the scan
-        theta_index_increment (float): increment between angle indices after discretization
-
-    Returns:
-        scan (numpy.ndarray(n, )): resulting laser scan at the pose, n=num_beams
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="149" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="149" bodyend="188"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1abb054b963ce9a2b09aaf27d5b7c94776" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.check_ttc_jit</definition>
-        <argsstring>(scan, vel, scan_angles, cosines, side_distances, ttc_thresh)</argsstring>
-        <name>check_ttc_jit</name>
-        <param>
-          <type>scan</type>
-          <defname>scan</defname>
-        </param>
-        <param>
-          <type>vel</type>
-          <defname>vel</defname>
-        </param>
-        <param>
-          <type>scan_angles</type>
-          <defname>scan_angles</defname>
-        </param>
-        <param>
-          <type>cosines</type>
-          <defname>cosines</defname>
-        </param>
-        <param>
-          <type>side_distances</type>
-          <defname>side_distances</defname>
-        </param>
-        <param>
-          <type>ttc_thresh</type>
-          <defname>ttc_thresh</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Checks the iTTC of each beam in a scan for collision with environment
-
-Args:
-    scan (np.ndarray(num_beams, )): current scan to check
-    vel (float): current velocity
-    scan_angles (np.ndarray(num_beams, )): precomped angles of each beam
-    cosines (np.ndarray(num_beams, )): precomped cosines of the scan angles
-    side_distances (np.ndarray(num_beams, )): precomped distances at each beam from the laser to the sides of the car
-    ttc_thresh (float): threshold for iTTC for collision
-
-Returns:
-    in_collision (bool): whether vehicle is in collision with environment
-    collision_angle (float): at which angle the collision happened
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="189" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="189" bodyend="218"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1a63c2d60d1bb4f8399198bec4b423034b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.cross</definition>
-        <argsstring>(v1, v2)</argsstring>
-        <name>cross</name>
-        <param>
-          <type>v1</type>
-          <defname>v1</defname>
-        </param>
-        <param>
-          <type>v2</type>
-          <defname>v2</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Cross product of two 2-vectors
-
-Args:
-    v1, v2 (np.ndarray(2, )): input vectors
-
-Returns:
-    crossproduct (float): cross product
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="219" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="219" bodyend="231"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1a3ca13ea1c8037713bf309a354c614cc3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.are_collinear</definition>
-        <argsstring>(pt_a, pt_b, pt_c)</argsstring>
-        <name>are_collinear</name>
-        <param>
-          <type>pt_a</type>
-          <defname>pt_a</defname>
-        </param>
-        <param>
-          <type>pt_b</type>
-          <defname>pt_b</defname>
-        </param>
-        <param>
-          <type>pt_c</type>
-          <defname>pt_c</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Checks if three points are collinear in 2D
-
-Args:
-    pt_a, pt_b, pt_c (np.ndarray(2, )): points to check in 2D
-
-Returns:
-    col (bool): whether three points are collinear
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="232" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="232" bodyend="248"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1a1bc7982bd73954850a7b9c3c53d98b0f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.get_range</definition>
-        <argsstring>(pose, beam_theta, va, vb)</argsstring>
-        <name>get_range</name>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <param>
-          <type>beam_theta</type>
-          <defname>beam_theta</defname>
-        </param>
-        <param>
-          <type>va</type>
-          <defname>va</defname>
-        </param>
-        <param>
-          <type>vb</type>
-          <defname>vb</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Get the distance at a beam angle to the vector formed by two of the four vertices of a vehicle
-
-Args:
-    pose (np.ndarray(3, )): pose of the scanning vehicle
-    beam_theta (float): angle of the current beam (world frame)
-    va, vb (np.ndarray(2, )): the two vertices forming an edge
-
-Returns:
-    distance (float): smallest distance at beam theta from scanning pose to edge
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="249" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="249" bodyend="281"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1ad4250e0339dc216ca15099bcfca8eb07" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.ray_cast</definition>
-        <argsstring>(pose, scan, scan_angles, vertices)</argsstring>
-        <name>ray_cast</name>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <param>
-          <type>scan</type>
-          <defname>scan</defname>
-        </param>
-        <param>
-          <type>scan_angles</type>
-          <defname>scan_angles</defname>
-        </param>
-        <param>
-          <type>vertices</type>
-          <defname>vertices</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Modify a scan by ray casting onto another agent&apos;s four vertices
-
-Args:
-    pose (np.ndarray(3, )): pose of the vehicle performing scan
-    scan (np.ndarray(num_beams, )): original scan to modify
-    scan_angles (np.ndarray(num_beams, )): corresponding beam angles
-    vertices (np.ndarray(4, 2)): four vertices of a vehicle pose
-
-Returns:
-    new_scan (np.ndarray(num_beams, )): modified scan
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="282" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="282" bodyend="312"/>
-      </memberdef>
-      <memberdef kind="function" id="laser__models_8py_1a369f6a199d7e45afbbeafa1a04879dd3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.envs.laser_models.main</definition>
-        <argsstring>()</argsstring>
-        <name>main</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="515" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" bodystart="515" bodyend="555"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/laser_models.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1envs_1_1rendering.xml b/docs/xml/namespacef110__gym_1_1envs_1_1rendering.xml
deleted file mode 100644
index f29085fc..00000000
--- a/docs/xml/namespacef110__gym_1_1envs_1_1rendering.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1envs_1_1rendering" kind="namespace" language="Python">
-    <compoundname>f110_gym::envs::rendering</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer" prot="public">f110_gym::envs::rendering::EnvRenderer</innerclass>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="rendering_8py_1adcb93d33a17b4cc05e3a17a79389ca9f" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>float f110_gym::envs::rendering.ZOOM_IN_FACTOR</definition>
-        <argsstring></argsstring>
-        <name>ZOOM_IN_FACTOR</name>
-        <initializer>=  1.2</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="43" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="43" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="rendering_8py_1aacc77603b42e49b0cfad2a0d5156d033" prot="public" static="no" mutable="no">
-        <type>int</type>
-        <definition>int f110_gym::envs::rendering.ZOOM_OUT_FACTOR</definition>
-        <argsstring></argsstring>
-        <name>ZOOM_OUT_FACTOR</name>
-        <initializer>=  1/ZOOM_IN_FACTOR</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="44" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="44" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="rendering_8py_1a15030f21ebdcc600d4cdcba2cb4efdbb" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>float f110_gym::envs::rendering.CAR_LENGTH</definition>
-        <argsstring></argsstring>
-        <name>CAR_LENGTH</name>
-        <initializer>=  0.58</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="47" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="47" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="rendering_8py_1abad083fa3d5353b3326b71aedf095e69" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>float f110_gym::envs::rendering.CAR_WIDTH</definition>
-        <argsstring></argsstring>
-        <name>CAR_WIDTH</name>
-        <initializer>=  0.31</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="48" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" bodystart="48" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1unittest.xml b/docs/xml/namespacef110__gym_1_1unittest.xml
deleted file mode 100644
index 0c08ffdf..00000000
--- a/docs/xml/namespacef110__gym_1_1unittest.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1unittest" kind="namespace" language="Python">
-    <compoundname>f110_gym::unittest</compoundname>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1collision__checks">f110_gym::unittest::collision_checks</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1dynamics__test">f110_gym::unittest::dynamics_test</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1legacy__scan__gen">f110_gym::unittest::legacy_scan_gen</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1pyglet__test">f110_gym::unittest::pyglet_test</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1pyglet__test__camera">f110_gym::unittest::pyglet_test_camera</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1random__trackgen">f110_gym::unittest::random_trackgen</innernamespace>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1scan__sim">f110_gym::unittest::scan_sim</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/__init__.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1unittest_1_1collision__checks.xml b/docs/xml/namespacef110__gym_1_1unittest_1_1collision__checks.xml
deleted file mode 100644
index e8ac1328..00000000
--- a/docs/xml/namespacef110__gym_1_1unittest_1_1collision__checks.xml
+++ /dev/null
@@ -1,266 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1unittest_1_1collision__checks" kind="namespace" language="Python">
-    <compoundname>f110_gym::unittest::collision_checks</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1collision__checks_1_1_collision_tests" prot="public">f110_gym::unittest::collision_checks::CollisionTests</innerclass>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="collision__checks_8py_1a01c6f10da145f4b9db113a17360e45ed" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::collision_checks.cache</definition>
-        <argsstring></argsstring>
-        <name>cache</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="34" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="34" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="func">
-      <memberdef kind="function" id="collision__checks_8py_1a1718aedaf888fb6bcc90e1814732e56e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.perpendicular</definition>
-        <argsstring>(pt)</argsstring>
-        <name>perpendicular</name>
-        <param>
-          <type>pt</type>
-          <defname>pt</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Return a 2-vector&apos;s perpendicular vector
-
-Args:
-    pt (np.ndarray, (2,)): input vector
-
-Returns:
-    pt (np.ndarray, (2,)): perpendicular vector
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="35" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="35" bodyend="51"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__checks_8py_1a662cb9cf2ce661a420f4aa6170856959" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.tripleProduct</definition>
-        <argsstring>(a, b, c)</argsstring>
-        <name>tripleProduct</name>
-        <param>
-          <type>a</type>
-          <defname>a</defname>
-        </param>
-        <param>
-          <type>b</type>
-          <defname>b</defname>
-        </param>
-        <param>
-          <type>c</type>
-          <defname>c</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Return triple product of three vectors
-
-Args:
-    a, b, c (np.ndarray, (2,)): input vectors
-
-Returns:
-    (np.ndarray, (2,)): triple product
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="52" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="52" bodyend="67"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__checks_8py_1ace038ce6c1efa0f8884f63d84a1a8e9d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.avgPoint</definition>
-        <argsstring>(vertices)</argsstring>
-        <name>avgPoint</name>
-        <param>
-          <type>vertices</type>
-          <defname>vertices</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Return the average point of multiple vertices
-
-Args:
-    vertices (np.ndarray, (n, 2)): the vertices we want to find avg on
-
-Returns:
-    avg (np.ndarray, (2,)): average point of the vertices
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="68" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="68" bodyend="81"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__checks_8py_1afed234ffedde9f63c687aabc78ecf191" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.indexOfFurthestPoint</definition>
-        <argsstring>(vertices, d)</argsstring>
-        <name>indexOfFurthestPoint</name>
-        <param>
-          <type>vertices</type>
-          <defname>vertices</defname>
-        </param>
-        <param>
-          <type>d</type>
-          <defname>d</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Return the index of the vertex furthest away along a direction in the list of vertices
-
-Args:
-    vertices (np.ndarray, (n, 2)): the vertices we want to find avg on
-
-Returns:
-    idx (int): index of the furthest point
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="82" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="82" bodyend="95"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__checks_8py_1a2c384f130b286e7c1d1dc3dd7b04dcfc" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.support</definition>
-        <argsstring>(vertices1, vertices2, d)</argsstring>
-        <name>support</name>
-        <param>
-          <type>vertices1</type>
-          <defname>vertices1</defname>
-        </param>
-        <param>
-          <type>vertices2</type>
-          <defname>vertices2</defname>
-        </param>
-        <param>
-          <type>d</type>
-          <defname>d</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Minkowski sum support function for GJK
-
-Args:
-    vertices1 (np.ndarray, (n, 2)): vertices of the first body
-    vertices2 (np.ndarray, (n, 2)): vertices of the second body
-    d (np.ndarray, (2, )): direction to find the support along
-
-Returns:
-    support (np.ndarray, (n, 2)): Minkowski sum
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="96" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="96" bodyend="113"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__checks_8py_1ae6955c70ffe9171e85ef49d48c0ffbfc" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.collision</definition>
-        <argsstring>(vertices1, vertices2)</argsstring>
-        <name>collision</name>
-        <param>
-          <type>vertices1</type>
-          <defname>vertices1</defname>
-        </param>
-        <param>
-          <type>vertices2</type>
-          <defname>vertices2</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>GJK test to see whether two bodies overlap
-
-Args:
-    vertices1 (np.ndarray, (n, 2)): vertices of the first body
-    vertices2 (np.ndarray, (n, 2)): vertices of the second body
-
-Returns:
-    overlap (boolean): True if two bodies collide
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="114" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="114" bodyend="188"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__checks_8py_1a696ebc81dbf2bb5f08dd7a8bc9aca517" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.get_trmtx</definition>
-        <argsstring>(pose)</argsstring>
-        <name>get_trmtx</name>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Get transformation matrix of vehicle frame -&gt; global frame
-
-Args:
-    pose (np.ndarray (3, )): current pose of the vehicle
-
-return:
-    H (np.ndarray (4, 4)): transformation matrix
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="189" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="189" bodyend="207"/>
-      </memberdef>
-      <memberdef kind="function" id="collision__checks_8py_1aafb53c9e57ec13d9b34ec1cc4a4e6197" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.collision_checks.get_vertices</definition>
-        <argsstring>(pose, length, width)</argsstring>
-        <name>get_vertices</name>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <param>
-          <type>length</type>
-          <defname>length</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Utility function to return vertices of the car body given pose and size
-
-Args:
-    pose (np.ndarray, (3, )): current world coordinate pose of the vehicle
-    length (float): car length
-    width (float): car width
-
-Returns:
-    vertices (np.ndarray, (4, 2)): corner vertices of the vehicle body
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="208" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" bodystart="208" bodyend="237"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/collision_checks.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1unittest_1_1dynamics__test.xml b/docs/xml/namespacef110__gym_1_1unittest_1_1dynamics__test.xml
deleted file mode 100644
index b45d2ef7..00000000
--- a/docs/xml/namespacef110__gym_1_1unittest_1_1dynamics__test.xml
+++ /dev/null
@@ -1,542 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1unittest_1_1dynamics__test" kind="namespace" language="Python">
-    <compoundname>f110_gym::unittest::dynamics_test</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1dynamics__test_1_1_dynamics_test" prot="public">f110_gym::unittest::dynamics_test::DynamicsTest</innerclass>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="dynamics__test_8py_1a158e09a987de07230ae61a296fd35d65" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::dynamics_test.cache</definition>
-        <argsstring></argsstring>
-        <name>cache</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="29" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="29" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="func">
-      <memberdef kind="function" id="dynamics__test_8py_1aec9c2f3b2629f179fad25db2d240924a" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.accl_constraints</definition>
-        <argsstring>(vel, accl, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>accl_constraints</name>
-        <param>
-          <type>vel</type>
-          <defname>vel</defname>
-        </param>
-        <param>
-          <type>accl</type>
-          <defname>accl</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Acceleration constraints, adjusts the acceleration based on constraints
-
-    Args:
-        vel (float): current velocity of the vehicle
-        accl (float): unconstraint desired acceleration
-        v_switch (float): switching velocity (velocity at which the acceleration is no longer able to create wheel spin)
-        a_max (float): maximum allowed acceleration
-        v_min (float): minimum allowed velocity
-        v_max (float): maximum allowed velocity
-
-    Returns:
-        accl (float): adjusted acceleration
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="30" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="30" bodyend="62"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamics__test_8py_1a179f2b21768e81215cc2298cdd226c6e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.steering_constraint</definition>
-        <argsstring>(steering_angle, steering_velocity, s_min, s_max, sv_min, sv_max)</argsstring>
-        <name>steering_constraint</name>
-        <param>
-          <type>steering_angle</type>
-          <defname>steering_angle</defname>
-        </param>
-        <param>
-          <type>steering_velocity</type>
-          <defname>steering_velocity</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Steering constraints, adjusts the steering velocity based on constraints
-
-    Args:
-        steering_angle (float): current steering_angle of the vehicle
-        steering_velocity (float): unconstraint desired steering_velocity
-        s_min (float): minimum steering angle
-        s_max (float): maximum steering angle
-        sv_min (float): minimum steering velocity
-        sv_max (float): maximum steering velocity
-
-    Returns:
-        steering_velocity (float): adjusted steering velocity
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="63" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="63" bodyend="90"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamics__test_8py_1adce043c0433e0993c7aced5dd6b0475c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.vehicle_dynamics_ks</definition>
-        <argsstring>(x, u_init, mu, C_Sf, C_Sr, lf, lr, h, m, I, s_min, s_max, sv_min, sv_max, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>vehicle_dynamics_ks</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>u_init</type>
-          <defname>u_init</defname>
-        </param>
-        <param>
-          <type>mu</type>
-          <defname>mu</defname>
-        </param>
-        <param>
-          <type>C_Sf</type>
-          <defname>C_Sf</defname>
-        </param>
-        <param>
-          <type>C_Sr</type>
-          <defname>C_Sr</defname>
-        </param>
-        <param>
-          <type>lf</type>
-          <defname>lf</defname>
-        </param>
-        <param>
-          <type>lr</type>
-          <defname>lr</defname>
-        </param>
-        <param>
-          <type>h</type>
-          <defname>h</defname>
-        </param>
-        <param>
-          <type>m</type>
-          <defname>m</defname>
-        </param>
-        <param>
-          <type>I</type>
-          <defname>I</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Single Track Kinematic Vehicle Dynamics.
-
-    Args:
-        x (numpy.ndarray (3, )): vehicle state vector (x1, x2, x3, x4, x5)
-            x1: x position in global coordinates
-            x2: y position in global coordinates
-            x3: steering angle of front wheels
-            x4: velocity in x direction
-            x5: yaw angle
-        u (numpy.ndarray (2, )): control input vector (u1, u2)
-            u1: steering angle velocity of front wheels
-            u2: longitudinal acceleration 
-
-    Returns:
-        f (numpy.ndarray): right hand side of differential equations
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="91" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="91" bodyend="123"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamics__test_8py_1ae0437476ef39a9fc5bc592ef2bfee40b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.vehicle_dynamics_st</definition>
-        <argsstring>(x, u_init, mu, C_Sf, C_Sr, lf, lr, h, m, I, s_min, s_max, sv_min, sv_max, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>vehicle_dynamics_st</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>u_init</type>
-          <defname>u_init</defname>
-        </param>
-        <param>
-          <type>mu</type>
-          <defname>mu</defname>
-        </param>
-        <param>
-          <type>C_Sf</type>
-          <defname>C_Sf</defname>
-        </param>
-        <param>
-          <type>C_Sr</type>
-          <defname>C_Sr</defname>
-        </param>
-        <param>
-          <type>lf</type>
-          <defname>lf</defname>
-        </param>
-        <param>
-          <type>lr</type>
-          <defname>lr</defname>
-        </param>
-        <param>
-          <type>h</type>
-          <defname>h</defname>
-        </param>
-        <param>
-          <type>m</type>
-          <defname>m</defname>
-        </param>
-        <param>
-          <type>I</type>
-          <defname>I</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Single Track Dynamic Vehicle Dynamics.
-
-    Args:
-        x (numpy.ndarray (3, )): vehicle state vector (x1, x2, x3, x4, x5, x6, x7)
-            x1: x position in global coordinates
-            x2: y position in global coordinates
-            x3: steering angle of front wheels
-            x4: velocity in x direction
-            x5: yaw angle
-            x6: yaw rate
-            x7: slip angle at vehicle center
-        u (numpy.ndarray (2, )): control input vector (u1, u2)
-            u1: steering angle velocity of front wheels
-            u2: longitudinal acceleration 
-
-    Returns:
-        f (numpy.ndarray): right hand side of differential equations
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="124" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="124" bodyend="178"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamics__test_8py_1a6a70b034b943e12edb3aa7f50c12f607" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.pid</definition>
-        <argsstring>(speed, steer)</argsstring>
-        <name>pid</name>
-        <param>
-          <type>speed</type>
-          <defname>speed</defname>
-        </param>
-        <param>
-          <type>steer</type>
-          <defname>steer</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Basic controller for speed/steer -&gt; accl./steer vel.
-
-    Args:
-        speed (float): desired input speed
-        steer (float): desired input steering angle
-
-    Returns:
-        accl (float): desired input acceleration
-        sv (float): desired input steering velocity
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="179" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="179" bodyend="192"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamics__test_8py_1a8c9025a83517af7f85dddb53f1b04bb7" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.func_KS</definition>
-        <argsstring>(x, t, u, mu, C_Sf, C_Sr, lf, lr, h, m, I, s_min, s_max, sv_min, sv_max, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>func_KS</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>t</type>
-          <defname>t</defname>
-        </param>
-        <param>
-          <type>u</type>
-          <defname>u</defname>
-        </param>
-        <param>
-          <type>mu</type>
-          <defname>mu</defname>
-        </param>
-        <param>
-          <type>C_Sf</type>
-          <defname>C_Sf</defname>
-        </param>
-        <param>
-          <type>C_Sr</type>
-          <defname>C_Sr</defname>
-        </param>
-        <param>
-          <type>lf</type>
-          <defname>lf</defname>
-        </param>
-        <param>
-          <type>lr</type>
-          <defname>lr</defname>
-        </param>
-        <param>
-          <type>h</type>
-          <defname>h</defname>
-        </param>
-        <param>
-          <type>m</type>
-          <defname>m</defname>
-        </param>
-        <param>
-          <type>I</type>
-          <defname>I</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="193" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="193" bodyend="196"/>
-      </memberdef>
-      <memberdef kind="function" id="dynamics__test_8py_1a6ccba55ff647ba033dec08a79dc5c74e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.dynamics_test.func_ST</definition>
-        <argsstring>(x, t, u, mu, C_Sf, C_Sr, lf, lr, h, m, I, s_min, s_max, sv_min, sv_max, v_switch, a_max, v_min, v_max)</argsstring>
-        <name>func_ST</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>t</type>
-          <defname>t</defname>
-        </param>
-        <param>
-          <type>u</type>
-          <defname>u</defname>
-        </param>
-        <param>
-          <type>mu</type>
-          <defname>mu</defname>
-        </param>
-        <param>
-          <type>C_Sf</type>
-          <defname>C_Sf</defname>
-        </param>
-        <param>
-          <type>C_Sr</type>
-          <defname>C_Sr</defname>
-        </param>
-        <param>
-          <type>lf</type>
-          <defname>lf</defname>
-        </param>
-        <param>
-          <type>lr</type>
-          <defname>lr</defname>
-        </param>
-        <param>
-          <type>h</type>
-          <defname>h</defname>
-        </param>
-        <param>
-          <type>m</type>
-          <defname>m</defname>
-        </param>
-        <param>
-          <type>I</type>
-          <defname>I</defname>
-        </param>
-        <param>
-          <type>s_min</type>
-          <defname>s_min</defname>
-        </param>
-        <param>
-          <type>s_max</type>
-          <defname>s_max</defname>
-        </param>
-        <param>
-          <type>sv_min</type>
-          <defname>sv_min</defname>
-        </param>
-        <param>
-          <type>sv_max</type>
-          <defname>sv_max</defname>
-        </param>
-        <param>
-          <type>v_switch</type>
-          <defname>v_switch</defname>
-        </param>
-        <param>
-          <type>a_max</type>
-          <defname>a_max</defname>
-        </param>
-        <param>
-          <type>v_min</type>
-          <defname>v_min</defname>
-        </param>
-        <param>
-          <type>v_max</type>
-          <defname>v_max</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="197" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" bodystart="197" bodyend="200"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/dynamics_test.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1unittest_1_1legacy__scan__gen.xml b/docs/xml/namespacef110__gym_1_1unittest_1_1legacy__scan__gen.xml
deleted file mode 100644
index daf5a58e..00000000
--- a/docs/xml/namespacef110__gym_1_1unittest_1_1legacy__scan__gen.xml
+++ /dev/null
@@ -1,384 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1unittest_1_1legacy__scan__gen" kind="namespace" language="Python">
-    <compoundname>f110_gym::unittest::legacy_scan_gen</compoundname>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a3acf2d94fb6d1955f85ef97490d79597" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.thetas</definition>
-        <argsstring></argsstring>
-        <name>thetas</name>
-        <initializer>=  np.linspace(-2.35, 2.35, num=1080)</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="42" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="42" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a3c16a5361e5e50935df3d60cc43be9d8" prot="public" static="no" mutable="no">
-        <type>string</type>
-        <definition>f110_gym::unittest::legacy_scan_gen.executable_dir</definition>
-        <argsstring></argsstring>
-        <name>executable_dir</name>
-        <initializer>=  &apos;../../../build/&apos;</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="45" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="45" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1ad230fce994060d2760dbaa3011046d99" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>f110_gym::unittest::legacy_scan_gen.mass</definition>
-        <argsstring></argsstring>
-        <name>mass</name>
-        <initializer>=  3.74</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="46" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="46" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a9b23723bde43aa19f3103b670e48a274" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>f110_gym::unittest::legacy_scan_gen.l_r</definition>
-        <argsstring></argsstring>
-        <name>l_r</name>
-        <initializer>=  0.17145</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="47" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="47" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1aec6027e075b6c232872ecdeb9557901f" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>f110_gym::unittest::legacy_scan_gen.I_z</definition>
-        <argsstring></argsstring>
-        <name>I_z</name>
-        <initializer>=  0.04712</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="48" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="48" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a4b8eae395b3ba7745b4707730a4e0342" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>f110_gym::unittest::legacy_scan_gen.mu</definition>
-        <argsstring></argsstring>
-        <name>mu</name>
-        <initializer>=  0.523</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="49" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="49" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a4a2f09273283a00dd9f0e2a0202819d8" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>f110_gym::unittest::legacy_scan_gen.h_cg</definition>
-        <argsstring></argsstring>
-        <name>h_cg</name>
-        <initializer>=  0.074</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="50" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="50" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a3ecbcf35be2c3b1c5de27a80a75fd6b6" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>f110_gym::unittest::legacy_scan_gen.cs_f</definition>
-        <argsstring></argsstring>
-        <name>cs_f</name>
-        <initializer>=  4.718</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="51" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="51" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a187af2aab0e56a6814c20dc624e44066" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>f110_gym::unittest::legacy_scan_gen.cs_r</definition>
-        <argsstring></argsstring>
-        <name>cs_r</name>
-        <initializer>=  5.4562</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="52" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="52" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a5dc0c5eb3920673ad54793bf5a242c7f" prot="public" static="no" mutable="no">
-        <type>int</type>
-        <definition>int f110_gym::unittest::legacy_scan_gen.num_test</definition>
-        <argsstring></argsstring>
-        <name>num_test</name>
-        <initializer>=  10</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="55" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="55" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a16cb81b5670b7cb02da350ca06e782e0" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.test_poses</definition>
-        <argsstring></argsstring>
-        <name>test_poses</name>
-        <initializer>=  np.zeros((num_test, 3))</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="56" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="56" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a13cfce268a3d58a9bb340c49e52c7358" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.num</definition>
-        <argsstring></argsstring>
-        <name>num</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="57" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="57" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a9b44a820cb923dd21ad53ca3ce1a1a3e" prot="public" static="no" mutable="no">
-        <type>string</type>
-        <definition>string f110_gym::unittest::legacy_scan_gen::map_path</definition>
-        <argsstring></argsstring>
-        <name>map_path</name>
-        <initializer>=  &apos;../../../maps/vegas.yaml&apos;</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="60" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="60" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a104eddedf6dffa3cfbb48fd10a54fbaa" prot="public" static="no" mutable="no">
-        <type>string</type>
-        <definition>string f110_gym::unittest::legacy_scan_gen::map_ext</definition>
-        <argsstring></argsstring>
-        <name>map_ext</name>
-        <initializer>=  &apos;.png&apos;</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="61" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="61" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a61f0e3e1d2267e520e06606e1face7b1" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.racecar_env</definition>
-        <argsstring></argsstring>
-        <name>racecar_env</name>
-        <initializer>=  gym.make(&apos;f110_gym:f110-v0&apos;)</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="62" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="62" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1adb3290404d3f4b8b78c064260da612b4" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.double_finish</definition>
-        <argsstring></argsstring>
-        <name>double_finish</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="64" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="64" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1af8a3966f4a9b1c148801c9f0faeb2ab9" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.vegas_scan</definition>
-        <argsstring></argsstring>
-        <name>vegas_scan</name>
-        <initializer>=  np.empty((num_test, 1080))</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="65" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="65" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1ae0259831a38cf476e0dd42babc9961bf" prot="public" static="no" mutable="no">
-        <type>list</type>
-        <definition>list f110_gym::unittest::legacy_scan_gen::x</definition>
-        <argsstring></argsstring>
-        <name>x</name>
-        <initializer>=  [test_poses[i, 0], 200.]</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="67" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="67" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a2b203158766bea1a4c5f63348e259b68" prot="public" static="no" mutable="no">
-        <type>list</type>
-        <definition>list f110_gym::unittest::legacy_scan_gen::y</definition>
-        <argsstring></argsstring>
-        <name>y</name>
-        <initializer>=  [test_poses[i, 1], 200.]</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="68" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="68" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a04710a5417dc947ecea68c85b283ae50" prot="public" static="no" mutable="no">
-        <type>list</type>
-        <definition>list f110_gym::unittest::legacy_scan_gen::theta</definition>
-        <argsstring></argsstring>
-        <name>theta</name>
-        <initializer>=  [test_poses[i, 2], 0.]</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="69" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="69" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1aa1acb0415bfee00854f8be477f4e7f44" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.obs</definition>
-        <argsstring></argsstring>
-        <name>obs</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="70" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="70" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a9520e850caa600c8d5083e90ac4fe127" prot="private" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen._</definition>
-        <argsstring></argsstring>
-        <name>_</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="70" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="70" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1ac94bf3002239f74774b33264d13e088d" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.berlin_scan</definition>
-        <argsstring></argsstring>
-        <name>berlin_scan</name>
-        <initializer>=  np.empty((num_test, 1080))</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="79" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="79" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a7569d745c961e7f9967aad0c5d6f2672" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.skirk_scan</definition>
-        <argsstring></argsstring>
-        <name>skirk_scan</name>
-        <initializer>=  np.empty((num_test, 1080))</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="93" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="93" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a8385064c1f35018e19bd2c8fe359cc3c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.vegas</definition>
-        <argsstring></argsstring>
-        <name>vegas</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="102" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="102" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a0413a2d9da052bbc95719cafd822cbb5" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.berlin</definition>
-        <argsstring></argsstring>
-        <name>berlin</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="102" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="102" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="legacy__scan__gen_8py_1a1943209d1e4c42cb37681e790e21a71e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::legacy_scan_gen.skirk</definition>
-        <argsstring></argsstring>
-        <name>skirk</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="102" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" bodystart="102" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/legacy_scan_gen.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1unittest_1_1pyglet__test.xml b/docs/xml/namespacef110__gym_1_1unittest_1_1pyglet__test.xml
deleted file mode 100644
index 0acbf61c..00000000
--- a/docs/xml/namespacef110__gym_1_1unittest_1_1pyglet__test.xml
+++ /dev/null
@@ -1,484 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1unittest_1_1pyglet__test" kind="namespace" language="Python">
-    <compoundname>f110_gym::unittest::pyglet_test</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" prot="public">f110_gym::unittest::pyglet_test::Camera</innerclass>
-    <innerclass refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera" prot="public">f110_gym::unittest::pyglet_test::CenteredCamera</innerclass>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="pyglet__test_8py_1a3d69f486cb21f39a06dad8857f9b7d50" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.parser</definition>
-        <argsstring></argsstring>
-        <name>parser</name>
-        <initializer>=  argparse.ArgumentParser()</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="99" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="99" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a981fb3f820ad2e7741085fe4f5dea096" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.type</definition>
-        <argsstring></argsstring>
-        <name>type</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="100" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="100" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a2005fab57ddd5da6ff3394c03dc13cd5" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.str</definition>
-        <argsstring></argsstring>
-        <name>str</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="100" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="100" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1acc7e94317a1b95945b9baf3623660350" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.required</definition>
-        <argsstring></argsstring>
-        <name>required</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="100" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="100" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a41b4d9d2099f3bffde0a78849b8f6e9b" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.True</definition>
-        <argsstring></argsstring>
-        <name>True</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="100" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="100" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1af457772f551e51c84059b1619cac6f6f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.help</definition>
-        <argsstring></argsstring>
-        <name>help</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="100" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="100" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a45eb1549d05c60fdad09c712bda5a759" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.args</definition>
-        <argsstring></argsstring>
-        <name>args</name>
-        <initializer>=  parser.parse_args()</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="102" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="102" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a3174957b3d9e1f51302c419ae772a7d7" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.map_metada</definition>
-        <argsstring></argsstring>
-        <name>map_metada</name>
-        <initializer>=  yaml.safe_load(yaml_stream)</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="107" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="107" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a087834fb591571e3b9590537ab43f2a4" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.map_resolution</definition>
-        <argsstring></argsstring>
-        <name>map_resolution</name>
-        <initializer>=  map_metada[&apos;resolution&apos;]</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="108" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="108" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a7ccec01d1694c9ce188a100eae74a9eb" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.origin</definition>
-        <argsstring></argsstring>
-        <name>origin</name>
-        <initializer>=  map_metada[&apos;origin&apos;]</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="109" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="109" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a489a47127c8b26ff6a6c2f32b22b7c4e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.origin_x</definition>
-        <argsstring></argsstring>
-        <name>origin_x</name>
-        <initializer>=  origin[0]</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="110" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="110" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a8ba1eb7ca846ae091a7a0208bab2d8e5" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.origin_y</definition>
-        <argsstring></argsstring>
-        <name>origin_y</name>
-        <initializer>=  origin[1]</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="111" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="111" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1afae1d6e5e857392c773fb99b539676bc" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.map_img</definition>
-        <argsstring></argsstring>
-        <name>map_img</name>
-        <initializer>=  np.array(Image.open(args.map_path + args.map_ext).transpose(Image.FLIP_TOP_BOTTOM)).astype(np.float64)</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="116" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="116" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a481a4c3d659a7730333145e5fe7c4367" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.map_height</definition>
-        <argsstring></argsstring>
-        <name>map_height</name>
-        <initializer>=  map_img.shape[0]</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="117" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="117" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a2e254b24420bdda87cd30f367b65552d" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.map_width</definition>
-        <argsstring></argsstring>
-        <name>map_width</name>
-        <initializer>=  map_img.shape[1]</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="118" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="118" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a4c371730daa6fa2b932e0d6bdc28e700" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.range_x</definition>
-        <argsstring></argsstring>
-        <name>range_x</name>
-        <initializer>=  np.arange(map_width)</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="121" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="121" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a85be62a46ea83891f58f723d84164389" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.range_y</definition>
-        <argsstring></argsstring>
-        <name>range_y</name>
-        <initializer>=  np.arange(map_height)</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="122" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="122" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a2b3d64a285759e09b06db641e7b3ef76" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>tuple f110_gym::unittest::pyglet_test::map_x</definition>
-        <argsstring></argsstring>
-        <name>map_x</name>
-        <initializer>=  (map_x * map_resolution + origin_x).flatten()</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="123" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="123" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a7a58fce71597c750f41fe4aa8f5d0d89" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>tuple f110_gym::unittest::pyglet_test::map_y</definition>
-        <argsstring></argsstring>
-        <name>map_y</name>
-        <initializer>=  (map_y * map_resolution + origin_y).flatten()</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="123" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="123" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a3186da83d330b11ad5d0f0adfc57dab7" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.map_z</definition>
-        <argsstring></argsstring>
-        <name>map_z</name>
-        <initializer>=  np.zeros(map_y.shape)</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="126" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="126" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1aa4a56a9e36d04e7211af58fc468903ba" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.map_coords</definition>
-        <argsstring></argsstring>
-        <name>map_coords</name>
-        <initializer>=  np.vstack((map_x, map_y, map_z))</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="127" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="127" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a83cf143d5d4d4fbe4aa56cf8c6699c78" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>float f110_gym::unittest::pyglet_test.map_mask</definition>
-        <argsstring></argsstring>
-        <name>map_mask</name>
-        <initializer>=  0.0</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="130" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="130" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a53860be358d7cdfc130c75ca444c9939" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>float f110_gym::unittest::pyglet_test.map_mask_flat</definition>
-        <argsstring></argsstring>
-        <name>map_mask_flat</name>
-        <initializer>=  map_mask.flatten()</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="131" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="131" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a8c5958c53e522bb0dc390ad0421a6057" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.map_points</definition>
-        <argsstring></argsstring>
-        <name>map_points</name>
-        <initializer>=  map_coords[:, map_mask_flat].T</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="132" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="132" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a61b9b5ee2dc42c296dc48e8ddaf5a173" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.config</definition>
-        <argsstring></argsstring>
-        <name>config</name>
-        <initializer>=  Config(sample_buffers=1, samples=4,
-                    depth_size=16, double_buffer=True, )</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="137" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="137" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1abbdafa8876f8f50a0f98b0ccf20e58df" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.window</definition>
-        <argsstring></argsstring>
-        <name>window</name>
-        <initializer>=  window.Window(resizable=True, config=config)</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="139" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="139" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a1546787b3b7976676236a790f8d70c5c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.cam</definition>
-        <argsstring></argsstring>
-        <name>cam</name>
-        <initializer>=  <ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" kindref="compound">Camera</ref>(window)</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="148" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="148" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a3405d8b8ab8878375ce14241e071c6fd" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.batch</definition>
-        <argsstring></argsstring>
-        <name>batch</name>
-        <initializer>=  graphics.Batch()</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="160" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="160" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a88390b60af94b8cc39c9c11c7471bea5" prot="public" static="no" mutable="no">
-        <type>list</type>
-        <definition>list f110_gym::unittest::pyglet_test.points</definition>
-        <argsstring></argsstring>
-        <name>points</name>
-        <initializer>=  []</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="162" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="162" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test_8py_1a3710a56d6d768172240edd7f43b56d90" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::pyglet_test.particle</definition>
-        <argsstring></argsstring>
-        <name>particle</name>
-        <initializer>=  batch.add(1, GL_POINTS, None, (&apos;v3f/stream&apos;, [map_points[i, 0], map_points[i, 1], map_points[i, 2]]))</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="164" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="164" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="func">
-      <memberdef kind="function" id="pyglet__test_8py_1adf83272f4af52d9e64b6469c409f49c2" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.on_resize</definition>
-        <argsstring>(width, height)</argsstring>
-        <name>on_resize</name>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="151" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="151" bodyend="159"/>
-      </memberdef>
-      <memberdef kind="function" id="pyglet__test_8py_1a8e03464647800bf112a3656d9679c1c4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.loop</definition>
-        <argsstring>(dt)</argsstring>
-        <name>loop</name>
-        <param>
-          <type>dt</type>
-          <defname>dt</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="167" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="167" bodyend="171"/>
-      </memberdef>
-      <memberdef kind="function" id="pyglet__test_8py_1adf4782832213b50f1e079698656cdddb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.pyglet_test.on_draw</definition>
-        <argsstring>()</argsstring>
-        <name>on_draw</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="172" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" bodystart="172" bodyend="180"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1unittest_1_1pyglet__test__camera.xml b/docs/xml/namespacef110__gym_1_1unittest_1_1pyglet__test__camera.xml
deleted file mode 100644
index 29039c2f..00000000
--- a/docs/xml/namespacef110__gym_1_1unittest_1_1pyglet__test__camera.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1unittest_1_1pyglet__test__camera" kind="namespace" language="Python">
-    <compoundname>f110_gym::unittest::pyglet_test_camera</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app" prot="public">f110_gym::unittest::pyglet_test_camera::App</innerclass>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="pyglet__test__camera_8py_1ad60c292ad7eac4ed7de1777dcd5435b2" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>float f110_gym::unittest::pyglet_test_camera.ZOOM_IN_FACTOR</definition>
-        <argsstring></argsstring>
-        <name>ZOOM_IN_FACTOR</name>
-        <initializer>=  1.2</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="5" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="5" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="pyglet__test__camera_8py_1a4ec694cd82738b571eaaa90eea919fe8" prot="public" static="no" mutable="no">
-        <type>int</type>
-        <definition>int f110_gym::unittest::pyglet_test_camera.ZOOM_OUT_FACTOR</definition>
-        <argsstring></argsstring>
-        <name>ZOOM_OUT_FACTOR</name>
-        <initializer>=  1/ZOOM_IN_FACTOR</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="6" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" bodystart="6" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1unittest_1_1random__trackgen.xml b/docs/xml/namespacef110__gym_1_1unittest_1_1random__trackgen.xml
deleted file mode 100644
index e65e7637..00000000
--- a/docs/xml/namespacef110__gym_1_1unittest_1_1random__trackgen.xml
+++ /dev/null
@@ -1,204 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1unittest_1_1random__trackgen" kind="namespace" language="Python">
-    <compoundname>f110_gym::unittest::random_trackgen</compoundname>
-      <sectiondef kind="var">
-      <memberdef kind="variable" id="random__trackgen_8py_1a9d47282619ade831e74f78ea802fdd0c" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.parser</definition>
-        <argsstring></argsstring>
-        <name>parser</name>
-        <initializer>=  argparse.ArgumentParser()</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="40" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="40" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1a7487bc05dd5dec9378a0cef668123d11" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.type</definition>
-        <argsstring></argsstring>
-        <name>type</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="41" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="41" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1a0726f3cb3017bc7a0e22ffb30e53eefa" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.int</definition>
-        <argsstring></argsstring>
-        <name>int</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="41" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="41" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1aa72b8a2db3b63f9ed42cb896235fb4ac" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.default</definition>
-        <argsstring></argsstring>
-        <name>default</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="41" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="41" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1acfe582339d8be9075a6160eae33e10aa" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.help</definition>
-        <argsstring></argsstring>
-        <name>help</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="41" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="41" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1adaa99201e805097500ed2491766a2938" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.args</definition>
-        <argsstring></argsstring>
-        <name>args</name>
-        <initializer>=  parser.parse_args()</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="43" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="43" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1a3457cee9b138a50f02af8eb4e071173e" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.NUM_MAPS</definition>
-        <argsstring></argsstring>
-        <name>NUM_MAPS</name>
-        <initializer>=  args.num_maps</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="54" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="54" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1a2fe20a3d4b091cfa0c3eb867adc992ce" prot="public" static="no" mutable="no">
-        <type>float</type>
-        <definition>float f110_gym::unittest::random_trackgen.WIDTH</definition>
-        <argsstring></argsstring>
-        <name>WIDTH</name>
-        <initializer>=  10.0</initializer>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="55" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="55" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1a8f9627599e2526027f715cd162b7155f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.track</definition>
-        <argsstring></argsstring>
-        <name>track</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="230" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="230" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1a55ebef782ee46bdd7cd03aa6a404cd02" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.track_int</definition>
-        <argsstring></argsstring>
-        <name>track_int</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="230" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="230" bodyend="-1"/>
-      </memberdef>
-      <memberdef kind="variable" id="random__trackgen_8py_1a492ff0fd0e3e2e4b53c804fe4656e19f" prot="public" static="no" mutable="no">
-        <type></type>
-        <definition>f110_gym::unittest::random_trackgen.track_ext</definition>
-        <argsstring></argsstring>
-        <name>track_ext</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="230" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="230" bodyend="-1"/>
-      </memberdef>
-      </sectiondef>
-      <sectiondef kind="func">
-      <memberdef kind="function" id="random__trackgen_8py_1af5ac6d92744435a0c2572146ec14cd00" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.random_trackgen.create_track</definition>
-        <argsstring>()</argsstring>
-        <name>create_track</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="56" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="56" bodyend="174"/>
-      </memberdef>
-      <memberdef kind="function" id="random__trackgen_8py_1a10f9f980a813a2beca515c9965995c12" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.random_trackgen.convert_track</definition>
-        <argsstring>(track, track_int, track_ext, iter)</argsstring>
-        <name>convert_track</name>
-        <param>
-          <type>track</type>
-          <defname>track</defname>
-        </param>
-        <param>
-          <type>track_int</type>
-          <defname>track_int</defname>
-        </param>
-        <param>
-          <type>track_ext</type>
-          <defname>track_ext</defname>
-        </param>
-        <param>
-          <type>iter</type>
-          <defname>iter</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="175" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" bodystart="175" bodyend="226"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacef110__gym_1_1unittest_1_1scan__sim.xml b/docs/xml/namespacef110__gym_1_1unittest_1_1scan__sim.xml
deleted file mode 100644
index 0802d054..00000000
--- a/docs/xml/namespacef110__gym_1_1unittest_1_1scan__sim.xml
+++ /dev/null
@@ -1,363 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacef110__gym_1_1unittest_1_1scan__sim" kind="namespace" language="Python">
-    <compoundname>f110_gym::unittest::scan_sim</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" prot="public">f110_gym::unittest::scan_sim::ScanSimulator2D</innerclass>
-    <innerclass refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests" prot="public">f110_gym::unittest::scan_sim::ScanTests</innerclass>
-      <sectiondef kind="func">
-      <memberdef kind="function" id="scan__sim_8py_1a79849d1485e5078a2792710ce3c7fc97" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.get_dt</definition>
-        <argsstring>(bitmap, resolution)</argsstring>
-        <name>get_dt</name>
-        <param>
-          <type>bitmap</type>
-          <defname>bitmap</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Distance transformation, returns the distance matrix from the input bitmap.
-Uses scipy.ndimage, cannot be JITted.
-
-    Args:
-        bitmap (numpy.ndarray, (n, m)): input binary bitmap of the environment, where 0 is obstacles, and 255 (or anything &gt; 0) is freespace
-        resolution (float): resolution of the input bitmap (m/cell)
-
-    Returns:
-        dt (numpy.ndarray, (n, m)): output distance matrix, where each cell has the corresponding distance (in meters) to the closest obstacle
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="40" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="40" bodyend="55"/>
-      </memberdef>
-      <memberdef kind="function" id="scan__sim_8py_1a990edc2fbfab8d957303d4b100bc6c9a" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.xy_2_rc</definition>
-        <argsstring>(x, y, orig_x, orig_y, orig_c, orig_s, height, width, resolution)</argsstring>
-        <name>xy_2_rc</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>orig_x</type>
-          <defname>orig_x</defname>
-        </param>
-        <param>
-          <type>orig_y</type>
-          <defname>orig_y</defname>
-        </param>
-        <param>
-          <type>orig_c</type>
-          <defname>orig_c</defname>
-        </param>
-        <param>
-          <type>orig_s</type>
-          <defname>orig_s</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Translate (x, y) coordinate into (r, c) in the matrix
-
-    Args:
-        x (float): coordinate in x (m)
-        y (float): coordinate in y (m)
-        orig_x (float): x coordinate of the map origin (m)
-        orig_y (float): y coordinate of the map origin (m)
-    
-    Returns:
-        r (int): row number in the transform matrix of the given point
-        c (int): column number in the transform matrix of the given point
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="56" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="56" bodyend="88"/>
-      </memberdef>
-      <memberdef kind="function" id="scan__sim_8py_1aa2c2d251010dae8940a87e69cadffa07" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.distance_transform</definition>
-        <argsstring>(x, y, orig_x, orig_y, orig_c, orig_s, height, width, resolution, dt)</argsstring>
-        <name>distance_transform</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>orig_x</type>
-          <defname>orig_x</defname>
-        </param>
-        <param>
-          <type>orig_y</type>
-          <defname>orig_y</defname>
-        </param>
-        <param>
-          <type>orig_c</type>
-          <defname>orig_c</defname>
-        </param>
-        <param>
-          <type>orig_s</type>
-          <defname>orig_s</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <param>
-          <type>dt</type>
-          <defname>dt</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Look up corresponding distance in the distance matrix
-
-    Args:
-        x (float): x coordinate of the lookup point
-        y (float): y coordinate of the lookup point
-        orig_x (float): x coordinate of the map origin (m)
-        orig_y (float): y coordinate of the map origin (m)
-
-    Returns:
-        distance (float): corresponding shortest distance to obstacle in meters
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="89" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="89" bodyend="106"/>
-      </memberdef>
-      <memberdef kind="function" id="scan__sim_8py_1a0f9a2bc118cafc22f7ae057be76d01dd" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.trace_ray</definition>
-        <argsstring>(x, y, theta_index, sines, cosines, eps, orig_x, orig_y, orig_c, orig_s, height, width, resolution, dt, max_range)</argsstring>
-        <name>trace_ray</name>
-        <param>
-          <type>x</type>
-          <defname>x</defname>
-        </param>
-        <param>
-          <type>y</type>
-          <defname>y</defname>
-        </param>
-        <param>
-          <type>theta_index</type>
-          <defname>theta_index</defname>
-        </param>
-        <param>
-          <type>sines</type>
-          <defname>sines</defname>
-        </param>
-        <param>
-          <type>cosines</type>
-          <defname>cosines</defname>
-        </param>
-        <param>
-          <type>eps</type>
-          <defname>eps</defname>
-        </param>
-        <param>
-          <type>orig_x</type>
-          <defname>orig_x</defname>
-        </param>
-        <param>
-          <type>orig_y</type>
-          <defname>orig_y</defname>
-        </param>
-        <param>
-          <type>orig_c</type>
-          <defname>orig_c</defname>
-        </param>
-        <param>
-          <type>orig_s</type>
-          <defname>orig_s</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <param>
-          <type>dt</type>
-          <defname>dt</defname>
-        </param>
-        <param>
-          <type>max_range</type>
-          <defname>max_range</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Find the length of a specific ray at a specific scan angle theta
-Purely math calculation and loops, should be JITted.
-
-    Args:
-        x (float): current x coordinate of the ego (scan) frame
-        y (float): current y coordinate of the ego (scan) frame
-        theta_index(int): current index of the scan beam in the scan range
-        sines (numpy.ndarray (n, )): pre-calculated sines of the angle array
-        cosines (numpy.ndarray (n, )): pre-calculated cosines ...
-
-    Returns:
-        total_distance (float): the distance to first obstacle on the current scan beam
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="107" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="107" bodyend="145"/>
-      </memberdef>
-      <memberdef kind="function" id="scan__sim_8py_1ad9b4dde85991dfc78a65b7804c27d010" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.get_scan</definition>
-        <argsstring>(pose, theta_dis, fov, num_beams, theta_index_increment, sines, cosines, eps, orig_x, orig_y, orig_c, orig_s, height, width, resolution, dt, max_range)</argsstring>
-        <name>get_scan</name>
-        <param>
-          <type>pose</type>
-          <defname>pose</defname>
-        </param>
-        <param>
-          <type>theta_dis</type>
-          <defname>theta_dis</defname>
-        </param>
-        <param>
-          <type>fov</type>
-          <defname>fov</defname>
-        </param>
-        <param>
-          <type>num_beams</type>
-          <defname>num_beams</defname>
-        </param>
-        <param>
-          <type>theta_index_increment</type>
-          <defname>theta_index_increment</defname>
-        </param>
-        <param>
-          <type>sines</type>
-          <defname>sines</defname>
-        </param>
-        <param>
-          <type>cosines</type>
-          <defname>cosines</defname>
-        </param>
-        <param>
-          <type>eps</type>
-          <defname>eps</defname>
-        </param>
-        <param>
-          <type>orig_x</type>
-          <defname>orig_x</defname>
-        </param>
-        <param>
-          <type>orig_y</type>
-          <defname>orig_y</defname>
-        </param>
-        <param>
-          <type>orig_c</type>
-          <defname>orig_c</defname>
-        </param>
-        <param>
-          <type>orig_s</type>
-          <defname>orig_s</defname>
-        </param>
-        <param>
-          <type>height</type>
-          <defname>height</defname>
-        </param>
-        <param>
-          <type>width</type>
-          <defname>width</defname>
-        </param>
-        <param>
-          <type>resolution</type>
-          <defname>resolution</defname>
-        </param>
-        <param>
-          <type>dt</type>
-          <defname>dt</defname>
-        </param>
-        <param>
-          <type>max_range</type>
-          <defname>max_range</defname>
-        </param>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-<para><verbatim>Perform the scan for each discretized angle of each beam of the laser, loop heavy, should be JITted
-
-    Args:
-        pose (numpy.ndarray(3, )): current pose of the scan frame in the map
-        theta_dis (int): number of steps to discretize the angles between 0 and 2pi for look up
-        fov (float): field of view of the laser scan
-        num_beams (int): number of beams in the scan
-        theta_index_increment (float): increment between angle indices after discretization
-
-    Returns:
-        scan (numpy.ndarray(n, )): resulting laser scan at the pose, n=num_beams
-</verbatim> </para>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="146" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="146" bodyend="184"/>
-      </memberdef>
-      <memberdef kind="function" id="scan__sim_8py_1a710653eef2a82aae113e889794ee511e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
-        <type>def</type>
-        <definition>def f110_gym.unittest.scan_sim.main</definition>
-        <argsstring>()</argsstring>
-        <name>main</name>
-        <briefdescription>
-        </briefdescription>
-        <detaileddescription>
-        </detaileddescription>
-        <inbodydescription>
-        </inbodydescription>
-        <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="387" column="1" bodyfile="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" bodystart="387" bodyend="427"/>
-      </memberdef>
-      </sectiondef>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacegym.xml b/docs/xml/namespacegym.xml
deleted file mode 100644
index 57202419..00000000
--- a/docs/xml/namespacegym.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.1" xml:lang="en-US">
-  <compounddef id="namespacegym" kind="namespace" language="Python">
-    <compoundname>gym</compoundname>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="[generated]" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacegym_1_1envs_1_1unittest_1_1scan__sim.xml b/docs/xml/namespacegym_1_1envs_1_1unittest_1_1scan__sim.xml
deleted file mode 100644
index 5004a69c..00000000
--- a/docs/xml/namespacegym_1_1envs_1_1unittest_1_1scan__sim.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacegym_1_1envs_1_1unittest_1_1scan__sim" kind="namespace" language="Python">
-    <compoundname>gym::envs::unittest::scan_sim</compoundname>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/__init__.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespacepyglet_1_1gl.xml b/docs/xml/namespacepyglet_1_1gl.xml
deleted file mode 100644
index 5ffbead9..00000000
--- a/docs/xml/namespacepyglet_1_1gl.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="namespacepyglet_1_1gl" kind="namespace" language="Python">
-    <compoundname>pyglet::gl</compoundname>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespaceunittest.xml b/docs/xml/namespaceunittest.xml
deleted file mode 100644
index 2dbf26e1..00000000
--- a/docs/xml/namespaceunittest.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.1" xml:lang="en-US">
-  <compounddef id="namespaceunittest" kind="namespace" language="Python">
-    <compoundname>unittest</compoundname>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="[generated]" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/namespaceutils.xml b/docs/xml/namespaceutils.xml
deleted file mode 100644
index 5e257bc9..00000000
--- a/docs/xml/namespaceutils.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.1" xml:lang="en-US">
-  <compounddef id="namespaceutils" kind="namespace" language="Python">
-    <compoundname>utils</compoundname>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <location file="[generated]" line="1" column="1"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/pyglet__test_8py.xml b/docs/xml/pyglet__test_8py.xml
deleted file mode 100644
index a43b1935..00000000
--- a/docs/xml/pyglet__test_8py.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="pyglet__test_8py" kind="file" language="Python">
-    <compoundname>pyglet_test.py</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" prot="public">f110_gym::unittest::pyglet_test::Camera</innerclass>
-    <innerclass refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera" prot="public">f110_gym::unittest::pyglet_test::CenteredCamera</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1pyglet__test">f110_gym::unittest::pyglet_test</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>PIL<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>Image</highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>yaml</highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacepyglet_1_1gl" kindref="compound">pyglet.gl</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>pyglet</highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>pyglet<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>font,<sp/>graphics,<sp/>window</highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>argparse</highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight></codeline>
-<codeline lineno="11" refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" kindref="compound">Camera</ref>:</highlight></codeline>
-<codeline lineno="12"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;<sp/>A<sp/>simple<sp/>2D<sp/>camera<sp/>that<sp/>contains<sp/>the<sp/>speed<sp/>and<sp/>offset.&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">__init__(self,<sp/>window:<sp/>pyglet.window.Window,<sp/>scroll_speed=1,<sp/>min_zoom=1,<sp/>max_zoom=4):</highlight></codeline>
-<codeline lineno="15"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">assert</highlight><highlight class="normal"><sp/>min_zoom<sp/>&lt;=<sp/>max_zoom,<sp/></highlight><highlight class="stringliteral">&quot;Minimum<sp/>zoom<sp/>must<sp/>not<sp/>be<sp/>greater<sp/>than<sp/>maximum<sp/>zoom&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref><sp/>=<sp/>window</highlight></codeline>
-<codeline lineno="17"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a81dae02fbeac037bfcba9afeeac9a0ca" kindref="member">scroll_speed</ref><sp/>=<sp/>scroll_speed</highlight></codeline>
-<codeline lineno="18"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa8efeba81038cc57db534857a61b0d4b" kindref="member">max_zoom</ref><sp/>=<sp/>max_zoom</highlight></codeline>
-<codeline lineno="19"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa5e9b9a6cca61ed9f997cd23ed1ea8b6" kindref="member">min_zoom</ref><sp/>=<sp/>min_zoom</highlight></codeline>
-<codeline lineno="20"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" kindref="member">offset_x</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="21"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" kindref="member">offset_y</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="22"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref><sp/>=<sp/>max(min(1,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa8efeba81038cc57db534857a61b0d4b" kindref="member">max_zoom</ref>),<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa5e9b9a6cca61ed9f997cd23ed1ea8b6" kindref="member">min_zoom</ref>)</highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight></codeline>
-<codeline lineno="24"><highlight class="normal"><sp/><sp/><sp/><sp/>@property</highlight></codeline>
-<codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">zoom(self):</highlight></codeline>
-<codeline lineno="26"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref></highlight></codeline>
-<codeline lineno="27"><highlight class="normal"></highlight></codeline>
-<codeline lineno="28"><highlight class="normal"><sp/><sp/><sp/><sp/>@zoom.setter</highlight></codeline>
-<codeline lineno="29"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">zoom(self,<sp/>value):</highlight></codeline>
-<codeline lineno="30"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;<sp/>Here<sp/>we<sp/>set<sp/>zoom,<sp/>clamp<sp/>value<sp/>to<sp/>minimum<sp/>of<sp/>min_zoom<sp/>and<sp/>max<sp/>of<sp/>max_zoom.&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref><sp/>=<sp/>max(min(value,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa8efeba81038cc57db534857a61b0d4b" kindref="member">max_zoom</ref>),<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aa5e9b9a6cca61ed9f997cd23ed1ea8b6" kindref="member">min_zoom</ref>)</highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight></codeline>
-<codeline lineno="33"><highlight class="normal"><sp/><sp/><sp/><sp/>@property</highlight></codeline>
-<codeline lineno="34"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a3d2948dc5b1a9d2a6c597a2850ac989b" kindref="member">position</ref>(self):</highlight></codeline>
-<codeline lineno="35"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Query<sp/>the<sp/>current<sp/>offset.&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" kindref="member">offset_x</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" kindref="member">offset_y</ref></highlight></codeline>
-<codeline lineno="37"><highlight class="normal"></highlight></codeline>
-<codeline lineno="38"><highlight class="normal"><sp/><sp/><sp/><sp/>@position.setter</highlight></codeline>
-<codeline lineno="39"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a3d2948dc5b1a9d2a6c597a2850ac989b" kindref="member">position</ref>(self,<sp/>value):</highlight></codeline>
-<codeline lineno="40"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;Set<sp/>the<sp/>scroll<sp/>offset<sp/>directly.&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="41"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" kindref="member">offset_x</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" kindref="member">offset_y</ref><sp/>=<sp/>value</highlight></codeline>
-<codeline lineno="42"><highlight class="normal"></highlight></codeline>
-<codeline lineno="43"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aab35e83f0748c949b8e3a8414097d193" kindref="member">move</ref>(self,<sp/>axis_x,<sp/>axis_y):</highlight></codeline>
-<codeline lineno="44"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;<sp/>Move<sp/>axis<sp/>direction<sp/>with<sp/>scroll_speed.</highlight></codeline>
-<codeline lineno="45"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Example:<sp/>Move<sp/>left<sp/>-&gt;<sp/>move(-1,<sp/>0)</highlight></codeline>
-<codeline lineno="46"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" kindref="member">offset_x</ref><sp/>+=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a81dae02fbeac037bfcba9afeeac9a0ca" kindref="member">scroll_speed</ref><sp/>*<sp/>axis_x</highlight></codeline>
-<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" kindref="member">offset_y</ref><sp/>+=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a81dae02fbeac037bfcba9afeeac9a0ca" kindref="member">scroll_speed</ref><sp/>*<sp/>axis_y</highlight></codeline>
-<codeline lineno="49"><highlight class="normal"></highlight></codeline>
-<codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">begin(self):</highlight></codeline>
-<codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Set<sp/>the<sp/>current<sp/>camera<sp/>offset<sp/>so<sp/>you<sp/>can<sp/>draw<sp/>your<sp/>scene.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="52"><highlight class="normal"></highlight></codeline>
-<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Translate<sp/>using<sp/>the<sp/>offset.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>view_matrix<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.view.translate(-self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" kindref="member">offset_x</ref><sp/>*<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>-self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" kindref="member">offset_y</ref><sp/>*<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>0)</highlight></codeline>
-<codeline lineno="55"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Scale<sp/>by<sp/>zoom<sp/>level.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>view_matrix<sp/>=<sp/>view_matrix.scale(self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>1)</highlight></codeline>
-<codeline lineno="57"><highlight class="normal"></highlight></codeline>
-<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.view<sp/>=<sp/>view_matrix</highlight></codeline>
-<codeline lineno="59"><highlight class="normal"></highlight></codeline>
-<codeline lineno="60"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">end(self):</highlight></codeline>
-<codeline lineno="61"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Since<sp/>this<sp/>is<sp/>a<sp/>matrix,<sp/>you<sp/>will<sp/>need<sp/>to<sp/>reverse<sp/>the<sp/>translate<sp/>after<sp/>rendering<sp/>otherwise</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="62"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>it<sp/>will<sp/>multiply<sp/>the<sp/>current<sp/>offset<sp/>every<sp/>draw<sp/>update<sp/>pushing<sp/>it<sp/>further<sp/>and<sp/>further<sp/>away.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="63"><highlight class="normal"></highlight></codeline>
-<codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Reverse<sp/>scale,<sp/>since<sp/>that<sp/>was<sp/>the<sp/>last<sp/>transform.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>view_matrix<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.view.scale(1<sp/>/<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>1<sp/>/<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>1)</highlight></codeline>
-<codeline lineno="66"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Reverse<sp/>translate.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="67"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>view_matrix<sp/>=<sp/>view_matrix.translate(self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" kindref="member">offset_x</ref><sp/>*<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" kindref="member">offset_y</ref><sp/>*<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>0)</highlight></codeline>
-<codeline lineno="68"><highlight class="normal"></highlight></codeline>
-<codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.view<sp/>=<sp/>view_matrix</highlight></codeline>
-<codeline lineno="70"><highlight class="normal"></highlight></codeline>
-<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">__enter__(self):</highlight></codeline>
-<codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a1b32a1178f97029e2833a1f127a2c114" kindref="member">begin</ref>()</highlight></codeline>
-<codeline lineno="73"><highlight class="normal"></highlight></codeline>
-<codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">__exit__(self,<sp/>exception_type,<sp/>exception_value,<sp/>traceback):</highlight></codeline>
-<codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a30b46cfaa38e4956b06bfe9e98c3cbe3" kindref="member">end</ref>()</highlight></codeline>
-<codeline lineno="76"><highlight class="normal"></highlight></codeline>
-<codeline lineno="77"><highlight class="normal"></highlight></codeline>
-<codeline lineno="78" refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_centered_camera" kindref="compound">CenteredCamera</ref>(<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" kindref="compound">Camera</ref>):</highlight></codeline>
-<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;A<sp/>simple<sp/>2D<sp/>camera<sp/>class.<sp/>0,<sp/>0<sp/>will<sp/>be<sp/>the<sp/>center<sp/>of<sp/>the<sp/>screen,<sp/>as<sp/>opposed<sp/>to<sp/>the<sp/>bottom<sp/>left.&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="80"><highlight class="normal"></highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">begin(self):</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>=<sp/>-self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.width<sp/>//<sp/>2<sp/>/<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref><sp/>+<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" kindref="member">offset_x</ref></highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>=<sp/>-self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.height<sp/>//<sp/>2<sp/>/<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref><sp/>+<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" kindref="member">offset_y</ref></highlight></codeline>
-<codeline lineno="84"><highlight class="normal"></highlight></codeline>
-<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>view_matrix<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.view.translate(-x<sp/>*<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>-y<sp/>*<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>0)</highlight></codeline>
-<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>view_matrix<sp/>=<sp/>view_matrix.scale(self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>1)</highlight></codeline>
-<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.view<sp/>=<sp/>view_matrix</highlight></codeline>
-<codeline lineno="88"><highlight class="normal"></highlight></codeline>
-<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">end(self):</highlight></codeline>
-<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>=<sp/>-self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.width<sp/>//<sp/>2<sp/>/<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref><sp/>+<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2f36f3e98a13b1cb3513bb28ee49bfa3" kindref="member">offset_x</ref></highlight></codeline>
-<codeline lineno="91"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>=<sp/>-self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.height<sp/>//<sp/>2<sp/>/<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref><sp/>+<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a92ee123bd19379417dd3e36759024df9" kindref="member">offset_y</ref></highlight></codeline>
-<codeline lineno="92"><highlight class="normal"></highlight></codeline>
-<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>view_matrix<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.view.scale(1<sp/>/<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>1<sp/>/<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>1)</highlight></codeline>
-<codeline lineno="94"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>view_matrix<sp/>=<sp/>view_matrix.translate(x<sp/>*<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>y<sp/>*<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1aec06bae6c67e84720de17c8a80544b27" kindref="member">_zoom</ref>,<sp/>0)</highlight></codeline>
-<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera_1a2a4b65e4c2c87b3ed27ea4d694f6d9a4" kindref="member">_window</ref>.view<sp/>=<sp/>view_matrix</highlight></codeline>
-<codeline lineno="96"><highlight class="normal"></highlight></codeline>
-<codeline lineno="97"><highlight class="normal"></highlight></codeline>
-<codeline lineno="98"><highlight class="normal"></highlight></codeline>
-<codeline lineno="99"><highlight class="normal">parser<sp/>=<sp/>argparse.ArgumentParser()</highlight></codeline>
-<codeline lineno="100"><highlight class="normal">parser.add_argument(</highlight><highlight class="stringliteral">&apos;--map_path&apos;</highlight><highlight class="normal">,<sp/>type=str,<sp/>required=</highlight><highlight class="keyword">True</highlight><highlight class="normal">,<sp/>help=</highlight><highlight class="stringliteral">&apos;Path<sp/>to<sp/>the<sp/>map<sp/>without<sp/>extensions&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="101"><highlight class="normal">parser.add_argument(</highlight><highlight class="stringliteral">&apos;--map_ext&apos;</highlight><highlight class="normal">,<sp/>type=str,<sp/>required=</highlight><highlight class="keyword">True</highlight><highlight class="normal">,<sp/>help=</highlight><highlight class="stringliteral">&apos;Extension<sp/>of<sp/>the<sp/>map<sp/>image<sp/>file&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="102"><highlight class="normal">args<sp/>=<sp/>parser.parse_args()</highlight></codeline>
-<codeline lineno="103"><highlight class="normal"></highlight></codeline>
-<codeline lineno="104"><highlight class="normal"></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>yaml</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="105"><highlight class="normal"></highlight><highlight class="keyword">with</highlight><highlight class="normal"><sp/>open(args.map_path<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.yaml&apos;</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">&apos;r&apos;</highlight><highlight class="normal">)<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>yaml_stream:</highlight></codeline>
-<codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_metada<sp/>=<sp/>yaml.safe_load(yaml_stream)</highlight></codeline>
-<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_resolution<sp/>=<sp/>map_metada[</highlight><highlight class="stringliteral">&apos;resolution&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>origin<sp/>=<sp/>map_metada[</highlight><highlight class="stringliteral">&apos;origin&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>origin_x<sp/>=<sp/>origin[0]</highlight></codeline>
-<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>origin_y<sp/>=<sp/>origin[1]</highlight></codeline>
-<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal"><sp/>yaml.YAMLError<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>ex:</highlight></codeline>
-<codeline lineno="113"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(ex)</highlight></codeline>
-<codeline lineno="114"><highlight class="normal"></highlight></codeline>
-<codeline lineno="115"><highlight class="normal"></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>image</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="116"><highlight class="normal">map_img<sp/>=<sp/>np.array(Image.open(args.map_path<sp/>+<sp/>args.map_ext).transpose(Image.FLIP_TOP_BOTTOM)).astype(np.float64)</highlight></codeline>
-<codeline lineno="117"><highlight class="normal">map_height<sp/>=<sp/>map_img.shape[0]</highlight></codeline>
-<codeline lineno="118"><highlight class="normal">map_width<sp/>=<sp/>map_img.shape[1]</highlight></codeline>
-<codeline lineno="119"><highlight class="normal"></highlight></codeline>
-<codeline lineno="120"><highlight class="normal"></highlight><highlight class="comment">#<sp/>convert<sp/>map<sp/>pixels<sp/>to<sp/>coordinates</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="121"><highlight class="normal">range_x<sp/>=<sp/>np.arange(map_width)</highlight></codeline>
-<codeline lineno="122"><highlight class="normal">range_y<sp/>=<sp/>np.arange(map_height)</highlight></codeline>
-<codeline lineno="123"><highlight class="normal">map_x,<sp/>map_y<sp/>=<sp/>np.meshgrid(range_x,<sp/>range_y)</highlight></codeline>
-<codeline lineno="124"><highlight class="normal">map_x<sp/>=<sp/>(map_x<sp/>*<sp/>map_resolution<sp/>+<sp/>origin_x).flatten()</highlight></codeline>
-<codeline lineno="125"><highlight class="normal">map_y<sp/>=<sp/>(map_y<sp/>*<sp/>map_resolution<sp/>+<sp/>origin_y).flatten()</highlight></codeline>
-<codeline lineno="126"><highlight class="normal">map_z<sp/>=<sp/>np.zeros(map_y.shape)</highlight></codeline>
-<codeline lineno="127"><highlight class="normal">map_coords<sp/>=<sp/>np.vstack((map_x,<sp/>map_y,<sp/>map_z))</highlight></codeline>
-<codeline lineno="128"><highlight class="normal"></highlight></codeline>
-<codeline lineno="129"><highlight class="normal"></highlight><highlight class="comment">#<sp/>mask<sp/>and<sp/>only<sp/>leave<sp/>the<sp/>obstacle<sp/>points</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="130"><highlight class="normal">map_mask<sp/>=<sp/>map_img<sp/>==<sp/>0.0</highlight></codeline>
-<codeline lineno="131"><highlight class="normal">map_mask_flat<sp/>=<sp/>map_mask.flatten()</highlight></codeline>
-<codeline lineno="132"><highlight class="normal">map_points<sp/>=<sp/>map_coords[:,<sp/>map_mask_flat].T</highlight></codeline>
-<codeline lineno="133"><highlight class="normal"></highlight></codeline>
-<codeline lineno="134"><highlight class="normal"></highlight><highlight class="comment">#<sp/>prep<sp/>opengl</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="135"><highlight class="normal"></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Try<sp/>and<sp/>create<sp/>a<sp/>window<sp/>with<sp/>multisampling<sp/>(antialiasing)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/>config<sp/>=<sp/>Config(sample_buffers=1,<sp/>samples=4,</highlight></codeline>
-<codeline lineno="138"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>depth_size=16,<sp/>double_buffer=</highlight><highlight class="keyword">True</highlight><highlight class="normal">,<sp/>)</highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/>window<sp/>=<sp/>window.Window(resizable=</highlight><highlight class="keyword">True</highlight><highlight class="normal">,<sp/>config=config)</highlight></codeline>
-<codeline lineno="140"><highlight class="normal"></highlight><highlight class="keywordflow">except</highlight><highlight class="normal"><sp/>window.NoSuchConfigException:</highlight></codeline>
-<codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Fall<sp/>back<sp/>to<sp/>no<sp/>multisampling<sp/>for<sp/>old<sp/>hardware</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/>window<sp/>=<sp/>window.Window(resizable=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="143"><highlight class="normal"></highlight></codeline>
-<codeline lineno="144"><highlight class="normal">glClearColor(18/255,<sp/>4/255,<sp/>88/255,<sp/>1.)</highlight></codeline>
-<codeline lineno="145"><highlight class="normal">glEnable(GL_DEPTH_TEST)</highlight></codeline>
-<codeline lineno="146"><highlight class="normal">glTranslatef(25,<sp/>-5,<sp/>-60)</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"></highlight></codeline>
-<codeline lineno="148"><highlight class="normal">cam<sp/>=<sp/><ref refid="classf110__gym_1_1unittest_1_1pyglet__test_1_1_camera" kindref="compound">Camera</ref>(window)</highlight></codeline>
-<codeline lineno="149"><highlight class="normal"></highlight></codeline>
-<codeline lineno="150"><highlight class="normal">@window.event</highlight></codeline>
-<codeline lineno="151"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">on_resize(width,<sp/>height):</highlight></codeline>
-<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Override<sp/>the<sp/>default<sp/>on_resize<sp/>handler<sp/>to<sp/>create<sp/>a<sp/>3D<sp/>projection</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/>glViewport(0,<sp/>0,<sp/>width,<sp/>height)</highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/>glMatrixMode(GL_PROJECTION)</highlight></codeline>
-<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/>glLoadIdentity()</highlight></codeline>
-<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/>gluPerspective(60.,<sp/>width<sp/>/<sp/>float(height),<sp/>.1,<sp/>1000.)</highlight></codeline>
-<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/>glMatrixMode(GL_MODELVIEW)</highlight></codeline>
-<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>pyglet.event.EVENT_HANDLED</highlight></codeline>
-<codeline lineno="159"><highlight class="normal"></highlight></codeline>
-<codeline lineno="160"><highlight class="normal">batch<sp/>=<sp/>graphics.Batch()</highlight></codeline>
-<codeline lineno="161"><highlight class="normal"></highlight></codeline>
-<codeline lineno="162"><highlight class="normal">points<sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="163"><highlight class="normal"></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(map_points.shape[0]):</highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/>particle<sp/>=<sp/>batch.add(1,<sp/>GL_POINTS,<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">,<sp/>(</highlight><highlight class="stringliteral">&apos;v3f/stream&apos;</highlight><highlight class="normal">,<sp/>[map_points[i,<sp/>0],<sp/>map_points[i,<sp/>1],<sp/>map_points[i,<sp/>2]]))</highlight></codeline>
-<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/>points.append(particle)</highlight></codeline>
-<codeline lineno="166"><highlight class="normal"></highlight></codeline>
-<codeline lineno="167"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">loop(dt):</highlight></codeline>
-<codeline lineno="168"><highlight class="normal"><sp/><sp/><sp/><sp/>print(pyglet.clock.get_fps())</highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">pass</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="170"><highlight class="normal"></highlight></codeline>
-<codeline lineno="171"><highlight class="normal">@window.event</highlight></codeline>
-<codeline lineno="172"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">on_draw():</highlight></codeline>
-<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/>glClear(GL_COLOR_BUFFER_BIT<sp/>|<sp/>GL_DEPTH_BUFFER_BIT)</highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/>glColor3f(254/255,<sp/>117/255,<sp/>254/255)</highlight></codeline>
-<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/>cam.begin()</highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/>batch.draw()</highlight></codeline>
-<codeline lineno="177"><highlight class="normal"><sp/><sp/><sp/><sp/>cam.end()</highlight></codeline>
-<codeline lineno="178"><highlight class="normal"></highlight></codeline>
-<codeline lineno="179"><highlight class="normal">pyglet.clock.schedule(loop)</highlight></codeline>
-<codeline lineno="180"><highlight class="normal">pyglet.app.run()</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/pyglet__test__camera_8py.xml b/docs/xml/pyglet__test__camera_8py.xml
deleted file mode 100644
index 89cad37e..00000000
--- a/docs/xml/pyglet__test__camera_8py.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="pyglet__test__camera_8py" kind="file" language="Python">
-    <compoundname>pyglet_test_camera.py</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app" prot="public">f110_gym::unittest::pyglet_test_camera::App</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1pyglet__test__camera">f110_gym::unittest::pyglet_test_camera</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="keyword">import</highlight><highlight class="normal"><sp/>pyglet</highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacepyglet_1_1gl" kindref="compound">pyglet.gl</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Zooming<sp/>constants</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal">ZOOM_IN_FACTOR<sp/>=<sp/>1.2</highlight></codeline>
-<codeline lineno="6"><highlight class="normal">ZOOM_OUT_FACTOR<sp/>=<sp/>1/ZOOM_IN_FACTOR</highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight></codeline>
-<codeline lineno="8" refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app" kindref="compound">App</ref>(pyglet.window.Window):</highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">__init__(self,<sp/>width,<sp/>height,<sp/>*args,<sp/>**kwargs):</highlight></codeline>
-<codeline lineno="11"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>conf<sp/>=<sp/>Config(sample_buffers=1,</highlight></codeline>
-<codeline lineno="12"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>samples=4,</highlight></codeline>
-<codeline lineno="13"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>depth_size=16,</highlight></codeline>
-<codeline lineno="14"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>double_buffer=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="15"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>super().__init__(width,<sp/>height,<sp/>config=conf,<sp/>*args,<sp/>**kwargs)</highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#Initialize<sp/>camera<sp/>values</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1aaca4f571369fc95e45355634d41fc24e" kindref="member">left</ref><sp/><sp/><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="19"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a9c3fdc6ea9bbe0407668091c4b6effb5" kindref="member">right</ref><sp/><sp/>=<sp/>width</highlight></codeline>
-<codeline lineno="20"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a155af5e767867bdf910d8b0936219b5a" kindref="member">bottom</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="21"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2145d5c781e3f33fefd7b46af2fadd69" kindref="member">top</ref><sp/><sp/><sp/><sp/>=<sp/>height</highlight></codeline>
-<codeline lineno="22"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" kindref="member">zoom_level</ref><sp/>=<sp/>1</highlight></codeline>
-<codeline lineno="23"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1af92e414bc48f782207e5891ea82e3ad1" kindref="member">zoomed_width</ref><sp/><sp/>=<sp/>width</highlight></codeline>
-<codeline lineno="24"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2f88138801a909d8826f61792745409f" kindref="member">zoomed_height</ref><sp/>=<sp/>height</highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight></codeline>
-<codeline lineno="26"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">init_gl(self,<sp/>width,<sp/>height):</highlight></codeline>
-<codeline lineno="27"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Set<sp/>clear<sp/>color</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="28"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glClearColor(0/255,<sp/>0/255,<sp/>0/255,<sp/>0/255)</highlight></codeline>
-<codeline lineno="29"><highlight class="normal"></highlight></codeline>
-<codeline lineno="30"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Set<sp/>antialiasing</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glEnable(<sp/>GL_LINE_SMOOTH<sp/>)</highlight></codeline>
-<codeline lineno="32"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glEnable(<sp/>GL_POLYGON_SMOOTH<sp/>)</highlight></codeline>
-<codeline lineno="33"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glHint(<sp/>GL_LINE_SMOOTH_HINT,<sp/>GL_NICEST<sp/>)</highlight></codeline>
-<codeline lineno="34"><highlight class="normal"></highlight></codeline>
-<codeline lineno="35"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Set<sp/>alpha<sp/>blending</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glEnable(<sp/>GL_BLEND<sp/>)</highlight></codeline>
-<codeline lineno="37"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glBlendFunc(<sp/>GL_SRC_ALPHA,<sp/>GL_ONE_MINUS_SRC_ALPHA<sp/>)</highlight></codeline>
-<codeline lineno="38"><highlight class="normal"></highlight></codeline>
-<codeline lineno="39"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Set<sp/>viewport</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="40"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glViewport(<sp/>0,<sp/>0,<sp/>width,<sp/>height<sp/>)</highlight></codeline>
-<codeline lineno="41"><highlight class="normal"></highlight></codeline>
-<codeline lineno="42"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">on_resize(self,<sp/>width,<sp/>height):</highlight></codeline>
-<codeline lineno="43"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>super().on_resize(width,<sp/>height)</highlight></codeline>
-<codeline lineno="44"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>size<sp/>=<sp/>self.get_size()</highlight></codeline>
-<codeline lineno="45"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1aaca4f571369fc95e45355634d41fc24e" kindref="member">left</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a9c3fdc6ea9bbe0407668091c4b6effb5" kindref="member">right</ref><sp/>=<sp/>size[0]</highlight></codeline>
-<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a155af5e767867bdf910d8b0936219b5a" kindref="member">bottom</ref><sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2145d5c781e3f33fefd7b46af2fadd69" kindref="member">top</ref><sp/>=<sp/>size[1]</highlight></codeline>
-<codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1af92e414bc48f782207e5891ea82e3ad1" kindref="member">zoomed_width</ref><sp/>=<sp/>size[0]</highlight></codeline>
-<codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2f88138801a909d8826f61792745409f" kindref="member">zoomed_height</ref><sp/>=<sp/>size[1]</highlight></codeline>
-<codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>#<sp/>Set<sp/>window<sp/>values</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.width<sp/><sp/>=<sp/>width</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.height<sp/>=<sp/>height</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="55"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>#<sp/>Initialize<sp/>OpenGL<sp/>context</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.init_gl(width,<sp/>height)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.width<sp/>=<sp/>width</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>self.height<sp/>=<sp/>height</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="59"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>pass</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="60"><highlight class="normal"></highlight></codeline>
-<codeline lineno="61"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">on_mouse_drag(self,<sp/>x,<sp/>y,<sp/>dx,<sp/>dy,<sp/>buttons,<sp/>modifiers):</highlight></codeline>
-<codeline lineno="62"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Move<sp/>camera</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="63"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1aaca4f571369fc95e45355634d41fc24e" kindref="member">left</ref><sp/><sp/><sp/>-=<sp/>dx*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" kindref="member">zoom_level</ref></highlight></codeline>
-<codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a9c3fdc6ea9bbe0407668091c4b6effb5" kindref="member">right</ref><sp/><sp/>-=<sp/>dx*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" kindref="member">zoom_level</ref></highlight></codeline>
-<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a155af5e767867bdf910d8b0936219b5a" kindref="member">bottom</ref><sp/>-=<sp/>dy*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" kindref="member">zoom_level</ref></highlight></codeline>
-<codeline lineno="66"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2145d5c781e3f33fefd7b46af2fadd69" kindref="member">top</ref><sp/><sp/><sp/><sp/>-=<sp/>dy*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" kindref="member">zoom_level</ref></highlight></codeline>
-<codeline lineno="67"><highlight class="normal"></highlight></codeline>
-<codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">on_mouse_scroll(self,<sp/>x,<sp/>y,<sp/>dx,<sp/>dy):</highlight></codeline>
-<codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Get<sp/>scale<sp/>factor</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="70"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>=<sp/>ZOOM_IN_FACTOR<sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>dy<sp/>&gt;<sp/>0<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>ZOOM_OUT_FACTOR<sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>dy<sp/>&lt;<sp/>0<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>1</highlight></codeline>
-<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>If<sp/>zoom_level<sp/>is<sp/>in<sp/>the<sp/>proper<sp/>range</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>.2<sp/>&lt;<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" kindref="member">zoom_level</ref>*f<sp/>&lt;<sp/>5:</highlight></codeline>
-<codeline lineno="73"><highlight class="normal"></highlight></codeline>
-<codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" kindref="member">zoom_level</ref><sp/>*=<sp/>f</highlight></codeline>
-<codeline lineno="75"><highlight class="normal"></highlight></codeline>
-<codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>size<sp/>=<sp/>self.get_size()</highlight></codeline>
-<codeline lineno="77"><highlight class="normal"></highlight></codeline>
-<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mouse_x<sp/>=<sp/>x/size[0]</highlight></codeline>
-<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mouse_y<sp/>=<sp/>y/size[1]</highlight></codeline>
-<codeline lineno="80"><highlight class="normal"></highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mouse_x_in_world<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1aaca4f571369fc95e45355634d41fc24e" kindref="member">left</ref><sp/><sp/><sp/>+<sp/>mouse_x*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1af92e414bc48f782207e5891ea82e3ad1" kindref="member">zoomed_width</ref></highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mouse_y_in_world<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a155af5e767867bdf910d8b0936219b5a" kindref="member">bottom</ref><sp/>+<sp/>mouse_y*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2f88138801a909d8826f61792745409f" kindref="member">zoomed_height</ref></highlight></codeline>
-<codeline lineno="83"><highlight class="normal"></highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1af92e414bc48f782207e5891ea82e3ad1" kindref="member">zoomed_width</ref><sp/><sp/>*=<sp/>f</highlight></codeline>
-<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2f88138801a909d8826f61792745409f" kindref="member">zoomed_height</ref><sp/>*=<sp/>f</highlight></codeline>
-<codeline lineno="86"><highlight class="normal"></highlight></codeline>
-<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1aaca4f571369fc95e45355634d41fc24e" kindref="member">left</ref><sp/><sp/><sp/>=<sp/>mouse_x_in_world<sp/>-<sp/>mouse_x*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1af92e414bc48f782207e5891ea82e3ad1" kindref="member">zoomed_width</ref></highlight></codeline>
-<codeline lineno="88"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a9c3fdc6ea9bbe0407668091c4b6effb5" kindref="member">right</ref><sp/><sp/>=<sp/>mouse_x_in_world<sp/>+<sp/>(1<sp/>-<sp/>mouse_x)*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1af92e414bc48f782207e5891ea82e3ad1" kindref="member">zoomed_width</ref></highlight></codeline>
-<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a155af5e767867bdf910d8b0936219b5a" kindref="member">bottom</ref><sp/>=<sp/>mouse_y_in_world<sp/>-<sp/>mouse_y*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2f88138801a909d8826f61792745409f" kindref="member">zoomed_height</ref></highlight></codeline>
-<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2145d5c781e3f33fefd7b46af2fadd69" kindref="member">top</ref><sp/><sp/><sp/><sp/>=<sp/>mouse_y_in_world<sp/>+<sp/>(1<sp/>-<sp/>mouse_y)*self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2f88138801a909d8826f61792745409f" kindref="member">zoomed_height</ref></highlight></codeline>
-<codeline lineno="91"><highlight class="normal"></highlight></codeline>
-<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">on_draw(self):</highlight></codeline>
-<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Initialize<sp/>Projection<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="94"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glMatrixMode(<sp/>GL_PROJECTION<sp/>)</highlight></codeline>
-<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glLoadIdentity()</highlight></codeline>
-<codeline lineno="96"><highlight class="normal"></highlight></codeline>
-<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Initialize<sp/>Modelview<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glMatrixMode(<sp/>GL_MODELVIEW<sp/>)</highlight></codeline>
-<codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glLoadIdentity()</highlight></codeline>
-<codeline lineno="100"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Save<sp/>the<sp/>default<sp/>modelview<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="101"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glPushMatrix()</highlight></codeline>
-<codeline lineno="102"><highlight class="normal"></highlight></codeline>
-<codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Clear<sp/>window<sp/>with<sp/>ClearColor</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glClear(<sp/>GL_COLOR_BUFFER_BIT<sp/>)</highlight></codeline>
-<codeline lineno="105"><highlight class="normal"></highlight></codeline>
-<codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Set<sp/>orthographic<sp/>projection<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glOrtho(<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1aaca4f571369fc95e45355634d41fc24e" kindref="member">left</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a9c3fdc6ea9bbe0407668091c4b6effb5" kindref="member">right</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a155af5e767867bdf910d8b0936219b5a" kindref="member">bottom</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a2145d5c781e3f33fefd7b46af2fadd69" kindref="member">top</ref>,<sp/>1,<sp/>-1<sp/>)</highlight></codeline>
-<codeline lineno="108"><highlight class="normal"></highlight></codeline>
-<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Draw<sp/>quad</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glBegin(<sp/>GL_QUADS<sp/>)</highlight></codeline>
-<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glColor3ub(<sp/>0xFF,<sp/>0,<sp/>0<sp/>)</highlight></codeline>
-<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glVertex2i(<sp/>10,<sp/>10<sp/>)</highlight></codeline>
-<codeline lineno="113"><highlight class="normal"></highlight></codeline>
-<codeline lineno="114"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glColor3ub(<sp/>0xFF,<sp/>0xFF,<sp/>0<sp/>)</highlight></codeline>
-<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glVertex2i(<sp/>110,<sp/>10<sp/>)</highlight></codeline>
-<codeline lineno="116"><highlight class="normal"></highlight></codeline>
-<codeline lineno="117"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glColor3ub(<sp/>0,<sp/>0xFF,<sp/>0<sp/>)</highlight></codeline>
-<codeline lineno="118"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glVertex2i(<sp/>110,<sp/>110<sp/>)</highlight></codeline>
-<codeline lineno="119"><highlight class="normal"></highlight></codeline>
-<codeline lineno="120"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glColor3ub(<sp/>0,<sp/>0,<sp/>0xFF<sp/>)</highlight></codeline>
-<codeline lineno="121"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glVertex2i(<sp/>10,<sp/>110<sp/>)</highlight></codeline>
-<codeline lineno="122"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glEnd()</highlight></codeline>
-<codeline lineno="123"><highlight class="normal"></highlight></codeline>
-<codeline lineno="124"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Remove<sp/>default<sp/>modelview<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glPopMatrix()</highlight></codeline>
-<codeline lineno="126"><highlight class="normal"></highlight></codeline>
-<codeline lineno="127"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">run(self):</highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pyglet.app.run()</highlight></codeline>
-<codeline lineno="129"><highlight class="normal"></highlight></codeline>
-<codeline lineno="130"><highlight class="normal"></highlight></codeline>
-<codeline lineno="131"><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app" kindref="compound">App</ref>(800,<sp/>800,<sp/>resizable=</highlight><highlight class="keyword">True</highlight><highlight class="normal">).run()</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/pyglet_test_camera.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/random__trackgen_8py.xml b/docs/xml/random__trackgen_8py.xml
deleted file mode 100644
index 72b46a45..00000000
--- a/docs/xml/random__trackgen_8py.xml
+++ /dev/null
@@ -1,248 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="random__trackgen_8py" kind="file" language="Python">
-    <compoundname>random_trackgen.py</compoundname>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1random__trackgen">f110_gym::unittest::random_trackgen</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="25"><highlight class="stringliteral">Generates<sp/>random<sp/>tracks.</highlight></codeline>
-<codeline lineno="26"><highlight class="stringliteral">Adapted<sp/>from<sp/>https://gym.openai.com/envs/CarRacing-v0</highlight></codeline>
-<codeline lineno="27"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng<sp/><sp/></highlight></codeline>
-<codeline lineno="28"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="29"><highlight class="normal"></highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>cv2</highlight></codeline>
-<codeline lineno="31"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>os</highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>math</highlight></codeline>
-<codeline lineno="33"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="34"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>shapely.geometry<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>shp</highlight></codeline>
-<codeline lineno="35"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="36"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>matplotlib.patches<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>Polygon</highlight></codeline>
-<codeline lineno="37"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>matplotlib.collections<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>PatchCollection</highlight></codeline>
-<codeline lineno="38"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>argparse</highlight></codeline>
-<codeline lineno="39"><highlight class="normal"></highlight></codeline>
-<codeline lineno="40"><highlight class="normal">parser<sp/>=<sp/>argparse.ArgumentParser()</highlight></codeline>
-<codeline lineno="41"><highlight class="normal">parser.add_argument(</highlight><highlight class="stringliteral">&apos;--seed&apos;</highlight><highlight class="normal">,<sp/>type=int,<sp/>default=123,<sp/>help=</highlight><highlight class="stringliteral">&apos;Seed<sp/>for<sp/>the<sp/>numpy<sp/>rng.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="42"><highlight class="normal">parser.add_argument(</highlight><highlight class="stringliteral">&apos;--num_maps&apos;</highlight><highlight class="normal">,<sp/>type=int,<sp/>default=1,<sp/>help=</highlight><highlight class="stringliteral">&apos;Number<sp/>of<sp/>maps<sp/>to<sp/>generate.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="43"><highlight class="normal">args<sp/>=<sp/>parser.parse_args()</highlight></codeline>
-<codeline lineno="44"><highlight class="normal"></highlight></codeline>
-<codeline lineno="45"><highlight class="normal">np.random.seed(args.seed)</highlight></codeline>
-<codeline lineno="46"><highlight class="normal"></highlight></codeline>
-<codeline lineno="47"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>os.path.exists(</highlight><highlight class="stringliteral">&apos;maps&apos;</highlight><highlight class="normal">):</highlight></codeline>
-<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Creating<sp/>maps/<sp/>directory.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/>os.makedirs(</highlight><highlight class="stringliteral">&apos;maps&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="50"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>os.path.exists(</highlight><highlight class="stringliteral">&apos;centerline&apos;</highlight><highlight class="normal">):</highlight></codeline>
-<codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Creating<sp/>centerline/<sp/>directory.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/>os.makedirs(</highlight><highlight class="stringliteral">&apos;centerline&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="53"><highlight class="normal"></highlight></codeline>
-<codeline lineno="54"><highlight class="normal">NUM_MAPS<sp/>=<sp/>args.num_maps</highlight></codeline>
-<codeline lineno="55"><highlight class="normal">WIDTH<sp/>=<sp/>10.0</highlight></codeline>
-<codeline lineno="56"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">create_track():</highlight></codeline>
-<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/>CHECKPOINTS<sp/>=<sp/>16</highlight></codeline>
-<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/>SCALE<sp/>=<sp/>6.0</highlight></codeline>
-<codeline lineno="59"><highlight class="normal"><sp/><sp/><sp/><sp/>TRACK_RAD<sp/>=<sp/>900/SCALE</highlight></codeline>
-<codeline lineno="60"><highlight class="normal"><sp/><sp/><sp/><sp/>TRACK_DETAIL_STEP<sp/>=<sp/>21/SCALE</highlight></codeline>
-<codeline lineno="61"><highlight class="normal"><sp/><sp/><sp/><sp/>TRACK_TURN_RATE<sp/>=<sp/>0.31</highlight></codeline>
-<codeline lineno="62"><highlight class="normal"></highlight></codeline>
-<codeline lineno="63"><highlight class="normal"><sp/><sp/><sp/><sp/>start_alpha<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="64"><highlight class="normal"></highlight></codeline>
-<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Create<sp/>checkpoints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="66"><highlight class="normal"><sp/><sp/><sp/><sp/>checkpoints<sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="67"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>c<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(CHECKPOINTS):</highlight></codeline>
-<codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>alpha<sp/>=<sp/>2*math.pi*c/CHECKPOINTS<sp/>+<sp/>np.random.uniform(0,<sp/>2*math.pi*1/CHECKPOINTS)</highlight></codeline>
-<codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rad<sp/>=<sp/>np.random.uniform(TRACK_RAD/3,<sp/>TRACK_RAD)</highlight></codeline>
-<codeline lineno="70"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>c==0:</highlight></codeline>
-<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>alpha<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rad<sp/>=<sp/>1.5*TRACK_RAD</highlight></codeline>
-<codeline lineno="73"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>c==CHECKPOINTS-1:</highlight></codeline>
-<codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>alpha<sp/>=<sp/>2*math.pi*c/CHECKPOINTS</highlight></codeline>
-<codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>start_alpha<sp/>=<sp/>2*math.pi*(-0.5)/CHECKPOINTS</highlight></codeline>
-<codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rad<sp/>=<sp/>1.5*TRACK_RAD</highlight></codeline>
-<codeline lineno="77"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>checkpoints.append(<sp/>(alpha,<sp/>rad*math.cos(alpha),<sp/>rad*math.sin(alpha))<sp/>)</highlight></codeline>
-<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/>road<sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="79"><highlight class="normal"></highlight></codeline>
-<codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Go<sp/>from<sp/>one<sp/>checkpoint<sp/>to<sp/>another<sp/>to<sp/>create<sp/>track</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/>x,<sp/>y,<sp/>beta<sp/>=<sp/>1.5*TRACK_RAD,<sp/>0,<sp/>0</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/>dest_i<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/>laps<sp/>=<sp/>0</highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/>track<sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/>no_freeze<sp/>=<sp/>2500</highlight></codeline>
-<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/>visited_other_side<sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="88"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>alpha<sp/>=<sp/>math.atan2(y,<sp/>x)</highlight></codeline>
-<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>visited_other_side<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>alpha<sp/>&gt;<sp/>0:</highlight></codeline>
-<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>laps<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="91"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>visited_other_side<sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>alpha<sp/>&lt;<sp/>0:</highlight></codeline>
-<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>visited_other_side<sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="94"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>alpha<sp/>+=<sp/>2*math.pi</highlight></codeline>
-<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>failed<sp/>=<sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dest_alpha,<sp/>dest_x,<sp/>dest_y<sp/>=<sp/>checkpoints[dest_i<sp/>%<sp/>len(checkpoints)]</highlight></codeline>
-<codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>alpha<sp/>&lt;=<sp/>dest_alpha:</highlight></codeline>
-<codeline lineno="100"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>failed<sp/>=<sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="101"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="102"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dest_i<sp/>+=<sp/>1</highlight></codeline>
-<codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>dest_i<sp/>%<sp/>len(checkpoints)<sp/>==<sp/>0:</highlight></codeline>
-<codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="105"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">not</highlight><highlight class="normal"><sp/>failed:</highlight></codeline>
-<codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>alpha<sp/>-=<sp/>2*math.pi</highlight></codeline>
-<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>r1x<sp/>=<sp/>math.cos(beta)</highlight></codeline>
-<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>r1y<sp/>=<sp/>math.sin(beta)</highlight></codeline>
-<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>p1x<sp/>=<sp/>-r1y</highlight></codeline>
-<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>p1y<sp/>=<sp/>r1x</highlight></codeline>
-<codeline lineno="113"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dest_dx<sp/>=<sp/>dest_x<sp/>-<sp/>x</highlight></codeline>
-<codeline lineno="114"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dest_dy<sp/>=<sp/>dest_y<sp/>-<sp/>y</highlight></codeline>
-<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>proj<sp/>=<sp/>r1x*dest_dx<sp/>+<sp/>r1y*dest_dy</highlight></codeline>
-<codeline lineno="116"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>beta<sp/>-<sp/>alpha<sp/>&gt;<sp/><sp/>1.5*math.pi:</highlight></codeline>
-<codeline lineno="117"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta<sp/>-=<sp/>2*math.pi</highlight></codeline>
-<codeline lineno="118"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>beta<sp/>-<sp/>alpha<sp/>&lt;<sp/>-1.5*math.pi:</highlight></codeline>
-<codeline lineno="119"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta<sp/>+=<sp/>2*math.pi</highlight></codeline>
-<codeline lineno="120"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>prev_beta<sp/>=<sp/>beta</highlight></codeline>
-<codeline lineno="121"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>proj<sp/>*=<sp/>SCALE</highlight></codeline>
-<codeline lineno="122"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>proj<sp/>&gt;<sp/><sp/>0.3:</highlight></codeline>
-<codeline lineno="123"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta<sp/>-=<sp/>min(TRACK_TURN_RATE,<sp/>abs(0.001*proj))</highlight></codeline>
-<codeline lineno="124"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>proj<sp/>&lt;<sp/>-0.3:</highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>beta<sp/>+=<sp/>min(TRACK_TURN_RATE,<sp/>abs(0.001*proj))</highlight></codeline>
-<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>+=<sp/>p1x*TRACK_DETAIL_STEP</highlight></codeline>
-<codeline lineno="127"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>+=<sp/>p1y*TRACK_DETAIL_STEP</highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>track.append(<sp/>(alpha,prev_beta*0.5<sp/>+<sp/>beta*0.5,x,y)<sp/>)</highlight></codeline>
-<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>laps<sp/>&gt;<sp/>4:</highlight></codeline>
-<codeline lineno="130"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>no_freeze<sp/>-=<sp/>1</highlight></codeline>
-<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>no_freeze==0:</highlight></codeline>
-<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="134"><highlight class="normal"></highlight></codeline>
-<codeline lineno="135"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Find<sp/>closed<sp/>loop</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/>i1,<sp/>i2<sp/>=<sp/>-1,<sp/>-1</highlight></codeline>
-<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/>i<sp/>=<sp/>len(track)</highlight></codeline>
-<codeline lineno="138"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>i<sp/>-=<sp/>1</highlight></codeline>
-<codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>i==0:</highlight></codeline>
-<codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pass_through_start<sp/>=<sp/>track[i][0]<sp/>&gt;<sp/>start_alpha<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>track[i-1][0]<sp/>&lt;=<sp/>start_alpha</highlight></codeline>
-<codeline lineno="143"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>pass_through_start<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>i2==-1:</highlight></codeline>
-<codeline lineno="144"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>i2<sp/>=<sp/>i</highlight></codeline>
-<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">elif</highlight><highlight class="normal"><sp/>pass_through_start<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>i1==-1:</highlight></codeline>
-<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>i1<sp/>=<sp/>i</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&quot;Track<sp/>generation:<sp/>%i..%i<sp/>-&gt;<sp/>%i-tiles<sp/>track&quot;</highlight><highlight class="normal"><sp/>%<sp/>(i1,<sp/>i2,<sp/>i2-i1))</highlight></codeline>
-<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">assert</highlight><highlight class="normal"><sp/>i1!=-1</highlight></codeline>
-<codeline lineno="150"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">assert</highlight><highlight class="normal"><sp/>i2!=-1</highlight></codeline>
-<codeline lineno="151"><highlight class="normal"></highlight></codeline>
-<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/>track<sp/>=<sp/>track[i1:i2-1]</highlight></codeline>
-<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/>first_beta<sp/>=<sp/>track[0][1]</highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/>first_perp_x<sp/>=<sp/>math.cos(first_beta)</highlight></codeline>
-<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/>first_perp_y<sp/>=<sp/>math.sin(first_beta)</highlight></codeline>
-<codeline lineno="156"><highlight class="normal"></highlight></codeline>
-<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Length<sp/>of<sp/>perpendicular<sp/>jump<sp/>to<sp/>put<sp/>together<sp/>head<sp/>and<sp/>tail</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/>well_glued_together<sp/>=<sp/>np.sqrt(</highlight></codeline>
-<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>np.square(<sp/>first_perp_x*(track[0][2]<sp/>-<sp/>track[-1][2])<sp/>)<sp/>+</highlight></codeline>
-<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>np.square(<sp/>first_perp_y*(track[0][3]<sp/>-<sp/>track[-1][3])<sp/>))</highlight></codeline>
-<codeline lineno="161"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>well_glued_together<sp/>&gt;<sp/>TRACK_DETAIL_STEP:</highlight></codeline>
-<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">False</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="163"><highlight class="normal"></highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>post<sp/>processing,<sp/>converting<sp/>to<sp/>numpy,<sp/>finding<sp/>exterior<sp/>and<sp/>interior<sp/>walls</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/>track_xy<sp/>=<sp/>[(x,<sp/>y)<sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(a1,<sp/>b1,<sp/>x,<sp/>y)<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>track]</highlight></codeline>
-<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/>track_xy<sp/>=<sp/>np.asarray(track_xy)</highlight></codeline>
-<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/>track_poly<sp/>=<sp/>shp.Polygon(track_xy)</highlight></codeline>
-<codeline lineno="168"><highlight class="normal"><sp/><sp/><sp/><sp/>track_xy_offset_in<sp/>=<sp/>track_poly.buffer(WIDTH)</highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/>track_xy_offset_out<sp/>=<sp/>track_poly.buffer(-WIDTH)</highlight></codeline>
-<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/>track_xy_offset_in_np<sp/>=<sp/>np.array(track_xy_offset_in.exterior)</highlight></codeline>
-<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/>track_xy_offset_out_np<sp/>=<sp/>np.array(track_xy_offset_out.exterior)</highlight></codeline>
-<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>track_xy,<sp/>track_xy_offset_in_np,<sp/>track_xy_offset_out_np</highlight></codeline>
-<codeline lineno="173"><highlight class="normal"></highlight></codeline>
-<codeline lineno="174"><highlight class="normal"></highlight></codeline>
-<codeline lineno="175"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">convert_track(track,<sp/>track_int,<sp/>track_ext,<sp/>iter):</highlight></codeline>
-<codeline lineno="176"><highlight class="normal"></highlight></codeline>
-<codeline lineno="177"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>converts<sp/>track<sp/>to<sp/>image<sp/>and<sp/>saves<sp/>the<sp/>centerline<sp/>as<sp/>waypoints</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/>fig,<sp/>ax<sp/>=<sp/>plt.subplots()</highlight></codeline>
-<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/>fig.set_size_inches(20,<sp/>20)</highlight></codeline>
-<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/>ax.plot(*track_int.T,<sp/>color=</highlight><highlight class="stringliteral">&apos;black&apos;</highlight><highlight class="normal">,<sp/>linewidth=3)</highlight></codeline>
-<codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/>ax.plot(*track_ext.T,<sp/>color=</highlight><highlight class="stringliteral">&apos;black&apos;</highlight><highlight class="normal">,<sp/>linewidth=3)</highlight></codeline>
-<codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/>plt.tight_layout()</highlight></codeline>
-<codeline lineno="183"><highlight class="normal"><sp/><sp/><sp/><sp/>ax.set_aspect(</highlight><highlight class="stringliteral">&apos;equal&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="184"><highlight class="normal"><sp/><sp/><sp/><sp/>ax.set_xlim(-180,<sp/>300)</highlight></codeline>
-<codeline lineno="185"><highlight class="normal"><sp/><sp/><sp/><sp/>ax.set_ylim(-300,<sp/>300)</highlight></codeline>
-<codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/>plt.axis(</highlight><highlight class="stringliteral">&apos;off&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="187"><highlight class="normal"><sp/><sp/><sp/><sp/>plt.savefig(</highlight><highlight class="stringliteral">&apos;maps/map&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal">,<sp/>dpi=80)</highlight></codeline>
-<codeline lineno="188"><highlight class="normal"></highlight></codeline>
-<codeline lineno="189"><highlight class="normal"><sp/><sp/><sp/><sp/>map_width,<sp/>map_height<sp/>=<sp/>fig.canvas.get_width_height()</highlight></codeline>
-<codeline lineno="190"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;map<sp/>size:<sp/>&apos;</highlight><highlight class="normal">,<sp/>map_width,<sp/>map_height)</highlight></codeline>
-<codeline lineno="191"><highlight class="normal"></highlight></codeline>
-<codeline lineno="192"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>transform<sp/>the<sp/>track<sp/>center<sp/>line<sp/>into<sp/>pixel<sp/>coordinates</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="193"><highlight class="normal"><sp/><sp/><sp/><sp/>xy_pixels<sp/>=<sp/>ax.transData.transform(track)</highlight></codeline>
-<codeline lineno="194"><highlight class="normal"><sp/><sp/><sp/><sp/>origin_x_pix<sp/>=<sp/>xy_pixels[0,<sp/>0]</highlight></codeline>
-<codeline lineno="195"><highlight class="normal"><sp/><sp/><sp/><sp/>origin_y_pix<sp/>=<sp/>xy_pixels[0,<sp/>1]</highlight></codeline>
-<codeline lineno="196"><highlight class="normal"></highlight></codeline>
-<codeline lineno="197"><highlight class="normal"><sp/><sp/><sp/><sp/>xy_pixels<sp/>=<sp/>xy_pixels<sp/>-<sp/>np.array([[origin_x_pix,<sp/>origin_y_pix]])</highlight></codeline>
-<codeline lineno="198"><highlight class="normal"></highlight></codeline>
-<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/>map_origin_x<sp/>=<sp/>-origin_x_pix*0.05</highlight></codeline>
-<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/>map_origin_y<sp/>=<sp/>-origin_y_pix*0.05</highlight></codeline>
-<codeline lineno="201"><highlight class="normal"></highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>convert<sp/>image<sp/>using<sp/>cv2</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="203"><highlight class="normal"><sp/><sp/><sp/><sp/>cv_img<sp/>=<sp/>cv2.imread(</highlight><highlight class="stringliteral">&apos;maps/map&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal">,<sp/>-1)</highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>convert<sp/>to<sp/>bw</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/>cv_img_bw<sp/>=<sp/>cv2.cvtColor(cv_img,<sp/>cv2.COLOR_BGR2GRAY)</highlight></codeline>
-<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>saving<sp/>to<sp/>img</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/>cv2.imwrite(</highlight><highlight class="stringliteral">&apos;maps/map&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal">,<sp/>cv_img_bw)</highlight></codeline>
-<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/>cv2.imwrite(</highlight><highlight class="stringliteral">&apos;maps/map&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.pgm&apos;</highlight><highlight class="normal">,<sp/>cv_img_bw)</highlight></codeline>
-<codeline lineno="209"><highlight class="normal"></highlight></codeline>
-<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>create<sp/>yaml<sp/>file</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml<sp/>=<sp/>open(</highlight><highlight class="stringliteral">&apos;maps/map&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.yaml&apos;</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">&apos;w&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml.write(</highlight><highlight class="stringliteral">&apos;image:<sp/>map&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.pgm\n&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml.write(</highlight><highlight class="stringliteral">&apos;resolution:<sp/>0.062500\n&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml.write(</highlight><highlight class="stringliteral">&apos;origin:<sp/>[&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(map_origin_x)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;,&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(map_origin_y)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;,<sp/>0.000000]\n&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml.write(</highlight><highlight class="stringliteral">&apos;negate:<sp/>0\noccupied_thresh:<sp/>0.45\nfree_thresh:<sp/>0.196&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml.close()</highlight></codeline>
-<codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/>plt.close()</highlight></codeline>
-<codeline lineno="218"><highlight class="normal"></highlight></codeline>
-<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>saving<sp/>track<sp/>centerline<sp/>as<sp/>a<sp/>csv<sp/>in<sp/>ros<sp/>coords</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/>waypoints_csv<sp/>=<sp/>open(</highlight><highlight class="stringliteral">&apos;centerline/map&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.csv&apos;</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">&apos;w&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>row<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>xy_pixels:</highlight></codeline>
-<codeline lineno="222"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>waypoints_csv.write(str(0.05*row[0])<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;,<sp/>&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(0.05*row[1])<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;\n&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="223"><highlight class="normal"><sp/><sp/><sp/><sp/>waypoints_csv.close()</highlight></codeline>
-<codeline lineno="224"><highlight class="normal"></highlight></codeline>
-<codeline lineno="225"><highlight class="normal"></highlight></codeline>
-<codeline lineno="226"><highlight class="normal"></highlight></codeline>
-<codeline lineno="227"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>__name__<sp/>==<sp/></highlight><highlight class="stringliteral">&apos;__main__&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(NUM_MAPS):</highlight></codeline>
-<codeline lineno="229"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="230"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>track,<sp/>track_int,<sp/>track_ext<sp/>=<sp/>create_track()</highlight></codeline>
-<codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="232"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Random<sp/>generator<sp/>failed,<sp/>retrying&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="233"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="234"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>convert_track(track,<sp/>track_int,<sp/>track_ext,<sp/>i)</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/random_trackgen.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/rendering_8py.xml b/docs/xml/rendering_8py.xml
deleted file mode 100644
index fca16f6f..00000000
--- a/docs/xml/rendering_8py.xml
+++ /dev/null
@@ -1,352 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="rendering_8py" kind="file" language="Python">
-    <compoundname>rendering.py</compoundname>
-    <innerclass refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer" prot="public">f110_gym::envs::rendering::EnvRenderer</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1envs_1_1rendering">f110_gym::envs::rendering</innernamespace>
-    <innernamespace refid="namespacepyglet_1_1gl">pyglet::gl</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="26"><highlight class="stringliteral">Rendering<sp/>engine<sp/>for<sp/>f1tenth<sp/>gym<sp/>env<sp/>based<sp/>on<sp/>pyglet<sp/>and<sp/>OpenGL</highlight></codeline>
-<codeline lineno="27"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="28"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="29"><highlight class="normal"></highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight><highlight class="comment">#<sp/>opengl<sp/>stuff</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="31"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>pyglet</highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacepyglet_1_1gl" kindref="compound">pyglet.gl</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-<codeline lineno="33"><highlight class="normal"></highlight></codeline>
-<codeline lineno="34"><highlight class="normal"></highlight><highlight class="comment">#<sp/>other</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="35"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="36"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>PIL<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>Image</highlight></codeline>
-<codeline lineno="37"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>yaml</highlight></codeline>
-<codeline lineno="38"><highlight class="normal"></highlight></codeline>
-<codeline lineno="39"><highlight class="normal"></highlight><highlight class="comment">#<sp/>helpers</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="40"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacef110__gym_1_1envs_1_1collision__models" kindref="compound">f110_gym.envs.collision_models</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>get_vertices</highlight></codeline>
-<codeline lineno="41"><highlight class="normal"></highlight></codeline>
-<codeline lineno="42"><highlight class="normal"></highlight><highlight class="comment">#<sp/>zooming<sp/>constants</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="43"><highlight class="normal">ZOOM_IN_FACTOR<sp/>=<sp/>1.2</highlight></codeline>
-<codeline lineno="44"><highlight class="normal">ZOOM_OUT_FACTOR<sp/>=<sp/>1/ZOOM_IN_FACTOR</highlight></codeline>
-<codeline lineno="45"><highlight class="normal"></highlight></codeline>
-<codeline lineno="46"><highlight class="normal"></highlight><highlight class="comment">#<sp/>vehicle<sp/>shape<sp/>constants</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="47"><highlight class="normal">CAR_LENGTH<sp/>=<sp/>0.58</highlight></codeline>
-<codeline lineno="48"><highlight class="normal">CAR_WIDTH<sp/>=<sp/>0.31</highlight></codeline>
-<codeline lineno="49"><highlight class="normal"></highlight></codeline>
-<codeline lineno="50" refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer" kindref="compound">EnvRenderer</ref>(pyglet.window.Window):</highlight></codeline>
-<codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="52"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>A<sp/>window<sp/>class<sp/>inherited<sp/>from<sp/>pyglet.window.Window,<sp/>handles<sp/>the<sp/>camera/projection<sp/>interaction,<sp/>resizing<sp/>window,<sp/>and<sp/>rendering<sp/>the<sp/>environment</highlight></codeline>
-<codeline lineno="53"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a1b24abdbb4d13744255ebfdb3d509354" kindref="member">__init__</ref>(self,<sp/>width,<sp/>height,<sp/>*args,<sp/>**kwargs):</highlight></codeline>
-<codeline lineno="55"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="56"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Class<sp/>constructor</highlight></codeline>
-<codeline lineno="57"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="58"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="59"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>width<sp/>(int):<sp/>width<sp/>of<sp/>the<sp/>window</highlight></codeline>
-<codeline lineno="60"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>height<sp/>(int):<sp/>height<sp/>of<sp/>the<sp/>window</highlight></codeline>
-<codeline lineno="61"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="62"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="63"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="64"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>conf<sp/>=<sp/>Config(sample_buffers=1,</highlight></codeline>
-<codeline lineno="66"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>samples=4,</highlight></codeline>
-<codeline lineno="67"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>depth_size=16,</highlight></codeline>
-<codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>double_buffer=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>super().<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a1b24abdbb4d13744255ebfdb3d509354" kindref="member">__init__</ref>(width,<sp/>height,<sp/>config=conf,<sp/>resizable=</highlight><highlight class="keyword">True</highlight><highlight class="normal">,<sp/>vsync=</highlight><highlight class="keyword">False</highlight><highlight class="normal">,<sp/>*args,<sp/>**kwargs)</highlight></codeline>
-<codeline lineno="70"><highlight class="normal"></highlight></codeline>
-<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>gl<sp/>init</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glClearColor(9/255,<sp/>32/255,<sp/>87/255,<sp/>1.)</highlight></codeline>
-<codeline lineno="73"><highlight class="normal"></highlight></codeline>
-<codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>initialize<sp/>camera<sp/>values</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10e0980201fca6f3392fc5c333a6ad99" kindref="member">left</ref><sp/>=<sp/>-width/2</highlight></codeline>
-<codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1acb665a6f4d150da3b2159b1cd86f4117" kindref="member">right</ref><sp/>=<sp/>width/2</highlight></codeline>
-<codeline lineno="77"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ab6f1d3bbdf185a2489a9c444413e72b6" kindref="member">bottom</ref><sp/>=<sp/>-height/2</highlight></codeline>
-<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a6e8e1a6e3f6c1f681f0fcbe6c04ffc27" kindref="member">top</ref><sp/>=<sp/>height/2</highlight></codeline>
-<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>=<sp/>1.2</highlight></codeline>
-<codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1af71d3702c2e9fa5e8e109111b4a337ce" kindref="member">zoomed_width</ref><sp/>=<sp/>width</highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a769be9782b9452fd8c3c1984985e419b" kindref="member">zoomed_height</ref><sp/>=<sp/>height</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"></highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>current<sp/>batch<sp/>that<sp/>keeps<sp/>track<sp/>of<sp/>all<sp/>graphics</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0f6f622b6ffe98f7ee038c2ce72af276" kindref="member">batch</ref><sp/>=<sp/>pyglet.graphics.Batch()</highlight></codeline>
-<codeline lineno="85"><highlight class="normal"></highlight></codeline>
-<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>current<sp/>env<sp/>map</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae423459dd9ee2da53cf7929e4591e366" kindref="member">map_points</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="88"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>current<sp/>env<sp/>agent<sp/>poses,<sp/>(num_agents,<sp/>3),<sp/>columns<sp/>are<sp/>(x,<sp/>y,<sp/>theta)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a227e60c781a0e50f827ea2f4f11a3f85" kindref="member">poses</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="91"><highlight class="normal"></highlight></codeline>
-<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>current<sp/>env<sp/>agent<sp/>vertices,<sp/>(num_agents,<sp/>4,<sp/>2),<sp/>2nd<sp/>and<sp/>3rd<sp/>dimensions<sp/>are<sp/>the<sp/>4<sp/>corners<sp/>in<sp/>2D</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a8a458f2ce6a733888d1a6bfaab243f31" kindref="member">vertices</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="94"><highlight class="normal"></highlight></codeline>
-<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>current<sp/>score<sp/>label</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad3328a46ae8641dc60b24d53219ffcb3" kindref="member">score_label</ref><sp/>=<sp/>pyglet.text.Label(</highlight></codeline>
-<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&apos;Lap<sp/>Time:<sp/>{laptime:.2f},<sp/>Ego<sp/>Lap<sp/>Count:<sp/>{count:.0f}&apos;</highlight><highlight class="normal">.format(</highlight></codeline>
-<codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>laptime=0.0,<sp/>count=0.0),</highlight></codeline>
-<codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>font_size=36,</highlight></codeline>
-<codeline lineno="100"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x=0,</highlight></codeline>
-<codeline lineno="101"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y=-800,</highlight></codeline>
-<codeline lineno="102"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>anchor_x=</highlight><highlight class="stringliteral">&apos;center&apos;</highlight><highlight class="normal">,</highlight></codeline>
-<codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>anchor_y=</highlight><highlight class="stringliteral">&apos;center&apos;</highlight><highlight class="normal">,</highlight></codeline>
-<codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>width=0.01,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="105"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>height=0.01,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>color=(255,<sp/>255,<sp/>255,<sp/>255),</highlight></codeline>
-<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>batch=self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0f6f622b6ffe98f7ee038c2ce72af276" kindref="member">batch</ref>)</highlight></codeline>
-<codeline lineno="108"><highlight class="normal"></highlight></codeline>
-<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a2ecadd7a3ea2a4525bd7b0b4d362db81" kindref="member">fps_display</ref><sp/>=<sp/>pyglet.window.FPSDisplay(self)</highlight></codeline>
-<codeline lineno="110"><highlight class="normal"></highlight></codeline>
-<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae9c12c08c2f799504b6390b2d0ffda3f" kindref="member">update_map</ref>(self,<sp/>map_path,<sp/>map_ext):</highlight></codeline>
-<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="113"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Update<sp/>the<sp/>map<sp/>being<sp/>drawn<sp/>by<sp/>the<sp/>renderer.<sp/>Converts<sp/>image<sp/>to<sp/>a<sp/>list<sp/>of<sp/>3D<sp/>points<sp/>representing<sp/>each<sp/>obstacle<sp/>pixel<sp/>in<sp/>the<sp/>map.</highlight></codeline>
-<codeline lineno="114"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="115"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="116"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>(str):<sp/>absolute<sp/>path<sp/>to<sp/>the<sp/>map<sp/>without<sp/>extensions</highlight></codeline>
-<codeline lineno="117"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>(str):<sp/>extension<sp/>for<sp/>the<sp/>map<sp/>image<sp/>file</highlight></codeline>
-<codeline lineno="118"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="119"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="120"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="121"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="122"><highlight class="normal"></highlight></codeline>
-<codeline lineno="123"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>metadata</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="124"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">with</highlight><highlight class="normal"><sp/>open(map_path<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;.yaml&apos;</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">&apos;r&apos;</highlight><highlight class="normal">)<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>yaml_stream:</highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_metadata<sp/>=<sp/>yaml.safe_load(yaml_stream)</highlight></codeline>
-<codeline lineno="127"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_resolution<sp/>=<sp/>map_metadata[</highlight><highlight class="stringliteral">&apos;resolution&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>origin<sp/>=<sp/>map_metadata[</highlight><highlight class="stringliteral">&apos;origin&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>origin_x<sp/>=<sp/>origin[0]</highlight></codeline>
-<codeline lineno="130"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>origin_y<sp/>=<sp/>origin[1]</highlight></codeline>
-<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal"><sp/>yaml.YAMLError<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>ex:</highlight></codeline>
-<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(ex)</highlight></codeline>
-<codeline lineno="133"><highlight class="normal"></highlight></codeline>
-<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>image</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="135"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_img<sp/>=<sp/>np.array(Image.open(map_path<sp/>+<sp/>map_ext).transpose(Image.FLIP_TOP_BOTTOM)).astype(np.float64)</highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_height<sp/>=<sp/>map_img.shape[0]</highlight></codeline>
-<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_width<sp/>=<sp/>map_img.shape[1]</highlight></codeline>
-<codeline lineno="138"><highlight class="normal"></highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>convert<sp/>map<sp/>pixels<sp/>to<sp/>coordinates</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>range_x<sp/>=<sp/>np.arange(map_width)</highlight></codeline>
-<codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>range_y<sp/>=<sp/>np.arange(map_height)</highlight></codeline>
-<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_x,<sp/>map_y<sp/>=<sp/>np.meshgrid(range_x,<sp/>range_y)</highlight></codeline>
-<codeline lineno="143"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_x<sp/>=<sp/>(map_x<sp/>*<sp/>map_resolution<sp/>+<sp/>origin_x).flatten()</highlight></codeline>
-<codeline lineno="144"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_y<sp/>=<sp/>(map_y<sp/>*<sp/>map_resolution<sp/>+<sp/>origin_y).flatten()</highlight></codeline>
-<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_z<sp/>=<sp/>np.zeros(map_y.shape)</highlight></codeline>
-<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_coords<sp/>=<sp/>np.vstack((map_x,<sp/>map_y,<sp/>map_z))</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"></highlight></codeline>
-<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>mask<sp/>and<sp/>only<sp/>leave<sp/>the<sp/>obstacle<sp/>points</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_mask<sp/>=<sp/>map_img<sp/>==<sp/>0.0</highlight></codeline>
-<codeline lineno="150"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_mask_flat<sp/>=<sp/>map_mask.flatten()</highlight></codeline>
-<codeline lineno="151"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_points<sp/>=<sp/>50.<sp/>*<sp/>map_coords[:,<sp/>map_mask_flat].T</highlight></codeline>
-<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(map_points.shape[0]):</highlight></codeline>
-<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0f6f622b6ffe98f7ee038c2ce72af276" kindref="member">batch</ref>.add(1,<sp/>GL_POINTS,<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">,<sp/>(</highlight><highlight class="stringliteral">&apos;v3f/stream&apos;</highlight><highlight class="normal">,<sp/>[map_points[i,<sp/>0],<sp/>map_points[i,<sp/>1],<sp/>map_points[i,<sp/>2]]),<sp/>(</highlight><highlight class="stringliteral">&apos;c3B/stream&apos;</highlight><highlight class="normal">,<sp/>[183,<sp/>193,<sp/>222]))</highlight></codeline>
-<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae423459dd9ee2da53cf7929e4591e366" kindref="member">map_points</ref><sp/>=<sp/>map_points</highlight></codeline>
-<codeline lineno="155"><highlight class="normal"></highlight></codeline>
-<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ac8bbef5b8910515dd18c8a6624730898" kindref="member">on_resize</ref>(self,<sp/>width,<sp/>height):</highlight></codeline>
-<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="158"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Callback<sp/>function<sp/>on<sp/>window<sp/>resize,<sp/>overrides<sp/>inherited<sp/>method,<sp/>and<sp/>updates<sp/>camera<sp/>values<sp/>on<sp/>top<sp/>of<sp/>the<sp/>inherited<sp/>on_resize()<sp/>method.</highlight></codeline>
-<codeline lineno="159"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="160"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Potential<sp/>improvements<sp/>on<sp/>current<sp/>behavior:<sp/>zoom/pan<sp/>resets<sp/>on<sp/>window<sp/>resize.</highlight></codeline>
-<codeline lineno="161"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="162"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="163"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>width<sp/>(int):<sp/>new<sp/>width<sp/>of<sp/>window</highlight></codeline>
-<codeline lineno="164"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>height<sp/>(int):<sp/>new<sp/>height<sp/>of<sp/>window</highlight></codeline>
-<codeline lineno="165"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="166"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="167"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="168"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="169"><highlight class="normal"></highlight></codeline>
-<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>call<sp/>overrided<sp/>function</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>super().<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ac8bbef5b8910515dd18c8a6624730898" kindref="member">on_resize</ref>(width,<sp/>height)</highlight></codeline>
-<codeline lineno="172"><highlight class="normal"></highlight></codeline>
-<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>camera<sp/>value</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(width,<sp/>height)<sp/>=<sp/>self.get_size()</highlight></codeline>
-<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10e0980201fca6f3392fc5c333a6ad99" kindref="member">left</ref><sp/>=<sp/>-self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>*<sp/>width/2</highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1acb665a6f4d150da3b2159b1cd86f4117" kindref="member">right</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>*<sp/>width/2</highlight></codeline>
-<codeline lineno="177"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ab6f1d3bbdf185a2489a9c444413e72b6" kindref="member">bottom</ref><sp/>=<sp/>-self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>*<sp/>height/2</highlight></codeline>
-<codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a6e8e1a6e3f6c1f681f0fcbe6c04ffc27" kindref="member">top</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>*<sp/>height/2</highlight></codeline>
-<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1af71d3702c2e9fa5e8e109111b4a337ce" kindref="member">zoomed_width</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>*<sp/>width</highlight></codeline>
-<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a769be9782b9452fd8c3c1984985e419b" kindref="member">zoomed_height</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>*<sp/>height</highlight></codeline>
-<codeline lineno="181"><highlight class="normal"></highlight></codeline>
-<codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a557710400bb370a7509dbc17658eadd8" kindref="member">on_mouse_drag</ref>(self,<sp/>x,<sp/>y,<sp/>dx,<sp/>dy,<sp/>buttons,<sp/>modifiers):</highlight></codeline>
-<codeline lineno="183"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="184"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Callback<sp/>function<sp/>on<sp/>mouse<sp/>drag,<sp/>overrides<sp/>inherited<sp/>method.</highlight></codeline>
-<codeline lineno="185"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="186"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="187"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(int):<sp/>Distance<sp/>in<sp/>pixels<sp/>from<sp/>the<sp/>left<sp/>edge<sp/>of<sp/>the<sp/>window.</highlight></codeline>
-<codeline lineno="188"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>(int):<sp/>Distance<sp/>in<sp/>pixels<sp/>from<sp/>the<sp/>bottom<sp/>edge<sp/>of<sp/>the<sp/>window.</highlight></codeline>
-<codeline lineno="189"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dx<sp/>(int):<sp/>Relative<sp/>X<sp/>position<sp/>from<sp/>the<sp/>previous<sp/>mouse<sp/>position.</highlight></codeline>
-<codeline lineno="190"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dy<sp/>(int):<sp/>Relative<sp/>Y<sp/>position<sp/>from<sp/>the<sp/>previous<sp/>mouse<sp/>position.</highlight></codeline>
-<codeline lineno="191"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>buttons<sp/>(int):<sp/>Bitwise<sp/>combination<sp/>of<sp/>the<sp/>mouse<sp/>buttons<sp/>currently<sp/>pressed.</highlight></codeline>
-<codeline lineno="192"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>modifiers<sp/>(int):<sp/>Bitwise<sp/>combination<sp/>of<sp/>any<sp/>keyboard<sp/>modifiers<sp/>currently<sp/>active.</highlight></codeline>
-<codeline lineno="193"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="194"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="195"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="196"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="197"><highlight class="normal"></highlight></codeline>
-<codeline lineno="198"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>pan<sp/>camera</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10e0980201fca6f3392fc5c333a6ad99" kindref="member">left</ref><sp/>-=<sp/>dx<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref></highlight></codeline>
-<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1acb665a6f4d150da3b2159b1cd86f4117" kindref="member">right</ref><sp/>-=<sp/>dx<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref></highlight></codeline>
-<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ab6f1d3bbdf185a2489a9c444413e72b6" kindref="member">bottom</ref><sp/>-=<sp/>dy<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref></highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a6e8e1a6e3f6c1f681f0fcbe6c04ffc27" kindref="member">top</ref><sp/>-=<sp/>dy<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref></highlight></codeline>
-<codeline lineno="203"><highlight class="normal"></highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10f7c38d921015b5574ba0c858a245bb" kindref="member">on_mouse_scroll</ref>(self,<sp/>x,<sp/>y,<sp/>dx,<sp/>dy):</highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="206"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Callback<sp/>function<sp/>on<sp/>mouse<sp/>scroll,<sp/>overrides<sp/>inherited<sp/>method.</highlight></codeline>
-<codeline lineno="207"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="208"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="209"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(int):<sp/>Distance<sp/>in<sp/>pixels<sp/>from<sp/>the<sp/>left<sp/>edge<sp/>of<sp/>the<sp/>window.</highlight></codeline>
-<codeline lineno="210"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>(int):<sp/>Distance<sp/>in<sp/>pixels<sp/>from<sp/>the<sp/>bottom<sp/>edge<sp/>of<sp/>the<sp/>window.</highlight></codeline>
-<codeline lineno="211"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scroll_x<sp/>(float):<sp/>Amount<sp/>of<sp/>movement<sp/>on<sp/>the<sp/>horizontal<sp/>axis.</highlight></codeline>
-<codeline lineno="212"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scroll_y<sp/>(float):<sp/>Amount<sp/>of<sp/>movement<sp/>on<sp/>the<sp/>vertical<sp/>axis.</highlight></codeline>
-<codeline lineno="213"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="214"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="215"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="216"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="217"><highlight class="normal"></highlight></codeline>
-<codeline lineno="218"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Get<sp/>scale<sp/>factor</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>f<sp/>=<sp/>ZOOM_IN_FACTOR<sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>dy<sp/>&gt;<sp/>0<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>ZOOM_OUT_FACTOR<sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>dy<sp/>&lt;<sp/>0<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>1</highlight></codeline>
-<codeline lineno="220"><highlight class="normal"></highlight></codeline>
-<codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>If<sp/>zoom_level<sp/>is<sp/>in<sp/>the<sp/>proper<sp/>range</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="222"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>.01<sp/>&lt;<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>*<sp/>f<sp/>&lt;<sp/>10:</highlight></codeline>
-<codeline lineno="223"><highlight class="normal"></highlight></codeline>
-<codeline lineno="224"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>*=<sp/>f</highlight></codeline>
-<codeline lineno="225"><highlight class="normal"></highlight></codeline>
-<codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>(width,<sp/>height)<sp/>=<sp/>self.get_size()</highlight></codeline>
-<codeline lineno="227"><highlight class="normal"></highlight></codeline>
-<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mouse_x<sp/>=<sp/>x/width</highlight></codeline>
-<codeline lineno="229"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mouse_y<sp/>=<sp/>y/height</highlight></codeline>
-<codeline lineno="230"><highlight class="normal"></highlight></codeline>
-<codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mouse_x_in_world<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10e0980201fca6f3392fc5c333a6ad99" kindref="member">left</ref><sp/>+<sp/>mouse_x*self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1af71d3702c2e9fa5e8e109111b4a337ce" kindref="member">zoomed_width</ref></highlight></codeline>
-<codeline lineno="232"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mouse_y_in_world<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ab6f1d3bbdf185a2489a9c444413e72b6" kindref="member">bottom</ref><sp/>+<sp/>mouse_y*self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a769be9782b9452fd8c3c1984985e419b" kindref="member">zoomed_height</ref></highlight></codeline>
-<codeline lineno="233"><highlight class="normal"></highlight></codeline>
-<codeline lineno="234"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1af71d3702c2e9fa5e8e109111b4a337ce" kindref="member">zoomed_width</ref><sp/>*=<sp/>f</highlight></codeline>
-<codeline lineno="235"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a769be9782b9452fd8c3c1984985e419b" kindref="member">zoomed_height</ref><sp/>*=<sp/>f</highlight></codeline>
-<codeline lineno="236"><highlight class="normal"></highlight></codeline>
-<codeline lineno="237"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10e0980201fca6f3392fc5c333a6ad99" kindref="member">left</ref><sp/>=<sp/>mouse_x_in_world<sp/>-<sp/>mouse_x<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1af71d3702c2e9fa5e8e109111b4a337ce" kindref="member">zoomed_width</ref></highlight></codeline>
-<codeline lineno="238"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1acb665a6f4d150da3b2159b1cd86f4117" kindref="member">right</ref><sp/>=<sp/>mouse_x_in_world<sp/>+<sp/>(1<sp/>-<sp/>mouse_x)<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1af71d3702c2e9fa5e8e109111b4a337ce" kindref="member">zoomed_width</ref></highlight></codeline>
-<codeline lineno="239"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ab6f1d3bbdf185a2489a9c444413e72b6" kindref="member">bottom</ref><sp/>=<sp/>mouse_y_in_world<sp/>-<sp/>mouse_y<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a769be9782b9452fd8c3c1984985e419b" kindref="member">zoomed_height</ref></highlight></codeline>
-<codeline lineno="240"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a6e8e1a6e3f6c1f681f0fcbe6c04ffc27" kindref="member">top</ref><sp/>=<sp/>mouse_y_in_world<sp/>+<sp/>(1<sp/>-<sp/>mouse_y)<sp/>*<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a769be9782b9452fd8c3c1984985e419b" kindref="member">zoomed_height</ref></highlight></codeline>
-<codeline lineno="241"><highlight class="normal"></highlight></codeline>
-<codeline lineno="242"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a05cb0faf5893e3cbed58cf20d0997bf7" kindref="member">on_close</ref>(self):</highlight></codeline>
-<codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="244"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Callback<sp/>function<sp/>when<sp/>the<sp/>&apos;x&apos;<sp/>is<sp/>clicked<sp/>on<sp/>the<sp/>window,<sp/>overrides<sp/>inherited<sp/>method.<sp/>Also<sp/>throws<sp/>exception<sp/>to<sp/>end<sp/>the<sp/>python<sp/>program<sp/>when<sp/>in<sp/>a<sp/>loop.</highlight></codeline>
-<codeline lineno="245"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="246"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="247"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="248"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="249"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="250"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="251"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="252"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Raises:</highlight></codeline>
-<codeline lineno="253"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Exception:<sp/>with<sp/>a<sp/>message<sp/>that<sp/>indicates<sp/>the<sp/>rendering<sp/>window<sp/>was<sp/>closed</highlight></codeline>
-<codeline lineno="254"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="255"><highlight class="normal"></highlight></codeline>
-<codeline lineno="256"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>super().<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a05cb0faf5893e3cbed58cf20d0997bf7" kindref="member">on_close</ref>()</highlight></codeline>
-<codeline lineno="257"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">raise</highlight><highlight class="normal"><sp/>Exception(</highlight><highlight class="stringliteral">&apos;Rendering<sp/>window<sp/>was<sp/>closed.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="258"><highlight class="normal"></highlight></codeline>
-<codeline lineno="259"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0cbcdabef2cdda765d6721ca796ecfd0" kindref="member">on_draw</ref>(self):</highlight></codeline>
-<codeline lineno="260"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="261"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Function<sp/>when<sp/>the<sp/>pyglet<sp/>is<sp/>drawing.<sp/>The<sp/>function<sp/>draws<sp/>the<sp/>batch<sp/>created<sp/>that<sp/>includes<sp/>the<sp/>map<sp/>points,<sp/>the<sp/>agent<sp/>polygons,<sp/>and<sp/>the<sp/>information<sp/>text,<sp/>and<sp/>the<sp/>fps<sp/>display.</highlight></codeline>
-<codeline lineno="262"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="263"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="264"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="265"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="266"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="267"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="268"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="269"><highlight class="normal"></highlight></codeline>
-<codeline lineno="270"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>if<sp/>map<sp/>and<sp/>poses<sp/>doesn&apos;t<sp/>exist,<sp/>raise<sp/>exception</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="271"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ae423459dd9ee2da53cf7929e4591e366" kindref="member">map_points</ref><sp/></highlight><highlight class="keywordflow">is</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">raise</highlight><highlight class="normal"><sp/>Exception(</highlight><highlight class="stringliteral">&apos;Map<sp/>not<sp/>set<sp/>for<sp/>renderer.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a227e60c781a0e50f827ea2f4f11a3f85" kindref="member">poses</ref><sp/></highlight><highlight class="keywordflow">is</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="274"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">raise</highlight><highlight class="normal"><sp/>Exception(</highlight><highlight class="stringliteral">&apos;Agent<sp/>poses<sp/>not<sp/>updated<sp/>for<sp/>renderer.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="275"><highlight class="normal"></highlight></codeline>
-<codeline lineno="276"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Initialize<sp/>Projection<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glMatrixMode(GL_PROJECTION)</highlight></codeline>
-<codeline lineno="278"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glLoadIdentity()</highlight></codeline>
-<codeline lineno="279"><highlight class="normal"></highlight></codeline>
-<codeline lineno="280"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Initialize<sp/>Modelview<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="281"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glMatrixMode(GL_MODELVIEW)</highlight></codeline>
-<codeline lineno="282"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glLoadIdentity()</highlight></codeline>
-<codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Save<sp/>the<sp/>default<sp/>modelview<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="284"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glPushMatrix()</highlight></codeline>
-<codeline lineno="285"><highlight class="normal"></highlight></codeline>
-<codeline lineno="286"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Clear<sp/>window<sp/>with<sp/>ClearColor</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="287"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glClear(GL_COLOR_BUFFER_BIT<sp/>|<sp/>GL_DEPTH_BUFFER_BIT)</highlight></codeline>
-<codeline lineno="288"><highlight class="normal"></highlight></codeline>
-<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Set<sp/>orthographic<sp/>projection<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="290"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glOrtho(self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a10e0980201fca6f3392fc5c333a6ad99" kindref="member">left</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1acb665a6f4d150da3b2159b1cd86f4117" kindref="member">right</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ab6f1d3bbdf185a2489a9c444413e72b6" kindref="member">bottom</ref>,<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a6e8e1a6e3f6c1f681f0fcbe6c04ffc27" kindref="member">top</ref>,<sp/>1,<sp/>-1)</highlight></codeline>
-<codeline lineno="291"><highlight class="normal"></highlight></codeline>
-<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Draw<sp/>all<sp/>batches</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0f6f622b6ffe98f7ee038c2ce72af276" kindref="member">batch</ref>.draw()</highlight></codeline>
-<codeline lineno="294"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a2ecadd7a3ea2a4525bd7b0b4d362db81" kindref="member">fps_display</ref>.draw()</highlight></codeline>
-<codeline lineno="295"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>Remove<sp/>default<sp/>modelview<sp/>matrix</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="296"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>glPopMatrix()</highlight></codeline>
-<codeline lineno="297"><highlight class="normal"></highlight></codeline>
-<codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a1b9284f2e59c9000f10bd18e1ec6a9b3" kindref="member">update_obs</ref>(self,<sp/>obs):</highlight></codeline>
-<codeline lineno="299"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="300"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Updates<sp/>the<sp/>renderer<sp/>with<sp/>the<sp/>latest<sp/>observation<sp/>from<sp/>the<sp/>gym<sp/>environment,<sp/>including<sp/>the<sp/>agent<sp/>poses,<sp/>and<sp/>the<sp/>information<sp/>text.</highlight></codeline>
-<codeline lineno="301"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="302"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="303"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>obs<sp/>(dict):<sp/>observation<sp/>dict<sp/>from<sp/>the<sp/>gym<sp/>env</highlight></codeline>
-<codeline lineno="304"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="305"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="306"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>None</highlight></codeline>
-<codeline lineno="307"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="308"><highlight class="normal"></highlight></codeline>
-<codeline lineno="309"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad2c50c6e7d890771c7173768b6eef5c2" kindref="member">ego_idx</ref><sp/>=<sp/>obs[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="310"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses_x<sp/>=<sp/>obs[</highlight><highlight class="stringliteral">&apos;poses_x&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="311"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses_y<sp/>=<sp/>obs[</highlight><highlight class="stringliteral">&apos;poses_y&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="312"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses_theta<sp/>=<sp/>obs[</highlight><highlight class="stringliteral">&apos;poses_theta&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="313"><highlight class="normal"></highlight></codeline>
-<codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_agents<sp/>=<sp/>len(poses_x)</highlight></codeline>
-<codeline lineno="315"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a227e60c781a0e50f827ea2f4f11a3f85" kindref="member">poses</ref><sp/></highlight><highlight class="keywordflow">is</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="316"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a4d90f610c36a7c83b054a2233276f36a" kindref="member">cars</ref><sp/>=<sp/>[]</highlight></codeline>
-<codeline lineno="317"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(num_agents):</highlight></codeline>
-<codeline lineno="318"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>i<sp/>==<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad2c50c6e7d890771c7173768b6eef5c2" kindref="member">ego_idx</ref>:</highlight></codeline>
-<codeline lineno="319"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices_np<sp/>=<sp/>get_vertices(np.array([0.,<sp/>0.,<sp/>0.]),<sp/>CAR_LENGTH,<sp/>CAR_WIDTH)</highlight></codeline>
-<codeline lineno="320"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>=<sp/>list(vertices_np.flatten())</highlight></codeline>
-<codeline lineno="321"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>car<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0f6f622b6ffe98f7ee038c2ce72af276" kindref="member">batch</ref>.add(4,<sp/>GL_QUADS,<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">,<sp/>(</highlight><highlight class="stringliteral">&apos;v2f&apos;</highlight><highlight class="normal">,<sp/>vertices),<sp/>(</highlight><highlight class="stringliteral">&apos;c3B&apos;</highlight><highlight class="normal">,<sp/>[172,<sp/>97,<sp/>185,<sp/>172,<sp/>97,<sp/>185,<sp/>172,<sp/>97,<sp/>185,<sp/>172,<sp/>97,<sp/>185]))</highlight></codeline>
-<codeline lineno="322"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a4d90f610c36a7c83b054a2233276f36a" kindref="member">cars</ref>.append(car)</highlight></codeline>
-<codeline lineno="323"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="324"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices_np<sp/>=<sp/>get_vertices(np.array([0.,<sp/>0.,<sp/>0.]),<sp/>CAR_LENGTH,<sp/>CAR_WIDTH)</highlight></codeline>
-<codeline lineno="325"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>=<sp/>list(vertices_np.flatten())</highlight></codeline>
-<codeline lineno="326"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>car<sp/>=<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a0f6f622b6ffe98f7ee038c2ce72af276" kindref="member">batch</ref>.add(4,<sp/>GL_QUADS,<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">,<sp/>(</highlight><highlight class="stringliteral">&apos;v2f&apos;</highlight><highlight class="normal">,<sp/>vertices),<sp/>(</highlight><highlight class="stringliteral">&apos;c3B&apos;</highlight><highlight class="normal">,<sp/>[99,<sp/>52,<sp/>94,<sp/>99,<sp/>52,<sp/>94,<sp/>99,<sp/>52,<sp/>94,<sp/>99,<sp/>52,<sp/>94]))</highlight></codeline>
-<codeline lineno="327"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a4d90f610c36a7c83b054a2233276f36a" kindref="member">cars</ref>.append(car)</highlight></codeline>
-<codeline lineno="328"><highlight class="normal"></highlight></codeline>
-<codeline lineno="329"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>poses<sp/>=<sp/>np.stack((poses_x,<sp/>poses_y,<sp/>poses_theta)).T</highlight></codeline>
-<codeline lineno="330"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>j<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(poses.shape[0]):</highlight></codeline>
-<codeline lineno="331"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices_np<sp/>=<sp/>50.<sp/>*<sp/>get_vertices(poses[j,<sp/>:],<sp/>CAR_LENGTH,<sp/>CAR_WIDTH)</highlight></codeline>
-<codeline lineno="332"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>vertices<sp/>=<sp/>list(vertices_np.flatten())</highlight></codeline>
-<codeline lineno="333"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a4d90f610c36a7c83b054a2233276f36a" kindref="member">cars</ref>[j].vertices<sp/>=<sp/>vertices</highlight></codeline>
-<codeline lineno="334"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a227e60c781a0e50f827ea2f4f11a3f85" kindref="member">poses</ref><sp/>=<sp/>poses</highlight></codeline>
-<codeline lineno="335"><highlight class="normal"></highlight></codeline>
-<codeline lineno="336"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1ad3328a46ae8641dc60b24d53219ffcb3" kindref="member">score_label</ref>.text<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;Lap<sp/>Time:<sp/>{laptime:.2f},<sp/>Ego<sp/>Lap<sp/>Count:<sp/>{count:.0f}&apos;</highlight><highlight class="normal">.format(laptime=obs[</highlight><highlight class="stringliteral">&apos;lap_times&apos;</highlight><highlight class="normal">][0],<sp/>count=obs[</highlight><highlight class="stringliteral">&apos;lap_counts&apos;</highlight><highlight class="normal">][obs[</highlight><highlight class="stringliteral">&apos;ego_idx&apos;</highlight><highlight class="normal">]])</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/envs/rendering.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/scan__sim_8py.xml b/docs/xml/scan__sim_8py.xml
deleted file mode 100644
index 0ad301d7..00000000
--- a/docs/xml/scan__sim_8py.xml
+++ /dev/null
@@ -1,446 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="scan__sim_8py" kind="file" language="Python">
-    <compoundname>scan_sim.py</compoundname>
-    <innerclass refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" prot="public">f110_gym::unittest::scan_sim::ScanSimulator2D</innerclass>
-    <innerclass refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests" prot="public">f110_gym::unittest::scan_sim::ScanTests</innerclass>
-    <innernamespace refid="namespacef110__gym_1_1unittest_1_1scan__sim">f110_gym::unittest::scan_sim</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="comment">#<sp/>MIT<sp/>License</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="2"><highlight class="normal"></highlight></codeline>
-<codeline lineno="3"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Copyright<sp/>(c)<sp/>2020<sp/>Joseph<sp/>Auckley,<sp/>Matthew<sp/>O&apos;Kelly,<sp/>Aman<sp/>Sinha,<sp/>Hongrui<sp/>Zheng</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="4"><highlight class="normal"></highlight></codeline>
-<codeline lineno="5"><highlight class="normal"></highlight><highlight class="comment">#<sp/>Permission<sp/>is<sp/>hereby<sp/>granted,<sp/>free<sp/>of<sp/>charge,<sp/>to<sp/>any<sp/>person<sp/>obtaining<sp/>a<sp/>copy</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="6"><highlight class="normal"></highlight><highlight class="comment">#<sp/>of<sp/>this<sp/>software<sp/>and<sp/>associated<sp/>documentation<sp/>files<sp/>(the<sp/>&quot;Software&quot;),<sp/>to<sp/>deal</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="7"><highlight class="normal"></highlight><highlight class="comment">#<sp/>in<sp/>the<sp/>Software<sp/>without<sp/>restriction,<sp/>including<sp/>without<sp/>limitation<sp/>the<sp/>rights</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="8"><highlight class="normal"></highlight><highlight class="comment">#<sp/>to<sp/>use,<sp/>copy,<sp/>modify,<sp/>merge,<sp/>publish,<sp/>distribute,<sp/>sublicense,<sp/>and/or<sp/>sell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="9"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>of<sp/>the<sp/>Software,<sp/>and<sp/>to<sp/>permit<sp/>persons<sp/>to<sp/>whom<sp/>the<sp/>Software<sp/>is</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="10"><highlight class="normal"></highlight><highlight class="comment">#<sp/>furnished<sp/>to<sp/>do<sp/>so,<sp/>subject<sp/>to<sp/>the<sp/>following<sp/>conditions:</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="11"><highlight class="normal"></highlight></codeline>
-<codeline lineno="12"><highlight class="normal"></highlight><highlight class="comment">#<sp/>The<sp/>above<sp/>copyright<sp/>notice<sp/>and<sp/>this<sp/>permission<sp/>notice<sp/>shall<sp/>be<sp/>included<sp/>in<sp/>all</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="13"><highlight class="normal"></highlight><highlight class="comment">#<sp/>copies<sp/>or<sp/>substantial<sp/>portions<sp/>of<sp/>the<sp/>Software.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="14"><highlight class="normal"></highlight></codeline>
-<codeline lineno="15"><highlight class="normal"></highlight><highlight class="comment">#<sp/>THE<sp/>SOFTWARE<sp/>IS<sp/>PROVIDED<sp/>&quot;AS<sp/>IS&quot;,<sp/>WITHOUT<sp/>WARRANTY<sp/>OF<sp/>ANY<sp/>KIND,<sp/>EXPRESS<sp/>OR</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="16"><highlight class="normal"></highlight><highlight class="comment">#<sp/>IMPLIED,<sp/>INCLUDING<sp/>BUT<sp/>NOT<sp/>LIMITED<sp/>TO<sp/>THE<sp/>WARRANTIES<sp/>OF<sp/>MERCHANTABILITY,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="17"><highlight class="normal"></highlight><highlight class="comment">#<sp/>FITNESS<sp/>FOR<sp/>A<sp/>PARTICULAR<sp/>PURPOSE<sp/>AND<sp/>NONINFRINGEMENT.<sp/>IN<sp/>NO<sp/>EVENT<sp/>SHALL<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="18"><highlight class="normal"></highlight><highlight class="comment">#<sp/>AUTHORS<sp/>OR<sp/>COPYRIGHT<sp/>HOLDERS<sp/>BE<sp/>LIABLE<sp/>FOR<sp/>ANY<sp/>CLAIM,<sp/>DAMAGES<sp/>OR<sp/>OTHER</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="19"><highlight class="normal"></highlight><highlight class="comment">#<sp/>LIABILITY,<sp/>WHETHER<sp/>IN<sp/>AN<sp/>ACTION<sp/>OF<sp/>CONTRACT,<sp/>TORT<sp/>OR<sp/>OTHERWISE,<sp/>ARISING<sp/>FROM,</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="20"><highlight class="normal"></highlight><highlight class="comment">#<sp/>OUT<sp/>OF<sp/>OR<sp/>IN<sp/>CONNECTION<sp/>WITH<sp/>THE<sp/>SOFTWARE<sp/>OR<sp/>THE<sp/>USE<sp/>OR<sp/>OTHER<sp/>DEALINGS<sp/>IN<sp/>THE</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="21"><highlight class="normal"></highlight><highlight class="comment">#<sp/>SOFTWARE.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="22"><highlight class="normal"></highlight></codeline>
-<codeline lineno="23"><highlight class="normal"></highlight></codeline>
-<codeline lineno="24"><highlight class="normal"></highlight></codeline>
-<codeline lineno="25"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="26"><highlight class="stringliteral">Prototype<sp/>of<sp/>Utility<sp/>functions<sp/>and<sp/>classes<sp/>for<sp/>simulating<sp/>2D<sp/>LIDAR<sp/>scans</highlight></codeline>
-<codeline lineno="27"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="28"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="29"><highlight class="normal"></highlight></codeline>
-<codeline lineno="30"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>numpy<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>np</highlight></codeline>
-<codeline lineno="31"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>numba<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>njit</highlight></codeline>
-<codeline lineno="32"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>scipy.ndimage<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>distance_transform_edt<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>edt</highlight></codeline>
-<codeline lineno="33"><highlight class="normal"></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>PIL<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>Image</highlight></codeline>
-<codeline lineno="34"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>os</highlight></codeline>
-<codeline lineno="35"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>yaml</highlight></codeline>
-<codeline lineno="36"><highlight class="normal"></highlight></codeline>
-<codeline lineno="37"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>unittest</highlight></codeline>
-<codeline lineno="38"><highlight class="normal"></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>timeit</highlight></codeline>
-<codeline lineno="39"><highlight class="normal"></highlight></codeline>
-<codeline lineno="40"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_dt(bitmap,<sp/>resolution):</highlight></codeline>
-<codeline lineno="41"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="42"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Distance<sp/>transformation,<sp/>returns<sp/>the<sp/>distance<sp/>matrix<sp/>from<sp/>the<sp/>input<sp/>bitmap.</highlight></codeline>
-<codeline lineno="43"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Uses<sp/>scipy.ndimage,<sp/>cannot<sp/>be<sp/>JITted.</highlight></codeline>
-<codeline lineno="44"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="45"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="46"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>bitmap<sp/>(numpy.ndarray,<sp/>(n,<sp/>m)):<sp/>input<sp/>binary<sp/>bitmap<sp/>of<sp/>the<sp/>environment,<sp/>where<sp/>0<sp/>is<sp/>obstacles,<sp/>and<sp/>255<sp/>(or<sp/>anything<sp/>&gt;<sp/>0)<sp/>is<sp/>freespace</highlight></codeline>
-<codeline lineno="47"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>resolution<sp/>(float):<sp/>resolution<sp/>of<sp/>the<sp/>input<sp/>bitmap<sp/>(m/cell)</highlight></codeline>
-<codeline lineno="48"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="49"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="50"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dt<sp/>(numpy.ndarray,<sp/>(n,<sp/>m)):<sp/>output<sp/>distance<sp/>matrix,<sp/>where<sp/>each<sp/>cell<sp/>has<sp/>the<sp/>corresponding<sp/>distance<sp/>(in<sp/>meters)<sp/>to<sp/>the<sp/>closest<sp/>obstacle</highlight></codeline>
-<codeline lineno="51"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/>dt<sp/>=<sp/>resolution<sp/>*<sp/>edt(bitmap)</highlight></codeline>
-<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>dt</highlight></codeline>
-<codeline lineno="54"><highlight class="normal"></highlight></codeline>
-<codeline lineno="55"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="56"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">xy_2_rc(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution):</highlight></codeline>
-<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="58"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Translate<sp/>(x,<sp/>y)<sp/>coordinate<sp/>into<sp/>(r,<sp/>c)<sp/>in<sp/>the<sp/>matrix</highlight></codeline>
-<codeline lineno="59"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="60"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="61"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(float):<sp/>coordinate<sp/>in<sp/>x<sp/>(m)</highlight></codeline>
-<codeline lineno="62"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>(float):<sp/>coordinate<sp/>in<sp/>y<sp/>(m)</highlight></codeline>
-<codeline lineno="63"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>orig_x<sp/>(float):<sp/>x<sp/>coordinate<sp/>of<sp/>the<sp/>map<sp/>origin<sp/>(m)</highlight></codeline>
-<codeline lineno="64"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>orig_y<sp/>(float):<sp/>y<sp/>coordinate<sp/>of<sp/>the<sp/>map<sp/>origin<sp/>(m)</highlight></codeline>
-<codeline lineno="65"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="66"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="67"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>r<sp/>(int):<sp/>row<sp/>number<sp/>in<sp/>the<sp/>transform<sp/>matrix<sp/>of<sp/>the<sp/>given<sp/>point</highlight></codeline>
-<codeline lineno="68"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>c<sp/>(int):<sp/>column<sp/>number<sp/>in<sp/>the<sp/>transform<sp/>matrix<sp/>of<sp/>the<sp/>given<sp/>point</highlight></codeline>
-<codeline lineno="69"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="70"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>translation</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/>x_trans<sp/>=<sp/>x<sp/>-<sp/>orig_x</highlight></codeline>
-<codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/>y_trans<sp/>=<sp/>y<sp/>-<sp/>orig_y</highlight></codeline>
-<codeline lineno="73"><highlight class="normal"></highlight></codeline>
-<codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>rotation</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/>x_rot<sp/>=<sp/>x_trans<sp/>*<sp/>orig_c<sp/>+<sp/>y_trans<sp/>*<sp/>orig_s</highlight></codeline>
-<codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/>y_rot<sp/>=<sp/>-x_trans<sp/>*<sp/>orig_s<sp/>+<sp/>y_trans<sp/>*<sp/>orig_c</highlight></codeline>
-<codeline lineno="77"><highlight class="normal"></highlight></codeline>
-<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>clip<sp/>the<sp/>state<sp/>to<sp/>be<sp/>a<sp/>cell</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>x_rot<sp/>&lt;<sp/>0<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>x_rot<sp/>&gt;=<sp/>width<sp/>*<sp/>resolution<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>y_rot<sp/>&lt;<sp/>0<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>y_rot<sp/>&gt;=<sp/>height<sp/>*<sp/>resolution:</highlight></codeline>
-<codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>c<sp/>=<sp/>-1</highlight></codeline>
-<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>r<sp/>=<sp/>-1</highlight></codeline>
-<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>c<sp/>=<sp/>int(x_rot/resolution)</highlight></codeline>
-<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>r<sp/>=<sp/>int(y_rot/resolution)</highlight></codeline>
-<codeline lineno="85"><highlight class="normal"></highlight></codeline>
-<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>r,<sp/>c</highlight></codeline>
-<codeline lineno="87"><highlight class="normal"></highlight></codeline>
-<codeline lineno="88"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="89"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">distance_transform(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt):</highlight></codeline>
-<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="91"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Look<sp/>up<sp/>corresponding<sp/>distance<sp/>in<sp/>the<sp/>distance<sp/>matrix</highlight></codeline>
-<codeline lineno="92"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="93"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="94"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(float):<sp/>x<sp/>coordinate<sp/>of<sp/>the<sp/>lookup<sp/>point</highlight></codeline>
-<codeline lineno="95"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>(float):<sp/>y<sp/>coordinate<sp/>of<sp/>the<sp/>lookup<sp/>point</highlight></codeline>
-<codeline lineno="96"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>orig_x<sp/>(float):<sp/>x<sp/>coordinate<sp/>of<sp/>the<sp/>map<sp/>origin<sp/>(m)</highlight></codeline>
-<codeline lineno="97"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>orig_y<sp/>(float):<sp/>y<sp/>coordinate<sp/>of<sp/>the<sp/>map<sp/>origin<sp/>(m)</highlight></codeline>
-<codeline lineno="98"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="99"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="100"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>distance<sp/>(float):<sp/>corresponding<sp/>shortest<sp/>distance<sp/>to<sp/>obstacle<sp/>in<sp/>meters</highlight></codeline>
-<codeline lineno="101"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="102"><highlight class="normal"><sp/><sp/><sp/><sp/>r,<sp/>c<sp/>=<sp/>xy_2_rc(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution)</highlight></codeline>
-<codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/>distance<sp/>=<sp/>dt[r,<sp/>c]</highlight></codeline>
-<codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>distance</highlight></codeline>
-<codeline lineno="105"><highlight class="normal"></highlight></codeline>
-<codeline lineno="106"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="107"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">trace_ray(x,<sp/>y,<sp/>theta_index,<sp/>sines,<sp/>cosines,<sp/>eps,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt,<sp/>max_range):</highlight></codeline>
-<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="109"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Find<sp/>the<sp/>length<sp/>of<sp/>a<sp/>specific<sp/>ray<sp/>at<sp/>a<sp/>specific<sp/>scan<sp/>angle<sp/>theta</highlight></codeline>
-<codeline lineno="110"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Purely<sp/>math<sp/>calculation<sp/>and<sp/>loops,<sp/>should<sp/>be<sp/>JITted.</highlight></codeline>
-<codeline lineno="111"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="112"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="113"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>(float):<sp/>current<sp/>x<sp/>coordinate<sp/>of<sp/>the<sp/>ego<sp/>(scan)<sp/>frame</highlight></codeline>
-<codeline lineno="114"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>(float):<sp/>current<sp/>y<sp/>coordinate<sp/>of<sp/>the<sp/>ego<sp/>(scan)<sp/>frame</highlight></codeline>
-<codeline lineno="115"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index(int):<sp/>current<sp/>index<sp/>of<sp/>the<sp/>scan<sp/>beam<sp/>in<sp/>the<sp/>scan<sp/>range</highlight></codeline>
-<codeline lineno="116"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sines<sp/>(numpy.ndarray<sp/>(n,<sp/>)):<sp/>pre-calculated<sp/>sines<sp/>of<sp/>the<sp/>angle<sp/>array</highlight></codeline>
-<codeline lineno="117"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>cosines<sp/>(numpy.ndarray<sp/>(n,<sp/>)):<sp/>pre-calculated<sp/>cosines<sp/>...</highlight></codeline>
-<codeline lineno="118"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="119"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="120"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>total_distance<sp/>(float):<sp/>the<sp/>distance<sp/>to<sp/>first<sp/>obstacle<sp/>on<sp/>the<sp/>current<sp/>scan<sp/>beam</highlight></codeline>
-<codeline lineno="121"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="122"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="123"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>int<sp/>casting,<sp/>and<sp/>index<sp/>precal<sp/>trigs</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="124"><highlight class="normal"><sp/><sp/><sp/><sp/>theta_index_<sp/>=<sp/>int(theta_index)</highlight></codeline>
-<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/>s<sp/>=<sp/>sines[theta_index_]</highlight></codeline>
-<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/>c<sp/>=<sp/>cosines[theta_index_]</highlight></codeline>
-<codeline lineno="127"><highlight class="normal"></highlight></codeline>
-<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>distance<sp/>to<sp/>nearest<sp/>initialization</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/>dist_to_nearest<sp/>=<sp/>distance_transform(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt)</highlight></codeline>
-<codeline lineno="130"><highlight class="normal"><sp/><sp/><sp/><sp/>total_dist<sp/>=<sp/>dist_to_nearest</highlight></codeline>
-<codeline lineno="131"><highlight class="normal"></highlight></codeline>
-<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>ray<sp/>tracing<sp/>iterations</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>dist_to_nearest<sp/>&gt;<sp/>eps<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>total_dist<sp/>&lt;=<sp/>max_range:</highlight></codeline>
-<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>move<sp/>in<sp/>the<sp/>direction<sp/>of<sp/>the<sp/>ray<sp/>by<sp/>dist_to_nearest</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="135"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x<sp/>+=<sp/>dist_to_nearest<sp/>*<sp/>c</highlight></codeline>
-<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>y<sp/>+=<sp/>dist_to_nearest<sp/>*<sp/>s</highlight></codeline>
-<codeline lineno="137"><highlight class="normal"></highlight></codeline>
-<codeline lineno="138"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>update<sp/>dist_to_nearest<sp/>for<sp/>current<sp/>point<sp/>on<sp/>ray</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>also<sp/>keeps<sp/>track<sp/>of<sp/>total<sp/>ray<sp/>length</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>dist_to_nearest<sp/>=<sp/>distance_transform(x,<sp/>y,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt)</highlight></codeline>
-<codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>total_dist<sp/>+=<sp/>dist_to_nearest</highlight></codeline>
-<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="143"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>total_dist</highlight></codeline>
-<codeline lineno="144"><highlight class="normal"></highlight></codeline>
-<codeline lineno="145"><highlight class="normal">@njit(cache=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="146"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_scan(pose,<sp/>theta_dis,<sp/>fov,<sp/>num_beams,<sp/>theta_index_increment,<sp/>sines,<sp/>cosines,<sp/>eps,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt,<sp/>max_range):</highlight></codeline>
-<codeline lineno="147"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="148"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Perform<sp/>the<sp/>scan<sp/>for<sp/>each<sp/>discretized<sp/>angle<sp/>of<sp/>each<sp/>beam<sp/>of<sp/>the<sp/>laser,<sp/>loop<sp/>heavy,<sp/>should<sp/>be<sp/>JITted</highlight></codeline>
-<codeline lineno="149"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="150"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="151"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(numpy.ndarray(3,<sp/>)):<sp/>current<sp/>pose<sp/>of<sp/>the<sp/>scan<sp/>frame<sp/>in<sp/>the<sp/>map</highlight></codeline>
-<codeline lineno="152"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_dis<sp/>(int):<sp/>number<sp/>of<sp/>steps<sp/>to<sp/>discretize<sp/>the<sp/>angles<sp/>between<sp/>0<sp/>and<sp/>2pi<sp/>for<sp/>look<sp/>up</highlight></codeline>
-<codeline lineno="153"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fov<sp/>(float):<sp/>field<sp/>of<sp/>view<sp/>of<sp/>the<sp/>laser<sp/>scan</highlight></codeline>
-<codeline lineno="154"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_beams<sp/>(int):<sp/>number<sp/>of<sp/>beams<sp/>in<sp/>the<sp/>scan</highlight></codeline>
-<codeline lineno="155"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index_increment<sp/>(float):<sp/>increment<sp/>between<sp/>angle<sp/>indices<sp/>after<sp/>discretization</highlight></codeline>
-<codeline lineno="156"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="157"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="158"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>(numpy.ndarray(n,<sp/>)):<sp/>resulting<sp/>laser<sp/>scan<sp/>at<sp/>the<sp/>pose,<sp/>n=num_beams</highlight></codeline>
-<codeline lineno="159"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>empty<sp/>scan<sp/>array<sp/>init</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="161"><highlight class="normal"><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>np.empty((num_beams,))</highlight></codeline>
-<codeline lineno="162"><highlight class="normal"></highlight></codeline>
-<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>make<sp/>theta<sp/>discrete<sp/>by<sp/>mapping<sp/>the<sp/>range<sp/>[-pi,<sp/>pi]<sp/>onto<sp/>[0,<sp/>theta_dis]</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/>theta_index<sp/>=<sp/>theta_dis<sp/>*<sp/>(pose[2]<sp/>-<sp/>fov/2.)/(2.<sp/>*<sp/>np.pi)</highlight></codeline>
-<codeline lineno="165"><highlight class="normal"></highlight></codeline>
-<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>make<sp/>sure<sp/>it&apos;s<sp/>wrapped<sp/>properly</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/>theta_index<sp/>=<sp/>np.fmod(theta_index,<sp/>theta_dis)</highlight></codeline>
-<codeline lineno="168"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>(theta_index<sp/>&lt;<sp/>0):</highlight></codeline>
-<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index<sp/>+=<sp/>theta_dis</highlight></codeline>
-<codeline lineno="170"><highlight class="normal"></highlight></codeline>
-<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>sweep<sp/>through<sp/>each<sp/>beam</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(0,<sp/>num_beams):</highlight></codeline>
-<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>trace<sp/>the<sp/>current<sp/>beam</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan[i]<sp/>=<sp/>trace_ray(pose[0],<sp/>pose[1],<sp/>theta_index,<sp/>sines,<sp/>cosines,<sp/>eps,<sp/>orig_x,<sp/>orig_y,<sp/>orig_c,<sp/>orig_s,<sp/>height,<sp/>width,<sp/>resolution,<sp/>dt,<sp/>max_range)</highlight></codeline>
-<codeline lineno="175"><highlight class="normal"></highlight></codeline>
-<codeline lineno="176"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>increment<sp/>the<sp/>beam<sp/>index</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="177"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index<sp/>+=<sp/>theta_index_increment</highlight></codeline>
-<codeline lineno="178"><highlight class="normal"></highlight></codeline>
-<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>make<sp/>sure<sp/>it<sp/>stays<sp/>in<sp/>the<sp/>range<sp/>[0,<sp/>theta_dis)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>theta_index<sp/>&gt;=<sp/>theta_dis:</highlight></codeline>
-<codeline lineno="181"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_index<sp/>-=<sp/>theta_dis</highlight></codeline>
-<codeline lineno="182"><highlight class="normal"></highlight></codeline>
-<codeline lineno="183"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>scan</highlight></codeline>
-<codeline lineno="184"><highlight class="normal"></highlight></codeline>
-<codeline lineno="185" refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(object):</highlight></codeline>
-<codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="187"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>2D<sp/>LIDAR<sp/>scan<sp/>simulator<sp/>class</highlight></codeline>
-<codeline lineno="188"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="189"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Init<sp/>params:</highlight></codeline>
-<codeline lineno="190"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>num_beams<sp/>(int):<sp/>number<sp/>of<sp/>beams<sp/>in<sp/>the<sp/>scan</highlight></codeline>
-<codeline lineno="191"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fov<sp/>(float):<sp/>field<sp/>of<sp/>view<sp/>of<sp/>the<sp/>laser<sp/>scan</highlight></codeline>
-<codeline lineno="192"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std_dev<sp/>(float,<sp/>default=0.01):<sp/>standard<sp/>deviation<sp/>of<sp/>the<sp/>generated<sp/>whitenoise<sp/>in<sp/>the<sp/>scan</highlight></codeline>
-<codeline lineno="193"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>eps<sp/>(float,<sp/>default=0.0001):<sp/>ray<sp/>tracing<sp/>iteration<sp/>termination<sp/>condition</highlight></codeline>
-<codeline lineno="194"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_dis<sp/>(int,<sp/>default=2000):<sp/>number<sp/>of<sp/>steps<sp/>to<sp/>discretize<sp/>the<sp/>angles<sp/>between<sp/>0<sp/>and<sp/>2pi<sp/>for<sp/>look<sp/>up</highlight></codeline>
-<codeline lineno="195"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>max_range<sp/>(float,<sp/>default=30.0):<sp/>maximum<sp/>range<sp/>of<sp/>the<sp/>laser</highlight></codeline>
-<codeline lineno="196"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>seed<sp/>(int,<sp/>default=123):<sp/>seed<sp/>for<sp/>random<sp/>number<sp/>generator<sp/>for<sp/>the<sp/>whitenoise<sp/>in<sp/>scan</highlight></codeline>
-<codeline lineno="197"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="198"><highlight class="normal"></highlight></codeline>
-<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">__init__(self,<sp/>num_beams,<sp/>fov,<sp/>std_dev=0.01,<sp/>eps=0.0001,<sp/>theta_dis=2000,<sp/>max_range=30.0,<sp/>seed=123):</highlight></codeline>
-<codeline lineno="200"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>initialization<sp/></highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab651a44dfee70e7f2c2c8389b95e6e51" kindref="member">num_beams</ref><sp/>=<sp/>num_beams</highlight></codeline>
-<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a675555c29ace0ea5ddea92835965e654" kindref="member">fov</ref><sp/>=<sp/>fov</highlight></codeline>
-<codeline lineno="203"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af5f188b7150482f5518461af89d61fe7" kindref="member">std_dev</ref><sp/>=<sp/>std_dev</highlight></codeline>
-<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ae0b3e8aec78d765f2c64fc274b9e447f" kindref="member">eps</ref><sp/>=<sp/>eps</highlight></codeline>
-<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1aad699977c807e3ad150b6dac8b2bb1a0" kindref="member">theta_dis</ref><sp/>=<sp/>theta_dis</highlight></codeline>
-<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a510e60d159e716bcd62b54dac8a69066" kindref="member">max_range</ref><sp/>=<sp/>max_range</highlight></codeline>
-<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7cf918616a14c3d8f76bc359cf2f1c4c" kindref="member">angle_increment</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a675555c29ace0ea5ddea92835965e654" kindref="member">fov</ref><sp/>/<sp/>(self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab651a44dfee70e7f2c2c8389b95e6e51" kindref="member">num_beams</ref><sp/>-<sp/>1)</highlight></codeline>
-<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a52a218f72d96e62281f00e3aa01f6616" kindref="member">theta_index_increment</ref><sp/>=<sp/>theta_dis<sp/>*<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7cf918616a14c3d8f76bc359cf2f1c4c" kindref="member">angle_increment</ref><sp/>/<sp/>(2.<sp/>*<sp/>np.pi)</highlight></codeline>
-<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a6fb0a8e58e42af2934c5f3e35ab3488e" kindref="member">orig_c</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac1a4dcaf191c8308accbcf86999efd5c" kindref="member">orig_s</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a49263002630bb21764217caa6c3314b7" kindref="member">orig_x</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab6b56af3b1396d900b097d4e0463941f" kindref="member">orig_y</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7b15deec5d81ddfa0c6297523cdfc295" kindref="member">map_height</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac5acff270a2a66d20a8bb514001cc3c4" kindref="member">map_width</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a935128be3649ba7d230f63bf7480bfa1" kindref="member">map_resolution</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a184ddbfb8a5aaebb9c523625f716ad7c" kindref="member">dt</ref><sp/>=<sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="218"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>white<sp/>noise<sp/>generator</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1afcb7de24911c98dd85473247c7d4af17" kindref="member">rng</ref><sp/>=<sp/>np.random.default_rng(seed=seed)</highlight></codeline>
-<codeline lineno="220"><highlight class="normal"></highlight></codeline>
-<codeline lineno="221"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>precomputing<sp/>corresponding<sp/>cosines<sp/>and<sp/>sines<sp/>of<sp/>the<sp/>angle<sp/>array</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="222"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_arr<sp/>=<sp/>np.linspace(0.0,<sp/>2*np.pi,<sp/>num=theta_dis)</highlight></codeline>
-<codeline lineno="223"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af2c50f973462f4717c9c02d6c8d47004" kindref="member">sines</ref><sp/>=<sp/>np.sin(theta_arr)</highlight></codeline>
-<codeline lineno="224"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a578ecb22495b2d227517b8a54a505c7e" kindref="member">cosines</ref><sp/>=<sp/>np.cos(theta_arr)</highlight></codeline>
-<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a00925f5100ae8b2e556154e8935ea86e" kindref="member">set_map</ref>(self,<sp/>map_path,<sp/>map_ext):</highlight></codeline>
-<codeline lineno="227"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="228"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Set<sp/>the<sp/>bitmap<sp/>of<sp/>the<sp/>scan<sp/>simulator<sp/>by<sp/>path</highlight></codeline>
-<codeline lineno="229"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="230"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="231"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>(str):<sp/>path<sp/>to<sp/>the<sp/>map<sp/>yaml<sp/>file</highlight></codeline>
-<codeline lineno="232"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>(str):<sp/>extension<sp/>(image<sp/>type)<sp/>of<sp/>the<sp/>map<sp/>image</highlight></codeline>
-<codeline lineno="233"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="234"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="235"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>flag<sp/>(bool):<sp/>if<sp/>image<sp/>reading<sp/>and<sp/>loading<sp/>is<sp/>successful</highlight></codeline>
-<codeline lineno="236"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="237"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>do<sp/>we<sp/>open<sp/>the<sp/>option<sp/>to<sp/>flip<sp/>the<sp/>images,<sp/>and<sp/>turn<sp/>rgb<sp/>into<sp/>grayscale?<sp/>or<sp/>specify<sp/>the<sp/>exact<sp/>requirements<sp/>in<sp/>documentation.</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="238"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>TODO:<sp/>throw<sp/>error<sp/>if<sp/>image<sp/>specification<sp/>isn&apos;t<sp/>met</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="239"><highlight class="normal"></highlight></codeline>
-<codeline lineno="240"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>image</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="241"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_img_path<sp/>=<sp/>os.path.splitext(map_path)[0]<sp/>+<sp/>map_ext</highlight></codeline>
-<codeline lineno="242"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref><sp/>=<sp/>np.array(Image.open(map_img_path).transpose(Image.FLIP_TOP_BOTTOM))</highlight></codeline>
-<codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref>.astype(np.float64)</highlight></codeline>
-<codeline lineno="244"><highlight class="normal"></highlight></codeline>
-<codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>grayscale<sp/>-&gt;<sp/>binary</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="246"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref>[self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref><sp/>&lt;=<sp/>128.]<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="247"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref>[self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref><sp/>&gt;<sp/>128.]<sp/>=<sp/>255.</highlight></codeline>
-<codeline lineno="248"><highlight class="normal"></highlight></codeline>
-<codeline lineno="249"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7b15deec5d81ddfa0c6297523cdfc295" kindref="member">map_height</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref>.shape[0]</highlight></codeline>
-<codeline lineno="250"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac5acff270a2a66d20a8bb514001cc3c4" kindref="member">map_width</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref>.shape[1]</highlight></codeline>
-<codeline lineno="251"><highlight class="normal"></highlight></codeline>
-<codeline lineno="252"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>load<sp/>map<sp/>yaml</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="253"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">with</highlight><highlight class="normal"><sp/>open(map_path,<sp/></highlight><highlight class="stringliteral">&apos;r&apos;</highlight><highlight class="normal">)<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>yaml_stream:</highlight></codeline>
-<codeline lineno="254"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">try</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="255"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_metadata<sp/>=<sp/>yaml.safe_load(yaml_stream)</highlight></codeline>
-<codeline lineno="256"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a935128be3649ba7d230f63bf7480bfa1" kindref="member">map_resolution</ref><sp/>=<sp/>map_metadata[</highlight><highlight class="stringliteral">&apos;resolution&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="257"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a62fb5e7c6a7060685208643a265aaa95" kindref="member">origin</ref><sp/>=<sp/>map_metadata[</highlight><highlight class="stringliteral">&apos;origin&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="258"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">except</highlight><highlight class="normal"><sp/>yaml.YAMLError<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>ex:</highlight></codeline>
-<codeline lineno="259"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(ex)</highlight></codeline>
-<codeline lineno="260"><highlight class="normal"></highlight></codeline>
-<codeline lineno="261"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>calculate<sp/>map<sp/>parameters</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="262"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a49263002630bb21764217caa6c3314b7" kindref="member">orig_x</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a62fb5e7c6a7060685208643a265aaa95" kindref="member">origin</ref>[0]</highlight></codeline>
-<codeline lineno="263"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab6b56af3b1396d900b097d4e0463941f" kindref="member">orig_y</ref><sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a62fb5e7c6a7060685208643a265aaa95" kindref="member">origin</ref>[1]</highlight></codeline>
-<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac1a4dcaf191c8308accbcf86999efd5c" kindref="member">orig_s</ref><sp/>=<sp/>np.sin(self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a62fb5e7c6a7060685208643a265aaa95" kindref="member">origin</ref>[2])</highlight></codeline>
-<codeline lineno="265"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a6fb0a8e58e42af2934c5f3e35ab3488e" kindref="member">orig_c</ref><sp/>=<sp/>np.cos(self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a62fb5e7c6a7060685208643a265aaa95" kindref="member">origin</ref>[2])</highlight></codeline>
-<codeline lineno="266"><highlight class="normal"></highlight></codeline>
-<codeline lineno="267"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>get<sp/>the<sp/>distance<sp/>transform</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="268"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a184ddbfb8a5aaebb9c523625f716ad7c" kindref="member">dt</ref><sp/>=<sp/>get_dt(self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a15778cb625d962a2481cbc34854044dd" kindref="member">map_img</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a935128be3649ba7d230f63bf7480bfa1" kindref="member">map_resolution</ref>)</highlight></codeline>
-<codeline lineno="269"><highlight class="normal"></highlight></codeline>
-<codeline lineno="270"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">True</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="271"><highlight class="normal"></highlight></codeline>
-<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a038a0fc7e42df7827c175fdb3755f2c4" kindref="member">scan</ref>(self,<sp/>pose):</highlight></codeline>
-<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="274"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Perform<sp/>simulated<sp/>2D<sp/>scan<sp/>by<sp/>pose<sp/>on<sp/>the<sp/>given<sp/>map</highlight></codeline>
-<codeline lineno="275"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="276"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Args:</highlight></codeline>
-<codeline lineno="277"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>pose<sp/>(numpy.ndarray<sp/>(3,<sp/>)):<sp/>pose<sp/>of<sp/>the<sp/>scan<sp/>frame<sp/>(x,<sp/>y,<sp/>theta)</highlight></codeline>
-<codeline lineno="278"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="279"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Returns:</highlight></codeline>
-<codeline lineno="280"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>(numpy.ndarray<sp/>(n,<sp/>)):<sp/>data<sp/>array<sp/>of<sp/>the<sp/>laserscan,<sp/>n=num_beams</highlight></codeline>
-<codeline lineno="281"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="282"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Raises:</highlight></codeline>
-<codeline lineno="283"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>ValueError:<sp/>when<sp/>scan<sp/>is<sp/>called<sp/>before<sp/>a<sp/>map<sp/>is<sp/>set</highlight></codeline>
-<codeline lineno="284"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="285"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7b15deec5d81ddfa0c6297523cdfc295" kindref="member">map_height</ref><sp/></highlight><highlight class="keywordflow">is</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">None</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="286"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">raise</highlight><highlight class="normal"><sp/>ValueError(</highlight><highlight class="stringliteral">&apos;Map<sp/>is<sp/>not<sp/>set<sp/>for<sp/>scan<sp/>simulator.&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="287"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>get_scan(pose,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1aad699977c807e3ad150b6dac8b2bb1a0" kindref="member">theta_dis</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a675555c29ace0ea5ddea92835965e654" kindref="member">fov</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab651a44dfee70e7f2c2c8389b95e6e51" kindref="member">num_beams</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a52a218f72d96e62281f00e3aa01f6616" kindref="member">theta_index_increment</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af2c50f973462f4717c9c02d6c8d47004" kindref="member">sines</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a578ecb22495b2d227517b8a54a505c7e" kindref="member">cosines</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ae0b3e8aec78d765f2c64fc274b9e447f" kindref="member">eps</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a49263002630bb21764217caa6c3314b7" kindref="member">orig_x</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab6b56af3b1396d900b097d4e0463941f" kindref="member">orig_y</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a6fb0a8e58e42af2934c5f3e35ab3488e" kindref="member">orig_c</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac1a4dcaf191c8308accbcf86999efd5c" kindref="member">orig_s</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7b15deec5d81ddfa0c6297523cdfc295" kindref="member">map_height</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ac5acff270a2a66d20a8bb514001cc3c4" kindref="member">map_width</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a935128be3649ba7d230f63bf7480bfa1" kindref="member">map_resolution</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a184ddbfb8a5aaebb9c523625f716ad7c" kindref="member">dt</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a510e60d159e716bcd62b54dac8a69066" kindref="member">max_range</ref>)</highlight></codeline>
-<codeline lineno="288"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>noise<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1afcb7de24911c98dd85473247c7d4af17" kindref="member">rng</ref>.normal(0.,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1af5f188b7150482f5518461af89d61fe7" kindref="member">std_dev</ref>,<sp/>size=self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1ab651a44dfee70e7f2c2c8389b95e6e51" kindref="member">num_beams</ref>)</highlight></codeline>
-<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>final_scan<sp/>=<sp/>scan<sp/>+<sp/>noise</highlight></codeline>
-<codeline lineno="290"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>final_scan</highlight></codeline>
-<codeline lineno="291"><highlight class="normal"></highlight></codeline>
-<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">get_increment(self):</highlight></codeline>
-<codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d_1a7cf918616a14c3d8f76bc359cf2f1c4c" kindref="member">angle_increment</ref></highlight></codeline>
-<codeline lineno="294"><highlight class="normal"></highlight></codeline>
-<codeline lineno="295"><highlight class="normal"></highlight></codeline>
-<codeline lineno="296"><highlight class="normal"></highlight><highlight class="stringliteral">&quot;&quot;&quot;</highlight></codeline>
-<codeline lineno="297"><highlight class="stringliteral">Unit<sp/>tests<sp/>for<sp/>the<sp/>2D<sp/>scan<sp/>simulator<sp/>class</highlight></codeline>
-<codeline lineno="298"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline>
-<codeline lineno="299"><highlight class="stringliteral"></highlight></codeline>
-<codeline lineno="300"><highlight class="stringliteral">Test<sp/>cases:</highlight></codeline>
-<codeline lineno="301"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>1,<sp/>2:<sp/>Comparison<sp/>between<sp/>generated<sp/>scan<sp/>array<sp/>of<sp/>the<sp/>new<sp/>simulator<sp/>and<sp/>the<sp/>legacy<sp/>C++<sp/>simulator,<sp/>generated<sp/>data<sp/>used,<sp/>MSE<sp/>is<sp/>used<sp/>as<sp/>the<sp/>metric</highlight></codeline>
-<codeline lineno="302"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>2.<sp/>FPS<sp/>test,<sp/>should<sp/>be<sp/>greater<sp/>than<sp/>500</highlight></codeline>
-<codeline lineno="303"><highlight class="stringliteral">&quot;&quot;&quot;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="304"><highlight class="normal"></highlight></codeline>
-<codeline lineno="305"><highlight class="normal"></highlight></codeline>
-<codeline lineno="306" refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests" refkind="compound"><highlight class="normal"></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests" kindref="compound">ScanTests</ref>(unittest.TestCase):</highlight></codeline>
-<codeline lineno="307"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">setUp(self):</highlight></codeline>
-<codeline lineno="308"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>test<sp/>params</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="309"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" kindref="member">num_beams</ref><sp/>=<sp/>1080</highlight></codeline>
-<codeline lineno="310"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" kindref="member">fov</ref><sp/>=<sp/>4.7</highlight></codeline>
-<codeline lineno="311"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="312"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" kindref="member">num_test</ref><sp/>=<sp/>10</highlight></codeline>
-<codeline lineno="313"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1ad63cebbd6245dfa62dd57168287598b1" kindref="member">test_poses</ref><sp/>=<sp/>np.zeros((self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" kindref="member">num_test</ref>,<sp/>3))</highlight></codeline>
-<codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1ad63cebbd6245dfa62dd57168287598b1" kindref="member">test_poses</ref>[:,<sp/>2]<sp/>=<sp/>np.linspace(-1.,<sp/>1.,<sp/>num=self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" kindref="member">num_test</ref>)</highlight></codeline>
-<codeline lineno="315"><highlight class="normal"></highlight></codeline>
-<codeline lineno="316"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>legacy<sp/>gym<sp/>data</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="317"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>sample_scan<sp/>=<sp/>np.load(</highlight><highlight class="stringliteral">&apos;legacy_scan.npz&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="318"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a44186810ed5ab4fecb230b7a842d294a" kindref="member">berlin_scan</ref><sp/>=<sp/>sample_scan[</highlight><highlight class="stringliteral">&apos;berlin&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="319"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a9c595846d38b4691fd34352eea08cdcf" kindref="member">skirk_scan</ref><sp/>=<sp/>sample_scan[</highlight><highlight class="stringliteral">&apos;skirk&apos;</highlight><highlight class="normal">]</highlight></codeline>
-<codeline lineno="320"><highlight class="normal"></highlight></codeline>
-<codeline lineno="321"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_map_berlin(self):</highlight></codeline>
-<codeline lineno="322"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim<sp/>=<sp/><ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" kindref="member">num_beams</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" kindref="member">fov</ref>)</highlight></codeline>
-<codeline lineno="323"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_berlin<sp/>=<sp/>np.empty((self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" kindref="member">num_test</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" kindref="member">num_beams</ref>))</highlight></codeline>
-<codeline lineno="324"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../maps/berlin.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="325"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="326"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="327"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>scan<sp/>gen<sp/>loop</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="328"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" kindref="member">num_test</ref>):</highlight></codeline>
-<codeline lineno="329"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>test_pose<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1ad63cebbd6245dfa62dd57168287598b1" kindref="member">test_poses</ref>[i]</highlight></codeline>
-<codeline lineno="330"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_berlin[i,:]<sp/>=<sp/>scan_sim.scan(test_pose)</highlight></codeline>
-<codeline lineno="331"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>diff<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a44186810ed5ab4fecb230b7a842d294a" kindref="member">berlin_scan</ref><sp/>-<sp/>new_berlin</highlight></codeline>
-<codeline lineno="332"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mse<sp/>=<sp/>np.mean(diff**2)</highlight></codeline>
-<codeline lineno="333"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Levine<sp/>distance<sp/>test,<sp/>norm:<sp/>&apos;<sp/>+<sp/>str(norm))</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="334"><highlight class="normal"></highlight></codeline>
-<codeline lineno="335"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>plotting</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="336"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="337"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta<sp/>=<sp/>np.linspace(-self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" kindref="member">fov</ref>/2.,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" kindref="member">fov</ref>/2.,<sp/>num=self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" kindref="member">num_beams</ref>)</highlight></codeline>
-<codeline lineno="338"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.polar(theta,<sp/>new_berlin[1,:],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="339"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.polar(theta,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a44186810ed5ab4fecb230b7a842d294a" kindref="member">berlin_scan</ref>[1,:],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="340"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.show()</highlight></codeline>
-<codeline lineno="341"><highlight class="normal"></highlight></codeline>
-<codeline lineno="342"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertLess(mse,<sp/>2.)</highlight></codeline>
-<codeline lineno="343"><highlight class="normal"></highlight></codeline>
-<codeline lineno="344"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_map_skirk(self):</highlight></codeline>
-<codeline lineno="345"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim<sp/>=<sp/><ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" kindref="member">num_beams</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" kindref="member">fov</ref>)</highlight></codeline>
-<codeline lineno="346"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_skirk<sp/>=<sp/>np.empty((self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" kindref="member">num_test</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" kindref="member">num_beams</ref>))</highlight></codeline>
-<codeline lineno="347"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../maps/skirk.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="348"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="349"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="350"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;map<sp/>set&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="351"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>scan<sp/>gen<sp/>loop</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="352"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a3beafc32194d2dd32a0a97885ba97539" kindref="member">num_test</ref>):</highlight></codeline>
-<codeline lineno="353"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>test_pose<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1ad63cebbd6245dfa62dd57168287598b1" kindref="member">test_poses</ref>[i]</highlight></codeline>
-<codeline lineno="354"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>new_skirk[i,:]<sp/>=<sp/>scan_sim.scan(test_pose)</highlight></codeline>
-<codeline lineno="355"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>diff<sp/>=<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a9c595846d38b4691fd34352eea08cdcf" kindref="member">skirk_scan</ref><sp/>-<sp/>new_skirk</highlight></codeline>
-<codeline lineno="356"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mse<sp/>=<sp/>np.mean(diff**2)</highlight></codeline>
-<codeline lineno="357"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;skirk<sp/>distance<sp/>test,<sp/>mse:<sp/>&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(mse))</highlight></codeline>
-<codeline lineno="358"><highlight class="normal"></highlight></codeline>
-<codeline lineno="359"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>plotting</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="360"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="361"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta<sp/>=<sp/>np.linspace(-self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" kindref="member">fov</ref>/2.,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" kindref="member">fov</ref>/2.,<sp/>num=self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" kindref="member">num_beams</ref>)</highlight></codeline>
-<codeline lineno="362"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.polar(theta,<sp/>new_skirk[1,:],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="363"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.polar(theta,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a9c595846d38b4691fd34352eea08cdcf" kindref="member">skirk_scan</ref>[1,:],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="364"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>plt.show()</highlight></codeline>
-<codeline lineno="365"><highlight class="normal"></highlight></codeline>
-<codeline lineno="366"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertLess(mse,<sp/>2.)</highlight></codeline>
-<codeline lineno="367"><highlight class="normal"></highlight></codeline>
-<codeline lineno="368"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">test_fps(self):</highlight></codeline>
-<codeline lineno="369"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>scan<sp/>fps<sp/>should<sp/>be<sp/>greater<sp/>than<sp/>500</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="370"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim<sp/>=<sp/><ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1af6405e794509630382bd714bfc01e833" kindref="member">num_beams</ref>,<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_tests_1a320c224064a2dcdba7ad712525e32e88" kindref="member">fov</ref>)</highlight></codeline>
-<codeline lineno="371"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;../../../maps/skirk.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="372"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="373"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan_sim.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="374"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight></codeline>
-<codeline lineno="375"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>time</highlight></codeline>
-<codeline lineno="376"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="377"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(10000):</highlight></codeline>
-<codeline lineno="378"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_test<sp/>=<sp/>i/10000</highlight></codeline>
-<codeline lineno="379"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>scan_sim.scan(np.array([x_test,<sp/>0.,<sp/>0.]))</highlight></codeline>
-<codeline lineno="380"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>end<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="381"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>fps<sp/>=<sp/>10000/(end-start)</highlight></codeline>
-<codeline lineno="382"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;FPS<sp/>test&apos;)</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="383"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>print(&apos;Elapsed<sp/>time:<sp/>&apos;<sp/>+<sp/>str(end-start)<sp/>+<sp/>&apos;<sp/>,<sp/>FPS:<sp/>&apos;<sp/>+<sp/>str(1/fps))</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="384"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>self.assertGreater(fps,<sp/>500.)</highlight></codeline>
-<codeline lineno="385"><highlight class="normal"></highlight></codeline>
-<codeline lineno="386"><highlight class="normal"></highlight></codeline>
-<codeline lineno="387"><highlight class="normal"></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">main():</highlight></codeline>
-<codeline lineno="388"><highlight class="normal"><sp/><sp/><sp/><sp/>num_beams<sp/>=<sp/>1080</highlight></codeline>
-<codeline lineno="389"><highlight class="normal"><sp/><sp/><sp/><sp/>fov<sp/>=<sp/>4.7</highlight></codeline>
-<codeline lineno="390"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>map_path<sp/>=<sp/>&apos;../envs/maps/berlin.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="391"><highlight class="normal"><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;/home/f1tenth-eval/tunercar/es/maps/map0.yaml&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="392"><highlight class="normal"><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">&apos;.png&apos;</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="393"><highlight class="normal"><sp/><sp/><sp/><sp/>scan_sim<sp/>=<sp/><ref refid="classf110__gym_1_1unittest_1_1scan__sim_1_1_scan_simulator2_d" kindref="compound">ScanSimulator2D</ref>(num_beams,<sp/>fov)</highlight></codeline>
-<codeline lineno="394"><highlight class="normal"><sp/><sp/><sp/><sp/>scan_sim.set_map(map_path,<sp/>map_ext)</highlight></codeline>
-<codeline lineno="395"><highlight class="normal"><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>scan_sim.scan(np.array([0.,<sp/>0.,<sp/>0.]))</highlight></codeline>
-<codeline lineno="396"><highlight class="normal"></highlight></codeline>
-<codeline lineno="397"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>fps<sp/>test</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="398"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>time</highlight></codeline>
-<codeline lineno="399"><highlight class="normal"><sp/><sp/><sp/><sp/>start<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="400"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>i<sp/></highlight><highlight class="keywordflow">in</highlight><highlight class="normal"><sp/>range(10000):</highlight></codeline>
-<codeline lineno="401"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_test<sp/>=<sp/>i/10000</highlight></codeline>
-<codeline lineno="402"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>scan<sp/>=<sp/>scan_sim.scan(np.array([x_test,<sp/>0.,<sp/>0.]))</highlight></codeline>
-<codeline lineno="403"><highlight class="normal"><sp/><sp/><sp/><sp/>end<sp/>=<sp/>time.time()</highlight></codeline>
-<codeline lineno="404"><highlight class="normal"><sp/><sp/><sp/><sp/>fps<sp/>=<sp/>(end-start)/10000</highlight></codeline>
-<codeline lineno="405"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;FPS<sp/>test&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="406"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">&apos;Elapsed<sp/>time:<sp/>&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(end-start)<sp/>+<sp/></highlight><highlight class="stringliteral">&apos;<sp/>,<sp/>FPS:<sp/>&apos;</highlight><highlight class="normal"><sp/>+<sp/>str(1/fps))</highlight></codeline>
-<codeline lineno="407"><highlight class="normal"></highlight></codeline>
-<codeline lineno="408"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>visualization</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="409"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>matplotlib.pyplot<sp/></highlight><highlight class="keyword">as</highlight><highlight class="normal"><sp/>plt</highlight></codeline>
-<codeline lineno="410"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">from</highlight><highlight class="normal"><sp/>matplotlib.animation<sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>FuncAnimation</highlight></codeline>
-<codeline lineno="411"><highlight class="normal"><sp/><sp/><sp/><sp/>num_iter<sp/>=<sp/>100</highlight></codeline>
-<codeline lineno="412"><highlight class="normal"><sp/><sp/><sp/><sp/>theta<sp/>=<sp/>np.linspace(-fov/2.,<sp/>fov/2.,<sp/>num=num_beams)</highlight></codeline>
-<codeline lineno="413"><highlight class="normal"><sp/><sp/><sp/><sp/>fig<sp/>=<sp/>plt.figure()</highlight></codeline>
-<codeline lineno="414"><highlight class="normal"><sp/><sp/><sp/><sp/>ax<sp/>=<sp/>fig.add_subplot(111,<sp/>projection=</highlight><highlight class="stringliteral">&apos;polar&apos;</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="415"><highlight class="normal"><sp/><sp/><sp/><sp/>ax.set_ylim(0,<sp/>70)</highlight></codeline>
-<codeline lineno="416"><highlight class="normal"><sp/><sp/><sp/><sp/>line,<sp/>=<sp/>ax.plot([],<sp/>[],<sp/></highlight><highlight class="stringliteral">&apos;.&apos;</highlight><highlight class="normal">,<sp/>lw=0)</highlight></codeline>
-<codeline lineno="417"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">def<sp/></highlight><highlight class="normal">update(i):</highlight></codeline>
-<codeline lineno="418"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>x_ani<sp/>=<sp/>i<sp/>*<sp/>3.<sp/>/<sp/>num_iter</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="419"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>theta_ani<sp/>=<sp/>-i<sp/>*<sp/>2<sp/>*<sp/>np.pi<sp/>/<sp/>num_iter</highlight></codeline>
-<codeline lineno="420"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>x_ani<sp/>=<sp/>0.</highlight></codeline>
-<codeline lineno="421"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>current_scan<sp/>=<sp/>scan_sim.scan(np.array([x_ani,<sp/>0.,<sp/>theta_ani]))</highlight></codeline>
-<codeline lineno="422"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>print(np.max(current_scan))</highlight></codeline>
-<codeline lineno="423"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>line.set_data(theta,<sp/>current_scan)</highlight></codeline>
-<codeline lineno="424"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>line,<sp/></highlight></codeline>
-<codeline lineno="425"><highlight class="normal"><sp/><sp/><sp/><sp/>ani<sp/>=<sp/>FuncAnimation(fig,<sp/>update,<sp/>frames=num_iter,<sp/>blit=</highlight><highlight class="keyword">True</highlight><highlight class="normal">)</highlight></codeline>
-<codeline lineno="426"><highlight class="normal"><sp/><sp/><sp/><sp/>plt.show()</highlight></codeline>
-<codeline lineno="427"><highlight class="normal"></highlight></codeline>
-<codeline lineno="428"><highlight class="normal"></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>__name__<sp/>==<sp/></highlight><highlight class="stringliteral">&apos;__main__&apos;</highlight><highlight class="normal">:</highlight></codeline>
-<codeline lineno="429"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">#<sp/>unittest.main()</highlight><highlight class="normal"></highlight></codeline>
-<codeline lineno="430"><highlight class="normal"><sp/><sp/><sp/><sp/>main()</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/scan_sim.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/unittest_2____init_____8py.xml b/docs/xml/unittest_2____init_____8py.xml
deleted file mode 100644
index 4c762804..00000000
--- a/docs/xml/unittest_2____init_____8py.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
-<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.17">
-  <compounddef id="unittest_2____init_____8py" kind="file" language="Python">
-    <compoundname>__init__.py</compoundname>
-    <innernamespace refid="namespacef110__gym_1_1unittest">f110_gym::unittest</innernamespace>
-    <innernamespace refid="namespacegym_1_1envs_1_1unittest_1_1scan__sim">gym::envs::unittest::scan_sim</innernamespace>
-    <briefdescription>
-    </briefdescription>
-    <detaileddescription>
-    </detaileddescription>
-    <programlisting>
-<codeline lineno="1"><highlight class="keyword">from</highlight><highlight class="normal"><sp/><ref refid="namespacegym_1_1envs_1_1unittest_1_1scan__sim" kindref="compound">gym.envs.unittest.scan_sim</ref><sp/></highlight><highlight class="keyword">import</highlight><highlight class="normal"><sp/>*</highlight></codeline>
-    </programlisting>
-    <location file="/home/billyzheng/f1tenth_gym/gym/f110_gym/unittest/__init__.py"/>
-  </compounddef>
-</doxygen>
diff --git a/docs/xml/xml.xsd b/docs/xml/xml.xsd
deleted file mode 100644
index 9f80fe15..00000000
--- a/docs/xml/xml.xsd
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version='1.0'?>
-<xsd:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
-            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-            xml:lang="en">
-
-  <xsd:attribute name="lang" type="xsd:language">
-  </xsd:attribute>
-
-  <xsd:attribute name="space" default="preserve">
-    <xsd:simpleType>
-      <xsd:restriction base="xsd:NCName">
-        <xsd:enumeration value="default"/>
-        <xsd:enumeration value="preserve"/>
-      </xsd:restriction>
-    </xsd:simpleType>
-  </xsd:attribute>
-
-  <xsd:attributeGroup name="specialAttrs">
-    <xsd:attribute ref="xml:lang"/>
-    <xsd:attribute ref="xml:space"/>
-  </xsd:attributeGroup>
-
-</xsd:schema>
diff --git a/gym/f110_gym/envs/f110_env.py b/gym/f110_gym/envs/f110_env.py
index 5ce8a61e..17af4c06 100644
--- a/gym/f110_gym/envs/f110_env.py
+++ b/gym/f110_gym/envs/f110_env.py
@@ -18,10 +18,7 @@
 
 # others
 import numpy as np
-
-
-class F110Env(gym.Env):
-    """
+"""
     OpenAI gym environment for F1TENTH
 
     Env should be initialized by calling gym.make('f110_gym:f110-v0', **kwargs)
@@ -58,10 +55,24 @@ class F110Env(gym.Env):
             ego_idx (int, default=0): ego's index in list of agents
     """
 
+class F110Env(gym.Env):
+    """
+    OpenAI gym environment for F1TENTH
+    """
+
     # NOTE: change matadata with default rendering-modes, add definition of render_fps
     metadata = {"render_modes": ["human", "human_fast", "rgb_array"], "render_fps": 100}
 
     def __init__(self, config: dict = None, render_mode=None, **kwargs):
+        """_summary_
+
+        Parameters
+        ----------
+        config : dict, optional
+            _description_, by default None
+        render_mode : _type_, optional
+            _description_, by default None
+        """
         super().__init__()
 
         # Configuration
@@ -164,15 +175,13 @@ def __init__(self, config: dict = None, render_mode=None, **kwargs):
 
     @classmethod
     def default_config(cls) -> dict:
-        """
-        Default environment configuration.
+        """Default environment configuration.
 
         Can be overloaded in environment implementations, or by calling configure().
 
-        Args:
-            None
-
-        Returns:
+        Returns
+        -------
+        dict
             a configuration dict
         """
         return {
@@ -209,6 +218,21 @@ def default_config(cls) -> dict:
         }
 
     def configure(self, config: dict) -> None:
+        """Update configuration of environment
+
+        Parameters
+        ----------
+        config : dict
+            a configuration dict
+
+        Examples
+        --------
+        >>> import gymnasium as gym
+        >>> env = gym.make("f1tenth_gym:f1tenth-v0")
+        >>> new_conf = {"params": {"mu": 1.5}}
+        >>> env.configure(config=new_conf)
+
+        """
         if config:
             self.config = deep_update(self.config, config)
             self.params = self.config["params"]
@@ -224,15 +248,14 @@ def configure(self, config: dict) -> None:
                 )
 
     def _check_done(self):
-        """
-        Check if the current rollout is done
-
-        Args:
-            None
-
-        Returns:
-            done (bool): whether the rollout is done
-            toggle_list (list[int]): each agent's toggle list for crossing the finish zone
+        """Check if the current rollout is done
+
+        Returns
+        -------
+        done : bool
+            if simulation is done
+        tooggle : np.ndarray(bool)
+            if the indicator for crossing the starting zone for each agent has toggled for more than 4 times
         """
 
         # this is assuming 2 agents
diff --git a/poetry.lock b/poetry.lock
index 45837d5f..95ec2f6d 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,29 @@
-# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.8.1 and should not be changed by hand.
+
+[[package]]
+name = "accessible-pygments"
+version = "0.0.4"
+description = "A collection of accessible pygments styles"
+optional = false
+python-versions = "*"
+files = [
+    {file = "accessible-pygments-0.0.4.tar.gz", hash = "sha256:e7b57a9b15958e9601c7e9eb07a440c813283545a20973f2574a5f453d0e953e"},
+    {file = "accessible_pygments-0.0.4-py2.py3-none-any.whl", hash = "sha256:416c6d8c1ea1c5ad8701903a20fcedf953c6e720d64f33dc47bfb2d3f2fa4e8d"},
+]
+
+[package.dependencies]
+pygments = ">=1.5"
+
+[[package]]
+name = "alabaster"
+version = "0.7.16"
+description = "A light, configurable Sphinx theme"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"},
+    {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"},
+]
 
 [[package]]
 name = "appnope"
@@ -44,6 +69,41 @@ files = [
 pyflakes = ">=3.0.0"
 tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""}
 
+[[package]]
+name = "babel"
+version = "2.14.0"
+description = "Internationalization utilities"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"},
+    {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"},
+]
+
+[package.extras]
+dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
+
+[[package]]
+name = "beautifulsoup4"
+version = "4.12.3"
+description = "Screen-scraping library"
+optional = false
+python-versions = ">=3.6.0"
+files = [
+    {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"},
+    {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"},
+]
+
+[package.dependencies]
+soupsieve = ">1.2"
+
+[package.extras]
+cchardet = ["cchardet"]
+chardet = ["chardet"]
+charset-normalizer = ["charset-normalizer"]
+html5lib = ["html5lib"]
+lxml = ["lxml"]
+
 [[package]]
 name = "black"
 version = "23.12.1"
@@ -448,6 +508,17 @@ files = [
     {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
 ]
 
+[[package]]
+name = "docutils"
+version = "0.20.1"
+description = "Docutils -- Python Documentation Utilities"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"},
+    {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"},
+]
+
 [[package]]
 name = "exceptiongroup"
 version = "1.2.0"
@@ -610,6 +681,17 @@ files = [
     {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
 ]
 
+[[package]]
+name = "imagesize"
+version = "1.4.1"
+description = "Getting image size from png/jpeg/jpeg2000/gif file"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+    {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"},
+    {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"},
+]
+
 [[package]]
 name = "importlib-metadata"
 version = "7.0.1"
@@ -761,6 +843,23 @@ docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alab
 qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
 testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
 
+[[package]]
+name = "jinja2"
+version = "3.1.3"
+description = "A very fast and expressive template engine."
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"},
+    {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"},
+]
+
+[package.dependencies]
+MarkupSafe = ">=2.0"
+
+[package.extras]
+i18n = ["Babel (>=2.7)"]
+
 [[package]]
 name = "jupyter-client"
 version = "8.6.0"
@@ -950,6 +1049,75 @@ files = [
     {file = "llvmlite-0.41.1.tar.gz", hash = "sha256:f19f767a018e6ec89608e1f6b13348fa2fcde657151137cb64e56d48598a92db"},
 ]
 
+[[package]]
+name = "markupsafe"
+version = "2.1.5"
+description = "Safely add untrusted strings to HTML/XML markup."
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"},
+    {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"},
+]
+
 [[package]]
 name = "marshmallow"
 version = "3.20.2"
@@ -1134,6 +1302,28 @@ files = [
     {file = "numpy-1.25.0.tar.gz", hash = "sha256:f1accae9a28dc3cda46a91de86acf69de0d1b5f4edd44a9b0c3ceb8036dfff19"},
 ]
 
+[[package]]
+name = "numpydoc"
+version = "1.6.0"
+description = "Sphinx extension to support docstrings in Numpy format"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "numpydoc-1.6.0-py3-none-any.whl", hash = "sha256:b6ddaa654a52bdf967763c1e773be41f1c3ae3da39ee0de973f2680048acafaa"},
+    {file = "numpydoc-1.6.0.tar.gz", hash = "sha256:ae7a5380f0a06373c3afe16ccd15bd79bc6b07f2704cbc6f1e7ecc94b4f5fc0d"},
+]
+
+[package.dependencies]
+Jinja2 = ">=2.10"
+sphinx = ">=5"
+tabulate = ">=0.8.10"
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
+
+[package.extras]
+developer = ["pre-commit (>=3.3)", "tomli"]
+doc = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pydata-sphinx-theme (>=0.13.3)", "sphinx (>=7)"]
+test = ["matplotlib", "pytest", "pytest-cov"]
+
 [[package]]
 name = "opencv-python"
 version = "4.9.0.80"
@@ -1414,6 +1604,33 @@ files = [
     {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
 ]
 
+[[package]]
+name = "pydata-sphinx-theme"
+version = "0.15.2"
+description = "Bootstrap-based Sphinx theme from the PyData community"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "pydata_sphinx_theme-0.15.2-py3-none-any.whl", hash = "sha256:0c5fa1fa98a9b26dae590666ff576f27e26c7ba708fee754ecb9e07359ed4588"},
+    {file = "pydata_sphinx_theme-0.15.2.tar.gz", hash = "sha256:4243fee85b3afcfae9df64f83210a04e7182e53bc3db8841ffff6d21d95ae320"},
+]
+
+[package.dependencies]
+accessible-pygments = "*"
+Babel = "*"
+beautifulsoup4 = "*"
+docutils = "!=0.17.0"
+packaging = "*"
+pygments = ">=2.7"
+sphinx = ">=5.0"
+typing-extensions = "*"
+
+[package.extras]
+a11y = ["pytest-playwright"]
+dev = ["nox", "pre-commit", "pydata-sphinx-theme[doc,test]", "pyyaml"]
+doc = ["ablog (>=0.11.0rc2)", "colorama", "ipykernel", "ipyleaflet", "jupyter_sphinx", "jupyterlite-sphinx", "linkify-it-py", "matplotlib", "myst-parser", "nbsphinx", "numpy", "numpydoc", "pandas", "plotly", "rich", "sphinx-autoapi (>=3.0.0)", "sphinx-copybutton", "sphinx-design", "sphinx-favicon (>=1.0.1)", "sphinx-sitemap", "sphinx-togglebutton", "sphinxcontrib-youtube (<1.4)", "sphinxext-rediraffe", "xarray"]
+test = ["pytest", "pytest-cov", "pytest-regressions"]
+
 [[package]]
 name = "pyflakes"
 version = "3.2.0"
@@ -1604,6 +1821,7 @@ files = [
     {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
     {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
     {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
+    {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
     {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
     {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
     {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
@@ -1874,6 +2092,157 @@ files = [
     {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
 ]
 
+[[package]]
+name = "snowballstemmer"
+version = "2.2.0"
+description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
+optional = false
+python-versions = "*"
+files = [
+    {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"},
+    {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
+]
+
+[[package]]
+name = "soupsieve"
+version = "2.5"
+description = "A modern CSS selector implementation for Beautiful Soup."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"},
+    {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"},
+]
+
+[[package]]
+name = "sphinx"
+version = "7.2.6"
+description = "Python documentation generator"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"},
+    {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"},
+]
+
+[package.dependencies]
+alabaster = ">=0.7,<0.8"
+babel = ">=2.9"
+colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
+docutils = ">=0.18.1,<0.21"
+imagesize = ">=1.3"
+importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""}
+Jinja2 = ">=3.0"
+packaging = ">=21.0"
+Pygments = ">=2.14"
+requests = ">=2.25.0"
+snowballstemmer = ">=2.0"
+sphinxcontrib-applehelp = "*"
+sphinxcontrib-devhelp = "*"
+sphinxcontrib-htmlhelp = ">=2.0.0"
+sphinxcontrib-jsmath = "*"
+sphinxcontrib-qthelp = "*"
+sphinxcontrib-serializinghtml = ">=1.1.9"
+
+[package.extras]
+docs = ["sphinxcontrib-websupport"]
+lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"]
+test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"]
+
+[[package]]
+name = "sphinxcontrib-applehelp"
+version = "1.0.8"
+description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "sphinxcontrib_applehelp-1.0.8-py3-none-any.whl", hash = "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"},
+    {file = "sphinxcontrib_applehelp-1.0.8.tar.gz", hash = "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"},
+]
+
+[package.extras]
+lint = ["docutils-stubs", "flake8", "mypy"]
+standalone = ["Sphinx (>=5)"]
+test = ["pytest"]
+
+[[package]]
+name = "sphinxcontrib-devhelp"
+version = "1.0.6"
+description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "sphinxcontrib_devhelp-1.0.6-py3-none-any.whl", hash = "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f"},
+    {file = "sphinxcontrib_devhelp-1.0.6.tar.gz", hash = "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"},
+]
+
+[package.extras]
+lint = ["docutils-stubs", "flake8", "mypy"]
+standalone = ["Sphinx (>=5)"]
+test = ["pytest"]
+
+[[package]]
+name = "sphinxcontrib-htmlhelp"
+version = "2.0.5"
+description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "sphinxcontrib_htmlhelp-2.0.5-py3-none-any.whl", hash = "sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"},
+    {file = "sphinxcontrib_htmlhelp-2.0.5.tar.gz", hash = "sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"},
+]
+
+[package.extras]
+lint = ["docutils-stubs", "flake8", "mypy"]
+standalone = ["Sphinx (>=5)"]
+test = ["html5lib", "pytest"]
+
+[[package]]
+name = "sphinxcontrib-jsmath"
+version = "1.0.1"
+description = "A sphinx extension which renders display math in HTML via JavaScript"
+optional = false
+python-versions = ">=3.5"
+files = [
+    {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"},
+    {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"},
+]
+
+[package.extras]
+test = ["flake8", "mypy", "pytest"]
+
+[[package]]
+name = "sphinxcontrib-qthelp"
+version = "1.0.7"
+description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "sphinxcontrib_qthelp-1.0.7-py3-none-any.whl", hash = "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"},
+    {file = "sphinxcontrib_qthelp-1.0.7.tar.gz", hash = "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"},
+]
+
+[package.extras]
+lint = ["docutils-stubs", "flake8", "mypy"]
+standalone = ["Sphinx (>=5)"]
+test = ["pytest"]
+
+[[package]]
+name = "sphinxcontrib-serializinghtml"
+version = "1.1.10"
+description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "sphinxcontrib_serializinghtml-1.1.10-py3-none-any.whl", hash = "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7"},
+    {file = "sphinxcontrib_serializinghtml-1.1.10.tar.gz", hash = "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"},
+]
+
+[package.extras]
+lint = ["docutils-stubs", "flake8", "mypy"]
+standalone = ["Sphinx (>=5)"]
+test = ["pytest"]
+
 [[package]]
 name = "stack-data"
 version = "0.6.3"
@@ -1893,6 +2262,20 @@ pure-eval = "*"
 [package.extras]
 tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
 
+[[package]]
+name = "tabulate"
+version = "0.9.0"
+description = "Pretty-print tabular data"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"},
+    {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"},
+]
+
+[package.extras]
+widechars = ["wcwidth"]
+
 [[package]]
 name = "tomli"
 version = "2.0.1"
@@ -2024,5 +2407,5 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
 
 [metadata]
 lock-version = "2.0"
-python-versions = ">=3.9,<=3.11"
-content-hash = "6e6d27dd3ae39a4b959e1ecbf0e8355662aa34e478db6762064c16ea1a8aa99c"
+python-versions = ">=3.9,<3.12"
+content-hash = "4d114fb8fc8411302be0c0e90c5dcf9f8080ff4e6084f416034d3a9ebfd726d7"
diff --git a/pyproject.toml b/pyproject.toml
index d505e15f..51e48e58 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -45,6 +45,9 @@ opencv-python = "^4.9.0.80"
 yamldataclassconfig = "^1.5.0"
 requests = "^2.31.0"
 shapely = "^2.0.2"
+sphinx = "^7.2.6"
+numpydoc = "^1.6.0"
+pydata-sphinx-theme = "^0.15.2"
 
 [tool.poetry.group.dev.dependencies]
 pytest = "^7.4.4"

From eb5aabf4b4078423ffc1bc811dcdbf3baf07ef05 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:29:25 -0500
Subject: [PATCH 03/24] fix dep p ath

---
 .readthedocs.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.readthedocs.yml b/.readthedocs.yml
index 98c960de..867efdd5 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -32,4 +32,4 @@ sphinx:
 # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
 python:
   install:
-    - requirements: docs/src/requirements.txt
\ No newline at end of file
+    - requirements: docs/requirements.txt
\ No newline at end of file

From d97ad0147568f796d2da9f258f8d10a28d634487 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:31:21 -0500
Subject: [PATCH 04/24] conf.py  import fix

---
 docs/src/conf.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/src/conf.py b/docs/src/conf.py
index 3966b05c..345dbe3c 100644
--- a/docs/src/conf.py
+++ b/docs/src/conf.py
@@ -1,7 +1,7 @@
 # flake8: noqa
 import os
 import sys
-import f110_gym
+# import f110_gym
 
 sys.path.insert(0, os.path.abspath("../../"))
 

From 8a3620bebba24dceedb4d041e29f8011ab5c0069 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:36:46 -0500
Subject: [PATCH 05/24] install package for autosummary

---
 .readthedocs.yml | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/.readthedocs.yml b/.readthedocs.yml
index 867efdd5..b7d79613 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -32,4 +32,6 @@ sphinx:
 # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
 python:
   install:
-    - requirements: docs/requirements.txt
\ No newline at end of file
+    - requirements: docs/requirements.txt
+    - method: pip
+      path: .
\ No newline at end of file

From f34b9e44c4deebb95e887900c8a26083e71dc588 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:38:16 -0500
Subject: [PATCH 06/24] fix builder python version

---
 .readthedocs.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.readthedocs.yml b/.readthedocs.yml
index b7d79613..1c2cfc10 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -8,7 +8,7 @@ version: 2
 build:
   os: ubuntu-22.04
   tools:
-    python: "3.12"
+    python: "3.9"
     # You can also specify other tool versions:
     # nodejs: "20"
     # rust: "1.70"

From 96581e95aad6ddbc2b9b5433b9221ca58b9ac789 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:44:34 -0500
Subject: [PATCH 07/24] fix pathing and builder python version

---
 .readthedocs.yml |  2 +-
 docs/src/conf.py | 31 ++++++-------------------------
 2 files changed, 7 insertions(+), 26 deletions(-)

diff --git a/.readthedocs.yml b/.readthedocs.yml
index 1c2cfc10..04f19676 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -8,7 +8,7 @@ version: 2
 build:
   os: ubuntu-22.04
   tools:
-    python: "3.9"
+    python: "3.10"
     # You can also specify other tool versions:
     # nodejs: "20"
     # rust: "1.70"
diff --git a/docs/src/conf.py b/docs/src/conf.py
index 345dbe3c..afd8c9d3 100644
--- a/docs/src/conf.py
+++ b/docs/src/conf.py
@@ -1,7 +1,6 @@
 # flake8: noqa
 import os
 import sys
-# import f110_gym
 
 sys.path.insert(0, os.path.abspath("../../"))
 
@@ -48,39 +47,21 @@
 # -- numpydoc -----------------------------------------------------------------
 numpydoc_show_class_members = False
 
-# -- versions ----------------------------------------------------------------
-version_match = os.environ.get("READTHEDOCS_VERSION")
-# release = f110_gym.__version__
-release = "1.0.0"
-json_url = "https://f1tenth-gym.readthedocs.io/en/latest/_static/switcher.json"
-if not version_match or version_match.isdigit() or version_match == "latest":
-    if "dev" in release or "rc" in release:
-        version_match = "dev"
-        json_url = "_static/switcher.json"
-    else:
-        version_match = f"v{release}"
-elif version_match == "stable":
-    version_match = f"v{release}"
-
 # -- Theme -------------------------------------------------------------------
 html_theme = "pydata_sphinx_theme"
 html_favicon = "assets/f1_stickers_02.png"
 html_theme_options = {
     "logo": {
-        "image_light": "src/assets/f1tenth_gym_color.svg",
-        "image_dark": "src/assets/f1tenth_gym.svg",
+        "image_light": "assets/f1tenth_gym_color.svg",
+        "image_dark": "assets/f1tenth_gym.svg",
     },
     "github_url": "https://github.com/f1tenth/f1tenth_gym",
     "collapse_navigation": True,
     "header_links_before_dropdown": 6,
     # Add light/dark mode and documentation version switcher:
-    "navbar_end": ["theme-switcher", "navbar-icon-links", "version-switcher"],
-    "switcher": {
-        "json_url": json_url,
-        "version_match": version_match,
-    }
-}
-html_sidebars = {
-    "**": ["search-field.html", "sidebar-nav-bs.html", "sidebar-ethical-ads.html"]
+    "navbar_end": ["theme-switcher", "navbar-icon-links"],
 }
+# html_sidebars = {
+#     "**": ["search-field.html", "sidebar-nav-bs.html", "sidebar-ethical-ads.html"]
+# }
 html_last_updated_fmt = "%b %d, %Y"

From 0e5fa8e6d44a77192d17d34c8f5655b4794ed602 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:50:24 -0500
Subject: [PATCH 08/24] pin versions

---
 .readthedocs.yml      | 2 +-
 docs/requirements.txt | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/.readthedocs.yml b/.readthedocs.yml
index 04f19676..ee063186 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -8,7 +8,7 @@ version: 2
 build:
   os: ubuntu-22.04
   tools:
-    python: "3.10"
+    python: "3.10.12"
     # You can also specify other tool versions:
     # nodejs: "20"
     # rust: "1.70"
diff --git a/docs/requirements.txt b/docs/requirements.txt
index ee42679b..007fb8ad 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,5 +1,5 @@
-sphinx>=4.5.0
+sphinx==7.2.6
 numpydoc==1.5.0
 pydata-sphinx-theme==0.13.3
-sphinx-design
-sphinx-copybutton
\ No newline at end of file
+sphinx-design==0.5.0
+sphinx-copybutton==0.5.2
\ No newline at end of file

From 89dc0f0e9a25bdd3a9467c4d09f335ce76846936 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:51:00 -0500
Subject: [PATCH 09/24] fix python ver

---
 .readthedocs.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.readthedocs.yml b/.readthedocs.yml
index ee063186..04f19676 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -8,7 +8,7 @@ version: 2
 build:
   os: ubuntu-22.04
   tools:
-    python: "3.10.12"
+    python: "3.10"
     # You can also specify other tool versions:
     # nodejs: "20"
     # rust: "1.70"

From 9902618be13e9eb34d342eea5d4756d35a4493c8 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:56:24 -0500
Subject: [PATCH 10/24] fix ver

---
 docs/requirements.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/requirements.txt b/docs/requirements.txt
index 007fb8ad..6e74afc2 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,5 +1,5 @@
 sphinx==7.2.6
-numpydoc==1.5.0
-pydata-sphinx-theme==0.13.3
+numpydoc==1.6.0
+pydata-sphinx-theme==0.15.2
 sphinx-design==0.5.0
 sphinx-copybutton==0.5.2
\ No newline at end of file

From 983b35df44e8ea86b78444eb8d4791195bb35d60 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 01:59:16 -0500
Subject: [PATCH 11/24] ver switcher fix

---
 docs/src/_static/switcher.json | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/docs/src/_static/switcher.json b/docs/src/_static/switcher.json
index 11743216..2ef6c237 100644
--- a/docs/src/_static/switcher.json
+++ b/docs/src/_static/switcher.json
@@ -1,10 +1,18 @@
 [
     {
-      "version": "dev",
-      "url": "https://pydata-sphinx-theme.readthedocs.io/en/latest/"
+      "version": "latest",
+      "url": "https://f1tenth-gym.readthedocs.io/en/latest/"
+    },
+    {
+        "version": "stable",
+        "url": "https://f1tenth-gym.readthedocs.io/en/stable/"
     },
     {
         "version": "v1.0.0",
-        "url": "https://pydata-sphinx-theme.readthedocs.io/en/stable/"
-      }
+        "url": "https://f1tenth-gym.readthedocs.io/en/v1.0.0/"
+    },
+    {
+      "version": "dev_docs",
+      "url": "https://f1tenth-gym.readthedocs.io/en/dev_docs/"
+  }
 ]
\ No newline at end of file

From 1ccdf4122599673c207af579879f20c81a017a09 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 02:06:36 -0500
Subject: [PATCH 12/24] show source link

---
 docs/src/conf.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/src/conf.py b/docs/src/conf.py
index afd8c9d3..93d2ef20 100644
--- a/docs/src/conf.py
+++ b/docs/src/conf.py
@@ -65,3 +65,4 @@
 #     "**": ["search-field.html", "sidebar-nav-bs.html", "sidebar-ethical-ads.html"]
 # }
 html_last_updated_fmt = "%b %d, %Y"
+html_show_sourcelink = True
\ No newline at end of file

From 69dc083f8784340709353b8cda51c61ed4160519 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 02:28:27 -0500
Subject: [PATCH 13/24] update api toc

---
 docs/src/api/index.rst       |  4 +++-
 docs/src/api/integrators.rst | 15 +++++++++++++++
 docs/src/api/obv.rst         | 28 ++++++++++++++--------------
 docs/src/api/utils.rst       | 11 +++++++++++
 4 files changed, 43 insertions(+), 15 deletions(-)
 create mode 100644 docs/src/api/integrators.rst
 create mode 100644 docs/src/api/utils.rst

diff --git a/docs/src/api/index.rst b/docs/src/api/index.rst
index 8a2269ea..dba7018a 100644
--- a/docs/src/api/index.rst
+++ b/docs/src/api/index.rst
@@ -8,9 +8,11 @@ API Overview
   env
   base_classes
   dynamic_models
+  integrators
   laser_models
   collision_models
   obv
   rendering
   track
-  reset
\ No newline at end of file
+  reset
+  utils
\ No newline at end of file
diff --git a/docs/src/api/integrators.rst b/docs/src/api/integrators.rst
new file mode 100644
index 00000000..018e8987
--- /dev/null
+++ b/docs/src/api/integrators.rst
@@ -0,0 +1,15 @@
+Integrators
+=============
+
+Different integrators used to integrate ODEs of the dynamics.
+
+.. currentmodule:: f110_gym.envs.integrator
+
+.. autosummary::
+    :toctree: _generated/
+
+    IntegratorType
+    Integrator
+    RK4Integrator
+    EulerIntegrator
+    
\ No newline at end of file
diff --git a/docs/src/api/obv.rst b/docs/src/api/obv.rst
index 78c60d45..982a44a8 100644
--- a/docs/src/api/obv.rst
+++ b/docs/src/api/obv.rst
@@ -1,14 +1,14 @@
-What's In an Observation
-============================
-
-An observation is returned by the gym environment after resetting and stepping. An observation is a dictionary with the following keys:
-
-- ``'ego_idx'``: index of the ego agent in the list of agents
-- ``'scans'``: list of length num_agents of numpy.ndarrays of (num_beams, ), each array is the corresponding laser scan of the agent in the list
-- ``'poses_x'``: list of length num_agents of floats, each agent's x pose in the world
-- ``'poses_y'``: list of length num_agents of floats, each agent's y pose in the world
-- ``'poses_theta'``: list of length num_agents of floats, each agent's theta pose in the world
-- ``'linear_vels_x'``: list of length num_agents of floats, each agent's current longitudinal velocity
-- ``'linear_vels_y'``: list of length num_agents of zeros 
-- ``'ang_vels_z'``: list of length num_agents of floats, each agent's current yaw rate
-- ``'collisions'``: list of length num_agents of 1s or 0s, whether each agent is in collision with another agent or the environment
\ No newline at end of file
+Observations
+=============
+
+Observation types and factory for gymnasium env.
+
+.. currentmodule:: f110_gym.envs.observation
+
+.. autosummary::
+    :toctree: _generated/
+
+    Observation
+    OriginalObservation
+    FeaturesObservation
+    observation_factory
\ No newline at end of file
diff --git a/docs/src/api/utils.rst b/docs/src/api/utils.rst
new file mode 100644
index 00000000..602a5f17
--- /dev/null
+++ b/docs/src/api/utils.rst
@@ -0,0 +1,11 @@
+Utils
+=============
+
+Misc. utils.
+
+.. currentmodule:: f110_gym.envs.utils
+
+.. autosummary::
+    :toctree: _generated/
+
+    deep_update
\ No newline at end of file

From 4c0335e6787ccc76140f07df1af43e44fb23c310 Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 09:18:51 -0500
Subject: [PATCH 14/24] update ci badge

---
 README.md | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index deafba72..68b8fb71 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,5 @@
-![Python 3.8 3.9](https://github.com/f1tenth/f1tenth_gym/actions/workflows/ci.yml/badge.svg)
-![Docker](https://github.com/f1tenth/f1tenth_gym/actions/workflows/docker.yml/badge.svg)
-![Code Style](https://github.com/f1tenth/f1tenth_gym/actions/workflows/lint.yml/badge.svg)
+![Python 3.9 3.10 3.11](https://github.com/f1tenth/f1tenth_gym/actions/workflows/ci.yml/badge.svg?branch=v1.0.0)
+![Code Style](https://github.com/f1tenth/f1tenth_gym/actions/workflows/lint.yml/badge.svg?branch=v1.0.0)
 
 # The F1TENTH Gym environment
 

From 9beb5fa9a930b644d8d67308f1fb0378bfcdd6fa Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 13:37:04 -0500
Subject: [PATCH 15/24] update docstrings

---
 docs/src/api/action.rst           |  21 ++
 docs/src/api/index.rst            |   1 +
 gym/f110_gym/envs/action.py       | 322 ++++++++++++++++++++++++++++--
 gym/f110_gym/envs/base_classes.py | 314 ++++++++++++++---------------
 4 files changed, 477 insertions(+), 181 deletions(-)
 create mode 100644 docs/src/api/action.rst

diff --git a/docs/src/api/action.rst b/docs/src/api/action.rst
new file mode 100644
index 00000000..4f6238d1
--- /dev/null
+++ b/docs/src/api/action.rst
@@ -0,0 +1,21 @@
+Control Actions
+================
+
+Enums specifying different control input action types.
+
+.. currentmodule:: f110_gym.envs.action
+
+.. autosummary::
+    :toctree: _generated/
+
+    LongitudinalActionEnum
+    LongitudinalAction
+    AcclAction
+    SpeedAction
+    SteerActionEnum
+    SteerAction
+    SteeringAngleAction
+    SteeringSpeedAction
+    CarAction
+    from_single_to_multi_action_space
+    
\ No newline at end of file
diff --git a/docs/src/api/index.rst b/docs/src/api/index.rst
index dba7018a..b284e7ba 100644
--- a/docs/src/api/index.rst
+++ b/docs/src/api/index.rst
@@ -7,6 +7,7 @@ API Overview
 
   env
   base_classes
+  action
   dynamic_models
   integrators
   laser_models
diff --git a/gym/f110_gym/envs/action.py b/gym/f110_gym/envs/action.py
index 93658462..3cf50e45 100644
--- a/gym/f110_gym/envs/action.py
+++ b/gym/f110_gym/envs/action.py
@@ -9,19 +9,51 @@
 
 
 class LongitudinalActionEnum(Enum):
+    """Logitudinal car action enum
+
+    Acceleration: 1
+
+    Speed: 2
+
+    Raises
+    ------
+    ValueError
+        Unknown action type
+    """
+
     Accl = 1
     Speed = 2
 
     @staticmethod
     def from_string(action: str):
+        """Set longitudinal action type from string
+
+        Parameters
+        ----------
+        action : str
+            longitudinal action type
+
+        Returns
+        -------
+        AcclAction | SpeedAction
+            Specified longitudinal action type
+
+        Raises
+        ------
+        ValueError
+            Unknown action type
+        """
         if action == "accl":
             return AcclAction
         elif action == "speed":
             return SpeedAction
         else:
             raise ValueError(f"Unknown action type {action}")
-        
+
+
 class LongitudinalAction:
+    """Longitudinal Action abstract class"""
+
     def __init__(self) -> None:
         self._type = None
 
@@ -30,26 +62,91 @@ def __init__(self) -> None:
 
     @abstractmethod
     def act(self, longitudinal_action: Any, **kwargs) -> float:
+        """Convert longitudinal action
+
+        Parameters
+        ----------
+        longitudinal_action : input longitudinal action
+
+        Returns
+        -------
+        float
+            converted longitudinal action
+
+        Raises
+        ------
+        NotImplementedError
+        """
         raise NotImplementedError("longitudinal act method not implemented")
 
     @property
     def type(self) -> str:
+        """property, type of action
+
+        Returns
+        -------
+        str
+            type
+        """
         return self._type
 
     @property
     def space(self) -> gym.Space:
-        return gym.spaces.Box(low=self.lower_limit, high=self.upper_limit, dtype=np.float32)
+        """property, action space
+
+        Returns
+        -------
+        gym.Space
+            action space
+        """
+        return gym.spaces.Box(
+            low=self.lower_limit, high=self.upper_limit, dtype=np.float32
+        )
+
 
 class AcclAction(LongitudinalAction):
+    """Acceleration action type
+
+    Parameters
+    ----------
+    params : Dict
+        parameter dictionary
+    """
+
     def __init__(self, params: Dict) -> None:
         super().__init__()
         self._type = "accl"
         self.lower_limit, self.upper_limit = -params["a_max"], params["a_max"]
 
     def act(self, action: Tuple[float, float], state, params) -> float:
+        """Return action
+
+        Parameters
+        ----------
+        action : Tuple[float, float]
+            input before conversion
+        state : np.ndarray
+            current dynamical state
+        params : dict
+            parameter dictionary
+
+        Returns
+        -------
+        float
+            converted acceleration
+        """
         return action
 
+
 class SpeedAction(LongitudinalAction):
+    """Speed action type
+
+    Parameters
+    ----------
+    params : Dict
+        parameter dictionary
+    """
+
     def __init__(self, params: Dict) -> None:
         super().__init__()
         self._type = "speed"
@@ -58,6 +155,22 @@ def __init__(self, params: Dict) -> None:
     def act(
         self, action: Tuple[float, float], state: np.ndarray, params: Dict
     ) -> float:
+        """Return action
+
+        Parameters
+        ----------
+        action : Tuple[float, float]
+            input before conversion
+        state : np.ndarray
+            current dynamical state
+        params : dict
+            parameter dictionary
+
+        Returns
+        -------
+        float
+            converted speed
+        """
         accl = pid_accl(
             action,
             state[3],
@@ -68,7 +181,10 @@ def act(
 
         return accl
 
+
 class SteerAction:
+    """Steering Action abstract class"""
+
     def __init__(self) -> None:
         self._type = None
 
@@ -77,17 +193,58 @@ def __init__(self) -> None:
 
     @abstractmethod
     def act(self, steer_action: Any, **kwargs) -> float:
+        """Convert steering action
+
+        Parameters
+        ----------
+        steer_action : Any
+            input steering action
+
+        Returns
+        -------
+        float
+            converted steering action
+
+        Raises
+        ------
+        NotImplementedError
+        """
         raise NotImplementedError("steer act method not implemented")
 
     @property
     def type(self) -> str:
+        """steering action type
+
+        Returns
+        -------
+        str
+            type
+        """
         return self._type
-    
+
     @property
     def space(self) -> gym.Space:
-        return gym.spaces.Box(low=self.lower_limit, high=self.upper_limit, dtype=np.float32)
+        """action space
+
+        Returns
+        -------
+        gym.Space
+            action space
+        """
+        return gym.spaces.Box(
+            low=self.lower_limit, high=self.upper_limit, dtype=np.float32
+        )
+
 
 class SteeringAngleAction(SteerAction):
+    """Steering angle action type
+
+    Parameters
+    ----------
+    params : Dict
+        parameter dictionary
+    """
+
     def __init__(self, params: Dict) -> None:
         super().__init__()
         self._type = "steering_angle"
@@ -95,15 +252,40 @@ def __init__(self, params: Dict) -> None:
 
     def act(
         self, action: Tuple[float, float], state: np.ndarray, params: Dict
-    ) -> float: 
+    ) -> float:
+        """Return action
+
+        Parameters
+        ----------
+        action : Tuple[float, float]
+            input before conversion
+        state : np.ndarray
+            current dynamical state
+        params : dict
+            parameter dictionary
+
+        Returns
+        -------
+        float
+            converted steering angle
+        """
         sv = pid_steer(
             action,
             state[2],
             params["sv_max"],
         )
         return sv
-    
+
+
 class SteeringSpeedAction(SteerAction):
+    """Steering angle velocity action type
+
+    Parameters
+    ----------
+    params : Dict
+        parameter dictionary
+    """
+
     def __init__(self, params: Dict) -> None:
         super().__init__()
         self._type = "steering_speed"
@@ -111,15 +293,61 @@ def __init__(self, params: Dict) -> None:
 
     def act(
         self, action: Tuple[float, float], state: np.ndarray, params: Dict
-    ) -> float: 
+    ) -> float:
+        """Return action
+
+        Parameters
+        ----------
+        action : Tuple[float, float]
+            input before conversion
+        state : np.ndarray
+            current dynamical state
+        params : dict
+            parameter dictionary
+
+        Returns
+        -------
+        float
+            converted steering velocity angle
+        """
         return action
 
+
 class SteerActionEnum(Enum):
+    """Logitudinal car action enum
+
+    Acceleration: 1
+
+    Speed: 2
+
+    Raises
+    ------
+    ValueError
+        Unknown action type
+    """
+
     Steering_Angle = 1
     Steering_Speed = 2
 
     @staticmethod
     def from_string(action: str):
+        """Set steering action type from string
+
+        Parameters
+        ----------
+        action : str
+            steering action type
+
+        Returns
+        -------
+        SteeringAngleAction | SteeringSpeedAction
+            Specified steering action type
+
+        Raises
+        ------
+        ValueError
+            Unknown action type
+        """
         if action == "steering_angle":
             return SteeringAngleAction
         elif action == "steering_speed":
@@ -127,11 +355,25 @@ def from_string(action: str):
         else:
             raise ValueError(f"Unknown action type {action}")
 
+
 class CarAction:
-    def __init__(self, control_mode : list[str, str], params: Dict) -> None:
+    """Car actions
+
+        Parameters
+        ----------
+        control_mode : list[str, str]
+            control mode requested
+        params : Dict
+            parameter dictionary
+
+        Raises
+        ------
+        ValueError
+    """
+    def __init__(self, control_mode: list[str, str], params: Dict) -> None:
         long_act_type_fn = None
         steer_act_type_fn = None
-        if type(control_mode) == str: # only one control mode specified
+        if type(control_mode) == str:  # only one control mode specified
             try:
                 long_act_type_fn = LongitudinalActionEnum.from_string(control_mode)
             except ValueError:
@@ -141,24 +383,24 @@ def __init__(self, control_mode : list[str, str], params: Dict) -> None:
                     raise ValueError(f"Unknown control mode {control_mode}")
                 if control_mode == "steering_speed":
                     warnings.warn(
-                        f'Only one control mode specified, using {control_mode} for steering and defaulting to acceleration for longitudinal control'
+                        f"Only one control mode specified, using {control_mode} for steering and defaulting to acceleration for longitudinal control"
                     )
                     long_act_type_fn = LongitudinalActionEnum.from_string("accl")
                 else:
                     warnings.warn(
-                        f'Only one control mode specified, using {control_mode} for steering and defaulting to speed for longitudinal control'
+                        f"Only one control mode specified, using {control_mode} for steering and defaulting to speed for longitudinal control"
                     )
                     long_act_type_fn = LongitudinalActionEnum.from_string("speed")
 
             else:
                 if control_mode == "accl":
                     warnings.warn(
-                        f'Only one control mode specified, using {control_mode} for longitudinal control and defaulting to steering speed for steering'
+                        f"Only one control mode specified, using {control_mode} for longitudinal control and defaulting to steering speed for steering"
                     )
                     steer_act_type_fn = SteerActionEnum.from_string("steering_speed")
                 else:
                     warnings.warn(
-                        f'Only one control mode specified, using {control_mode} for longitudinal control and defaulting to steering angle for steering'
+                        f"Only one control mode specified, using {control_mode} for longitudinal control and defaulting to steering angle for steering"
                     )
                     steer_act_type_fn = SteerActionEnum.from_string("steering_angle")
 
@@ -167,24 +409,54 @@ def __init__(self, control_mode : list[str, str], params: Dict) -> None:
             steer_act_type_fn = SteerActionEnum.from_string(control_mode[1])
         else:
             raise ValueError(f"Unknown control mode {control_mode}")
-        
-        self._longitudinal_action : LongitudinalAction = long_act_type_fn(params)
-        self._steer_action : SteerAction = steer_act_type_fn(params)
+
+        self._longitudinal_action: LongitudinalAction = long_act_type_fn(params)
+        self._steer_action: SteerAction = steer_act_type_fn(params)
 
     @abstractmethod
     def act(self, action: Any, **kwargs) -> Tuple[float, float]:
+        """Return action
+
+        Parameters
+        ----------
+        action : Any
+            input control actions
+
+        Returns
+        -------
+        Tuple[float, float]
+            converted control actions
+        """        
         longitudinal_action = self._longitudinal_action.act(action[0], **kwargs)
         steer_action = self._steer_action.act(action[1], **kwargs)
         return longitudinal_action, steer_action
 
     @property
     def type(self) -> Tuple[str, str]:
+        """property, car action type
+
+        Returns
+        -------
+        Tuple[str, str]
+            type
+        """        
         return (self._steer_action.type, self._longitudinal_action.type)
 
     @property
     def space(self) -> gym.Space:
-        low = np.array([self._steer_action.lower_limit, self._longitudinal_action.lower_limit]).astype(np.float32)
-        high = np.array([self._steer_action.upper_limit, self._longitudinal_action.upper_limit]).astype(np.float32)
+        """property, car action space
+
+        Returns
+        -------
+        gym.Space
+            action space
+        """        
+        low = np.array(
+            [self._steer_action.lower_limit, self._longitudinal_action.lower_limit]
+        ).astype(np.float32)
+        high = np.array(
+            [self._steer_action.upper_limit, self._longitudinal_action.upper_limit]
+        ).astype(np.float32)
 
         return gym.spaces.Box(low=low, high=high, shape=(2,), dtype=np.float32)
 
@@ -192,6 +464,20 @@ def space(self) -> gym.Space:
 def from_single_to_multi_action_space(
     single_agent_action_space: gym.spaces.Box, num_agents: int
 ) -> gym.spaces.Box:
+    """Convert single agent action spaces to multi agent action spaces
+
+    Parameters
+    ----------
+    single_agent_action_space : gym.spaces.Box
+        action space of a single aget
+    num_agents : int
+        number of agents in the simulation
+
+    Returns
+    -------
+    gym.spaces.Box
+        action spaces of multiple agents
+    """
     return gym.spaces.Box(
         low=single_agent_action_space.low[None].repeat(num_agents, 0),
         high=single_agent_action_space.high[None].repeat(num_agents, 0),
diff --git a/gym/f110_gym/envs/base_classes.py b/gym/f110_gym/envs/base_classes.py
index bda02aec..51479d33 100644
--- a/gym/f110_gym/envs/base_classes.py
+++ b/gym/f110_gym/envs/base_classes.py
@@ -9,20 +9,34 @@
 
 
 class RaceCar(object):
-    """
-    Base level race car class, handles the physics and laser scan of a single vehicle
-
-    Data Members:
-        params (dict): vehicle parameters dictionary
-        is_ego (bool): ego identifier
-        time_step (float): physics timestep
-        num_beams (int): number of beams in laser
-        fov (float): field of view of laser
-        state (np.ndarray (7, )): state vector [x, y, theta, vel, steer_angle, ang_vel, slip_angle]
-        odom (np.ndarray(13, )): odometry vector [x, y, z, qx, qy, qz, qw, linear_x, linear_y, linear_z, angular_x, angular_y, angular_z]
-        accel (float): current acceleration input
-        steer_angle_vel (float): current steering velocity input
-        in_collision (bool): collision indicator
+    """Base level race car class, handles the physics and laser scan of a single vehicle
+
+    Parameters
+    ----------
+        params : _type_
+            vehicle parameters dictionary
+        seed : _type_
+            random seed
+        action_type : CarAction
+            action type for the cars
+        integrator : _type_, optional
+            integrator type, by default EulerIntegrator()
+        model : _type_, optional
+            vehicle model type, by default DynamicModel.ST
+        is_ego : bool, optional
+            ego identifier, by default False
+        time_step : float, optional
+            physics sim time step, by default 0.01
+        num_beams : int, optional
+            number of beams in the laser scan, by default 1080
+        fov : float, optional
+            field of view of the laser, by default 4.7
+
+
+    Raises
+    ------
+    ValueError
+        No Control Action Type Specified.
     """
 
     # static objects that don't need to be stored in class instances
@@ -43,25 +57,6 @@ def __init__(
         num_beams=1080,
         fov=4.7,
     ):
-        """
-        TODO rewrite it
-
-        Init function
-
-        Args:
-            params (dict): vehicle parameters dictionary
-            seed (int): random seed
-            is_ego (bool, default=False): ego identifier
-            time_step (float, default=0.01): physics sim time step
-            num_beams (int, default=1080): number of beams in the laser scan
-            fov (float, default=4.7): field of view of the laser
-            integrator (Integrator, default=EulerIntegrator()): integrator type
-            model (Model, default=Model.ST): vehicle model type
-            action_type (Action, default=SpeedAction()): action type
-
-        Returns:
-            None
-        """
 
         # initialization
         self.params = params
@@ -138,36 +133,32 @@ def __init__(
                         RaceCar.side_distances[i] = min(to_side, to_fr)
 
     def update_params(self, params):
-        """
-        Updates the physical parameters of the vehicle
-        Note that does not need to be called at initialization of class anymore
-
-        Args:
-            params (dict): new parameters for the vehicle
+        """Updates the physical parameters of the vehicle
 
-        Returns:
-            None
+        Parameters
+        ----------
+        params : dict
+            new parameters for the vehicle
         """
         self.params = params
 
     def set_map(self, map: str | Track):
-        """
-        Sets the map for scan simulator
+        """Sets the map for scan simulator
 
-        Args:
-            map (str | Track): name of the map, or Track object
+        Parameters
+        ----------
+        map : str | Track
+            name of the map, or Track object
         """
         RaceCar.scan_simulator.set_map(map)
 
     def reset(self, pose):
-        """
-        Resets the vehicle to a pose
-
-        Args:
-            pose (np.ndarray (3, )): pose to reset the vehicle to
+        """Resets the vehicle to a pose
 
-        Returns:
-            None
+        Parameters
+        ----------
+        pose : np.ndarray
+            pose to reset the vehicle to
         """
         # clear control inputs
         self.accel = 0.0
@@ -182,16 +173,18 @@ def reset(self, pose):
         self.scan_rng = np.random.default_rng(seed=self.seed)
 
     def ray_cast_agents(self, scan):
-        """
-        Ray cast onto other agents in the env, modify original scan
+        """Ray cast onto other agents in the env, modify original scan
 
-        Args:
-            scan (np.ndarray, (n, )): original scan range array
+        Parameters
+        ----------
+        scan : np.ndarray
+            original scan range array
 
-        Returns:
-            new_scan (np.ndarray, (n, )): modified scan
+        Returns
+        -------
+        np.ndarray
+            modified scan
         """
-
         # starting from original scan
         new_scan = scan
 
@@ -212,19 +205,19 @@ def ray_cast_agents(self, scan):
         return new_scan
 
     def check_ttc(self, current_scan):
-        """
-        Check iTTC against the environment, sets vehicle states accordingly if collision occurs.
+        """Check iTTC against the environment, sets vehicle states accordingly if collision occurs.
         Note that this does NOT check collision with other agents.
 
-        state is [x, y, steer_angle, vel, yaw_angle, yaw_rate, slip_angle]
-
-        Args:
-            current_scan
+        Parameters
+        ----------
+        current_scan : np.ndarray
+            current laser scan
 
-        Returns:
-            None
+        Returns
+        -------
+        bool
+            whether the scan given indicates the vehicle is in collision with environment
         """
-
         in_collision = check_ttc_jit(
             current_scan,
             self.state[3],
@@ -246,17 +239,25 @@ def check_ttc(self, current_scan):
         return in_collision
 
     def update_pose(self, raw_steer, vel):
+        """Steps the vehicle's physical simulation
+
+        Parameters
+        ----------
+        raw_steer : float
+            desired steering angle, or desired steering velocity
+        vel : float
+            desired longitudinal velocity, or desired longitudinal acceleration
+
+        Returns
+        -------
+        np.ndarray
+            current laser scan
+
+        Raises
+        ------
+        ValueError
+            No Control Action Type Specified.
         """
-        Steps the vehicle's physical simulation
-
-        Args:
-            steer (float): desired steering angle, or desired steering velocity
-            vel (float): desired longitudinal velocity, or desired longitudinal acceleration
-
-        Returns:
-            current_scan
-        """
-
         # steering delay
         steer = 0.0
         if self.steer_buffer.shape[0] < self.steer_buffer_size:
@@ -295,30 +296,26 @@ def update_pose(self, raw_steer, vel):
         return current_scan
 
     def update_opp_poses(self, opp_poses):
-        """
-        Updates the vehicle's information on other vehicles
-
-        Args:
-            opp_poses (np.ndarray(num_other_agents, 3)): updated poses of other agents
+        """Updates the vehicle's information on other vehicles
 
-        Returns:
-            None
+        Parameters
+        ----------
+        opp_poses : np.ndarray
+            updated poses of other agents
         """
         self.opp_poses = opp_poses
 
     def update_scan(self, agent_scans, agent_index):
-        """
-        Steps the vehicle's laser scan simulation
+        """Steps the vehicle's laser scan simulation
         Separated from update_pose because needs to update scan based on NEW poses of agents in the environment
 
-        Args:
-            agent scans list (modified in-place),
-            agent index (int)
-
-        Returns:
-            None
+        Parameters
+        ----------
+        agent_scans : list[np.ndarray]
+            list of scans of each agent
+        agent_index : int
+            index of agent
         """
-
         current_scan = agent_scans[agent_index]
 
         # check ttc
@@ -331,21 +328,33 @@ def update_scan(self, agent_scans, agent_index):
 
 
 class Simulator(object):
-    """
-    Simulator class, handles the interaction and update of all vehicles in the environment
-
-    TODO check description
-
-    Data Members:
-        num_agents (int): number of agents in the environment
-        time_step (float): physics time step
-        agent_poses (np.ndarray(num_agents, 3)): all poses of all agents
-        agents (list[RaceCar]): container for RaceCar objects
-        collisions (np.ndarray(num_agents, )): array of collision indicator for each agent
-        collision_idx (np.ndarray(num_agents, )): which agent is each agent in collision with
-        integrator (Integrator): integrator to use for vehicle dynamics
-        model (Model): model to use for vehicle dynamics
-        action_type (Action): action type to use for vehicle dynamics
+    """Simulator class, handles the interaction and update of all vehicles in the environment
+
+    Parameters
+    ----------
+    params : dict
+        vehicle parameter dictionary
+    num_agents : int
+        number of agents in the environment
+    seed : int
+        seed of the rng in scan simulation
+    action_type : CarAction
+        action type to use for controlling the vehicles
+    integrator : Integrator, optional
+        integrator to use for vehicle dynamics, by default IntegratorType.RK4
+    model : Model, optional
+        vehicle dynamics model to use, by default DynamicModel.ST
+    time_step : float, optional
+        physics time step, by default 0.01
+    ego_idx : int, optional
+        ego vehicle's index in list of agents, by default 0
+
+    Raises
+    ------
+    IndexError
+        Index given is out of bounds for list of agents.
+    ValueError
+        Number of poses for reset does not match number of agents.
     """
 
     def __init__(
@@ -359,21 +368,6 @@ def __init__(
         time_step=0.01,
         ego_idx=0,
     ):
-        """
-        Init function
-
-        Args:
-            params (dict): vehicle parameter dictionary, includes {'mu', 'C_Sf', 'C_Sr', 'lf', 'lr', 'h', 'm', 'I', 's_min', 's_max', 'sv_min', 'sv_max', 'v_switch', 'a_max', 'v_min', 'v_max', 'length', 'width'}
-            num_agents (int): number of agents in the environment
-            seed (int): seed of the rng in scan simulation
-            time_step (float, default=0.01): physics time step
-            ego_idx (int, default=0): ego vehicle's index in list of agents
-            integrator (Integrator, default=Integrator.RK4): integrator to use for vehicle dynamics
-            model (Model, default=Model.ST): vehicle dynamics model to use
-            action_type (Action, default=SpeedAction()): action type to use for controlling the vehicle
-        Returns:
-            None
-        """
         self.num_agents = num_agents
         self.seed = seed
         self.time_step = time_step
@@ -404,28 +398,30 @@ def __init__(
         self.agent_scans = np.empty((self.num_agents, num_beams))
 
     def set_map(self, map: str | Track):
-        """
-        Sets the map of the environment and sets the map for scan simulator of each agent
-
-        Args:
-            map (str | Track): name of the map, or Track object
+        """Sets the map of the environment and sets the map for scan simulator of each agent
 
-        Returns:
-            None
+        Parameters
+        ----------
+        map : str | Track
+            name of the map, or Track object
         """
         for agent in self.agents:
             agent.set_map(map)
 
     def update_params(self, params, agent_idx=-1):
-        """
-        Updates the params of agents, if an index of an agent is given, update only that agent's params
-
-        Args:
-            params (dict): dictionary of params, see details in docstring of __init__
-            agent_idx (int, default=-1): index for agent that needs param update, if negative, update all agents
-
-        Returns:
-            None
+        """Updates the params of agents, if an index of an agent is given, update only that agent's params
+
+        Parameters
+        ----------
+        params : dict
+            dictionary of params
+        agent_idx : int, optional
+            index for agent that needs param update, if negative, update all agents, by default -1
+
+        Raises
+        ------
+        IndexError
+            Index given is out of bounds for list of agents.
         """
         self.params = params
         if agent_idx < 0:
@@ -440,15 +436,7 @@ def update_params(self, params, agent_idx=-1):
             raise IndexError("Index given is out of bounds for list of agents.")
 
     def check_collision(self):
-        """
-        Checks for collision between agents using GJK and agents' body vertices
-
-        Args:
-            None
-
-        Returns:
-            None
-        """
+        """Checks for collision between agents using GJK and agents' body vertices"""
         # get vertices of all agents
         all_vertices = np.empty((self.num_agents, 4, 2))
         for i in range(self.num_agents):
@@ -460,14 +448,12 @@ def check_collision(self):
         self.collisions, self.collision_idx = collision_multiple(all_vertices)
 
     def step(self, control_inputs):
-        """
-        Steps the simulation environment
-
-        Args:
-            control_inputs (np.ndarray (num_agents, 2)): control inputs of all agents, first column is desired steering angle, second column is desired velocity
+        """Steps the simulation environment
 
-        Returns:
-            observations (dict): dictionary for observations: poses of agents, current laser scan of each agent, collision indicators, etc.
+        Parameters
+        ----------
+        control_inputs : np.ndarray
+            control inputs of all agents, first column is desired steering angle, second column is desired velocity
         """
 
         # looping over agents
@@ -498,16 +484,18 @@ def step(self, control_inputs):
                 self.collisions[i] = 1.0
 
     def reset(self, poses):
-        """
-        Resets the simulation environment by given poses
+        """Resets the simulation environment by given poses
 
-        Arges:
-            poses (np.ndarray (num_agents, 3)): poses to reset agents to
+        Parameters
+        ----------
+        poses : np.ndarray
+            poses to reset agents to
 
-        Returns:
-            None
+        Raises
+        ------
+        ValueError
+            Number of poses for reset does not match number of agents.
         """
-
         if poses.shape[0] != self.num_agents:
             raise ValueError(
                 "Number of poses for reset does not match number of agents."

From 97e6a244f89b227819d5b1b2eaf69b315b8435ad Mon Sep 17 00:00:00 2001
From: Hongrui Zheng <billyzheng.bz@gmail.com>
Date: Sun, 3 Mar 2024 19:39:52 -0500
Subject: [PATCH 16/24] update docstrings

---
 docs/src/conf.py                      |   4 +-
 gym/f110_gym/envs/collision_models.py | 188 ++++++-----
 gym/f110_gym/envs/dynamic_models.py   | 363 ++++++++++++++-------
 gym/f110_gym/envs/f110_env.py         | 225 +++++++------
 gym/f110_gym/envs/integrator.py       |  96 ++++++
 gym/f110_gym/envs/laser_models.py     | 447 +++++++++++++++++---------
 gym/f110_gym/envs/observation.py      |  96 +++++-
 gym/f110_gym/envs/utils.py            |  14 +-
 8 files changed, 991 insertions(+), 442 deletions(-)

diff --git a/docs/src/conf.py b/docs/src/conf.py
index 93d2ef20..77d484e4 100644
--- a/docs/src/conf.py
+++ b/docs/src/conf.py
@@ -65,4 +65,6 @@
 #     "**": ["search-field.html", "sidebar-nav-bs.html", "sidebar-ethical-ads.html"]
 # }
 html_last_updated_fmt = "%b %d, %Y"
-html_show_sourcelink = True
\ No newline at end of file
+html_show_sourcelink = True
+
+copybutton_prompt_text = ">>> "
\ No newline at end of file
diff --git a/gym/f110_gym/envs/collision_models.py b/gym/f110_gym/envs/collision_models.py
index 3f7ac235..bd6cec8d 100644
--- a/gym/f110_gym/envs/collision_models.py
+++ b/gym/f110_gym/envs/collision_models.py
@@ -4,14 +4,17 @@
 
 @njit(cache=True)
 def perpendicular(pt):
-    """
-    Return a 2-vector's perpendicular vector
+    """Return a 2-vector's perpendicular vector
 
-    Args:
-        pt (np.ndarray, (2,)): input vector
+    Parameters
+    ----------
+    pt : np.ndarray
+        input vector
 
-    Returns:
-        pt (np.ndarray, (2,)): perpendicular vector
+    Returns
+    -------
+    np.ndarray
+        perpendicular vector
     """
     temp = pt[0]
     pt[0] = pt[1]
@@ -21,14 +24,21 @@ def perpendicular(pt):
 
 @njit(cache=True)
 def tripleProduct(a, b, c):
-    """
-    Return triple product of three vectors
-
-    Args:
-        a, b, c (np.ndarray, (2,)): input vectors
-
-    Returns:
-        (np.ndarray, (2,)): triple product
+    """Return triple product of three vectors
+
+    Parameters
+    ----------
+    a : np.ndarray
+        input vector
+    b : np.ndarray
+        input vector
+    c : np.ndarray
+        input vector
+
+    Returns
+    -------
+    np.ndarray
+        triple product
     """
     ac = a.dot(c)
     bc = b.dot(c)
@@ -37,44 +47,57 @@ def tripleProduct(a, b, c):
 
 @njit(cache=True)
 def avgPoint(vertices):
-    """
-    Return the average point of multiple vertices
+    """Return the average point of multiple vertices
 
-    Args:
-        vertices (np.ndarray, (n, 2)): the vertices we want to find avg on
+    Parameters
+    ----------
+    vertices : np.ndarray
+        the vertices we want to find avg on
 
-    Returns:
-        avg (np.ndarray, (2,)): average point of the vertices
+    Returns
+    -------
+    np.ndarray
+        average point of the vertices
     """
     return np.sum(vertices, axis=0) / vertices.shape[0]
 
 
 @njit(cache=True)
 def indexOfFurthestPoint(vertices, d):
-    """
-    Return the index of the vertex furthest away along a direction in the list of vertices
-
-    Args:
-        vertices (np.ndarray, (n, 2)): the vertices we want to find avg on
-
-    Returns:
-        idx (int): index of the furthest point
+    """Return the index of the vertex furthest away along a direction in the list of vertices
+
+    Parameters
+    ----------
+    vertices : np.ndarray
+        the vertices we want to find index on
+    d : np.ndarray
+        direction
+
+    Returns
+    -------
+    int
+        index of the furthest point
     """
     return np.argmax(vertices.dot(d))
 
 
 @njit(cache=True)
 def support(vertices1, vertices2, d):
-    """
-    Minkowski sum support function for GJK
-
-    Args:
-        vertices1 (np.ndarray, (n, 2)): vertices of the first body
-        vertices2 (np.ndarray, (n, 2)): vertices of the second body
-        d (np.ndarray, (2, )): direction to find the support along
-
-    Returns:
-        support (np.ndarray, (n, 2)): Minkowski sum
+    """Minkowski sum support function for GJK
+
+    Parameters
+    ----------
+    vertices1 : np.ndarray
+        vertices of the first body
+    vertices2 : np.ndarray
+        vertices of the second body
+    d : np.ndarray
+        direction to find the support along
+
+    Returns
+    -------
+    np.ndarray
+        Minkowski sum
     """
     i = indexOfFurthestPoint(vertices1, d)
     j = indexOfFurthestPoint(vertices2, -d)
@@ -83,15 +106,19 @@ def support(vertices1, vertices2, d):
 
 @njit(cache=True)
 def collision(vertices1, vertices2):
-    """
-    GJK test to see whether two bodies overlap
-
-    Args:
-        vertices1 (np.ndarray, (n, 2)): vertices of the first body
-        vertices2 (np.ndarray, (n, 2)): vertices of the second body
-
-    Returns:
-        overlap (boolean): True if two bodies collide
+    """GJK test to see whether two bodies overlap
+
+    Parameters
+    ----------
+    vertices1 : np.ndarray
+        vertices of the first body
+    vertices2 : np.ndarray
+        vertices of the second body
+
+    Returns
+    -------
+    boolean
+        True if two bodies collide
     """
     index = 0
     simplex = np.empty((3, 2))
@@ -155,15 +182,19 @@ def collision(vertices1, vertices2):
 
 @njit(cache=True)
 def collision_multiple(vertices):
-    """
-    Check pair-wise collisions for all provided vertices
-
-    Args:
-        vertices (np.ndarray (num_bodies, 4, 2)): all vertices for checking pair-wise collision
-
-    Returns:
-        collisions (np.ndarray (num_vertices, )): whether each body is in collision
-        collision_idx (np.ndarray (num_vertices, )): which index of other body is each index's body is in collision, -1 if not in collision
+    """Check pair-wise collisions for all provided vertices
+
+    Parameters
+    ----------
+    vertices : np.ndarray
+        all vertices for checking pair-wise collision
+
+    Returns
+    -------
+    collisions : np.ndarray
+        whether each body is in collision
+    collision_idx : np.ndarray
+        which index of other body is each index's body is in collision, -1 if not in collision
     """
     collisions = np.zeros((vertices.shape[0],))
     collision_idx = -1 * np.ones((vertices.shape[0],))
@@ -184,21 +215,19 @@ def collision_multiple(vertices):
     return collisions, collision_idx
 
 
-"""
-Utility functions for getting vertices by pose and shape
-"""
-
-
 @njit(cache=True)
 def get_trmtx(pose):
-    """
-    Get transformation matrix of vehicle frame -> global frame
+    """Get transformation matrix of vehicle frame -> global frame
 
-    Args:
-        pose (np.ndarray (3, )): current pose of the vehicle
+    Parameters
+    ----------
+    pose : np.ndarray
+        current pose of the vehicle
 
-    return:
-        H (np.ndarray (4, 4)): transformation matrix
+    Returns
+    -------
+    np.ndarray
+        transformation matrix
     """
     x = pose[0]
     y = pose[1]
@@ -218,16 +247,21 @@ def get_trmtx(pose):
 
 @njit(cache=True)
 def get_vertices(pose, length, width):
-    """
-    Utility function to return vertices of the car body given pose and size
-
-    Args:
-        pose (np.ndarray, (3, )): current world coordinate pose of the vehicle
-        length (float): car length
-        width (float): car width
-
-    Returns:
-        vertices (np.ndarray, (4, 2)): corner vertices of the vehicle body
+    """Utility function to return vertices of the car body given pose and size
+
+    Parameters
+    ----------
+    pose : np.ndarray
+        current world coordinate pose of the vehicle
+    length : float
+        car length
+    width : float
+        car width
+
+    Returns
+    -------
+    np.ndarray
+        corner vertices of the vehicle body
     """
     H = get_trmtx(pose)
     rl = H.dot(np.asarray([[-length / 2], [width / 2], [0.0], [1.0]])).flatten()
diff --git a/gym/f110_gym/envs/dynamic_models.py b/gym/f110_gym/envs/dynamic_models.py
index 112126ec..57ac1b42 100644
--- a/gym/f110_gym/envs/dynamic_models.py
+++ b/gym/f110_gym/envs/dynamic_models.py
@@ -6,11 +6,37 @@
 
 
 class DynamicModel(Enum):
+    """Enum for specifying dynamic models
+
+    KS: 1 (kinematic single track)
+
+    ST: 2 (single track)
+
+    """
+
     KS = 1  # Kinematic Single Track
     ST = 2  # Single Track
 
     @staticmethod
     def from_string(model: str):
+        """Set dynamic models from string.
+
+        Parameters
+        ----------
+        model : str
+            dynamic model type
+
+        Returns
+        -------
+        int
+            dynamic model type
+
+
+        Raises
+        ------
+        ValueError
+            Unknown model type
+        """
         if model == "ks":
             warnings.warn(
                 "Chosen model is KS. This is different from previous versions of the gym."
@@ -22,6 +48,23 @@ def from_string(model: str):
             raise ValueError(f"Unknown model type {model}")
 
     def get_initial_state(self, pose=None):
+        """Set initial dynamic state based on model
+
+        Parameters
+        ----------
+        pose : np.ndarray, optional
+            initial pose, by default None
+
+        Returns
+        -------
+        np.ndarray
+            initial state
+
+        Raises
+        ------
+        ValueError
+            Unknown model type
+        """
         # initialize zero state
         if self == DynamicModel.KS:
             # state is [x, y, steer_angle, vel, yaw_angle]
@@ -41,6 +84,18 @@ def get_initial_state(self, pose=None):
 
     @property
     def f_dynamics(self):
+        """property, returns dynamics function
+
+        Returns
+        -------
+        Callable
+            dynamic function
+
+        Raises
+        ------
+        ValueError
+            Unknown model type
+        """
         if self == DynamicModel.KS:
             return vehicle_dynamics_ks
         elif self == DynamicModel.ST:
@@ -51,16 +106,21 @@ def f_dynamics(self):
 
 @njit(cache=True)
 def upper_accel_limit(vel, a_max, v_switch):
-    """
-    Upper acceleration limit, adjusts the acceleration based on constraints
-
-        Args:
-            vel (float): current velocity of the vehicle
-            a_max (float): maximum allowed acceleration, symmetrical
-            v_switch (float): switching velocity (velocity at which the acceleration is no longer able to create wheel spin)
-
-        Returns:
-            positive_accel_limit (float): adjusted acceleration
+    """Upper acceleration limit, adjusts the acceleration based on constraints
+
+    Parameters
+    ----------
+    vel : float
+        current velocity of the vehicle
+    a_max : float
+        maximum allowed acceleration, symmetrical
+    v_switch : float
+        switching velocity (velocity at which the acceleration is no longer able to create wheel spin)
+
+    Returns
+    -------
+    float
+        adjusted acceleration
     """
     if vel > v_switch:
         pos_limit = a_max * (v_switch / vel)
@@ -72,21 +132,28 @@ def upper_accel_limit(vel, a_max, v_switch):
 
 @njit(cache=True)
 def accl_constraints(vel, a_long_d, v_switch, a_max, v_min, v_max):
+    """Acceleration constraints, adjusts the acceleration based on constraints
+
+    Parameters
+    ----------
+    vel : float
+        current velocity of the vehicle
+    a_long_d : float
+        unconstrained desired acceleration in the direction of travel.
+    v_switch : float
+        switching velocity (velocity at which the acceleration is no longer able to create wheel spin)
+    a_max : float
+        maximum allowed acceleration, symmetrical
+    v_min : float
+        minimum allowed velocity
+    v_max : float
+        maximum allowed velocity
+
+    Returns
+    -------
+    float
+        adjusted acceleration
     """
-    Acceleration constraints, adjusts the acceleration based on constraints
-
-        Args:
-            vel (float): current velocity of the vehicle
-            a_long_d (float): unconstrained desired acceleration in the direction of travel.
-            v_switch (float): switching velocity (velocity at which the acceleration is no longer able to create wheel spin)
-            a_max (float): maximum allowed acceleration, symmetrical
-            v_min (float): minimum allowed velocity
-            v_max (float): maximum allowed velocity
-
-        Returns:
-            accl (float): adjusted acceleration
-    """
-
     uac = upper_accel_limit(vel, a_max, v_switch)
 
     if (vel <= v_min and a_long_d <= 0) or (vel >= v_max and a_long_d >= 0):
@@ -105,21 +172,28 @@ def accl_constraints(vel, a_long_d, v_switch, a_max, v_min, v_max):
 def steering_constraint(
     steering_angle, steering_velocity, s_min, s_max, sv_min, sv_max
 ):
+    """Steering constraints, adjusts the steering velocity based on constraints
+
+    Parameters
+    ----------
+    steering_angle : float
+        current steering_angle of the vehicle
+    steering_velocity : float
+        unconstraint desired steering_velocity
+    s_min : float
+        minimum steering angle
+    s_max : float
+        maximum steering angle
+    sv_min : float
+        minimum steering velocity
+    sv_max : float
+        maximum steering velocity
+
+    Returns
+    -------
+    float
+        adjusted steering velocity
     """
-    Steering constraints, adjusts the steering velocity based on constraints
-
-        Args:
-            steering_angle (float): current steering_angle of the vehicle
-            steering_velocity (float): unconstraint desired steering_velocity
-            s_min (float): minimum steering angle
-            s_max (float): maximum steering angle
-            sv_min (float): minimum steering velocity
-            sv_max (float): maximum steering velocity
-
-        Returns:
-            steering_velocity (float): adjusted steering velocity
-    """
-
     # constraint steering velocity
     if (steering_angle <= s_min and steering_velocity <= 0) or (
         steering_angle >= s_max and steering_velocity >= 0
@@ -154,39 +228,59 @@ def vehicle_dynamics_ks(
     v_min,
     v_max,
 ):
-    """
-    Single Track Kinematic Vehicle Dynamics.
+    """Kinematic Single Track Vehicle Dynamics.
     Follows https://gitlab.lrz.de/tum-cps/commonroad-vehicle-models/-/blob/master/vehicleModels_commonRoad.pdf, section 5
 
-        Args:
-            x (numpy.ndarray (5, )): vehicle state vector (x0, x1, x2, x3, x4)
-                x0: x position in global coordinates
-                x1: y position in global coordinates
-                x2: steering angle of front wheels
-                x3: velocity in x direction
-                x4: yaw angle
-            u (numpy.ndarray (2, )): control input vector (u1, u2)
-                u1: steering angle velocity of front wheels
-                u2: longitudinal acceleration
-            mu (float): friction coefficient
-            C_Sf (float): cornering stiffness of front wheels
-            C_Sr (float): cornering stiffness of rear wheels
-            lf (float): distance from center of gravity to front axle
-            lr (float): distance from center of gravity to rear axle
-            h (float): height of center of gravity
-            m (float): mass of vehicle
-            I (float): moment of inertia of vehicle, about Z axis
-            s_min (float): minimum steering angle
-            s_max (float): maximum steering angle
-            sv_min (float): minimum steering velocity
-            sv_max (float): maximum steering velocity
-            v_switch (float): velocity above which the acceleration is no longer able to create wheel slip
-            a_max (float): maximum allowed acceleration
-            v_min (float): minimum allowed velocity
-            v_max (float): maximum allowed velocity
-
-        Returns:
-            f (numpy.ndarray): right hand side of differential equations
+    Parameters
+    ----------
+    x : np.ndarray
+        vehicle state vector (x0, x1, x2, x3, x4)
+            x0: x position in global coordinates
+            x1: y position in global coordinates
+            x2: steering angle of front wheels
+            x3: velocity in x direction
+            x4: yaw angle
+    u_init : np.ndarray
+        control input vector (u1, u2)
+            u1: steering angle velocity of front wheels
+            u2: longitudinal acceleration
+    mu : float
+        friction coefficient
+    C_Sf : float
+        cornering stiffness of front wheels
+    C_Sr : float
+        cornering stiffness of rear wheels
+    lf : float
+        distance from center of gravity to front axle
+    lr : float
+        distance from center of gravity to rear axle
+    h : float
+        height of center of gravity
+    m : float
+        mass of vehicle
+    I : float
+        moment of inertia of vehicle, about Z axis
+    s_min : float
+        minimum steering angle
+    s_max : float
+        maximum steering angle
+    sv_min : float
+        minimum steering velocity
+    sv_max : float
+        maximum steering velocity
+    v_switch : float
+        velocity above which the acceleration is no longer able to create wheel slip
+    a_max : float
+        maximum allowed acceleration
+    v_min : float
+        minimum allowed velocity
+    v_max : float
+        maximum allowed velocity
+
+    Returns
+    -------
+    np.ndarray
+        right hand side of differential equations
     """
     # Controls
     X = x[0]
@@ -245,41 +339,61 @@ def vehicle_dynamics_st(
     v_min,
     v_max,
 ):
-    """
-    Single Track Vehicle Dynamics.
+    """Single Track Vehicle Dynamics.
     From https://gitlab.lrz.de/tum-cps/commonroad-vehicle-models/-/blob/master/vehicleModels_commonRoad.pdf, section 7
 
-        Args:
-            x (numpy.ndarray (7, )): vehicle state vector (x0, x1, x2, x3, x4, x5, x6)
-                x0: x position in global coordinates
-                x1: y position in global coordinates
-                x2: steering angle of front wheels
-                x3: velocity in x direction
-                x4:yaw angle
-                x5: yaw rate
-                x6: slip angle at vehicle center
-            u (numpy.ndarray (2, )): control input vector (u1, u2)
-                u1: steering angle velocity of front wheels
-                u2: longitudinal acceleration
-            mu (float): friction coefficient
-            C_Sf (float): cornering stiffness of front wheels
-            C_Sr (float): cornering stiffness of rear wheels
-            lf (float): distance from center of gravity to front axle
-            lr (float): distance from center of gravity to rear axle
-            h (float): height of center of gravity
-            m (float): mass of vehicle
-            I (float): moment of inertia of vehicle, about Z axis
-            s_min (float): minimum steering angle
-            s_max (float): maximum steering angle
-            sv_min (float): minimum steering velocity
-            sv_max (float): maximum steering velocity
-            v_switch (float): velocity above which the acceleration is no longer able to create wheel spin
-            a_max (float): maximum allowed acceleration
-            v_min (float): minimum allowed velocity
-            v_max (float): maximum allowed velocity
-
-        Returns:
-            f (numpy.ndarray): right hand side of differential equations
+    Parameters
+    ----------
+    x : np.ndarray
+        vehicle state vector (x0, x1, x2, x3, x4, x5, x6)
+            x0: x position in global coordinates
+            x1: y position in global coordinates
+            x2: steering angle of front wheels
+            x3: velocity in x direction
+            x4:yaw angle
+            x5: yaw rate
+            x6: slip angle at vehicle center
+    u_init : np.ndarray
+        control input vector (u1, u2)
+            u1: steering angle velocity of front wheels
+            u2: longitudinal acceleration
+    mu : float
+        friction coefficient
+    C_Sf : float
+        cornering stiffness of front wheels
+    C_Sr : float
+        cornering stiffness of rear wheels
+    lf : float
+        distance from center of gravity to front axle
+    lr : float
+        distance from center of gravity to rear axle
+    h : float
+        height of center of gravity
+    m : float
+        mass of vehicle
+    I : float
+        moment of inertia of vehicle, about Z axis
+    s_min : float
+        minimum steering angle
+    s_max : float
+        maximum steering angle
+    sv_min : float
+        minimum steering velocity
+    sv_max : float
+        maximum steering velocity
+    v_switch : float
+        velocity above which the acceleration is no longer able to create wheel slip
+    a_max : float
+        maximum allowed acceleration
+    v_min : float
+        minimum allowed velocity
+    v_max : float
+        maximum allowed velocity
+
+    Returns
+    -------
+    np.ndarray
+        right hand side of differential equations
     """
     # States
     X = x[0]
@@ -374,6 +488,22 @@ def vehicle_dynamics_st(
 
 @njit(cache=True)
 def pid_steer(steer, current_steer, max_sv):
+    """PID control for steering angle to steering velocity
+
+    Parameters
+    ----------
+    steer : float
+        requested steering angle
+    current_steer : float
+        current steering angle
+    max_sv : float
+        maximum steering velocity
+
+    Returns
+    -------
+    float
+        steering velocity
+    """
     # steering
     steer_diff = steer - current_steer
     if np.fabs(steer_diff) > 1e-4:
@@ -386,16 +516,25 @@ def pid_steer(steer, current_steer, max_sv):
 
 @njit(cache=True)
 def pid_accl(speed, current_speed, max_a, max_v, min_v):
-    """
-    Basic controller for speed/steer -> accl./steer vel.
-
-        Args:
-            speed (float): desired input speed
-            steer (float): desired input steering angle
-
-        Returns:
-            accl (float): desired input acceleration
-            sv (float): desired input steering velocity
+    """PID control for speed to acceleration
+
+    Parameters
+    ----------
+    speed : float
+        requested speed
+    current_speed : float
+        current speed
+    max_a : float
+        maximum acceleration
+    max_v : float
+        maximum velocity
+    min_v : float
+        minimum velocity
+
+    Returns
+    -------
+    float
+        acceleration
     """
     # accl
     vel_diff = speed - current_speed
diff --git a/gym/f110_gym/envs/f110_env.py b/gym/f110_gym/envs/f110_env.py
index 17af4c06..5008e125 100644
--- a/gym/f110_gym/envs/f110_env.py
+++ b/gym/f110_gym/envs/f110_env.py
@@ -1,8 +1,7 @@
 # gym imports
 import gymnasium as gym
 
-from f110_gym.envs.action import (CarAction,
-                                  from_single_to_multi_action_space)
+from f110_gym.envs.action import CarAction, from_single_to_multi_action_space
 from f110_gym.envs.integrator import IntegratorType
 from f110_gym.envs.rendering import make_renderer
 
@@ -15,64 +14,50 @@
 from f110_gym.envs.track import Track
 from f110_gym.envs.utils import deep_update
 
-
 # others
 import numpy as np
-"""
-    OpenAI gym environment for F1TENTH
-
-    Env should be initialized by calling gym.make('f110_gym:f110-v0', **kwargs)
-
-    Args:
-        kwargs:
-            seed (int, default=12345): seed for random state and reproducibility
-            map (str, default='vegas'): name of the map used for the environment.
-
-            params (dict, default={'mu': 1.0489, 'C_Sf':, 'C_Sr':, 'lf': 0.15875, 'lr': 0.17145, 'h': 0.074, 'm': 3.74, 'I': 0.04712, 's_min': -0.4189, 's_max': 0.4189, 'sv_min': -3.2, 'sv_max': 3.2, 'v_switch':7.319, 'a_max': 9.51, 'v_min':-5.0, 'v_max': 20.0, 'width': 0.31, 'length': 0.58}): dictionary of vehicle parameters.
-            mu: surface friction coefficient
-            C_Sf: Cornering stiffness coefficient, front
-            C_Sr: Cornering stiffness coefficient, rear
-            lf: Distance from center of gravity to front axle
-            lr: Distance from center of gravity to rear axle
-            h: Height of center of gravity
-            m: Total mass of the vehicle
-            I: Moment of inertial of the entire vehicle about the z axis
-            s_min: Minimum steering angle constraint
-            s_max: Maximum steering angle constraint
-            sv_min: Minimum steering velocity constraint
-            sv_max: Maximum steering velocity constraint
-            v_switch: Switching velocity (velocity at which the acceleration is no longer able to create wheel spin)
-            a_max: Maximum longitudinal acceleration
-            v_min: Minimum longitudinal velocity
-            v_max: Maximum longitudinal velocity
-            width: width of the vehicle in meters
-            length: length of the vehicle in meters
-
-            num_agents (int, default=2): number of agents in the environment
-
-            timestep (float, default=0.01): physics timestep
-
-            ego_idx (int, default=0): ego's index in list of agents
-    """
+
 
 class F110Env(gym.Env):
     """
-    OpenAI gym environment for F1TENTH
+    Gymnasium environment for F1TENTH
+
+    Parameters
+    ----------
+    config : dict, optional
+        parameter dict, by default None
+    render_mode : _type_, optional
+        rendering mode, by default None
+
+    Examples
+    --------
+    Using default params:
+
+    >>> import gymnasium as gym
+    >>> env = gym.make("f1tenth_gym:f1tenth-v0")
+    >>> obs, info = env.reset()
+    >>> while not done:
+    >>>     action = env.action_space.sample()
+    >>>     obs, step_reward, done, truncated, info = env.step(action)
+    >>> env.close()
+
+    Using custom params:
+
+    >>> import gymnasium as gym
+    >>> env = gym.make("f1tenth_gym:f1tenth-v0")
+    >>> new_conf = {"params": {"mu": 1.5}}
+    >>> env.configure(config=new_conf)
+
+    Using different maps:
+
+    >>> import gymnasium as gym
+    >>> env = gym.make("f1tenth_gym:f1tenth-v0", config={"map": "Shanghai",})
     """
 
     # NOTE: change matadata with default rendering-modes, add definition of render_fps
     metadata = {"render_modes": ["human", "human_fast", "rgb_array"], "render_fps": 100}
 
     def __init__(self, config: dict = None, render_mode=None, **kwargs):
-        """_summary_
-
-        Parameters
-        ----------
-        config : dict, optional
-            _description_, by default None
-        render_mode : _type_, optional
-            _description_, by default None
-        """
         super().__init__()
 
         # Configuration
@@ -175,7 +160,41 @@ def __init__(self, config: dict = None, render_mode=None, **kwargs):
 
     @classmethod
     def default_config(cls) -> dict:
-        """Default environment configuration.
+        """Default environment configuration:
+
+        >>> {
+        >>>     "seed": 12345,
+        >>>     "map": "Spielberg",
+        >>>     "params": {
+        >>>         "mu": 1.0489,
+        >>>         "C_Sf": 4.718,
+        >>>         "C_Sr": 5.4562,
+        >>>         "lf": 0.15875,
+        >>>         "lr": 0.17145,
+        >>>         "h": 0.074,
+        >>>         "m": 3.74,
+        >>>         "I": 0.04712,
+        >>>         "s_min": -0.4189,
+        >>>         "s_max": 0.4189,
+        >>>         "sv_min": -3.2,
+        >>>         "sv_max": 3.2,
+        >>>         "v_switch": 7.319,
+        >>>         "a_max": 9.51,
+        >>>         "v_min": -5.0,
+        >>>         "v_max": 20.0,
+        >>>         "width": 0.31,
+        >>>         "length": 0.58,
+        >>>     },
+        >>>     "num_agents": 2,
+        >>>     "timestep": 0.01,
+        >>>     "ego_idx": 0,
+        >>>     "integrator": "rk4",
+        >>>     "model": "st",
+        >>>     "control_input": ["speed", "steering_angle"],
+        >>>     "observation_config": {"type": None},
+        >>>     "reset_config": {"type": None},
+        >>> }
+
 
         Can be overloaded in environment implementations, or by calling configure().
 
@@ -242,7 +261,9 @@ def configure(self, config: dict) -> None:
 
             if hasattr(self, "action_space"):
                 # if some parameters changed, recompute action space
-                self.action_type = CarAction(self.config["control_input"], params=self.params)
+                self.action_type = CarAction(
+                    self.config["control_input"], params=self.params
+                )
                 self.action_space = from_single_to_multi_action_space(
                     self.action_type.space, self.num_agents
                 )
@@ -300,19 +321,24 @@ def _update_state(self):
         self.collisions = self.sim.collisions
 
     def step(self, action):
-        """
-        Step function for the gym env
+        """Step function for the gym env
 
-        Args:
-            action (np.ndarray(num_agents, 2))
+        Parameters
+        ----------
+        action : np.ndarray
+            control input for all agents
 
-        Returns:
-            obs (dict): observation of the current step
-            reward (float, default=self.timestep): step reward, currently is physics timestep
-            done (bool): if the simulation is done
-            info (dict): auxillary information dictionary
+        Returns
+        -------
+        obs : dict
+            observation of the current step
+        reward : float
+            step reward, by default self.timestep
+        done : bool
+            if the simulation is done
+        info : dict
+            auxillary information dictionary
         """
-
         # call simulation step
         self.sim.step(action)
 
@@ -347,18 +373,25 @@ def step(self, action):
         return obs, reward, done, truncated, info
 
     def reset(self, seed=None, options=None):
-        """
-        Reset the gym environment by given poses
+        """Reset the gym environment by given poses
 
-        Args:
-            seed: random seed for the reset
-            options: dictionary of options for the reset containing initial poses of the agents
+        Parameters
+        ----------
+        seed : int, optional
+            random seed for the reset, by default None
+        options : dict, optional
+            dictionary of options for the reset containing initial poses of the agents, by default None
 
-        Returns:
-            obs (dict): observation of the current step
-            reward (float, default=self.timestep): step reward, currently is physics timestep
-            done (bool): if the simulation is done
-            info (dict): auxillary information dictionary
+        Returns
+        -------
+        obs : dict
+            observation of the current step
+        reward : float
+            step reward, by default self.timestep
+        done : bool
+            if the simulation is done
+        info : dict
+            auxillary information dictionary
         """
         if seed is not None:
             np.random.seed(seed=self.seed)
@@ -409,52 +442,46 @@ def reset(self, seed=None, options=None):
         return obs, info
 
     def update_map(self, map_name: str):
-        """
-        Updates the map used by simulation
-
-        Args:
-            map_name (str): name of the map
+        """Updates the map used by simulation
 
-        Returns:
-            None
+        Parameters
+        ----------
+        map_name : str
+            name of the map
         """
         self.sim.set_map(map_name)
         self.track = Track.from_track_name(map_name)
 
     def update_params(self, params, index=-1):
-        """
-        Updates the parameters used by simulation for vehicles
-
-        Args:
-            params (dict): dictionary of parameters
-            index (int, default=-1): if >= 0 then only update a specific agent's params
+        """Updates the parameters used by simulation for vehicles
 
-        Returns:
-            None
+        Parameters
+        ----------
+        params : dict
+            dictionary of parameters
+        index : int, optional
+            if >= 0 then only update a specific agent's params, by default -1
         """
         self.sim.update_params(params, agent_idx=index)
 
     def add_render_callback(self, callback_func):
-        """
-        Add extra drawing function to call during rendering.
+        """Add extra drawing function to call during rendering.
 
-        Args:
-            callback_func (function (EnvRenderer) -> None): custom function to called during render()
+        Parameters
+        ----------
+        callback_func : Callable(EnvRenderer) -> None
+            custom function to called during render()
         """
-
         self.renderer.add_renderer_callback(callback_func)
 
     def render(self, mode="human"):
-        """
-        Renders the environment with pyglet. Use mouse scroll in the window to zoom in/out, use mouse click drag to pan. Shows the agents, the map, current fps (bottom left corner), and the race information near as text.
+        """Renders the environment with pygame
 
-        Args:
-            mode (str, default='human'): rendering mode, currently supports:
-                'human': slowed down rendering such that the env is rendered in a way that sim time elapsed is close to real time elapsed
-                'human_fast': render as fast as possible
+        Parameters
+        ----------
+        mode : str, optional
+            rendering mode, by default "human"
 
-        Returns:
-            None
         """
         # NOTE: separate render (manage render-mode) from render_frame (actual rendering with pyglet)
 
diff --git a/gym/f110_gym/envs/integrator.py b/gym/f110_gym/envs/integrator.py
index bfc796be..a597a010 100644
--- a/gym/f110_gym/envs/integrator.py
+++ b/gym/f110_gym/envs/integrator.py
@@ -3,11 +3,35 @@
 
 
 class IntegratorType(Enum):
+    """Integrator enum
+
+    RK4: 1
+
+    Euler: 2
+    """
+
     RK4 = 1
     Euler = 2
 
     @staticmethod
     def from_string(integrator: str):
+        """Set integrator by string
+
+        Parameters
+        ----------
+        integrator : str
+            integrator type
+
+        Returns
+        -------
+        RK4Integrator | EulerIntegrator
+            integrator object
+
+        Raises
+        ------
+        ValueError
+            Unknown integrator type
+        """
         if integrator == "rk4":
             return RK4Integrator()
         elif integrator == "euler":
@@ -17,24 +41,74 @@ def from_string(integrator: str):
 
 
 class Integrator:
+    """Integrator abstract class"""
+
     def __init__(self) -> None:
         self._integrator_type = None
 
     @abstractmethod
     def integrate(self, f, x, u, dt, params):
+        """Integrate dynamics
+
+        Parameters
+        ----------
+        f : np.ndarray
+            RHS of ODE
+        x : np.ndarray
+            state
+        u : np.ndarray
+            control input
+        dt : float
+            sampling time
+        params : dict
+            parameter dictionary
+
+        Raises
+        ------
+        NotImplementedError
+        """
         raise NotImplementedError("integrate method not implemented")
 
     @property
     def type(self) -> str:
+        """property, integrator type
+
+        Returns
+        -------
+        str
+            type
+        """
         return self._integrator_type
 
 
 class RK4Integrator(Integrator):
+    """Runge Kutta fourth order integrator"""
+
     def __init__(self) -> None:
         super().__init__()
         self._integrator_type = "rk4"
 
     def integrate(self, f, x, u, dt, params):
+        """Integrate dynamics
+
+        Parameters
+        ----------
+        f : np.ndarray
+            RHS of ODE
+        x : np.ndarray
+            state
+        u : np.ndarray
+            control input
+        dt : float
+            sampling time
+        params : dict
+            parameter dictionary
+
+        Returns
+        -------
+        np.ndarray:
+            integrated state
+        """
         k1 = f(
             x,
             u,
@@ -131,11 +205,33 @@ def integrate(self, f, x, u, dt, params):
 
 
 class EulerIntegrator(Integrator):
+    """Euler integrator"""
+
     def __init__(self) -> None:
         super().__init__()
         self._integrator_type = "euler"
 
     def integrate(self, f, x, u, dt, params):
+        """Integrate dynamics
+
+        Parameters
+        ----------
+        f : np.ndarray
+            RHS of ODE
+        x : np.ndarray
+            state
+        u : np.ndarray
+            control input
+        dt : float
+            sampling time
+        params : dict
+            parameter dictionary
+
+        Returns
+        -------
+        np.ndarray:
+            integrated state
+        """
         dstate = f(
             x,
             u,
diff --git a/gym/f110_gym/envs/laser_models.py b/gym/f110_gym/envs/laser_models.py
index 7cd0420b..92ddcebd 100644
--- a/gym/f110_gym/envs/laser_models.py
+++ b/gym/f110_gym/envs/laser_models.py
@@ -8,16 +8,20 @@
 
 
 def get_dt(bitmap, resolution):
-    """
-    Distance transformation, returns the distance matrix from the input bitmap.
+    """Distance transformation, returns the distance matrix from the input bitmap.
     Uses scipy.ndimage, cannot be JITted.
 
-        Args:
-            bitmap (numpy.ndarray, (n, m)): input binary bitmap of the environment, where 0 is obstacles, and 255 (or anything > 0) is freespace
-            resolution (float): resolution of the input bitmap (m/cell)
-
-        Returns:
-            dt (numpy.ndarray, (n, m)): output distance matrix, where each cell has the corresponding distance (in meters) to the closest obstacle
+    Parameters
+    ----------
+    bitmap : np.ndarray
+        input binary bitmap of the environment, where 0 is obstacles, and 255 (or anything > 0) is freespace
+    resolution : float
+        resolution of the input bitmap (m/cell)
+
+    Returns
+    -------
+    np.ndarray
+        output distance matrix, where each cell has the corresponding distance (in meters) to the closest obstacle
     """
     dt = resolution * edt(bitmap)
     return dt
@@ -25,18 +29,35 @@ def get_dt(bitmap, resolution):
 
 @njit(cache=True)
 def xy_2_rc(x, y, orig_x, orig_y, orig_c, orig_s, height, width, resolution):
-    """
-    Translate (x, y) coordinate into (r, c) in the matrix
-
-        Args:
-            x (float): coordinate in x (m)
-            y (float): coordinate in y (m)
-            orig_x (float): x coordinate of the map origin (m)
-            orig_y (float): y coordinate of the map origin (m)
-
-        Returns:
-            r (int): row number in the transform matrix of the given point
-            c (int): column number in the transform matrix of the given point
+    """Translate (x, y) coordinate into (r, c) in the matrix
+
+    Parameters
+    ----------
+    x : float
+        coordinate in x (m)
+    y : float
+        coordinate in y (m)
+    orig_x : float
+        x coordinate of the map origin (m)
+    orig_y : float
+        y coordinate of the map origin (m)
+    orig_c : float
+        cosine of the map origin rotation
+    orig_s : float
+        sine of the map origin rotation
+    height : int
+        height of map (pixel)
+    width : int
+        width of map (pixel)
+    resolution : float
+        resolution of the input bitmap (m/cell)
+
+    Returns
+    -------
+    r : int
+        row index
+    c : int
+        column index
     """
     # translation
     x_trans = x - orig_x
@@ -66,17 +87,35 @@ def xy_2_rc(x, y, orig_x, orig_y, orig_c, orig_s, height, width, resolution):
 def distance_transform(
     x, y, orig_x, orig_y, orig_c, orig_s, height, width, resolution, dt
 ):
-    """
-    Look up corresponding distance in the distance matrix
-
-        Args:
-            x (float): x coordinate of the lookup point
-            y (float): y coordinate of the lookup point
-            orig_x (float): x coordinate of the map origin (m)
-            orig_y (float): y coordinate of the map origin (m)
-
-        Returns:
-            distance (float): corresponding shortest distance to obstacle in meters
+    """Look up corresponding distance in the distance transform matrix
+
+    Parameters
+    ----------
+    x : _type_
+        x coordinate of the lookup point
+    y : _type_
+        y coordinate of the lookup point
+    orig_x : _type_
+        x coordinate of the map origin (m)
+    orig_y : _type_
+        y coordinate of the map origin (m)
+    orig_c : _type_
+        cosine of the map origin rotation
+    orig_s : _type_
+        sine of the map origin rotation
+    height : _type_
+        map height
+    width : _type_
+        map width
+    resolution : _type_
+        resolution of the input bitmap (m/cell)
+    dt : _type_
+        distance transform matrix
+
+    Returns
+    -------
+    float
+        distance to closest obstacle from the look up point
     """
     r, c = xy_2_rc(x, y, orig_x, orig_y, orig_c, orig_s, height, width, resolution)
     distance = dt[r, c]
@@ -101,21 +140,46 @@ def trace_ray(
     dt,
     max_range,
 ):
+    """Find the length of a specific ray at a specific scan angle theta.
+
+    Parameters
+    ----------
+    x : float
+        current x coordinate of the ego (scan) frame
+    y : float
+        current y coordinate of the ego (scan) frame
+    theta_index : int
+        current index of the scan beam in the scan range
+    sines : np.ndarray
+        pre-calculated sines of the angle array
+    cosines : np.ndarray
+        pre-calculated cosines of the angle array
+    eps : float
+        tolerance to stop ray tracing
+    orig_x : _type_
+        x coordinate of the map origin (m)
+    orig_y : _type_
+        y coordinate of the map origin (m)
+    orig_c : _type_
+        cosine of the map origin rotation
+    orig_s : _type_
+        sine of the map origin rotation
+    height : _type_
+        map height
+    width : _type_
+        map width
+    resolution : _type_
+        resolution of the input bitmap (m/cell)
+    dt : _type_
+        distance transform matrix
+    max_range : float
+        maximum range for laser scan rays
+
+    Returns
+    -------
+    float
+        ray distance
     """
-    Find the length of a specific ray at a specific scan angle theta
-    Purely math calculation and loops, should be JITted.
-
-        Args:
-            x (float): current x coordinate of the ego (scan) frame
-            y (float): current y coordinate of the ego (scan) frame
-            theta_index(int): current index of the scan beam in the scan range
-            sines (numpy.ndarray (n, )): pre-calculated sines of the angle array
-            cosines (numpy.ndarray (n, )): pre-calculated cosines ...
-
-        Returns:
-            total_distance (float): the distance to first obstacle on the current scan beam
-    """
-
     # int casting, and index precal trigs
     theta_index_ = int(theta_index)
     s = sines[theta_index_]
@@ -166,18 +230,49 @@ def get_scan(
     dt,
     max_range,
 ):
-    """
-    Perform the scan for each discretized angle of each beam of the laser, loop heavy, should be JITted
-
-        Args:
-            pose (numpy.ndarray(3, )): current pose of the scan frame in the map
-            theta_dis (int): number of steps to discretize the angles between 0 and 2pi for look up
-            fov (float): field of view of the laser scan
-            num_beams (int): number of beams in the scan
-            theta_index_increment (float): increment between angle indices after discretization
-
-        Returns:
-            scan (numpy.ndarray(n, )): resulting laser scan at the pose, n=num_beams
+    """Perform the scan for each discretized angle of each beam of the laser
+
+    Parameters
+    ----------
+    pose : np.ndarray
+        current pose of the scan frame in the map
+    theta_dis : int
+        number of steps to discretize the angles between 0 and 2pi for look up
+    fov : float
+        field of view of the laser scan
+    num_beams : int
+        number of beams in the scan
+    theta_index_increment : float
+        increment between angle indices after discretization
+    sines : np.ndarray
+        pre-calculated sines of the angle array
+    cosines : np.ndarray
+        pre-calculated cosines of the angle array
+    eps : float
+        tolerance to stop ray tracing
+    orig_x : _type_
+        x coordinate of the map origin (m)
+    orig_y : _type_
+        y coordinate of the map origin (m)
+    orig_c : _type_
+        cosine of the map origin rotation
+    orig_s : _type_
+        sine of the map origin rotation
+    height : _type_
+        map height
+    width : _type_
+        map width
+    resolution : _type_
+        resolution of the input bitmap (m/cell)
+    dt : _type_
+        distance transform matrix
+    max_range : float
+        maximum range for laser scan rays
+
+    Returns
+    -------
+    np.ndarray
+        resulting laser scan at the pose
     """
     # empty scan array init
     scan = np.empty((num_beams,))
@@ -223,20 +318,27 @@ def get_scan(
 
 @njit(cache=True, error_model="numpy")
 def check_ttc_jit(scan, vel, scan_angles, cosines, side_distances, ttc_thresh):
-    """
-    Checks the iTTC of each beam in a scan for collision with environment
-
-    Args:
-        scan (np.ndarray(num_beams, )): current scan to check
-        vel (float): current velocity
-        scan_angles (np.ndarray(num_beams, )): precomped angles of each beam
-        cosines (np.ndarray(num_beams, )): precomped cosines of the scan angles
-        side_distances (np.ndarray(num_beams, )): precomped distances at each beam from the laser to the sides of the car
-        ttc_thresh (float): threshold for iTTC for collision
-
-    Returns:
-        in_collision (bool): whether vehicle is in collision with environment
-        collision_angle (float): at which angle the collision happened
+    """Checks the iTTC of each beam in a scan for collision with environment
+
+    Parameters
+    ----------
+    scan : np.ndarray
+        current scan to check
+    vel : float
+        current velocity
+    scan_angles : np.ndarray
+        precomped angles of each beam
+    cosines : np.ndarray
+        precomped cosines of the scan angles
+    side_distances : np.ndarray
+        precomped distances at each beam from the laser to the sides of the car
+    ttc_thresh : float
+        threshold for iTTC for collision
+
+    Returns
+    -------
+    bool
+        if scan indicates collision
     """
     in_collision = False
     if vel != 0.0:
@@ -255,28 +357,40 @@ def check_ttc_jit(scan, vel, scan_angles, cosines, side_distances, ttc_thresh):
 
 @njit(cache=True)
 def cross(v1, v2):
-    """
-    Cross product of two 2-vectors
-
-    Args:
-        v1, v2 (np.ndarray(2, )): input vectors
-
-    Returns:
-        crossproduct (float): cross product
+    """Cross product of two 2-vectors
+
+    Parameters
+    ----------
+    v1 : np.ndarray
+        input vector 1
+    v2 : np.ndarray
+        input vector 2
+
+    Returns
+    -------
+    float
+        cross product
     """
     return v1[0] * v2[1] - v1[1] * v2[0]
 
 
 @njit(cache=True)
 def are_collinear(pt_a, pt_b, pt_c):
-    """
-    Checks if three points are collinear in 2D
-
-    Args:
-        pt_a, pt_b, pt_c (np.ndarray(2, )): points to check in 2D
-
-    Returns:
-        col (bool): whether three points are collinear
+    """Checks if three points are collinear in 2D
+
+    Parameters
+    ----------
+    pt_a : np.ndarray
+        point to check in 2D
+    pt_b : np.ndarray
+        point to check in 2D
+    pt_c : np.ndarray
+        point to check in 2D
+
+    Returns
+    -------
+    bool
+        whether three points are collinear
     """
     tol = 1e-8
     ba = pt_b - pt_a
@@ -287,16 +401,23 @@ def are_collinear(pt_a, pt_b, pt_c):
 
 @njit(cache=True)
 def get_range(pose, beam_theta, va, vb):
-    """
-    Get the distance at a beam angle to the vector formed by two of the four vertices of a vehicle
-
-    Args:
-        pose (np.ndarray(3, )): pose of the scanning vehicle
-        beam_theta (float): angle of the current beam (world frame)
-        va, vb (np.ndarray(2, )): the two vertices forming an edge
-
-    Returns:
-        distance (float): smallest distance at beam theta from scanning pose to edge
+    """Get the distance at a beam angle to the vector formed by two of the four vertices of a vehicle
+
+    Parameters
+    ----------
+    pose : np.ndarray
+        pose of the scanning vehicle
+    beam_theta : float
+        angle of the current beam (world frame)
+    va : np.ndarray
+        the two vertices forming an edge
+    vb : np.ndarray
+        the two vertices forming an edge
+
+    Returns
+    -------
+    float
+        smallest distance at beam theta from scanning pose to edge
     """
     o = pose[0:2]
     v1 = o - va
@@ -321,13 +442,23 @@ def get_range(pose, beam_theta, va, vb):
 
 @njit(cache=True)
 def get_blocked_view_indices(pose, vertices, scan_angles):
-    """
-    Get the indices of the start and end of blocked fov in scans by another vehicle
-
-    Args:
-        pose (np.ndarray(3, )): pose of the scanning vehicle
-        vertices (np.ndarray(4, 2)): four vertices of a vehicle pose
-        scan_angles (np.ndarray(num_beams, )): corresponding beam angles
+    """Get the indices of the start and end of blocked fov in scans by another vehicle
+
+    Parameters
+    ----------
+    pose : np.ndarray
+        pose of the scanning vehicle
+    vertices : np.ndarray
+        four vertices of a vehicle pose
+    scan_angles : np.ndarray
+        corresponding beam angles
+
+    Returns
+    -------
+    min_ind : int
+        smaller index of blocked portion of laser scan array
+    max_ind : int
+        larger index of blocked portion of laser scan array
     """
     # find four vectors formed by pose and 4 vertices:
     vecs = vertices - pose[:2]
@@ -359,17 +490,23 @@ def get_blocked_view_indices(pose, vertices, scan_angles):
 
 @njit(cache=True)
 def ray_cast(pose, scan, scan_angles, vertices):
-    """
-    Modify a scan by ray casting onto another agent's four vertices
-
-    Args:
-        pose (np.ndarray(3, )): pose of the vehicle performing scan
-        scan (np.ndarray(num_beams, )): original scan to modify
-        scan_angles (np.ndarray(num_beams, )): corresponding beam angles
-        vertices (np.ndarray(4, 2)): four vertices of a vehicle pose
-
-    Returns:
-        new_scan (np.ndarray(num_beams, )): modified scan
+    """Modify a scan by ray casting onto another agent's four vertices
+
+    Parameters
+    ----------
+    pose : np.ndarray
+        pose of the vehicle performing scan
+    scan : np.ndarray
+        original scan to modify
+    scan_angles : np.ndarray
+        corresponding beam angles
+    vertices : np.ndarray
+        four vertices of a vehicle pose
+
+    Returns
+    -------
+    np.ndarray
+        modified scan
     """
     # pad vertices so loops around
     looped_vertices = np.empty((5, 2))
@@ -394,15 +531,20 @@ def ray_cast(pose, scan, scan_angles, vertices):
 
 
 class ScanSimulator2D(object):
-    """
-    2D LIDAR scan simulator class
-
-    Init params:
-        num_beams (int): number of beams in the scan
-        fov (float): field of view of the laser scan
-        eps (float, default=0.0001): ray tracing iteration termination condition
-        theta_dis (int, default=2000): number of steps to discretize the angles between 0 and 2pi for look up
-        max_range (float, default=30.0): maximum range of the laser
+    """2D LIDAR scan simulator class
+
+    Parameters
+    ----------
+    num_beams : int
+        number of beams in the scan
+    fov : float
+        field of view of the laser scan
+    eps : float, optional
+        ray tracing iteration termination condition, by default 0.0001
+    theta_dis : int, optional
+        number of steps to discretize the angles between 0 and 2pi for look up, by default 2000
+    max_range : float, optional
+        maximum range of the laser, by default 30.0
     """
 
     def __init__(self, num_beams, fov, eps=0.0001, theta_dis=2000, max_range=30.0):
@@ -432,14 +574,17 @@ def __init__(self, num_beams, fov, eps=0.0001, theta_dis=2000, max_range=30.0):
         self.cosines = np.cos(theta_arr)
 
     def set_map(self, map: str | Track):
-        """
-        Set the bitmap of the scan simulator by path
+        """Set the bitmap of the scan simulator by path
 
-            Args:
-                map (str | Track): path to the map file, or Track object
+        Parameters
+        ----------
+        map : str | Track
+            path to the map file, or Track object
 
-            Returns:
-                flag (bool): if image reading and loading is successful
+        Returns
+        -------
+        bool
+            if image reading and loading is successful
         """
         if isinstance(map, str):
             self.track = Track.from_track_name(map)
@@ -466,21 +611,27 @@ def set_map(self, map: str | Track):
         return True
 
     def scan(self, pose, rng, std_dev=0.01):
+        """Perform simulated 2D scan by pose on the given map
+
+        Parameters
+        ----------
+        pose : np.ndarray
+            pose of the scan frame (x, y, theta)
+        rng : np.random.Generator
+            random number generator to use for whitenoise in scan
+        std_dev : float, optional
+            standard deviation of the generated whitenoise in the scan, by default 0.01
+
+        Returns
+        -------
+        np.ndarray
+            data array of the laserscan
+
+        Raises
+        ------
+        ValueError
+            Map is not set for scan simulator.
         """
-        Perform simulated 2D scan by pose on the given map
-
-            Args:
-                pose (numpy.ndarray (3, )): pose of the scan frame (x, y, theta)
-                rng (numpy.random.Generator): random number generator to use for whitenoise in scan, or None
-                std_dev (float, default=0.01): standard deviation of the generated whitenoise in the scan
-
-            Returns:
-                scan (numpy.ndarray (n, )): data array of the laserscan, n=num_beams
-
-            Raises:
-                ValueError: when scan is called before a map is set
-        """
-
         if self.map_height is None:
             raise ValueError("Map is not set for scan simulator.")
 
@@ -511,12 +662,20 @@ def scan(self, pose, rng, std_dev=0.01):
         return scan
 
     def get_increment(self):
+        """Return angle increment between scans
+
+        Returns
+        -------
+        float
+            angle increment
+        """        
         return self.angle_increment
 
 
 """
 Unit test for the 2D scan simulator class
 Author: Hongrui Zheng
+TODO: do we still need these?
 
 Test cases:
     1, 2: Comparison between generated scan array of the new simulator and the legacy C++ simulator, generated data used, MSE is used as the metric
diff --git a/gym/f110_gym/envs/observation.py b/gym/f110_gym/envs/observation.py
index 263f8260..ae3a706a 100644
--- a/gym/f110_gym/envs/observation.py
+++ b/gym/f110_gym/envs/observation.py
@@ -7,31 +7,62 @@
 
 
 class Observation:
-    """
-    Abstract class for observations. Each observation must implement the space and observe methods.
+    """Observation abstract class
 
-    :param env: The environment.
-    :param vehicle_id: The id of the observer vehicle.
-    :param kwargs: Additional arguments.
+    Parameters
+    ----------
+    env : gym.Env
+        Gymnasium environment
     """
-
     def __init__(self, env):
         self.env = env
 
     @abstractmethod
     def space(self):
+        """Observation space
+
+        Raises
+        ------
+        NotImplementedError
+        """        
         raise NotImplementedError()
 
     @abstractmethod
     def observe(self):
+        """Observe
+
+        Raises
+        ------
+        NotImplementedError
+        """        
         raise NotImplementedError()
 
 
 class OriginalObservation(Observation):
+    """Original Observation class
+
+    Parameters
+    ----------
+    env : gym.Env
+        Gymnasium environment
+    """
     def __init__(self, env):
         super().__init__(env)
 
     def space(self):
+        """Return observation space
+
+        Original Observations is a dict with keys:
+
+        >>> [ego_idx, scans, poses_x, poses_y, poses_theta, linear_vels_x, linear_vels_y, ang_vels_z, collisions, lap_times, lap_counts]
+
+        Each value is a list of observations corresponding to the agents.
+
+        Returns
+        -------
+        gym.spaces.Space
+            observation space
+        """
         num_agents = self.env.num_agents
         scan_size = self.env.sim.agents[0].scan_simulator.num_beams
         scan_range = (
@@ -99,6 +130,13 @@ def space(self):
         return obs_space
 
     def observe(self):
+        """Observe function
+
+        Returns
+        -------
+        dict
+            Current observation
+        """        
         # state indices
         xi, yi, deltai, vxi, yawi, yaw_ratei, slipi = range(
             7
@@ -152,11 +190,31 @@ def observe(self):
 
 
 class FeaturesObservation(Observation):
+    """Feature Observation class
+
+    Parameters
+    ----------
+    env : gym.Env
+        Gymnasium environment
+    """
     def __init__(self, env, features: List[str]):
         super().__init__(env)
         self.features = features
 
     def space(self):
+        """Return observation space
+
+        Feature Observations is a dict with agent_ids as keys
+        
+        And each value is a dict with keys:
+
+        >>> [scan, pose_x, pose_y, pose_theta, linear_vel_x, linear_vel_y, ang_vel_z, delta, beta, collision, lap_time, lap_count]
+
+        Returns
+        -------
+        gym.spaces.Space
+            observation space
+        """
         scan_size = self.env.sim.agents[0].scan_simulator.num_beams
         scan_range = self.env.sim.agents[0].scan_simulator.max_range
         large_num = 1e30  # large number to avoid unbounded obs space (ie., low=-inf or high=inf)
@@ -209,6 +267,13 @@ def space(self):
         return obs_space
 
     def observe(self):
+        """Observe function
+
+        Returns
+        -------
+        dict
+            Current observation
+        """        
         # state indices
         xi, yi, deltai, vxi, yawi, yaw_ratei, slipi = range(
             7
@@ -264,6 +329,25 @@ def observe(self):
 
 
 def observation_factory(env, type: str | None, **kwargs) -> Observation:
+    """Decides which observation type and keys to include based on type string
+
+    Parameters
+    ----------
+    env : gym.Env
+        Gymnasium environment
+    type : str | None
+        Observation type
+
+    Returns
+    -------
+    Observation
+        Observation type
+
+    Raises
+    ------
+    ValueError
+        Invalid observation type
+    """    
     type = type or "original"
 
     if type == "original":
diff --git a/gym/f110_gym/envs/utils.py b/gym/f110_gym/envs/utils.py
index 4bed0ca9..cd82e3aa 100644
--- a/gym/f110_gym/envs/utils.py
+++ b/gym/f110_gym/envs/utils.py
@@ -6,9 +6,17 @@
 def deep_update(
     mapping: Dict[KeyType, Any], *updating_mappings: Dict[KeyType, Any]
 ) -> Dict[KeyType, Any]:
-    """
-    Dictionary deep update for nested dictionaries from pydantic:
-    https://github.com/pydantic/pydantic/blob/fd2991fe6a73819b48c906e3c3274e8e47d0f761/pydantic/utils.py#L200
+    """Recursive update of dict from pydantic: https://github.com/pydantic/pydantic/blob/fd2991fe6a73819b48c906e3c3274e8e47d0f761/pydantic/utils.py#L200
+
+    Parameters
+    ----------
+    mapping : Dict[KeyType, Any]
+        mapping of original dict
+
+    Returns
+    -------
+    Dict[KeyType, Any]
+        updated dict
     """
     updated_mapping = mapping.copy()
     for updating_mapping in updating_mappings:

From 350bacee4588fe215083ce3f05c49980a4d63132 Mon Sep 17 00:00:00 2001
From: Luigi Berducci <luigi.berd@gmail.com>
Date: Fri, 15 Mar 2024 15:17:17 +0100
Subject: [PATCH 17/24] update basic usage, update random-track gen, add files
 for usages, remove unused reproduce.rst

---
 docs/src/assets/random_trackgen.png | Bin 0 -> 146499 bytes
 docs/src/usage/actions.rst          |   6 ++
 docs/src/usage/basic_usage.rst      |  80 ++++++++------
 docs/src/usage/customized_usage.rst | 159 +++-------------------------
 docs/src/usage/dynamics.rst         |   6 ++
 docs/src/usage/index.rst            |   6 +-
 docs/src/usage/observations.rst     |   6 ++
 docs/src/usage/rendering.rst        |   6 ++
 docs/src/usage/reproduce.rst        |   6 --
 docs/src/usage/rewards.rst          |   6 ++
 examples/random_trackgen.py         |  22 ++--
 11 files changed, 114 insertions(+), 189 deletions(-)
 create mode 100644 docs/src/assets/random_trackgen.png
 create mode 100644 docs/src/usage/actions.rst
 create mode 100644 docs/src/usage/dynamics.rst
 create mode 100644 docs/src/usage/observations.rst
 create mode 100644 docs/src/usage/rendering.rst
 delete mode 100644 docs/src/usage/reproduce.rst
 create mode 100644 docs/src/usage/rewards.rst

diff --git a/docs/src/assets/random_trackgen.png b/docs/src/assets/random_trackgen.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a89d70deeff617b6b7e1856154b6018e6fd6b4c
GIT binary patch
literal 146499
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

literal 0
HcmV?d00001

diff --git a/docs/src/usage/actions.rst b/docs/src/usage/actions.rst
new file mode 100644
index 00000000..ae996b82
--- /dev/null
+++ b/docs/src/usage/actions.rst
@@ -0,0 +1,6 @@
+.. _actions:
+
+Actions
+=====================
+
+Work in progress on actions.
\ No newline at end of file
diff --git a/docs/src/usage/basic_usage.rst b/docs/src/usage/basic_usage.rst
index 9fbdf928..c1b327cc 100644
--- a/docs/src/usage/basic_usage.rst
+++ b/docs/src/usage/basic_usage.rst
@@ -5,46 +5,66 @@ Basic Usage Example
 
 The environment can work out of the box without too much customization.
 
-A gym env could be instantiated without any extra arguments. By default, it spawns two agents in the Vegas (IROS 2020) map. You can find the image of the map at  ``gym/f110_gym/envs/maps/vegas.png``. At instantiation, the index of the ego agent in the list of agents is 0.
+A gym env could be instantiated without any extra arguments using the ``gym.make()`` function.
+By default, it spawns two agents in the Spielberg racetrack.
 
-The agents can be reset by calling the ``reset()`` method using a numpy ndarray of size ``(num_agents, 2)``, where each row represents an agent, and the columns are the ``(x, y)`` coordinate of each agent.
-
-The ``reset()`` and ``step()`` method returns:
-    - An *observation* dictionary
-    - A *step reward*, which in the current release is the physics timestep used.
-    - A *done* boolean indicator, flips to true when either a collision happens or the ego agent finishes 2 laps.
-    - An *info* dictionary. Empty in the current release.
-
-The action taken by the ``step()`` function is a numpy ndarray of size ``(num_agents, 2)``, where each row represents an agent's action (indices corresponds to the list of agents), and the columns are control inputs (steering angle, velocity).
+The simulation can be reset by calling the ``reset()`` method
+and step forward in time by calling the ``step()`` method with a joint action for all agents.
 
 A working example can be found in ``examples/waypoint_follow.py``.
 
-The following pseudo code provides a skeleton for creating a simulation loop.
 
-.. code:: python
+Usage
+-----
 
-    import gym
-    import numpy as np
-    from your_custom_policy import planner # the policy/motion planner that you create
+.. code:: python
 
-    # instantiating the environment
-    racecar_env = gym.make('f110_gym:f110-v0')
-    obs, step_reward, done, info = racecar_env.reset(np.array([[0., 0., 0.], # pose of ego
-                                                               [2., 0., 0.]])) # pose of 2nd agent
-    # instantiating your policy
-    planner = planner()
+    import gymnasium as gym
 
-    # simulation loop
-    lap_time = 0.
+    env = gym.make("f110_gym:f110-v0", render_mode="human")
+    obs, infos = env.reset()
 
-    # loops when env not done
     while not done:
-        # get action based on the observation
-        actions = planner.plan(obs)
-
-        # stepping through the environment
+        # sample random action
+        actions = env.action_space.sample()
+        # step simulation
         obs, step_reward, done, info = racecar_env.step(actions)
+        env.render()
+
+Default configuration
+---------------------
 
-        lap_time += step_reward
+.. code:: python
 
-For a more in-depth example that provides more customization to the environment, see :ref:`custom_usage`.
+    {
+	"seed": 12345,
+	"map": "Spielberg",
+	"params": {
+		"mu": 1.0489,
+		"C_Sf": 4.718,
+		"C_Sr": 5.4562,
+		"lf": 0.15875,
+		"lr": 0.17145,
+		"h": 0.074,
+		"m": 3.74,
+		"I": 0.04712,
+		"s_min": -0.4189,
+		"s_max": 0.4189,
+		"sv_min": -3.2,
+		"sv_max": 3.2,
+		"v_switch": 7.319,
+		"a_max": 9.51,
+		"v_min": -5.0,
+		"v_max": 20.0,
+		"width": 0.31,
+		"length": 0.58,
+	},
+	"num_agents": 2,
+	"timestep": 0.01,
+	"ego_idx": 0,
+	"integrator": "rk4",
+	"model": "st",
+	"control_input": ["speed", "steering_angle"],
+	"observation_config": {"type": None},
+	"reset_config": {"type": None},
+    }
diff --git a/docs/src/usage/customized_usage.rst b/docs/src/usage/customized_usage.rst
index 7025de86..cd6bec02 100644
--- a/docs/src/usage/customized_usage.rst
+++ b/docs/src/usage/customized_usage.rst
@@ -9,157 +9,32 @@ The environment also provides options for customization.
 
 Custom Map
 ------------
+Work in progress on how to add a custom map.
 
-The environment uses a convention that is similar to the ROS map convention. A map for the environment is created by two files: a ``yaml`` file containing the metadata of the map, and a single channel black and white image that represents the map, where black pixels are obstacles and white pixels are free space.
+Random Track Generator
+-----------------------
 
-Map Metadata File (yaml)
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+The script `examples/random_trackgen.py` allows to generate random tracks.
 
-Only the ``resolution`` and the ``origin`` fields in the yaml files are used by the environment, and only the first two coordinates in the ``origin`` field are used. The unit of the resolution is *m/pixel*. The x and y (first two) numbers in the origin field are used to determine where the origin of the map frame is. Note that these two numbers follow the ROS convention. They represent the **bottom left** corner of the map image's coordinate in the world.
+To use it, the following dependencies are required:
 
-Map Image File
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+::
 
-A black and white, single channel image is used to represent free space and obstacles. For example, the Vegas map looks like this:
+	pip install cv2
+	pip install numpy
+	pip install shapely
+	pip install matplotlib
 
-.. image:: ../gym/f110_gym/envs/maps/vegas.png
-    :width: 300
-    :align: center
 
-Using a Custom Map
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+The script can be run by specifying `seed`, number of maps to generate `n_maps` and the output directory `output_dir`.
 
-The environment can be instantiated with arguments for a custom map. First, you can place your custom map files (.yaml and the image file) in the same directory, for example ``/your/path/to/map.yaml`` and ``/your/path/to/map.png``. Then you can create the environment with the absolute path to these files like this:
+For example, to generate 3 random maps and store them in the directory `custom_maps`:
 
-.. code:: python
+::
 
-    env = gym.make('f110_gym:f110-v0',
-                   map='/your/path/to/map',
-                   map_ext='.png')
+	python examples/random_trackgen.py --seed 42 --n-maps 3 --outdir custom_maps
 
-The ``map`` argument takes the absolute path to the map files **without** any extensions, and the ``map_ext`` argument takes the extension to the map image file. **Note** that it is assumed that the two files are in the **same directory**, and have the **same filename** (not including the extensions, for example map.png and map.yaml)
 
-Random Track Generator (Beta)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-A random track generator derived from the OpenAI CarRacing environment is also provided in ``gym/f110_gym/unittest/random_trackgen.py``. Note that it requires extra dependencies. ``OpenCV`` is required for image manipulation and IO operations, ``shapely`` and ``matplotlib`` are required for image generation. For OpenCV, you can follow the tutorial at https://docs.opencv.org/master/df/d65/tutorial_table_of_content_introduction.html for installation on different platforms. Then you can install ``shapely`` and ``matplotlib`` with: ``$ pip3 install shapely matplotlib``.
-
-After you've installed the dependencies, you can run the track generator by:
-
-.. code:: bash
-
-    $ python3 random_trackgen.py --seed 12345 --num_maps 1
-
-where the ``--seed`` argument (int, default 123) is for reproducibility, and the ``--num_maps`` argument is for the number of maps you want to generate. By default, the script will create two directories in ``unittest``: ``unittest/maps`` and ``unittest/centerline``. The former contains all the map metadata and map image files, and the latter contains a csv file of the (x, y) coordinates of the points on the centerline of the track.
-
-An example of a randomly generated track:
-
-.. image:: ../examples/example_map.png
-    :width: 300
-    :align: center
-
-Multiple Agents
------------------
-
-You can instantiate an environment with any number of agents (default is 2). For example:
-
-.. code:: python
-    
-    env = gym.make('f110_gym:f110-v0',
-                   num_agents=3)
-
-This will create an environment with 3 agents. Note that your call to the ``reset()`` and ``step()`` function will have to change accordingly:
-
-.. code:: python
-
-    _, _, _, _ = env.reset(np.array([[ego_x, ego_y],
-                                     [opp1_x, opp1_y],
-                                     [opp2_x, opp2_y]]))
-    _, _, _, _ = env.step(np.array([[ego_steer, ego_speed],
-                                     [opp1_steer, opp1_speed],
-                                     [opp2_steer, opp2_speed]]))
-
-Note that performance of the environment will start to degrade as more and more agents are added.
-
-Changing Parameters in Vehicle Dynamics
-------------------------------------------
-
-The vehicle dynamic model used in the environment is the Single-Track Model from https://gitlab.lrz.de/tum-cps/commonroad-vehicle-models/.
-
-You can change the default paramters (identified on concrete floor with the default configuration F1TENTH vehicle) used in the environment in two ways.
-
-1. You could instantiate the environment with a parameter dictionary:
-
-.. code:: python
-
-    params_dict = {'mu': 1.0489,
-                   'C_Sf': 4.718,
-                   'C_Sr': 5.4562,
-                   'lf': 0.15875,
-                   'lr': 0.17145,
-                   'h': 0.074,
-                   'm': 3.74,
-                   'I': 0.04712,
-                   's_min': -0.4189,
-                   's_max': 0.4189,
-                   'sv_min': -3.2,
-                   'sv_max': 3.2,
-                   'v_switch':7.319,
-                   'a_max': 9.51,
-                   'v_min':-5.0,
-                   'v_max': 20.0,
-                   'width': 0.31,
-                   'length': 0.58}
-    env = gym.make('f110_gym:f110-v0', params=params_dict)
-
-2. Or you could update the parameters of a specific vehicle in the list of vehicles (or all vehicles):
-
-.. code:: python
-        
-    # env with default params and 2 agents
-    env = gym.make('f110_gym:f110-v0')
-
-    # new params
-    params_dict = {'mu': 1.0489,
-                   'C_Sf': 4.718,
-                   'C_Sr': 5.4562,
-                   'lf': 0.15875,
-                   'lr': 0.17145,
-                   'h': 0.074,
-                   'm': 3.74,
-                   'I': 0.04712,
-                   's_min': -0.4189,
-                   's_max': 0.4189,
-                   'sv_min': -3.2,
-                   'sv_max': 3.2,
-                   'v_switch':7.319,
-                   'a_max': 9.51,
-                   'v_min':-5.0,
-                   'v_max': 20.0,
-                   'width': 0.31,
-                   'length': 0.58}
-
-    # update params of only the 2nd vehicles
-    env.update_params(params_dict, index=1)
-
-    # update params of all vehicles
-    env.update_params(params_dict)
-
-The dynamic model's physical parameters are:
-    - **mu**: surface friction coefficient *[-]*
-    - **C_Sf**: Cornering stiffness coefficient, front *[1/rad]*
-    - **C_Sr**: Cornering stiffness coefficient, rear *[1/rad]*
-    - **lf**: Distance from center of gravity to front axle *[m]*
-    - **lr**: Distance from center of gravity to rear axle *[m]*
-    - **h**: Height of center of gravity *[m]*
-    - **m**: Total mass of the vehicle *[kg]*
-    - **I**: Moment of inertial of the entire vehicle about the z axis *[kgm^2]*
-    - **s_min**: Minimum steering angle constraint *[rad]*
-    - **s_max**: Maximum steering angle constraint *[rad]*
-    - **sv_min**: Minimum steering velocity constraint *[rad/s]*
-    - **sv_max**: Maximum steering velocity constraint *[rad/s]*
-    - **v_switch**: Switching velocity (velocity at which the acceleration is no longer able to create wheel spin) *[m/s]*
-    - **a_max**: Maximum longitudinal acceleration *[m/s^2]*
-    - **v_min**: Minimum longitudinal velocity *[m/s]*
-    - **v_max**: Maximum longitudinal velocity *[m/s]*
-    - **width**: width of the vehicle *[m]*
-    - **length**: length of the vehicle *[m]*
+.. image:: ../../../../src/assets/random_trackgen.png
+	:width: 800
+	:align: center
\ No newline at end of file
diff --git a/docs/src/usage/dynamics.rst b/docs/src/usage/dynamics.rst
new file mode 100644
index 00000000..ca9894e0
--- /dev/null
+++ b/docs/src/usage/dynamics.rst
@@ -0,0 +1,6 @@
+_dynamics:
+
+Dynamics
+=====================
+
+Work in progress.
\ No newline at end of file
diff --git a/docs/src/usage/index.rst b/docs/src/usage/index.rst
index 904c3971..421bea7f 100644
--- a/docs/src/usage/index.rst
+++ b/docs/src/usage/index.rst
@@ -6,5 +6,9 @@ Usage
   :maxdepth: 2
 
   basic_usage
+  actions
+  observations
+  rewards
+  dynamics
   customized_usage
-  reproduce
\ No newline at end of file
+  rendering
\ No newline at end of file
diff --git a/docs/src/usage/observations.rst b/docs/src/usage/observations.rst
new file mode 100644
index 00000000..f85a7598
--- /dev/null
+++ b/docs/src/usage/observations.rst
@@ -0,0 +1,6 @@
+.. _observations:
+
+Observations
+=====================
+
+Work in progress.
\ No newline at end of file
diff --git a/docs/src/usage/rendering.rst b/docs/src/usage/rendering.rst
new file mode 100644
index 00000000..942f19ed
--- /dev/null
+++ b/docs/src/usage/rendering.rst
@@ -0,0 +1,6 @@
+.. _rendering:
+
+Rendering
+=====================
+
+Work in progress.
\ No newline at end of file
diff --git a/docs/src/usage/reproduce.rst b/docs/src/usage/reproduce.rst
deleted file mode 100644
index 2d70229e..00000000
--- a/docs/src/usage/reproduce.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-.. _reproduce:
-
-Reproducing experiments when using the environment
-====================================================
-
-COMING SOON...
\ No newline at end of file
diff --git a/docs/src/usage/rewards.rst b/docs/src/usage/rewards.rst
new file mode 100644
index 00000000..660fe3f8
--- /dev/null
+++ b/docs/src/usage/rewards.rst
@@ -0,0 +1,6 @@
+.. _rewards:
+
+Rewards
+=====================
+
+Work in progress.
\ No newline at end of file
diff --git a/examples/random_trackgen.py b/examples/random_trackgen.py
index 6179492a..ee24f959 100644
--- a/examples/random_trackgen.py
+++ b/examples/random_trackgen.py
@@ -49,15 +49,17 @@ def main(args):
     outdir.mkdir(parents=True, exist_ok=True)
 
     for i in range(n_maps):
-        try:
-            print(f"[info] creating track {i}")
-            track, track_int, track_ext = create_track()
-            convert_track(track, track_int, track_ext, i, outdir)
-            print(f"[info] saved track {i} in {outdir}/")
-        except Exception as _:  # noqa: F841
-            print("[error] failed to create track. Retrying...")
-            continue
-        print()
+        while True:
+            try:
+                print(f"[info] creating track {i}")
+                track, track_int, track_ext = create_track()
+                convert_track(track, track_int, track_ext, i, outdir)
+                print(f"[info] saved track {i} in {outdir}/")
+                break
+            except Exception as _:  # noqa: F841
+                print("[error] failed to create track. Retrying...")
+                continue
+            print()
 
 
 def create_track():
@@ -250,7 +252,7 @@ def convert_track(track, track_int, track_ext, track_id, outdir):
         "--seed", type=int, default=123, help="The seed for the numpy rng"
     )
     parser.add_argument(
-        "--n_maps", type=int, default=3, help="Number of maps to create"
+        "--n-maps", type=int, default=3, help="Number of maps to create"
     )
     parser.add_argument(
         "--outdir", type=pathlib.Path, default="./maps", help="Out directory"

From 7f42364b1d378feef1ff7e0fd071a202d69f1b13 Mon Sep 17 00:00:00 2001
From: Luigi Berducci <luigi.berd@gmail.com>
Date: Fri, 22 Mar 2024 11:31:57 +0100
Subject: [PATCH 18/24] add docs for actions/observations, refactor basic usage
 and rename stuff

---
 docs/src/usage/actions.rst      | 42 +++++++++++++++++++++++++++++++-
 docs/src/usage/basic_usage.rst  |  2 +-
 docs/src/usage/index.rst        | 39 +++++++++++++++++++++++++++---
 docs/src/usage/observations.rst | 43 ++++++++++++++++++++++++++++++++-
 4 files changed, 119 insertions(+), 7 deletions(-)

diff --git a/docs/src/usage/actions.rst b/docs/src/usage/actions.rst
index ae996b82..42666087 100644
--- a/docs/src/usage/actions.rst
+++ b/docs/src/usage/actions.rst
@@ -3,4 +3,44 @@
 Actions
 =====================
 
-Work in progress on actions.
\ No newline at end of file
+Several **types of actions** for longitudinal and lateral control are available in every track.
+
+Lateral actions:
+
+- `steering_angle`: the action sets the target steering angle of the vehicle in `rad`, which is then converted to steering speed.
+
+- `steering_speed`: the action directly sets the steering speed of the vehicle in `rad/s`.
+
+Longitudinal actions:
+
+- `speed`: the action sets the target speed of the vehicle in `m/s`, which is then converted to acceleration.
+
+- `accl`: the action directly sets the vehicle acceleration in `m/s^2`.
+
+**Note:** All the agents will have the same observation type.
+
+Actions Configuration
+---------------------
+The environment comes with a *default* action type, which can be changed using the environment configuration.
+
+Actions can be configured at the environment creation:
+
+.. code:: python
+
+    import gymnasium as gym
+
+    env = gym.make(
+		"f110_gym:f110-v0",
+		config={
+			"control_input": ["accl", "steering_speed"]
+		})
+    obs, infos = env.reset()
+or after the environment creation:
+
+.. code:: python
+
+    import gymnasium as gym
+
+    env = gym.make("f110_gym:f110-v0")
+	env.configure({"control_input": ["speed", "steering_angle"]})
+    obs, infos = env.reset()
\ No newline at end of file
diff --git a/docs/src/usage/basic_usage.rst b/docs/src/usage/basic_usage.rst
index c1b327cc..448bf8ec 100644
--- a/docs/src/usage/basic_usage.rst
+++ b/docs/src/usage/basic_usage.rst
@@ -1,6 +1,6 @@
 .. _basic_usage:
 
-Basic Usage Example
+Basic example
 =====================
 
 The environment can work out of the box without too much customization.
diff --git a/docs/src/usage/index.rst b/docs/src/usage/index.rst
index 421bea7f..b6c8783a 100644
--- a/docs/src/usage/index.rst
+++ b/docs/src/usage/index.rst
@@ -1,13 +1,44 @@
-Usage
+Getting Started
 ==============
 
+Making an environment
+----------------------
+
+This is a quick example of how to make a simple environment:
+
+.. code:: python
+
+    import gymnasium as gym
+
+    env = gym.make("f110_gym:f110-v0", render_mode="human")
+    obs, infos = env.reset()
+
+    while not done:
+        # sample random action
+        actions = env.action_space.sample()
+        # step simulation
+        obs, step_reward, done, info = racecar_env.step(actions)
+        env.render()
+
+Configuration
+-------------
+
+Here is the list of configurable options for the environment:
+- Track
+- Observations
+- Actions
+- Rewards
+- Dynamics
+- Rendering
+- Extra tools
+
 .. toctree::
-  :caption: Usage
-  :maxdepth: 2
+  :caption: Getting started
+  :maxdepth: 1
 
   basic_usage
-  actions
   observations
+  actions
   rewards
   dynamics
   customized_usage
diff --git a/docs/src/usage/observations.rst b/docs/src/usage/observations.rst
index f85a7598..dc340a40 100644
--- a/docs/src/usage/observations.rst
+++ b/docs/src/usage/observations.rst
@@ -3,4 +3,45 @@
 Observations
 =====================
 
-Work in progress.
\ No newline at end of file
+For the environment, several **types of observations** can be used.
+
+- `original` : Original observation from the old simulator. This is default for compatibility.
+- `kinematic_state` : Kinematic state observation, which includes `pose_x, pose_y, delta, linear_vel_x, pose_theta`.
+- `dynamic_state` : Dynamic state observation, which includes `pose_x, pose_y, delta, linear_vel_x, pose_theta, ang_vel_z, beta`.
+- `features` : Customisable observation, which includes all the features defined in the `features` argument.
+
+**Note:** All the agents will have the same observation type.
+
+Observations Configuration
+--------------------------
+Each environment comes with a *default* observation,
+which can be changed or customised using environment configurations.
+
+Observations can be configured at the environment creation:
+
+.. code:: python
+
+    import gymnasium as gym
+
+    env = gym.make(
+		"f110_gym:f110-v0",
+		config={
+			"observation_config": {
+				"type": "features",
+				"features": ["linear_vel_x", "scan"]
+			},
+		})
+    obs, infos = env.reset()
+or after the environment creation:
+
+.. code:: python
+
+    import gymnasium as gym
+
+    env = gym.make("f110_gym:f110-v0")
+    env.configure({
+		"observation_config": {
+			"type": "features",
+			"features": ["linear_vel_x", "scan"]}
+		})
+    obs, infos = env.reset()
\ No newline at end of file

From d7984e9e6537892041d4cd8bedf5f0e5741ccaa1 Mon Sep 17 00:00:00 2001
From: "Berducci, Luigi" <luigi.berducci@tuwien.ac.at>
Date: Fri, 5 Apr 2024 09:52:09 +0200
Subject: [PATCH 19/24] refactoring configure example

---
 docs/src/usage/actions.rst | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/docs/src/usage/actions.rst b/docs/src/usage/actions.rst
index 42666087..c3b17c21 100644
--- a/docs/src/usage/actions.rst
+++ b/docs/src/usage/actions.rst
@@ -42,5 +42,7 @@ or after the environment creation:
     import gymnasium as gym
 
     env = gym.make("f110_gym:f110-v0")
-	env.configure({"control_input": ["speed", "steering_angle"]})
+    env.configure({
+        "control_input": ["speed", "steering_angle"]
+    })
     obs, infos = env.reset()
\ No newline at end of file

From 7ed8521b578cc16cc3a3a66902df7882813e2b30 Mon Sep 17 00:00:00 2001
From: "Berducci, Luigi" <luigi.berducci@tuwien.ac.at>
Date: Fri, 5 Apr 2024 09:52:38 +0200
Subject: [PATCH 20/24] documentation reward, add custom-reward example

---
 docs/src/usage/rewards.rst        | 79 ++++++++++++++++++++++++++++++-
 examples/example_custom_reward.py | 68 ++++++++++++++++++++++++++
 2 files changed, 146 insertions(+), 1 deletion(-)
 create mode 100644 examples/example_custom_reward.py

diff --git a/docs/src/usage/rewards.rst b/docs/src/usage/rewards.rst
index 660fe3f8..72822275 100644
--- a/docs/src/usage/rewards.rst
+++ b/docs/src/usage/rewards.rst
@@ -3,4 +3,81 @@
 Rewards
 =====================
 
-Work in progress.
\ No newline at end of file
+We define a simple reward to encourage the agent to stay alive, giving a reward of `timestep` at each timestep.
+
+.. note::
+    The choice of an appropriate reward is a challenging problem, beyond the scope of this project.
+    To avoid over-specifying every aspect of the expected racing behaviour in the reward
+    (*e.g., safe distance, speed, minimising jerk*),
+    we preferred to specify the simplest reward function possible.
+    This allows the user to experiment with different reward functions based on their specific requirements.
+
+
+Custom Reward Function
+------------------------------
+
+For custom reward functions, we invite the user to use
+`gymnasium.wrappers <https://gymnasium.farama.org/tutorials/gymnasium_basics/implementing_custom_wrappers/>`_.
+
+For example, the following code snippet shows how to implement a custom reward function that
+linearly combines a speed reward and a crash penalty:
+
+.. code:: python
+
+    class RacingRewardWrapper(Wrapper):
+
+    def __init__(
+        self,
+        env: gymnasium.Env,
+        agent_id: str,
+        reward_speed_weight: float,
+        reward_crash_weight: float,
+    ):
+        super().__init__(env)
+        self.agent_id = agent_id
+        self.reward_speed_weight = reward_speed_weight
+        self.reward_crash_weight = reward_crash_weight
+
+        # sanity checks on the observation space
+        if agent_id not in env.observation_space.spaces:
+            raise ValueError(f"Agent {agent_id} not found in observation space")
+        for feature in ["linear_vel_x", "collision"]:
+            if feature not in env.observation_space.spaces[agent_id].spaces:
+                raise ValueError(f"{feature} not found in observation space")
+
+    def step(self, action):
+        obs, _, terminated, truncated, info = self.env.step(action)
+        speed = obs[self.agent_id]["linear_vel_x"]
+        crash = obs[self.agent_id]["collision"]
+        reward = self.reward_speed_weight * speed + self.reward_crash_weight * crash
+        return obs, reward, terminated, truncated, info
+
+
+The above wrapper can be used on the original environment as follows:
+
+.. code:: python
+
+    env = gymnasium.make(
+        "f110_gym:f110-v0",
+        config={
+            "num_agents": 1,
+            "observation_config": {
+                "type": "features",
+                "features": ["scan", "linear_vel_x", "collision"],
+            },
+        },
+        render_mode="human",
+    )
+    env = RacingRewardWrapper(
+        env, agent_id="agent_0", reward_speed_weight=1.0, reward_crash_weight=-1.0
+    )
+
+    obs, info = env.reset()
+    done = False
+
+    while not done:
+        action = env.action_space.sample()
+        obs, reward, done, truncated, info = env.step(action)
+        print("step reward: ", reward)
+        env.render()
+
diff --git a/examples/example_custom_reward.py b/examples/example_custom_reward.py
new file mode 100644
index 00000000..2edad2ff
--- /dev/null
+++ b/examples/example_custom_reward.py
@@ -0,0 +1,68 @@
+import gymnasium
+from gymnasium import Wrapper
+
+
+class RacingRewardWrapper(Wrapper):
+    """
+    Example of custom reward which encourage speed and penalize crashes.
+
+    reward(state) = w_{speed} * state_{speed} + w_{crash} * state_{crash}
+    """
+
+    def __init__(
+        self,
+        env: gymnasium.Env,
+        agent_id: str,
+        reward_speed_weight: float,
+        reward_crash_weight: float,
+    ):
+        super().__init__(env)
+        self.agent_id = agent_id
+        self.reward_speed_weight = reward_speed_weight
+        self.reward_crash_weight = reward_crash_weight
+
+        # sanity checks on the observation space
+        if agent_id not in env.observation_space.spaces:
+            raise ValueError(f"Agent {agent_id} not found in observation space")
+        for feature in ["linear_vel_x", "collision"]:
+            if feature not in env.observation_space.spaces[agent_id].spaces:
+                raise ValueError(f"{feature} not found in observation space")
+
+    def step(self, action):
+        obs, _, terminated, truncated, info = self.env.step(action)
+        speed = obs[self.agent_id]["linear_vel_x"]
+        crash = obs[self.agent_id]["collision"]
+        reward = self.reward_speed_weight * speed + self.reward_crash_weight * crash
+        return obs, reward, terminated, truncated, info
+
+
+env = gymnasium.make(
+    "f110_gym:f110-v0",
+    config={
+        "num_agents": 1,
+        "observation_config": {
+            "type": "features",
+            "features": ["scan", "linear_vel_x", "collision"],
+        },
+    },
+    render_mode="human",
+)
+env = RacingRewardWrapper(
+    env, agent_id="agent_0", reward_speed_weight=1.0, reward_crash_weight=-1.0
+)
+
+obs, info = env.reset()
+done = False
+
+tot_reward = 0.0
+while not done:
+    action = env.action_space.sample()
+    obs, reward, done, truncated, info = env.step(action)
+
+    print("step reward: ", reward)
+    tot_reward += reward
+
+    env.render()
+
+print("total reward: ", tot_reward)
+env.close()

From 83355aa16482e9a8efd0d55afb37848f051d84de Mon Sep 17 00:00:00 2001
From: "Berducci, Luigi" <luigi.berducci@tuwien.ac.at>
Date: Fri, 5 Apr 2024 10:52:44 +0200
Subject: [PATCH 21/24] bugfix: when using configure, update observation space

---
 gym/f110_gym/envs/f110_env.py | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/gym/f110_gym/envs/f110_env.py b/gym/f110_gym/envs/f110_env.py
index 5008e125..3a6bffc1 100644
--- a/gym/f110_gym/envs/f110_env.py
+++ b/gym/f110_gym/envs/f110_env.py
@@ -268,6 +268,12 @@ def configure(self, config: dict) -> None:
                     self.action_type.space, self.num_agents
                 )
 
+            if hasattr(self, "observation_space"):
+                self.observation_type = observation_factory(
+                    env=self, **self.config["observation_config"]
+                )
+                self.observation_space = self.observation_type.space()
+
     def _check_done(self):
         """Check if the current rollout is done
 

From 685282589ca2a077c8bcde2bbca0cca300cdfb94 Mon Sep 17 00:00:00 2001
From: "Berducci, Luigi" <luigi.berducci@tuwien.ac.at>
Date: Fri, 5 Apr 2024 10:53:02 +0200
Subject: [PATCH 22/24] add docs for dynamics, rendering, custom example

---
 docs/src/usage/customized_usage.rst | 12 +++---
 docs/src/usage/dynamics.rst         | 50 ++++++++++++++++++++--
 docs/src/usage/rendering.rst        | 64 ++++++++++++++++++++++++++++-
 3 files changed, 116 insertions(+), 10 deletions(-)

diff --git a/docs/src/usage/customized_usage.rst b/docs/src/usage/customized_usage.rst
index cd6bec02..4b4e2432 100644
--- a/docs/src/usage/customized_usage.rst
+++ b/docs/src/usage/customized_usage.rst
@@ -7,10 +7,6 @@ For a basic usage example, see :ref:`basic_usage`.
 
 The environment also provides options for customization.
 
-Custom Map
-------------
-Work in progress on how to add a custom map.
-
 Random Track Generator
 -----------------------
 
@@ -35,6 +31,10 @@ For example, to generate 3 random maps and store them in the directory `custom_m
 	python examples/random_trackgen.py --seed 42 --n-maps 3 --outdir custom_maps
 
 
-.. image:: ../../../../src/assets/random_trackgen.png
+.. image:: /assets/random_trackgen.png
 	:width: 800
-	:align: center
\ No newline at end of file
+	:align: center
+
+Custom Map
+------------
+Work in progress on how to add a custom map.
\ No newline at end of file
diff --git a/docs/src/usage/dynamics.rst b/docs/src/usage/dynamics.rst
index ca9894e0..311f1e2b 100644
--- a/docs/src/usage/dynamics.rst
+++ b/docs/src/usage/dynamics.rst
@@ -1,6 +1,50 @@
-_dynamics:
+.. _dynamics:
 
-Dynamics
+Vehicle Dynamics
 =====================
 
-Work in progress.
\ No newline at end of file
+The vehicle dynamics are modeled using a single-track model, as in [AlKM17]_.
+
+We support two vehicle dynamics models:
+- Kinematic Single-Track Model (`ks`): Simpler model that considers only the kinematics of the vehicle, i.e., the position, orientation, and velocity, ignoring the forces that act on the vehicle.
+- Single-Track Model (`st`): More complex model that considers the forces that act on the vehicle, such as the tire forces.
+
+Despite the fact that the single-track model is a simplified model, it is able to capture the
+tire slip effects on the slip angle, which is important for accurate simulation at the physical
+limits of the vehicle.
+
+
+Dynamics Configuration
+----------------------
+The environment comes with a *default* dynamics model, which can be changed using the environment configuration.
+
+The dynamics model can be configured at the environment creation:
+
+.. code:: python
+
+    import gymnasium as gym
+
+    env = gym.make(
+		"f110_gym:f110-v0",
+		config={
+			"model": "ks"
+		})
+    obs, infos = env.reset()
+
+or after the environment creation:
+
+.. code:: python
+
+    import gymnasium as gym
+
+    env = gym.make("f110_gym:f110-v0")
+    env.configure({
+        "model": "ks",
+    })
+    obs, infos = env.reset()
+
+
+
+.. rubric:: References
+
+.. [AlKM17] Althoff, M.; Koschi, M.; Manzinger, S..: CommonRoad: Composable benchmarks for motion planning on roads. In: 2017 IEEE Intelligent Vehicles Symposium (IV). IEEE, 2017.
\ No newline at end of file
diff --git a/docs/src/usage/rendering.rst b/docs/src/usage/rendering.rst
index 942f19ed..f8c2f1af 100644
--- a/docs/src/usage/rendering.rst
+++ b/docs/src/usage/rendering.rst
@@ -3,4 +3,66 @@
 Rendering
 =====================
 
-Work in progress.
\ No newline at end of file
+The environment rendering is done with `pygame`.
+
+As by default in gymnasium environments,
+there are multiple rendering modes available:
+
+- `human`: for real-time rendering with `pygame`;
+
+- `rgb_array`: for collecting the current frame as a numpy array;
+
+- `rgb_array_list`: for collecting multiple frames into a list. This is useful to generate smooth videos when using frame-skipping.
+
+Additionally, for fast rendering and debugging, we add:
+
+- `human-fast`: faster-than-real-time rendering. Up to 10x faster based on the host machine.
+
+Rendering Configuration
+------------------------
+
+The user can customize the rendering mode with the `rendering_mode` parameter in the environment configuration.
+
+.. code:: python
+
+    import gymnasium as gym
+
+    env = gym.make(
+        "f110_gym:f110-v0",
+        render_mode="human-fast",
+    )
+    obs, infos = env.reset()
+    done = False
+
+    while not done:
+        action = env.action_space.sample()
+        obs, reward, done, infos = env.step(action)
+        env.render()
+
+
+.. note::
+    When rendering in `human` mode,
+    the user can interact to change the agent to focus on by pressing the left/right/middle mouse button,
+    as described by the instructions diplayed in the top of the window.
+
+Parameter Configuration
+-----------------------
+
+The user can customize the rendering parameters in the `f1tenth_gym.rendering/rendering.yaml` file:
+
+- `window_size`: width and height of the window in pixels
+
+- `focus_on`: agent id to focus on (e.g., `agent_0`) or `null` for map view
+
+- `zoom_in_factor`: zoom in factor. 1.0 is no zoom, >1.0 is zoom in, <1.0 is zoom out
+
+- `show_wheels`: it toggles the visualization of the vehicle wheels
+
+- `car_tickness`: thickness of the car border
+
+- `show_info`: it toggles the visualization of the instruction text
+
+- `vehicle_palette`: cyclic list of colors for the vehicles (e.g., first agent takes the first color, second agent takes the second color, etc. and then it starts again from the first color)
+
+
+

From 627b83f81d4ffc4456e987f4e5d55d37f22c8205 Mon Sep 17 00:00:00 2001
From: "Berducci, Luigi" <luigi.berducci@tuwien.ac.at>
Date: Fri, 5 Apr 2024 10:55:52 +0200
Subject: [PATCH 23/24] correct minor spacing stuff

---
 docs/src/usage/actions.rst      | 1 +
 docs/src/usage/index.rst        | 4 ++--
 docs/src/usage/observations.rst | 1 +
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/docs/src/usage/actions.rst b/docs/src/usage/actions.rst
index c3b17c21..b43eb27d 100644
--- a/docs/src/usage/actions.rst
+++ b/docs/src/usage/actions.rst
@@ -35,6 +35,7 @@ Actions can be configured at the environment creation:
 			"control_input": ["accl", "steering_speed"]
 		})
     obs, infos = env.reset()
+
 or after the environment creation:
 
 .. code:: python
diff --git a/docs/src/usage/index.rst b/docs/src/usage/index.rst
index b6c8783a..745ecc40 100644
--- a/docs/src/usage/index.rst
+++ b/docs/src/usage/index.rst
@@ -1,8 +1,8 @@
 Getting Started
-==============
+===============
 
 Making an environment
-----------------------
+---------------------
 
 This is a quick example of how to make a simple environment:
 
diff --git a/docs/src/usage/observations.rst b/docs/src/usage/observations.rst
index dc340a40..960022f4 100644
--- a/docs/src/usage/observations.rst
+++ b/docs/src/usage/observations.rst
@@ -32,6 +32,7 @@ Observations can be configured at the environment creation:
 			},
 		})
     obs, infos = env.reset()
+
 or after the environment creation:
 
 .. code:: python

From 2995d84cf03a1706cd7948d8e8d0a6765876528d Mon Sep 17 00:00:00 2001
From: "Berducci, Luigi" <luigi.berducci@tuwien.ac.at>
Date: Fri, 5 Apr 2024 11:02:55 +0200
Subject: [PATCH 24/24] correct spacing bullet list

---
 docs/src/usage/dynamics.rst | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/docs/src/usage/dynamics.rst b/docs/src/usage/dynamics.rst
index 311f1e2b..2ab1fdb4 100644
--- a/docs/src/usage/dynamics.rst
+++ b/docs/src/usage/dynamics.rst
@@ -6,7 +6,9 @@ Vehicle Dynamics
 The vehicle dynamics are modeled using a single-track model, as in [AlKM17]_.
 
 We support two vehicle dynamics models:
+
 - Kinematic Single-Track Model (`ks`): Simpler model that considers only the kinematics of the vehicle, i.e., the position, orientation, and velocity, ignoring the forces that act on the vehicle.
+
 - Single-Track Model (`st`): More complex model that considers the forces that act on the vehicle, such as the tire forces.
 
 Despite the fact that the single-track model is a simplified model, it is able to capture the
@@ -27,7 +29,7 @@ The dynamics model can be configured at the environment creation:
     env = gym.make(
 		"f110_gym:f110-v0",
 		config={
-			"model": "ks"
+            "model": "ks"
 		})
     obs, infos = env.reset()