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&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&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;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</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;"> </span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">▼</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;"> </span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">▼</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;"> </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;"> </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;"> </span><span id="arr_0_0_1_" class="arrow" onclick="toggleFolder('0_0_1_')">▼</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;"> </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;"> </span><span id="arr_0_0_2_" class="arrow" onclick="toggleFolder('0_0_2_')">▼</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;"> </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;"> </span><span id="arr_0_0_3_" class="arrow" onclick="toggleFolder('0_0_3_')">▼</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;"> </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;"> </span><span id="arr_0_0_4_" class="arrow" onclick="toggleFolder('0_0_4_')">▼</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;"> </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;"> </span><span id="arr_0_0_5_" class="arrow" onclick="toggleFolder('0_0_5_')">▼</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;"> </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;"> </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;"> </span><span id="arr_0_0_6_" class="arrow" onclick="toggleFolder('0_0_6_')">▼</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;"> </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;"> </span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">▼</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;"> </span><span id="arr_0_1_0_" class="arrow" onclick="toggleFolder('0_1_0_')">▼</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;"> </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;"> </span><span id="arr_0_1_1_" class="arrow" onclick="toggleFolder('0_1_1_')">▼</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;"> </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;"> </span><span id="arr_0_1_2_" class="arrow" onclick="toggleFolder('0_1_2_')">▼</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;"> </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;"> </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;"> </span><span id="arr_0_1_3_" class="arrow" onclick="toggleFolder('0_1_3_')">▼</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;"> </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;"> </span><span id="arr_0_1_4_" class="arrow" onclick="toggleFolder('0_1_4_')">▼</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;"> </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;"> </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  <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&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&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> | <a class="qindex" href="#letter_c">c</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_e">e</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_r">r</a> | <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">  a  </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)   </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)   </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)   </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)   </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)   </td> -<td rowspan="2" valign="bottom"><a name="letter_e"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  e  </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">  r  </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)   </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)   </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)   </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)   </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">  c  </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">  d  </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)   </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)   </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)   </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">  f  </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">  s  </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)   </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)   </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)   </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)   </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> | <a class="qindex" href="#letter_c">c</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_e">e</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_r">r</a> | <a class="qindex" href="#letter_s">s</a></div> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </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"> </td></tr> -<tr class="memitem:a6ab5b5dd420b182b5156ee9566c03411"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a2a60c9ee34f2f09fb0a7e5cc7b287897"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a0fa587dc3c1a12c9217f0bd093c1bc08"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a7d15e74a1b82646675d60ce02cdce6b5"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a4577a30fd8879de7df1d0ace7702f450"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:ae12c14c1353e6aab2f72036593d85518"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a4800c5ac90ba93b79a0338e5e34ead43"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a356ec05a0a0c056f4d43f5fb0451c83d"><td class="memItemLeft" align="right" valign="top">def </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"> </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> - </td><td class="memItemRight" valign="bottom"><b>params</b></td></tr> -<tr class="separator:af3ba3709a5dfd62c730a8896126a2539"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5408c25f5507645e351b33c7b93d09e9"><td class="memItemLeft" align="right" valign="top"><a id="a5408c25f5507645e351b33c7b93d09e9"></a> - </td><td class="memItemRight" valign="bottom"><b>is_ego</b></td></tr> -<tr class="separator:a5408c25f5507645e351b33c7b93d09e9"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a507e48bfae2cd153ce988acfa915f4e3"><td class="memItemLeft" align="right" valign="top"><a id="a507e48bfae2cd153ce988acfa915f4e3"></a> - </td><td class="memItemRight" valign="bottom"><b>time_step</b></td></tr> -<tr class="separator:a507e48bfae2cd153ce988acfa915f4e3"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a32283ca467927cb92fd4cebaf4572788"><td class="memItemLeft" align="right" valign="top"><a id="a32283ca467927cb92fd4cebaf4572788"></a> - </td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr> -<tr class="separator:a32283ca467927cb92fd4cebaf4572788"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab17edc5d7143043b17160ce593da0e05"><td class="memItemLeft" align="right" valign="top"><a id="ab17edc5d7143043b17160ce593da0e05"></a> - </td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr> -<tr class="separator:ab17edc5d7143043b17160ce593da0e05"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aea2c21a52410444a2502ee4e7d370bad"><td class="memItemLeft" align="right" valign="top"><a id="aea2c21a52410444a2502ee4e7d370bad"></a> - </td><td class="memItemRight" valign="bottom"><b>state</b></td></tr> -<tr class="separator:aea2c21a52410444a2502ee4e7d370bad"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a3dc163d182be2760a4f8322417fd2332"><td class="memItemLeft" align="right" valign="top"><a id="a3dc163d182be2760a4f8322417fd2332"></a> - </td><td class="memItemRight" valign="bottom"><b>opp_poses</b></td></tr> -<tr class="separator:a3dc163d182be2760a4f8322417fd2332"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5f298f55e8dc14fb39e5145699e90bfa"><td class="memItemLeft" align="right" valign="top"><a id="a5f298f55e8dc14fb39e5145699e90bfa"></a> - </td><td class="memItemRight" valign="bottom"><b>accel</b></td></tr> -<tr class="separator:a5f298f55e8dc14fb39e5145699e90bfa"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5a1dbcba00b5c54afc700873df015eba"><td class="memItemLeft" align="right" valign="top"><a id="a5a1dbcba00b5c54afc700873df015eba"></a> - </td><td class="memItemRight" valign="bottom"><b>steer_angle_vel</b></td></tr> -<tr class="separator:a5a1dbcba00b5c54afc700873df015eba"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a462d1ce0e070187aba97a24d75961884"><td class="memItemLeft" align="right" valign="top"><a id="a462d1ce0e070187aba97a24d75961884"></a> - </td><td class="memItemRight" valign="bottom"><b>steer_buffer</b></td></tr> -<tr class="separator:a462d1ce0e070187aba97a24d75961884"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a51405046f30a27487241455cb51481ff"><td class="memItemLeft" align="right" valign="top"><a id="a51405046f30a27487241455cb51481ff"></a> - </td><td class="memItemRight" valign="bottom"><b>steer_buffer_size</b></td></tr> -<tr class="separator:a51405046f30a27487241455cb51481ff"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a04ac46193f2706b71aa6ccc616484a1b"><td class="memItemLeft" align="right" valign="top"><a id="a04ac46193f2706b71aa6ccc616484a1b"></a> - </td><td class="memItemRight" valign="bottom"><b>in_collision</b></td></tr> -<tr class="separator:a04ac46193f2706b71aa6ccc616484a1b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5eb8a1fa8d27dfccd008573e2d720c44"><td class="memItemLeft" align="right" valign="top"><a id="a5eb8a1fa8d27dfccd008573e2d720c44"></a> - </td><td class="memItemRight" valign="bottom"><b>ttc_thresh</b></td></tr> -<tr class="separator:a5eb8a1fa8d27dfccd008573e2d720c44"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a35674ca4c4a0eda359249216bee094b3"><td class="memItemLeft" align="right" valign="top"><a id="a35674ca4c4a0eda359249216bee094b3"></a> - </td><td class="memItemRight" valign="bottom"><b>scan_simulator</b></td></tr> -<tr class="separator:a35674ca4c4a0eda359249216bee094b3"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aeaedd3e39c14a7904e8417ad264b3168"><td class="memItemLeft" align="right" valign="top"><a id="aeaedd3e39c14a7904e8417ad264b3168"></a> - </td><td class="memItemRight" valign="bottom"><b>current_scan</b></td></tr> -<tr class="separator:aeaedd3e39c14a7904e8417ad264b3168"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a47e2229884b30c3640f75cc46a4b1fe9"><td class="memItemLeft" align="right" valign="top"><a id="a47e2229884b30c3640f75cc46a4b1fe9"></a> - </td><td class="memItemRight" valign="bottom"><b>cosines</b></td></tr> -<tr class="separator:a47e2229884b30c3640f75cc46a4b1fe9"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7a416feebdc5bf3289495877a722ac5e"><td class="memItemLeft" align="right" valign="top"><a id="a7a416feebdc5bf3289495877a722ac5e"></a> - </td><td class="memItemRight" valign="bottom"><b>scan_angles</b></td></tr> -<tr class="separator:a7a416feebdc5bf3289495877a722ac5e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a45934ce2c731e21cee3b3890d5713a1e"><td class="memItemLeft" align="right" valign="top"><a id="a45934ce2c731e21cee3b3890d5713a1e"></a> - </td><td class="memItemRight" valign="bottom"><b>side_distances</b></td></tr> -<tr class="separator:a45934ce2c731e21cee3b3890d5713a1e"><td class="memSeparator" colspan="2"> </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 & Destructor Documentation</h2> -<a id="af342754a877c42b3828a03b6425801d4"></a> -<h2 class="memtitle"><span class="permalink"><a href="#af342754a877c42b3828a03b6425801d4">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>params</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>is_ego</em> = <code>False</code>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>time_step</em> = <code>0.01</code>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>num_beams</em> = <code>1080</code>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>fov</em> = <code>4.7</code> </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">◆ </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"> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>scan</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>pose</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_path</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_ext</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>opp_poses</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>params</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>raw_steer</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>vel</em> </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">◆ </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"> </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  <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 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 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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </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"> </td></tr> -<tr class="memitem:a0a566351f20a16b7545fcd20ca9adb57"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a974c58957a6b14582149d704ef28a68c"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a7f32c68e14bf47447ce9599c8db21236"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:af1fb175457362d7419301180b1b3b4c6"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:ab63c655ff0cd1bb2accce7be9fff69e8"><td class="memItemLeft" align="right" valign="top">def </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"> </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> - </td><td class="memItemRight" valign="bottom"><b>num_agents</b></td></tr> -<tr class="separator:ad99c964e6df64e8264ab729be118aa8c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aab539724143dd42fca12ec1d6043c984"><td class="memItemLeft" align="right" valign="top"><a id="aab539724143dd42fca12ec1d6043c984"></a> - </td><td class="memItemRight" valign="bottom"><b>time_step</b></td></tr> -<tr class="separator:aab539724143dd42fca12ec1d6043c984"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a08fd902fa242da70c1bcf34a1fe80802"><td class="memItemLeft" align="right" valign="top"><a id="a08fd902fa242da70c1bcf34a1fe80802"></a> - </td><td class="memItemRight" valign="bottom"><b>ego_idx</b></td></tr> -<tr class="separator:a08fd902fa242da70c1bcf34a1fe80802"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a877c852c32ff108df0ff6bfa2ab3bf6f"><td class="memItemLeft" align="right" valign="top"><a id="a877c852c32ff108df0ff6bfa2ab3bf6f"></a> - </td><td class="memItemRight" valign="bottom"><b>params</b></td></tr> -<tr class="separator:a877c852c32ff108df0ff6bfa2ab3bf6f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ade120757dde31d2130e4b0f9b01e3a7d"><td class="memItemLeft" align="right" valign="top"><a id="ade120757dde31d2130e4b0f9b01e3a7d"></a> - </td><td class="memItemRight" valign="bottom"><b>agent_poses</b></td></tr> -<tr class="separator:ade120757dde31d2130e4b0f9b01e3a7d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae665b35ec7d9ced7de789a02cafdd566"><td class="memItemLeft" align="right" valign="top"><a id="ae665b35ec7d9ced7de789a02cafdd566"></a> - </td><td class="memItemRight" valign="bottom"><b>agents</b></td></tr> -<tr class="separator:ae665b35ec7d9ced7de789a02cafdd566"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2266104910535f06f31c1212e62fde8b"><td class="memItemLeft" align="right" valign="top"><a id="a2266104910535f06f31c1212e62fde8b"></a> - </td><td class="memItemRight" valign="bottom"><b>collisions</b></td></tr> -<tr class="separator:a2266104910535f06f31c1212e62fde8b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5d716c6ccd3b649f407560f28bdcd84d"><td class="memItemLeft" align="right" valign="top"><a id="a5d716c6ccd3b649f407560f28bdcd84d"></a> - </td><td class="memItemRight" valign="bottom"><b>collision_idx</b></td></tr> -<tr class="separator:a5d716c6ccd3b649f407560f28bdcd84d"><td class="memSeparator" colspan="2"> </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 & Destructor Documentation</h2> -<a id="ab865873c6f0afa3741add4f39e5fd872"></a> -<h2 class="memtitle"><span class="permalink"><a href="#ab865873c6f0afa3741add4f39e5fd872">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>params</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>num_agents</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>time_step</em> = <code>0.01</code>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>ego_idx</em> = <code>0</code> </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">◆ </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"> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>poses</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_path</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_ext</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>control_inputs</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>params</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>agent_idx</em> = <code>-1</code> </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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr> -<tr class="separator:a4aa54131afe81f4a6790930e7d5a639e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a3137d9576fd99c1f56980a6cc61dc58f"><td class="memItemLeft" align="right" valign="top"><a id="a3137d9576fd99c1f56980a6cc61dc58f"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_get_vert</b> (self)</td></tr> -<tr class="separator:a3137d9576fd99c1f56980a6cc61dc58f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a588513dfce9c9c7843f2aef501e993f1"><td class="memItemLeft" align="right" valign="top"><a id="a588513dfce9c9c7843f2aef501e993f1"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_get_vert_fps</b> (self)</td></tr> -<tr class="separator:a588513dfce9c9c7843f2aef501e993f1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a484c3bfdab68d8ff8d298191a0cfdd4b"><td class="memItemLeft" align="right" valign="top"><a id="a484c3bfdab68d8ff8d298191a0cfdd4b"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_random_collision</b> (self)</td></tr> -<tr class="separator:a484c3bfdab68d8ff8d298191a0cfdd4b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af59482dbded9f1f915e666553316855d"><td class="memItemLeft" align="right" valign="top"><a id="af59482dbded9f1f915e666553316855d"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_multiple_collisions</b> (self)</td></tr> -<tr class="separator:af59482dbded9f1f915e666553316855d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a95425d03ea60792f2e523f3838ee9928"><td class="memItemLeft" align="right" valign="top"><a id="a95425d03ea60792f2e523f3838ee9928"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_fps</b> (self)</td></tr> -<tr class="separator:a95425d03ea60792f2e523f3838ee9928"><td class="memSeparator" colspan="2"> </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> - </td><td class="memItemRight" valign="bottom"><b>vertices1</b></td></tr> -<tr class="separator:a8ec590c2d0ff249236b6167903b177e4"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a9cbff98529b08cc1cd52b56ba407e55e"><td class="memItemLeft" align="right" valign="top"><a id="a9cbff98529b08cc1cd52b56ba407e55e"></a> - </td><td class="memItemRight" valign="bottom"><b>length</b></td></tr> -<tr class="separator:a9cbff98529b08cc1cd52b56ba407e55e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a00391f07693559253e82dbbe849da73e"><td class="memItemLeft" align="right" valign="top"><a id="a00391f07693559253e82dbbe849da73e"></a> - </td><td class="memItemRight" valign="bottom"><b>width</b></td></tr> -<tr class="separator:a00391f07693559253e82dbbe849da73e"><td class="memSeparator" colspan="2"> </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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr> -<tr class="separator:a5ef057974425be84e5672fec6367237b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8d72833c7e5cf3717a4326ee6809c527"><td class="memItemLeft" align="right" valign="top"><a id="a8d72833c7e5cf3717a4326ee6809c527"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_derivatives</b> (self)</td></tr> -<tr class="separator:a8d72833c7e5cf3717a4326ee6809c527"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a00e95bc713471556c1d5f62c70d50f78"><td class="memItemLeft" align="right" valign="top"><a id="a00e95bc713471556c1d5f62c70d50f78"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_zeroinit_roll</b> (self)</td></tr> -<tr class="separator:a00e95bc713471556c1d5f62c70d50f78"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aee6c565405df1ec196e88d5ca42238cd"><td class="memItemLeft" align="right" valign="top"><a id="aee6c565405df1ec196e88d5ca42238cd"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_zeroinit_dec</b> (self)</td></tr> -<tr class="separator:aee6c565405df1ec196e88d5ca42238cd"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:abfdac96452f8e54e0233b68626cf33bf"><td class="memItemLeft" align="right" valign="top"><a id="abfdac96452f8e54e0233b68626cf33bf"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_zeroinit_acc</b> (self)</td></tr> -<tr class="separator:abfdac96452f8e54e0233b68626cf33bf"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a3e47a38cf845b941eea719550bcc1994"><td class="memItemLeft" align="right" valign="top"><a id="a3e47a38cf845b941eea719550bcc1994"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_zeroinit_rollleft</b> (self)</td></tr> -<tr class="separator:a3e47a38cf845b941eea719550bcc1994"><td class="memSeparator" colspan="2"> </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> - </td><td class="memItemRight" valign="bottom"><b>mu</b></td></tr> -<tr class="separator:ac283c8565d5702a36fe2aef5ac801ec6"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ace0f724e5d6de2b84ad6f26aa1f825de"><td class="memItemLeft" align="right" valign="top"><a id="ace0f724e5d6de2b84ad6f26aa1f825de"></a> - </td><td class="memItemRight" valign="bottom"><b>C_Sf</b></td></tr> -<tr class="separator:ace0f724e5d6de2b84ad6f26aa1f825de"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5ef6d0ca5f09db415133dd4fefe04a61"><td class="memItemLeft" align="right" valign="top"><a id="a5ef6d0ca5f09db415133dd4fefe04a61"></a> - </td><td class="memItemRight" valign="bottom"><b>C_Sr</b></td></tr> -<tr class="separator:a5ef6d0ca5f09db415133dd4fefe04a61"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a46f6b69e0406f1cb669efe188354e88b"><td class="memItemLeft" align="right" valign="top"><a id="a46f6b69e0406f1cb669efe188354e88b"></a> - </td><td class="memItemRight" valign="bottom"><b>lf</b></td></tr> -<tr class="separator:a46f6b69e0406f1cb669efe188354e88b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8c72ad994a42ae128b4b3902b8963ce7"><td class="memItemLeft" align="right" valign="top"><a id="a8c72ad994a42ae128b4b3902b8963ce7"></a> - </td><td class="memItemRight" valign="bottom"><b>lr</b></td></tr> -<tr class="separator:a8c72ad994a42ae128b4b3902b8963ce7"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a3d565e1337d599401b34e4c6473d07e4"><td class="memItemLeft" align="right" valign="top"><a id="a3d565e1337d599401b34e4c6473d07e4"></a> - </td><td class="memItemRight" valign="bottom"><b>h</b></td></tr> -<tr class="separator:a3d565e1337d599401b34e4c6473d07e4"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af07025dc1443d5b524c54cabcda24092"><td class="memItemLeft" align="right" valign="top"><a id="af07025dc1443d5b524c54cabcda24092"></a> - </td><td class="memItemRight" valign="bottom"><b>m</b></td></tr> -<tr class="separator:af07025dc1443d5b524c54cabcda24092"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a80b2b5e9fd9772596b8c0441ac3501a2"><td class="memItemLeft" align="right" valign="top"><a id="a80b2b5e9fd9772596b8c0441ac3501a2"></a> - </td><td class="memItemRight" valign="bottom"><b>I</b></td></tr> -<tr class="separator:a80b2b5e9fd9772596b8c0441ac3501a2"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a703d1a956eba2dc93e5db243995105e6"><td class="memItemLeft" align="right" valign="top"><a id="a703d1a956eba2dc93e5db243995105e6"></a> - </td><td class="memItemRight" valign="bottom"><b>s_min</b></td></tr> -<tr class="separator:a703d1a956eba2dc93e5db243995105e6"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8269ff10bd35d86f1a02190ab39fb897"><td class="memItemLeft" align="right" valign="top"><a id="a8269ff10bd35d86f1a02190ab39fb897"></a> - </td><td class="memItemRight" valign="bottom"><b>s_max</b></td></tr> -<tr class="separator:a8269ff10bd35d86f1a02190ab39fb897"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a17ce4b00ab832e2cccf565796aa77d56"><td class="memItemLeft" align="right" valign="top"><a id="a17ce4b00ab832e2cccf565796aa77d56"></a> - </td><td class="memItemRight" valign="bottom"><b>sv_min</b></td></tr> -<tr class="separator:a17ce4b00ab832e2cccf565796aa77d56"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:abce143f8803056ea016677f51bc7179a"><td class="memItemLeft" align="right" valign="top"><a id="abce143f8803056ea016677f51bc7179a"></a> - </td><td class="memItemRight" valign="bottom"><b>sv_max</b></td></tr> -<tr class="separator:abce143f8803056ea016677f51bc7179a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aee44ef320e9d70ffa4d0966cec9962ef"><td class="memItemLeft" align="right" valign="top"><a id="aee44ef320e9d70ffa4d0966cec9962ef"></a> - </td><td class="memItemRight" valign="bottom"><b>v_min</b></td></tr> -<tr class="separator:aee44ef320e9d70ffa4d0966cec9962ef"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aa6c8d413765dd13de77f1dcd1038d759"><td class="memItemLeft" align="right" valign="top"><a id="aa6c8d413765dd13de77f1dcd1038d759"></a> - </td><td class="memItemRight" valign="bottom"><b>v_max</b></td></tr> -<tr class="separator:aa6c8d413765dd13de77f1dcd1038d759"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aeb89635ca78746bfba5025b7e9890be4"><td class="memItemLeft" align="right" valign="top"><a id="aeb89635ca78746bfba5025b7e9890be4"></a> - </td><td class="memItemRight" valign="bottom"><b>v_switch</b></td></tr> -<tr class="separator:aeb89635ca78746bfba5025b7e9890be4"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af37b667196efbbced8b042c53c159641"><td class="memItemLeft" align="right" valign="top"><a id="af37b667196efbbced8b042c53c159641"></a> - </td><td class="memItemRight" valign="bottom"><b>a_max</b></td></tr> -<tr class="separator:af37b667196efbbced8b042c53c159641"><td class="memSeparator" colspan="2"> </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  <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 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 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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<a href="#pub-static-attribs">Static Public Attributes</a> | -<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 </td><td class="memItemRight" valign="bottom"><b>__init__</b> (self, **kwargs)</td></tr> -<tr class="separator:a6fbba07db5d7d79bdd27f3487192e6e2"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae193b905b3d1c213ec4324283ebdf201"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a0df471828ba39c5228bf5c814a5d0e6e"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:ab213d62cea216bbd82d0f6d7061452fb"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:afc210c3941c1548692c75c961ad443df"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a79d419bbf2ff0e377d808e4a8f41cc81"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:ab8e76450e63ef88c1ac9721f717fa375"><td class="memItemLeft" align="right" valign="top">def </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"> </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> - </td><td class="memItemRight" valign="bottom"><b>map_name</b></td></tr> -<tr class="separator:a6fbb8c9dad98bbad696936dec9633939"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a584bf97317bbe8d38d8e0136753ded60"><td class="memItemLeft" align="right" valign="top"><a id="a584bf97317bbe8d38d8e0136753ded60"></a> - </td><td class="memItemRight" valign="bottom"><b>map_path</b></td></tr> -<tr class="separator:a584bf97317bbe8d38d8e0136753ded60"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a147cde741845fcded400365a9d495ce3"><td class="memItemLeft" align="right" valign="top"><a id="a147cde741845fcded400365a9d495ce3"></a> - </td><td class="memItemRight" valign="bottom"><b>map_ext</b></td></tr> -<tr class="separator:a147cde741845fcded400365a9d495ce3"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab1c1a4b9cb08b685c597b1d40402a479"><td class="memItemLeft" align="right" valign="top"><a id="ab1c1a4b9cb08b685c597b1d40402a479"></a> - </td><td class="memItemRight" valign="bottom"><b>params</b></td></tr> -<tr class="separator:ab1c1a4b9cb08b685c597b1d40402a479"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4eefdcfd9a5f09eedfad9b27bf6ce45e"><td class="memItemLeft" align="right" valign="top"><a id="a4eefdcfd9a5f09eedfad9b27bf6ce45e"></a> - </td><td class="memItemRight" valign="bottom"><b>num_agents</b></td></tr> -<tr class="separator:a4eefdcfd9a5f09eedfad9b27bf6ce45e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:abdc8699b0f8fb2412efef070affa8ccb"><td class="memItemLeft" align="right" valign="top"><a id="abdc8699b0f8fb2412efef070affa8ccb"></a> - </td><td class="memItemRight" valign="bottom"><b>timestep</b></td></tr> -<tr class="separator:abdc8699b0f8fb2412efef070affa8ccb"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aebce8c6c42f258d8c561da27dde0c01b"><td class="memItemLeft" align="right" valign="top"><a id="aebce8c6c42f258d8c561da27dde0c01b"></a> - </td><td class="memItemRight" valign="bottom"><b>ego_idx</b></td></tr> -<tr class="separator:aebce8c6c42f258d8c561da27dde0c01b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2496c3576ebb86df560fb09004583527"><td class="memItemLeft" align="right" valign="top"><a id="a2496c3576ebb86df560fb09004583527"></a> - </td><td class="memItemRight" valign="bottom"><b>start_thresh</b></td></tr> -<tr class="separator:a2496c3576ebb86df560fb09004583527"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae83c6ed936fe9e1a542be6b2eb76395c"><td class="memItemLeft" align="right" valign="top"><a id="ae83c6ed936fe9e1a542be6b2eb76395c"></a> - </td><td class="memItemRight" valign="bottom"><b>poses_x</b></td></tr> -<tr class="separator:ae83c6ed936fe9e1a542be6b2eb76395c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a03432e028beff28596178dc9236fc4e8"><td class="memItemLeft" align="right" valign="top"><a id="a03432e028beff28596178dc9236fc4e8"></a> - </td><td class="memItemRight" valign="bottom"><b>poses_y</b></td></tr> -<tr class="separator:a03432e028beff28596178dc9236fc4e8"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a3ffb6fa7e705c18d5316444488cb649b"><td class="memItemLeft" align="right" valign="top"><a id="a3ffb6fa7e705c18d5316444488cb649b"></a> - </td><td class="memItemRight" valign="bottom"><b>poses_theta</b></td></tr> -<tr class="separator:a3ffb6fa7e705c18d5316444488cb649b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ada1a8cc0681447645b811448f516885a"><td class="memItemLeft" align="right" valign="top"><a id="ada1a8cc0681447645b811448f516885a"></a> - </td><td class="memItemRight" valign="bottom"><b>collisions</b></td></tr> -<tr class="separator:ada1a8cc0681447645b811448f516885a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:afc0a35ce8ff234279acffc66092d72a1"><td class="memItemLeft" align="right" valign="top"><a id="afc0a35ce8ff234279acffc66092d72a1"></a> - </td><td class="memItemRight" valign="bottom"><b>near_start</b></td></tr> -<tr class="separator:afc0a35ce8ff234279acffc66092d72a1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6c19f5c3146fa6be496639ab4ed0d63f"><td class="memItemLeft" align="right" valign="top"><a id="a6c19f5c3146fa6be496639ab4ed0d63f"></a> - </td><td class="memItemRight" valign="bottom"><b>num_toggles</b></td></tr> -<tr class="separator:a6c19f5c3146fa6be496639ab4ed0d63f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a83f64f867c24f12d9ad3e14745e23aa1"><td class="memItemLeft" align="right" valign="top"><a id="a83f64f867c24f12d9ad3e14745e23aa1"></a> - </td><td class="memItemRight" valign="bottom"><b>lap_times</b></td></tr> -<tr class="separator:a83f64f867c24f12d9ad3e14745e23aa1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a0b2cc3bd151748987c6e23f34f16d1a2"><td class="memItemLeft" align="right" valign="top"><a id="a0b2cc3bd151748987c6e23f34f16d1a2"></a> - </td><td class="memItemRight" valign="bottom"><b>lap_counts</b></td></tr> -<tr class="separator:a0b2cc3bd151748987c6e23f34f16d1a2"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6539fde56adcb5755acfe1c86251f193"><td class="memItemLeft" align="right" valign="top"><a id="a6539fde56adcb5755acfe1c86251f193"></a> - </td><td class="memItemRight" valign="bottom"><b>current_time</b></td></tr> -<tr class="separator:a6539fde56adcb5755acfe1c86251f193"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a24602450e500c08f3190672922de25de"><td class="memItemLeft" align="right" valign="top"><a id="a24602450e500c08f3190672922de25de"></a> - </td><td class="memItemRight" valign="bottom"><b>near_starts</b></td></tr> -<tr class="separator:a24602450e500c08f3190672922de25de"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a45f4f52ca91b4efa14118d3718213eb6"><td class="memItemLeft" align="right" valign="top"><a id="a45f4f52ca91b4efa14118d3718213eb6"></a> - </td><td class="memItemRight" valign="bottom"><b>toggle_list</b></td></tr> -<tr class="separator:a45f4f52ca91b4efa14118d3718213eb6"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae867a64de7fea1f98cb6db6e9ff9d4ed"><td class="memItemLeft" align="right" valign="top"><a id="ae867a64de7fea1f98cb6db6e9ff9d4ed"></a> - </td><td class="memItemRight" valign="bottom"><b>start_xs</b></td></tr> -<tr class="separator:ae867a64de7fea1f98cb6db6e9ff9d4ed"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a814ae4233f0c96728a9a5f47f5add06e"><td class="memItemLeft" align="right" valign="top"><a id="a814ae4233f0c96728a9a5f47f5add06e"></a> - </td><td class="memItemRight" valign="bottom"><b>start_ys</b></td></tr> -<tr class="separator:a814ae4233f0c96728a9a5f47f5add06e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a064dc8d975b3da3e0ac29f73b626b6aa"><td class="memItemLeft" align="right" valign="top"><a id="a064dc8d975b3da3e0ac29f73b626b6aa"></a> - </td><td class="memItemRight" valign="bottom"><b>start_thetas</b></td></tr> -<tr class="separator:a064dc8d975b3da3e0ac29f73b626b6aa"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a613e153a969b6e3df72893eed2da061f"><td class="memItemLeft" align="right" valign="top"><a id="a613e153a969b6e3df72893eed2da061f"></a> - </td><td class="memItemRight" valign="bottom"><b>start_rot</b></td></tr> -<tr class="separator:a613e153a969b6e3df72893eed2da061f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aa8a35ba4818fe79c1e2c6f9058a31dde"><td class="memItemLeft" align="right" valign="top"><a id="aa8a35ba4818fe79c1e2c6f9058a31dde"></a> - </td><td class="memItemRight" valign="bottom"><b>sim</b></td></tr> -<tr class="separator:aa8a35ba4818fe79c1e2c6f9058a31dde"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aaa2e9426a3f641b295203f9166c33fac"><td class="memItemLeft" align="right" valign="top"><a id="aaa2e9426a3f641b295203f9166c33fac"></a> - </td><td class="memItemRight" valign="bottom"><b>renderer</b></td></tr> -<tr class="separator:aaa2e9426a3f641b295203f9166c33fac"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ad293c8b43306e47c4430b16b9f7b8d8c"><td class="memItemLeft" align="right" valign="top"><a id="ad293c8b43306e47c4430b16b9f7b8d8c"></a> - </td><td class="memItemRight" valign="bottom"><b>current_obs</b></td></tr> -<tr class="separator:ad293c8b43306e47c4430b16b9f7b8d8c"><td class="memSeparator" colspan="2"> </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 </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"> </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 & Destructor Documentation</h2> -<a id="ae193b905b3d1c213ec4324283ebdf201"></a> -<h2 class="memtitle"><span class="permalink"><a href="#ae193b905b3d1c213ec4324283ebdf201">◆ </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"> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>mode</em> = <code>'human'</code> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>poses</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>action</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_path</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_ext</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>params</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>index</em> = <code>-1</code> </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 >= 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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<a href="#pub-static-attribs">Static Public Attributes</a> | -<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 </td><td class="memItemRight" valign="bottom"><b>__init__</b> (self)</td></tr> -<tr class="separator:a20cf7bc892fe043174eb7c656b49e54d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab53974d19ae639eaa8d922db303d21c4"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a5613fa6844441b3e94e6c75d2d6235e7"><td class="memItemLeft" align="right" valign="top"><a id="a5613fa6844441b3e94e6c75d2d6235e7"></a> -def </td><td class="memItemRight" valign="bottom"><b>step</b> (self, action)</td></tr> -<tr class="separator:a5613fa6844441b3e94e6c75d2d6235e7"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:acc334d94e1a842ed26b8820a9730566e"><td class="memItemLeft" align="right" valign="top"><a id="acc334d94e1a842ed26b8820a9730566e"></a> -def </td><td class="memItemRight" valign="bottom"><b>reset</b> (self, poses=None)</td></tr> -<tr class="separator:acc334d94e1a842ed26b8820a9730566e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:acb0331bb92b190cdd592060385726160"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:ad8af92604458991c85e4714ea1db581d"><td class="memItemLeft" align="right" valign="top"><a id="ad8af92604458991c85e4714ea1db581d"></a> -def </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"> </td></tr> -<tr class="memitem:afd60c71c7b15c805310a4ac3510d70d2"><td class="memItemLeft" align="right" valign="top"><a id="afd60c71c7b15c805310a4ac3510d70d2"></a> -def </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"> </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> - </td><td class="memItemRight" valign="bottom"><b>params_set</b></td></tr> -<tr class="separator:a2efb58b38020d194c865ac289009ba4a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a58740f3bf62a7bf263a13b47cdf5d797"><td class="memItemLeft" align="right" valign="top"><a id="a58740f3bf62a7bf263a13b47cdf5d797"></a> - </td><td class="memItemRight" valign="bottom"><b>map_inited</b></td></tr> -<tr class="separator:a58740f3bf62a7bf263a13b47cdf5d797"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a9e292f161315ed1a0f3c3886bf49ded9"><td class="memItemLeft" align="right" valign="top"><a id="a9e292f161315ed1a0f3c3886bf49ded9"></a> - </td><td class="memItemRight" valign="bottom"><b>params</b></td></tr> -<tr class="separator:a9e292f161315ed1a0f3c3886bf49ded9"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac6a6a423017697870d6f1c6828325336"><td class="memItemLeft" align="right" valign="top"><a id="ac6a6a423017697870d6f1c6828325336"></a> - </td><td class="memItemRight" valign="bottom"><b>num_agents</b></td></tr> -<tr class="separator:ac6a6a423017697870d6f1c6828325336"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a89f5296784405aeaa52325a8dac4420e"><td class="memItemLeft" align="right" valign="top"><a id="a89f5296784405aeaa52325a8dac4420e"></a> - </td><td class="memItemRight" valign="bottom"><b>timestep</b></td></tr> -<tr class="separator:a89f5296784405aeaa52325a8dac4420e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ad417d87c39e8046ab2a66fd11d5910b8"><td class="memItemLeft" align="right" valign="top"><a id="ad417d87c39e8046ab2a66fd11d5910b8"></a> - </td><td class="memItemRight" valign="bottom"><b>map_path</b></td></tr> -<tr class="separator:ad417d87c39e8046ab2a66fd11d5910b8"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a52b5d0f196c9cd9e34464d3cf4cf1f34"><td class="memItemLeft" align="right" valign="top"><a id="a52b5d0f196c9cd9e34464d3cf4cf1f34"></a> - </td><td class="memItemRight" valign="bottom"><b>map_img</b></td></tr> -<tr class="separator:a52b5d0f196c9cd9e34464d3cf4cf1f34"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae4babdba55642fab735d03c5672ed5ad"><td class="memItemLeft" align="right" valign="top"><a id="ae4babdba55642fab735d03c5672ed5ad"></a> - </td><td class="memItemRight" valign="bottom"><b>ego_idx</b></td></tr> -<tr class="separator:ae4babdba55642fab735d03c5672ed5ad"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae2047312369a5e949b09e1c5b067412f"><td class="memItemLeft" align="right" valign="top"><a id="ae2047312369a5e949b09e1c5b067412f"></a> - </td><td class="memItemRight" valign="bottom"><b>timeout</b></td></tr> -<tr class="separator:ae2047312369a5e949b09e1c5b067412f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af3d3f69953f78a141b98f3d738a15530"><td class="memItemLeft" align="right" valign="top"><a id="af3d3f69953f78a141b98f3d738a15530"></a> - </td><td class="memItemRight" valign="bottom"><b>start_thresh</b></td></tr> -<tr class="separator:af3d3f69953f78a141b98f3d738a15530"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a0a9dbd46041d336a1d6b28ea01418d91"><td class="memItemLeft" align="right" valign="top"><a id="a0a9dbd46041d336a1d6b28ea01418d91"></a> - </td><td class="memItemRight" valign="bottom"><b>x</b></td></tr> -<tr class="separator:a0a9dbd46041d336a1d6b28ea01418d91"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2fd95411b8a24759642863111ed0f513"><td class="memItemLeft" align="right" valign="top"><a id="a2fd95411b8a24759642863111ed0f513"></a> - </td><td class="memItemRight" valign="bottom"><b>y</b></td></tr> -<tr class="separator:a2fd95411b8a24759642863111ed0f513"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a1dc4f5c9ab99353e2c364d42daf5a180"><td class="memItemLeft" align="right" valign="top"><a id="a1dc4f5c9ab99353e2c364d42daf5a180"></a> - </td><td class="memItemRight" valign="bottom"><b>theta</b></td></tr> -<tr class="separator:a1dc4f5c9ab99353e2c364d42daf5a180"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a68efc45c0a66e4652697146e18c8a570"><td class="memItemLeft" align="right" valign="top"><a id="a68efc45c0a66e4652697146e18c8a570"></a> - </td><td class="memItemRight" valign="bottom"><b>in_collision</b></td></tr> -<tr class="separator:a68efc45c0a66e4652697146e18c8a570"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a88dd2fd1f2dc0ef251a079d3e74622fe"><td class="memItemLeft" align="right" valign="top"><a id="a88dd2fd1f2dc0ef251a079d3e74622fe"></a> - </td><td class="memItemRight" valign="bottom"><b>collision_angle</b></td></tr> -<tr class="separator:a88dd2fd1f2dc0ef251a079d3e74622fe"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a1c3ac639a2b0773d99043c2b911970d7"><td class="memItemLeft" align="right" valign="top"><a id="a1c3ac639a2b0773d99043c2b911970d7"></a> - </td><td class="memItemRight" valign="bottom"><b>near_start</b></td></tr> -<tr class="separator:a1c3ac639a2b0773d99043c2b911970d7"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac19a932655f1f9a6e8065df37bbe9f80"><td class="memItemLeft" align="right" valign="top"><a id="ac19a932655f1f9a6e8065df37bbe9f80"></a> - </td><td class="memItemRight" valign="bottom"><b>num_toggles</b></td></tr> -<tr class="separator:ac19a932655f1f9a6e8065df37bbe9f80"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aa7af900e93ae4b180e89e7d48e242033"><td class="memItemLeft" align="right" valign="top"><a id="aa7af900e93ae4b180e89e7d48e242033"></a> - </td><td class="memItemRight" valign="bottom"><b>lap_times</b></td></tr> -<tr class="separator:aa7af900e93ae4b180e89e7d48e242033"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a3eb59d52fbc4d767e2c7ed0c64b8650f"><td class="memItemLeft" align="right" valign="top"><a id="a3eb59d52fbc4d767e2c7ed0c64b8650f"></a> - </td><td class="memItemRight" valign="bottom"><b>lap_counts</b></td></tr> -<tr class="separator:a3eb59d52fbc4d767e2c7ed0c64b8650f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a476dab30a81d8794d89f0bd85b3e7884"><td class="memItemLeft" align="right" valign="top"><a id="a476dab30a81d8794d89f0bd85b3e7884"></a> - </td><td class="memItemRight" valign="bottom"><b>map_height</b></td></tr> -<tr class="separator:a476dab30a81d8794d89f0bd85b3e7884"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2f4a85b1b83b203bc5549b6bff0bf2d1"><td class="memItemLeft" align="right" valign="top"><a id="a2f4a85b1b83b203bc5549b6bff0bf2d1"></a> - </td><td class="memItemRight" valign="bottom"><b>map_width</b></td></tr> -<tr class="separator:a2f4a85b1b83b203bc5549b6bff0bf2d1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a1ec9b2bc2142334a2b8a2d028adcace8"><td class="memItemLeft" align="right" valign="top"><a id="a1ec9b2bc2142334a2b8a2d028adcace8"></a> - </td><td class="memItemRight" valign="bottom"><b>map_resolution</b></td></tr> -<tr class="separator:a1ec9b2bc2142334a2b8a2d028adcace8"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7456387ff1b9e6832dd205ed891bc750"><td class="memItemLeft" align="right" valign="top"><a id="a7456387ff1b9e6832dd205ed891bc750"></a> - </td><td class="memItemRight" valign="bottom"><b>free_thresh</b></td></tr> -<tr class="separator:a7456387ff1b9e6832dd205ed891bc750"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2e1491609720111b7065748ad37e8512"><td class="memItemLeft" align="right" valign="top"><a id="a2e1491609720111b7065748ad37e8512"></a> - </td><td class="memItemRight" valign="bottom"><b>origin</b></td></tr> -<tr class="separator:a2e1491609720111b7065748ad37e8512"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a0e6a85d0de7165369ce8fcd18be9d885"><td class="memItemLeft" align="right" valign="top"><a id="a0e6a85d0de7165369ce8fcd18be9d885"></a> - </td><td class="memItemRight" valign="bottom"><b>port</b></td></tr> -<tr class="separator:a0e6a85d0de7165369ce8fcd18be9d885"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aa3367f6570455c5311e075b4b9f91c56"><td class="memItemLeft" align="right" valign="top"><a id="aa3367f6570455c5311e075b4b9f91c56"></a> - </td><td class="memItemRight" valign="bottom"><b>context</b></td></tr> -<tr class="separator:aa3367f6570455c5311e075b4b9f91c56"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:afc0972d462163211e9b9e47a2844e64f"><td class="memItemLeft" align="right" valign="top"><a id="afc0972d462163211e9b9e47a2844e64f"></a> - </td><td class="memItemRight" valign="bottom"><b>socket</b></td></tr> -<tr class="separator:afc0972d462163211e9b9e47a2844e64f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a23d4e3c74f19290571ce06f57c68de01"><td class="memItemLeft" align="right" valign="top"><a id="a23d4e3c74f19290571ce06f57c68de01"></a> - </td><td class="memItemRight" valign="bottom"><b>sim_p</b></td></tr> -<tr class="separator:a23d4e3c74f19290571ce06f57c68de01"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aeb9374dba01e21d5fd618d0736573f77"><td class="memItemLeft" align="right" valign="top"><a id="aeb9374dba01e21d5fd618d0736573f77"></a> - </td><td class="memItemRight" valign="bottom"><b>all_x</b></td></tr> -<tr class="separator:aeb9374dba01e21d5fd618d0736573f77"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aebf4ff49efe573bdbe29b190528256f1"><td class="memItemLeft" align="right" valign="top"><a id="aebf4ff49efe573bdbe29b190528256f1"></a> - </td><td class="memItemRight" valign="bottom"><b>all_y</b></td></tr> -<tr class="separator:aebf4ff49efe573bdbe29b190528256f1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab629b0d75ade059476f2bf4237798101"><td class="memItemLeft" align="right" valign="top"><a id="ab629b0d75ade059476f2bf4237798101"></a> - </td><td class="memItemRight" valign="bottom"><b>current_time</b></td></tr> -<tr class="separator:ab629b0d75ade059476f2bf4237798101"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a34545b59df83e520f7c3031106c5c954"><td class="memItemLeft" align="right" valign="top"><a id="a34545b59df83e520f7c3031106c5c954"></a> - </td><td class="memItemRight" valign="bottom"><b>collision_angles</b></td></tr> -<tr class="separator:a34545b59df83e520f7c3031106c5c954"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab224af4cddca309ab854b9c26f40868f"><td class="memItemLeft" align="right" valign="top"><a id="ab224af4cddca309ab854b9c26f40868f"></a> - </td><td class="memItemRight" valign="bottom"><b>near_starts</b></td></tr> -<tr class="separator:ab224af4cddca309ab854b9c26f40868f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ad6e649f8338d89746244b9e6c4bce71b"><td class="memItemLeft" align="right" valign="top"><a id="ad6e649f8338d89746244b9e6c4bce71b"></a> - </td><td class="memItemRight" valign="bottom"><b>toggle_list</b></td></tr> -<tr class="separator:ad6e649f8338d89746244b9e6c4bce71b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab5e2d4e41534916caaa9fa2a94979053"><td class="memItemLeft" align="right" valign="top"><a id="ab5e2d4e41534916caaa9fa2a94979053"></a> - </td><td class="memItemRight" valign="bottom"><b>start_x</b></td></tr> -<tr class="separator:ab5e2d4e41534916caaa9fa2a94979053"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a0959bbc593917d214789b9785a8f8b0c"><td class="memItemLeft" align="right" valign="top"><a id="a0959bbc593917d214789b9785a8f8b0c"></a> - </td><td class="memItemRight" valign="bottom"><b>start_y</b></td></tr> -<tr class="separator:a0959bbc593917d214789b9785a8f8b0c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6f808319f37385f5f8f8e9198ad208f6"><td class="memItemLeft" align="right" valign="top"><a id="a6f808319f37385f5f8f8e9198ad208f6"></a> - </td><td class="memItemRight" valign="bottom"><b>start_theta</b></td></tr> -<tr class="separator:a6f808319f37385f5f8f8e9198ad208f6"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a894820aea9c0b9c750f165798ab60ba0"><td class="memItemLeft" align="right" valign="top"><a id="a894820aea9c0b9c750f165798ab60ba0"></a> - </td><td class="memItemRight" valign="bottom"><b>start_xs</b></td></tr> -<tr class="separator:a894820aea9c0b9c750f165798ab60ba0"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae28edcae46735a4e684140aa05fd099b"><td class="memItemLeft" align="right" valign="top"><a id="ae28edcae46735a4e684140aa05fd099b"></a> - </td><td class="memItemRight" valign="bottom"><b>start_ys</b></td></tr> -<tr class="separator:ae28edcae46735a4e684140aa05fd099b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a82dcb09e9adb3f73dc1c61a3e406dfe9"><td class="memItemLeft" align="right" valign="top"><a id="a82dcb09e9adb3f73dc1c61a3e406dfe9"></a> - </td><td class="memItemRight" valign="bottom"><b>start_thetas</b></td></tr> -<tr class="separator:a82dcb09e9adb3f73dc1c61a3e406dfe9"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a50b6912954290c4c5fb9165fc0103628"><td class="memItemLeft" align="right" valign="top"><a id="a50b6912954290c4c5fb9165fc0103628"></a> - </td><td class="memItemRight" valign="bottom"><b>start_rot</b></td></tr> -<tr class="separator:a50b6912954290c4c5fb9165fc0103628"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a59e7a0edc30712fb482c246e01a72368"><td class="memItemLeft" align="right" valign="top"><a id="a59e7a0edc30712fb482c246e01a72368"></a> - </td><td class="memItemRight" valign="bottom"><b>double_finish</b></td></tr> -<tr class="separator:a59e7a0edc30712fb482c246e01a72368"><td class="memSeparator" colspan="2"> </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 </td><td class="memItemRight" valign="bottom"><b>metadata</b> = {'render.modes': []}</td></tr> -<tr class="separator:a33621c905b3ce566450c77b923ef79ee"><td class="memSeparator" colspan="2"> </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 & Destructor Documentation</h2> -<a id="ab53974d19ae639eaa8d922db303d21c4"></a> -<h2 class="memtitle"><span class="permalink"><a href="#ab53974d19ae639eaa8d922db303d21c4">◆ </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"> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_path</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>img_ext</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>rgb</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>flip</em> </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  <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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±f(s#7dCG3*3dUe5W)R+h~sn)i(dyB)L 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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 zcmY*e1ymG3yCtL*5J^Fi?k+)KLAnuGkd|%`kS-MwP(r#(SUMz@4y8MnPU+4?8s6}q z^Pl$~9Cnx8*_rv~yI<Tpq3Wt~k8q#jqM)EWQjnL{0MBdSF8~`8JQDI_@PQ{xQzbcR zl)L-i%%;2;6cj3J1!+kw&(ys%FD)&(+nS8r$L3v+Nu*^Ep-TKjBRu<p*{BZ;)Uz?& zhHJTg)P4-(alR;!W{@1I&2kCr%tU=QC!sP-UXvfn<A~!Z9r7YS1iSjh*-hJI1jmaP z^B=|#uBsX6P`4uSnj(myThWeBnQ}Be&L@dXA@VJ~j}kA`<q|bs4D)?q!9Wv}`p?TS zW7Y1#!S#s}{rX|kA8+;b$9|bel_30fCO9f8E8!Y7nJ&!xCvVJie6P=WC@3i67<+&8 z3=U2d+Ef{~NHoME0%T-+HySV2Q}jr*p4ECD{hXNnRb5T$2bE#jI-x23-<AHmsJi2V z*TyqiIyyHFsqEU?+FurZ@kA$VC#gX!7%&Z}%3G)#WigAGsOXO#a~Y#x{AZ(Z{-#{N ztAElmG6k?SQLktovrcPR(>LVU_bxqM-H|$1s|YG#4VHR%=$~Yw7u?*03egCoChyZx zIQt(Zt(=T>>XhW<Z$(9HV3M`Lv{!oC#fJQ*y$FQXC2}he4i_lVgVWN|q9rNIT3RyN zO%!LTqzKxs#Y9JQ3kos{3sZOsW@HFDJe{w1Ya1Pn)-KU=-bS#rwzgUiXQB!U3WiY% zMYOiQhCa*6%HjuKZ@*J&>*xp)c3oduU;hf`A4n0}`27hTrP!b@x@OT|zvMccQs_tD z+FYYoWusH1(MYBwI{XbY0|N%wg0?oPR51S9?sR3?Qvuv0<<3_Jjp(uBj||F9F$M<* z-@bi2T%s@Je|upCHIlhx5f^Xn&&~&nWcdA~AfOgsZ4Z6Yu?+??f`hQKva%g7>^MJK z@j`CCiK=&Tb={gQqc$=!>R3l#U0o$4Cl85<c~V_n?djuFBtAqULzhd%YmN<!GH7rQ z7xVd-Z^#WMO@-WD$C!0R6pT)k8Y&$uG&#GtXu$U7>S7KL-;a)tdTyk7Y|b|bwcOpl z+8D~%=uhI?U1&;4Oe9z7hL(GsSiY8$QczMdTkVbtBj-U=h(0_ySvg+oOMT^`3Ke8! z{gy7~Gg|9x7H&Jt)O@i{X<%qLU1jqmn%?<%wMQfJVkHui$YX}7Uv2+)f4+g;us+sd zw%SHIGB`MRW>eT{L39Rgmv>pg%ta>~wzQEEU<tN3SL=+fqoYIg<jHt%4h%MuEl03D zS*B)SKt)PQ+A$&EvML`P9sSbxoIBw5f{8<~>fP^;sJ7@`c63eB-rn`GiHYYfE}`@c z3<@7(qoT4Dul5@b5TlH0>FkfF#SNnA6}+#{%e5NZ9atC{WueVrL!)5j(n|;r&ztBT za}8D12-bn2A+=-yJMAR5x`qZNiKt0e6)-LiKu2rsV7`F~RYOtn8@)m_a>3_70TmS$ z%&K8xk_9|N?=W2f>)%s~rZ=p8FIoTo@9VmV5%-&jh=|cYfmqPH#d<d-w4AH61296N zw6t_IS0x1zu{BkmUFCmsX?oY<e^YO6VnUM!3Alw1W>xunt7>V*uI}!#&o}$&?@j&w zEuj!izXj&fkdXLjZehUygTY8fl2TLIQ8mC%xyVel16$CSFY*9N8rIg<QP*TU-nZ$n z+}y(B3~@hJU48w89Y5xRJ62JR+}vDK8=KIyv^3Tdg&0O#3r3aXb^!Fg`38^aax<*X z&d&4m^Zd91&Af>118^Xwj*g}OIG~l5D#ypiy|9v6yErm8kb`tiYm$;EJ{E?*$(Aj5 z+tE%J^=ds^3{V3x(cIj;X4@jNw7c71?J%1t?8>+|TVsXX9J#*SDO)Q9W{bRELizLO z&+cpufsc<5+$@31I6|2*8yrWfh}$>A2KP5*MoqL1An2ad8K{osswg4KomXW02L_Tv zy^h&V7XV;T<mBYWWA!)_V$#w|qWV&BQ$|NdqEb_-c=`CCHj`z>I&5QwP&N_wU3o1n zVi4<p78f&~3fO8@*_0dufM@`d{_Rdnfe%3tLn&%l%`7c*|E>Ky{uvVW<^n<_E-v2Q z)pata2Kl?bE_=2=-!m{!@=N=p>&76D@A-REQ&a1apE6O`8(#-|dj78V#MIW+k?5<f zbcTCfB3UL&4cW>|hKJQ>s%)eH#_Iy^{6p7LQ&YKld1?9hD!UVU`T_@b)J-%6?Iyxh z(?odOwzYV9d29V|L}+MeWO`MS`9m3$;@@ANJBPDt>U_w`;|~i9BNuj|XVWfzAt)FR z!o;rF(QtWrxfLL)ySJBCSU72E=^fk`3kz#71EMA=DVenW%JcBW-OWKjo%bp0#l?lF z-(_rLqv$vs3K9~?mrhPj+GR#637m$#o?ko0^54)kHZ@U*dGiC8tOLju8@GUf|CirO zPDxn_+^kpQ82&no*_osU_#L@7OBN6iaC^Q&0MeDP-z7gf=0k}BEp2%wYwIi~5s~EL zV)kS~hi?f9WPw-&n7`ZGrJ<G}cF8FyvecRRZPRs*d~Hvbch(k{j5_k)WWRJ-#Ree0 z-Z8!#O&?ZVtsD}k<Kue*JPmgBUAZUl^XI9S0EnffrG=jQ)<`zieLD2^)+o~EXg*)Y zt9Dw9fWa)11mX~CuRQkY1q9+G12Jt@Yt}jRtA}${DCg$qZANo&tcKEMvefhAczAhD zZ!S*@A43=zU{m#iP7BK4NjVOY$Q;M{dgU|`5@4LNii)w)?DuYZg&RkAkNvs7qcA1p z?(_+qZNA2dx-FPsW1-2XkRPU@0A|vK+mZk<`R&yg5e-SXR*~qz_AW7IU^%yJJn0pp z(sFWU_V)b^2hDw_JCiv0_}YBw^a{m#a9ln<K1_V7{7^;=v_O#9cgKs!Vwlt{cc;oh z5n0;VQL?tqXI-3|qte&c7j&G<Kf@D6`&2p-!eTdBIv}*@t7+=*70^qFUC4*obOwEq z{|#Fc_ks6UZkR--6?riWHDquS{y>sKowcu8Axq@V@@q9{q(aIo4{Aq8r{N}_HG3^) ze3(W-6m^V}T{i2#@wQ;a*0vU_;mjJF>Ct8+`oka5;?xYu$G~_!k{pL^MAT#Qa}EF# z)APfL#1uR8tP6n;2$m*w4A7#Ky7;+WA{_+nUj`Qx@StOfIB$(MjS}#xf4lM}o*pq{ zHn&_~T0X`J3L<jbe*5_OtvIgC$fJSJy>xUdG<P>n4}H$Wztbl1_k>46O3yJJrP|(= zvFz=#+bk|n(9zZU2w_25;9<`wWwhfhf08{|GdtUN{jgIVf{w+RKYIDkZ6u5KrsJIo z&eF;lX;ObkYpYevr!Qad?uURU7!}Jf@zxdrh$OKmjP~n)r5G+Q)KK5Q{{>S?!4%QX z%OI~}X=<Fg4UiJ&vyl9wxxYAMfyjSkia_v2)0bQH;fQz`b^mQ^DO!Gns;nG#bm}I< z7_;>j=5IQjTUAq&<z^>mUeTg<Qm62Qh;tae^LlwDU@T1neQkX}+1F2p*KPv;_!yU& z*|RYIZdCzQT-?DeNA-@!TC=rshqUf`&B>es14FH+x7Q5084k?sxVh?Bge$AN<Kp6m zhFzluE%Obgt7xad8bcE6o1X>>!4h=zadE%3v`sBeCbx`~=rdyx*xrq}eeLb|UQpY> zWwt+O$Q&ml*R_Gjr?L9|(cN_W68GUkY&hlYNU^S1<|+Zm6f|f1YlKf+W#NQ0%+v(W zSEJHzQR=S8sSB>J^E`dN7wi;qdupN~cQ#&!KkdjUG;sV<UY>e!g7wRCARzyZlu^(2 z!@$9`6zB8z*n6`={%Zp@R8;mhv)ZpBQ-p{MgIKPRHu}5R*7o+&do%I7bHZ^vX7xJ~ zNhT&%Rtg`G^o*)nC>6AtT0CwXl;f?j9Qq=|`EMNH{B(2_r`yv@JG1yYI(bA9#Ia;% zW^}~gNW0f~!P)Z&-ukRZW!w={Q<s}$@`GhieSHnUb|MTor8tF52UD9LJV2Vx*VEB6 z8jZk31OE=D1uLgtlQen5mzVx*@jDt&nypw-^I>7>FL)~z*T>7kc`P!-oxq&2GjNV+ zxE<?C*O_^H$lyb&sq~(h7Fq__YRUm_uPivRl`c6GN5|gdHGh6P?a1@<El(c^<+Bb1 z+@5^*D>5O9J~T7)*_SV#N09;7H!r`;%`qXjPB65!bK5&rN$|u--T}YZPrH0>@`3#H zay@-ttdip2K0Y2=vq1D+6!ykJ`GVE|PV5m^8Q0<20qajvqZk0+u;)!thleH)pU+87 zx)kz{TV7tWCJWVAO;^wq8>KN<&o^OCmRS)J{vrvuD{cMpR3a>vi`!vFXm|0B5(j7O zTk!<$HzuJo93vy+caDy&gK3&PJR>UHbu=`}7ifwW0FHmjDf=!K@6g&$Ehw-bUMB}) zaYg^&PW$@kF3V0B^HXAT^G6WYc9XZkc9Z+R-btpGu5F5?2tH$ATz_cnFZ`NZBM@7& z`Aenivv|&DtzRF>O;_gm5<p5+uaEmO`cufd!YH02cUc@Oe=4*i;SVeaW+d%*b^je? z$d2W@DM2!yM#aT_Z}1@>NSS>?B7jLpcQl*L_&AsS6O$V5=Bx(>h}P+bGb!5%Vgkm` zR(~Dag3IVwSkln3ay5(MWwx+zdV><1<3EOm@_@ohFL3(Ybz^@NPSs>GUEvu)-J)o| z%4{Of0nEjHDpXBJYx>gI&+W5Qi&(auu*k-6mQwLs=O00Melq8Aq+r#cg{H;TK!W<m zM8_No3S0H@*?bxr`%lQv1#Yft+J?$vO4rEwmy;_Vu5LgqmVQH5S4BZfOTfd&Hv-R5 zlqq1(G;Xn)ob>tkK)d0j%)VV-7t<E;qtbFfesrudN$i#Oqzh}>bfsCX7hlXHN?9B! zZM4={iyVJH{dlf`jLprAkce9aFeW@Pk<WhC{o4?PT5+Y*y*^%(gD{sJ3jo=4SsJ6# za&KuA*7AWvZpWbcnoLsiRU+@&B7j?b>6#X0yMTo-3p2C%;S$u`T-5yT*5<A5I08;z z@*^!RIJj%$rN~T$!>si9Jo<wfxyG@z_Nl25t`;g#{=NEB>kKDdsy@>z_##IHU0mae z4S<I$q8}gpvje?G-}X2iaE4B`y)XdBQzqKwSNPBB+h^dnh$5>JJK=GBlitZ3yU74v zH(Rdt{?N6WMGde?GpbkaaWJJbJ}XsY5qJBaU?7pRiY_WH9>YRF07t;BR{{v9xB5DJ zJAJP_o-gk=hebR~xlc78IPzv_WqWbonbXtJwnjEKGWDlYfQ3kCA$KhI0cm2=I|`Em z!}REsbtShE<)-6>k9TK1(!(huxAg|?D&I*`wcNx5TxLIVm#Hg!p<I9};^Ej?WwYO( zat0YpZz`}8USs6kr;3V#5Iz;D?Jl9gh>NVvMG!&-1`jV!ABu`WHk!_EJ3eEe15-Y7 z!({7xgn}2E5=L@W(0~3EAHHh%1o6&k?_;A<QqpwaCl>lSLDr6h1|muwdM;110gu78 zn|wY3Pu0M|xrp~Ub9vjcU`(zNNtlb^E-h7kfZ<hPJ>uwpxm91f7AtSQO3>b!&H!+V zk6&FMPv?os<2Q~LO@H(UE9LxjQlConrPSUu!{zVk%AWH}S#H02EL7Acu(Ly=)>yse zKY<2w^N>8<%6j_+QEjLF^Z2BsKoDIe`mZW%#<0Azl@5hWFAEt!U!vROO)nRD`=>W< zaZ3;X&_2j>8^Hk*ZEIUFj?^{_m~C~hhVtmBOPpP|B9c1bT58hee7DjsRn$vmE>v~s zaV~<_tn)+H*a-)t+QMsZ@9M!1RHB|yacnJSN6V7S6j9z0wYkL)TwG#3z5OGangkYo z`5xCby0qYFYV5D<KmVF%MH$cW<Vx@K8IOiGT6}zNvHlq~D0YmZ*AlSm5-n10%YH^s zSI%4RPD&8f7-gY33_r8886+BwJd;vd7^Y{uwQN&d>cY*f&YI~HW;d^|PqzfDhhI4O zA=$zvG7c}c@-l22LRsbIo>g6B;m;t{+;^w4>~PAYcX9!Z&#O)$#P03*+ZOD`@i#8S zPVtk(5MeGcHu9m#{mWrCO;TdwU!F&%K#gbv{px>C`DXwtRtXm}HW;w(qpO3KO0zC} zcJ_8bZa*oc+FGVgZX;;DK?AC_bGX)*P-!<=$;3iQL2)$iv7OSO)W^lnZVu#%d#Z7M zWG3=q^LLfaSU$8UK7Oe4knl!Rcyk<i3VMA6C~F)X+}uAv6HUsYr?txiTXUMPj|2Y# zk~&rI#s=E^{tSrm%1jaZ{hpe5Eac^}K_6@mxC=8euAu!?W|a5J@-jJ)4S;L{bKjd$ zPJI~#_>A+;M2SY^K!3maM6s@?m)GBe12ublcHE%PSOm`r$;i4kN3zFz^Kx<y4+8E| zkVq>v-{*XmAlqLs04fYR@a2PpAz<8ev)?Pw=y&$@egE}~J4eSJGT7HgM@##eM(XR* z-kyrQd`RK#hJ*cFZIsPe?%%bwj*!Q6FJ0HCvzI_?-7{5gHoo29cO~fP=m>NGR6<J1 zzF#J7hlhtRUcC62lapiWwrO@p&gyLjIvcXFmVf|XUtf7;Wssl6^WUdUPfwd$T8{pd z!Gk6PsRU46pp29tRyGDwf`fuE^lKa~j+Q$BBGuz28$6sw$Hwa3|NYGB0FI~1X))dV zbh}_Q;<;FFEQ@AHcsLANq}`v$69~R`±f(s#7dCG3*3dUe5W)R+h~sn)i(dyB)L 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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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </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"> </td></tr> -<tr class="memitem:a989dd691fd4c08d0f18d6c241862d03c"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a12c4b2f39bda5dd3a1ea14e70e4370cc"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:ab11345c77e843234e6a71f3f0293d4f5"><td class="memItemLeft" align="right" valign="top"><a id="ab11345c77e843234e6a71f3f0293d4f5"></a> -def </td><td class="memItemRight" valign="bottom"><b>get_increment</b> (self)</td></tr> -<tr class="separator:ab11345c77e843234e6a71f3f0293d4f5"><td class="memSeparator" colspan="2"> </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> - </td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr> -<tr class="separator:a8fd8d9f11c319090584c221e51aa4975"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae57ad1092f12be1967de4853eca1327d"><td class="memItemLeft" align="right" valign="top"><a id="ae57ad1092f12be1967de4853eca1327d"></a> - </td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr> -<tr class="separator:ae57ad1092f12be1967de4853eca1327d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2aa400b42babfa82f677356aaa16a0f4"><td class="memItemLeft" align="right" valign="top"><a id="a2aa400b42babfa82f677356aaa16a0f4"></a> - </td><td class="memItemRight" valign="bottom"><b>std_dev</b></td></tr> -<tr class="separator:a2aa400b42babfa82f677356aaa16a0f4"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a02bf0c833e93628643a20cceeb33b029"><td class="memItemLeft" align="right" valign="top"><a id="a02bf0c833e93628643a20cceeb33b029"></a> - </td><td class="memItemRight" valign="bottom"><b>eps</b></td></tr> -<tr class="separator:a02bf0c833e93628643a20cceeb33b029"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af21e0a0ddd2fc95ec4291db6b33cd591"><td class="memItemLeft" align="right" valign="top"><a id="af21e0a0ddd2fc95ec4291db6b33cd591"></a> - </td><td class="memItemRight" valign="bottom"><b>theta_dis</b></td></tr> -<tr class="separator:af21e0a0ddd2fc95ec4291db6b33cd591"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af08e1ef6b6397c51fdd3e612dceb17b5"><td class="memItemLeft" align="right" valign="top"><a id="af08e1ef6b6397c51fdd3e612dceb17b5"></a> - </td><td class="memItemRight" valign="bottom"><b>max_range</b></td></tr> -<tr class="separator:af08e1ef6b6397c51fdd3e612dceb17b5"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a68ab73d8b055703de7c4eb33ec54520a"><td class="memItemLeft" align="right" valign="top"><a id="a68ab73d8b055703de7c4eb33ec54520a"></a> - </td><td class="memItemRight" valign="bottom"><b>angle_increment</b></td></tr> -<tr class="separator:a68ab73d8b055703de7c4eb33ec54520a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aabde525512f31433f532639175f50ba3"><td class="memItemLeft" align="right" valign="top"><a id="aabde525512f31433f532639175f50ba3"></a> - </td><td class="memItemRight" valign="bottom"><b>theta_index_increment</b></td></tr> -<tr class="separator:aabde525512f31433f532639175f50ba3"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a12a635318c521153364d75b103905673"><td class="memItemLeft" align="right" valign="top"><a id="a12a635318c521153364d75b103905673"></a> - </td><td class="memItemRight" valign="bottom"><b>orig_c</b></td></tr> -<tr class="separator:a12a635318c521153364d75b103905673"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aedb545195be8c54364e38ccf0c0b3d00"><td class="memItemLeft" align="right" valign="top"><a id="aedb545195be8c54364e38ccf0c0b3d00"></a> - </td><td class="memItemRight" valign="bottom"><b>orig_s</b></td></tr> -<tr class="separator:aedb545195be8c54364e38ccf0c0b3d00"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aecd0f30707bb8c82f59ae48ae2a478c2"><td class="memItemLeft" align="right" valign="top"><a id="aecd0f30707bb8c82f59ae48ae2a478c2"></a> - </td><td class="memItemRight" valign="bottom"><b>orig_x</b></td></tr> -<tr class="separator:aecd0f30707bb8c82f59ae48ae2a478c2"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a03e555b505b745f98dfd8a5cc4e1d013"><td class="memItemLeft" align="right" valign="top"><a id="a03e555b505b745f98dfd8a5cc4e1d013"></a> - </td><td class="memItemRight" valign="bottom"><b>orig_y</b></td></tr> -<tr class="separator:a03e555b505b745f98dfd8a5cc4e1d013"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae2c136fdda428bed3de1f7ab30cda72c"><td class="memItemLeft" align="right" valign="top"><a id="ae2c136fdda428bed3de1f7ab30cda72c"></a> - </td><td class="memItemRight" valign="bottom"><b>map_height</b></td></tr> -<tr class="separator:ae2c136fdda428bed3de1f7ab30cda72c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a53beebf974cdf3cb04dac5e4311b2f36"><td class="memItemLeft" align="right" valign="top"><a id="a53beebf974cdf3cb04dac5e4311b2f36"></a> - </td><td class="memItemRight" valign="bottom"><b>map_width</b></td></tr> -<tr class="separator:a53beebf974cdf3cb04dac5e4311b2f36"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a11d13f00e6d8a08d7b758f420ff464c5"><td class="memItemLeft" align="right" valign="top"><a id="a11d13f00e6d8a08d7b758f420ff464c5"></a> - </td><td class="memItemRight" valign="bottom"><b>map_resolution</b></td></tr> -<tr class="separator:a11d13f00e6d8a08d7b758f420ff464c5"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a617e6b987673100484c5fdb0c17c9848"><td class="memItemLeft" align="right" valign="top"><a id="a617e6b987673100484c5fdb0c17c9848"></a> - </td><td class="memItemRight" valign="bottom"><b>dt</b></td></tr> -<tr class="separator:a617e6b987673100484c5fdb0c17c9848"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6a2a4cc31c05bb623699e24df56d8989"><td class="memItemLeft" align="right" valign="top"><a id="a6a2a4cc31c05bb623699e24df56d8989"></a> - </td><td class="memItemRight" valign="bottom"><b>rng</b></td></tr> -<tr class="separator:a6a2a4cc31c05bb623699e24df56d8989"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a76ce07e27a1f3efecae222b25bfd3c98"><td class="memItemLeft" align="right" valign="top"><a id="a76ce07e27a1f3efecae222b25bfd3c98"></a> - </td><td class="memItemRight" valign="bottom"><b>sines</b></td></tr> -<tr class="separator:a76ce07e27a1f3efecae222b25bfd3c98"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aedc4121c126a5bcda9b5f321cb679208"><td class="memItemLeft" align="right" valign="top"><a id="aedc4121c126a5bcda9b5f321cb679208"></a> - </td><td class="memItemRight" valign="bottom"><b>cosines</b></td></tr> -<tr class="separator:aedc4121c126a5bcda9b5f321cb679208"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af63828a83efca93f50b04324fdd74820"><td class="memItemLeft" align="right" valign="top"><a id="af63828a83efca93f50b04324fdd74820"></a> - </td><td class="memItemRight" valign="bottom"><b>map_img</b></td></tr> -<tr class="separator:af63828a83efca93f50b04324fdd74820"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a301f79d5db56a5c5eeb44f33ac3d0b7d"><td class="memItemLeft" align="right" valign="top"><a id="a301f79d5db56a5c5eeb44f33ac3d0b7d"></a> - </td><td class="memItemRight" valign="bottom"><b>origin</b></td></tr> -<tr class="separator:a301f79d5db56a5c5eeb44f33ac3d0b7d"><td class="memSeparator" colspan="2"> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>pose</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_path</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_ext</em> </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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr> -<tr class="separator:a55ab0dc9841fe835d01b87b9b0fce3c0"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a54056154757449495862bb07f7fd4119"><td class="memItemLeft" align="right" valign="top"><a id="a54056154757449495862bb07f7fd4119"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_map_berlin</b> (self)</td></tr> -<tr class="separator:a54056154757449495862bb07f7fd4119"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac7855c2d63a63159b19ecc01f92194bc"><td class="memItemLeft" align="right" valign="top"><a id="ac7855c2d63a63159b19ecc01f92194bc"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_map_skirk</b> (self)</td></tr> -<tr class="separator:ac7855c2d63a63159b19ecc01f92194bc"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a38ed452c3c86c8812726a8524d1eb034"><td class="memItemLeft" align="right" valign="top"><a id="a38ed452c3c86c8812726a8524d1eb034"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_fps</b> (self)</td></tr> -<tr class="separator:a38ed452c3c86c8812726a8524d1eb034"><td class="memSeparator" colspan="2"> </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> - </td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr> -<tr class="separator:af13ee1aeb4326b4391e30f64ae267ca6"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5377c17def38ead4ba0fc005ba239b3a"><td class="memItemLeft" align="right" valign="top"><a id="a5377c17def38ead4ba0fc005ba239b3a"></a> - </td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr> -<tr class="separator:a5377c17def38ead4ba0fc005ba239b3a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac0c91b73132b25fce081ec9c11c91abe"><td class="memItemLeft" align="right" valign="top"><a id="ac0c91b73132b25fce081ec9c11c91abe"></a> - </td><td class="memItemRight" valign="bottom"><b>num_test</b></td></tr> -<tr class="separator:ac0c91b73132b25fce081ec9c11c91abe"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a31eb3b8ba28e16af8b39bd39c2254090"><td class="memItemLeft" align="right" valign="top"><a id="a31eb3b8ba28e16af8b39bd39c2254090"></a> - </td><td class="memItemRight" valign="bottom"><b>test_poses</b></td></tr> -<tr class="separator:a31eb3b8ba28e16af8b39bd39c2254090"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2958e581294bc423f58a1df94a030b9e"><td class="memItemLeft" align="right" valign="top"><a id="a2958e581294bc423f58a1df94a030b9e"></a> - </td><td class="memItemRight" valign="bottom"><b>berlin_scan</b></td></tr> -<tr class="separator:a2958e581294bc423f58a1df94a030b9e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:abfb81eedfc585622f28ba8f81443af80"><td class="memItemLeft" align="right" valign="top"><a id="abfb81eedfc585622f28ba8f81443af80"></a> - </td><td class="memItemRight" valign="bottom"><b>skirk_scan</b></td></tr> -<tr class="separator:abfb81eedfc585622f28ba8f81443af80"><td class="memSeparator" colspan="2"> </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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </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"> </td></tr> -<tr class="memitem:ae9c12c08c2f799504b6390b2d0ffda3f"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:ac8bbef5b8910515dd18c8a6624730898"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a557710400bb370a7509dbc17658eadd8"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a10f7c38d921015b5574ba0c858a245bb"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a05cb0faf5893e3cbed58cf20d0997bf7"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a0cbcdabef2cdda765d6721ca796ecfd0"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a1b9284f2e59c9000f10bd18e1ec6a9b3"><td class="memItemLeft" align="right" valign="top">def </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"> </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> - </td><td class="memItemRight" valign="bottom"><b>left</b></td></tr> -<tr class="separator:a10e0980201fca6f3392fc5c333a6ad99"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:acb665a6f4d150da3b2159b1cd86f4117"><td class="memItemLeft" align="right" valign="top"><a id="acb665a6f4d150da3b2159b1cd86f4117"></a> - </td><td class="memItemRight" valign="bottom"><b>right</b></td></tr> -<tr class="separator:acb665a6f4d150da3b2159b1cd86f4117"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab6f1d3bbdf185a2489a9c444413e72b6"><td class="memItemLeft" align="right" valign="top"><a id="ab6f1d3bbdf185a2489a9c444413e72b6"></a> - </td><td class="memItemRight" valign="bottom"><b>bottom</b></td></tr> -<tr class="separator:ab6f1d3bbdf185a2489a9c444413e72b6"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6e8e1a6e3f6c1f681f0fcbe6c04ffc27"><td class="memItemLeft" align="right" valign="top"><a id="a6e8e1a6e3f6c1f681f0fcbe6c04ffc27"></a> - </td><td class="memItemRight" valign="bottom"><b>top</b></td></tr> -<tr class="separator:a6e8e1a6e3f6c1f681f0fcbe6c04ffc27"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a46bb51fb7c77939d2c4b023cfe2ca867"><td class="memItemLeft" align="right" valign="top"><a id="a46bb51fb7c77939d2c4b023cfe2ca867"></a> - </td><td class="memItemRight" valign="bottom"><b>zoom_level</b></td></tr> -<tr class="separator:a46bb51fb7c77939d2c4b023cfe2ca867"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af71d3702c2e9fa5e8e109111b4a337ce"><td class="memItemLeft" align="right" valign="top"><a id="af71d3702c2e9fa5e8e109111b4a337ce"></a> - </td><td class="memItemRight" valign="bottom"><b>zoomed_width</b></td></tr> -<tr class="separator:af71d3702c2e9fa5e8e109111b4a337ce"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a769be9782b9452fd8c3c1984985e419b"><td class="memItemLeft" align="right" valign="top"><a id="a769be9782b9452fd8c3c1984985e419b"></a> - </td><td class="memItemRight" valign="bottom"><b>zoomed_height</b></td></tr> -<tr class="separator:a769be9782b9452fd8c3c1984985e419b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a0f6f622b6ffe98f7ee038c2ce72af276"><td class="memItemLeft" align="right" valign="top"><a id="a0f6f622b6ffe98f7ee038c2ce72af276"></a> - </td><td class="memItemRight" valign="bottom"><b>batch</b></td></tr> -<tr class="separator:a0f6f622b6ffe98f7ee038c2ce72af276"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae423459dd9ee2da53cf7929e4591e366"><td class="memItemLeft" align="right" valign="top"><a id="ae423459dd9ee2da53cf7929e4591e366"></a> - </td><td class="memItemRight" valign="bottom"><b>map_points</b></td></tr> -<tr class="separator:ae423459dd9ee2da53cf7929e4591e366"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a227e60c781a0e50f827ea2f4f11a3f85"><td class="memItemLeft" align="right" valign="top"><a id="a227e60c781a0e50f827ea2f4f11a3f85"></a> - </td><td class="memItemRight" valign="bottom"><b>poses</b></td></tr> -<tr class="separator:a227e60c781a0e50f827ea2f4f11a3f85"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8a458f2ce6a733888d1a6bfaab243f31"><td class="memItemLeft" align="right" valign="top"><a id="a8a458f2ce6a733888d1a6bfaab243f31"></a> - </td><td class="memItemRight" valign="bottom"><b>vertices</b></td></tr> -<tr class="separator:a8a458f2ce6a733888d1a6bfaab243f31"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ad3328a46ae8641dc60b24d53219ffcb3"><td class="memItemLeft" align="right" valign="top"><a id="ad3328a46ae8641dc60b24d53219ffcb3"></a> - </td><td class="memItemRight" valign="bottom"><b>score_label</b></td></tr> -<tr class="separator:ad3328a46ae8641dc60b24d53219ffcb3"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2ecadd7a3ea2a4525bd7b0b4d362db81"><td class="memItemLeft" align="right" valign="top"><a id="a2ecadd7a3ea2a4525bd7b0b4d362db81"></a> - </td><td class="memItemRight" valign="bottom"><b>fps_display</b></td></tr> -<tr class="separator:a2ecadd7a3ea2a4525bd7b0b4d362db81"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ad2c50c6e7d890771c7173768b6eef5c2"><td class="memItemLeft" align="right" valign="top"><a id="ad2c50c6e7d890771c7173768b6eef5c2"></a> - </td><td class="memItemRight" valign="bottom"><b>ego_idx</b></td></tr> -<tr class="separator:ad2c50c6e7d890771c7173768b6eef5c2"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4d90f610c36a7c83b054a2233276f36a"><td class="memItemLeft" align="right" valign="top"><a id="a4d90f610c36a7c83b054a2233276f36a"></a> - </td><td class="memItemRight" valign="bottom"><b>cars</b></td></tr> -<tr class="separator:a4d90f610c36a7c83b054a2233276f36a"><td class="memSeparator" colspan="2"> </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 & Destructor Documentation</h2> -<a id="a1b24abdbb4d13744255ebfdb3d509354"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a1b24abdbb4d13744255ebfdb3d509354">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>width</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>height</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">* </td> - <td class="paramname"><em>args</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">** </td> - <td class="paramname"><em>kwargs</em> </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">◆ </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"> </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">◆ </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"> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>x</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>y</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>dx</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>dy</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>buttons</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>modifiers</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>x</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>y</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>dx</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>dy</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>width</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>height</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_path</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_ext</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>obs</em> </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  <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 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 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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr> -<tr class="separator:acf1126ffde5105c455d850ff5286e4b7"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8de52029859d1c7731e5683d23ccf007"><td class="memItemLeft" align="right" valign="top"><a id="a8de52029859d1c7731e5683d23ccf007"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_get_vert</b> (self)</td></tr> -<tr class="separator:a8de52029859d1c7731e5683d23ccf007"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:acc104fececdc2724a5c5e8998100b633"><td class="memItemLeft" align="right" valign="top"><a id="acc104fececdc2724a5c5e8998100b633"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_get_vert_fps</b> (self)</td></tr> -<tr class="separator:acc104fececdc2724a5c5e8998100b633"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8ea861cfb3721bfa636ada8787cc3b85"><td class="memItemLeft" align="right" valign="top"><a id="a8ea861cfb3721bfa636ada8787cc3b85"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_random_collision</b> (self)</td></tr> -<tr class="separator:a8ea861cfb3721bfa636ada8787cc3b85"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab764a2cbf50b5cab461c5d6d017856b9"><td class="memItemLeft" align="right" valign="top"><a id="ab764a2cbf50b5cab461c5d6d017856b9"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_fps</b> (self)</td></tr> -<tr class="separator:ab764a2cbf50b5cab461c5d6d017856b9"><td class="memSeparator" colspan="2"> </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> - </td><td class="memItemRight" valign="bottom"><b>vertices1</b></td></tr> -<tr class="separator:a0585073942d116dea495e02c4b79f7f0"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a407fd8ac2cb6e79b84590434fc6d7c6d"><td class="memItemLeft" align="right" valign="top"><a id="a407fd8ac2cb6e79b84590434fc6d7c6d"></a> - </td><td class="memItemRight" valign="bottom"><b>length</b></td></tr> -<tr class="separator:a407fd8ac2cb6e79b84590434fc6d7c6d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4b7f88b6f9a80c8bef02a1856ac068de"><td class="memItemLeft" align="right" valign="top"><a id="a4b7f88b6f9a80c8bef02a1856ac068de"></a> - </td><td class="memItemRight" valign="bottom"><b>width</b></td></tr> -<tr class="separator:a4b7f88b6f9a80c8bef02a1856ac068de"><td class="memSeparator" colspan="2"> </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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr> -<tr class="separator:ae9a07469d0654888251d3bf6e76b6b49"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a084bad82c8b5d2879bcdd84ff4ddfbcb"><td class="memItemLeft" align="right" valign="top"><a id="a084bad82c8b5d2879bcdd84ff4ddfbcb"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_derivatives</b> (self)</td></tr> -<tr class="separator:a084bad82c8b5d2879bcdd84ff4ddfbcb"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2119ee12155d35d32dfdff6ef9948635"><td class="memItemLeft" align="right" valign="top"><a id="a2119ee12155d35d32dfdff6ef9948635"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_zeroinit_roll</b> (self)</td></tr> -<tr class="separator:a2119ee12155d35d32dfdff6ef9948635"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7be24bdc75f206643e35081eae280120"><td class="memItemLeft" align="right" valign="top"><a id="a7be24bdc75f206643e35081eae280120"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_zeroinit_dec</b> (self)</td></tr> -<tr class="separator:a7be24bdc75f206643e35081eae280120"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aaf4fa412b0c16cb6bc89dd58b36d8e44"><td class="memItemLeft" align="right" valign="top"><a id="aaf4fa412b0c16cb6bc89dd58b36d8e44"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_zeroinit_acc</b> (self)</td></tr> -<tr class="separator:aaf4fa412b0c16cb6bc89dd58b36d8e44"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a386d5445884c46ecec8205ada9a3a185"><td class="memItemLeft" align="right" valign="top"><a id="a386d5445884c46ecec8205ada9a3a185"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_zeroinit_rollleft</b> (self)</td></tr> -<tr class="separator:a386d5445884c46ecec8205ada9a3a185"><td class="memSeparator" colspan="2"> </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> - </td><td class="memItemRight" valign="bottom"><b>mu</b></td></tr> -<tr class="separator:a48626036e76ba11fd936f4de26bf6ce0"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a74cd8e77b722fb8d92a392a4fc2dcbc7"><td class="memItemLeft" align="right" valign="top"><a id="a74cd8e77b722fb8d92a392a4fc2dcbc7"></a> - </td><td class="memItemRight" valign="bottom"><b>C_Sf</b></td></tr> -<tr class="separator:a74cd8e77b722fb8d92a392a4fc2dcbc7"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6d3bbaee07094af4095dfd258cebd10d"><td class="memItemLeft" align="right" valign="top"><a id="a6d3bbaee07094af4095dfd258cebd10d"></a> - </td><td class="memItemRight" valign="bottom"><b>C_Sr</b></td></tr> -<tr class="separator:a6d3bbaee07094af4095dfd258cebd10d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7c0f434a69248caa58b34a50dbca3f2e"><td class="memItemLeft" align="right" valign="top"><a id="a7c0f434a69248caa58b34a50dbca3f2e"></a> - </td><td class="memItemRight" valign="bottom"><b>lf</b></td></tr> -<tr class="separator:a7c0f434a69248caa58b34a50dbca3f2e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac9ac96fd528006d18d309b0a49c3b8b9"><td class="memItemLeft" align="right" valign="top"><a id="ac9ac96fd528006d18d309b0a49c3b8b9"></a> - </td><td class="memItemRight" valign="bottom"><b>lr</b></td></tr> -<tr class="separator:ac9ac96fd528006d18d309b0a49c3b8b9"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a779b25a77fc53165bd39448ece8d9f7c"><td class="memItemLeft" align="right" valign="top"><a id="a779b25a77fc53165bd39448ece8d9f7c"></a> - </td><td class="memItemRight" valign="bottom"><b>h</b></td></tr> -<tr class="separator:a779b25a77fc53165bd39448ece8d9f7c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a90efa4ba6c24eb526afa67eceb153be2"><td class="memItemLeft" align="right" valign="top"><a id="a90efa4ba6c24eb526afa67eceb153be2"></a> - </td><td class="memItemRight" valign="bottom"><b>m</b></td></tr> -<tr class="separator:a90efa4ba6c24eb526afa67eceb153be2"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aebb331386dd83145c82d5bedf1cae5b1"><td class="memItemLeft" align="right" valign="top"><a id="aebb331386dd83145c82d5bedf1cae5b1"></a> - </td><td class="memItemRight" valign="bottom"><b>I</b></td></tr> -<tr class="separator:aebb331386dd83145c82d5bedf1cae5b1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab762929e3e5bb2db0c153a203ffe5273"><td class="memItemLeft" align="right" valign="top"><a id="ab762929e3e5bb2db0c153a203ffe5273"></a> - </td><td class="memItemRight" valign="bottom"><b>s_min</b></td></tr> -<tr class="separator:ab762929e3e5bb2db0c153a203ffe5273"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8089d918c83d2631fbd7550557049956"><td class="memItemLeft" align="right" valign="top"><a id="a8089d918c83d2631fbd7550557049956"></a> - </td><td class="memItemRight" valign="bottom"><b>s_max</b></td></tr> -<tr class="separator:a8089d918c83d2631fbd7550557049956"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a78c38627c81a0da299fcec08c600bfd1"><td class="memItemLeft" align="right" valign="top"><a id="a78c38627c81a0da299fcec08c600bfd1"></a> - </td><td class="memItemRight" valign="bottom"><b>sv_min</b></td></tr> -<tr class="separator:a78c38627c81a0da299fcec08c600bfd1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac16553e55f0c5e695994719ce1381b5b"><td class="memItemLeft" align="right" valign="top"><a id="ac16553e55f0c5e695994719ce1381b5b"></a> - </td><td class="memItemRight" valign="bottom"><b>sv_max</b></td></tr> -<tr class="separator:ac16553e55f0c5e695994719ce1381b5b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:adadbd3f491f56eaee3da91244cf8cc06"><td class="memItemLeft" align="right" valign="top"><a id="adadbd3f491f56eaee3da91244cf8cc06"></a> - </td><td class="memItemRight" valign="bottom"><b>v_min</b></td></tr> -<tr class="separator:adadbd3f491f56eaee3da91244cf8cc06"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a906eb31597c8374bb916f6644780dc0c"><td class="memItemLeft" align="right" valign="top"><a id="a906eb31597c8374bb916f6644780dc0c"></a> - </td><td class="memItemRight" valign="bottom"><b>v_max</b></td></tr> -<tr class="separator:a906eb31597c8374bb916f6644780dc0c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6d2c11940d9e0529f4ecba00d92fb7de"><td class="memItemLeft" align="right" valign="top"><a id="a6d2c11940d9e0529f4ecba00d92fb7de"></a> - </td><td class="memItemRight" valign="bottom"><b>v_switch</b></td></tr> -<tr class="separator:a6d2c11940d9e0529f4ecba00d92fb7de"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a90bf691612ff54dc56c54e03fe8a27f8"><td class="memItemLeft" align="right" valign="top"><a id="a90bf691612ff54dc56c54e03fe8a27f8"></a> - </td><td class="memItemRight" valign="bottom"><b>a_max</b></td></tr> -<tr class="separator:a90bf691612ff54dc56c54e03fe8a27f8"><td class="memSeparator" colspan="2"> </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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </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"> </td></tr> -<tr class="memitem:ab01149f5d7b76ca39aa8c2604c8a65db"><td class="memItemLeft" align="right" valign="top"><a id="ab01149f5d7b76ca39aa8c2604c8a65db"></a> -def </td><td class="memItemRight" valign="bottom"><b>zoom</b> (self)</td></tr> -<tr class="separator:ab01149f5d7b76ca39aa8c2604c8a65db"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6f0bedfc6f5801b398d5ce537d70c059"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a3d2948dc5b1a9d2a6c597a2850ac989b"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:ac8e5a2d90df8cd68463746be6e65bee8"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:aab35e83f0748c949b8e3a8414097d193"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a1b32a1178f97029e2833a1f127a2c114"><td class="memItemLeft" align="right" valign="top"><a id="a1b32a1178f97029e2833a1f127a2c114"></a> -def </td><td class="memItemRight" valign="bottom"><b>begin</b> (self)</td></tr> -<tr class="separator:a1b32a1178f97029e2833a1f127a2c114"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a30b46cfaa38e4956b06bfe9e98c3cbe3"><td class="memItemLeft" align="right" valign="top"><a id="a30b46cfaa38e4956b06bfe9e98c3cbe3"></a> -def </td><td class="memItemRight" valign="bottom"><b>end</b> (self)</td></tr> -<tr class="separator:a30b46cfaa38e4956b06bfe9e98c3cbe3"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7823f2901412f9075d7de211c14ad534"><td class="memItemLeft" align="right" valign="top"><a id="a7823f2901412f9075d7de211c14ad534"></a> -def </td><td class="memItemRight" valign="bottom"><b>__enter__</b> (self)</td></tr> -<tr class="separator:a7823f2901412f9075d7de211c14ad534"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a05542a21a9fa4adc9bcac8c77d37c2ad"><td class="memItemLeft" align="right" valign="top"><a id="a05542a21a9fa4adc9bcac8c77d37c2ad"></a> -def </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"> </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> - </td><td class="memItemRight" valign="bottom"><b>scroll_speed</b></td></tr> -<tr class="separator:a81dae02fbeac037bfcba9afeeac9a0ca"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aa8efeba81038cc57db534857a61b0d4b"><td class="memItemLeft" align="right" valign="top"><a id="aa8efeba81038cc57db534857a61b0d4b"></a> - </td><td class="memItemRight" valign="bottom"><b>max_zoom</b></td></tr> -<tr class="separator:aa8efeba81038cc57db534857a61b0d4b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aa5e9b9a6cca61ed9f997cd23ed1ea8b6"><td class="memItemLeft" align="right" valign="top"><a id="aa5e9b9a6cca61ed9f997cd23ed1ea8b6"></a> - </td><td class="memItemRight" valign="bottom"><b>min_zoom</b></td></tr> -<tr class="separator:aa5e9b9a6cca61ed9f997cd23ed1ea8b6"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2f36f3e98a13b1cb3513bb28ee49bfa3"><td class="memItemLeft" align="right" valign="top"><a id="a2f36f3e98a13b1cb3513bb28ee49bfa3"></a> - </td><td class="memItemRight" valign="bottom"><b>offset_x</b></td></tr> -<tr class="separator:a2f36f3e98a13b1cb3513bb28ee49bfa3"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a92ee123bd19379417dd3e36759024df9"><td class="memItemLeft" align="right" valign="top"><a id="a92ee123bd19379417dd3e36759024df9"></a> - </td><td class="memItemRight" valign="bottom"><b>offset_y</b></td></tr> -<tr class="separator:a92ee123bd19379417dd3e36759024df9"><td class="memSeparator" colspan="2"> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>axis_x</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>axis_y</em> </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 -> move(-1, 0)</pre> -</div> -</div> -<a id="a3d2948dc5b1a9d2a6c597a2850ac989b"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a3d2948dc5b1a9d2a6c597a2850ac989b">◆ </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"> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>value</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>value</em> </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  <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&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&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  <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&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&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> | -<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 </td><td class="memItemRight" valign="bottom"><b>begin</b> (self)</td></tr> -<tr class="separator:ae864ffed52c4415558b3bd15ad42c87a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a37149e6bf7b5e551f38201696d01794e"><td class="memItemLeft" align="right" valign="top"><a id="a37149e6bf7b5e551f38201696d01794e"></a> -def </td><td class="memItemRight" valign="bottom"><b>end</b> (self)</td></tr> -<tr class="separator:a37149e6bf7b5e551f38201696d01794e"><td class="memSeparator" colspan="2"> </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="-"/> 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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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 </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"> </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="-"/> 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> - </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"> </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> - </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"> </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> - </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"> </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> - </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"> </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> - </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"> </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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </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"> </td></tr> -<tr class="memitem:abadceb7d7c110cfa99df741b6ccae7e0"><td class="memItemLeft" align="right" valign="top"><a id="abadceb7d7c110cfa99df741b6ccae7e0"></a> -def </td><td class="memItemRight" valign="bottom"><b>init_gl</b> (self, width, height)</td></tr> -<tr class="separator:abadceb7d7c110cfa99df741b6ccae7e0"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4d55c63110f9bd78721a57e88e199cd8"><td class="memItemLeft" align="right" valign="top"><a id="a4d55c63110f9bd78721a57e88e199cd8"></a> -def </td><td class="memItemRight" valign="bottom"><b>on_resize</b> (self, width, height)</td></tr> -<tr class="separator:a4d55c63110f9bd78721a57e88e199cd8"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab20811f9348c1eb9beb45c95e6b1ba42"><td class="memItemLeft" align="right" valign="top"><a id="ab20811f9348c1eb9beb45c95e6b1ba42"></a> -def </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"> </td></tr> -<tr class="memitem:a3846658fe03460fa2f057e5b954fc28f"><td class="memItemLeft" align="right" valign="top"><a id="a3846658fe03460fa2f057e5b954fc28f"></a> -def </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"> </td></tr> -<tr class="memitem:abaf8b849008238cb0c17901b87329a71"><td class="memItemLeft" align="right" valign="top"><a id="abaf8b849008238cb0c17901b87329a71"></a> -def </td><td class="memItemRight" valign="bottom"><b>on_draw</b> (self)</td></tr> -<tr class="separator:abaf8b849008238cb0c17901b87329a71"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4478fc4a6666cf2d5cb5a3d574250404"><td class="memItemLeft" align="right" valign="top"><a id="a4478fc4a6666cf2d5cb5a3d574250404"></a> -def </td><td class="memItemRight" valign="bottom"><b>run</b> (self)</td></tr> -<tr class="separator:a4478fc4a6666cf2d5cb5a3d574250404"><td class="memSeparator" colspan="2"> </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> - </td><td class="memItemRight" valign="bottom"><b>left</b></td></tr> -<tr class="separator:aaca4f571369fc95e45355634d41fc24e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a9c3fdc6ea9bbe0407668091c4b6effb5"><td class="memItemLeft" align="right" valign="top"><a id="a9c3fdc6ea9bbe0407668091c4b6effb5"></a> - </td><td class="memItemRight" valign="bottom"><b>right</b></td></tr> -<tr class="separator:a9c3fdc6ea9bbe0407668091c4b6effb5"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a155af5e767867bdf910d8b0936219b5a"><td class="memItemLeft" align="right" valign="top"><a id="a155af5e767867bdf910d8b0936219b5a"></a> - </td><td class="memItemRight" valign="bottom"><b>bottom</b></td></tr> -<tr class="separator:a155af5e767867bdf910d8b0936219b5a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2145d5c781e3f33fefd7b46af2fadd69"><td class="memItemLeft" align="right" valign="top"><a id="a2145d5c781e3f33fefd7b46af2fadd69"></a> - </td><td class="memItemRight" valign="bottom"><b>top</b></td></tr> -<tr class="separator:a2145d5c781e3f33fefd7b46af2fadd69"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a1e58de5242a50711d35ef7d422466a66"><td class="memItemLeft" align="right" valign="top"><a id="a1e58de5242a50711d35ef7d422466a66"></a> - </td><td class="memItemRight" valign="bottom"><b>zoom_level</b></td></tr> -<tr class="separator:a1e58de5242a50711d35ef7d422466a66"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af92e414bc48f782207e5891ea82e3ad1"><td class="memItemLeft" align="right" valign="top"><a id="af92e414bc48f782207e5891ea82e3ad1"></a> - </td><td class="memItemRight" valign="bottom"><b>zoomed_width</b></td></tr> -<tr class="separator:af92e414bc48f782207e5891ea82e3ad1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2f88138801a909d8826f61792745409f"><td class="memItemLeft" align="right" valign="top"><a id="a2f88138801a909d8826f61792745409f"></a> - </td><td class="memItemRight" valign="bottom"><b>zoomed_height</b></td></tr> -<tr class="separator:a2f88138801a909d8826f61792745409f"><td class="memSeparator" colspan="2"> </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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </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"> </td></tr> -<tr class="memitem:a00925f5100ae8b2e556154e8935ea86e"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a038a0fc7e42df7827c175fdb3755f2c4"><td class="memItemLeft" align="right" valign="top">def </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"> </td></tr> -<tr class="memitem:a492d1949d030fb6b8665f399db5cdb4d"><td class="memItemLeft" align="right" valign="top"><a id="a492d1949d030fb6b8665f399db5cdb4d"></a> -def </td><td class="memItemRight" valign="bottom"><b>get_increment</b> (self)</td></tr> -<tr class="separator:a492d1949d030fb6b8665f399db5cdb4d"><td class="memSeparator" colspan="2"> </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> - </td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr> -<tr class="separator:ab651a44dfee70e7f2c2c8389b95e6e51"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a675555c29ace0ea5ddea92835965e654"><td class="memItemLeft" align="right" valign="top"><a id="a675555c29ace0ea5ddea92835965e654"></a> - </td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr> -<tr class="separator:a675555c29ace0ea5ddea92835965e654"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af5f188b7150482f5518461af89d61fe7"><td class="memItemLeft" align="right" valign="top"><a id="af5f188b7150482f5518461af89d61fe7"></a> - </td><td class="memItemRight" valign="bottom"><b>std_dev</b></td></tr> -<tr class="separator:af5f188b7150482f5518461af89d61fe7"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae0b3e8aec78d765f2c64fc274b9e447f"><td class="memItemLeft" align="right" valign="top"><a id="ae0b3e8aec78d765f2c64fc274b9e447f"></a> - </td><td class="memItemRight" valign="bottom"><b>eps</b></td></tr> -<tr class="separator:ae0b3e8aec78d765f2c64fc274b9e447f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aad699977c807e3ad150b6dac8b2bb1a0"><td class="memItemLeft" align="right" valign="top"><a id="aad699977c807e3ad150b6dac8b2bb1a0"></a> - </td><td class="memItemRight" valign="bottom"><b>theta_dis</b></td></tr> -<tr class="separator:aad699977c807e3ad150b6dac8b2bb1a0"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a510e60d159e716bcd62b54dac8a69066"><td class="memItemLeft" align="right" valign="top"><a id="a510e60d159e716bcd62b54dac8a69066"></a> - </td><td class="memItemRight" valign="bottom"><b>max_range</b></td></tr> -<tr class="separator:a510e60d159e716bcd62b54dac8a69066"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7cf918616a14c3d8f76bc359cf2f1c4c"><td class="memItemLeft" align="right" valign="top"><a id="a7cf918616a14c3d8f76bc359cf2f1c4c"></a> - </td><td class="memItemRight" valign="bottom"><b>angle_increment</b></td></tr> -<tr class="separator:a7cf918616a14c3d8f76bc359cf2f1c4c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a52a218f72d96e62281f00e3aa01f6616"><td class="memItemLeft" align="right" valign="top"><a id="a52a218f72d96e62281f00e3aa01f6616"></a> - </td><td class="memItemRight" valign="bottom"><b>theta_index_increment</b></td></tr> -<tr class="separator:a52a218f72d96e62281f00e3aa01f6616"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a6fb0a8e58e42af2934c5f3e35ab3488e"><td class="memItemLeft" align="right" valign="top"><a id="a6fb0a8e58e42af2934c5f3e35ab3488e"></a> - </td><td class="memItemRight" valign="bottom"><b>orig_c</b></td></tr> -<tr class="separator:a6fb0a8e58e42af2934c5f3e35ab3488e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac1a4dcaf191c8308accbcf86999efd5c"><td class="memItemLeft" align="right" valign="top"><a id="ac1a4dcaf191c8308accbcf86999efd5c"></a> - </td><td class="memItemRight" valign="bottom"><b>orig_s</b></td></tr> -<tr class="separator:ac1a4dcaf191c8308accbcf86999efd5c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a49263002630bb21764217caa6c3314b7"><td class="memItemLeft" align="right" valign="top"><a id="a49263002630bb21764217caa6c3314b7"></a> - </td><td class="memItemRight" valign="bottom"><b>orig_x</b></td></tr> -<tr class="separator:a49263002630bb21764217caa6c3314b7"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab6b56af3b1396d900b097d4e0463941f"><td class="memItemLeft" align="right" valign="top"><a id="ab6b56af3b1396d900b097d4e0463941f"></a> - </td><td class="memItemRight" valign="bottom"><b>orig_y</b></td></tr> -<tr class="separator:ab6b56af3b1396d900b097d4e0463941f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7b15deec5d81ddfa0c6297523cdfc295"><td class="memItemLeft" align="right" valign="top"><a id="a7b15deec5d81ddfa0c6297523cdfc295"></a> - </td><td class="memItemRight" valign="bottom"><b>map_height</b></td></tr> -<tr class="separator:a7b15deec5d81ddfa0c6297523cdfc295"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac5acff270a2a66d20a8bb514001cc3c4"><td class="memItemLeft" align="right" valign="top"><a id="ac5acff270a2a66d20a8bb514001cc3c4"></a> - </td><td class="memItemRight" valign="bottom"><b>map_width</b></td></tr> -<tr class="separator:ac5acff270a2a66d20a8bb514001cc3c4"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a935128be3649ba7d230f63bf7480bfa1"><td class="memItemLeft" align="right" valign="top"><a id="a935128be3649ba7d230f63bf7480bfa1"></a> - </td><td class="memItemRight" valign="bottom"><b>map_resolution</b></td></tr> -<tr class="separator:a935128be3649ba7d230f63bf7480bfa1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a184ddbfb8a5aaebb9c523625f716ad7c"><td class="memItemLeft" align="right" valign="top"><a id="a184ddbfb8a5aaebb9c523625f716ad7c"></a> - </td><td class="memItemRight" valign="bottom"><b>dt</b></td></tr> -<tr class="separator:a184ddbfb8a5aaebb9c523625f716ad7c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:afcb7de24911c98dd85473247c7d4af17"><td class="memItemLeft" align="right" valign="top"><a id="afcb7de24911c98dd85473247c7d4af17"></a> - </td><td class="memItemRight" valign="bottom"><b>rng</b></td></tr> -<tr class="separator:afcb7de24911c98dd85473247c7d4af17"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af2c50f973462f4717c9c02d6c8d47004"><td class="memItemLeft" align="right" valign="top"><a id="af2c50f973462f4717c9c02d6c8d47004"></a> - </td><td class="memItemRight" valign="bottom"><b>sines</b></td></tr> -<tr class="separator:af2c50f973462f4717c9c02d6c8d47004"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a578ecb22495b2d227517b8a54a505c7e"><td class="memItemLeft" align="right" valign="top"><a id="a578ecb22495b2d227517b8a54a505c7e"></a> - </td><td class="memItemRight" valign="bottom"><b>cosines</b></td></tr> -<tr class="separator:a578ecb22495b2d227517b8a54a505c7e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a15778cb625d962a2481cbc34854044dd"><td class="memItemLeft" align="right" valign="top"><a id="a15778cb625d962a2481cbc34854044dd"></a> - </td><td class="memItemRight" valign="bottom"><b>map_img</b></td></tr> -<tr class="separator:a15778cb625d962a2481cbc34854044dd"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a62fb5e7c6a7060685208643a265aaa95"><td class="memItemLeft" align="right" valign="top"><a id="a62fb5e7c6a7060685208643a265aaa95"></a> - </td><td class="memItemRight" valign="bottom"><b>origin</b></td></tr> -<tr class="separator:a62fb5e7c6a7060685208643a265aaa95"><td class="memSeparator" colspan="2"> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>pose</em> </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">◆ </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"> </td> - <td class="paramname"><em>self</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_path</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype"> </td> - <td class="paramname"><em>map_ext</em> </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  <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&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&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  <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&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&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> | -<a href="#pub-attribs">Public Attributes</a> | -<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 </td><td class="memItemRight" valign="bottom"><b>setUp</b> (self)</td></tr> -<tr class="separator:a24b9cbdb8f7d0ed8cea83067baf28c5e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:adef88a30b7aa6e2f3daa6ffecd979562"><td class="memItemLeft" align="right" valign="top"><a id="adef88a30b7aa6e2f3daa6ffecd979562"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_map_berlin</b> (self)</td></tr> -<tr class="separator:adef88a30b7aa6e2f3daa6ffecd979562"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aa76985ccd5313eaf5c8e7cc5892ca155"><td class="memItemLeft" align="right" valign="top"><a id="aa76985ccd5313eaf5c8e7cc5892ca155"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_map_skirk</b> (self)</td></tr> -<tr class="separator:aa76985ccd5313eaf5c8e7cc5892ca155"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a1133ea3a82cffacc03e22a273d6e8cae"><td class="memItemLeft" align="right" valign="top"><a id="a1133ea3a82cffacc03e22a273d6e8cae"></a> -def </td><td class="memItemRight" valign="bottom"><b>test_fps</b> (self)</td></tr> -<tr class="separator:a1133ea3a82cffacc03e22a273d6e8cae"><td class="memSeparator" colspan="2"> </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> - </td><td class="memItemRight" valign="bottom"><b>num_beams</b></td></tr> -<tr class="separator:af6405e794509630382bd714bfc01e833"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a320c224064a2dcdba7ad712525e32e88"><td class="memItemLeft" align="right" valign="top"><a id="a320c224064a2dcdba7ad712525e32e88"></a> - </td><td class="memItemRight" valign="bottom"><b>fov</b></td></tr> -<tr class="separator:a320c224064a2dcdba7ad712525e32e88"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a3beafc32194d2dd32a0a97885ba97539"><td class="memItemLeft" align="right" valign="top"><a id="a3beafc32194d2dd32a0a97885ba97539"></a> - </td><td class="memItemRight" valign="bottom"><b>num_test</b></td></tr> -<tr class="separator:a3beafc32194d2dd32a0a97885ba97539"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ad63cebbd6245dfa62dd57168287598b1"><td class="memItemLeft" align="right" valign="top"><a id="ad63cebbd6245dfa62dd57168287598b1"></a> - </td><td class="memItemRight" valign="bottom"><b>test_poses</b></td></tr> -<tr class="separator:ad63cebbd6245dfa62dd57168287598b1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a44186810ed5ab4fecb230b7a842d294a"><td class="memItemLeft" align="right" valign="top"><a id="a44186810ed5ab4fecb230b7a842d294a"></a> - </td><td class="memItemRight" valign="bottom"><b>berlin_scan</b></td></tr> -<tr class="separator:a44186810ed5ab4fecb230b7a842d294a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a9c595846d38b4691fd34352eea08cdcf"><td class="memItemLeft" align="right" valign="top"><a id="a9c595846d38b4691fd34352eea08cdcf"></a> - </td><td class="memItemRight" valign="bottom"><b>skirk_scan</b></td></tr> -<tr class="separator:a9c595846d38b4691fd34352eea08cdcf"><td class="memSeparator" colspan="2"> </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  <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&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&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  <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&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&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  <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&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&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  <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&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&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  <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 zcmV;!4m|ORP)<h;3K|Lk000e1NJLTq003wJ0018d1^@s63p<F|000h(Nkl<ZcmeHQ zd0ds%x_&e@B~(leQIt>tMIv#Q0*~7<F|l1ZVT5-RDygU_D&hbl1PO?G!02E&AgGC= zZN)5-^5BGUBqbS?oI>*`IBSO7_x;@a8#Zk6_PeKR_s92J&)(m+);m9Iz3blw)z#Gi zP!9lj4$%+*>Hz@HCmM9L9|8c+0u=!H$O3?R0Kgx|#WP<6fKfC8fM-CQZT|_r@`>VO zX^Hgb|9cJqpdJA5$MCEK`F_2@2Y@s>^+;pF`~jdI0Pvr|vl4`=C)EH@1IFe7pdJ8F zH(qGi004~QnF)Ggga~8v08kGAs2hKTATxr7pwfNk|4#_AaT>w8P6TV+R2kbS$v==} zAjf`s0g#V8lB+b3)5oEI*q+{Yt$MZDruD2^;$+(_%Qn+%v0X-bJO=;@kiJ^ygLBnC z?1OVv_%aex1<B=i>M@jKU|Z~$eI?PoF4Vj>f<jDMm<J9Y`yoa+TL}}nh1XOW>Dzyo zAiLfpXY*a<I(D9QKZkbcV%budKX>^Sj-S5D0S3@#V$sRW)g)_1e#$%8xdM>Jm7?!h zu0P2X=xoN>^!4DoPRgph2(2va07yfpXF+<E#%$BN8?9&2`XF7LYR>WH7EOg1GY%Zn z7~1A<(z7Q$ktEXhW_?GMpHp9l_UL18F3KOsxu81pqoBiNbFSGsof<JcynBP?5;;Hj z5&eaFaU9!r?$Z!yiA0iczsm`lZQ1Q_f!pH!Vb=UbaniMS2h4rH7k+#41ORG)=X>-W z6~eloMoz=4?OOnl2J268x5rOY`dCk0us(u<ZFT0vzGbA7HOqUbO4YBUD4VpaA7aAi z`;yHWY}3Vkp6~i#=>S#Ud4yqOr@?=Q57a}tit|BhY>}~frH1sP`ScHS_d)oqH^lYy zZ%VP`#10MlE~P?cE(%(#(AUSv_T{+;t@$U}El}(1ig`vZo`Rm;+5&(AYzJ^Ae=h2X z@Re%vH<EH?l6o;YyW^)wNA36}ocwXH@B9yX*N9`RUu$0?DW6D6ZqU(wh|t!U;k4w{ zH3|#>wZU<K8~-&UxVP@$khUv1RFND27=jD%j`vdBxN>>|f0NI&%$*4eJ<o-E@WY`` zqsV5Uq0M(^e2$XbFQVQY6A&05BoX(oqU-Sbz&pR-sMeX{(#EY_uNvG}BHk}N3y1ea z&)~4V{6c-_c}Yb90AmPVmxDc9RtA&ZXtL`~<RoleJ4+E0`>weC5OROQrpPMA@*w|o z()A==l}(@bv^&>H1Ob3C=<^|hob?0+xJ?QQ3-ueQC}zy&JQNib!OqSO@-=>XzxlSF zAZ^U*1l6EEmg3r};_HY>&Jo_{dOPEFTWPmt=U&F#+0(O59^UIlHbNX+eF8UzyDR*T z(=5X$VF3!gm@RooS-&iiUYGG^`hMR(07zr_xP`d!^BH?uD>Phl8Rdifx3Af^Zr`Ku ztL+~HkVeL#bJ)7;`=>;{KNRvjmc}1}c58Sr#Treq=4{xo!ATy|c>iRSp4`dzMMVd@ zL8?uwXDY}Wqgh4mH`|$BTXpUIu6A1-cSq%hJw;@^Zr8TP=GMh*p(m(tN7@!^D~sl$ zz^tf4II4|};+irE$Fnm4NTc5%p{PRA`%}Zk`CE5?#h3|xcyQ<Xbb-O<Z4>sS#iONZ z6H(@^i9td!$z~bZiJLTax$o>r(p}3o<nje2|Avo`h6^!)bS{!kN^oebdd#5CQZW;b zA~P)_xQB}-?DMcO;{2ZM^9Wlyhwp^EkrNh$g-#zJZI+W)Fn_KeU+CPzoDA3XHu>@< zyD7%(>ZYvy=6$U3e!F{Z`uSaYy`xQyl?b{}eg|G3&fz*`QH@mDUn)1%#5u`0m$%D} z?;tZ0u(mWeMV0QtzjgN!lT*pNRj;6510Wwx?Yi_=tYw|J#7@(Xe7ifDzXuK;JB;QO z#bg~K$cgm$@{QiL_3yr}y&~wuv=P=#O&Tj=Sr)aCUlYmZMcw?)T?c<qySZ3PfzX|h zNxj~sZx=;8Umdw9ghf!XjC^g!!4jbxk=-nc)2X_;TCvXGx~JD`-7FPr%}ttM#Q243 zdSwWYRlDX2nZa}#Gt<Dmm^PQv_W8@V1ahd2xzT--lXvzyozAEE>%0rUe1cS+o!qs_ zQ6Gp)-{)V!;=q}llyK3|^WeLKyjf%y;xHku;9(vM!j|~<7w1<b9>c*Mk-;P{T&yG) z@C-8E?QPynNQ<8f01D`2qexcVEIOU?y}MG)TAE6&VT5`rK8s(4PE;uQ92LTXUQ<>^ ztyQ@=@kRdh@ebUG^Z6NWWIL;_IGJ2ST>$t!$m$qvtj0Qmw8moN6GUV^!Q<bah>KNK zHBXCtUH<T{Q0VG*iQ!ybGT-d~B6-ML?|B@`9jAJuXM0(zdxXQ88~8P;7XLeUe|t_d z>8)<!#He?t!J^GeqTQ|g&oVhlWWSQ^3wbH*P~P%5jK!(1iLn|0Ky6Ue@po!$EH;54 z;b>RY9++gH_TUV4^=-j$t}dD3qsN7GclJ^Zc&(j6&a_!$jCf}%c5ey`pm~1)@{yI3 zTdWyB+*X{JFw#z;PwRr5evb2!ueWF;v`B0HoUu4-(~aL=z;OXUUEtG`_$)Oxw6FKg zEzY`CyKaSBK3xt#8gA|r_|Kehn_HYVBMpEwbn9-fI*!u*eTA1ef8<m-U!GYcFSJLJ zOPLuMsUG=;l_>Mkl1=!jV4oYwWYM}i`A>_F4nhmlCIC<a0TFv~_Gn5J$t&6%>6WLa zY%;4&@AlnaG11ejl61Jev21|r*m+?Kru3;1tFDl}#!OzUp6c<MxE}d=F238nid!5E zbuV4Li)mAR_zs;;KC)#onQ@0|X4)pAsc9QjTs>>go4{C|^erwpG*&h6bs<zmjhG<* zE{sn|w6-*tdUsTEE)MUBrppa@^|iO0)`UpL`5B|0$bS|TNcm?8(P;6KR3zVdakzT^ zsBpiu>pUPJag}oOkN2912Y3I?(eRc@U9>z#HPBHC?nps7<lndN{fZB#2e8hBJ?W_# zvKYcfdj<vgzAF_~|7`oJ7%A(QC6W9Love!T&>H5!zP``90!Q1n80jo+B3TWXp!8Pe zwuKuLLI6l3Gv@+QH*Y}2wPLPQ1<z4ER5ty_VVXxzYOzIn{d_~;>^EZhT#+Ed8q8Wo z1pTmIBxv14-{l&QVKxAyQF#8Q@NeJwWdKk>?cpiJLkJr+aZ!Me+Cfp!?FWSRf^j2k z73BRR{WSKaMkJ>1Nbx5dan5hg^_}O{Tj6u%iV%#QGz0Q@j{R^Ik)Z*+(<hQHpK6Z5 zi8eq^eB?|3P+;Mzy(m7G=1H>YvY2ziBG)?AmJa|JV%4UT$k`hcOg5r9R?5>?o~JzK zJCrj&{i#hG>N7!B4kNX(%igb%kDj0fOQThC-8mtfap82PNRXr1D>lbgg)dYTQ(kbx z`Ee5kXG~Bh+BHQBf|kJEy6(ga%Wfhvd<CBbJFZu|&ix|RtW*|v*5b8v`i@U0n+f47 zSD?cyrs7)6mOLEQ#wKo0-7FqSilZ<#F2PzZ$MO33Xevog+LBLYy~$@nSkTm3^W^yC zIq3WalbvYN?L<?79-5^ZkD<zq3;?x3uP+ePW4QK{U>QNDuOfQoe377l#h<A9J4gi0 z4<mxkd?gaZPl$u7PvFeS1JK+=3Z4yZ-0&IVW0nAr#-z!@ac#DB%O-yJZu-*838Tl) zfLhfR0BRsTs}x^uTZf1DZceAq-6UVWVnvvOfYmAaIKDqNk!<>t&DrMGeIsI5C<&ai zWG$|hop2@@q5YDa)_-A?B02W;#fH!%k`daQLEItaJJ8Yf1L%8x;kg?)k)00P-lH+w z)5$QNV6r2$YtnV(4o=0^3{kmaXn*Dm0F*fU(@o)yVVjk|ln8ea6BMy%vZAhW9|wvA z8RoDkVoMEz1d>|5(k0Nw>22ZT){V<3$^C-cN+|~hKt2)){+l-?3m@-$c?-dlzQ)q- zZ)j%n^gerV{|+t}9m1_&&Ly!9$rtG4XX|WQ8`xYzGC~U@nYh~g(z<YhXx*Cp6|P&Q z+&qgTQ*iOjK{t})*a1j`bTm4jd}pY1(@eH1C?v+IyX*vouKAMl_ar-Fo7CB0J+`B! zO@tRs%)~YFtGCC#lSsGBNG`mdNCagNLGHRWeLO;*wB~O}5I-EeTKCSz6~O^ejO66c z0Z7B!dkX8bBYo7B91O_`fdat)7RXmXui^e-vnKTv=YIa>9)bdAl#xH)xd5a=@|qql z|FzEil{P5(@gy!4ek05i$>`E^G~{;pnf6ftpLh$h#W?^#4UkPfa;;?bsIe&kz!+40 zI|6`F2n020)-r`pFaZ38F!S-lJM-o&inOw|66=GMeP@xQU5ghQH{~5Uh~TMTd;I9` z>YhVB`e^EVj*S7JF39ZgNf}A-0DwOcTT63ydN$I3b?yBQtUI*_fae~kPvzoD$zjX3 zoqBe#>12im4WzZ=f^4+u=!lA|#r%1`WB0-6*3BL#at`47#ebPpR|D1b)3BjT34nYY z%Ds%d?5$|{LgOIaRO{{oC&RK`O91$fqwM0(C_TALcozu*fWHb%%q&p-q{_8*2Zsi^ zh1ZCnr^UYa;4vQEtHk{~zi>wwMC5o{S=$P0X681y`SXwFH?Ewn{x-MOZynmc)JT5v zuHLwh;tLfxRrr%|k370}GofLl7thg>ACWWY&msqaVu&ry+`7+Ss>NL^%T1|z{IGMA zW-SKl=V-^{(f!Kf^#3(|T2W47d(%JVCI4JgRrT1pNz>+ietmFToNv^`gzC@&O-)+i zPQ~RwK8%C_vf%;%e>NyTp~dM5;!C|N0Q^6|CEb7Bw=Vz~$1#FA;Z*?mKSC)Hl-20s t8QyHj(g6VK0RYbl8UjE)0O0w=e*@m04r>stuEhWV002ovPDHLkV1hl;dM*F} 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('▼'); - $(this).show(); - } else if (l==level+1) { - i.removeClass('iconfclosed iconfopen').addClass('iconfclosed'); - a.html('►'); - $(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('►'); - 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('▼'); - // 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('►'); - 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&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&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  <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&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&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"> -  - -<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  <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&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&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><<span class="keyword">class</span> T> <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<int></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  <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&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&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;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</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;"> </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;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</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;"> </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;"> </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;"> </span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">▼</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;"> </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;"> </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;"> </span><span id="arr_3_" class="arrow" onclick="toggleFolder('3_')">▼</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;"> </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;"> </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;"> </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;"> </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;"> </span><span id="arr_4_" class="arrow" onclick="toggleFolder('4_')">▼</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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </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;"> </span><span id="arr_5_" class="arrow" onclick="toggleFolder('5_')">▼</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;"> </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;"> </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  <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&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&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  <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&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&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  <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&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&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> | -<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 </td><td class="memItemRight" valign="bottom"><b>create_track</b> ()</td></tr> -<tr class="separator:af5ac6d92744435a0c2572146ec14cd00"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a10f9f980a813a2beca515c9965995c12"><td class="memItemLeft" align="right" valign="top"><a id="a10f9f980a813a2beca515c9965995c12"></a> -def </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"> </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 </td><td class="memItemRight" valign="bottom"><b>NUM_MAPS</b> = 10</td></tr> -<tr class="separator:abfe988f97ecef07688ff57cb15c5c630"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2fe20a3d4b091cfa0c3eb867adc992ce"><td class="memItemLeft" align="right" valign="top"><a id="a2fe20a3d4b091cfa0c3eb867adc992ce"></a> -float </td><td class="memItemRight" valign="bottom"><b>WIDTH</b> = 5.0</td></tr> -<tr class="separator:a2fe20a3d4b091cfa0c3eb867adc992ce"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a8f9627599e2526027f715cd162b7155f"><td class="memItemLeft" align="right" valign="top"><a id="a8f9627599e2526027f715cd162b7155f"></a> - </td><td class="memItemRight" valign="bottom"><b>track</b></td></tr> -<tr class="separator:a8f9627599e2526027f715cd162b7155f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a55ebef782ee46bdd7cd03aa6a404cd02"><td class="memItemLeft" align="right" valign="top"><a id="a55ebef782ee46bdd7cd03aa6a404cd02"></a> - </td><td class="memItemRight" valign="bottom"><b>track_int</b></td></tr> -<tr class="separator:a55ebef782ee46bdd7cd03aa6a404cd02"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a492ff0fd0e3e2e4b53c804fe4656e19f"><td class="memItemLeft" align="right" valign="top"><a id="a492ff0fd0e3e2e4b53c804fe4656e19f"></a> - </td><td class="memItemRight" valign="bottom"><b>track_ext</b></td></tr> -<tr class="separator:a492ff0fd0e3e2e4b53c804fe4656e19f"><td class="memSeparator" colspan="2"> </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 <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&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&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;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</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;"> </span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">▼</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;"> </span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">▼</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;"> </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;"> </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;"> </span><span id="arr_0_0_1_" class="arrow" onclick="toggleFolder('0_0_1_')">▼</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;"> </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;"> </span><span id="arr_0_0_2_" class="arrow" onclick="toggleFolder('0_0_2_')">▼</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;"> </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;"> </span><span id="arr_0_0_3_" class="arrow" onclick="toggleFolder('0_0_3_')">▼</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;"> </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;"> </span><span id="arr_0_0_4_" class="arrow" onclick="toggleFolder('0_0_4_')">▼</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;"> </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;"> </span><span id="arr_0_0_5_" class="arrow" onclick="toggleFolder('0_0_5_')">▼</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;"> </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;"> </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;"> </span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">▼</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;"> </span><span id="arr_0_1_0_" class="arrow" onclick="toggleFolder('0_1_0_')">▼</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;"> </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;"> </span><span id="arr_0_1_1_" class="arrow" onclick="toggleFolder('0_1_1_')">▼</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;"> </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;"> </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;"> </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;"> </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;"> </span><span id="arr_0_1_5_" class="arrow" onclick="toggleFolder('0_1_5_')">▼</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;"> </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;"> </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 <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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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='•'; - } - else - { - node.innerHTML=' '; - } - 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"> </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">'f110-v0'</highlight><highlight class="normal">,</highlight></codeline> -<codeline lineno="4"><highlight class="normal"><sp/><sp/><sp/><sp/>entry_point=</highlight><highlight class="stringliteral">'f110_gym.envs:F110Env'</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'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/>"Software"),<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/>"AS<sp/>IS",<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">"""</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">"""</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">"""</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/>"""</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">"""</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/>{'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/>9.51,<sp/>'v_min',<sp/>'v_max',<sp/>'length',<sp/>'width'}</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/>"""</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">'width'</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">'lf'</highlight><highlight class="normal">]+params[</highlight><highlight class="stringliteral">'lr'</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/>><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/><<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/>><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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>"""</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">'length'</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">'width'</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">"""</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/>"""</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">"""</highlight></codeline> -<codeline lineno="235"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Steps<sp/>the<sp/>vehicle'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/>"""</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/><<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">'sv_max'</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">'a_max'</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">'v_max'</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">'v_min'</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'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">'mu'</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">'C_Sf'</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">'C_Sr'</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">'lf'</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">'lr'</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">'h'</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">'m'</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">'I'</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">'s_min'</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">'s_max'</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">'sv_min'</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">'sv_max'</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">'v_switch'</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">'a_max'</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">'v_min'</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">'v_max'</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">"""</highlight></codeline> -<codeline lineno="290"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Updates<sp/>the<sp/>vehicle'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/>"""</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">"""</highlight></codeline> -<codeline lineno="303"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Steps<sp/>the<sp/>vehicle'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/>"""</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">"""</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/>"""</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">"""</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/>{'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',<sp/>'length',<sp/>'width'}</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'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/>"""</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">"""</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/>"""</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">"""</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'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/>"""</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/><<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/>>=<sp/>0<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>agent_idx<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="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'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">'Index<sp/>given<sp/>is<sp/>out<sp/>of<sp/>bounds<sp/>for<sp/>list<sp/>of<sp/>agents.'</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">"""</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'<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/>"""</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">'length'</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">'width'</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">"""</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/>"""</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'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'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'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'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">'ego_idx'</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">'scans'</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">'poses_x'</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">'poses_y'</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">'poses_theta'</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">'linear_vels_x'</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">'linear_vels_y'</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">'ang_vels_z'</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">'collisions'</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">'scans'</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">'poses_x'</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">'poses_y'</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">'poses_theta'</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">'linear_vels_x'</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">'linear_vels_y'</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">'ang_vels_z'</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">"""</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/>"""</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">'Number<sp/>of<sp/>poses<sp/>for<sp/>reset<sp/>does<sp/>not<sp/>match<sp/>number<sp/>of<sp/>agents.'</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 {'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 -</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'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'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'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 {'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 -</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'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' 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>= {'render.modes': ['human', 'human_fast']}</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 >= 0 then only update a specific agent'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='human')</argsstring> - <name>render</name> - <param> - <type>self</type> - <defname>self</defname> - </param> - <param> - <type>mode</type> - <defname>mode</defname> - <defval>'human'</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='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 -</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'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'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('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 -</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>= {'render.modes': []}</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='human', close=False)</argsstring> - <name>render</name> - <param> - <type>self</type> - <defname>self</defname> - </param> - <param> - <type>mode</type> - <defname>mode</defname> - <defval>'human'</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'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'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 '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 -</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 -> 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'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/>"Software"),<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/>"AS<sp/>IS",<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">"""</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">"""</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">"""</highlight></codeline> -<codeline lineno="37"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>a<sp/>2-vector'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/>"""</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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>"""</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/><=<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/><<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/><=<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/><<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/><<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/>>=<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/><<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">"""</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">"""</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">"""</highlight></codeline> -<codeline lineno="191"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Get<sp/>transformation<sp/>matrix<sp/>of<sp/>vehicle<sp/>frame<sp/>-><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/>"""</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">"""</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/>"""</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">"""</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">"""</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">'red'</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">'equal'</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">'get<sp/>vertices<sp/>fps:'</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>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">'gjk<sp/>fps:'</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>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">'__main__'</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'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/>"Software"),<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/>"AS<sp/>IS",<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">"""</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">"""</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">"""</highlight></codeline> -<codeline lineno="37"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Return<sp/>a<sp/>2-vector'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/>"""</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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>"""</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/><=<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/><<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/><=<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/><<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/><<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/>>=<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/><<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">"""</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'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/>"""</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">"""</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">"""</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">"""</highlight></codeline> -<codeline lineno="221"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Get<sp/>transformation<sp/>matrix<sp/>of<sp/>vehicle<sp/>frame<sp/>-><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/>"""</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">"""</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/>"""</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">"""</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">"""</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">'red'</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">'equal'</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">'get<sp/>vertices<sp/>fps:'</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>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">'gjk<sp/>fps:'</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>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">'__main__'</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'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/>"AS<sp/>IS"<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">"""</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'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">"""</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">"""</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/>"""</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/>><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/><=<sp/>v_min<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>accl<sp/><=<sp/>0)<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>(vel<sp/>>=<sp/>v_max<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>accl<sp/>>=<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/><=<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/>>=<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">"""</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/>"""</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/><=<sp/>s_min<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>steering_velocity<sp/><=<sp/>0)<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>(steering_angle<sp/>>=<sp/>s_max<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>steering_velocity<sp/>>=<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/><=<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/>>=<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">"""</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/>"""</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">"""</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/>"""</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/><<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">"""</highlight></codeline> -<codeline lineno="181"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Basic<sp/>controller<sp/>for<sp/>speed/steer<sp/>-><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/>"""</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/>><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/>><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/>><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/>><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/><<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/><<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/><<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/><<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/><<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/><<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">'__main__'</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'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/>"AS<sp/>IS"<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">"""</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'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">"""</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">"""</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/>"""</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/>><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/><=<sp/>v_min<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>accl<sp/><=<sp/>0)<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>(vel<sp/>>=<sp/>v_max<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>accl<sp/>>=<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/><=<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/>>=<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">"""</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/>"""</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/><=<sp/>s_min<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>steering_velocity<sp/><=<sp/>0)<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>(steering_angle<sp/>>=<sp/>s_max<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>steering_velocity<sp/>>=<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/><=<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/>>=<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">"""</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/>"""</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">"""</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/>"""</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/><<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">"""</highlight></codeline> -<codeline lineno="181"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>Basic<sp/>controller<sp/>for<sp/>speed/steer<sp/>-><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/>"""</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/><<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/><<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/><<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/><<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/><<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/><<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">'__main__'</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'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/>"Software"),<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/>"AS<sp/>IS",<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">'''</highlight></codeline> -<codeline lineno="24"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline> -<codeline lineno="25"><highlight class="stringliteral">'''</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">'debug_gl'</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">"""</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('f110_gym:f110-v0',<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='vegas'):<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/>'berlin',<sp/>'vegas',<sp/>'skirk'.<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='png'):<sp/>image<sp/>extension<sp/>of<sp/>the<sp/>map<sp/>image<sp/>file.<sp/>For<sp/>example<sp/>'png',<sp/>'pgm'</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={'mu':<sp/>1.0489,<sp/>'C_Sf':,<sp/>'C_Sr':,<sp/>'lf':<sp/>0.15875,<sp/>'lr':<sp/>0.17145,<sp/>'h':<sp/>0.074,<sp/>'m':<sp/>3.74,<sp/>'I':<sp/>0.04712,<sp/>'s_min':<sp/>-0.4189,<sp/>'s_max':<sp/>0.4189,<sp/>'sv_min':<sp/>-3.2,<sp/>'sv_max':<sp/>3.2,<sp/>'v_switch':7.319,<sp/>'a_max':<sp/>9.51,<sp/>'v_min':-5.0,<sp/>'v_max':<sp/>20.0,<sp/>'width':<sp/>0.31,<sp/>'length':<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's<sp/>index<sp/>in<sp/>list<sp/>of<sp/>agents</highlight></codeline> -<codeline lineno="92"><highlight class="stringliteral"><sp/><sp/><sp/><sp/>"""</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/>metadata<sp/>=<sp/>{</highlight><highlight class="stringliteral">'render.modes'</highlight><highlight class="normal">:<sp/>[</highlight><highlight class="stringliteral">'human'</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">'human_fast'</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">'seed'</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">'map'</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">'berlin'</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">'/maps/berlin.yaml'</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">'skirk'</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">'/maps/skirk.yaml'</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">'levine'</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">'/maps/levine.yaml'</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">'.yaml'</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">'/maps/vegas.yaml'</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">'map_ext'</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">'.png'</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">'params'</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">'mu'</highlight><highlight class="normal">:<sp/>1.0489,<sp/></highlight><highlight class="stringliteral">'C_Sf'</highlight><highlight class="normal">:<sp/>4.718,<sp/></highlight><highlight class="stringliteral">'C_Sr'</highlight><highlight class="normal">:<sp/>5.4562,<sp/></highlight><highlight class="stringliteral">'lf'</highlight><highlight class="normal">:<sp/>0.15875,<sp/></highlight><highlight class="stringliteral">'lr'</highlight><highlight class="normal">:<sp/>0.17145,<sp/></highlight><highlight class="stringliteral">'h'</highlight><highlight class="normal">:<sp/>0.074,<sp/></highlight><highlight class="stringliteral">'m'</highlight><highlight class="normal">:<sp/>3.74,<sp/></highlight><highlight class="stringliteral">'I'</highlight><highlight class="normal">:<sp/>0.04712,<sp/></highlight><highlight class="stringliteral">'s_min'</highlight><highlight class="normal">:<sp/>-0.4189,<sp/></highlight><highlight class="stringliteral">'s_max'</highlight><highlight class="normal">:<sp/>0.4189,<sp/></highlight><highlight class="stringliteral">'sv_min'</highlight><highlight class="normal">:<sp/>-3.2,<sp/></highlight><highlight class="stringliteral">'sv_max'</highlight><highlight class="normal">:<sp/>3.2,<sp/></highlight><highlight class="stringliteral">'v_switch'</highlight><highlight class="normal">:<sp/>7.319,<sp/></highlight><highlight class="stringliteral">'a_max'</highlight><highlight class="normal">:<sp/>9.51,<sp/></highlight><highlight class="stringliteral">'v_min'</highlight><highlight class="normal">:-5.0,<sp/></highlight><highlight class="stringliteral">'v_max'</highlight><highlight class="normal">:<sp/>20.0,<sp/></highlight><highlight class="stringliteral">'width'</highlight><highlight class="normal">:<sp/>0.31,<sp/></highlight><highlight class="stringliteral">'length'</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">'num_agents'</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">'timestep'</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">'ego_idx'</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">"""</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/>"""</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">"""</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'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/>"""</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/>><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/><<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/><=<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/><<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/>>=<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/>>=<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">"""</highlight></codeline> -<codeline lineno="232"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Update<sp/>the<sp/>env'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/>"""</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">'poses_x'</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">'poses_y'</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">'poses_theta'</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">'collisions'</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">"""</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/>"""</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">'lap_times'</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">'lap_counts'</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">'checkpoint_done'</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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>>=<sp/>0<sp/>then<sp/>only<sp/>update<sp/>a<sp/>specific<sp/>agent'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/>"""</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='human'):</highlight></codeline> -<codeline lineno="341"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">"""</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='human'):<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/>'human':<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/>'human_fast':<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/>"""</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">'human'</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">'human_fast'</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">'human'</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">'human_fast'</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'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/>"Software"),<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/>"AS<sp/>IS",<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">'''</highlight></codeline> -<codeline lineno="24"><highlight class="stringliteral">Author:<sp/>Hongrui<sp/>Zheng</highlight></codeline> -<codeline lineno="25"><highlight class="stringliteral">'''</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">"""</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'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/>"""</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/>metadata<sp/>=<sp/>{</highlight><highlight class="stringliteral">'render.modes'</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'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/>'/../../../maps/levine.yaml'</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('.yaml'):</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('Gym<sp/>env<sp/>-<sp/>Please<sp/>use<sp/>a<sp/>yaml<sp/>file<sp/>for<sp/>map<sp/>input.')</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/>'levine.png'</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/>'r')<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['resolution']</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['origin']</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/><<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">'tcp://*:%s'</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('tcp://localhost:6666')</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('Gym<sp/>env<sp/>-<sp/>retrying<sp/>for<sp/>'<sp/>+<sp/>str(tries)<sp/>+<sp/>'<sp/>times')</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">'Gym<sp/>env<sp/>-<sp/>Connected<sp/>env<sp/>to<sp/>port:<sp/>'</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/>['../build/sim_server',<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('Gym<sp/>env<sp/>-<sp/>env<sp/>created,<sp/>waiting<sp/>for<sp/>params...')</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">"""</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/>"""</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('Gym<sp/>env<sp/>-<sp/>Sim<sp/>child<sp/>process<sp/>killed.')</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">'sim_server'</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">"""</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/>"""</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">'Gym<sp/>env<sp/>-<sp/>Sim<sp/>map<sp/>not<sp/>initialized,<sp/>call<sp/>env.init_map()<sp/>to<sp/>init<sp/>map.'</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('Gym<sp/>env<sp/>-<sp/>Sending<sp/>set<sp/>map<sp/>request...')</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('Gym<sp/>env<sp/>-<sp/>Map<sp/>request<sp/>sent.')</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">'Gym<sp/>env<sp/>-<sp/>Set<sp/>map<sp/>failed,<sp/>exiting...'</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">"""</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/>"""</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/>>=<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/>><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/><<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/><=<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/>>=<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/><<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/><<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/>>=<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/>><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/><<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/><=<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/><=<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/>>=<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">"""</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/>"""</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">"""</highlight></codeline> -<codeline lineno="302"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Update<sp/>the<sp/>env'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/>"""</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">'poses_x'</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">'ego_idx'</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">'poses_y'</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">'ego_idx'</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">'poses_x'</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">'poses_y'</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">'poses_theta'</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">'ego_idx'</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">'collisions'</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">'ego_idx'</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">'collision_angles'</highlight><highlight class="normal">][obs_dict[</highlight><highlight class="stringliteral">'ego_idx'</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'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'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'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">'ERROR<sp/>-<sp/>Gym<sp/>Env<sp/>-<sp/>Params<sp/>not<sp/>set,<sp/>call<sp/>update<sp/>params<sp/>before<sp/>stepping.'</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/>{'ego_idx':<sp/>int,<sp/>'speed':[],<sp/>'steer':[]}</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">'ego_idx'</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">'speed'</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">'steer'</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('Gym<sp/>env<sp/>-<sp/>Received<sp/>response<sp/>for<sp/>step<sp/>request.')</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">'Gym<sp/>env<sp/>-<sp/>Wrong<sp/>response<sp/>type<sp/>for<sp/>stepping,<sp/>exiting...'</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">'ego_idx'</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">'Gym<sp/>env<sp/>-<sp/>Ego<sp/>index<sp/>mismatch,<sp/>exiting...'</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/>{'ego_idx':int,<sp/>'scans':[[]],<sp/>'poses_x':[],<sp/>'poses_y':[],<sp/>'poses_theta':[],<sp/>'linear_vels_x':[],<sp/>'linear_vels_y':[],<sp/>'ang_vels_z':[],<sp/>'collisions':[],<sp/>'collision_angles':[]}</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">'ego_idx'</highlight><highlight class="normal">:<sp/>observations_proto.ego_idx,<sp/></highlight><highlight class="stringliteral">'scans'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'poses_x'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'poses_y'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'poses_theta'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'linear_vels_x'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'linear_vels_y'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'ang_vels_z'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'collisions'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'collision_angles'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'lap_times'</highlight><highlight class="normal">:<sp/>[],<sp/></highlight><highlight class="stringliteral">'lap_counts'</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">'scans'</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">'poses_x'</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">'poses_y'</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/><<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">'poses_theta'</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">'poses_theta'</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">'linear_vels_x'</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">'linear_vels_y'</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">'ang_vels_z'</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">'collisions'</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">'collision_angles'</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">'lap_times'</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">'lap_counts'</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">'checkpoint_done'</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">'x'</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">'y'</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">'theta'</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">'Gym<sp/>env<sp/>-<sp/>Reset<sp/>failed'</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">'ego_idx'</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">'speed'</highlight><highlight class="normal">:<sp/>vels,<sp/></highlight><highlight class="stringliteral">'steer'</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('Gym<sp/>env<sp/>-<sp/>Reset<sp/>done')</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('Gym<sp/>env<sp/>-<sp/>step<sp/>done<sp/>for<sp/>reset')</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">"""</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/>"""</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">'.yaml'</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">'Gym<sp/>env<sp/>-<sp/>Please<sp/>use<sp/>a<sp/>yaml<sp/>file<sp/>for<sp/>map<sp/>initialization.'</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">'Exiting...'</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">'r'</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">'resolution'</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">'origin'</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/>'.csv'</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='human',<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/>'''</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/>--><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/>'''</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('Gym<sp/>env<sp/>-<sp/>Sim<sp/>server<sp/>exists,<sp/>killing...')</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'dead')</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('in<sp/>update<sp/>params')</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('starting<sp/>ex<sp/>and<sp/>setting<sp/>map')</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('before<sp/>creating<sp/>proto')</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('proto<sp/>serialized')</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('Gym<sp/>env<sp/>-<sp/>Update<sp/>param<sp/>request<sp/>sent.')</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">'Gym<sp/>env<sp/>-<sp/>Update<sp/>param<sp/>failed'</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('Gym<sp/>env<sp/>-<sp/>params<sp/>updated.')</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">'f110-v0'</highlight><highlight class="normal">,</highlight></codeline> -<codeline lineno="4"><highlight class="normal"><sp/><sp/><sp/><sp/>entry_point=</highlight><highlight class="stringliteral">'f110_gym.envs:F110Env'</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'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/>"Software"),<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/>"AS<sp/>IS",<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">"""</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">"""</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">"""</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/>><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/>"""</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">"""</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/>"""</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/><<sp/>0<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>x_rot<sp/>>=<sp/>width<sp/>*<sp/>resolution<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>y_rot<sp/><<sp/>0<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>y_rot<sp/>>=<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">"""</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/>"""</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">"""</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/>"""</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/>><sp/>eps<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>total_dist<sp/><=<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/>><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">"""</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/>"""</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'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/><<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/>>=<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">"""</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/>"""</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/><<sp/>ttc_thresh)<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>(ttc<sp/>>=<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">"""</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/>"""</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">"""</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/>"""</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/><<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">"""</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/>"""</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/>><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/>>=<sp/>0.0<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>d2<sp/>>=<sp/>0.0<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>d2<sp/><=<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">"""</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'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/>"""</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/><<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">"""</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/>"""</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">"""</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/>"""</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'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/>-><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/><=<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/>><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">'r'</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">'resolution'</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">'origin'</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">"""</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/>"""</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">'Map<sp/>is<sp/>not<sp/>set<sp/>for<sp/>scan<sp/>simulator.'</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">"""</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">"""</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">'legacy_scan.npz'</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">'berlin'</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">'skirk'</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">'../../../maps/berlin.yaml'</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">'.png'</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('Levine<sp/>distance<sp/>test,<sp/>norm:<sp/>'<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">'.'</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">'.'</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">'../../../maps/skirk.yaml'</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">'.png'</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">'map<sp/>set'</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">'skirk<sp/>distance<sp/>test,<sp/>mse:<sp/>'</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">'.'</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">'.'</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">'../../../maps/skirk.yaml'</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">'.png'</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('FPS<sp/>test')</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('Elapsed<sp/>time:<sp/>'<sp/>+<sp/>str(end-start)<sp/>+<sp/>'<sp/>,<sp/>FPS:<sp/>'<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/>'../envs/maps/berlin.yaml'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="519"><highlight class="normal"><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">'/home/f1tenth-eval/tunercar/es/maps/map0.yaml'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="520"><highlight class="normal"><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">'.png'</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">'FPS<sp/>test'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="534"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">'Elapsed<sp/>time:<sp/>'</highlight><highlight class="normal"><sp/>+<sp/>str(end-start)<sp/>+<sp/></highlight><highlight class="stringliteral">'<sp/>,<sp/>FPS:<sp/>'</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">'polar'</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">'.'</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">'__main__'</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'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/>"Software"),<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/>"AS<sp/>IS",<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">"""</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">"""</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">'../../../build/'</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">'../../../maps/vegas.yaml'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="61"><highlight class="normal">map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">'.png'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="62"><highlight class="normal">racecar_env<sp/>=<sp/>gym.make(</highlight><highlight class="stringliteral">'f110_gym:f110-v0'</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">'x'</highlight><highlight class="normal">:<sp/>x,<sp/></highlight><highlight class="stringliteral">'y'</highlight><highlight class="normal">:<sp/>y,<sp/></highlight><highlight class="stringliteral">'theta'</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">'scans'</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">'../../../maps/berlin.yaml'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="75"><highlight class="normal">map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">'.png'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="76"><highlight class="normal">racecar_env<sp/>=<sp/>gym.make(</highlight><highlight class="stringliteral">'f110_gym:f110-v0'</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">'x'</highlight><highlight class="normal">:<sp/>x,<sp/></highlight><highlight class="stringliteral">'y'</highlight><highlight class="normal">:<sp/>y,<sp/></highlight><highlight class="stringliteral">'theta'</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">'scans'</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">'../../../maps/skirk.yaml'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="89"><highlight class="normal">map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">'.png'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="90"><highlight class="normal">racecar_env<sp/>=<sp/>gym.make(</highlight><highlight class="stringliteral">'f110_gym:f110-v0'</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">'x'</highlight><highlight class="normal">:<sp/>x,<sp/></highlight><highlight class="stringliteral">'y'</highlight><highlight class="normal">:<sp/>y,<sp/></highlight><highlight class="stringliteral">'theta'</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">'scans'</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">'legacy_scan.npz'</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'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'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 -> 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 -> 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 > 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'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'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 -> 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 -> 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>= '../../../build/'</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>= '../../../maps/vegas.yaml'</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>= '.png'</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('f110_gym:f110-v0')</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['resolution']</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['origin']</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, ('v3f/stream', [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 > 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">"""<sp/>A<sp/>simple<sp/>2D<sp/>camera<sp/>that<sp/>contains<sp/>the<sp/>speed<sp/>and<sp/>offset."""</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/><=<sp/>max_zoom,<sp/></highlight><highlight class="stringliteral">"Minimum<sp/>zoom<sp/>must<sp/>not<sp/>be<sp/>greater<sp/>than<sp/>maximum<sp/>zoom"</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">"""<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."""</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">"""Query<sp/>the<sp/>current<sp/>offset."""</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">"""Set<sp/>the<sp/>scroll<sp/>offset<sp/>directly."""</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">"""<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/>-><sp/>move(-1,<sp/>0)</highlight></codeline> -<codeline lineno="46"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>"""</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">"""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."""</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">'--map_path'</highlight><highlight class="normal">,<sp/>type=str,<sp/>required=</highlight><highlight class="keyword">True</highlight><highlight class="normal">,<sp/>help=</highlight><highlight class="stringliteral">'Path<sp/>to<sp/>the<sp/>map<sp/>without<sp/>extensions'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="101"><highlight class="normal">parser.add_argument(</highlight><highlight class="stringliteral">'--map_ext'</highlight><highlight class="normal">,<sp/>type=str,<sp/>required=</highlight><highlight class="keyword">True</highlight><highlight class="normal">,<sp/>help=</highlight><highlight class="stringliteral">'Extension<sp/>of<sp/>the<sp/>map<sp/>image<sp/>file'</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">'.yaml'</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">'r'</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">'resolution'</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">'origin'</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">'v3f/stream'</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/>><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/><<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/><<sp/>self.<ref refid="classf110__gym_1_1unittest_1_1pyglet__test__camera_1_1_app_1a1e58de5242a50711d35ef7d422466a66" kindref="member">zoom_level</ref>*f<sp/><<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'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/>"Software"),<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/>"AS<sp/>IS",<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">"""</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">"""</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">'--seed'</highlight><highlight class="normal">,<sp/>type=int,<sp/>default=123,<sp/>help=</highlight><highlight class="stringliteral">'Seed<sp/>for<sp/>the<sp/>numpy<sp/>rng.'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="42"><highlight class="normal">parser.add_argument(</highlight><highlight class="stringliteral">'--num_maps'</highlight><highlight class="normal">,<sp/>type=int,<sp/>default=1,<sp/>help=</highlight><highlight class="stringliteral">'Number<sp/>of<sp/>maps<sp/>to<sp/>generate.'</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">'maps'</highlight><highlight class="normal">):</highlight></codeline> -<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">'Creating<sp/>maps/<sp/>directory.'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/>os.makedirs(</highlight><highlight class="stringliteral">'maps'</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">'centerline'</highlight><highlight class="normal">):</highlight></codeline> -<codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">'Creating<sp/>centerline/<sp/>directory.'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/>os.makedirs(</highlight><highlight class="stringliteral">'centerline'</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/>><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/><<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/><=<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/>><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/><<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/>><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/><<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/>><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/>><sp/>start_alpha<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>track[i-1][0]<sp/><=<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">"Track<sp/>generation:<sp/>%i..%i<sp/>-><sp/>%i-tiles<sp/>track"</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/>><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">'black'</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">'black'</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">'equal'</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">'off'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="187"><highlight class="normal"><sp/><sp/><sp/><sp/>plt.savefig(</highlight><highlight class="stringliteral">'maps/map'</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">'.png'</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">'map<sp/>size:<sp/>'</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">'maps/map'</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">'.png'</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">'maps/map'</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">'.png'</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">'maps/map'</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">'.pgm'</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">'maps/map'</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">'.yaml'</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">'w'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml.write(</highlight><highlight class="stringliteral">'image:<sp/>map'</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">'.pgm\n'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml.write(</highlight><highlight class="stringliteral">'resolution:<sp/>0.062500\n'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml.write(</highlight><highlight class="stringliteral">'origin:<sp/>['</highlight><highlight class="normal"><sp/>+<sp/>str(map_origin_x)<sp/>+<sp/></highlight><highlight class="stringliteral">','</highlight><highlight class="normal"><sp/>+<sp/>str(map_origin_y)<sp/>+<sp/></highlight><highlight class="stringliteral">',<sp/>0.000000]\n'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/>yaml.write(</highlight><highlight class="stringliteral">'negate:<sp/>0\noccupied_thresh:<sp/>0.45\nfree_thresh:<sp/>0.196'</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">'centerline/map'</highlight><highlight class="normal"><sp/>+<sp/>str(iter)<sp/>+<sp/></highlight><highlight class="stringliteral">'.csv'</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">'w'</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">',<sp/>'</highlight><highlight class="normal"><sp/>+<sp/>str(0.05*row[1])<sp/>+<sp/></highlight><highlight class="stringliteral">'\n'</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">'__main__'</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">'Random<sp/>generator<sp/>failed,<sp/>retrying'</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'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/>"Software"),<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/>"AS<sp/>IS",<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">"""</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">"""</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">"""</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/>"""</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">"""</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/>"""</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">'Lap<sp/>Time:<sp/>{laptime:.2f},<sp/>Ego<sp/>Lap<sp/>Count:<sp/>{count:.0f}'</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">'center'</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">'center'</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">"""</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/>"""</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">'.yaml'</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">'r'</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">'resolution'</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">'origin'</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">'v3f/stream'</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">'c3B/stream'</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">"""</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/>"""</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">"""</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/>"""</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">"""</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/>"""</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/>><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/><<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/><<sp/>self.<ref refid="classf110__gym_1_1envs_1_1rendering_1_1_env_renderer_1a46bb51fb7c77939d2c4b023cfe2ca867" kindref="member">zoom_level</ref><sp/>*<sp/>f<sp/><<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">"""</highlight></codeline> -<codeline lineno="244"><highlight class="stringliteral"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Callback<sp/>function<sp/>when<sp/>the<sp/>'x'<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/>"""</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">'Rendering<sp/>window<sp/>was<sp/>closed.'</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">"""</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/>"""</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'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">'Map<sp/>not<sp/>set<sp/>for<sp/>renderer.'</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">'Agent<sp/>poses<sp/>not<sp/>updated<sp/>for<sp/>renderer.'</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">"""</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/>"""</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">'ego_idx'</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">'poses_x'</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">'poses_y'</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">'poses_theta'</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">'v2f'</highlight><highlight class="normal">,<sp/>vertices),<sp/>(</highlight><highlight class="stringliteral">'c3B'</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">'v2f'</highlight><highlight class="normal">,<sp/>vertices),<sp/>(</highlight><highlight class="stringliteral">'c3B'</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">'Lap<sp/>Time:<sp/>{laptime:.2f},<sp/>Ego<sp/>Lap<sp/>Count:<sp/>{count:.0f}'</highlight><highlight class="normal">.format(laptime=obs[</highlight><highlight class="stringliteral">'lap_times'</highlight><highlight class="normal">][0],<sp/>count=obs[</highlight><highlight class="stringliteral">'lap_counts'</highlight><highlight class="normal">][obs[</highlight><highlight class="stringliteral">'ego_idx'</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'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/>"Software"),<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/>"AS<sp/>IS",<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">"""</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">"""</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">"""</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/>><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/>"""</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">"""</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/>"""</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/><<sp/>0<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>x_rot<sp/>>=<sp/>width<sp/>*<sp/>resolution<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>y_rot<sp/><<sp/>0<sp/></highlight><highlight class="keywordflow">or</highlight><highlight class="normal"><sp/>y_rot<sp/>>=<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">"""</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/>"""</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">"""</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/>"""</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/>><sp/>eps<sp/></highlight><highlight class="keywordflow">and</highlight><highlight class="normal"><sp/>total_dist<sp/><=<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">"""</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/>"""</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'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/><<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/>>=<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">"""</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/>"""</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">"""</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/>"""</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'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/>-><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/><=<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/>><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">'r'</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">'resolution'</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">'origin'</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">"""</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/>"""</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">'Map<sp/>is<sp/>not<sp/>set<sp/>for<sp/>scan<sp/>simulator.'</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">"""</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">"""</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">'legacy_scan.npz'</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">'berlin'</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">'skirk'</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">'../../../maps/berlin.yaml'</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">'.png'</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('Levine<sp/>distance<sp/>test,<sp/>norm:<sp/>'<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">'.'</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">'.'</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">'../../../maps/skirk.yaml'</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">'.png'</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">'map<sp/>set'</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">'skirk<sp/>distance<sp/>test,<sp/>mse:<sp/>'</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">'.'</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">'.'</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">'../../../maps/skirk.yaml'</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">'.png'</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('FPS<sp/>test')</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('Elapsed<sp/>time:<sp/>'<sp/>+<sp/>str(end-start)<sp/>+<sp/>'<sp/>,<sp/>FPS:<sp/>'<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/>'../envs/maps/berlin.yaml'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="391"><highlight class="normal"><sp/><sp/><sp/><sp/>map_path<sp/>=<sp/></highlight><highlight class="stringliteral">'/home/f1tenth-eval/tunercar/es/maps/map0.yaml'</highlight><highlight class="normal"></highlight></codeline> -<codeline lineno="392"><highlight class="normal"><sp/><sp/><sp/><sp/>map_ext<sp/>=<sp/></highlight><highlight class="stringliteral">'.png'</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">'FPS<sp/>test'</highlight><highlight class="normal">)</highlight></codeline> -<codeline lineno="406"><highlight class="normal"><sp/><sp/><sp/><sp/>print(</highlight><highlight class="stringliteral">'Elapsed<sp/>time:<sp/>'</highlight><highlight class="normal"><sp/>+<sp/>str(end-start)<sp/>+<sp/></highlight><highlight class="stringliteral">'<sp/>,<sp/>FPS:<sp/>'</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">'polar'</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">'.'</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">'__main__'</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 @@ - - - + + # 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 zcmeFahd-C?|30q0_b$;gvP0S24GKj@$%uwoqKs_1+mR&MtH>@wg)$mslaQ3iUS;q3 zJ)W<+Kab!4@O$5n`}26;$?JMu*Lgn2aU9R%ygql1Dji(1aN|NICZ;9whYqMRF)iR_ zVw$yg{#^WI*_{R9_@CL9`{dQ<;~&TQ`nU1t1s4x#S~4-sdrtp1qvGndGx*^KE7=oP zYUYMkHm5BNm~3op_)N^sTb@0A(SXm~!YHsyaw8Md7AE-vd(~}&e*JLptFjKBp3W7R zXL$3&;#n3eD`q^Lp`y}rS3SVzq)&YHJAw1sZ}z;rrd#>#Sb(;+w!=$11M3T~eO{Tx z#c5aHyv3U=slJ7Ci})6f8FOycZ^=D<(|@$6bvSo;U6y&>WS9AQuVKy_v#P<&ky~!V z{X#*~{dRSF2^z9#I(+kRvy6WpZJ9OZ@ZTSpetz1fHS@neEoA%Of74q0Zyo+b#Q)ae zf9vqS82Dcd{4WOn7X$x`f&U-Hz_H4@S@gKmmdzGo_}9tFsr~ow;-TN)ldU_y{Ho26 zkQcP=`FWRFOz_B&BQZ~(7G0S!OI1astW=Hhxm)68EAjF4dk+hn2Zn|W8$Y^hrdb&1 z+ScEgtoruye6rK{kk#eOkx@|`@~S6K29J%6-Q6I>t`>PXzamCW$mH{ryR0(OjkzAm z`}cpCx-VZeo9<?HM3@er@3_N!{P)jky)>PYdz&TtzMl1H?t0T*qNXh6T^uM9m7FYe z?AS4rbLR?fuh=f=IMOpI!OfP>osj<ENZ_8|S>od2^o<`seiYulJ0dMjESJ^AG4e>D z&w^F#`ZcMSHi%j1$HvB9KTO~FcE)x>#8;}GTcia&(@tqIk{Q>`9RJa6SpWV;Ol)jH zVlGQyxsn7gM~Lm2fWW}=ii(GH<vn{M<KxX-Ox5{(%gf3<FMNMxQ0T*}nPPTQOIy3Y z#<JAl_qUfO=H{h7yxO13%e`*iym@!yZZ14<=|FqAWy2kgmbP$@lGIC$f@iXCs~<n^ z>PNS8MdOC?0{pM;wSs1gJ?6DRX_l=m4t3+YYk9REp8jyNd7{6xbe?q2zeRq#w(q~W zc+|^zGFZaKusrfeb?T+F_%fdyw{=l3U+xavbD@B~yRy=ozI&4h-zpBJq9T7G%f5UL zqxaVrY>=|In!AjJ=L~}!OdUL+$TTlTHRfS_e7u#7O_Vy<WNqd5?}4tauDH9dEUcKS znwr<^*RR!&9UB}TVPd-VBEw<Wu&X95tvxa@$+#?xf@Phq?P=+O$IA@H2HNKhOllb! z8SOEvNp(3Gd1KK!!}iY+)#-MYugvR0YHMrnvPg-0u^%Z|z!7v`s8muYce9O-oCgc- z+~V~DKd%%MRbyh7#GNJVrvUx+tEe`^A=#$8_Se_M?fjV|XTE*=_PMq;1p98#`Q=%4 z;@N{kzpA|udl7Hmj1R}}h>3}*c3HwKDzN|7(&C=_4??HkUw`r9MU&szd-;C5&I($! zeG(QHzU>c2@Cn!9cWPHmn;iNsgrBFkN_FSo!m}_t{7OUu@L2gEMDQ;?H8z*R-G@i> z!DxT0QDyA0>P#mGM4q62-u=TNl6EfH!e>9;Maau#Ga`G!m!9IZl$2EU8yj={ViMBq zscwciw?=$X!0z*XeTDo+*hQ1`=L?a9YFyr`nwtI{9UWNhh}W;}UGA!DX!v6FE53Z` zn%*Uk|N2~AohEbTTe6Wd{xGB`FKGJpIkR<ziodw^xe~F~pdjlnnzYI1&Yc_USDeLk z@zYM<Le0c8veJ|7%B}UcSW7gGg1xgw1GDlG7J6#Ewt9Mc_6`ooh-4n^S3HWoe8pbM z(*6i2BU)VCH||H!px_||U$RkY2_8?-qUlg>{tViv@jE_Dy0ehz6mzsl_z-=a55HcB zH@8O1jdi+tudO?iaQTM{5tF&8v@f?dUp{e9vM-O>uE}$QjI*Ph`$q4`$jHU4(vqk< zl;c0&T^mj?ONfsC>cTc%S1?+4GB`MxqUcM4Ug*p7Rffd@yJ;^%T&6}%YtzL}o;)cw z(euHwE3LI9%#E)gpCdE~nWHJSjH!o%%UfZz*xcFcd_u;aLSO#UATi6n9De6r*sJ#L zvMKE>H^0ljzj=T8@`Xq11!sS2X=%B#OfawZEB(4mClgcCB8pWi2j-5An}jZWdx7Yg zUr&$!b2+=#OwJQnLTsOJNl6KIW9zeL&+Kp?Nsgm^lG79Yl%n?b_JXJ0UZHJGOx(4K z{czqBc`w0B4cWpXB2g$-D5Qn=x9(RxcFen=pa8#?(GmAWF+vre!-o6g&Lr`4{t`B3 z$K!SUcbJ%%<YQs|Y%)4e`iovV6B`$&S2;e5iFx7cH*fksuuch7owPYgNuli2p*A{_ zD-*JH|ILA6<LT|F`agdBsKydbg*Q2mf3Gvlf53)6YH)FJS!Ay`*mPH@ByUq~&&?pa z7XJ-GhKJ9cKmYqZBbsk5FI)L`#=x6nt=NmdMK9U3I!SW4#!~Z@sphxu-^)?-kSs{h z!$G3EczJonTKvv_{`~ntz88lPs&LG+XV~E484J9o)<>xBd~^AC0R>y=L=%Ty+v8i5 z)ho8kHC<z!I2Hf8BNn0d@dG>46`7+@V9e5*eH^FyLrbwxeU%B$ySweH-YkvXeA_uC zuI<Y+Z6Wj8bjhiaM!SjL-2V5A_@C(T8MS?SEH*h%-rpjUC1!449{9PYhUXNOzAO8$ z7%%vFY~W4s9jYeZz6C@m`Wlvn$!aF)%fB-F5zy7ug?O!~sxtcgM4s0Bg-N*uu58p% z5wl^B=?N^0+R2lX0WOE=nTLjk@CY*b7gB!sw1&D!mq#g=YGjR77KKPjczb(KN^N6$ zdtNI>y<nMh&o#%1M%Gf)A&bsuDTZI3YR;P+k49mn_FF15?Z|?pnCQ^RDxl7XqGr(Z z^PRu6lYQ;btCZ&S{*uC7xy=2qZOs=``c3qr!c0@0-07`A)rjH)xn_Vzu^VfT>i?|B zZ%`T{)!x-r@@VfhL9}2LDlycYLUg2Z><s$E;*G*>)>*EZI($*jp7GXAw1`;Jt^Iua zZ(7&u&c6C(E~3}wE$iy;MT_!6i(+vesdxN2i#6}<zq9)Jr~CND8t)1%O%sj6isQTN zdUMwG_k38^>UoeQ|LUAYNoRBKA!GDE-rbPa^L~-#P_+?azWP!&J;24~D|ly2%)nKt zhWz*u?5k_Pll%D7ya#NGf-X}Nj10naQ81$r5q_ZVaVdARufLFy;kOqi8>Ag=H*Vax zwBr`f_|WgdS<58vZ!$~WdcG>YSfXyU#Ib&n-XTlN{;k73OPGFUCENBkpzv{MzcS6| zO{sYxGoCC{2$VDC@YJ~qJ$=chJx%MfMr2tWd*1P!c)sP0O?L?aj`Lrh>R9Bn`Aa!m zmb<&YzH<)Ue1c^d+m&gzI#~q?o35fo{OR}Ca39xycXf_t>c!K0Ouya-LWlquqIw4y zA%rR#<k*)_yZQ0n=D_+7x1!K^v-ITZ@%(@gmLHagG(En>!g#y{m&s25-RFI7DFCn~ z40cwvqFXR36Ti!7VOmFQ+|rKJNtf90@a?#{{8HzkWXX}A*EC-ktDv3>p}3?sZtl+e zUN<$w>@v}d)LWBJDDG|Ned7gNrnz6Wx3}j5Atjmpc+GS2wQzq+vEupj=aCM51>6Zw zA|u&vu{zt*ZKF;GUH)bwHr5s{WLV^fy|g{rmu1)Ntzpq$EYjK%XkLOY+yBhmiQC+% zQ~QP@)7!1)ttG*9kA2~+lbo#MUvv9z@H=iD92}gK`f|RuBv_)qNT{^wmdwOyil(QU z$?Wd#?qc|%<!H075q2A0pf7}(R#_J)<t=NI&9pi*&oYV>aS4g?FJF9ipZ}siH8JWh z<Km1g@^arK5($v_;pURUuZd?Vv{A*SID)NIsny)wEU{<z?%k7<D|P!(BrQ=Oo6AF| ztTt}iWZ4>Q)A9oK-FRy845o=htX{vnx#RXKJr}3isiBnCFWTlu)YQ~mJO*EXuB!5- z5b4cjE&X9r7i`zx5)l{2P5Dk;<yA@s??D#3Cns1KH$D$H?(!LU>i74QsEiD$&Z>k` zwEZN@))HWyEqLM$yU(c;`au>_twE}r7#knDaN&ZB$CMtIZ(%hWJ$5ANOpfcsSXCAS z4Ohl#v^M+dDap#p%H3o3|FBF(Qpl*JXoFFZr;m>hfq~<u(+d<LRHxcQr*>B9SRT12 z(Ul5xDz!nxOvlAz4$~+8meSBrH@?@LA8suxbsGNRd-k4KWY$6ZlbszM1@CVx>PH3M zvP^p96cxvsnjl5~4B>8<>2X3*0ER=u4BYzGW$%mGj2;Qd+ff;pe6jvLb<nuu&kBeQ z;4$&bk*{Bi%M%&~%ml8isH~(ONM8&bY*DZ?s)^U!PBBs`IN<UATSJ}aJ32cHK>(7l zv=o+EXx)8?75(M{Z$N8htj*13tRaB)O#|i1r8}d79^k3bM~zUgwnb=^Wjc-bjh4Dd zi_|$<#-}#8I{rSdrwDvN4}LTnJJFg{$X9sQL(1p7*&E(&r*4OgR!46X`=>f-f-+-e z9u~ttYzW-ZYVp1KCD==xhbjH$9iN}eU!fpNA`jArYaRNVyp#<QZp4#5J>D+_NKc7I z*?mvEBYH85r0ukstaggo5eEkcG{<C<^2n!pS<?6kQ7$z!dzARymMum3cCEp_W#I?c zSqSepH#fiBRpSqE+Z+=WQjl)f-}fuI)G)_&O?8^35f(=X7~`<Npux0?xmuJ`F%}W9 zp?T!?tfz=Dx)@4sUvRf02P$byf*8}qJWk-Bp_HuP&iFTc-FBr87KOYiw^Ns0L8tcB za~4DUR_;n|y!TY=B^OF{v4QVNADQWX85>hZ`lWxojR$`L{Eal)o;KPNNS(H#qT)$J z1e;N?^>HQ1-fX~Yeb9@Tgal;+gJzepQ(0&x_%|Ve|1Zh>=)NiW)Vr$_<5|-VECAQP zYSM&qnJo|VWsWrHIQHh4n3<IT_36E=Y|6;UAVi|;Jlf2olPW-f3{1g`8Y}iOCN549 z*{CF1e?7>)BZjfuQbS*vFMmB96CXeHJdCv{P=ueJQ}E)?w>36(PX2o?Xt{XIW;%M? zD8!DP$O_Q0piNf|T47q&LGfsmr3iFBS_reO$st1Mgwb|a>3AvfrR@M@p$?9JfPk0@ zl+l*7L<X7_D7%b-99A@K?zTM$g0_sB9By#j>)sJg-$Ha<C6v^zjN#gewu3SSH<xTu z1)x_`5@SQn(XB<NHJTXd-5_jy6n8WgT`d8M0N6^6XVF@oyoMaNWMuxY?<xGKT|{9G zOM?9A<3vpF;i(sI7FT~Vuu+A}o6tmyTIiU1iOlpw4f^Ax^W7~>Z~q1D%G9y0JeG#t z?*j@J($Kkd<81xHzBjh*B@*35)C9q=TbG#I?kA35gj%{m^x`QO58~rYw}kP?Gf{Lw z==`+J(%4e!oE<Lz`s$fnDlI{{&GO?0Bj)?dIuYYkly9-vb1swY`KP5g(D%n18%jz- zs1zeXwhedug-ujHda#D7gv&+5#&WG$vnD1w`cRCz0w^QZIsN<x^zh0ulUB!{X?X*M zp@J9=w3Ur-kDz`}=u6V}B34UszP<am3<n!Z@uFY}5wv<63-pfhjG0VJ&t*+C^Y?ez zWJyqEUgk3L0o;9P_|UB&6rtuq-&Wc?50{BXT)icu+sQmWV~8MY*|-WlbQ?z)n`qwP z&`?XO%(Pv6*3{UGSFa2U9_}0k$n!^^e}4a@8P)_8tPcRInSjnJWl2w2x3$eV>+}w% z=_nZ(7!Y~Z(+dUieu5GR@q&suEnP@R2$Aiuux;qDBU6XkE7X*WoASM66%zI<`tamy z*Y;6CYn>YJE(P`&bJ)RjWmXvaJTlsZ#c80d#=7cc+Rv+t#vGpP*V53?a2_qxYw4cq z>h7bG)R28=v|(MAUrN^GZ<h)_%r(*U<MzLpJueZ}tNBgcq?uWI@5dea2c`Qwb({t( zi7#dykj|2jHUoSkWWSbQH;CFRsvB`r@NYu7SUWuN-SxY+5uk}Y?EioWJi#$Q@&gJ9 zmLR%mEdl2(!0DUf-*gqot~*&#w|xdvdIuKE8L+pNkUa&c<Meo)GAe_MhjkveZy{lc zKI{X(-t<^iIhbVDh+9^k-ejeoK}EDmW+^?wm6<5OTPgt&DGWtwF777`MJS0X7{K_C zy70*m)HGmeD{JeBloXL>3%lv1hmkr^1mv*+E*|-Dzkth+@ul~?CpZU6q5af!9@A2B ziOaw8Bx-x_@#tkrqW<fFU{=;`@6958%-p#@P{(C*Q1khzy-H%u4;=^N^omWQf_=c% zrdXEI%`II()7PJs8c0NZy!GQI^P-X7M$7TvDXma%T#Dx?%0o!=1cY6@L2w7wm1-C@ zGUy)Y{EK{+suEOTR|@i@H6W_%;xUV<Cl(+eZF*|FAI+{6Ro#egV2b6=^nN@KXqre< zh(lNYLG&%j@n6Yyb>p?ZZ@M!juoII~3=qP+@_^#S`|W6|lf!kP)B;e>80`Rvr+C-A z^hh)+(bf<LGhO@k2uZM|NvWlXmvab(wBN73QwVd%r-tcW_WlLHSje9hM5q?4i|tD+ z>vP$Ikak1>mZW43KHHH`MYG$nRiZk@Tu(-sA?D1J(e``07ksR>>>z6~hji~9LO&uu ztkeukLwHX#?2bxG5^N2!R5HsL{31E<X+Om_^M@Hs%&QSM#D^pYE7a_&-qd=dg|2a) zrcU58J?s)n@C&&`^qKe>%ANtDpJ*!~BNP;Mb#>;xI)3OUsGMR9iD0l&qxI${v%L6| zZ!CVltTO!cXzzbZ^@6LwN9+CGvrw#1Y?KJW6Xmx<u!hc<Wg7kQeEF*j-vvQNK+&5? zG?eqGwRwH&KQ92w4~q7Qd?-DARD6^rdk?VK{`{9jnHxXeU;*xMgyiK)4<$Z5k+{u^ zLzyrfuINK63K$8NRT8ZdE{GL994x+@fn8DLC%39OIZbZew9C7Y(GWFs?F>j?iA%^7 zCy)yEGv**nVJOO3ZL(nL%7pYj1?lnXQp3TH%F)lhnGeM*Tju-N9yxDpoVTfN<Ri5Q zyZRgJz#ZT2Jzbk_X9sE0qSmg}0PX8Wtpmv8XwNN~Akf+x+eY^^5CSy>@2gj@Olwki z5j$h_;}8cv{)_?D5GVyT_MOj=Wcd)7Lbl%%-A1aOlGI?u;lMq-;d1T;;0MUilWm=C z{HXb2qfK7@rPC9oqlH-$g^r!tbqWU$9-JC7pWXvZ{NHX^A#j(sA#jN_6ZWv{cBl)4 z;wyOU*pz+$x8nq$&<m*}ky0vDA{w4`a3<4;7t+5Oz3nit6txHB*SgEy#Gt;NPbdZu z>Gw`>WMdu8J2;dpw`9o@qW9HCp}{*S+5a*k0)teGK|_-u4iT)K?pZc{9|e%GW?xgj zznG;V;}QJ?wgSz{M0*^Li;m8FxKqu72t{mMe8KOOx)30HT0_vU-$bCH89i#S6&0PI zKGNW3_x*dV4;UczFNoyr-JZ7YZMX+OSfauxWPqjkcVKYP;O&(e8w5`M!^O=l1Xx3l zl<7J}`GkfOgsharzKSf&5JBobgA!~M>U3F4OREnY=f(50IiO7ay&f)-Hnny}$Uo&K zH@%4lR_3oH<OBR5n}7fQ%@8*sCZmlR^fu&Fzc5j|++7=tvY&W1m)f8IuCsC_lKn*# zoTwteEuZ$<J*ffKx2!hsZBA<qDLf+b<00)AK=H5c#6Qn_ntQEna3?mBn8vZV<IO^$ zqlej*Lu%@_t31NhNqk1Z26+Rx*UWNu(ghxT@$#j?_g5FHUtQ4FMSHNavidb`2kDCB zdFT#m+S-9673FRBIIO6sSRyrC15nInZEZczaf)gxK$*9OuGr7vnM|Vhi46U&o8l$G zDZ*Emn8sR*I`j%s+G`!Uivw#1B6VzjSi4l*`-ecu)2D~g!S9JS+-AO%y#l(bCDAzC z=+l#L_LNGGn^K1)aU1Kz5S(5nIPp?fWWZ8ze6h}_$%57$6~G-V!V)VtgO!nD-j_L? z!S6Cz<q}K;1}w92?*?Nii7tM)8K9lIH`pmPK3_Erjg)Dj;eTh%6JIflX^QEx*43&s znpA*fpC^54dc<S;5FXscBYVbCE^i7K+#S?7wm6N15+Y;hV05#@IjLwvn~l`ro37<k zpfL(WP4sL*<4=!>b^@e943GzsAdMO|_Sd(U+_cuuo)rTwbTP_1Qg~Tgrxt`h(wRxw zLfb8!k+BXS6U8?&2(i`P)|S`kArk^lntp#g9%N_TNh=j_AIt8HVTRV#Bn@;=xEMAl z64IkW?70ZwLm*Cqc(fxQ+?|FMt)P5Gzp9fhn>-IviB9PJaR&;K1+GJ>rC@1kIW?#^ zz55`mlNB*Lrqz!?HxNQ3?0k+;Og>i`n?BK3h(_AqeG>bw08oaGMP$3TF}GW9wcwwr zfIb0mLH*nJ7cfmNn=-mym57}n6pP7D;TjDc2piY3yJtq+yLXRx0mNOBw@GG$*7F3c z0j(AiJHc2KIEoljPRFx0Yy^FzZ~L%Rf@izjUHt8jsrxZuVP~d0dNMOJk$HscH|;Ua zBcV^CJ6))5dTQ9RXjg6%%9PYk?)+!!KqhmuMsoO*@HCDC;jG2z4hz$aASB96HOd%P zCmD>^v`YIz=$O3nBMyKXdrNSeU<A>7+!2kVh|xm_+5<pnZaF<U+?qMwrHEW320<H1 z(x@O*9<Yf4>){!b(8DYs;u(Q*j}~ZTJ}7l;5gJ893j{YA95x1=oN*K*FyJ)IGnyH4 z8AP1Fa#`)Pzaw%7Q>GxG{ALi#!qc}l`+)kJ)@4f3^AbVD94r##ka7(P4FK(LSt7>a zt79RrB;NjHpOQGHbF(CP-*uiqXW&cyd6iUV(uf5?ae;qiR6!cB4(Q^vI0V~hYhGKK zP-n!3lkSH7CT_)k*zdl)7rOzJT+*X02Feb$Mu*=kfFMdU!+?MQ851@K%pD0#>Rfy` z$F5bP&L8T)?<?_l^$_q3q6S_>tbf^8C&0ZY2nUi8J!GbAogqrE8_JxZ@~2%l_Jt;5 zkUn@#ZK9?FN!b1IMuf63+(SAbm&JjH!W~08`sz!KADe?LOY-s2K(w#zD5?o@S4>Dd z8|#Rpq-jYGoivpmPAdh@d7YID?OK-&8Kn8<@&!T`r1+7}OXEoV0?lZmf-h^4nnG<D zdn&(w|9;S=A^x62Q&p{#h*p~E5S#luMlrc?p_o)!$bf)JEnv1KD4hP9$%c1)nM9j1 zoTazUp7H|HB2Af)nII-0Q!KZp<uLX@VI^gjxB`NavHVDC41NrUyMDBHbSU6=pqF~$ z*~KYU@5xM!5GJ6pBn><OF0uTxUhOaIYc4ED5sOia%8d8uV`3U{`TC~2ExKc3y0O$> zK2&(-0+WYFXFZ<1@5<4AZSxPUxUZYNPfaD@$|3V@%N73lNBnEs5qs~A^JmYWeR}Jb z2cJGW1g2%l481jXd!uJ<X(ZU=9Q2`D%E+eQKDnVQBXoSsQ99CMxa*`+sPvIThvq|5 z6OlLEyLSe%e*3Onp16&M-@h+BsF}_#C|C$`dhW|pdCZ*buqB6-lv+?>n8mGbgI%J| zZUj)ga_iPS)aOWy9EHzS++NA1uzI{zY2CVYk;<VZ_=^*-t#+avJceXraV~oKzWH0P zFJH?iBNG}O&G{w%WZ~50xV(bGdklN--(Ri;%?P7hPPNFzOP4M+e)(;>zqR`N_r_np z?jox9?%m5Tgt4rc)0i;gsuhKqS>p0t)cajlZAag~e}D1f#iQdXT-TTHTdk<7wetPG zHEY)<ov-5S>+f$bk6L#5^5qs5`H5MwDgqnbo0^+@znf?Ef-JiG`K=EN3rn@@XP1|k z=lAd$92ju4yQ+$@XABw%iou7RoH-mE9A3_E^9u_b+seYfLLN*qQ1sHz6jjxrM|!_< zr|Wy<WL|#$V<_<K-`N~~f7=a+D>ped*j|%nndlIbl#-I0n>&w{l~w%muS2S;D|hYM z#VmU93YI3(q?{eKNdj17KWcVcMa(Kd*!>Ar>)zBAE^>Bu22%2Mo*e5PZ4Fh6P*@Xt zEY7ei5f4h=?XuU*jBg#ku0B3O*DESIeD&(p^+JY=A^N#!s&lyxuiCU}lcc01#zmVD z#Pzrz;JgPAy)JcB><kbwFNq3uRsfse?Kq%?D~56A4PM-LB6?uJYTv$npU%BxmUdjv z&(Ck^F`%Wkdd{_X|KRQ~UAmP0@uNliXEsoD`9p`cu(91pPnT49$oX$*C@WHdos;u6 zMxd%FB=p1N<bKv~F^?nboX6egF4=e#Q%s;N_qe#YSi7>avKQy8?qR)>E;Y&>OJ+P- zMbE^j<+l`bWqcWja>x@j`B<Zt*4BOuIiFwtt%dMW?5@plyHM7ux4~U*<*HR_&XeLG zDfKX2)MPqsnm2FWxr*q$9xPJEKVI+l<~qjZ<2HEX#tnel+ZfE1)7U6M_t}_G@}Gqa zYinw4wZsFVN`1tTA|IQHN|g>8`og$urih4$SGpcb{H6N$bB;ef@eXJTA@>tazX^H% zJ|{<Z(2-UzmD8E~%D&q&P0$arb92ivs8{geG3mObD<K!|IWaNeJFJT8Zi&l4>RT5g z?WAz-92X*fWNb_|+3*O&p8Xm2gVCxH3o)JJd!=zINZKjj;ltGw<CiZVm*U4#PfR!} zcymSA`!Mc(BL(oK#<^fpd#dHGVtNCyU1{d5SpX>RIjen`UTE>Mu&}&1SLq7M(9@K^ zYTNehs9cMTN`g*9X0nBf6@O9!K8F2Aj~?~>ZN|6o`0?YI1<lh*v$z4%MUwsCIcd<B zGn&s=GNNwZgo|rfPiI2b$`vc#fjs0D6+OY1f#qL^1{UZjbX7MY3KKbDkVzDWU6w6} zk*TseI?U)1IUhcJc+yY7+p;b093l-V*w@!LfAM03)W@2}^uD`t+d)sTdi|84i`MZi zU$Z6$PiG6*QrO_`;jwJ9xYd>&JFWwSH+FU^g1YiHB&aw$OCR)LkwssKJhG`$*-3Tv zjq%}bFE6kC*nah5#;qUSfBN*+?<wZFA3xrNSiTBMrI)_hw-<Msn)D&=oGIJ19;-!a z3WnoLH;ebs9pI~BVmOY9_ZHD%ToJwE+T0~!c)rxvuh+WuJpcj&uWcC{?7V*KR{8VO z`w0f|7_R!eR&QXbK*RU|-8mmsF<Lu?5A-k${Fl8teY~!1(Ec@`n)}Axl(xtaUQJC+ zT&NMX_)9fqgWCPi50<aZJ0-Au)v9Y{#!t|-T3A}W^##@+I(&G?)~)}-T5++fMhy0o zceq#l(9v$5HFg*avj~%$Cjbi%xiyxeq`OU=@_hI(8#C9#sBJO28LvC+kQF+q7iVyD zbB|i`(D%7Lynp{Kk|YL%9Um8#Z-JYK0tV|ChM-(KS~KckYHEt}1Y5RjxdIG)i|Uy3 zq<u+<R3UhiF&qKd_Xr@R)U-5z2c1|<M<Dju0f#{iT?xGE8T{$b@~jqe4O_lxQz39K z1n_lye0<O(Js}|eY;QN|>ec;hEUX@*dc!<(^ro`(==IGKm+yy$mZBH+4i4@fwxx^2 zK6$a@`kaEo!tLzra{=hNG~!K>a0~40>~^rRQK?_CVM9LbD|g)8+4%VG{rY99qoZ>X zawM?b_3PJ<Mk#H^XYK-<!F7<3og0P*wQ}Xk^?OYH<S+YTEZEmyD%05AtvuS-e5{nQ zubk(A+?%o7j#HzpqGDn(AyJ$QF^k=f?EuY5Ph#63B9h`8#SgV35$zJgk6b`ZTA5JC zz6GendlRYxFUYye?T=Cl7IhfnfyA&yQZfj6q?x@S?$6?+FSW3=gxO~v;)@+u-gDub zz@>%*DDj`#ty);RZM^wT2Hd_q-}J(TQOFPgM$1lQI;K4hU9|POZG^mu{QN}^y}e~k zO?f~;cgv?8P+83)?U;wozf&b__U>~Pj}F{fxmLSEW%Z4qAm#@T9^7_wYn&MEKOif+ z0(*jB5?H@DH8mA`ArEk4g1etFV+QtP4ho``cyP{C?ewZ^@7`k1(J4@23U=^cKs#yz z-FN|wM>RqrCWM1xO64JP{OhX=o3O$7n=d;`m678p>vIs5_5*E?$E-7349}k3kJOmI zbZJY0H#Y{PHvwwPvRquyH1j|MqSd1A$;UU3OQD^^Cvh_`?+{3d{D~9mv7UC#wQCr? z<NEU*u3`5P!Ww!`IVcgAE?+i;-m{ol^wW;OBU2h|iaz@AyrGX%!@0S5!+U&LMCy*~ z%NxAeBG|U_9No8XCT>nWR(%25NM%2IoE-$tG=K!e$Lu+CFt%ETTe|Jxp`2KE<SFMu zWb6(O4s_Z=@Z;O}?zKR0LH!D^Ja@^$;yvc4d#}x1!OVOZXetIGi+#qFH_y(=IFxlv zg>L~yp?#}KB|LwAADO0h^yoiO0rW<fnNbwj4rb@%P}`X~b0&%;vJs6T)vA5vkJr}W z`)({`&*xeC^w~3$Pmg90*m9Yk0x7u?>O6J_NxADx_WYYmH=ld8G9A&4A4FiL1u*Ka z_3~VObF+bu=AR|A{jp*3T*_X^j3u}}6*-{1FyM}yA*+bG#+H_ks9$%WvH;>3z+*xn z!lJpr-$9t#ULGUX272oEFP=LKmGPL9#w8$2s7dws*y+6cTlEbMEk=4yL%&wEwH4*n zdhrMa5XtwmtLq+EOl<$e3N%QhrmCvy?K^ks5rx!#0QS86{BA2n0T8LhsIrOMbR9l= zbUAQ*B)mr0!!rg3g9W}1r;ee!q?r9^c$QMj=*H=&y7yS56p*q<hCG$2--JbTy1oY* zwCihHfc4o4sgD6F-~(HWsxO5kTwD4hlA;i15y0W41Sp_5o@pua50Y^S!Dq3Ao4tJN zcW+!m1EgS^+SB*~FtH$*^uoTH|3awan;MRJ1qK$P7s8^(h2X&a;3{%N6;#blr`yKb z+5lHv?=A-m&v0Kh+fKd(*yqYajC{q@hH*aRJE=AJ6io?JVL3c6l(Kig$*HNL7?kD% zD~(_pKMJoXC&tB(A3uf|ar4usqktNBU{sQq-iV8%bO6)VLl-$9C$|zU6pMC9UVd+Q z*`un?7?tq3n2fLir-@s4{A_L>OnNf#TH;c}?77$eeg0g)%kfm&<=-2Zu}D6081AyQ zwT=G&=5eyoGGx&ch-U1XOfCa$D-Pacepgo)3R7E5h(?f@xcFxfF5pK$F-vw-`^UIO zQK(EPqCIe8v=%cn&}71&l)i3jd5vq+)8vi*uAQ|{P*4#h3{)~P$U_v(d?#O@m@r(1 z+79*Hz08<~G>bRwxeGbsC?KY#2Rp)e^@dSZ{_ArT6cqNUtgiX-<5=k!ECYFYd5<tw zd&r}?(p~OaR+dbt)6fQdyb<l1S<?1?_(6{(r}4|smt5W47QH-I8K#?Ij~rLQNC>d` z`KwoQQRS1Rvg|;<h-l!#1AuS64YGW?=~PJNm6daig&W%14n5O)iOLm;RIhlZ?TgZP z8l_Do_ieyFLqql`<<O7$`FBtk;zEoB){9>LwSIJT6x${@SpJ@ogRWYLV1VJ-vu7_~ zzWmgKA_%Pg0Ba~vSCf;I<pte@@Bo0<=)i0MKWNYxiwivP@&ez#pC7u*$<fhI(oS&J z+{LHB+bf=GmYZsPL11B7dtV=AfFU8X8quMyABsSjCtet@0IOn`xp9p5j~u%$yetp* zHwu~JMB<qnI*Pnh5w}uByc@=ePCCO+f5im0u&JeG<@)s_$`W}mwdk|gZ{GY2!=Lo{ zFQGGM&x&3A$wa*oaTg?Mw-T^|nVGq#zdsx$=OJ_os9p_?jn^Q*Vsk|$Bv2&vrY6=+ zM{_O|6BFCP&fW*;4?s^@ig|TC_9;6%`@W|q?sf*c2OiAp(W5OJcb_|e3V6xV^257# z_1<=3Dut+>X%@{3sWw0tjcqkBGO}#STY*qmuwa3T)Snu_39^Pkhb^uS4zxSJ<j38+ zi;+}!u=@ZP4_m*x{QUXzEwrg?0Gbf7PQk-x{89_FMgMd0!j0}XA&r;CY48&qM23%! zG<q~Ac>jrAu3a15bzWQD@sJ+7jmlO2Ok1R-Bv=v71)e_f)aj2<k02^|`ugTVM9CxK zb>P5t(}%P}3Jj3<@svP%df(yS^HgP3Y=?era1EQNYLv4U-;4)Gv4ki%OHfD%X}y)5 z{U(s{#lenaU9}lx9?2^$Js4hg>g?HT5a{;o*>gfu^Yn!a?x@)K1HX+dg3-(0UtU+2 zWzL*A{4P6P_d)1iFn|6drC@PkNF(T!YA^yaZ{FPe;ce*Z4IAVwECf-f1@aH3!0L6e z@#7K@GJcH@6jJXSK$qZ8*2Ur;xjg49*yf$Pcb}m0tH<k9@9_6I02mG#8`jlQDA!nk zg=@IfxA5>3Jz?c0w1Ux|7>dn`6)Rqt{rINOap`ZMitk##m{bPBddL|;1S|wacQ-e; zw1a9OjNDL?IQaQJFlTSXHbKPUR0+GDc91~X6bCW?_p8^gec<WY+xKMq?myJ9%vjiE zgiHL{aW^1!7*>IW?*ZH24-P(}rL_^AUebQx_Pk{*7pJG30FMqSC{RORy?XW06DMxJ zJN4-K^W{vC0MgUb@m;eKwO~v@=SSd|0SL`0E?&aH5v5^Pb$us92a8`{cOl@7Yf=+C zZt%;hh}sWuV!?rp7D`A+9P9s+>)$5Fhl#PGfJ6bE$F?FW!5ASigo7fn@ATK+_UyPK z#>{>aHhid7XQ6UA0zCtI<vg(@K#TzL13_KE!lHy2lI&l|NOYC!3l}aN!4TbF;Pgy< zEo>nkC`cJ=yA`OE>ZINW&dZ#hau~3eg0UGTDZeJ1mfpqxq0jZ_0<K}{lF!<5?i@IW zeLyZEpZk4nIE{rj;sf>>ESN4qe;Df16M~G=(()iQ)T7Ke+gSLFz<LNP_%$o>%@~=9 zii(~xV4Jp#xQRVP>ybqOL~ABTcGzKIgT$>DX6TZLr2ZF6E4YSTL`5aYz3a?%`2tSd z7Hacy$PTcMvEP`S-WON-8TJ@>@ISzF<_8V|!<DL2a&A`1rzmAs)U-l0#WwIA<gl=2 z=7^JP*dxw@?kP*uOu6vUDDJ`=l%fZEA9{IxzyPrreB+Xpl|E(}R_&jgUyeEd#1IPR z6X@deF;4hcT<i`IdlnDeRfavgoz*lr>T+qT?h4m1u;eR9EAe2Z!KWx5*lqQlhfH2- z;Xj}WaQ21rPGQ@+E<$Rnb(wZTMjb14P<eozdH?;p_Mjx~)a@|Px35_)GD=EH*KgeL z-_egcr<3IzEbTOw*I&+xJpKUj@BpAYM4>YP8F2F*A6&vZ9Sz8iQx5k+q#R%tbwnM! z9vB#y-<MM-lJ_Jk$`aoS7uH+!HDZUmcY6b6LODa9ib5a*&^kIgMjwk?`|rR162ip; z0zF1#1O5V~-vvw)G_RF>|KY<<jd*6@x2-%phX=pUat()A2_xwlOiY7)HL{nmN;5-P z`qOzQOc;qban?ls_Z)RK!v+1Kc6~cgD%p<&`00xjzyy+?m$yY&SpBjy!K3#L0LLV@ zOiWH5vDh7ihF%qa5=FMwvHytIT5}%%KmNj2;3F_$!d$3MMoBgS>q@Jn><3Oko|{13 zB_~jAjCv&J!ks&Jk{|_ud5>A_Jv0jdof%WQ#%P=lqlI6-tbKO85b>T0NJ9)86_NB7 z$WYWqKskDbhjYuz`(IA1CnPanMF&PNk}bgZ<;ZrQcxDdPD`8OR6%Yi97RbbXFg2C1 z0}HTkQDcTSc&xB!1`0kayzz+E4lW)Z)WH0izqvUjBm$AtDzWN2q3(p+>q4mDPzrhr z12*)SywIH#4<~}q);&R5z*Z-H6O^Zfu)iPC<9FhK!q%-@V_P#6xQ@kUBWy7eWg-v* zN*6)+zc2-3!;zkP(*IC^d*Q=4n(1ig)tsdS3nH-=naP1wkVcx(uAqI^Loxy8n!jMd zyVBBSkZXVa{;d}>bl%A5mQvJq)K<XGt{-o5F(*vDSU*!ELAM#QCw2!M`7kMzRSB$M zfeDqB+mTV*V^X;O^8#F7p0gKC17ww^@D(_=fP1X(?l$jAbiF|*BCOg~5kH&ZhEk4E zjWDjuoIHQB1;Wf}JN*dR`HRkWc=_l)^l92UT-gsQf#O3j6%Jw*DgK>1?||+>K!fUV z^uJyX(t<*MT`4M@)Rg>mRMZsnIzw1WA95Wl*x{eB5d0daGhjJg4c*!Zqki}+D|TpX z%Q~82Z(Zv&d=lo~cYrDY>anYJU60Di&CR{Hxe?k{3zSl{l7{AHS<EKdKRupBQVM{D zOPkY|(ozp#5b##gU!jK9q}zFgx=i^4f+XW1Gbe|%=PqT=dw%)@1ns-&+rh_|@AG?$ z=0$}WI`=jnp1Uw*sbQ{W>2b^yl@kKr{AJ6GK$UP@Xd}%3SFc@bwmXJ=$+>@)@A~t9 z_*wR>kyVjWR9S78>Lhy-wStQ4+O>uc-o%^#k$!-q#h@j|wlccu>WC*#c97VQMiq1X zSwM#!7#3!tVU_1h>M}E!d#Bf((ALHgpre>@<|EX<LgSfx?VbLpc<?<^b*@}tB9sHB zbHrzot1v&m9{!$z?z&LW!b{BsYiey9mynQuXBEeZEN3a8%J+yUZtgglLFu?M<L4<U z9MFg0RS3k<8q0~1OZbkPzP{_~>+7xH_k<DbUkKJ~TzvnKCMYyi*f0j5815++sXKJK z-3CiTWdSmy9C-QmgZD^UZDCQw!i;<%<>v<adz+QG7tgEn!W*AHeG18fednPC<q$P6 zav`pxmzCL}@e(cek4^!+TCmjePu4-{0U9*{-GxMoBum{G4_=AT)f-IL@D2>z1e<X- zW;7TLtys0{>}N+v_|g+S`zbro2?4r9Os3*?V5ouorC9{R{3F%_u`LCikxn`dbX2;5 zDNnYCeRc^iZ|@lx&_{q`5bA*j)Bmelh?<1-$j@2vx)}<mPoMVGXYAhX>26w(%@RJ{ zndA4!9c)@Hh?8#TkxaZm)c~Z~d7j&erJ;Z|;CKHn%6`V8*r{lt1PRM~9#T+Dh<x!v zm`^YBF4i81LqiJIN^is>SiKyi%>Qe{2oGRl&(Kh1C|O4=R+=0>ycn|2b{?L^h{wu) zT?6o=GjJP8I*mO9h=vQ<Fv%1th6Gu#bg3aerITS_sb8J2P*&y8p+l!o@6utO#Sk<Y zWwIacaZ(BQ?cbmH^5wC?ZbdX_+!A2U8GMukYQVbk7&VTyJSQkunu9f|U4-41bQrn| z(ItzAhgUOcHnspc^9$1<A^QPi`@xPJ&+P~O05JhB{;q)xqZ0RfM6vpF#i8wmmqpu$ z2n2&aqp}?YQ#;(Z;umCoFpEzRY#C~L2m>If6d=qokXMgB`Y)P8bcm7gMlp+~`Euc9 z`fM>8{-`x@ms-KnND@nT)^zQYZjlHDZ#bb>plKwY$yo@c>#)y-_JxZUiJ=XeXAG_d zQqP78gld=wAsH~*yzhL}v!_o<4y0nRZQINY-BOG$+A*cMwRH1?tXGVbm=4d*J^)UZ zyG&-{ZJ>E3P5IrdPscoZbOrJT4jF;n3XJazA_5n%+l_oYSYOax*}Z%J)iff>dy1cW z^URD?mXg&HVo+L+T#oe;SR$*EYCp(@wuxj2D{ogXm9*(%uCA^YKL2Gg`g-MGoT`cl zSjH+%lC!P7eQb!YkIzR$?M{rI(GQU?OMwef_{4N|b&22yikJroXF;_SHu-!Vf(pSp zFGKBE#2@VU%H*%J?p(|2GO-KN%429zAb^1{i&~qSvOyE7frl_`WT{Hfi^AXG9H}dI z%+6&kEyl<qC_{b%r{Bw*T+j+_yen}EO27^bF7b7}m<xT1J;qH_kIzpQ5J}j+{ln9K zNWh5~>-QDl1RO@!xPF$Y!aDT#r;PXj^-O&Aid{xVZ*blb#NxGUv(nPi*u|>l{ceVF z5_?5=?D+C5ZtRQ;$R|9ULV#;j9F!JPuw0i#jX{C94_*a43a#L{R6n+>=8cU9NaUHc zL*_A1?MT=6V3i>^9(xAYW8gQO`U@f;KH9QL%(FEM<Qxl!({fBy<)GT*{M>dNJ9+#4 z`<t)n%4ogldww!5(j=vTev&dOQfqq+BWS<LvwyfJ8vtIb8-M00R2-6CA>sw-f5;0x zExgeV0u3VY32N9tXO#!|@q>pCuR{;quwesffsn4QR#d1bmuy_V{2z#OnEp`N!BoM| zng#jSkmX4O2)Ve*Gr$OC#_CRwwc{$osycUaa&E!mRq~t`M<fBgZboVXB|NpSMYpBO z1UwSK;5UC85++v=<w$A4yhBy0)L7V}uSq^BDX9(TT(zF1zgo8jyeG?flBRYDk<%FR zu@}R8FNUKoEeH{+FHfp{-k%b<*!F4b-`od0nFllLBLGDxf&mWcbq43pE7DQU*Vf!v z$1Nfvz9<o&6ZB*tUl<K>?<0`6)%6X!4{QSkAQ|%)E#khc@gA)B%$aRKM`6g-!vVr~ zFx7-tN{R>u1i`OwZ1^E%MSysb{)svt@G|vDnXxfENLY6g|IuPrva*`Lvcp&0o|Zc< zbK|)Hzk(tZX)mwvb3St6(EY<XUFB`IF0%fS<q|qFVv7*DXlbb?)s360!H*CG4L^TA zvj1C<Ts=HE#Ki+3)A==3gd=PS@<5w_9)bik3knX#sSRfES|WRZdHy`#p)=qNfG=tU z+B5g2{Zlz^YSD0~6aku%B!`KAI9gIpi&ez*f$%bDu;jt~n&BXF^0gJC$+wkVgW9=@ zm6c!PBV+F-?%|suW)!-v;U;w$|3J;DtvQ=9aAs8@P-}7aomC)>G`*pL*{OFkA^6-t zc}H=AruF<>B^Myhi4?QVs26FPZi)yqg3-fuE}@7{f%9K@MoYG%+Mjqp(e|+-f(>M4 zCvV0+U7eSpt%otAK9XcPjWc|J1Vnpq%CN(Z(r~$KJ8&_`PdV&+47%m!?%s^moIQ80 zYP^mZI@iH>@7|@4cfEm_a}BsFa9~Fe%A`tyt`rHX7|R{@(XL@*XUD1E)zGNjyu4N+ z{u#4f21lOU2~70%?LYWX4hDzU;7QPP9%X|9br#emHtPce;hlJZc!9<1eVD8pwE7*} zwp~SQ@ppLYi<8pt*XcR#4V8AH`2Y#WIA}`|hF^GG-ahqPM(y#wIWY1lff%27bD0-i zaT_mh@#6C7U>tG*u;dUHeuylfp~d34*Q#4q;L)8u7_@z(dy9d|P6-L^K^`%a_R2G8 zSuRtO(6^yPY7A~JL{%gG8pcl5xZ}KkXY8(8L`0NBW>4wvQ5mn6S6Ph#fFi^X^Yq@i z7<9z8WW<9S5+SCxk4ME=2*CwrjJcPWr{_D6GL!%T&C8bt0oUQ|E&+jFuz0aP&edUn zS{XJy(K%>uKlCdf@MQ#&PnyfLGyn(nO3*djX0cQlqmXK@S-qO(`jB^zpqY~N3(zVw zeBy0g)u-*-x3`0HP*x&nO);&7@T`J+nzr2j9D=Bx%j9lo;IOI%fG~N5gqVf3PoG2? z^@n&OEiGLXBu3!8+BBJBCF`Jq;=U8>p$5TIB=35FUrB4`lNST7c_k$+;JEOz&Xtjo zsqANwvd@OBg&}BI(CRHzFx+tI5@ZFa%fe%^>L4Y6eY55*Jql)rkuR!VXHjnMEu68w z9}u8mYn$4!X`k*VV_}@J|Cii}keMMb89%6LIHa=LtS++{uJu9yNwQ|tISp?{h~`X* zr^@ULFFT5;MZd@g0j8lF{VgV->^RBIAtqK`vz?*#_}zGS>L=d$pbwK56#D0Y9_Om! z(HO5}nZHL<<ONmUA}IKPG7J&^8D0cPZ__=cb}BmO&?OPz!sC^uXyj0ru3_{7(^!vI z)-9|Or!!-w`nhuuxdz4YSScJV2jeOgOxoA<Vy{_boDbu8*3Of!Uv$`ka<NNGhoEeM zv4#IvwlLJ*2;CJxU^cpFWxw;}pav$?dqJlGAJRMQ5|Y<7KgL88*4`OQS*4*dv*+_^ zChY)?*oLl-wa@a2>f&_WXJsXfRc=Cxr^Aef6Z?0OrG5@Cwiy{1$Qm1S!e6x=9Utna z0PrAu3?ERcn_lo@v-hPRhnoP}9=#6(suWeBjj+e@D0D(Zg{RjWLgVaUrGp0!%*G|) z(P`zMOovuUiwOdTqtOd+DoNnG^*hKJ7()m+j$Dk_NqdhL+|+Rf-;i^YGVmXG<CxfY z@`{Oy9>Nll%L>!f`A~cc3KRy@fe}t!xNro1AeZ5L=5$}T8w$|-FaZHdG${+aAs-S9 zSBAWjQY5-GECDE4HozK~a?S-DTg#_ooaAMWAr$~}?uQT8fS^194ZWJyuH&Do?WoI= zNlZ+nrVY}r3Q@w+Ba#c#5=u!JtJgy@@bvVw>ipu4*)+(<EHCdCis-FH%{kUz365dv zgNe?kr<y{^>wH$r)&nL(U3u8ka}oHb5MkJk@4(n~y1X=AJ!U0B=LvuabsPYV2fn@< z2fU`mAgjOz%mKs9Rj3%mTe@D>{Da308(|=bwj6myV2)U$3{jK()pK?}<_j-_NVOP3 zWksBZ@?d&RjSj{tx8J;RNKEt4p=@pNz=4wnP;q!IRI{9&D*FjmJ5PwB978?9RB9?7 z0_Ok>d7yI801cC59bmw#weRGmVTAKUDkdkhFrx+lu*DSDZenB?Ai*hkN%%!t(mSxG zQ&Uq=1s=jIPyQ-^@iv^(gG}^HzP6X48WuI9($NeLQW^$#AArQ~96w)M`VfQ(-wJAz z3peTkn2o-s+X<mB%kI%ec^Vn(OrUWugeN*PX((}l+<xFq4d}NBpj3-ySIrjMhAB@* z5JgIw<d>DLKseglzwXf7cM{eN)Lc@IxQ;)Kwy%Y#hY9@$kZe5Se;EBUnmP$vC?A+| zsSc(CYy)ay)|Dk6Qkh*>{q?H=h$;FEGM3wRY#>J70z9A{PF(wp5XL5b-2nkt6oVVQ zX=SUFRPdZdYXvY{f-qDp6_5{FPzF+l6B_R@9##TCg1Ms^2mBgQFCmcxI2>Sv^tLtY z*5%@OS02P|k~t9WLir}IrrlAdz^F(#z&X%e=PEd{#+<;io*`2JPk$Qa%w@}#Nl#B$ zBC1f<IFs(mgoAWYgQPKlU7x;JuqZcTc7h@D&%~(cahdU9)g2ZV77&LY1O&v|`yAD< zw-?Wv=vzd-z4CIk!E~6RfX0-u`pA#}8vzBQ7XllhW}7}x%>f*+8ynb(?T>=69@~0n zIswQ9Fyj_F{0(Aw`cb@<m^wktyx3B-fqYwD`T=h5PMtyvCn%3=Ar=n+w(52c&jyhI zI>2GdQ$Pj;#W80sOS3eB`j(4OXetn;)k<Fp?^gj(SE}QvAjV8&B@-UEJO!SC;s04A zDdcw?!RNuZUWZYR%MJwyK1ra9s~GSQ<%bw!m=<yb(l~~#_QPGpq{Ac|x<70|)cScd zLTdVima4;wepY3z2XoX4hfunq1^4#%tNm{7oC6YQ+q=y*jK)gIto^jS^Lvdj__#PW zU;-r{O;z@F;m|OK$<9-wM&Px^u#`zk`1^T#uK~#Wi1Ptt%mIe=YNBJ)n0Ng#tlZL+ zKH+y2D+Kv~5(lt|@~S$S1Hht%<=KhnNlDv8Mg1VD^$b?&H8wQ7$AY)Rf{$9ggP*_j zZ;P8SfJq-mR{arD<ruo5L!BD(+OufkLIRRlwztN@WI}_l_IYx$+HMUj#%t^I&=3B( ze0dM6)4&Q$R1HVFfT!PLxyaE37_p6utDs4U$_sy<LNu&Z)zuq7I}8mYI}Y9!M`V?^ z0}br?E>#$2ENR<w1tLGpgpbE=380QZ%IfXud4&0Htl=M4^Ah9<#d{~Ls{k!(Qv9GB z&{67Pnh6%ShPpBxj}xtgb@6a`Nra5wlYfXbRK~6WI-wyn=A|(qCg)I25G%bH?VlA` zPZ$W*US#~(mK;wUghVzqVq$m(0%6T-Yd1`(cj1*Z82*hH_<UpRTn8*rXYnQm9G3nU zN}Hfj2{U|7MbhO+(@}VwFJ8KI8Ym8yzYqF1?1PnZwaqhfu<WBav!ko)Z?u%&<Nz!I zAdNS^2!n1H3EraeL?ht)F^YuP^$iT54<(%QIf}tg6S@TEfNJ4#ODg*@vc(MbLt&vC zy7T|J1#o|gm}?&i5PpZ9*ulUGqN3}O?3Ml5S>^3k1HZqo!wiB3h2V@w9(3ZI1Qd|l z0PwJYu;&Y}!B`q+LUh;qAoTb7@||Q@pPqgFeC{QUlQB<Cgnt8;D3Tyy4E%|Z+zR0Q zUj%JM5hcQmRt9ub3=9kfPPp?hDhOr^LZ~bl?9peT3JH$($6&I9&^Bz!^90xQhEKuY zU=~J5<YJ~Sga1i{AF?t_gf{;VnA`%Q0;G%?$I;37(>N6jb6j3Q!2>TJ9=~^|w(Qxn z7M4#g_2@_TwYW5mo}t3!=I6`*Hwy~mTnHD~dt+g&{;Eow8ZL%UCBLME(12kUSG_fi z5@M9%kZ-@fwvLlmdX<=z6o#<^ff|V48iwJwu_5q9JC4-f!e}lDvIig-*Nq67JoqgT z4;Z|!C43FkkLnSom*pHJ<#4>Vm|C35Q;bT<q=<0n?dv;((J&2ip9(cMHT6_#=s~VA z#RI&Bx@r9R$(`!>mRBh$tvC<eh}dbtn*c~h0GswItw*N8jf#Q)S<Kd;ulYI7rFuu8 zdkdKXHgC=^DpJpQ@dW0m%a_?DB*wip|8dz20stGJ8+a{ni281*+!*%3#m|Mh3}hD_ z@YhC`l$<OEsS0=t?$V=!*gHu`+%)EfbV|j$sGz_V&hkd|Sllh(g|NICASEU|tq7=z zq3`DG`RZN_dFKI6Q$f4Q$Isi#!f)v;80Ih$-bjrS!fG|xFtVi)zC|mX2*b3ex2<gZ zYS~@Gen^Sy%co(cBgYgvTiLmnG+G4?2(*q|cOxPpb8MlDiwj&BYCK<_oz&6s6Ea## z3`H+11iFHMM3645Oc+M&$Fu}{$i~fG$f!rQ84O)&AnedXPtV6=mx4FC&jonKGaHCR z&B4*9M$iwMK6iA)p7ROg#PVWLxF1?d(NrH}fqIS5Hdb!leB_^hm~i4IwlyLm0`5oo zfBw0m6Q{kHR80_@i=AJ1p(5x%P`wSOE@}=Y;CT%Rx7AkP01C!i9p=MUGKzPvv{%OY zuJ)Ol2egHr*o#t4-hWIGM>^sX+EA{cadSvWeE*wl=~m-I7o?{~&f?>EkIP!j>4ZAR z;9K4UMtBw`ypi#7oKoU~F05wy1ut*N7{zs>k3OD>6E5|rZi05ZPR3RC;q4>j9w5^s z#Qq3oe#{J?{9z>RRwNlVJ&9Ns5rMudW|DtZ%6Y;M;)H@PpF1SHSWRGAc#0(@C42h% zRCm*$0HZmCVh^<T0AUlf&u1NEJ112c9X0KE%6dq5k&tx(yzwr&!*X&rJN&ht`JiLt z`~kg+?U+lhnp+qrtUp2^0GJri)1fD6OuFV|!EWR>zC66D(+)?U$;1kn)&g-EFD{ZG zmlB*HflcE3DGP2-w_pcxTIK;3j@&q7L%+{|>HHT*yKvHa23Cn|GQ?zoIM)Tf|GbEf znPB1I=GcW_2lY79w*ggsy^OOY&>N~BMWt6M2x`M1!@c;)&CBQTF)a&gYc?SvH3h}B zzaZFR?5Bd6V5MFGMB@=`WADH~HV{%J596-F1{$=u!81UO9*xa>gF=EjfUXb0rs(w} z{;4cXf^c6sG!k?iO_CQpUl}V4H!#5mSi}V64OPbBwOTK3#R=WE88YNgz(eliHzMA@ z-$(uwC~O42@fNA|xgM-3slz$|urzwZ7Mpx~v6CnqrndCnJQyhh9T+q6^hiNLK^z(7 z7ll&<wx*xtw1-FBv>%TH{plU7h4SdQsF6n!d3fH{WxXRG9QyEbR@PGFC9r;Cek)j5 z!?k77Ke3y5-ABP05j8}_b4i9Q-fkrhAr}61^~r)gfB<(^vZ3>{i->4c@;nZK<Hk3F z?IqrmXATo^Lu>0T%#;6<oY;VqG4rX%4299<3yX@Hz*8P_s$7LE3ES(`dKf<DE?&<> zHX%4W)TGoBs^~xfDGOkz>ZRQ0hP&&GzCJ%q<3q>>J@D`b3~sNK5!~ob8Zy+3avU`w ziz?2S5VrszFv2SV;Rw~N$X7&G0v-0?kozhYmV55*OCXVj14{&nUV7i)dV<Q-b5q#N z4jee}9I6rRAQtE%_;jZv^y)LHKvWPAVn?xr$;JH#F-N1hB?%K4+T*xyWPZYoS4l}{ zaFdj~m@a@-9SJ}}{tdVL$K!G!H)5YjCMbqo8!IpqyiQ9iAXanVW?&jnDa;$t5de*# zkm6(sCTGWaY~m?10qB)OB<rD?lUN6)1LXzc0$3pme{ON{kwMAc+#5G<(%}f2?I&bS z#oC7)kBdOl1KoLmSJsiTYHz4Q%#IKr9f!f~5_Lu^w)B`Y;gma#ZzPGC1~JgD@N7Wh zEEsP7gF1<&piYW&-k!KOOOJ^tSe^y+^Ooa`N-;F&JFc!_P<`<pt`Hn3&{ki;C@DVq zrv#qE;qI&P{02M<uy!UF!@BzxU4ZOPKz5YIkPO{UM4?$4VQhw33tn|H7hikj-6?_g z#ds-(Bi^ruh{rqS1iegu64?5$%;6qR32%f-p|ZO(XYitHSab+m#c6@{wovn7v5D2I zg72ZXw->!$6;tG6$*xyn#W^K_4;4$f(v@8Q1vy2&8-IHdBOm_~$76VC!edrLfeHA< z8dcTVPH$ifk!r+iXxMkUs3+(K|NMChqe5)J-3~k1tr)wLRTHKrRH{O}!LR6b+!PT9 z%hshZC>jAw0s#s+jafO5wL4jU!J8re{Qn5xp!NpJWQ%vSe9d%{AO}09j&R)Xvh6tq zmT#=0ahfI@lanN}Y!We}V+xLwgH<#d#>iP)=kGf2N1qK6`v7?vX6iEl6=Z@k?O(rm zF6jP8+!E)p*wy5o7Zv@wZJ{DR23371Mi|`ZKr#YY2$FYeLp4vSwRgkA;pH$&`ub1u zlYo2DGoKboU0L2xT7K>&f5HzzS(AJm_d*@8ut@qFyf8yRVLvv#-VlS7o}V+2a}Xh8 z0tQ2&OaV$^!qfze1fym{LxU|s5OOif6Ae*8<)CbUAY<T8KE<l4;bwjyU(o7AoCiZC z3)3|t^wrx6^raLe`Y%*xuz2H_9bLWorKPPHSz$m=qPE=^PD3aa(8P@J`Y#++cAGJ4 z?oUDik-@>6q4WL32GU5GO3zelj|*P7QUbmC9YpYUoG3%IAD_$$mkGn<5Zfl?JYh?N zP|P0v_FRCLUhz*<dB(&r&=1<?dWp+C$Swl_F!GcTB7lBCQ);x>3%gv*zd;Z{9qYgW zPw1MOASw_93^1y3#Cz^4;!kek=GL6M8WDJ)EX`?r4|%O2`;f+hG!Oh;oo_6h<TC9{ z#y&{fsN@g{v(JPyPpP1i;w^!5Aw!%76rKQCvbD4G=cz-5fqsLt+gpeP0G7Gse4LHy zk-(?<Z29|rX|G?0K@G4N^TY~*rC5A^a04}zigsHYsDyimCMs<%t^)WU8!+hM|L1H7 znHW%6Kce-dLYl@)Z@BSB2YzMMu_|A6hI4GM%0n0N3-TC!;XPc)Yrsejm~ROgpdADU zpG=&xCF|7fEOw+yTbnV~52XHPhaE0NR#39Lc6TS(hm7<CK>vfY3K(^xPH)09AE=bX z@EnMW5D*+=RJPbBMSG19Q3CLGL3TTczlAL%7bnwe&Uyw17X#DMmbr!rU{Zn3(5F|3 z7y2A0%Q1>kB2Iqc-f}^B$Xo{h!xQ{;t>wx9Fc=u!XoKjq9bS&{96Lbx6_kO_<y^9{ zNy+oDp`O91OYR2jLn=0pE`g!awEA)pHZU=?q*3e&e6Dno4y;1!*T#5U8=X)m-PRLY zN<YyBP)|tBM||pV6pPFyI4(DW^NVCVk!K`c2*adce`yTLSN1gKsE{SfItL-45}LzN z(w|LDPqdV9S_}S6olHl6RPKvY6LvU@0h;v|We(ae&_WDe;Ds}iBcr4BFcrhE0gdwO z*RN1pC;M0zEm~wZH6ex~Ne<8J*JlH`fuo*9!Gk4XGfaqxB$My2c%hC*0``BcuFk)j zMG5I@JJPcix^^T^JD?CphXB?{A;HP}WS^mnp419i?GscT>JgAw4<}is!y9DPQE>-? zsKr2=3i^P?uMiPP6(e|C;EB|WTOkROk#A&V#Lt1}FG5D$dW)F>1{!79SsBO5Z~$^3 zQEC<X`77z1BV;8Sa8hrF=&-iGz7Pxt?jxeiNN*Z)khck16rDw4*lAfa5R&s%2B4K< zBnKe3T6V9>YUnovZn(J@U7-a=W++8DjK)QWa0Axhonqo}@zePcz*E&h>sBH-By}S| zu;i!6DcMnxZ#pM73}fJ2z^gPUS9lHMR^$VUN#L&^|0GnAC0!{*G9NRt{fKp#k=XMw zzV97l2*3r*5o~EJC4%s6p)WxK{KcyKd^%27N46Drlab-%Ib{l;Jy_p5J{>A)%+ij2 z*f&@wK_VhCe1lHxft6i_Ni{fXVsi3_FJFd~Co|W`qNCzum@@oW&|%SRS20W3KZIor z?64S~(P+GG5#=)qh#Aw!yak6T(&vEi;8&noEm*Q-cmB*_h_e{RgA`PTmSyWzMXPKF z!6Y*y`Y<eI3YC&*4hgy$q!(ah--6R7T*o8!Ko&wOP+mfLB=cA#jCn0AZos<Gn%6@) z-Fxw(fZIC$NXVNmW1~8l@VqkBBsLDM!%xa#4_ypQlPnK#fUb7q?wR6*Xn>}xh{3XE zy6rB!Mc@%OCmm=M2C;8p41AZ}*^#4V0Dgs|FWWFA2Gy{Hi#bHbMaj^R9ex-zXZR8I zLfFlbFIX{hZr~onakhpWkWdw3H4^T*xfSZY7Jr5FM-V26;lZMV7oXhJOjydm^?>ad z<&eb$Tu9sTbo(4-Wo5d1EVUnwxX?iYry)#tcF{Zhu=Y4{@)@sl@-m=<Xc>p-V2eS= z=Lauez6^Sy{}`HWUSXk7{@_L65!5;~GOZmNoM@<WavuxBK2x=TuE5F3`3RVRgfko; zr2`poo5Qp_5xVXN4&b2bffYe-xPr7tZZ&{%IB1>{w`yCCVF%`&EHG^YUZChmK^wri zfmIp0{BF~XjYnFL4;eEOSVoT3Wdy($3=0)XP({M@G>+j%bCy2qZmjd4VKQ^!OxMkO z)mQJntj_cG=!#t`cQ+<xuUvFM<<7@!W1bTNa}S3lu5@tc<hnYi>_m8?o64`-oLq;@ zg}Pad+8s*zrCX0!8m|8u`ZDQ@CI`naC%O4m)^%Cu^>|-uDNYFCtn^2`W(=<7i<4v4 zxc5hc0cK`qG%|$Mjda-8R_$Sf0WLS?!t0^4fRdatF~PV`6f0dhz9X6x?$xWaK{rw6 zPGg7h@~}o$r(%E<678{KWF`Rw=fxSKtq2hWH+s}!cGGBet{C`$$r*y`hJv#aI)S63 zBtTmOM9PYMD=`K>C*c_?3k@s*z6-!yL@iqu!|<VRWE8H>1uIts<V_+HFsPm~G`txT z^Z)2N@3@}#_x~RpBaW55g-BMi*NH?bt0aW13fVI<vO3u-AswTVRFajfWQDAd%8ty+ zCL^QY{gLyz{eJ)a{y4Yq_j3;Qe!pJN=XE`<$Mv`#SLVINJIVOu->D2J5Oo`xnx46M zu~@ls<zBsd1^>2_d_knz0xTct>iWqy`&gUo(_Bq^+S6osv?VKRA!1%)P)?K0+<;L4 zP47la`#Ur&Uz|Fo8#7Uy(~(rh6gMx&XRHedsG>d=;>}T%gtS919_r1<ceeMMKc|HK zc|Kl&PzM|2oe2pE&Ye1uK76p`3<wASpH;nbcF_A~oW=5$Dvg2#&gnJS$*Cf|;lP0d ze}r6jm@=g~2fYp>7vR!qU<M+o$W*9U>SSMPu;HUehaL25QL$o0`cxShit?&dkD&9d z&0nLs5QDa{=}<{u9x`71>ULQqb*L5Vof3T5Fj*j+z}6N|e?$pUX(D@2dy#y8Jells zy(vxb6L>@-XenB%`YB5HY@-^oQ!81mJGBz`K8%j<+ozpRS<n~J3*t2fbD_o0GvSfh zY9EyI5yZgcktg6{4QunjM@*WOcg+LU4AwAz66?^xjDoYL)>9;xP?wwaspj3>gA7Uf zqUJz>pk@|Ny$l15l#-GnL!GXVJ4wn38toCY<wer=Y409&fl0YSIGLT3RYB%N;r)Dp z6*r-EAOrpZ_tmdoe^TjTzrGJU<vpa*CgcPF)1#hmYtl7&f{tMPgJW8Pz?4U4D0^i< zg>T|#UQU${{9FQ3mnf%$V{X*pjL-P?{)aEW7rWu|eA@)T3$s{F{TEi{xrvbC4Bnv% zL8eAH>DwSFutM>|Tsom63C9_)<Wd}R!O+3#PTe45qrW!5D4P0bP3U12czRVEzm1An zNlBZE1{ARk>O1D=LN9y!vK}#2{cUq%TlWS{3ZrONo|zcr_X}vzPyyokwt%3thG&;O z?_4yl=ls4<`dawUZ3b0M;eMB@-u4ucM`;{c&RM4X`0vbS`W!#r0YZMmAAU;Z1*H|D z`osvU^VT5={+l;nq@vQm@568Y$1)x`n3UIj0*;rfRLOes<aZrPCj4llCkB$&H$;dR z7hnAd3TZl1k07Ch-vBOIGlnA7l^9U06@Oo4E@{x?SypR*+itvSjTyeg&xP~_kU448 zy7flLP~cX-;Jxp@*M$bEV`ipV4KD5(Ua{yUd^_u5#1cd~Ql#8D=@4y8#5ngNu}jp2 z1VCaj*kI>FW4a(7RYQdk5B~a@*)_a-_wHOgu2j*^9M<$yFEE@&JGoQ!>eZW!$REdp z-A++eAuctF%8dC>>nMq#4GqsgkgM<d{`2S5ds~beHCmxse^UD2xnJHUQ4j^CHOe}4 z6+#@+=sj~XEr8jIClnsj9gZXYRY9&1JYpfQ!!D&|Bch1$;vep1&vYK-?5t=tGk0C< zJ`Zt;9yM~LCApWkAL>=8Z`HWj0Xv*{m@S>7L;IQ_{O}HU0*>(g6q0xej3srUjU%YV z{|TXmW8Av&Xb%qs1qQst+;^P&bu9&#J~7zt0{39q(xs>9Pw{+@dA{upbHCd$eEpxB zRdX124!NPhfAEWtb*i@o3h33fELN{uSC%Vzb57;KKlT%puZP-Il1`gPL6W%P)eGAL z%mNdUr>l*|ElbPopOkl%<^;{yrxXy9%uuRl&X};5!@;nz4u?3JqD9pjihA4c>eZ_f z<$#>s!4nW`%i#%bFpGnr&X!O4*Yg*HLLDB%!qaqqi3JOJM$<Mt20X$X>19M69A~X> zaiC|&jkW97p8-P-LbM|BC&^1f0^Jg1&L=*0EoB>ONRvf_Rb+Eg3mzYV#EXMiyr7x7 z28~Ela}=gt#F?To&Q~?!gA|Vu{>rrCQU*^pMyrDwaX%s>O_MV?wl5|o#je@0Ti_Jh zil>N)2I%iG{AnN1nD+;H9L!hJ@HN;U%JskK5PW^i_mYRpST;hnNH4?yl@+w`D3mWT z&XoJG59|H?6M!(gons<WJ(hXCMY${w5h{N|;+~WR_jt}6+d>drqbZubzna&jV@QdP z<#lmrc`Jwm2HHn3(;+T|;8E>W!}N@dkq~272o=i^kdb$g3fA(s^<h+ouGbF6G%(>Q z2IFO5rp}a?gQMdThE-tKo^o+iZARwsk)h$9@PeTT7eO(Pi`h1-4dR=g6dCVu+@l_9 zKilTxhi7)=q6-`habLtN=jd-1bP^=9-A9DuBwT>&%xT}h2Pcrw!r*TLM}e7=5petM zw-0op@d#Ty5K^1*h}%fD@hw2;_^@{iv+@86K9+b(VNJRl(jt)L&qDWoZYX@V5mdMj zhK`JRiJB77caHI5SZD%N*d{YpeVD??xpA$CyH#4WI2fBY2&<O2Jbj@UV$$@7)qae7 zdl<qJ8ILRg2qjYPHj8`Nm8m~M$1}dg_<M&}K>%d!q=p^w_>2!Ge3jG{ocU_t;(6|{ zoWZW^udgpt#I!*JfO`A2Om2d-rc9oE-8l-%bMCx(HVj!cZQ6Tuh;_p8b*L2iM$)dL zZn%+E=qD-Z$>Yae_&h4dG40OF&f5zIqnADR+f==5z=g;bSY4<NT=K5<4NvjdhFnl! z>(|fk8k0nVZ58E2*T<Imn|JTupMLP52G?P6yC7zCEjJWFU93uVb6}v~+O<1!I*ZWI zMPcR-{m9r>eVabq3blz6PeYx&5a|LN%pj;<qSK|D!@N%WpYszhT^fmgO1D{}F|;AQ z8>L169K;JldZxb6{Jfu@;_azba&lX2pm_#KVNjyP6AA-Bm)WTEe+k6KCJyu-z&9f( z*GIMpltmBS8PEn%)TCT;2|jhPp<Vza^@YeWYHvWeqE}iS898oQvA@D-Ta_z!7NMbJ z#DEIY0}T0JTcZ}|HQ;{J5w1**0dPqV$Y<CT{%$1@nVM0^MoE|R=s=ro>#dXg1P=CD z=pSBt;)Lp)u!jwQM$c#LafL(pPS7i3Zw`I??nrSi?o*IH2={~nCE26N`!@jeQUFJ; zq<~|T+t{(o$nDKsPCVlJ<|U;!Gd0cNhW6ZSwvcQ}6TB<@j?7YcQ#e1w-YUHD(J+hX zNpF@6V~C9Kt6>P@iai$u@W!PJ<;_XDg<Sp}y&P)xoCn90^Rpfto#qQlxPh>JYtOZs zZBE*5!JJz1Bg>L*0cbE_J|=awJJvq$8RMvQkdc;R6Vhe$jPxPL<vPNvIE57TQ_X?L zl;F{f5GchGc$IE^I{vc-@1-6kff!y;Exn4)l&K6|1FW)R;^Qqt9d7I$+5wH86$J;| zYI<(}dn-p$5M%!QlP3p@<NIrybJTM>s0!9d%WvYWB(aDj7$iA6tKkOHO6b2z?13$# z{@KTeiz~dbWz~|H5E+@66k9-ho;=)tS3$dX-q9Y_P^?MF11Wav&aWN6#}B4{``{)O z;nrLHUi+CFR#sSBCZpN+FW1)}UR-jLr5ym?(Am7RySw}5EnBkcJ=*0EK6&cYI<U@I zwa4bg@i{rAb8}J#Xe0+9iw+AaxE`XUP{JpeW5cplyKF<HGX3=CK_KZu#J5;x3X#6y zj@;4396VroCAdo&+Ry&_F6cx(UY5}z<zfgbN(1VfTQ+ehc1KN|*qZ}xcg4=&{e=y- z#_+VKSogxg{1shb-UOPC^+8Sxq@bhSo3jP47-=_XfIq@-1Lp9PSGOY^YT~ts0nG@I ze33fvLcO|%J7&Ck)f18h7WWLoGI}b?zubi|KZ}E&i74UWOb>u0aHBiTFZqwVWGHNF zTxAVR+XkY?*VkK6ppcThkReT2Y2S^fW*xH(>KyLqK--Wq<<nijP93D8CuY50MBPA6 zTVsBFlX>&zSV|foLXfWI9rB{Bx0*0GilmMRj&D;pJal_!Ay+l2cIo+~8Ai4X+XRKu ztOc^fIA`}7qfr)g15v4lZ@1Zop25<OkcnqgNRBfDS+1_GlQYg4a7>T^(LJxpd;vX4 zGPf~SIW)tte;Vw5#x}1Si4Y>3%1Vv+uU}_Ltj1Sa?&DJ!#A(DB8WLo4q-PxFbL8K8 z9ZiTqC+hOZ!IZ-%O<KbcZEAMh{GVF@Dt(C?u;M#&yfPlpNKHW0Lc#i;gZpyNM2$d_ zui$n@gAkp!J`8b+Y&Yv&ZB2?@ySAEBBUyP=%J&vXKr46hYDqye3iDiKOjYRf#(n-2 zkNcY}F<#w2>IW06LG<CnYco>`Pj!CBuH7te0&j>myiM)Swb3F7=o(U6_`&NM3$S-) z)^Q7tANX>W!)8)t8?`V1I`eppp*+IqbWD7B!iM{-o*0liccNXi7<=eEa+WK1(>Z?V z<5e7&etcZIdb7WM2<`2W|ElUSR=3crTs?=#loMV#whdx<1BATm3W#w5^FMvc>=)&G zjT21=3!O*+K~g4RIL%z*rp)@8+lq(bn)mCcv|r%Ajd%9l%sUSOKx{>nq74t4i`PI6 ztV9s;0mH~m8foWFDb4VyE`a1OUcKs{e2tTOF8vd(5Ks`kNK`oU9Zt<QZqQ&FG6swY zO`4hfg{9mxwV%mUpqA|MhPx=X(CUP8mzl4g!k>(~1vE$UvJqd*0%a;z?9RRUbj;nG zrj9I`)HZ}RM99*sL0a2iL&*fR$p8;PAX)e*hrM`lfsfw9#-{o1nB&Wq8F1e84x7dQ zSdT`GYB>o=-PZfpi7tin9s1@$oIb)kYBbQIZHEqQ!>CV+a~Zj-`$ku&2ZbWBl(LK9 zLyZ_YGWhM`PrXAOnp1lZ89H<jEF&azs?AW6J!^j?7hzXJ;Q#xU98CQuEw;MbJEl?j z<*^0I88oR<lad#uQ!h#ndQr~NX{h@YuB6IrJEaaO2)2AbVF7;@FsesDjr8x>tD34k z0evDxM%%ex&7c|Nu?7KGwnh!D+<5oy-EbNI(A6Y_5a<5NGG5AA44MQvs#Xip6nZ<x z<t-phVS-xS|6-%s=W3xAs6e0gDMdUo?5?9{WT!-4pmB$*q*igkBgKEL8lU&812OXj zMT#5`DI~LIJlIBE0G%idB#k7GGA%JF^EeL5g5K(30|ALXWvW(P&OnpBy}k4HjX#<~ z647J}fSJ^^4(t{}nMas0gZg{)>gC@_AN&0<+H}n+|L_6qCD&zgHudtRxKrC1@INKZ zTxQsIs(_K`qKX`>c*}>c)q)5jY)0lj)P7aYsx|}MUtog(=sIZ7M-kOx_PEAN7E+D> zCY-|kYOf<t!+)56PX2>^Rp<y8I)vA2*w7|BXXVP3npza~OJs57GYEKrN;iGG5$Eko zIK+pOs^R314|X8MbHrRo*&@u-P(<Ot(t`s`OdpM`7e%05K~dW0YEgG;$c3ParDjx) z7ubo%+K(_UF9oBCg>W%U04CYk*=cm8{hYqh4&e+{?*N*Ka{-LTC08m3zehuU>c{7r zygiS;^3$=IefTQ`GL>-95M(7^YJ!Kk-;OtK+*rv4C_%rQsP`2Q87WlSOnP`L@p7nV z!o`bA`7yYPJM*+x0iYzd=TgxyJ9@?$!2h)tMev|FuU6^ad7a<~MiKGgzAirfW+9e` zwiX)r9_YA;bQr#LNuS_vLQTk|hV<#=up@K6?CqT;k5^vPG&q9A#WNtEP3}Bx7+$8x zmAiMLYC?G%p`ph7=(<gs^vaGocYHvUb1Pci(+!;qnzd+gmQD;t`Zz(XVq&Iu*2bCq z3WzwlWXc!|^ssEr8f^=qiN2Z6m>KH9j-5KG5C$K=00+{IuX?LQSrMm|Zh5pqjFE8W z%p%I8v2iYtj|7=>4<FXVJuND&+}&h$d2r1|Ou;YS95fV0L{AlR494&o7RGO%X1lw( z3RP3qUn96^iYCWvsEAC3SXe{y!U234&>!ZcCRtFpiW$*g=M$f2RDg^3=*g3_%!5f) zesb^+JKok;(luqIJGq-W&KJ8q`N{#ajK7!SvoG?lu~u?$R9Qg;04ky<wBz0${%a9v zg!`yA;y|3%8PSHjk9d37wjRw2$~!ix764AAB(@JfnKR^nT7W(D)>^XT6Rvvw=FPiv zyf~<riWoF87;%b^-Q3*#X5!A!HbKS#hg>(q2>%0@OGts3%{pG=eJNJ?06-8iG{gr% zt#8u12GQocjk};4>A$gA)NXuE8EZn-J?*xLD_(%NA(K)$fkI;*a(PQVfsxS-`a1B? zhg|xMS%b2ciKGmwIu3vT(a9Uj7cZ<PhBQpn+M0}^R{aqY9e|@3-D7#!Nri(X!7FZN zU9@QYsdChunt^7Bu$4tK&KK%)KOX!(UJO5v&kdo<Fx{lS-&^`vY6K>r&7_(dSp;fH zcf!f~C;*j}(kLJo7u(<~2x-(%rQZt2&JPYDLF7)nJY3pe{v~!H`6_3M4Y&3w-a(G0 z`Au8|5`+<gu}9o4@)P>Ix=>&+cbB$ce{`;ck*LkhO&c`vZ#JwZY`n{fSw<!73prwj zfG|^D5q-A*o#NRcqeefI^6IV-(}56t(nkdE#x5r|b3UhGZ_91&&f!BJSc%?>vMOS{ zeCEOApgeRa&?yGaKYZvCDexc@3F>&-8eR7O(_*r1==uVMib!;XYNP=|<LS<G;BMgE zCNmDo7{JH)PT^s@cQ4h9wMIz@irJlNZ=k<NA;MLYyXaihcI^$yXKnc{e5z||x|~Un zDJb+QWKQY6lJQD<#7}^wqc)Pc0UFHRDIOa6Q~>PJ!)$kLd8oeM+i~`XC5&)vpkDnz z|M~_Ob5LHM4G+T&K11>>RApui=sKGEpS)*!L)OSpH&Qo%1Je?n575EoprV}FbFh#K zOxret8gjlL_H?%G(<d!A<K5Mrp~U3b@5U_P{%OKQN;yi2+=<p>29Y;4=S4_y<&DBQ z$=8PgR{W8r(xPR2okcoy<z#>i{be{DPSt*w?k;sbgA6Nac{z<kzoF>_jXQHY8Z_{+ zTS$U$POyetBe!>$er&ZlTXs0yvUO9qXVe4z)W=OH)nMYOsL2OqxDP=R-#jFAb>2Xj zZu$$OQI@Owirr+~=a31!La4biWy^M<g2H(4F(aS}*kXXb{QUhx-&V{s#O@wb_8yLo z<tYdLWttjIESs-NXb7%v7by=jw!^85a?=5#yvO)#M^0S#u@XA)-PEgRHbHJ|G%DxC z_Rk=L$|>Q>l`E*A8zF6Tj>dn#2RBYM0rZ=5G&0!WPkth8UiBK&5D8@Vimt?PqC5u8 z-!7Lv=kp7&LsxB4cz8n|w%=siDkCROTul=ZrqE4~|NQv_Q=i#Fk6nObl+u&D6HF*a zkE5B8ZhNP3Xza6i+SvW~h8o~PCws*)K_`<1rpO_4`5=e-faDN6F%f-*=01L20ll+3 zpx4GBM8r2UXB<fHhA*d5Hv%*Z45ZDA<JR@Tn|nt&eFW^Zz=B4uEBr|`zNY0K|J|ZR z3kk7!oq_^rOyq;9`W+H(@!eRS4}kb0<V_L;p4xlqb3c|OG>Yir^UaG@*)!$=O+1wr zki;W-%bNoNGLIWC?h7RWMi3<ouII}Z<+;s^bu;69_2e*8s{Eyl?$rtY7}+F7S>{Lf z#X;e&x3RRdtZat!M{M$%LtA&WY1Jx$6?*@x^X$f0QwE3AffpM|^y19FTu6KZ%#UIg zbW#H|YT{B*+`?9H39$FOAU?!G)8)A2zg8D26b2OCSP!4#6%YfYdd2Z4-hX{RieH26 z(si#+LDiU;6N&x<CXlFV|6)L0tXcO%v{B5RgG)!ySfB2F?pg0Qu<PI(u*w;1Lc0;l za%Q?M;|ic_K*v!SK366#fbM?v3)<!FC4>DpMjF5rpbA^`7HZ4G$fSAB@m@yGqNGyq zOv!QQ&YfmVXNVRh?3FZKYRqH*Q9+oWsKtcMJC?5`9?R=PnCG?&hLWUC!_`clKK+*G z;39f_2m#(@B$S|^6`C{pC_jfN)?Nb`8#e4rasIzK6dWl55#4_0(oHx4nm)L8ZR7Rz z3nTc~B&!BUlgI&N)1c8*g5WBt8xN1abB461B7;_y06V^q^cYrS&8J~@Mmjn3iFT6j zhg#wr2U-kKm*(ERad9pfbMw$b$X{M1e3yDAf$(4(92f;*Eke;Z>G9DYYx2~shz=C; z?EYB<d?j<l<mCoufbn_AK6Is5De9`z@cI(|jAyY=MXp<ioW+<8@aT(qC72FqC@3&l z(SXYLv(;M3S(0Aj6(BzIctZR+m;?D3Fz2gQ36Q-jqt<}M<ZrI#LSy&HLg-r_Q~uIQ zUd)r!k)Hy-<>t|z9!ZG?svDTzq{>d<q(hKpVe~$S<~O<!7`YlD5xx~0oyNhen^b!` z7DU-Is4vp{5I-9`3PmCv*yWU?X$6|F32aX1liPl^I^pK(YDH%$A8oB%$w*1vAK*8z zz(*3jo)e7hG9I_Ykr)$`eX{0mS@1g}F?Y17*)Yv(^F9wb+eJCab&_wP2;tErXby;G zB=AJ)QThhZhBKUp1@-MqF;A~&1#{6<aF5{FM-!bu1i!3j5e@yAO<0aPUhXlBI-9j> zl`=Ly?+s<Q7)<7qG>1?AtR3|CuNkergE-}RKr8Pt;gF@dOT{aspPbP5dt1s(uE$wY zGkuc_pj=HhzI~fS>*LU`>Rkc#*Zs-+$oq8Fp^l)Zvw7yScITOE798Eug?smoUnz1s zFPxvB3@)4h{dF6(Q86w_G`%2t;h9`*(PS<4?zydq66%tT)0>aYOz&#P0FQH&@u3&U zKGZcOcqhJedY{+Vq<rNnRqVkQYWcw_^gz=<cAU!!3@(poQCXdHQ4J7=Bk$#|zWh;m ztDbrvB~-%X{rmS1{q5GBM-H3>DMBOO)FU_bUk-wl87|-Ys8>#eORjW9OvBcL<%Ucn z-{A^enrK&-HYq@rRS2ROX*FwaD{9W{&;bk3l%hHjpUaDPN3c=3TD9z`?d!Wkx8ZfB zJ}NLvMkY|h36x2)?AW$#uaYVy0(4#%lB(nm1NO44rL=`B%LBl*RUFIY+ahh}l+Y`F z0Wzl4zk!5&UaV^wVDV;9rxX%Q7m_!+r!LN0Kt06ysN1R2&<4qCz<^q-xDVH<|6#?w z4Vs{ITN@bID9E^w6GCI19MYn~2IN`pM4JtLCl%~T9C)U)29SYIliFNecbO4VM5|4$ zLK=F7E}Jh?v{7qn%hctU0s2RHMG|@Yqh62b>hl7MQc7SL9zmJ#g@&Ixl2Gknd%vw) zqc;6bEl?T13-ysX{c<7#!cg3=;2!a~LTT*IWkoL{;cm@3or#}cA2ZN1j6i7i0CBBy z9gq6TxpPY>cW4ooI{7Pi96cy}3+h1=awMzWI*nEY@KFNN&yBv3wp;K8X?dR|tIqzJ z8}pm`{<V?w{hsANBiSbcLt@sv`3+AyV;2Au2M(g7s;c+gtVRH`XsRa{epceutIxP? z&fDj67=54uKqv)Y>RB|;FNh%3P<N9d#{4Xh9%y4n*Fh9qWXzJ!;7jC82sK9&MnOzY z=}j_yx`$97_Zu>#abSc+;_cg&VT$NVVY)O)Qxnu;ZagKVKH@!D{v!7&=m9k$$i)}^ zODnVfOJ>D<YWZ({LW)<MeDgPM{D&ui$O<Ggy-!eI$S-Tak;bB+FTIY}=|Wg$T#c<z zR|xHcVmvDFc)@DQw?xqHfTmA3t7#5X!#%1-DX+m07n2fdaY->BTt-bJA_{jK(Shp8 zp`CjUKqxZ9*q5LIVLqI?O1KN`%;maBD^rT@>U(g%7%}<Uc8erRKpav^!;;?e>|jhY zLXnhTgTC>ioH{~6LO|>lpgz|i_*u4Wne(uIAZQ^<aabNrRBpN6d{dqM4Nj1o$Yf^0 zgr<(WbN6mR<zKkzyZvcRK$l@p`6s2d8~59B&p`Y131fNwLDVS>t`oFC>lsvX9ld}3 zODy2<o3&|kfyAWHMweM}e15N$K`qS9gP}Y%O~?^Mxs*t<Ylm!&#vG35K0xSEqeokF zQDp~3=n$<8kC}OV9+}K-2**pQ7;rHuE%xq)4I8W&d*%{%MVJz|?RsfYn_#v&xL~QV zc++sP(gs_=LP0_@(e$JB&S=N1FZZ2+t`t++d8EM^(m%+5XWF*Emcc#!?kHduc$pu< za&IHj$#5bky^|6MkLJaG3p0Ucd-Y1D$3QXpG?VtGQh#Bfa=F3wxr><Z`q6=D8>?jl zfR-?NX02PFPfF^uZO+dEgm%W2N%olSFXj6)ueTQ-p(M~!M5KpDL~7|Qh;ZTd%a{GS zp3c7_vl}&9Qh?HQ(%JfVOEoziUonn9Vrf^TH|O)olddq%Qb=+6u%Rgn;qx~2p#i!R zzzZ)PN#HiFH>a@*pQSt6VglHhmRn*=pGyBRnsf$d$i9{q^a|xCC^hiVEbmhw8z^kX z3A*t{q}@<4OWx1|8q&Q&2wG<bs-%-XG%39%@oOdHtKC2y#kTS?>O#j8&qqy|5S8K# z9f!SWa9@+BBjz>?>uVzGAab0Rs-dY;^Ud&mhHd%?<F9EY;y}eR(qRBWB73OLWT0Up z(2yn^edW`@AxS1Q2TkdPvJW=N?%eio+uzq;8UrCOuV)N0s4_HV47GKg!gjI2NWqvu z6u50?WR)kdh4N4C#4xMNNl6W;qS^JflJ6+vEbvLgq$24?z~P>~dNGiin)|6Py%z2! z44FB)PNQ=c^+hWD`<v!$Z(t~DfdgXD#J?b|I0TE6vAIAV+no-&Mo~`Q%M}<S<}<1| z6@zA(E76T(Vit{{*2dh#Utg$x$`r9rL~LDF#*65-8G(r;lpX)@L;wVf8aE8vgK=@i zD5M9!a;0nCpLszJ;k%jjri{@5KHNNwS@mcjzcnQxln7=6zQ~7~cO43@#TK~t--Eef z?WerBR)YqWy!#0|kueZ?B-+#0uJtZh)olS$ggE{LAh~C7>}o2pC(oXRinpf$h$j^p zU!z#EY$;i_<=U8Ziygl?IoZ?@6YGE!_>J=Vq(P-MvV79u({s<$%SM~_ZbF%H6cSJ& z@2FzRp|Rud{8e8CMDTc-r_r<@i8935qRjhr^osok4(#FNlzMO9a(*c-T0(tXEyt8G zErkmyG=&9ef+>@c^`{Q}BxZ+90$z-9$xd(3#AZzXOEk`ZiA}rO@i7dYO}mL!1wVk1 zMnZKlPaq$Xd9gX0AW&RR&P^obvn;V36~Z&33wPy4P}idLo3#{*e-TDgJuiI~udsQu zVJDvgmo!R(l$)kN0{IUK#jI*tyH}FoleG=Icy|tU7=d>+f15*JpV>MFBq6BIa=oy; z7)7<EguyjRh6q8cM+vwwUm6#6j8P;ie^g*&e}3tO?3p{nuz6WBA)(v2E7480GVL|x z5#UQ-Tt4Q-h7O?9*Z>a#bR5{-j=gs{YERC?vYd4M`RE2#L&7nFrhv*h&3!WBbQker zon7;ORw?eYh(Z~o+!L`~_P`eMG9_-Huh=vuZ40!sSx*{Kz-+QPQjGH#d&EZHBim@t z2SHxq8)&2Wl94*wP|*C~6&z!{@3y%Vyvmmm#m)=`@_S2qjNcHn>GNH)h(1soB?@=o zW^lI>QAJOpVkD}A7JB@Ci}fQ5auxS>wL@IVTQuhP!@UTR5vA~`ILFB3GH&k4!QZ=r zEaWzZ>|h_0;WP^gkp?_`rD@6|q_|P>)BP9NhI&<-`Qg*2rvzy(tP~CaY9#|8w4A8* zPOxU6+pvnp?Vp=}EpQ0u^Z$cdU(l0wwdP3p+SS`lT>`@;zaP?u8aU!rxC<1d!yyc} zM*;IacO5yhnI=FD!ZyV0Z_XA3w48KjPf-SMo=ez#$?UO)j_7@;<9q%3b@Mq1DVTNi z<~`8%Le89#o!zM1v_q%(D46^#q2SkjpfS7<S(N@R7BIIW`d=QNdW$0xLj7>$_;I!9 zI1Q{%zk9FtMpkq5bR&w}*P#>5N|6O*wBFJG^ovZ<Xb+TMS(Fe+g%v~jd=xk#eNAQ| zconw?PY!797e9ZVpfEGjI8-F(9z!P}nFn?lB3k|cGf{a3T`8IyL$)7`5QVP(o*aY0 zydDrD`rKyOa|lX#o0n`{Vm29>1NX@)<i?m8XWu{fI>J#1c8YXs?pz!`UUnfO`bZ1S zTeo&6yzwuyj>qKrBYogM2wZSlr{GScjXV^0m0OM}BX5Q?XEJJ~+5ZM*+)xc)%R88G zgKvt4Fi27Cs;o(Ypt1zMK!5>Dy5S>7jx=lb=cg`Ip1d8=TBvn5(`Te{`5ZEZ&RhPb zC{`EI)_}zdCbf_yw-M)0&U;r!yoh{mI9j0SUi<-GIUq{?Z60aj-J^dsZ`I0;@50D} z52LEr!JIUjou8j9%FIvz8xQb=5Q{~x*|PVoaqCd@;7?036(S(}QGn_jKzVT@>?lxj z9z5U9l8>_(f+*d?U#qJ?O4V#Pk;<A6;W|l{U(r(Bk(y|GF21&?EpP!jRarwrOIzFG zD(T>^<ZsoX!|~WI-ypyh80m#ehC}&B(QyzS5v8SSe9p+c7pFG@wLyx?MU4JD;<u?W zq6RYO)9&5C6)y4fdr>eFg?UIW*+HRg(nkUJ{aPWfrUnjLcXXa*<wL%uYu!YdBd!l9 zbEtjpPj06~<?w^hyq|lYF$#9YU#Pe$cMN!+FgmS1Ci3#E;|#6*dkwpOZP8%NxHOvq z)VVKOYwiLr@U=IildfEmuO=Pu$>_Kl>o^Tcl<OIfVi!kSuTSqDsl4Ad+ZE7!>dfQL z%TT>cGw?$JNLumZGjV)@0AV9b=(!@<Jkbr~qld-s;^uHNr;;r}PBBh)Avg9h>_q0g z##6|=7aNUka(yP@nuJ)!$1;CP9Fwe*gKq|?4(PSz91U2t`+0YCDKd{onLk6)EKl$~ z_%cfB_T^14b{z77Q|~;?9Lo50U3B<Vitpg5nb|(i`9+nwrsF2AcTgJ|#~6`p;&U}e zK_2BhHpQbAWQZ%24Ioz~9C_oDZ_-7y7Sd3|hN^k0uJ_ZYRsb8tBjz?3psi7&#ESTw zJR|g`yd`Ot)VrmoK@M4p!{N@Mq4?fq)oFCoRWv=(_YQ~Rm*9vp-=ou>`Dl*hnMZ?s za|h3f0UdU5{WBiq>kylg7>Tz};Jl|#Kjc*FPrA<;_{;!sA-7J`ZW$M|<jqfzgG_U7 z-ySHfD@_K*Pm{lArr-?4yjm~lWKe__FQTYq-h20#<QS3yn(VE#iVrdvsCQ0_miej> zax{(;a^;n|T;H%Qis%I?ToU+BlA;oAsKU!bOo%7u2kTj2M>+MuYL2YMYhLN0@plYi z<>=0`+Gkm+2P;rz1EtTxsnJVvZenka?vV&+jTD9~<PHUiv}6!9)=<W5fw2EAf{}C# zTHw<Ir+}RZZ}2%putW3^K9P<WTvqZ!5^RVM>UsIS5y&`F(wBxnlozQaIr@m(AW&?m z#X=Gho735eO8WtU!6_;&z=EybPP#wd4NVBIN0~vPk~Rh#t1|ZUQz(Pu=jv8x5K5&b z(*l}jh(C#FDyZ*{8)HmNO+{l;WDEXcdU^>|q>+&4&!0m|-ymbkM;gb4+VLSX9sz0P zk0s|hB+Xlg_?$$!N_4nD%MrTc-_&ej_6PaG9AJ7FCl%62V-`_G5U4EId<6OU2^1qa z&5lzrU-lLdt?Eq@K-5B{boHw89^v|B@xE;5gi!XH(_Rh)9Najotq&0oK&Y-`x`5(L zl2wAWag!#h%C@wgV5^tQjs<o0@U?q8!mKO9CMJy=Kjj@WPPLqNz8HFPImll<a{hfX zU>-G-K<?bbD&itB^HVEL<vgWjOm2s|78bR5jv#zh!75fc4pW~!e{PQ44H(glA$|Dk zrYYro`Kn8aTnq;@Xajz%4^EAId-&1`;)0w!d0ez5w46`44f*u9*R9O|2?kSeoXb_M zim<9WYTS|Jew@3iqwtv*tB%o1zPYXpUrqZesPtl-wU3Lep<a--xb*FNJ$=4Qq*Ely zi6^xB|Lx$p8vc%s_C<a+yiO=ZJzA9EG?Q#YEja~_rs@A|WCQ8!_Zfx3B;_kqut!+N z!;rR|(h<A?-0T;;?ZHNd={lW7;>_37?}LHe;g>X@h~0S5fhC+!Df@svK#^kt?1cuf zB#gI#6iM?KfKiVqC$P3!+29UZ3dFcwG0v9WuzqawDa`!=^h=x1v*ZEXwE0OU0?g?c zpt2-QFDd=^*9AD++M@+G^lty+>hqs^tsQ5t2iIyshJq21gaU$O=|q6X85xTh=^LMs zx3f)wUBpWrbpV0Jk7!L%iZGgkbAI$PU)I3?_5~<}W{NgqY09r};~9Sc;j8{Gr7Oaa zs}w_roEvd<DHk;c#rLl}ptAo6ZsId&w&$F3O(2le9A>ZD2dJS8ms>vkyu2Jhto8c3 zSYlZT*pa29Tm^WExM#1W&p@?QY4PATqut#PfQFHl=gwUI5FtGS@_wiD1zVMCLQ9Yb zPZ0*%&HcJBb-Q0Wg0I&tzran!9ei<!>ODBP4!A=hK{KjoG~^IQ?x#q67d_)#H5x3$ zEw=x)(cm*}SZfmCuTkcH*H`gZg~8!KwUB`28aEQ#zr5=B7@G#HEi8#pF)pG@GV?3y zArKU5oN~;hJws;^;|wU2!7i0AW=Y!OaLCE-<pBO5acMNxgoHh!+G)n0*dyzgx~Mi~ z2%3|9vp>3nYPC{{l30s`0C*hXFW1I-+zb38nMOHQ<xlUey-K17I_}~aXp|YJ5`ORU zn3x&MO1t@&hv(%O>!JgnRr4UE|AVYIsZdYoH|eOo0<=IQ_$kqEBzIJLCa#D^L8DST zKsG=SJ*ROq9KdaO-{gs41Lu(-;|4p92)ZKofg<x7udwNmBd6Gaa*j_l=;%~qdYB*P z4J(LElvev8<Pvv5?KqrY14_95Xzx&`$P~Gzpd?nJagNdsb@<4~uU<87)|;a?rWaf! zRKW}0F3mOP?Brisg;T%Jwky0w_}^Q1t7i9FY7^yzqO)PsrdYlc$ood700AI$(5WDZ zj@x>!-X{&vX*Db)pbQ}4DyBPpA#Mpn=o)ZY05&tUAJ{6>c+y*d`|mChJTp)v*(M6Y zkpG_%(3hLw6XxZ93IektRNO!3%S5n^Z22WJMc_@ci1RC#K~bm{9e(J#C}0W6e25nM zl4#9N4{sCCuYh+!{^ZL{h*Y1vEJ{CZ*Cd*2mj^6BD9yIt?`y*!$>L$P4GDs>AB`q8 zOqfj2yffvR7O;{L<=X!^D=WA4sarHd;pX~AxEP`m{W=YT6V+8yC}PJb=l<C_@_Ivb z2<u^XJ7(o9PiQMm)Bv90{;F}|iE4d4EK|r+b=f;d1$<Bx)0a0*(!Urx(hgBrB)Vu_ z9qvBhAAqzwlq2xr=J3=@NDe@q`<VFS?_3ot3HJr;F`|e^PQuK8)Z5m)=M9$dyO`LC zaLc(q36c}q2fPVT3QuXZ(ILF$#l<0R_DHCRiu^gH1v2Cerw;Af1rRbGJ$`Id&W9g# zq8vTkVuivOa^1h*h{7AB8<px+&e;^>b9j45`Cs%~A>9CRwNbwTnYFzPgl0`@6<aKS zEClGx&jR)G-i`BUS(V3zZT}-sxkPSK{sR!r7!w!hB7fsjZ$UAtq1w>rZoZa5r_P=G zlTl{mRjL^I!5Km)__vATL8rlxT{pm}s7XByAR>WgUhJ^oI0G}Pj#Wt3KS*4J$nafq zAB*=ltZRvM=KeGJp}JRzkJL?kCzs#y{7#mhu9X(ZJmKF$b0Uut+~kHp8U+WBiP>oO z7ZeDb*?Y#c5l>v>UEO9sQ~1CYI;8XnxxJkMax{vXwHmSKX4ch*fAh-uB|2jiMv}}i zDw6?*tbB9$Oqd=N8FD!S@-_vF(wjG@M-BB<_j^O|@7p1i*|g8euVa2*AHhXNF&E4u zg3%tQ&qHK}NnmTK9erPhoRaUfm`+0(po87qxyzSJ@GG|7s-OhQ+_`1tw){sa0$_&d zYMi}yZ*XLcI?NQsa^I$QNd|;`K!o-IwKKL8caBbLKrbTX$dSqnS%HR@bITb1lF$?E zOIvE+p+o2B{gPLCk}}94^2)WiBaRk8X1c?mVwv#rLT>VV%sqo&Ts;&HDW*9fNEI}f z<V+rUH?D}df8zYPn>QU?3jQoiiOf+IcdZ0Vw**5IYeoR51bFxQ!?f9nM>mG|_J@G_ znyuT&6PCF&d^i&kAOsQxx%@eYj390sIiPKcv%p&k0qF@LmXm29rJ%>Y>~xO0gr7tc z?HeMg6!A>hynwLv`E7a<;a61<H$A^}$x5-yHcIl0;&^a<(Bj(Co}_{$HE$81;A%Te zGwDu8cs{77B$WVbJg@NM4|y49QgNsX$531I?amJ_6gxYafjcT7RW%f5prq_QGih-^ zi)v3jRD`g>))YF3_FjpD`xx040Q)~0)?i4CO;FzxQU0{9u$?M8-)$+em9Q+!EDfNL zO0=_15-G!9rRRL9Qlo#$uX#V_>~i%mH1skxuo)9%Tg>>-+9ee`cP_lsq|S~yrorVe zH`!gLOhU1OPCJ(^_;Y7y=a)-O5|$S%Xwcub;KENf0WT7~d)4eaDPeH$teipFdjb+i zKD(P(yv2)GKRcv7Jjj9(t5-8S;Ll##_rXLd+BgWmEr*pWfIU!uc6_lZGiF2`7*U;T zF5;C&-AnwI8G87SH3bNrB}d761$)Lin0h0_5^ES3IN1N^)&~voGNA*c>P2Qiw0=ak ziEhQ71WY{e@c1g)4oid7xWFznVOX3#?bN%Nk?A@*BG^_f*uH&xmgiz#8m@owC}5iu zC^e-T-C4L8ZG@b~IOgm(M_(L4B1lhtmQM-a+v8hnPYaD6ONLNTqi%@*Qv8yux#VUf zlnaPiBz({)FymOwG>^_<sNkN>L6oV*H@d>|Q&AXL)#hPstidX|%vuPa;dCT#95Lw9 zcDiW5XQua@;xtLi^I*u?Ic4&O-Id|5SxMdp0Q}g0fD0+$h+}phzfQ{oU%q_l@L)aP z&gxnHMq4c%G0zf=af<BU>Cm6UW1KO62z9XA(1(AWkzonemqkRIiTCx~B)a6BOv8-< z_c`0uL~h;}KtrppReB>1#*X*UnxExX|Iv?zlS*K2iJmw8eyHsW0+4Ed!DVxAl+Cyi zNUd0rY<S>X32gg#0r2Og;Q(daEb}`xCTNYr4}3rwWPg0-1S<C)gn_YXd!@#b;BP6W zIEj9sSlmx`<j(QpO3;?Ter2a)MRThJT&Ac5W!>5F{kd`{K3r;~g8s#}Ii&^+NIOvT zVGUF+b?A*kOKT298!p4bMh_}&_oD<4A~Q45``5=>x_0;pkpBN$P^4)LEJ9pHTwB(p zVhMz07Np8ikI(o>3`)M!))FeY9<)T<9)owz<y~<<=)Yv+tzY90-5HOxpT=I(?L!xd zSb%<&5R1@fn=?r@8EA&INPy|=^SUDT!@)n+A>8v{z@A2=T%m^b4h(F(xo3UCsbjS9 zB?~<J8H#79kwMP9_+K3|FXhDJ*umT(DZ2{^L1XN2$Mb9!B;GK-hz1ufOwA-Udf;;5 zrvG7o4;7`NFv*4mM(5$)9BwWI?yZ&&o>t9qBdNw9+?$|J^HY<-u`|FM$XK<Tz1EM# zxlrLU^^Nq}*1GijFt`LpaED_@l>g*&QU^l}nbR<!v3)7$Xm<)TaKLD!^8=%t1P*vu zmvc5JY@IfBYA{e*>L|jL_D7>^l3oSSyo+kRg8M>S`||ic%w|$VT3hbQNIsN~O4v59 z<zzR+DD}OMtFGS9Z5iKsaQOWljHy}^>fH|x`ukwS5h9MN4vyBW$3B(7Sf(ktv_3|| zVWC74vGZ*X19el<=pih%-O;kE9e>f%E~A!TiOt@9!jfgYLQt|Jrb})@4JIC0Z3D;^ zd})`_xscHShlGfu&|wr94=<o4gJ_h3nZi-#V*MB8rm`q!U7a&E`tWKdwPL=Lke*%( zcb0hiZ@d5C&ZGZ6otS8VVl*XtD-S;KDr=C}&h5Q4j|T$Fe46Pv4NuU?Ye(Dl88IM8 z|Mx(nv9!l|+AkPYuE$t4d(5mWHZ~0>t2PH?fif)FsYs=mak^+N8E$pVxz&#s>9l!b zX>KM5#;|(zE2Fp1>&_ozIB5jEe(ee1Kj2Do*-PfHrrM&(!QJm16_Ix7+O_i&V@K^D z`1Ie%<=?f1{l~|ov5WxYSZR_I?@RwjKL3!GR=hd87)HmJUh0Kj(y?IZQMbT5<Ij(8 z&0>kB52h_KsY|&A#MLRJToccLY(k6QA)EI>2x-MGjReN5<>W$-LTayom3h@zN{RAL zI(NW~hK}I2CHaI%({^LY0qB{j*9=7~`j$wy>9S8ZH5Rl^6~<OQwJB5VV?-kWL?A25 zmM_24qlx`{mf`^AYR!FDfK>>OC<mSe`PLkXY^me-R|mO#8v@7eg?`Z-KE&p}JL6CM z%FXWh?o^=)^^er~)vlZU7<Q9`pha<_&e=~#8wz|jW2h_@@b<Y|Fd0k63pMAg<VKo% zz8S)N#aS|-;4@K!F_GB&KfFbKoMgXh!3~!>4({E%)Pm{G5gF1Kkpz^KgqZ0UggWPe zYx8R}ybP(nD@8dCj>rMbJ5Dq|SkKD%(aS^AiS4|-{!!0f9%6!-+1`Z_G0Xz@u`e%O zHy{s^QqG6cZ}kkY<h2nKpYo-ZcoBdpkYU%?h3afj>A3s-$`_{ECv03Mb@t@;a(GXC zzB`UnB_l#}hRLx97mU(!D^96#n>Mj~e4E1RdQt?oqbW$8AK}{*8iO+2HGIYlL;tS) z*4f<Gf#_=J(2SryzRwH?FSTUgRi|B}8Z~YD9IyT1yas6<4&J!}D60&u(0=Rv5(6sW zj>yH5fLfiC<1_Q0FX398I~>|2uce;YE?h@&rzMC^dj@u)4(F(AxtS<*8gvJ0vYTaT z@l$1M9=P{9B5mrGFLph4dK{;W95(lTVft3sBF8xv8ozo%CJq8ucw?*|oE@GI%Ub2f zl2bRdlqQfA+JD@j#ua<kFGtX%sTJ;QSL}UKTg%qa_Zle%xbKIdaGCwA0@E~77$I&6 zhH({W6M4hSwYm7bRJ#rx%3<+A5=6T%yr3mmRLk1?xoz$T8zRbiMp>nDBd3O(=u_Ot zs-2Y4zkLtR;<%k6j|OScQD#xM^^Y<(t;D_srV4;YZj8fJx0wI0#$j+sELF4P!1_TS zQ4eVL2v+Pi4y@dtJwuOg{Qfq6SV6n~eMyFDLCKtp_y-L=m3OQ@94cYQ)U)5Mt9RLh zdhH{qN@Eic{b%d0>3D`WVVW=2v&w9A_4@jd$k4lO8m;(nd1CBAq;upuwlNG3pLo?h z_TC+)gWwm#&`Ndu`6>Bk;xLlz&<3>YO$$V(EN2B8+lO}!-Q&!nlZq>RNCHO-*)N^i z)4n`JBei!SWU+NPky1=(xCw<OtuC#M0-Q+Esip{8b2}ce$?`=BBZKgJ(9PCg06~iS zglPIoPeA}sJ1QB~P%B+~3BmgtF1a#9vDCtrkUcS$iQLHC8kZ>H7-lWPye@DcBF5^O zBU!{{&g)j%aKuCj%`ZJLRR}OLn=Z{52-qifNe<qT`460!8A+AE8a33WD4Pf~KqDC| ze<2GduBemHZTqv)NfQSHc2}!YzFQDo>l5$Jlu&Ykxf1CmtvsK@bclqJR+$YWudlz- zsDCf8UhSq$OTh<Hjt+~s*CK4^&UZKMniY6=cU&~nyKxSY7%K#4t-Y7AWcQz}xP$Dc zvDH84`ugr6m@jPAfjrV>X>nHdfF}hNFzk3t%6Uq_7MBa}qQwRWS@*{=Q#zms6Y8K? z9}(m1W}nrJhn?surdl09;NUbyUnJN;4@pC5BtHaFR!i+j1pvD`wQK)TsnRBgt*$)m zh*xMckS;j{3?~uG*45D2FmE~Tmujg~WU1xP@R0&PWLOWlP)c!m0YUWt+&iPA7z~I4 zy+V-3K?DHE6OQmdl~n0}uAf%P{)|VAIfJNbAwhzQMW!m&K!&8kJ9g|S{_zW|16c`C zQhR~{P{{54;BU&}zRVq!D%jQBKgUdzOkKCK&g+{l=%2>PZ_7GGRRmCap-ydRl3>=d zRg*rD?U3)rAJ36v9W|<CTA-W#ZkM?BOj|YdKVB8#RMUHB4eYxxdC|CH3C61KPfP05 z@z>WUKTt@hiA%YqSVXcm3%n{rBv|UQ6)O19@pp=hIn%h~hQio-^4R&9Fv%Y;)?LG{ zrc2ZubPY0KlV7FBZ&y?SF<pnykmU|k+~gTE{L@h<?A}QQN3J~NJRy9^My*x_W^uhY zy*_v@9ut3{X-CAaG6hq{<^>=(=t4%IQfB?}1_rhzlb|qw3Gh5oIQYRt+|vWm56g{H zwHnlbh)s|PC{>Q%0P<xCBkjM1Rj9Czvxm$}Jsk|*LFq_C)P?N$@k$FKWo5F;ftt^2 zOvCJiTO^L22H@X6KlM|07iyj5i3L%?Oua_tDY)Zl$M_vPI_EgAel&jK#JyzGMdMpn z!_JXA{P9$w(%1;wg-!$u@X#T8T2aQB6BF-Lq^w%v;aa5sQrlC_1BO<;ceY(Y2ee$A zzu-k|X4`z#opDJmG1J;ZfCK~52kW`2?uNJ!0-+x-Lwy`98&_P>^L8F?!t4&m&3`T2 zk{RWOm|qC|J1F@WQhJ8x)MHxKS{K6G)Mys!an*$Lvg?2rZBc5e3s~RJ0Ae8}o29pX z9UZNP58sg$W0msg_UBlbGTQd}=JgDq0zJeh^X$4tr%9b5%>v~p{4Y_Z1{FB@5gu$O z&IIsiA~~TtC=#DQPe@2W$YZH2BPvpEOT-C#LmgSiv)_t%)+NX)1K!3J>5x=Bj8)1A zO;W0oC8Nw%3|U<}m55}!Xdstn1V2`MzC`6284jsuWo&VtK<*rM*zx&=8g0tDySdqn z2`_HT<So$=R*Z$eP98J*{M+_4KLw}RBGS-5co28X1J-A^7Y#x%PBBA1$Oh*yV<g4) zN8285Hx6q?ZnZ$0RFE9bwHr2^!>~j?{_>xs#iaHoWHt}CdEiyU;khNKZ(%0hGhs{` zk@|v2?Z;mOrp-cOy=>JgV>mtjif##rdf&jt`DLniVp(URiNn0(htXC+;T4h-2&p!r zCa*eBtKt07n$qt3h9@jih~YM0$8f~dv4i-RSLufJ*a=lS3UxB`c#VU1dh*lNcmzw= zXM0Fwis{fZ=PaHd3Gkqgr;~|RifIiwCd@+SUxm?Ql30|PQCnW8s%)y@fw)WqLX|^h zva!j<YZ>&*H*XXu{WlXhi!2V(Bah)@86R?#IowJb%kOTFTI26Lxjh(JVS&4^Q_RF# zcs`dnBQYhWjK6^Weu`ap_l>quoEeA%>eVGC^H#4_dxHQm8pR%xq41rBl6mNx8AH-q zST#+6gGvj;n;sXRPa-Fr9?sg&Kv?=IxbjZJJ`qa6nw%gT3tD{=yQ9R084%}Ouil@i zHwINM%VvQtFr>7kb^v4|Jad8JO28ll3SSa%%C59*q~i_PJI#3=e(;X0U}2^ecd5`| zW=e9@p(tKXKXwnsU;uRUnAAO0sNl}Hn%fi`dcOi5+Eg+7;0QH9LHwaYHHMH=*sf6{ z%4@-=iBtaEzioc*Sp3;^sCWgsG)nRfw#^E*%<r+??^I;*<HNPrZP{MfE3T$rV!fbH z(=24)-R;Yxu(ox(mNGFG7o*NJYRO}6M6#({rNx<X;Dd2Ke0Pn#$FQGs_^pDFCtI>A zxnUvp?Byw(PJJ1A!8-aeiUj#dkPJjtQY>rQ7Kp8|qYy$)1sl~n^{LHYMGCoK2?)#t z6Crs&PyE&5V&sNeXA9j?i{&(+cOLc*?g%17n+514-&{v;gB(_B=A7#e2oy+Br|;dX z=9fsxWK_L+(3r)i7eH1(`xN};-NxAZg0YdU-<|R9rxp~DB$fWXc=-2FYd2#j4cq4Z zOA~;NuEZ>IiZmwD$-sz?kUWrxe>S{-8D*fo`LGRFs{U7^9;~qq*_h(dBw$6Q{?`A= zKgPG-<Qy9!3YJYOF43bAMH!FlLNZ;lrC!ZOR>nI_iqoz8gK9j|MLVvrUq>AA%+hA5 z>3LUkxt8Egp&gD|Vxe9U#Q=v|H5n=q@yv3zr#NEKvAv_CV`|rCUwDGhQ*_|g@|7^a zx+2Dym66MX-?2EgIUK&Y-WEw6!4B25F9IUlt<!YG3~9hMpI{TJq==K9w=wa_BMl!A zU9-sIE=;%msL{>d_VBWD!Hu~SFbvTrJ{0FXg>brs@2KoHX|XuYKE+#w4c|Wyz+78( z3F76(VmDNte!e~G2bAE{tE?66zqIb5=}dd2jKgakNOlye2vR2^t=zK<H2vjH{XQor zfj&Tv7yn+iZ-^_fKKz>kD#WW7m2yD^*HGGtD+w3aQb(kj2VN!LDaa;ZY0TV374&rK zylI6O%^k^?0<WH@Ri*y`-d3=us-!rm=l9JMzhtz-nk1afatzJ-B0WdORuDg7-a-`w zPW&BlO8Uxl<{SnNG<kcOL8T6iigo92KY0@36~%v8ziE>%LlBT=d?CxF%lXL!nmP2i znFefJ-)|YZ&w!#eXDt8$Vog6Rwd;vdkbdlU1FH<8-$A%@B?L=@g1b**$7K}EWmkWD zk76igvDND94z#s>a<7!nd&s!EO|M?YVjU+gXX&u!g1Hv&(O%&++&{V@cXa_;#oaCU zI5p}Xvfr_NlYpM}8&|Xozh!9Y_*cNDK!g8j0l5FH0ii2+3d*!I6NO@PXi&hXe5BkE z3}L|dG+c(H#=O-{e<asn{S%yn#-YWeAs?dl8qP@Hz{VB-!#cL;=de^U5!r2Q+)ch1 zr}G{(^rAn$-fZ_>#?ANLdyNJm`poz_n6HM0aupP#h|?`-_-XD_D>vwA(Ft|+Y44em zouk$)Q+5v-Pg~!_QLA*pn8aAOPF9=@Qw{>uo@~ReUhN;Vkr<BI7^RppL6q^OP0VVo zBQXFq7WNM77v~})7woNg>$OlnImOA-=W%TzUV{}04iQ1d2k$igKBk1xuMMo%ARRCY zs=g=Vs&byDBnC14gHP0Cas&dOM1+>#v?yiH=RJRJezSm~6fTz%BUe|f8?*0yI^~oH zb#jvS);rY_n58~4p&OTFlkA`pMpgmLM@uVsc1%lkO1<Kk)B1yfqyD6_G8NVZo3tEr zeSz*AOyW%u2kb?D6ZgeM(thMVgG#@z6;4l@(#Vaw-tp7*uA0MAg~{wZDBC&pEF?~l z;fjPsDIUfoR07p*=gWzS%Lo~x4&JeK+f>+ozK}eI<uIp?=^rTg11V3~hBoWn>7r1* z5vlwLqlpr$n=ZRqstK$DXrzArqf%*x-vyPQyz_y1dLpy1^Mvka7V8+_8qFDccstnJ z{3!Hk>VK3E3R2}O-CB?!O9u@w=fzD__L0<W+JwpYtqQcU#!Z*(cBmc{N{3@qjC22} z{&>YO_=tRnQ9BVEMyBntFsFLcgd9IjZi|XUD_Q!(*>>7ptty-VmrUmgDV;15>Hm*F z$qY5(pHqf%>AqY0t)=(~5TX4`H)(gce$1Wmzz5ii;JI8m>#$_Wd%U7}Lv)7ZIA>6* z)bCR?rBTjzgW^WEKEJ~qIo+|>nGWrnJirqM))J|LW2Ett-5n{HsW2pG<%V(czp><o z^`q{@SivLSvDC82XOV1R;a9#-pCpGnv2npTSV>2Q)^r`E?lv84p-DtgTnHUb+K?)| zknonPSn(f(ul4=H^U1CV^5t{RPu<3id*;l{g$e?S){IQCCFlVTmz44EMg$6IIo6P- zABurM0;QCfHRrr)j(<@vsFwb38&8h?O>JTS`xsHHOut7l;U*Ie7!v=xsZBW`w_a?1 z!ZN%@{!Q*lcg@2)Id@QwbMOzYXE#cA#i<#DcS;8m`>FA*BVDk^SaQUFI#tYighezR z_-}k*r<jc)$?LDW`*kSdQzow*4Kc7De`h$sL_>7I%;p3M21bDmk6?dyL0jqUOSdI; z7!5k5Nm>N>_7FwhLo+bIeGYA(NPW0)?KoErD_Be%R34S>T#7{pD2T?ST25dW%6hO_ zMCv8hf{;$IinO`y1nFNO%IR{aFZb2T9&~6-S^89updChoGVnzVw;WmsQ+4!5s_Nwt z4dsHYBRSsN`{Ar7B}qd|9!zYOJpwt$krGgEh}fF=Z!OI;Gl5>@XCC<2rNW5VdvuOi za+MP8wqnH!9h4iH(^Yv_sBcCo8T?_bnl?*9zT1yovhg=r0vPiP2nYuXSv?E8F^2W# zO59o!$Ly=x>@cM($?7OnbT`;c;RE88A+P!bkfLs9@+MIWAR$q2jt5yEph;O}h9iP{ zNWe9%7^NVP0ER;A1Ih+e4GrlaScPIIyXe70nBxIC%O1*>fu*u*)~uOcrvf;6VTy-b zgLPumLt!k(pFWCKqR<%LR6NG*-`-($alRtF3hVM}XYrz{fG==r+WXtM!h5Glap()a z<|f<PDapw=%O_EnH@fvA=xaJ_P#MS^Vj2|syA~j0u@q%+{>c8h?d!Ikvvf3E-7Sw> z<Zm0hlHg~DqHjvt*cfO279;B+h|N^f%NmR?D1jm6FwR3-U;>2z996#`AsspIXt|fo zcu@a;I;3Vt-OO39W723F1aUgK^N+#GDIVQI*6lf7COG52UJDA$6pOmjZvrP#_(x1k zY0RYzAgnTitl=@%jA|)01iJvD+yd#Luumy!kMHaYWP8GX2(^TeGj@aKsOf9YdQ?E& zLDtV@l~|{n`I!DG%lA5XmOB1mZ&uDfh$tvAGJqi{1}^1vuh4hP){S&r3HxeHaKCO~ zx5$IxR&w)UUJ~goO`P-k>lSk6`$_pk^G-4UH^(O0Uv@tzd1O#kSRRrLlnXVUeAy&t zg-GSAs;@~~WaR#VVy?JbJP$!%cuM+%7#y7*-&)g}XezY>1;4N+2EH{IUZVPy9|x*F z8|XCtR|9-2S0vQ&qxdQgYcdTpZ%TLKUqo656p&P|)DD9dR7AJWIbS9%EI(HuMfOF= zH08`Mb{0?;Wj6FRF@oSCojN)hnXJ;|BC!{hD-2fijugRre1TUPwWfM{UO>GqL^x!~ zo~$7-M5pm6Bpr}3ng{fZNHKi2n46t>Xy@mS|6*;+9Z^(AA0YAM`eQ{F7a$Guw>)AV ze*XGBnnatIX3f8HiDud2k7q_7kHSQ>;#n@W<>n*fBsAc-XPx7GbF57<`z_UnF4BX5 z7@n1}tN~s45lS3%oa8spq5S}_pzfZi0pJ+Z|0H#TJ3mDB1oR{kFQpv#0R4t%=C}2e zZ-Y-0A#}B|N&DasF=%tSob_7=KJ#p}#3UAWit3hqufM?wl{n8!$25)3ctmGDBo~#> zvXtOVQk1I(t!WNM0{GD`)bHT~N%g5=ShuZlIAe-w+I*i6*WTE>LBANju02|!egxX} zz3n^>I7iL$@|sE<7FHjTX3E&kj^s>$BgZttC7N20-yo)w;(^J<W3PX&R#|~|0RNkA zRD?5+$32~VB<IAHvU8_SUjagl^$Dnc;q9=zJCBQX9~9-(vwrdfqXrkAL?yYMbO1I~ zJZe}m*l^0BcWkh9h;xFj0hwuQUH&&5+;I7#JL7ke<D{#`D`)bX`|SWZckrXqFcw7w zbn%8I<6(=(-aoQ`$@pLY1e@^CspEGKi~n2pc_d%)g@{D=LpSP#u>rOl{3bfPT}<-v zlPibZ7&xNhO6sMq&<XT=8xHE(w;wbh^=%hm$LrTo1ob7m(Xo|;zHmhd@F_cO4Vr?7 zvtQHzpKhibLi|b?xqm~B*;^)}s?o#KR4L(+^>MlDYo{_P|GW7SVGaXN%Po<bg7ejX z#^u)NSa<_uY&z&@q`IPM_|PRX#epF?4gep%U)(m(Evz}B!1YM2AnPX1`SCNYdUjvr zVN|ORKmSOL7X8)Hee~!})#>KRqzmYSVq{VYi*^Nj#FsW|cX(HFc1~>JZS%eF-+ho7 zUFzT+in`<pL1F1>Gi2X%D<5JSSbqumAD=UT1}l6N_T&TRB~3(OHK}~J(<Ap^=R;}? z2Tj#cT4UPc#7&TFM@}2eq3aJwRRP8npHgu}x5ID0l~`S>Cxit3_ZC#h95HcmJ+S3O zP@?XsR!1tssvbknN{$H2vcjU`enaaq4Qto#obx4=t{Oxs6FcQ#Fd|ZQ2@v1hh#qD^ z!FpC26#YZ|P?V9L0Lr_<^B*p3NIo)U6nv8vM<xK&i~f41O_@kE)|;<BKTvZQ?S**h zVt@^8*|dt`WHs6!5vk+o;<gT4MSu@?w%$++CRw8b>(^TXo9&|Z)~)?%(w)~cc^|f` z@o2T^*sO75T2n7dFASqO%y{9T5BJMX&i(nG0h}o`#1W=5*o~a-NWDLvy?i%)+@r+z zyOT3PIUHJ&3BS|3>Vm0Dc2qYC%bN)xo8JCGtuuY%OaGnNp3wiJoyu;Tww88(APb5p zx{MfQU)~3lp#)$*k<<vdX1-j*vO|tcUI>m=CZ$Jlc3gCvy8C<sF+vm&5-2NUUnyuk zi0}!LCqrH+RJx<KJxj7cjY-q1kXj5H=4a1!&3T{fdC+z54MwQM2Cj-gt5C9QMEr#p zPoK&Y9mPRt?nrf>-6*wDWlP(ENJW)~ejX6$sX9gijWFyL+*h9&-?{}c3!5*Qxk>C* z1^ZZT)3c*5wngS6kKG=>)noc3bOn>~_UxbCihJA5UVaahHRdlI3hU^g6Pm_wH5qte zanIgRKkc`^+501^V*beRz^TlP-v4}T-#+*Wr<?B+%g#F1>g)7zf0(vu^X0G>kKl^3 z;l$xP<6|ex2}|*qRH8$>nmJzc5|hU4A85O%ckDkqCeC|P%p#!YuJup8M3*dbcEZ+e z)#EQ)%mEPk`}~_y%zhaI8c325G4zXrs7hcx)3$BBr%c&DKDOQx6VEH|El3KId9quM z)OZ2rO%`p)r|F{pLw&>?!aRsX;`t8#7ZgL{oV)2}mH$G(24AjXOiMjz$&wfAU{*vo ze6s)@UEoVThsp%^1oQ_WSOm>FdJjv&cZ2vB0=hmh3qCPa6bUML?URFQByH8t`<CPl zOq5QC!A*+JOJ18jS%Sq{lvxN&UZTIj`GT<jUR`~9Gc~<l8lkx`dU1>FaSf!+?5P@` z7Tzv7Uf=+fi-NP`TL%vDbS%J<BnGL-*)=IGkdC-@+G)-lC*Cq=5)(6rc{j6unHi1V z?1V*0i=V%mqg~;O!=qEPKqWQ$mqy>==t>nTJUE=QweHKEX~^A%Kmk2{`pNfHa@3mD zFWe7S3Aw=*=yR^-4?e$~wU<9}=(6AR`G%Go+Dvt-Yh?`Pfj7vf|1RHXoqU5#Zgi;y z)hZ-4mqDdEpmYin0l9_frocTWvJBLYKL8V@+rmkew~m3?&yw)+w0RWNz!W2h0w+*D z=^v4=L>mFOJLbJ{N@HNczI<WOP)hn`+%MEn0lofy4;KNoGzD*>LsG|=)(ncMX8_Bm zILFklU3<rw#^+f}Dn%i@?l;6Wvso!QD>HPHjtkKUsM*xhEr`C<xd-LSm$yRyL)$4L z{dP7?9gMJc@HA`I=WyAmf?UaNoECg%<sraQhTuKEjt$$kugf|1&Y4GeM;&l`{Na16 z)4iLpnfma)<S5@K<9_ea@<UZcT9*b2mm1^KVemV^tx1Ddu*MvfzW<+F=jYu=wB(og z$#<XMlcP_7tj0CAt?d3}``=XsU0-{5ir#DT;-2Nw4|eYTe0Ez^|NdfQ_b~SAEln6H z<y-I>I1ZA+6Pomd8zmHG2sH|)z9d;vf_bciw9*kFLd$WfD|s$<3o<8h)LO6|k-)3X z>6-QgF{-NUh)R;`<M<w5lO?+?;l6-hG@}4=5;O1KU5us~k<`elA-m8R2UNQs1vPVe zk2R<PwV-yqq$d?TvU}4P08w@0uLhvg*6JV7gCeZz6~boXnYA=~m65<wI{PHu{v|g# zH?9Z_`O0E@iCyTD<^$Bz!*@Uy370Z|B52&MsEKv?Zb!#G*p58MZjnvvz}J1YzaYu@ z`{(#RN`@%|_uqcl6lpr8*i`mYTFi}BuKC%ndV$cv+dH@nZd{Q#PP_JJ*LR6i1~%Sk z@w4XY7pvQU@NB%~Yo~x-6#!VT<^>`UelT%B&f@gpW<A1;jjVhKaa7``FI?~iqDV2K zc^vw-^dH@D=8&lzlO(b@KvgsL;fZ$CB~g>VU))rms)?FNq9N(;x!vxhaG5C1d2`hI z%rMJhDI`VCKWQb@aC1lM0_UiT{H1`o@U-TFq!M{zkSq^s?MRV352Y!b*>xgW@p6s( zm-oR{m%CxNXrKf{f*1^WiCZ2$`bB=icASkjh}>&=p7!i9@EBu5bYoCjQYxecq1nAF zXk#a2y}l9Lcm?<GgWo4nID$g+ZvD(m&1rZ10qYh=*j&u~qGL`RLlFMU?L~tNA35ky zo4>AO3UPrp+r9avE_|N8x_2+{nLqAq^o)O7#LYZlVs_1((KSL%FCC35lkqk&&)vwh ztaVuE&0>ZRj&&N+rOU#98<#LLW#8rEO`9rlJ|qUC@2zb<hgm~G2Ka_Gngkz2A}Q1$ zkdkTCpge3ec>7NSfFV4|Sc1*8=U3#*pr#F{aufYWgLwu<j{e)XCy}k`U4~Y4zL~EI z-R%M$cWziD7G2a(^(ZL7WBV8yl;x95YS1#WdT6&<fquU!JLxoJt3_EeQtyG)5)3Hl zV+_J@XsP*ARK(EiOj$ezk^wQuz2j2<T0j%cCg=4_t8W@P=eFL7om7iBK|_dpSMO55 z;G}VrUT^v2S>Q{$FG1o2GX$hv!>Mpo-;-aU-Y^~!miKuxKJW}S5Q3;Nex+R)>|H9( zWlerO_wV>H_x_lcBU=aNwftj7b{hDI5-!fg`yN8>iF2B~4YS<PB%x^&2WWRLdv{7M zdh(#qKO$2ioHcDEB@Ew1!zG;E{!vJFHfTFH4wlz~y803l>ofg=id*7QAov(`$7CG& znxRPSvGijf%?DuZgnZr&l1CL($Brk?G_Gi1WV#J9U1O7s+K|70Y=7f)q94QZ;=xpG zfMC}9{0UF))(j}lHU4nE+9ZvmT*n`R@vELlOWhA1-Q)XZ4YEVcl;k&bpFBZ^JOb^$ zJT8fImygEqq1TPxHe1wp8LStWfOL$S!Au05!(t^%y1^etxV%{UAqZ`;L?x6ZDzyQ@ z#zTxQ)j0mZ#c*cs!54fqW1}#rP>YU9iHREQVSbOkuU#qYcbTbaFq6ChdM!Qd?Qhho zS;P0q{o6NwCZc6|<uomO+J%sWkw=@ndfIm4ya}xX?F#nso^f&Z(K31es_9`x!e&7A zDF}*E);guOJ++f|mt$4PHz8V9-R;DwytIO64=7HAdXmBm<oFB@1VsIqac=ZKOIf_b zZ6<VAqa;i1+O!SG`s=HMNwab@!@>v0HWlhY^}fd!Hg_j%zea#4{F)OPonlIKb9b-L zob6NU>c^T1-ZQ8l)1VNBT=Q%HE#{GG2b6)7Z9Dz()l&4N6=;bb2To!UH)S&MTQiKL z3mDJclV#bu`!7u`i%~%mgu-KGL<~I+tp`(`AhS^@$i6Y#Oll#)QX>W!Bq14RXhY80 zC4GJBKK(Sn_o{m%gLds!BQmr&@oU~6Szj>GaI*1jV0}HDdf@5g6Nm4;rtKGOLNj{( z0>4o&0tc7Akj7Gy38x!Gra0d$96`&546|wcq|s)TZ4aL*7i{YH>$Ig~9a>7%l*C(B z**L^(q*UZjf_3vl!KD&gd;8Lqh4ca7wV09Rc=G$34iwR9y+K}SGYU`YV7*hffG%`T z7vC7O=ceZ%`lRak05rZPdH*^KbkOJl`evs=rF#{#H+X<QFrEXd(sJiaLY#^#hnAJ1 zUSCq?*;;y>U%$SiuOXY1|A#<J>iF?5QD%I?3eSf;Ky3vSmf8w}SHD2r2c=hnJ;}$W zXc3yG-Oyd$emzqoEK03$BhHN6&mz7nM8XTOJ17^r2~#86f;hOK`AI%4pu(+FW1~0i zt=qngrjnxlnfG~4yMorMpQNU(9_~OmPE4KQJ)^B<@7N;Sswc5w2EyuSldqq?d#z^u zHnl!U3!wpjk>v}m(Y>Pdz7ApoTci4@@cgdT(&OEvX|6-5gJ(1eglaq@P2GZh`}R3{ z05E2Uum*d^j8GsZJb3f5H|xp#S;3#Ff8ltwZ^>hg49tj7CCQP073u1K;vMwq%4%&^ z|2IH@`~qyUZndN3(&KM{#abUK$>Es^Ja=NQQOlN&DTN`l%jB(Ql`i;D@;bSUYX7$k z=MY%Bcx4*n@-u8i#Xnda3%g0+yUB#L1d3>3Pm3@`jDlt0?HWy<(;4{s1zf(HuWs?< zU7^;2bdd{^kkAmxmkWr-EK_S?8ehtB#Qk;ArYbk7v?RD5sJXGsv%6cb6c)`kA@)^z z(XA6p)@xUj-N3eoW2a4@J+*rL+uRMTKqNN8juhc4KOufSBWNJTHS|lg0&Z{zYr~^} z1+KVH^B-bervI8NyNlZ=QUa4fBGRC(AVj^Zds=J5Gd!`}5a2yUD*)p}&OxB7vInYX z;unCtBGd&{W7AWv<^h{QFWP^t?lsg?2I2(&<EMSfc&<XD)~Zzn5;qKb*4zEeR-z{^ zS*zCe;;{*!J;zpv&!J~(djFV$)MnO`Rc)kz7hlfU^3(9JZD%fDjy&`4cBU(DurOJ? zDnK6fkg8hs+fIDVSb-+u@R>hZnh_k#!WCmPv$bUGwX_htzNFA#L}!R<aB0@otyWs} ze6~^ai8F*XK`ubVhTelMHx#t~5*8nLe5R*o-o3XovJX#NeXS>S1w5f<a`>kmhW2ue zq;muEUsRw_k?Zt9=z6&Q8sg}2mx85NqwFqdJGNmdxP{zj#vl{0)iElE>B)U4IW=fG zdGbDq#e;+UmM@IN11TS%NqZipHK)RX){t|)%%eEV8q}cgLSvkh-z_r5X>;NA-f}Bt zM3VmEZKwshXXlcW59Y^lEA2g@7?Owy-PM4YR25;w6^Y0BJ^eH04N-#;RV2zU!kErB zj?_L-ar%JVPyX74#6&u7voBQlbhGZ(O%}K68#6kJ>~#l1A3D|F=3;{3kH}U?Nc-R5 zCD<!wAG7Vo7%iK*Pej8^-R4V{8b36FRf@1~!t`i!2g|=K9jh-7-jU)#8;BnPsHE~l zPYrKz6y3^E2BT$W{)d*%@^?mZAqZJGT`Wj+HGQ((ve=A^VF6|QR|b~tGIr1Zv;cwC zS_eis9;>B+RZ?Rn8)(Yp;jVa^@({AhjBr8g_A)mL^0NrC8m)s=X`-SO^6bO44sQh} zdH(dSnr1(aWRrlCI!@@fUFPMaIAoTg0%|XZ?i*uv5_2Qc+JnYvwDQphm4T%%&Ll=M zQ2~gnrN$6C^3K%eCA72s^7Sq!M*Sy(Vuk^6#d69^=(E<PJHGn^SdQ1gKGj)e{OLsp zG3vmG+<bOnrDQ|*@*5K{GsBc;c~*|qw-GI?s?`bDRl9^Cqyr$uB}eQa700(OSGn>< zK#PJ4KlW)trC~ckG_s&4u=BcxWTut0N~yOMz~Rau!fB>CbfLN4jxkPn6CvXa0-#}n zb*auOxU$05MR$p}!ZL_IYK@e=7;dMuS1`=lM$9?DYzcwbmU;g6TUS#hgDOoQ%-Iuc zB1?W?02%_(@&ty6=@wxatW(sG;1WO*v!1TACKYas$dLjM!Ho8@(NG=`BUSiuI_xy@ z<UT?uriZ<Z4=H6fY%YWdjAQX>+al7kbzr!1`kG7~OR`KE&)mbh;|F2T3WL}h4?R|% zHw7c)_<BC61QCiGflP^L&!86Ki7zllLT^xmGRo_W`b@RH=KwsdNUY|+&|1@y0O_M@ z)#`(!3ONLthR%l<R`g%4&aa_;`Ov2mKX71P%{(5F!{>%k1RAD{BYnBi?x)M{j^a=& zaOh(`Pukvx2Dv=VeJZ)^fIyWRR1+?8(1Gv_e>jPmIn2lE@l>fz5IJ1(>cJcz-3mHI ze5rh7LK!wP_MTlR&#PDtR0sD+t{jN5oAL=Y$amj6?<b0G_M87tx%2E<0;u>aq8pjK zqXB&Zjrg3o@I8)c5|P$KR+Rzg2<2tx;<7CwrhGRB1vN%aOFgo9N`<~Z<}44s4qGgf z8TrMNceJ_n*}<VpZEYcmQFv&)6SlS&uYv^HQVl->+6V7pj#VZ1U5^O22y^fU9WCvo z_$iYyj4p@T6aR;)^MLEQf7^bUNm_~|X(&m`p3%;Th^$b`-YZE)8XCwb%1lEx$qo?} zy1GbKwn~&;*_595+5fs<ujhW;&wc&>7y13Z-_PefkMlT>^Ef%@C$Z@f4F*G=Joi^H zCYP$K@-Wg9KNxX(l8z6@Bro96GA9O4gwpU@^-UW+WT*GV1UZplK(DZqV*k4{RDtVn zO@Bq+kY<Qd;sC&iY%ryXq|?vOLMAB1(T({HW;;&W-wLEvD3j(K`c~Hdok26gU_dPX zbCy58sAc+v3;0GfmmwYxkDc$n$v8Ky3QQX(9h&$hq6)UMf+QyT@Dt+5fGm#gl*!(Y z_U=B@Pwl`*=>OL1i9Zj217*+A5rysTt9#Ww8LE9Eqm&dWv91SX8-e{Zr$!+`qHsoH zBxN}kxgtqLej&F)00@#M8U?vctuAF!{6d@_Iq^A*kq(&AXy)~KQPYB*lopL;d1D+E zU7gDG0iFz6PU31#$#S?(#qb+x2Q0=VJb=Z21047T;swe0Eslq{nbi&dxM{&7jYoR| zg=fSh04xCuO03FW@Oa|Dh@@#}MsC47A@AfSh~9#7SyU+B0+OmpXVXZe)<2#tkv6q} z9Hs%^`dB)e>@S!pdqB~%$ee)aOKI(6^LttOVo!t65UG-;QhUKf(z1o8h`S#hX^8;g zk8j^LP{Jy$du~8|5{;CQB1)W_klM-Cd$DZ?u2k|~WFHWLd}8s7n5?WUtXIX#Y;kyk zddcyFltxt0DVpz8*lEOb5HgZGJeoTkYBmXl9Q|I|0!#bLjxPwToPowvR&i;YADx{x zPI`#ru)762;Lo{}W0hMkoY&Wo>jF51nG$E1cb|{(qrkCSSR4;jqbugNI{o~4nIh@3 z;Dt5Cn*5;cJ?4yIeTZ?WSwHHc$utav8UnI(W+)8!dqALJ?K(gH#l3$5Bwn`XU0_^= zG;bJ0Qo+pod8RLr?jS!J#ZWLZ%m@TzQoT!80ecdp6~^dA$$&D6OC1cqCo@cdyGjVu zlb{07Ec5WBl__0!xYt;mZw>d3@LYBk2vW?<%si<N_gD`CkWY4k8lMRC_EDPgI<_q5 za}yZ(laR(`8b~95Ht@%OtFXTWKUiUzGA3p}O!XR08-$=vVRq#A_$B9Hmn7*^Z~=kJ zc$i6$Pg1pgy90o_)=fu6Vmfm@@<rc&JN#hr$~R(~4czth^-bUVN8=sXUmy;tW)Znv z&=DMlRJq6lQq{}a(^|h>8TfK)*EE7YE0SFKPHE#TruFY`__uxCO=K8S+-CmcM@L(Y z;Zh38Jm$zYx(K4YU?*Xc86_Tg!5OF`W41Ep%s|gofEqAV7ST%A9>69t(X^)@`4T|7 zg4t)L)fiU?A<>)KRUWqNW5g&jU5^Y|A|y8jf-z8*@sh)R-QN4FO`y`FMe~(8(A(?L z6K%@)vvK3$iBB7?9`-r6U68uwh0}uu_Et7jiqLXOT64ES%1t|iuPydPo>n(VY^Y?Q zWbR~OQ18aIjtO_Q>@?igX{E${&HY+aQ~c!5t|tDf%A+)ozx2p|l0Ws=oAf^Khn>tj z^ErHoLHfjvaAZ(w`aHB76a**cJ?+V@Xi4Zf$S&#OZAaKxEKb)$hH;I~z5H8rEz&5# z`X<OSD&pWcEMp&?nxQ6GMg|+Xx&tQVbDp?$=kbW7xG(+k&CDN)1P2NYGJH1YRh9)$ zrjns&PJcP<>g1wTJ(DyC;fsX^Tf7O+E_kVGr%o=;Uoq0%qRVMV_iGV$Mhtlq{r+@6 zJvD6{lj4nTzFrJhcyZjb-Nr`dgR>PzVe1DODi)PMzc!Lxp@0`c0<En1R>(kaeIjd^ zIQ*)H*T>)mWuD#AELv+aK+&5)5m0=?J+3XwqazOLoEm2#yUK9r6=&qVwU^f;2Lp45 zpwyEwDp;7Rw*iihTD{G;Da!+5P)-eRc<`DgM9X!W+T!1e*<^!N=bEOB?67nyxJ^i6 zanVXh-4$WB9fuehIK-i8AXS_j=CgZKmw~CE^xM*7wa3VBcwuspX-qC+*C0AC3CN*j zMv9Y)qA8Mk*)Fv(Yi>^m7NPyobZdfTM*)4my06QuBps+A27UhS9+j4Lhkwl|as^<( zUcCXG`TPTFGa(BBR1u(RX(uO|7$qt2Lg}PQ5fQ)Y`*>hWbEq~tZJBGEwya<Ql1x3z zgAu<NG$KY87Am??rbP=T<4;1o*P`Tg#)#%;=H3YX2<%>=Zx{WoUXFxKo2je;lZGc3 zWPbEB?$)h2Dj053lb@eQ8yQu#*)cQ>L5|E|NZUyCXPh`6g3;#OsWRw=yobXmAB|d@ zd8jC;sCuw^4p@lPo76(XEzKk@kL^HF44fz9{=&p*`tVv+&Isdq+F)fzCP$^?zW10@ zPWYH3PVygN?YEkbRz@;?9ncX8=$HbPECwxTB|y5oeVuWp=8DXx%CqE0zoPjv6HXqb zRsBgV3SM55=emRu2@<L@W!Heur>CBJEKD-=!(=+cb4^?wwH!+q_aTR2t-215vJr6B z5h7V$Dq(dpLGC6_G;}E=h$)#qX$IETdeAD1)1Q4-8^@L~k;B83inf6s&bRl!9o<i2 zwp>lVdjxAsv(t?=U3-tWKl`edK^KWiX!+zR444!X5m9frWn8lTT4fpXSI2FY#3h=X z-Z<)E+O!7$_=cmG-AiIqL<o6xiu@~fNqPDgH}tbMF$z$i5R&c!AH;KIrPJOkr7PH( z3289w!ViZA)yr3F>g#XBuYqBeW?<=H1Erq`0n;!mL{Y3tV9z14i2s||B+w1XqO{mZ z+(&%Ty2bj2t_PZ1#x><e@{51q*Zgy>gAHue8{C|FGC_4#^Zv?HyS9SQX$(atGzI@C z6m)mpVF@nA7Z$Ai7IQFE#=K-t0aK}a50vIKAGN<SG9q}Fed3zObDiNsE9f8?cj(Z> zrsiw&y2HaQg@%%`UEVZeolS%WY)M)WkG{__=wWWI9Bd#8o7EFyB8Hf9IOV+oH{_wg z4}Ja;ex0gY3Yvhg<w3}+C>IpCs0Zd~YPc-~<y>8(SYJ>98!KB<>e?gnkP%XE!jPHQ z<&`5|^xKm68Y{NuvcpkKwD~yLj<U~NQ=`UV+CN*bVr#b%M;p8%F$Q^Y;QfwU)45}; zw|{!z{fNqTVR2-gJJfB}Xd{I#sIve-9Uvsb8k^L;IW2W^(tE?uQBVvujp_dB+vCZd zpY`BBeGSO)WnI~_V@p%>9l!oyC#EP%WSt8`i9y^unXnGBTwi`!LT_;IJ+87MWpmzZ zhV)YM7er9vK}Q1{8o$2P%gE>g&)F8E7tSHB$Fe0wq}q=NKn$&}CsukBU(H4z7I%gq z-Vli9x|Q0CoR7Oe@vAPk(Ac(;@hiBytAA_$pebGTqL004Od>^kIZ%V@Q&x_*g(_Ei zr`p=l@oNQ_y3S6ug@vpo?ZQkoo$FVS)0yDV0?0?5sOz?I%Ng)r5B&5Y(~Kjp^SHQi z8s#S=BG#F3mN>Eu?df1PHgM?B4Z{nYf6i?hTy$^g!JiB(9`rb4&T!;9U}7;LOf1rb zA0UoM$5{4>!EW-)^9vP*!|%DL9`B2L5@eGauC2V*SIc2Ij%)m4NhGhX;|JeV!$$Eu z_3qX-tyLO<er6r3?HQrp!#P<4CO?M)Vl5Q17+zBmHT50u_+xFNNs?wM{JK0w%5L$} z{<AUza1X_H%Sy3>kx{_U>|V!rcApiDv_To3Pb|dcZ0Fn5>dDz=NRqEC!vRp*e@^R% zTvbp&H&*esujAL5q%V8a)r-ECyCH$OYW38WKD2lQ5)<k8IOEAP0+q$yR2N6bs}9J! zfHyaq54R5Dtw@heDjV4_EY5s{&G3<}CZ3y$MPI??RV&0}L42ryuFc7%JngmiLF87P zpo_?X{&4B5F2p~dAO7@X*q9^V-u880d~<47v_1U7GpjhhHY)FR@V&QRb>qF3^wvZ2 z<!N^S4d05}JRI+|aU+;@xrG($hi^R&+*>~OXKuF-rG3VlZv&KoKe&5auDLpu`TS_V z$F(tyu>54#10h3FE_5vS<+$fK$>bt37;pZsd`iY{+wdtrxh$My*u21I%(!tf_bzvz z!C!=R-+%4It;-P(8Eg^qDXg`IMos^&J5;#-Gl84X3Zb|H6d~H&-fe~|6P+8-4z_?O zyfA!@`qTaNot1(!chz(JYD)&7b_yf<OV8)v_*476R;NlQp1<fC&%KhcIR%~P>OQ^N z8zmJP#^jDTJ9j)UC6R+6KO7s=NZ>~a%QYPV5$X`G-ODa=$hflCp>NWF^wMtspf$+x ztJ?XAmNMr@Kt&KRzzfe(_4(%}1T@)D?yc@%kMUH{<xK`kBX8ywFZ93FKOCJwuxsGb zfAjMZ0B;L+9dksRX2tj49tEF<``j6vGP35i8;^T!Je9<yHznVf`P>|Q<iX$96IZ5P znfWNPxP4XoGagag6>*fl1|S!U_xQq5X_;FU-I^FE)swTyL_XWY^pVK^$ZK+kX%z*I zhCmc-&&~I*JFDJuff;V3w4v+sopY!R)*+kxV?AhUXB`8c$GCAf?`UfD*OGq;;Q*VU zO7WLvwZI_n^<n{iwLb!DWg`qC`vz!Ff;^6W|MdivHj(Uw3GoJM{gzw~WT{u-FQRyG zMx+H)zp6Vw>Bu0=VfRD9<l17gjKt{#7b7EcKfYBsYEGlReRXNgY{)O{XkihW_u6M> zWN`FQQw~=!Uid|yU;AAod=)S3J^9?z&wW~6w85x0U~RlLQ+V;GGxqRUuMH;we)+xg z-rEKWZ~yM&5Ap%~u3NIm-!D)zYq*oc2-;L0#~#ihMx^F*gewEHR@8hR^7W;-iEEp? zXHw2B#4cj*g3&|1cJ54gt|t%@6`vGxtk|xuGClY7<8^toF}a~sF27gyCqxGZ8)VKu z=hE_t(?D9WP@$W*ZCfkRtYgQ#IRx{;wI8VgG?>d^wqmcB)|~FT+(}r<^Uvqc??1#* z?I=M=jQKDBded6|#^KhLp<WMr=&1OY?O7(-{oh@^)WE@<j(Q6$c}GcrCN8}ME_UiR z164RM`ci;Ej(HbN{xY?nFC!TCmGVOpE3npqU=tXFB8)cIBDS+45=>^gc=h<0M3Vq5 zqJD?_UktM2dVKWjH@D|gFMYznXJu;?ozJw_oP0c&KtV*71$P71J3PDQ*3Rz)Ysv$c zfBo>+-517lh@n}Rigv1%EBsY^w)XE%xg{5C9Kr(X;OloZwVSGR($HRlj`Ie2L{O`U zErFvuydK`VbxSBsG{<<>O}lb*u;W*=Md=gouC2;&UcLIVR#(h^zVC#4N=`^9I^O@) z`m-*L{$47#3b5<wS^Dl<K=*l1w3y|Qaq?Av7qqY{sb7;B7BNJXcSH&EijKF;eTdrp z%Dg!fsRXdmXpAuNI<J%s=F=ET%eR`-T*Iwm3wYT5kS2N^fv=DTO=UEnV<7|b!0aAH zPb2-x?<f)+K$VX6_Q5azPS@1XUIwh9_aKb0WNE3SOf1-Et$^DP$a`<9le;FT@b>|4 zo67jZ1cqh%uk`geHinANWzt?w%%{hS|M;YFij3R0Z_KvGOGje162$Ml-TE*#ck11m zr%7#gS#M&5H@>)izISIGD2Pw*^j`O|zG&lC5d(N&TtiHu1fX-nR8F|vd9|&*TNgie zs%&U$qYqMaLSG~X&{v+1xInXuB~F_V6<wX$_1CmvMoA^vUvBM5YPrLw<vv8a9j3Z> z_uU#3Qy-yyvo4|SRKv3jkC}YR`t*4JI6=>p_92hwhJpXajoV)MY--o5lRKmAbIJO0 zYUH8NiIzX|*1qMV6mw^L?pki><fwM*RQ`bVv{a^0oYNZnI-yJn;0MFt4YMm234E5d z9Nbe&8fp|6vy5H*P{hGV=G`zo)1esv9_hybeQ03KdoQ(Vt+xdx(JT=|R%AoLgfao; ziibiX4))e)pom)JDtSYL73FkjjjgSpS-r>QzYT8+09g4e!0~JQ{9{ka8z@|BtFLHe zIma)_PtJR7@9mwa<$Iy<8MT6y)#vyLMa%VbEZtPY9dum}+<SlO>Brc=ZG2jG+~Zod z)Z%xKMSuF`fBa<K&pz_`Uh8xD7Yi|WRk8hb^~&FGR_=%0o1hXeYO%=OLc+;VmVkSs zaFKy6Xq|9c3n=S<&#M8b6cg21x$<h)GDmlxCc#BZ?aKO~jHBJ0VLz}Wc8*WEnU$3q z*yt|HTjSmU?nyXLT2DIUKBU+<Ki%UPrM@jitya$}J?ig~6*nh$=7$ei0yH@`reni3 zbQ=rRue7khKckrfzTiG19ymGXOklRS0-KyE(26puLC5{WxtCqQSETSPx-4N7M)Hne zO$TT8o29PdR^;U9I2rNTOk_I*pm6TFtf6%xYj#EqhaUcC&F)9+e<T_4wzGKrtvm>m zYQXesw2>q_GT<r_xz*zfUoVy=WnoM}uwk_Nq^U+txA-#OAAPTkGT#P?Q2XVNf1^F0 zdMvy697e;l&5zFy*5aU%*->F>>T+-cq=reu_}#AUCt9{-f~fm4;zq{2wDsG-C7!8q z^(MtTR0k9kjVeelm>KGE>~dMg;zgF1XS)1o!NDK}>Qca5tNVmW2{-mBx^<z_>LhAP z>D-BH2&K7^x%oc}-ann&69=}2JX_SNWs!;+4SVFTKa`YJyl~L5<^B8VMJ}nd?_^`+ zr5nFDXH{-PyEPLnagkkPpSbx=NyDuk$DCnMXrt^)*iz<p$*h}h)ZL2eqioHXKQKPa ztIg)>t8aZv2#p+{X9FT5^vxlVsGD2K6XdLj0SA1?&v~nmEz(aHC6p*J`H2<u;JAE$ zjx{neQg($>;^yQ~Y>IA<C_jZ!4^gmmMmj6RajpOR=)l9$kc5WjFhp_i;<mqUW@O}b z9!D>{l0xW#s4{PkiRrGFeFq{16sFt%L)wi;vm(ni7TH)O&hEbR&yzMzD*b96s9&^M z?)UdfVa2n*t}52cH{t@9HT%qvALThGVxE5d-Zvm@Z?@%__<r@D&CyW_TM-s-9S%4D zsbKw&_v`gt?)LZFGSpPmTWQ#PN%CXSrrDxeXY=to9!BQQ4eT<dq=hGcMa|~S)7TOp z|LI4s4x+^nE(c8KfLx>cLQjqU0S)Zd@K;_qSgBXibB@oWgXPtpEr*sAGLE^gCNrn0 zaix)yW!#E}Te$U*t#12=wxZT~-qBx6S2v(=?Uu3`Ay*B~T>e)5*QAsGSA*<b^FVjd zHO>inhDn<H*+wgN7<2$=kw=mhe)sVAI_%y-(g}4?7K1}VJMjCT7w+2X=;&Vc_FDj~ zQbSmtLBogNV4v9?8l9KE-gOa|7HQpI>EB>eWF$!HIs!PuNyZu)1<%nb%WxwkKr<P? zNA;tI2It&2wKjc2p)?Y(BcR~h`tqSkQuNhR&1=2V_f}k*acA(#^mFBfw9rm}SyOhr zLA+PT-`6TKt_=rZhh`OTzUEqDcHwN<6}BS}R&2jWtH$D!XVK%ghi3j9{NZouuWMBq zZ?4`iO<eh_3LfYuVlaQt;dYy-lzgDHWPhp-_5w6PH(=q>1fI%)SmX76;l<}duMq2b zLu!`|T^)ZoU0SFf{_}gNj<dO$+2(7`@eUvS+NpL4E$t(*%yNWd{DOGk21t~C2gm{6 z4o!OYG4%!#;@Y*#o@2SX#gEeOD*DSe{z<=?T>FWENU^pTpRz0Smkn{;)Ceq$El7RI zxY(~%P;mUJvA#g`m(~tl=h5PPjWZ2Wtk5ATRdd<^Qg=giKoH8J5$Rux@IvYdk|myV zO_&-v>~%Y4Y2P*o{TYOm%GqtvXzCT{hfDZf`M=pQL*^S93%PRa^TOVofF=j-MYi-> zS+L;h7^9>l>(A?JAAB}KoIpFe_E*NbMw{2^=X@F-Z+PI!&X&z=BX4jqUg0L|nXmP1 zelLa3AAeZat}3YsJT|6ja)H^}-PUFCH<HNi>h3sNk~S0Fe-B8aU!914hb#_;_?jSB zqLH3zV}bkFIlto3$SxrUwtT$;OWU4h4nx={!7yTs7yi|8lY0L8(4-~g@1>oq^y0lP zj&0eFckwICv7mo?P_5&-8)N=Y3lO--VE(BVnwr5kZw?Y`@!uAWqOH$O{PH1`)R8dq z(4`k^Dy$pbo1nfa3Gj67qo3>~s3WVxF|efiN}}6DeR~~X+}ZnDgDWqd#et`w6a|^k zL-I!APZ5ctKhA6Z7!3`#N`9&=7CP#6MIX}Y1|^jMEj??0b+qIN`o8}9O$CO-{DJrC z8rowin?SSMZ2|{KhXY0_k%+wdSTX2MBw`^j;tSh1Ff#9w{pU;VN6%q1XO`Di4{-8I zxLo)}CGF3sg4?c64z51xhs(Rbk5PdEF9+zUhJVfIzx=X$rvWeFVr|i6U<<ze&+l{A zN|oayZcYC}QLk42^9Id^>Ci8NMcA@1!hD-3BADlm`ZGK4=ZPl4vWBsQo>UH=PcVV6 ze&|M&@BKr1DTxg5_AZ`uY;1p<_1?x^7M3p8IyZhv-#wnsw_3k+R}ZlZ$nXrfn7~pL zh>^pEtsDE?xjDDzidzm24k_~<uKU!#)9qIKEaKslMK(gGnsTMxo!9DaO;X&=E75dL z<~oW`7+*gWy~D3Fjeu6*DQ~temD9;XbK8_sP)796lS4cyBP#e~3A{e3jsdNLjd8%Z zcA&6-$(e1>=l^)D>*$!nKgc4K&Tv3dGy-}h2UL56z(NubMB*Y`cWRq>c!>JgP4w^P zuO6T8I?*!j>!qwEpM3k`x%T;&^=nVNgOXBsr)Cq*S^zPsH~-D~VLD*bqP}|uObRde zE}G<)WI%<ts3f}y;*n+-{XSk3ijMwl5~PUYQ+uOcy;_3B?MR{*{67A3yq%-s2;bo| z^9|>p@=G0aup}~VM!6aFR>ue^;-ZDU_f>51uj<rj%Nm>EKiNn*_Rl>sVls5>-NNjm zf(%K<-F2hBexF~Ee7;7vzXyWcjc~V#3|bsyp-5f8w_v>uX;6qrdh%;vE^H6n``^>0 zkP})AvLKuMKmiU@dG%OHM8wVY6D?)+L}wznFktxN_HSTU@wP{d|D@@s9$z|p-M}c| zejhzmI##mRQ?4rJd}7P`J42OGQ0i;wXJiKz`u#PwZ1NA=tN(R%)X(ZSkmKbzcFSx& zBO^D<tc;1Gz4cW09<%#OrRS&>iU@XJiy~1#yI5s}qCsfQvupM!Yo(pKw3oyeLIybC zo@&<Iw{zFjdj5Cl?iFWEwBaWze_MoYKyJS8#Fn3Z0Gc!qRKs5#FK%TWo%b3XMpC%* z{u}>4PK4oCCvSG93rPcr-(H47+Wy!W+9YfYXFKikTQ%tqRJ8+3S_ezD2UT0GuWyhv zP#%o*2}OnS=!7Ee2|Mcbn$;US#pP9kPkab_o>x=o+I5vvx{TI0d69jgiTQ;i&9^<% z-xzUFsmqD(1aNxE!jsM9RNBt|Mb|}4|6b7wbf!qIH?sbJEE3HlpuW%)dFeg-b#hxI z4F&Z@7oW>W1g1F~u+-MU^*{oOFwL@R?x7!J2xx=a(qa`W)cdoS+P*hb?w;SvwSWCV zpb9Em3gNrzHY@!4X@(4pSKNowFG4H%HMi$1%djok=VrgIYe@(xxxqQPd&`S$BE60C zr|`&-aC7Xm256S~v~1_s&nQqfnotF;#aLXd;}$4sZpnv?#`{*AZdX?VQ4ng2M*H%1 z=}bfw+)7%}NYyY2OhWm>i&>o-9uW~7H{*w~SM!&qW#1Q4=4;k>fn&7ifu^yjK*EK= zkK4?uV>{%1>akGe)N4O8z>B}jviF!)YqZns*Qw7QSHBS{2{(8~n?((YQArfUX$j#$ zSVd8eLYcNNQd_vkwLL$nlDfJGhd7@&6Z3-Xo_l;M2I=ATt*j3*1FxRf(YM`3N=amI zjP_jISn_?2(HW0s(1s*DenJ#=F|q8>Q?~-{@P7J11vBN>gV`AyhnUo6kE&RbK2df8 z&|lt2Z?HL?d?jC~fe5ylc0kb)N^tPO`joe~+BVo8+zZom9gHOcLZqvz2+9Ss^vl=K z*y8wM=KD=|qHXGrgmQINu^5JVD;*_?nlS72HOFZ-P?WhE;pj#9h_G~ZYEVRk{sx_P zi!VM0<_vg#CirO<XQ=&7N5$zhNofRuu4N&ql%RN(Mxc^wbm?L=E(Z?&G<BH%t}m^> z2{vwbnm17NyI5nD<v;<qY;BY^vmTeVMw;t-F!6l1=bWxPKEwwZE_#24)SIe0&?#h~ zbF!PV`SM0_z!AE0nf2E@UgooPVH=kMGL7rBXm!pS8(m>}pa1~ra|kmmC<TG=fi?Gy z;_}3B3)9pVko%dm1&}dqVt|>Nu+ctKDh10SDI)`1p1fZC>#K)b;t1PA?p;qiI&QMw zb*rxAqhmz^&W5Thpo6kzY5Oa9rsJ{M4Ddzq0B_K6pK9F!a&@tc%PUJXnXfi5r^#Lw zjfN5A4Y<H?N+;<L01@OfB4(?^)~(^KheO#Rk3^#dCsL{neB*8704n&)HH@-8=W^=t zTt-wc&RNkTf8ImubJM>(i@#OJjktX5Ob6h!lSje4yR=?tE@cEe$KT)}p*x!8(lh_# z6M+5w*=N3<`tYk;8w;D4jzL>@?OKnC0#sbnZqxs@O&PMS-XsV#A2hQPqJ`F^_HZC# zqozH>bBoEXxIb#RH?}9@ZN(hJdSone9SI1Ehfo6thd-J%Sf$e;cQ$95_<7*cJ0Nhg zy`$Dq;B6Y-lUVDvp=^+@2>K@76DtDf!eP9c31I7j)V%IGE>+hk2+?qG@i}1Pm6`)R z))IQ`*N%H{v$^%bNZ}+z5^BV`k;U^t^ivK#cxM}DM#f}~NoH-$%UW^Zw<A;Xg|<zm z!N=^7$O1%!_u*N3a~?8}F(k(aZAegeOdks)S;7JyhEI)tGy9A#;gRkm<^9^nb7RAF ztWlAnVyPnz{JE#?m#$`6*Yl1Mj*dTut2bDQ6_8|o77(qWgIrM-8By(O8Y4wMIZ}wq z&X_LZsctm+x$Cs9tz<nLQ#zBm4f27xo1L)>WbKWmK@XtcLiG?wIW}r-whl4bIwa+E ztX19Jyy=rRnSxaqdGoQy*(<D4{oboqxqQ`n+I2nzeW-m?@rinQ3xu+j+eyK{{@Z2F zJDfg=*vmOVV%V0wq(-6WQLJ1CA1<P-$Lvy_9G}COZcE<@Hn6WND|1@P>Ju@$p%*|@ zY;eKCT#<vxlv@bJmTa0r?PpVgh^vT_`@HX4O{^6|0D^SxP(eyNnM#9L;(0Y0_4iw| zMw=w&XXn>dpf{H&sOW1nyhf&pfZ|L7uL{{!ds*ErlM0AwDjfzTGto)Q@&TB-0h84f zsZ?l(R3hs1VR%J)O|Tq7nTX-arL_^|8Y!Uhv*BOp{V4J)JnQPYlab|HVz}W9kjV3s zr$n7f2ntyfAI`}6geUfW+3;o69UMJnNXp&Mdt#r>hpsxK+21TIHe%(!cnCxKOTa}^ zBqmV?J$tr5duR)5BdxuyYHg)ePMMeW*4GENsID${N%Hv@28Sq72f*n)ykfBB268uE zg_iQ#`)xYlVnqEbR37#7TKW;v&BZB1S$BD(&Dni4wA%_yz%61C{OW&1w{l&e@3!lf zoGV#mYJ?UZT0=I()eqR{c6sG;3y;%E+~#Zi)s?tj$ZtTg@M_m0VpxK$uZKi!dXSUW zqXl7xN<OjZ%Xo+3sAQ7)E{YkJu-b!MT(YR*g6I=!TV;IJEM2@j^PQnlQsY;TXXO?q znxs#(TpPPGqeVdo9f_L*LE*?3gJ3GBAcMt%!k)ji3obTf?^b*s<tI%yi1eHlmQqA_ zo^oA9#_F!B{~idNC%q2#y(#c`vnlu$>6F6lFt?z{A{IO5v7mECz)EcGFshMM1?#s) z42hK=hgMFcK#Y^E7ct(9JrTk76wUYm1Ou34uO6sXnc11<cXrBSMh<HTdPRXL^V5Xw zDDG^72eEe@9ZOgI{cyT8e~p%g+X?vm>-=3JJ`*}_+~t*h&|+xZSy2K_DoPuUzYK(n zH&;N$fXUw^Y@uRNd=K9ImufVCN~N_}w~40g;<C@O-d$9q=*2{NY&PkF?})~0#2$s6 zf_T8F(Yxy_)^o8zU(Y?B+f%QfpNdfIC<Hd6FX3gnBxbP1)D|>(sC2Jk(!d}CC278* z1>GpkS21pp4LS3QBg|&fMUfqsV(Q5i4@dAQaa-|az*V%pfWw0$66-;qY=R~(rc{P^ zR=MyoB{JgXvTW5HqU!)P&B!@v_s9q4>_m%d(%f`1Zxeb?W}cA@ZCmpqt7QX4QPjT( zc;5-WLe3{TL6vd+>6I^xNF)ImRb4-j<ER#CpmZLeMX|X<6bBS!Vm%RvCU!Rf<>1S^ z9C<d3NTsnM9(A1_kLPv$X}>2xT#CXA$0=#$gDnr@#>lFzD7yK)o3IHx)%*MKo1{4; z%M)#CtGmg+maHaMJVireIWRzWx(KHaWRoFEVL}*Kv3)=Ckh^RKWq?Oi?2?>Bk;Bj% zCYR0cJfUK-A>NQqc}b6FMMjhxQeWxf{1pWTDrPH+6B|!PgocP}NLV<IFjqzhyO7^b zGof{D;-7C4Ua)q`%*b-Xg?;z@gie+lA!MFxIR+u&+}f02skOeTGS;Yq3kagZ3`kvd z@Zdq)IHw#cZG>&DJ9AJ(Rm9(((|W<BAlOOB`%B}h_0$Wprk#75hWrPGt0L%bJ4${~ z1)G62%kM@+e9E2NSpexZ?zePnA)<@8g6tk?I&%_)HvQ2X@)w{16~f^PlXF5}3%st$ z)8Ks;@f6^Y^FthIL6aaY<JRwqjX3Cdk)SW<kA`LmLjjJnXU`sSNoye)MLP6yI`|X? z=!oM#H`myv&h=^+77Ha!$#Lh^4%LGC*oR3WEly4d0u&Ly-rx*Nxxof)AC3D=tV^d% zcG%Mil+uRyJv|{W$p<@R1un79fR(*D0`hTrF0xMuroya+O=AQbO2KPTlz1Zu;CzP; zH5F5`F6`WB6dPey&dy0?{ydeEh73+{bQ|P2On@GMuJIv&2ta0Ja2*N8n^#Ia46@u5 z5wVgj1wW7d+2WiW^z`HO113i1X}9D1%d%#Xua>i3nBfpDtst>OfwyP~wKb4p4u`b{ zQO?ap1yXKEFAXkx_1n{>>HYP16er|-D2kv)>MGtLL|JE<vyvo3sZxK^lU1iYjtNmJ z-QyejD^%#|420X&>6-W_mZkwxC!;=nT2a*IV6sAC*@*0G%>~%97y3m!C$Jq9hE`A; zf&LYH^ki5yVa$>GlZ-S9Rvn_)7N8Cd;7zQg4YTTw_4!VdE_CO0gfZw3aV-LXY~b=j zE~9Onv!mmHc77gJH|jU;VxX;(ILRm}d@y_{>M#)$2_XZ-Z!63OPO%9tAsk{xG*58H znRcqjVEUVy(MISm54rz7c8`Ac7Z=-g<#tGazN+!!+OGbo$kgvOA^5o>OrUEJ;C#{o z40d5HD!CjOE);=WbVdUj#g<=2^V1Alp-lLUN|0(XR(x_B6GxcUo20Ap3+2-_Y1{Cs z+0~#3v1z{gXK`cpUe!sZ(4GHW5frgbn=?QMnYDFokPhl#c*45$R|(6z4NEOd#=83_ zHYgC;%_QK#k>)Uo(7;Z;-Xwhujb94=I%#P1*RfMyNJWCGwyBUDBIuEj1hBr7LN7y3 z7cO2-1mrC{cdjF#Hojni7*R20WUi}=qZ5q9S2bB3Eew_L$`YjIy8y-4jeb<dy%%zd z+Cz4%hyoB$VL7I@k@8X5Q_r!uCWipz^a`PL4jAorZCj&&P>}|Lceo3VNW(f~bG^Io zQf0=y9GT4(M~pNdr@x*CNj`%u<AgG}&UHz2H)r{71o_2!<_lNy8v@5ZBHrX$6w|nr z!M9-Kar9>!U$90UbhBQ;tVkrC<{hANRrPwWAt@IN_ebGOSy7ts=-LZl5d&=5_?b#Z z7r25D3*i^H%hogoqU2Y~y=a?rNyY&q{;_Ro>;6o98O4TGDgZh>-sF6Q*g=->7o_{X zjsAMpADS->Ckkd|yWN@Q)@3nx36D%IN&tJh{}38_TJyF>mKQHfpGdEapd#uXdgcmO zYXA0=vOwhaKl#o@zI|EQx1RQ65hFCVbLY-YduNTTWh_!k1bCac2~)uBqC*mHf;L&- zne}#XqOy_k$?_X)Y7#gkQXxs-7JzRX$L3eHNF+xq4oD^FXhP(;4mOdNAaiZaIij*& zhWft#Bwb?J*}0E{r5v5ynT-f-c(<xZvm8qu{;FtFTKRb-`2^8?xME1*Ch?Ng(}kMI zr=?WtqBN9%48Na%PFFNlbxKuTZFX@qq|Or~dud1@5bS04#H@KiZF{A9L}VZszi@`> z-ZE>D6iDDVX8$4lQ<kHmr}KgY>XLvMN&vb>JSgaQjaIE9X+0+~+eL@g0o8Ho;+|FQ zlA@guU13TiEVAH_z}i1Afl$jwG>k)^K~AWHPB0CS)<21RBBm3={VTg7BZerP@%Z?| z)rGRpZBg0c^a_z}^UTTr@^$Fd2bVZ?JohvTrF8?Y`x@lF($k}+kH1KkSxDt*r@r!X z?3J@}g7`7dnbBUye3S%1f9e|67@YUf9!Gu3j>wi0Z~6S*sAjkKUSyPI`t=;~M}9cT z#EF68J0JeIx@$%*=(#>?{<#&m`1YG)VvN^rv<?|44=O(&ZOhgEvfzp%PoE8GPF*z_ zy|IJ>A8ycW>~TGS4k``}G^^bAWO5mjS|?r&JDEe?T!qiHVyUZW*@5QrG5*$k4m3vX zOKMiz`7#i$pYC6#B<U63=L&a$Bb_aib$xxy5i@C&Yl2S{8zkM+JQr@9RPt}}!XnW_ z(KR(xs>k}4ihnw$+NO+bc%i%0c8n71;N{F&gRLq+%t=O!&{yPu0r~0*?&posXHZs1 z6hw2=fGP1vx;M6QOJ72To|u}ei60u<XT2e6Wi#Lg=P3y;$v$s@sfe6{@Ee8^bK@k# zUud0fV7EDVAQFK&5m%GRi>Y_E^hVjSuV{<T030X2^nLQtPbpZzPTe3bk6?W%jK{|> zC{B1m;F&x)U0r1?h;KRA+fVMg1HaVIy7*0iM7r)6stdujINf@t{@vypzt*$q8fCMh z0-EM*5@E3A`F1F{ID2w4iCW@33eT>hAiCtA>Y<445nitTd^#J6m-g76yP65=Mjw$_ z_<jq%EUW-j95St_ExpJTA=?1Qg7PT0enl%H$gn@;ehsF`<n%sw^OQ0z$Ey|<GiEy4 zxvDpiW(}#&4$}dFCp?<Q7mofhQmQ9_fs9>3WOkMsiRvG)-qp<V&Ov`T*l`&FJyus& z4rI_%nPWKhj&*`@mA0LF(c<)dt-qH{te%JxacRE`g<TL~SaJA*?l&5vqOaY?=jWgU z_t3{0_wDPU+&Z#2Iq9l#Om1lp*w*_^2CKBz-qT#8phhFag$IW5q`Ws6y)gc_(P)D~ z|I2RD=V202Vi#r=-7zQ@7+qjfns2ZLEc-NzODTg8&^gSa)~C7$mJFnq6Ktea>UXgc z!R8ch5{l1E<W!X$y9&?#JSN8vt4mYwK&HAa%Is#CR4dU-;0*zS)Kfrqu#NNeqGXZ= z9yQV{TF0WprR%VkC-+6MM~yLqjoART5va~(z`5l;_qh=*6-v}!`lz4l2cz>vSy#Ia z=of>kZExbefJ_jGMwQEs&KPTyG7=l42Ds|+tvbNJLXEv0=S$tfpiPIVrH|hZ+TC1Z zOD$4o!2=2+rlE~3%L@?@tr}siq`}yP42DZ#2yPb~DWHT0AR{Ree-#76V|hRk>*Rz( ze;QMEOX=$D+=x|Bxe4c&88wQfzEhx+K^93ycXa8-5XY}dpuyE2>&ni8kfO)x1%YUT zWO|4Njt#&UPV}TkOf0JI6>KnQg8wnbk#wUPA-uben6nPwR~_7r3QdZ2QbonX2@4Vt z-3M7l>KppBH>xasvg8w5qca{U>IE6sGlB=j2emtJ@9npYoE}a-od+FxFvKp2h_qtu zy6igzUd?z$DI?!Lusbw!tO*jt0og^-o~fcslWv*;f;y1C>fvxz;t>HT6TROWlHX)% z7HJ#9$0Ck5O1d&Qxj;dIhP&58g0YeLd}2mtx)X3<^+c7xGm(N^%c|nS^Z6fMWVBv@ z+ZlO<lhA4$Ai^>7zryKND~*D{MXX1oCnQrSM6H>3UOq!=$eXZ|AGy2tqIx2rWRv_l zp#t3xlW%h#F`_6+1ep)O%2%=J@25m-r%k9*p_x4=9C(eq%x>R`rS=HuVh6Nr(IQ~p z(=pwP8rUi;W1K(h>1oc{i!<AHmc`C-I_Hg_7J&UOolVcZA;qRTAiYh*82~?mv(DJc zs<i6b0Dl`{6ljYi<i#*-DY9mC$HE+l1Qf-}j<O{%a~pI#cwei>yQnv~(qJEPH%w>@ zp|kKsWL1p}<|YF`gDjgWaOF?1E{_pJ6~_O9n3Nf~+ooTqU)>Cxz8d(Cas1knlp}b7 zf!iqvk7$$5PH_3{0!Ja<q+pU0^Pl%s5P`aEK9HhW?e5zkIx_Mq=wv}q)@i>7YZ*YT z$CKcUZER|-2C{)it9zA--n1DrjOj1(JE3Zc;2qbri@%gNwJZDry*QN9vt-xz`%^P+ z4$>=`!Rd)|uFnDLfzDsc7Qp+vA0#GKC<|)j1K?_}%iiYeG=lkW>Q9Q_C$t~_gH+b* zgc$);QT+NP<QZ{_u68@!PAPc!=Wjnx9U*dsFhKo()uwEzl;)KAn4>!7ClwU<bYc`i zao!AMK>xepq-A5k)K-D>ADbS}adpx9;6I(mMdlYH3>h_}N*R8~bC57#z(@IE5|>3m zC;6A50S)&B{-Y|F;-Z`8{ky~eX#qr8BN<VQXw)Zmd6WKaNAK)>9ys`l|M{WEIl#D{ z<tGm(6(_@n;>yJHhI8$`=QhorVN25|s?zI8E>J>$hA4u7G;4l$-Hdtzox(j+!;z~Y z%+Q^E#^cFq;>yjvNQkLmL*Ug|Hmo6Fk$WzTGPCNoag7z2R1$@(z$|$5DU9;Uk*iC{ zT*W`7pIu!_JT9vaqV+e5=@Q~<U0+1%v+{!a7%VwbRf9a&*wlBCor?UR#@mLhl~aiL zZsn|vu&OtxOO`dgt<}hF4fUi9B$3{wLPoc&SswkV#JBGvyd9<M!#sp7IFLPs!7K^D zAjJI6Yqut#5RoE^3IqNRGCj!h?Uwe9qO8kG3W^spd{q5fqP9JE6ig)m{prWMK%u+O z-ul-2`6clH<h*C<4_%n2=r@#Q99m?Sm*4Av3+S4i@mQ5lsj}Q*H~scD=)*`G-V7SZ zM{Hr`xdFn?hX=!$jjHc*g}*9ezrDTJ81Id%6iEfF)xtf#%bjWDxmC*UGb1C+boiE1 zfl6GGE}P(20S+`)>Ymi+=c&xjkV6q|2tPrUdLxq^@xOWuYWKg>1_O9OW>N&Iq1pFm z6fop)UNp#`=G+Ogy$~%N6<pdgkxPt_ZFE2HIJ{n*zOX1$k?;XY)@5jkgHM?;Z6`+M zQvWxCAp4pRopKv9Cbp1FB>0+~$*-ehj&z4Ml*bl%2n0Ij$XeF}Uvzm?R7zk_9#~A6 zPG8M3hCfIkC{>Z-AHO=E+T^QQG-8xd2UJB+D%(Cpa02d>v0<sG%x)(G+NIY*$*c_Z zFXk^Hvs?G$dd~q~Yt-a^^pm|hQuGLqOMM~n%<jv{l&oS~f;}pnP~<_vgo?+|=Q#R~ zUq_z5(znyEB^~=FHP)~mtdeA~m=naLu%67RNw<2EDo3&zt`|8F=bPwvFzelf#bufB z>mouPFxOx&bzJY&)xH0Tv)WWwNALEbzz$d&#^WfgLj<j#r!Q&Dn2Jo-fjL>svaj~+ zi4%9`%s=-uWhw0yEj`UFhY}I$qRV8gkY*Mup*(NUvEVJdy;Atr_wK|G!CES6V`y=$ zONK)>1eXiE<gNdI1bfqUjkP5c$>=`iR}lf<4%)6hO*M_@+^B{-hNAY?=zo`xjURM~ zRQ237arU4fqL`{XS%C}oA2=|D><DY3g7r@jR!s@#RSlTTFz~afdNw+%P<Yvf{b)_B zqxmY0Cqp`#nCaEE!9wMz15Sl3lGcilMQ|{(bzOFTS{m$4hl`~j8%Fm!ndBH`dBcjL zC9AmN-H6i1X$P6t;0AiO*=St`lo~l>U(yXuA5$Gl!3HMpdgwNzi&*H!IOW`)qACu2 z{E=M1JgCd0=<IZVt&7LCYicrIwnV3JdF%z>S#`890|Zb%cW|2`Lddp;5r^Crj}61Y z8md>!c`9L3VSdm7)B54pl?IX7Eyq)h`qm6_)S5}!hDW<WYnSDQB2NICHOi@3p&&IO zz=!sX+wqBgB&R_FzWzLd$e-kHUh`xYj1&cPUF%+hE}+<fj6j!&Cq(bbODXgCu~VSu zqz}ibb>jmI>c;+YAVTh6VU2!0W1<$j$F;(RRx3VzS-dzM4GohPj9g^AAun==M?Si_ z<l-4FI}D3~jZNGCWdc5%=Mp-%^In@$)*xq19CIWkned)F)gJj#O2U@9#v(RxYZ2fQ z`L9l{=(}#xW+Y|4Q<BSxWQ-DGwkOen@<kdALhV2iL){dunLmlHo;Zz&eLhS~Q-6qe z-$2qW%_T2;7v;6r7ASTg0q{X95rPQy4S*48tLO#Iwq31^=tydZ1C{@dmD(Gn`vbFe zDV(6NOygqPU&ez<^Up-+J1*Q^pwVy(Txv04pF*F|`~A;vpK)((YJaIgz*Rsd%Sf&~ zHzYKy3*M8Eu9F;ni?{$q!s-LHnQPR3ekn8J>Cn@P>#NQ9#Gs($Bmoy>P09r-fy;$y zP%_BLXJ>SHu|XS%HB#A-)rum8G&OZrZnK=hg$8wrb75ftR+)BIT^73g(t~r$-Omg% zJTuI;Y@ppvds&*1qV(ZKHXSz!y4RlB+Y<|34v;ZH5y)iDrkVBURV$CGr9X@V{gx8W zyl7&H=1Be=9zxh(Izo1)SiTC9aRJd^A@!PxH4JsL8%vR2{4w6kqBS@GEaXD6iq|lf zaG6;yB?VsVHqYJ7km~H*+tR3NK^^sz(=bNO(Mi~Ut{7unX<q&EsK+rZXd^C<_zA5i z<%%zg3~f-x@^|d<dGI!DoekwUpr5I62|%mIk5X@tdh8MGj5t@z0JL!J&}{~5W37Kw zZ_9fPUKPkX@lx*W&N@;+w`ucnX_~42Fw+>V0bO;YJeOp6s!0cLgLN5wSW;gNzh7pI zrOC;JQweUXnKWiQv#|$irnABGQKQYZp&Qn~7*2*&lgO`KKdAgP`_DuaS`a8*R_v`P zv<>L6!KsLkO33ua!Neq)cS5c_08NQV0T37O`JwVQaWPGM3Mwv{7&=JLOQi6$#6P9? zQ>ZAbse%b-&w%V9aKIHg-oK>DR?A7c&dFV7t`3XPcPcsM8Q37w-CUc(GA$E<jt0gj zq0Y&6X!L9RN>HQFoNqfB%TyUI#%Dqt)sW_?@dKxfi>!xM^A&Zf2r69)vFZ#Xet4tI zIKT2&R|%4&LNKudA`secM;;_mT8W_tY>v9Fu6e^v6lePsqRS>?8sVM1q74}$VkM85 z#ds~Gy$;xt0ujz_3Lzg7t3Dd1m+xoY#X`a98SxC#ug0TJl@+Aa2~#GttdNZ)Dv_?s z0(aUS`|szPjjLxT>NPCJWCEX_pbxCLj4IFy(M0kjTBP19e|DD9SDDr0FD5zQT`mK# zv`*Dqw0QHa>v7iu^%Xjl`eIcrXNI#35|i&E^PGMkpU4It{+kci97|`E%<s!=i<KlB z?Z&+8<-{{dwNj4KkiT+t2VKek`hxP82<r&fEB1ye9o=mI*LFaCve#x15+4ZXYjB(j z3N+!IeSN!2MZ^rF5Hix#qf*%S@oDMebgcpWqmj9)bZP-gMm$HMP-K7tfe0g9cRx=U z#gk}-<|&im1ew<op?d0j3WS%<54yVe+(5h)cwyC_p3>ih!jdhx*?<EgTU0{2nt$=N zh9WMI)n06Z+rWV(f;JR!1GMG|)`DKbGwczDsc@dKQR;2lMDZy_%>nLqCUOHbKL-pR zTipt-hNd1cBTF)^Ja%ewp))J#lo(L|Lu=1u6|WG-C{Rz-Z@#51$+E-gQs2I-F6%qE zxKD)ZFBK|;U1BojA$<7W)EQ?ygcB0$5$K^Ttcu)@jOp}Nt%X|xL({2ePhKv8Y2j<3 zOp*<45|Qh~D~$E2?rg0|?sZhdGD%d&qQDX<5n^p=DZrq9e?LYOfr|hsc=;%fsi>Q@ zO6##C^M;3`qtm4H#SL)+>9=Y9;TN^N|L*kG32XD%PTkF}p`DgC|L@1KTSGg>b^l=! zck=j)yZ?6W<T5Pfn@9S-F`tTp*R8wwx>0(uv!%hhdMC5~t^QlyWy!G#HRgM~@8o}} z+#ddXMPz>AlE!a#e_6FRe+KqQ4C`-1aUeU`>(#G+Bw&1|m6~UKzhxUWjGYAuOGlja zzG%skBkxioXCF^W3dY5+f`@zx;U?LRCzQ;b4RDz;!s)xsE5?E!2ng&WLy8JS8#sP^ zD^mXlY<I-!3xfc$U_~7-!V7B66flU`tIwFxzRmW~&KgVnJi3;d^)>ty-p)AmywJM9 zM_N|bEZR>cxU|Dc5!m(x#3I6!m_n_R)RAUd_-!xx^L^f_X9v6cj;Q+a;{XhrX=;0% zX_VYXA3b^$x_25eNBrODLB(Q~-wn>216Uom!11LTBIMLmD~6z$d)sx1?Q0Q#rhK{+ zy=~jJ4dKo0w{P=IEu$MFzOxW8cj=ZQ+Hl~j9|@S1Y4yI}@~U>SPXlXBu1GZZ;?;)_ z6Cb!Vf3V&4fS6Q?Xci$TTY!cVU!|u-SW-LsXA9i<!-p+wY;44imqF{R;C?YOBXC3T zit8<XXj}GU%Y&lkmIt+9ft8}Ep}v8`=9?4u#AaG6cHmjzqI7=XtXUoK5IcYI;;u{0 zrt{b_bWJ>YGMaA6%}aB<7g5Qwnh_Kq86B+|Q&{!=`~DLrHlvN$d0MQ-3`0#wLAZsU zq?JRZ#r;<W@rcrgZt_Em;d5H|9LLJTQ1#f)FYZJix@g#1-`w2Fs@JSGhM}FQaS#f0 z!OTjyQ?W<oX;omR{4PcD%F)jh4Dx8?xl=mJB!r%x-r;~*NxFG?c~j`fp&wjBz8BHG zEC?b84Ey`yWLlbRIA$Eb693a^c0z(YA7S4BDv;)y7@HfhbCv)hBj`;!H>q5+eTDVz z^w~`o+3-=b`@?S+y#K~rZA_uWBxc^&ks6BDr&XYd#YP@KYjUu&#-3@YN1nQed8bZn zqRZbWmPSg37LnL@iu8t}gl6(u(xfc)p`x98w<tRCh^Z~)Z|*yuoPX!Tv#oa@sy`Ah zvU_hg1SL=|(b&jjv&8f+Z8jkO<1x#A;HlH5by@n(UD$#>dnS#x8s<JKZ1W2l$wQw} zfpHaFgE)D!DE-uD?Z=NEsjI7t9lumI*v^aXyX>^q>n%oXw@95)ZMLf@?r;2{;gE=d z!$xliKXUY_V`^cZ=jjvU@H;Be58HR>%$YN}fs2?@mF=+rfY<c~j%(*I^U&$j_brCM zT(M$Ba^ZVm=$4rFxTM-!k34$pn7FT@&J&9^3gvh}q%3gTb^3TlMt@*oUonX9F+%%Q z@xN{^N|iJ3%|62^388DY5K|OcC5EzpPM05fXFNJlrE`2@shh>>mUBQ<J|wYZ$boxl zgnKS(4rIr2%&)`%ktwzo1y^rgzb+2XVsV9{<QC)$Yk>_ACzbL8WC%`763MyuAP@LP z*a>D`y=wQVtZ8M-9o+_Dgy^_b_Jx1)9&|=`b>yy*L=hB)ILNK<-AcRU95(@vTk1>r zDDNtdu)S-k9%9&;!mB*tE~aCwJ|J3&-OUc`)B6f$(n-RbZ_rHaHZ67=o_2S0V{v1* zw;B6Z^y68C9%AFiNvJ+@-f(UqmgICdJOM3ZzujHq_3#{CXyTKNW|o^RUF_?(rW^jX zWJ?&2Ro0^-1`r{b$Y@rq_;c9v$!CU`LHpq(F0nCL^7<cbRaSRV2MNv)Vg!Q3kSrqm zec?~GP%!JYX>%mtt^GKQwf5c*4Yni>4)1fJ@BiHdmA2|{lsdIS*?j7OX31x+Ix94G zbQ(m_6uM_m8-nb~S*E=Ih=H;ENAqp}l)hSC9Cs%=DykWCT|Jhw<wyO;4Rw#Zv(NBl zclzFY#&zk?VN2ygd!-nZGDV2t-kd4)6jvew2(NA4!#`Dl`!8MEjdCEET-Rp8gbAXE zd3@@C^-7DsUHJCsHZaxIAwP%@8jcF?yVQ4cUb|%8$9@;@jeoK7kfBtDX1&RyqV=RH z5&_L|56L&fHk0)RTZaC$TCy=b#?>Y1!if#tYz-|!#~f+cIZw|M|5cPTgj^t)y~jVw z>q|>Y*yz<|!pvOuP3U;ky>NdmZQQ**JvXw<E_V)X1`4=mm)M^(yXah^$*4kfO4FMR zYGSD0-^9d(A)D<O2RG#?No1yW?PRL%K5^o|Vy%oMK&~)o7iHZGixrJZidoCi2lE(a zgv+?|a&jM-pZGe#eA_xGW;a-;DQj{&+kXOB)}87-{o){M@O&P`PsUyHdT#DuefJi@ zUi#{t3o~?@bc%dukFD}E2MGQV9v-u+Jn%Nflk>k-Dr5nt#fuhQy?*`r(Zm$4%l1nT zGX59ZaljX2wsq^2$@9ZJQx6`DxO;cxsRsLa<<HtK35!+P6HA!V*4BRX<jKy{@#-Z7 zY!1l8#r6gkMS~_!Hdx=%%GA{Kx=%ejDn{AINE>AoEq7iiz9J{Le~Wzg7O^Bpc(;I> zRlj{XtYhZYclkkn9yeiv?BYODBB}}ooMdW5{Pam`UD%>F;Ac^NK<QAN&dZr4A@;C3 zd{cLanYns<VpXopnQFcJgl}Cy;|oK5Q+nYxYnq{h=j49Y!H5MX7b1vm_|BtP=xt5B zH`3L0V{V|SN@5DJXULEt`s<qZk^mQR1!t2*Y|8?rz;kt7o`F7rh3ZX|ls31%Zm;BB ztim#77nfW5oR5gcVu?;h|AM|sU0>f7qXVk77EAPZ?%I_n>rn9haE29@ZHoZZvvrSw zjv0#Cc%E1l#jY%or7bbq>V43k424msJxE`W$y<P|i`hE)BCvK9tkn?qOQ1?jB$>%~ z*X!7^Bm5XXq$T>AYAs9j@&07ZBf!C1PkV;>>@z!2{_3&r5y4cc>E;uI!s_-;b4E>% zy)G(RL!@SJF+pql|7G{XTvEa(`$R^uu_flA90{-{*yqZXD}%)k@qFOu$FpRe^;k3q zv<HhIHe~-CRfC87<PMni(>JXG`QF(-tTmf*jDk!Sz5M5&e?$~5OUGz|koDhe*?u16 zPRPWjybCiAbU2;qm1BM-eFL=5VPFeQeBNS)50G^-dDOc?L8P*uv1)DSK3wK*Gdlf; zYQj&Q>c(p-0e@j>x$}}IleWbBDWESZ`MagxLVsQ)@THwQS4N$urLDc=bnK86@Jk5W zz>p3OlO3#~>en=<O`nc!=3sX6aQ97*r4+uGb@TkW8_%CVugmz)Y<T9U!dW+XOzca4 zbn4bE1{{2X=*`}`+X&^@A9ZrO?Fe3>cv<uM6X_$0R=Yvt#uNVi?f7lm&Yk}N_-3Jw zmnPxu+s6;bP4z?L*Sd9UgkLwr%#&$c^heW}5XG<S3n_-YsUj4%06?D3e~X(q1Ztfe z4wx+2J)`5cAydY-|FuIicBtI`tb&3q*nWR{k&y>yG|V#}Ph=(^-0(?3d1T8@rQA8n zmCMGB9}jR5k$tX%ivp|hcsPR(nA9ctXxDh_T(B%FZyM@GUEg<x`5zoodb9BkQBz$i zTvV$vsp-CZI6+<j+{s&`tH)<=5x?S7A2eB0*vSim6a33sF!ro7t{N#&jq@?6<;Y4~ zURPH(@0xe)xPv8d82^vX*k?XNsq+KU8lhgay#izaF|yN>tzBq9_W;d^j6ylfjz+AT zoe$g_&8hI8{O{wMo9Z6XO9H&#)<HXp59sx+Ter$`t(Zc@Q8ZLS=qQ{b5mQM|t4i}_ zZ8*=KG;qq-BN$e$t3GRiLe)3nDws#8P@pX6u{@)yYOze&0rm(kbyY*jU!d3aI#EH| z*|V|uwU)GHK^#^4R#}ZeI7iDPyCmjxx!R08#z)n`k{eII8QcL#*L<Ic?GN|DXPC{- z$e=`_!^?IlJN~kBgY87%R_H$v5zc^Q;&*T2Q!jx@668d+IvjdOjB=^>&o|hf?NI#U z(?GRRav=^MZfOvjG7Hfpfm)VkqSGEZ>&e``$;rkGE>$*?he(Md$Os>vK9Slj#D3}Z z>m2m&!v=IMP~Qw-FXL}Bl?A)Rx><}9WRXp0QH)_4-hFunNQlZ?Z2j2{|KG#d(ed=u zgR%iH+Xi_12y-fm`4Y~vj6nEMM)vOA+r19yEF+%Ls<=wT5D~20fr5gx!*Qnin$X!6 z6VJ1XzO{hED$5HG_Sh$8K71I<gyBfYJn`qnZs!rEX0rW){2*u-%zcmjbo?G?p5s9_ z7jj%nSNPjo&wQh&HbbXNr$m$g9f$?oLAGCI(-gN|zC1m5xS6(cL&7CGi4e$TsXP9D z*;}iwsp)g~f_=3%@pAd{K0puC)UuBso7s{s#@mMo1XPa|CPAP&5-|+nhk1TR;q>gn z()CQLPM$Y!UR40U?bBWf60ygruz=*AtPp^}kg))|<Og#?djj^j7*hfL@+TP!7koT< z&YTGphHC7u$w%7R8&r$Pz{K4A@ZmW3V`z}rfkBXwq6TavfF1j%Tmq<|KBjxmpFa<m z<V@=u!~7I<<&Pdcy16>|U<(qYdaVo5p*k!sPWr2Q16FRQS){I|HMMFdgEe#m7n1a( z_y%pra-Bn7S1#wyX<9i$CDG*P>sc#Dv7I4{<j)B}vXc9rgrIIeF8H5+hKLt9Bn^kC z*RQBCd~^xe9XcT7Cvt?IZ;Rd8&w3l$M1KA_)MC=QoMcBnhmy+}H@B-~Lb?13|H0lC z%{QkWJvtS3Q1T;XC<6euc+>yY1mS~dsL8Y&Ub@l=JL56wfy?2C@=R1!O|i8_S&Ob9 zmq0HIA_Nq2Rah*i$unU*TG$>SF}pc$E)700F3eRfd_-+D_xDP1dAU@TvWkcKh-A33 z>3!1qdyBERL@m6VAzIO)5BObfO!64!IU&L(X@nW8qnwV7VT0#d&(vOT^Fz328#iu* z%Xg5kNZ~hCUM}ySsiNVGHV*Yn<vhs1^_w@yrw;NIE5~BCK#~-%Slnk374D(X)wwb7 z>C>kYY%%F)4CU&rTg|XDNAD);b5&K<lYI>JXOGtKh;F9J<RF*Qvt(5&iGt#Xbzu zNcXs7$0LV5bt_yFX469!^%@5V8Sx<OEZq)GT|d-%oD|A{GTE*K{v7*lvA(&VpPy*` z0B2pv&4RHJLq5W_O<c3-Rly&ysoR+c8>l^5^IG)wCDyF6p`e;EmBVG9n8586;{jRJ zCF-nx{ra7{@3(Ma(aYMuy)ZVX`!7?ovT7b6Yc{Ww(>6fb^@k51TI`Aa@bTlKg$p;! zY6^LHlwi2Nx`H-f+^>>{OM7q#f1w1GhA0~`2|(Fxso=>aqAI<;$MAUlHUFmt=ywA; zK)e}2_+prd^IuF%Oyy2?bL<A(g5jciO@cLN!5A1B<FvuN`6kVp<-B~^7U%OOT_VH9 z=iPo>5>P=d21yRW*OaaS15F<P)_gd5va4je7c0LE!=ic|7!QP&w%vA{zrR#`P+(-Y zw@=Td`i}2vIAOw5uZG)M!kH-#6ysS2s3wEs{r&v~Ii`AMkZw%O%m&pPdd=urKmFVH zqw0P7_^#cG`PZTcvsw402DLuDT|%B3>s1q(f}eimV|n>aW+G%SI30AUOPQh+YiB;s zzh_kqRd(;$lXmKqF>|e@XW`ufu3W0ZAHmygL<<trHuO*wsfD?}_kF#mUl4*Yv^ z`C?KH95>@6adT9>$Gm?1S`IPS9;KrANRmY+vMZ7LfnXO!IDt7!4y^s_=<GZa<j6Y= z^6J^fWylcO3eH`8c6n9Z?k;Qv(QxDuD`j2H!ez^7pY(;@6>~;hO)9^A+csZ0=?Qwj z>1v&}#l`Kq6sw-}8;a%?!x2Uhdz{HCCZO-pR$Jes8M_TD=^j+j7iazEK#(`1*>w;9 z{MK#TggYRS@~#fOdu`p7IuGiAQI3jhO|3SwA$|62bG|_J=rxCcMzRzFF%knnbIwk0 zXkQ)M=VDtbJ&3_ly9VBsrSqfIuVmf6y^$9u2#1C+t%T0+*KPns(-KO7oEHLUtmpEz z1VPypM2vWyG-Ug>#Cvz)><%40+I`k$;K>F0+(;CwN<-w)>j#9jw@+q6+?|A=-1l#N z`=YSwU}?D@Hm}90#CG}v$l}n;;Y<iHA(Ib{eG?=h(>h==&{{D#9=mK%oEYWvRDwf7 zD!+W8#IC(kcp1|;_JNH#VgfFwsVlCIWcC{f;<KeF;d#Mi@XlnFqL^@k^1CRRI4;F6 zcpBN_nh&MFXt)HP(-WXt*-t`gv1Ij*xHy?~m^X1OK4MM{4`*kU0Z*}@jN-SlMZoPr z-ttmH4bL2Hh1BD+fRp6H*LzGLk#kQE9DbnyJNo}i-IFe!o!DCGR99b*XgGuFII`!@ z`kZTu8qwRyV9${wN5;R0CHMkWE~Vv*)qmz;fSgVGM!~Nl#!q>9E|w=k$Ln10LP!|t z?j9;t`)t^YVp2bzl(~6%-SYgkBy~j`X5T2|D$S@@34pB|H*OqLXwjjA7?H4>5b^Y^ zs(_N>1BLGcAN(>iHVy%;M90V92D?cA3A{p~$u+B}sw&}B9^gmO3f0up+Ylb!*nHc& z1vUwoB0;3Uc(W3PO)Cd@v69$0cnguVprsr}-9!6rIyZ>8Dl7OHpcJ^vs{t7}=&Ncz z2<~%($wkzAol;U#OjFt4wOZz`gfL>^keHqR!g^UrN$JG)KM&|!GV{BQ&!~xmKMFIY zCQZ^PI>YZ#Q*j?nnQCm^de>pk+s3!lCo8L|wYRYNS7-7QVhUn2I((3Eeloa#)XkOP zB%g()BNQ8^%Rb-iISO+t-t60WbBp-87ev`0m#4P6%%+{GX%%9DT{TJ0hupFMy^THA zZG?I<r%IQ|n@+DVeblcqpOOAZ({$Q`1)Ip2*v6F-CQO@k;?9Am`q0PX>6#ufuEU^B zz?<@#E?>UPU-jIg>>F_dwL}QD0MB)p=WuIls0kj<^)(|Yz1U3sng$yKOF_WuMKEJT zdbdOFk2nNmU1GdA!V?Ydr+V#Wg(Xu22p&wA=eLe;_wCD<EEr|^jO=p@2<S`wHjN}H z%^4b}ouML#R6HqoCskw$I=y=Jx<C6{eXlrmHG9Ab7nazw<I))ZC?BY<T|f{E=tBua zpqK_Q6E|z=VX@qG?6;E}RDuo@d}Y&-5Jn80yw<<axdRvqQlUe~j>ahM4#ydPqF_F8 z=1dB)3XcB^>dI)=KhXkZ)T9Kxt4O;D(0W$SQQq)S2>CHD+mr;c78!=^nMK)S9w?vY zKcup}zv15wtnsXDe1CQiN;7Y&WvMfW$HlK-k2aaJ$k%r&{ZN?zMdKXGthG#l6D6eW z{g&M^lxx(FqjP^}XAL{#UP1{$shPgw$MM|v%U7%zHFBg;FK0<Fm3N*Z;^!buA>&Pd zTu!d0Ulb1If?Uw(s!C<YfQ)z`BvJm*!Gj5;BDoy24J|z{%~Ua=D6hgpozBPx?1VAb zE0|fqJ!0#JU=-?@*7b*=lxn-wEno!EdZC{m9F$0=t5~eC=vUP=BHlpm7_ad)dhY48 zW#KnuL!;DDT=dHC-+>-udYXskAQR~2XWO+$U|`_#&rJ<iJEa!N)?gu^2{6m4;&*hJ z685;gR<#C&8@efZp+H7?q0DO(Ce<5VQal<^ON^FxMX;QH<jB3ZX6EJyEB1mRCbDak z^}W}xI}f-K7;cz3wLG&sk5ytjHI{6Z<LSz)1dBpr2+PiG%+Ajre!OXReXxrIrXu6} z?u?C%9XV!<>GM%*b7WUYAmWY<lmp$UrWuy|2X*|B56(wM9%@IKz|9f3b&{?=(t&*B zDl#F(;Zobw|GN(B;TBi5(>H_UId`rXnMnwtOY!_Or<ZjbQthanNlG#jCnS$!`=w>+ zzW<6fTVQAK34zvkFD#uCQ`kIk4@P(g?zQs5r}Sq&fd5f{M#pp~<hDLOteNrMPc@!D zR_DL`^8zq|u_#+G9Q^#gr+V`EUQs7fOS$oi>3^?IHysVLeRO;bx0`=6V<pkKm_3?j z&h!8xwph{su)BG|%<jx$uaPqLN?@Rrs9Z+|8w?o~mlZ_}+6kP8P@?ymOwgtDlLn$% z(@68t<PC*Wp|LDskJz?No1ZBm^~6e$sc?-zd`{j?EJFUJUB@*zN`tDlnR}E@mte+u z<mPoH2rz8yMxC}P0&W1RWH9_ED02ECsK#OP3P36-pU|4?v6l`8&KY$C^I=H{A2lcc zt{<i_3Tte9(S5iT5~$E@#%$fnfTlU&iC#qz1cmHFp0Z}}#zW`Z(v9fdx9`r^)=zKT zxG`?Hl8Y(D_TNyR34O)M1P$pR;!&ZYrRDy5&TM=}$kwuY$inOLZXAp@BC3t!vlXy4 zmz^<#`7}%4-M6C-8a8^-%S#y<9n8(UPB>tKPJ$gL3~;;tt-HJ<h@8eeRFW(Zb$;wl zMsVLyFE9@gjgnwT%Ko3L!ZtdyC=Bs=lxzcKC#k3Bi&Rf^R|G<D0{r^*O;H1Mz6|(; z@*`zV8G){S<oNN-T%{a6x`D%`+_Y&23k%5s|DhdtxhO9ZZ<G~`8+a0ENDZv)<>kd_ zjuQ`?PcLeSD~BhHR{LhH1c`&Y2S^kGS!~L|MvLggNo~vzmEKT4zYnxqn(OHeC7MfZ z%)Ovk9(1m&w;x1Crqy%3p~H@iY2EJxO#VC$108uL1BdW9pmIdC1n)iOe;fvV@Bfd( zNX_`JOFcF^qkE+i+lNfS8dL}D_Ly5008EqpG+@G4WFE#as23$S&3%4h8+1yw`COLh z49CBt-P|vY>C+Kw7^V3K<%#$;a1_LMpVs(~z<NW&G!`!&n)4Eqny@{4_Ker}>^AWt zhP=!7DzC3Q4Q(MurZajc>0e?tUvPZ(sOb>F{M1SY52X1j%PZOMM*&FxxTL5^ddIZq zQwZ=Zrz!sUF^cZW_yI~eSy^{x;pDuSS>c$*kt$Pk7CbvIEi*E*^;T5FB4Q@li7(^y z#}#nxLe>-2A?Mce@p9*^tG)ZySC-1-m@9RI-v=G)akQBsyl|=_CcjA_-ZN%|g8-=K zL0l;CqF%+EI(4dpnOOo^OQ(Bqt>4%SKb}3l6O?;r(#;ny^yyO0et2{+gGW$tM4u8q zF?$9phf^DO*S(cm&uvpZ)X{LlIGIpdFiX~3R@O?zMIJ&RFcn^v+XCt3#Iv2n&Hx&D z*)LySc@lo!@f#Djd@vdb_S>Uq>O(!q`=bLa<sb7(7N+NqJed9X?7Y_aNEee_gp(vY zOc<Il#JaB#V@Ho>Q>w#a#XLL=m4VOChbL#&LydODwT1E>r~xNgK~js^y?ZG1AF0WN z;b00*T>g+0HKp2Tjq8MKJp*kMM@*hEV<6uaCX<QD`#O`Or<m(E$U1YO&xHfJ7rO6C zj#dBR5Z%<i+6KB4zZ}_JgN}DA-&eDB>j@9?y3(Gye|WU?&cwoz9U+5VU13$2Z1&p# z6}Fjj9BAywof4@A_ySYmO~CnApFV9IlJfh3zoOx%lo4h$t{f9baJ?b7c=UA4MXQe= z=8u%RN~SMIoq?Mz5|a_To_cow(uyCJJYiWgjnab@apfT86vdzXHqPqe?;pl<@c{%s zfB(kU8etI_HZv!uAqbxVh037jS<SA~kb3o=JIsxS<8X$NBZJVSl;1E7>-CV3`rk?6 zpQq`(^!w~G|8T7p&CQkSW{^R^&v;_NB9JyD!fjrG=u5}3Q-^rOxNk5Yiy-C%4YOfO zbJHnG8oI&j_gDYQI2TKIYa2WgiBxX1kW-YmEt=0fPKyNUc?K(18B7vE_IhRa$bst( z)iDGdx_b2<mLZQEDNSmjS&93)wY@kB<b4F*GMOrMGxv=Z$Fk)6F%BtwmINZRfM|4M znmRf&Rh-v*b(`4oSwH(vFBI-&+&IlE!oqnQ39--qlHp+FQ)^>Y6gy-+T4rdmO;C8# zXV0HwhpQ}d47#8QZLd9Qc0Kyh)2GcfHSKYXL+Fe@b2v^c{H=YEqo6J066joc$o_ev zDylJ|P67J7i@)#QdSrzkC^pd_#)pF}t9$FMlf!=OPlWELZq3d@L%=|`E^Rg`yd=K6 zJcspO!aI#;PnFm6`z_Ss*{4bykxqzAmE&1C6ds36#_rBortsBS06lqfLRzOw6X%TY z$-YpQBeE$L8`~&kze~`8;Tv_8gUmAZw&Kpnb|tzRwDV^{<B31R^XF|y55H>1S*wRd z`7il@M4bs(k89WVw>i_6ITBJCGe$_HP?{tpqC$~GHf5%;%d7~M3`r`LN-0Amgd~xY zWUfeqxy%jkZ?T{6+sE-7@4L53|NFkKwa#^}bDhiGW{6kketr9%Xr7?xdy*)F2bo~8 zKnTWrqrV-#(a;~7P5dRq%L4%tl-@^heWq7E%lR!-R`Q2twHMY9@i>;UV30mg>aSts z7VakXJYA(<!Kbt6$jf^p-QWCcDhC|C#Ygwi$0mpdp#D<VnY9c#O-PZowmhO;>4_8* z1nxMcueMpO)sxTV`n^5Z)U>A)HEyG3-kbSTSy3kaL-84sl9nYVRs-L)DtP?3%^!6K zvs}k`l5&`-W@t<pvU!mSA~E(kHT!}e(2`~)NeGZoR9d=?L`X}lNB8c3fn_PEgg-1O z=tS_OTs;lA8>9d8iDg4db-p+yC1r4;qY1R%&1}CDslW67X>oTG>nC>I_By)ynx?G= z4_2IoCFXy5F!giQg{IG-bzn9H?g*#O;%aDR(LnLeIvX|KR-SqLHU(xYU0q!!I~G8S z(oXb7d%p*2ikNwjx)7!lc<al;DTEB;8O5aTO_;0tey6JDoY+tQltcl|blIUvadC!2 z#LMrb=W*%A;WRRfz+Ewjq1qO10-ikQ_2g-EA!Vou_$o4lp)VuuFFc))aGb&d5l`K> zl%)!ThOu%Gwo{AAFtFZ4VlYp3J~2^d!dR!xufdQ5<*Z?SGtZ)XK4n}?I&vClWWl{u zo>Bk}9z0m=*EOG=_nLokc%ox@jkcT5@wP=C6QSx-MWBMNYLCCa(6T10SC1e#pVaQv zkzgg)@(+_I#AU~h`wkrv)P-zPvZF9HG^|J^G6^7@D**VWWdnIXALhHb?1XXxus|Ae z!hE8mC4gMX%WKceg>TW;*1j2F6H^<k7ZVc`57j()PKP^+leLUQ(IDBA<Aw&z`^Hnn z*1suMMegMtj<EPE5`G7nW&vE-|0?P`90nIe{y0fWa|EZ0?L8frZbn8%(u^b-%5s*h zteD5MN9{;WC*MB$wED`%dLknr&@lFPjhf^KQb5^D3Qr(J5N0g0|3*BvLPH&_2HH>4 z+R}aRNW-%SwYtlzrm%Z0PAIv#`&K<))5O|3KgzDn$IM&BNWKrDt)GG<LN<&b*m$LD zI&CECBwjZE5RUh4@#m<0tgIBtFcn2>C8h7@YBz9sNi8UU=KzkdDmcohx%_eh2_U0j z6@&w0_(5_3a?P-P1;O7_9Fhsqe3`+bMNyvuwViXk7}a=d9Wv-s>0mE^>3@8Ca;G5A zc-t@4;6Vn}LQaV00b<Rc+RD1(P%R37r7<|lb|6&M^XN2x^30jW`ubx3LLKgg7?JAT zkcf!j{ta0ZvP~9Q&~rVHjSZg&lpqogv$uWQHG^WPyVPQ?Mw%%z-Sg*rCnbIPuqCL4 zz1xSt<QMC(9f0NKCH~E=zm}Jmr*zb>*OK?XaF5g#l+}aE8twQkc=#JwPA@JH352}; zkxbug#kHXgEQT!hI`gzDui}d!ISv6Dy~Tr-C$(x07lFV^c0VE*)Q`>+c3Ge?4*C;T zy=mX-D3CF}cp212Mpl-fTSi6?@fW*E;-xbrt5j*vXlwibt)fGFZF4|CfbK1|T6?Se z&KX^hCwk528!^1>LuDAxW*X$%QEQE99RK{5T9?J3jxhp?A4F;zn|m9gVWGONv5L@` znzL{yT~o@AE|Mx_54~?{0C18g9)b}C66PIeobDy?COOg4Q)geFl$Mwkig6k<g3fQd z_Vsv?lJ3sf+u_mc{3*AYExu0Q03VK_Tdw{7vZO^C=~b;A9_2njQqrm|BH!ZGBUCjH zO6pZ6>~l{pF@P&u$7PHZEPe1@Q)f4rKV&Tc|1F0O9r~0y{KSTqp3DsrhI(si4!tb@ z7k1{@v5m9=_W&HQDTup#^J8EB<MHFyzQ1Bo-~=k_x}nu)3iax=msLOc@)yWQm=ZuH zwXnq2(W7B7r1eDz6`43B?yl?K520#dEJzg7)QB_tlU*sp(635;1uPK_%<lv64lahW z_dbhV(R(}k2N7)6|9W?hLn5X>O(*D%<tQ$Ge(50P#4^|rqMslQp3{EUkowRD@XyQx z2<w8{9Af=yVcJ&7k8DtK0{n^)kD350MlIB|X1qvv(10t4zT0kTl6;5u6|ElKAm}^J zmNe_6gF(c6+~aPyINOUiWpOuqo-8QZgycjFAIkx_K_N*w2EFU}`Q9Wjz|pnkeZ)#q z)-F=tZVw2^-{5Hvq06u9Of`%JUkPftw@)urQb|F`3xkxnC~pV!UxCYyw%@wu!bwWW zh|H2VF9p)gzs*3zT0XC%*;YK;V$7>MXkTuo{ZUv|o6|Dolq~04;O(w}6lY#q{i(so zK8cQ7nvYEjW&*oo$BqC$k8c$pYEIXr=wZ>#3!o_O^sk|3)ex_M+PA+tUv@%z2y|wE zTAm#anR5H-vWb%`$-6k~B?G8`2tBR)mg`mnyx|`7Ss=ih>bW7cU%O_Uf!%*9vu#`T z*}ZGO{!^o~XU`%N&0cI_NlSXaD4z&-(nUY>V0}Bs1q+6tZWc<%FjTy)k=`P==~kfI zwvJf}DLJ?(O<T2c!iH~l%Gv`ET^P1q1BTDUW)I#+Kt0B<!l5l*tO;zSl)m-L<ge7l z7~Tq(M`r7}!CpzbJFvmb&QxLUNNFUZNHU|?UHv7`+WhCsBKsB8h9Ze11Ix^=44{Aj ztx_~U4d<Yv$vRIBLAu)S@6Sf}(`U~@)pa2Mh&Fh|_ZxrU1qNv5GiM&ms2~w;ql<kS zb)k61Q1yPfGA5cPKfp*fxWm1OEdaAY1(bqtxKfzW5-6^yFoh~AeV#Ikq)r`b{IRx` zl8-a6fBUXo(x4X?`I`=l6ufJ`2LAl@%XDLz>NKn3LNi-a!oM&v^(a|nbcI2BS#x&~ zr$oLxjXmvA0SgAVD0`;o5Vfy=irvz;*@yuJ2P1LQ9&?{|&?NkVwsMK&Py#~)=yO4B zuJ0S?&+be1x@OT#7ix0NXmlz(S`Cp{8*JNp6E|IvTF|4W`*SF40kshfgF!^@r#o8r zZe`tVf?#SN{R+$*q-#gnF`vOjPQA(FA3Ia8XFnUku2B#**K-2YHTDgTcqu?Xx|L?D z61aDu^Q3<x*96FkjBhh>>{5Q$xzndlr*uCU_G@oQ^gaaeMfXvCh;1kb`Oe{y`+x`5 zWouCkVIL!mzwm0bk_Fn5prhPvi|#om*$8dN(;vB_Tqa#ac8*^u1%*^xq$v_QcqTSB z7M{HL-8*y6jf}#Gq7@7S{F$?KsePVjSnBoLw|DR<$N>6wc3r{jJ!2xKM2ZCvP9ZXS zS4?wec*gbm?BS$Z1gFShKx+XwThQVOF=3w^g5qKp0}LhqheF3w1(|FtlS6>DA#cWs zZaTKv`~3V2DDSwQG9Jw9C?32dH+*-O+^x4#^n1AN-l}CZ*5tn<p=xbyEy_J9IcQ#> z=oJ6NRja;5**#XXV5{krn$Hz5PQ^t<29#%Is2b4+6cPL8kx7Lh0?@|OYy{({!$Z(T z9tg+~(*4tmYoB>4%IS3ngUF?%A%gj*Y}Ty2fww#X>Z95Zd}mlp7l>e{K6L1Q5NuFb zNtzjl18*nss)uk+XHr+jrh$_=o5oi=Fm?hE;O!Z4sp-<a0!M-Pf(iEja3n;yFFVY6 zMxtM%HOILtE-c&x)Vx&JRkfsr^lwlP8_d{(!ZU#>>iYHTWAA5wV9e9V+%l1<h%N~J zUs9zEZ8Mf(RS<MNxL=<>g><oH|1`WCyFJX2lR(YF7IFyaH2~3y%F4Er%n%#D=2sLW zGlHg4#1J9{<*zeBH9DI^!5yO4JN}_y)~ul;JFohm7GRe2)`S43AOzcP%5c$!K^C}1 zE5;YXSd9Pn)jsWfO`GCPoxSf|J3mfH7u5jD6`GW^`FfD$1i`XP7S2=y&dx)*nKBE- z>4?iYq8bvW0W`;sY3he9K)l<7Hz-V-5TQZ0#k3c(;{Cr=XU#ik9^*BM8Rz`@H%Q9t z$Bset{^HY<hQDy7kaiKv#Z?Hk#SDhL0ou$V77N?f#_nfJVl~99v@+N9=M<7X(TDqK zS4m1g`4zTJtXGjX{gxRIBk_pOnMlZ4VxDl-EtpoK%o~7*Da!s8PX&w#^$pE;HZfsj ziSSRo!p&z6D-i9g=*p$jWNciBqOlMi_sy)V-QbO)q9WP3Ny$cQ&G_5Pttj6eecl_9 z`wp0B9P#&BJstrEJxUo=l!Jy~!|H5@Ba_nkabivnRVr*Hz+uMqlRBSLS(YuP=rVE) zOL^k_c_lun3>6AD)S?BIVk>50z`DDSRJS-(N?i#3E+K>Mz?4sgJjgC1{@KV861D*) zCp@S+%8?NIS{*t)1dxfh9kH4$U;6Cgxr}ceXd1~}ylgvwl6!+Tap<hAi7y%lN?xMM zhKlHgZc!FipPKnErKYf@Nb0ZOxIx=pRb^w{m8A{LWC(;au=vI0Bb)&#sW_s`5IFGF z;&6ht0MW^-!0B3BUTi8UPjrm6F?iaFBe5))gESL+SD6nIy(rQY9#+t$nuzmyJV$<4 zkv(&5B%s-Q)(n&XVU6+oNB~-K+8KNFa7k)$A*X;w>d-ZNZsq2-4V#jI+8A$vHeK6t zD#j;S&77G5_jZ9H7y5lyiGrFd+?FpFMr@aI<2H`p-*70%iBi8qok*+(<M$oD#oHLX zOP7$uEGi*V_+gMGt_ydGAiGt=iH>Y|9LI^F4WTw*fDgEU{Oq{v={OodjCp50cQ!tH zyF*doDtaRV($;U-u;%@RH&JixPNFmbX-JMh>-Bui8x=9*vx$lI`?Bo?^gmq*>~RlZ zZ+DoYjb9L?4XoM2@tHyk*<oziJrH&%Tg{g*?=fP8(szyX(`{@_=)IzBb0kiQ4haK0 znFpvu_aUX{&gKcMffCIla*B!6-ON1ojB^g`E-G6l`maXEU0(EcT^SFb;?m*K0_2N? z{xd{ksT$!8K*GD@FLLs2=_5dtkMlTNx3Ms=bJr`~;3hr=lAaDQr&?1U*txzLKYh7b zbUn9~dP8<?Wex^vxq~^{Fx|fh<}xjSDM%%Dk2LqvL`cu(54CP9BmZtu8D59Sm=?7b z-OQVq{N4b-3j6{>t7&V0-J4oi@%r`r7HtmdB+85iG|rzyVEOI{g$x8ME%-_Nl3CMN zArZh!a0i@=D7(+(ZFoe`lv65J4U3WlqqE7jWN)grVhOqPpJmHbd6DD{5Vp7vqO24@ zbR4tx$aEi9v<SfsO(cjV$pNoldvh0mwQaR2sx(o(xX^3$P?`6E1)xtdw}nsOEW$Z- z(n~S^4x2I<;s#?fwKujM;1L;1zQ<oBjzN#uTMQ+Jnr1Nehg>0g1H~JH-IS6o&XThc zL=HivDT)v1fJ|btsHk|&#mtqcp<|f$US-tCk@&-=$)7Vdl-0%tKq_AL*dTqx@h*q4 z5$P&^PWC)|bX}UZh}e0q6gUMV#=M8xC3%Pvh~~5bL$SNwL>GD1JRdxo>12^<P=+9D zyQ(y2$L`%Vc{9eixVT(se0uD+E&gUI>O+2O(sdX0x!!=sla3%=dd4Cs6ba|Zkq3bS zQFcM!ceW@DgBv={J_#wKIjyjhUEm6ffPz*j*ZVSj|KG?>PYcf{j~^3f4N#vRX2`@# z@%UpVY+!gdONrjHv!nl^hksEDh<OK02XC<xMk{t@!8(X202IebGYn$nQs5PgXlpfz zUOk;ri6=}MB9E94<P&#A8M;1TB1>m)plx+#Lz?_jsHd>}I7~pmJIboA{dGM@h5iRa zf89?Zx+}IiN8?_gHuwE^nqT}+fWN<t2g+<OJXP@e&)XZ`=)Y}Jgs{&L4SrN1LwL2A z&4}|OH>o8m=Qr``UDGl$$~L8XLSqtWWJUxF_K%G4-H){$g`wpw(Y{0IPhufWgP0!{ zP#y?n{$r*VL@O&QUct0TWI4pgq#JLIK_YOS!aFiCM=BOAp7@-krs@&B=Zm(%Id=<f z<IfBO{{yQEvJT5E?l!1PE}2b))^f}^m#beNuolUsvi4$`Uy$z-ar(R)&FH1P4zy7k zw+CCdgIHo-_&rS3Zta?_%|4A~X6Q3A#m~%%(^EQ#;Q{Uo>A&^<J!`{J9|Ev%6KqES zf4N1Mev}*<>hkdI-Y#*=SWV9y|5%VGQEX_Lxp=mV0h2+9_=9%HFSnMid{LaNABHZv z`TY4&k`8M7J5z>p%HV6oS~~#~K&IJemXBGCmQNO8jHC#F4q3pZY4cax4sp!tim>eP z$Ta#`a!k=>9V6$$5{g=tQ5y(8)gC?S^B>mOTdR@a+{+(qrwu_wT99+M4X~X~r|68h zZZ3muH8~Q`VQR}5qzAK!km2RaIS+p#D-glUP1jAFCmvwQ-b;0hoXJ-}LnpF^oIhCu zPG#rtkI3<?5<bXq5f^pMw`Z#|?%pklj5t~Z5Q-qST0OTa0V}$fX0!K15mN@2v%wKO zscdXB8F?_p9#53&rq4Vnh4vy<L->SBrUz|o1YFdS06AHzEP0t0a$#|CWx&lAW6E2k zSAid(fa593=;_m*z5xx%oy=uDDdeDcTwGk2+`iK(;3yYQ$H%MEwgctw%S)zARnc)j z#<(n3y%0J+LGt^BeyZ0Sl)QX-1w_}hMGHqNZJC&4EX5Bqt*H!+k8FL?5P(b9S|l9O zq?b5F`8J60DDh0+y_;6R{Zm}9f9TXQ_o6W_B8)3D75T@Xnt$3Tn$_UfPrw%~lnG~c zFYMR9|7)@SpiToGyxcp=X~Se<k4)iUsx<f39#vSDiJMi9+ek_M<cTsElG~JV?_Mt^ zTA;p9^8_gQ#2*16QQC_a!6E>lQ%yiYeiP8LMRO-u$SILSO~0v?F-IH9GS}VQt54V4 zS_F<h?T#A<p3ouyn?(1CFwhiAZtuP0eZ%t>UEq>Z9xOnTjPju#j5=b8o6yN9)gp5$ zS`fvc9?c-(fjLeH<D^qbmnj?7bl-Q`R*)E?O+zZddBw@%rsj&8>S{3#UBgwC_Rfb( zl|DD@QhOgTK|Ae?X9j48SIf}QT?x9P3V>6($MF(f0Wck6qb)uHjCk|NKL09QMd3#= z2-*;}9(ShmxVc;6*TZ3BV3IAT;p}2#$f4JP(>F2Td2nscEdrur)b`VkqM2z6`yqlc zQC!nz&%ys#0t$Dy@0m5xAsi1eo|pf`;-lYV5IxPWJ%4@~u0VU$`==qa0B8%G!Eu8S zW;Q(<OepI7?;q#lA7P4&#BBPXnWc6BAw$N({vtQ^95g6fa|NsR#sl=(G!r>9`0a*3 z@;o$828w<Jt8;KiSWw}o;nnAWzyEUN(imvp=6sK&Fyk(R)q!Sw-7)fl)X3B^nQ3Yr zN-5an;sfl!zz#X@jYLlkK;Zfjnis|^2Qv>Jnp-A~HX1qtytrI97AK(@5IA)kmA||O zZa+et%#t<jNntWD#9^1=DFP|i<JCc@qhi~R0{T|bm{!m_Sro&!#VZ+@C@huo@YvgT z9pDwjO=aMvkFx1gO;z>kVpTfrnnGh>iOW1ON``}B@BclXUjf`b8{Z(8vy9<VL_$Iv z$_E@v@!M;{%e{Ge_jfm>N=nTxehZvFZQ4sf4TZq2^am)ed?F9-4+s!ZEhWMu8vaDI zp3z@C-#%M4W7?{pb#-rAq-C#bQm?gs>#Mzw^)NZmbIx{4hiw{tEzdXyt1lRSC@{-) zO!#8I6>Zz^uK#exal_q>>g}C3;f7tC_?<i4%a#Pb=oZ|q(tPFciv^`!6kqsO1ogWR ztMnnQ-h#Vpg7be}uBfQ!M2Q5OFGi(soH2QAytb<TbZNHPAD0R!!I{jxdVWvqCc9Gr zg$}T-D6KD^X=U+!V5iQVhalah_SzT`(M#NGJb&f}V@#y))Gf$y*Y4dgT_N%Dd&|og z#XQW(%e#@2L$TWdT}F}(&WHMn4GS$@mM(RI#gcvwb#ezHopJeDsDAps{DY9}X503s zJ@<>CoiWg@+qXBBe6OI{^x2lnm&ec_rKsFQI@rfl9Uw<$l40U#erO^6N9(ZN$EReV z=a1%01|B<g%B<qqN^koJ2kWye`B>W@mv8)UN3pi_kjvu5>MZu+@8>}Fn)wWtY%o88 zV%~zi2)r;^DAnWi1LMb!ACI87U011BHx33v>e~DH`ESGofW{gT@g7>@6&J3w*%%h4 zA-fl_j}aoc`t?B1Lc(VRRN7P@qn`Va{u(n>k7h_VxclXuJ$FuuK#ENYginuFnC{PT zgor_Hb-k|kLtO$JmAILi;`;CH-AD>|apa~ODzil*zoLrV>2knxT+e;Z$u=8kXa~9d zEIG7vp0jfX5M$^Yci^y4K72Ie<uQE}Hh-LYJlC)L#A8WG2N0jsqOP4fdGba&x6-<X z&F)Y+uG=^kWWHLJ`b$OTTtGRpV#&p&;_ettV|nthZlZzbN+;P=99i{zF4_`l?Ua@- zjCt5bUa|h_{iFptW5>e7x8O)1nB4doH<%%;osfUTgc+1mQ_hWwjE;8TPer+zTJvrx zNpkzM@FOSr?LacF&o5=bs?f~12^Gf(&P$jYx-dU~{yefF(06o_jro!#{bi<?Fa&4w z53DbVdgsxjT&b=YN`N3F_96m0qO<a~@k-DbFYMFj&-2iY+HCMlh7qLLMla3>dOqOC zF&jm%t=8ysdC3SE(UVyEz4!v7F@zHC>xUQjQ0~b96SJH7Yi$dIhYcGhYF;u15N4W{ z6)8VW1}zB#%a$)+yLhuBA}JBC(fNTgTTTCCO-0PPK|_bW-S1FVdbWz61@+gXU_=TZ zm+7=jsw)DD6HdB*5Awo&TxB7g13d$}jv_h@3JMahQHT)|S7TyMmcq!w7ZoES@R8}o zQM_}<3_9G*!9fk`4PDPPw@DM4gd15fY~tnF^SyQ>{rbtt$q0Rg_=Fs1uuGbYz?zTD z3nOCFd>pH1$ZZg5tLV?jr{T;Y%6<wbr~HDg;VbAf4;?<-B_+4bM&2Y0ot!5;;uL%j zeEqso+H!OXK;%QXr+#@gkk%JgedwA>%^44hIpMmBDS(VSccc*l#`6md?A^gh<HYo6 zPC_WXbaFiiZ7j_T=y@TL2p%n3v{>lsY8W#;7bGTzCEHr7A$v(freSJo`fB<8Y1OG3 z`!WU%8zuubJQch3pC-uR0Ssl_zAZb1v19ayy`gO)qzttt3RVUBC<Lr-hnfWWj>0>V zC5@+KAwk<`%^QXs8pVngD=RC6_a<#-ELyyn!ICj^>zJD4=J}5KIkDlpQTm)dZaIA{ zZ_wHOr%!jGG(prSdxDU{r@udA+jHMw3T>(WIpRMUT7-mHKs@zp62OiT;Db~osQBFQ zKr|RPP9t)OgF_k_OdypMQOJt@8igl@h0dA`-VrW`CbqadaUgJnl1nZw1w3nxyC3T_ z_zj4KJ=|-W>)dq)*@*!Fg~%)ZdifSwLF6oPoaKN7xs`wTK)XD2M8xLq3%#kZ71~gE z76XEX+n@yCU5N}wmhOU4dLOubcg*-gYZ{3q@-s!S1c^}%o$%r7@B+9;F(01?@qz?s zVbVk3S0L`d(l+8iBusZ{$}!p8UAHevEAY-g-`?Ajq03&RrmC+Xqw90)h8*0*86KST zcKFHI*afJe4v$#2nO~$$yLJx>wmw)AnYV~Lz@LSmIN`<3lFl|a3nldN6DJy~sHoh@ z%3{uI&c~Nm@#giSM>W~XY67Q;qN9kqAL$0nQ5l<IxI@DI78n1^89txtF%eVo111yb zbs$CUiL9F9NCbY&$`2YoJRQ9XB?ojN)-qSPtX?&VrQ8#K#G>SG&Xuz%pbq^ZsPHxG z(CTEv5M_)ss%yWczWLx;Hwr?Mxk7`AVc*^sq_F@2F@XcA)#7^3?AQ}gQ9JOChF!%9 zm2J#zm6UGrhJi&_o<6OPZ{Dva)W^qEtUbV*@)M=~>9@4Ab#&hPx|(m)peXWW8ee_X z7F2DN$oDAB3+UiL$n8B5`+(ZFRaaf1BWTbuik?AR!g=xH>o5|>j&<h|Fxr#${JGui z%<5+E-n|QQOU5mayc0b#0?h76Sr_!zK4_rQ%RiM@7)FF4b`*=I`_9It3D-v@cAscQ zKk37VdsuB`5g~<jWD&7wPFUCjw{ml;#c1!ndo7*1MSbihv(i$qpFOKBU=`1oAIQcp ze)$#~n(No@nXgWV{^X8@OP6*W72Zg4N$F=uLdlp|AQG%*CB*;3FDa}z!Ra$JW6`Tu z>c-FB_k;<Mh7fc+7-rP3f0B0-kUA?X53~IZC8*X!@WoLn!j?Vp?AhaSalVm}eMl8T ze~bAICBxIFPqXv$DHx3^72i>3hlhoElg&kP03R%X7P?6c+R%s!;UMy@X3ef$y;@IA zEi}DW_3#7kHOek1KJXy^a<6<ntJNf-GEDLI$vIzKr<T$4kcKkMEhD?ViAF*|bMppY z{?NLj)Z+v@fWMBJ_6MmP@#iQ_jm~?@#t23fjl0g%9y(M;*xlXTS5w4Jm}A_7ECYnV zkWqSNM5GD!_Q8-1$kg<y?#?AoDla{s$hRO?kiF-~mSk(s{-JZQk|ayBGv+Wjmzn`u z!~d1;EE^jcq7;=I)&n2Ee0k@;Zw!Ck>BK~J)QuRvc+g@&XnwNk6Y1cSv_$5D6Wk<f z2Do@;gSVZ|8n`F(^^6%aWCW4e1>h^@aDY!BUu5ozc6tWSWc$vY4%}9{?mOK2DqI`a zT0U@F?)f4Ymx9Y1MiB*H6TGOoxO@^$NX&tOf$oQtx4dVpZkCM4(NdCa5y;#QyRO@G zcHK8u#ENOXg4bUIIfdkPX9(tvSON=}C8Eyj<@Gyb+1kM#!jT9N<+f)eYf`?@T^Hvt z5;~a97>Kgw<I8%~_a$Tzxo!mPOJ`b@#fMIhc3!e1EHZNY&!1xFa}`!lgjKW)LQbCC z1~ALzBgMuJ0IiG|HA;&<rHBb6w-PH*P#IWTf3se-$1*xEF)4|n;VOi!$W_QO@(YEB z_q=oG4n=V<e4~ggw4#94t)Fe|>c_YQr;=(<*e)9OD1V-&dImFXf**wp_|sxxAn|2s z>7$sg+gADm{$ybXH~8VjZtXjEY|Fm@C+US29i6S19Ku!P-ASaA&E*9JGo!z-e#Q(M zmh2(Z7``>PqGGXNIwJHEeJBdtkr0=-z0j@r1ph70q^_MD%V4BL1Pa|hZQ8Wc;Cb$V zdTIxzkLQpm$fXH$(;8=J>*}rkxDjG_3oq`pL;BxL7ivU4X^#m%i=@Pb;*W4aJe_Q2 z&7y^+!81TqOZmPlENuR{4gQtAA?i3GsQcCX_1jrh<({Rmlzh%lk^=<`7xZgnVL(k{ zF7qrMX!zMgYhWJb+q^YMXaIu!sZ*zp<4>S>UeN>PZx-h;Fu5@AI66JOwPG%(X)YOv zl)=40$ZBxzZHsAO6ArWBn_!Qhk<&Z=6fp_1dS>V6Q8gC5v6mvpYXA+{Gb`WOV6Bt} zRQvwqMQzWFg?*E3vJh^GBu;1r0_EIum;TN>%OJ_`$>p_G3&{fGR|R^qIQahK$0oC8 zDYtCdlB>TDrW9Sz`L$o7O01?%{g)jXMn+9Wj~*>U7n~TGHiB;<fHAX<-D~f5JB+^m zWz0{>&b~r6prz-)mkC3}as6XMMNkJVELgB$-ma%=+5Bzh=2`bPJBTu{fB*hUN=n3Z z3nbzoWUj(ocoTy`saNTPB3=NxZJ~n~b2JTf3}43^Z%SHd_hO)a>6Wg#tFQ1-Wz>s~ zbKt>)&N2QrF(q-HHT_ru+m*0ga^cO<T$`9)M@+(skiCj<o0jENrYbL77%5iKQiOvz zEbb)v+Qjr^avfg#C4-h+_)i}{?y186yR(?RQb~xDAbG}k^He<*3yy%1jg8H@ql%wQ zb*^cn6#^EI(|Ug@B}IilBU<Ai*^b;F$QIO!Bla{6EUm4@?2n&BH^vR}f^>;4Hv4cc zb5?Wd<J32+GjQ_ur(3xV@#n)uO|PXXhG^)Q8jzQGI}A1n*MRy12%C28+GZ{*Go|Jn z6UM2EiXwM9FI_797h~0P7c7v~o1KO(ob1%?q1r06$eb%BekG8&P0GtlOz}!Ozzl)Q z@0wC+^!qfW+s~h`A#(vV$<+Bt5l7dW_$5=pBT^Hq20TX7c;MWjBSVJ{mC;(5*+&WU zoAc_9Y?ydNp!4(RsP5U^a{u8&LvwSn)_P6zO6DlIWfH#t1u`NW60(W3$wwoJ(Ih17 z&~iROAuRhbm^sqa)XdJ!9Y@iepz@wXJd_#;;u4()6QW(ltPjMCgzY2bo$iRouyM^& z8o6P^hWjl`Rk^a|6~B9Lq-q#qdVQ1lRj5e*8~vw8b#LYQot3r05~bR=_r@fHkOe*# zA#c@}FC&+~+BRcr8!uOUzqWzLWbG+Of~kdgA|j^%&R{HkC2pb|FDvekP{I7G6aYj_ zMt;QXjYN=^mR7vIMJsT?XZ#T=15&HKY0QhZAf|Cu?E!v0UQ{~V|04_^P@(xfh>44H zqR%ajU^@9s_4hG;78^C-LDO0P(*nfA?0)>%hHaSo&=RzCWCHCkqzIU%OmKHkR2Wp# z(c|%^J{)J#ZS3p|_;zBnwH>_;gWqbLv$0<O4GV*}XZv+`w=_357l{<HAs!ll3O3BR zuaTi4W59Q4q)>tyMNZrC?1AlAKBVZnn6gA6C*pbLPIZ2r?ivYh5eq0WvV)e4%X@Ex z$Qo!q+0O1RrO{w*?T0q~1!7V4G9n|i4<wf~&M|y9Nf=;Cqe{%-q{{*6AFuFT8NM)x z^G$o{HXv#+h3tc3j(0>%OiQL?h)OZjdHE!MHnBSnDY$2M<=(ZfdbTBH-|I#hOi+pQ zaUIXGon~!4711hKn+qkWizcm@3W=yRD(d)!3p3j~)*m!v$hG_TThk+;YNM$>9H1uZ z9Gn4Qfyk=1t|6&7$<Zp}iC;w$EQV*|xyD^*lOuf#HnWQ@PLS(ZLR=b|cBr=Y^19j$ zT;-EZeP9!tQ}!YKz^VvpPe$|v{?X-j>5}@A+rgZVaZU~Tt#vdbL!+Zj`NDu-8#**B zEL5Ro$$8_wA<v7S?ji@ab?Z&=KU{<3(XZ7W<m6lf5=dhe5;dIC7UvIks@;<5zh%qT z6un4uS+po{q?<HB#dP`Q?%~h(R9z+zY-juGUK$B(iM#F9w5@t`7bi!@L2MhRLgeSg zIBtrJjpeKf4o5jDx-<Hl)XUI!=8t+Z&qw=dN6-4HeuP&h<Z02GxJ~jzWs|jFua8@2 z<jdE6U%TM4)4lsxzw9Ztwki~cJrdR3*A&@KS4{5BeKpUl7S~A_712MDDUn>s$~hn? z3)kr;_m*ydW@dAqG`@8+URE@u!HQIPIlmFTlT0SWW#xCW)kWKJ<Hixq&U@C4Azs+T zgn_$(AM|}g<Krzk@xM`iLR3@~N|3AAAJM%tURh&pZ*Kt$(YSGAO77zAc2(<?c(f1l z^R?JaKdIt<<dn$X^doqjqOXP0XExYi#fo9v8&ZylnVG^QyOmZ{ghoU}tf6sdt`w>E z@c{vF>eRL?R;<ulm-pa-sHew`Yd{egWVuvjAfOxi2(}*O$$jRU#5V+iJVsZ%KIWOc z_U>)X*&{pZYG3V20;Yq)E(e+8<5Y`VB0aBk9=gn$Q}roz>U1A$40e?rkF+46_eSRo zUTM*czbPa{l`<UqNmj`-`zC8$`JOI1?%U+r(^)h#H>W<<`;V|-pk}b)dwa!S7LD{* zPXqpdK=aDea{k6ImX9U+>DDvWj>jPmT;xcHL#m{xsJ=)+gm+qv)g{I8>cz456SE#X z*w2{CKaffox6rv6C(h-k&<>2D(q#SD5rh%u`Q!UQtb-RbxC4MwjIZ?ll5NF52}TaJ zGm7eyQBg%O214NxG--U@pcM7!FsJhn$8AJBWgQ(I$Uc@K=yPcJMR{A(-6pZ#A&Wk{ zxQ0+t5Z$rV81`+Zg`bc41ife5PW0D%rl9eDzIW`~jI|vVz0&v09+3X@>0u(Al*b5K zGAR3{tq(^Tg47w-04@if^(qQd#J8}M<gM!j5L;W@ET7r>7hAM!`J=d7-7Qq~GO0$* zLH1nrb?)dPTefTo3<_F~a-Q^*^mDS2g+;68&6@)~`><(irET<|6FP<hkO9IubPQO| zFmcLMARet0w9rag3wAjcmnI*AtYX4+@bKYIAW**-T4X$#!6sD7WFH%F!XqP_0zIjE ziM}_pv-fP-(pZ*Jf_pu*ePYrq>T0^BHipMAKY#1WmA|+-GJK9b(t`)>w6wH{>`d7( z644q7GXFBv^C4fgVMC4UxxoNJqqYr|QS)%Lr7J}-ycg$M7}Ob5<QT1@y%wh-(L5<A z9K+3kqH39MjWYk|Palx&xqcA$&>pd!)K+2EA|Gb(;Hx)oOwclPMJL9D33QR#-BESb z>tg$>v>HKqeiTB6*+UMxbINpZ3V%EGj!Vk)RS)l9{RlIQJujOSCJ<#P4P~qmMKt4? zy`EpJYlPCgwkqPc5glshjlRCpTlCBO20en%L!5pff5iO3^z()xg9g0}3$XidlwHWm zAFD6LPC{3VObB!e*rBn)>Fp%`7f3b<r8r}5fdm>v8f3CVq)z<&9!lSvOF0`Kf4^a% zTsuT@1Ywz_r{5V5Y^Oaov|c#vc(P5+_=bUxpFAPU<-1SyKkg4fs267t@UX_SvQdaK z6y8+^U?}$q&XF-Ozd=>Ic6%^s<bXox%xBn^XfcO)#FIlsD%(-PQHPHlfg`^5;6YWe zVKW8aEeza<v8wo4V6r6I)RK~i1zW#Nly3$$qTuGH<&;mtWOWlc3pX%6txJs0?^5<! zn($?`;dl*$kzmL8+^dPCgp{QQvj;fQUYnQxbLq4xQ)G_>v%+EEKfi|q1`h0n42qjh zqjD=6G#E8U#Ct&ll2Ivf3b_K#ix!cP4|1~QUtC?o`4@gLAe#k5ICk(L#fhX{GxHh7 z*47=lZB!S0Hw)Rz9#*MqHmmE!?qIS6#H}fnuZa9%OeJR18IVSy+z#Y6D9icOE{4jY z7=cW2?O5)&nOmQe(*~B8Y%X>mbTMVQ7ChGSqU%j@g1jbP<~&%W;$&-#jKsHw{md3` z*KTQNzsgAIv+?M3I7ge^yLTrhCeE2V_kO|F&ojj2HZM=y0wC`xg!v=UuHqDIjNnXg z`{-XU_<%C$!N7-Xs214<*GglQ6F**9b53T0d)XA^;2JX*_C@l{x&8#X!C}9lbx)U$ zNBUkC4>4aQzZvllT7gS9A4*>^r1U74zcvBf2nEC91XTINg&Q?j24-`p@TUW45np@v z>nC$Z63Xe=P#?}<PavM0AQo1Zn$k{UHtU(TV{Uv?<MM33@15Ew4~ZY5q2Swx3<JLv z9v)8lCg#s%Sj^Mlz&u`ZEk(EmBBs$gal?kud?upwyt#8XA!Yu9v}8_$YLfMj5T0#_ zKJow5D8g=W&o2EekFNeuS33~ScMgoo5$#1qmgNd<k`fc)Tf;EdI(s(p+_{|qS!oT} zPN$55ffdI-Q3xa?16|a)Ze$RYyz0?Up2=W6GCm5Y{>~pOz|GR*<~1`)s86GUC^SMx zXNULo0eIgdTiVRj2`CDdVe+(T*TH^-H(63b7if;N^LEaFa3J(K;CJCYR?qpaOo7J? z-gdf{_s0Cv<Oqr~oFgbIRF3}-Iu*klnui`g&P>rw+<p>T_dD_~qFCibR4<RCjY58v zm)ap=OSFr2Xf}4;x{D88Rt%><z+Whm9sc2^sY0Y7=#-TRk&(_$-HIH>!NiGq6L=r@ zZZmrSzuO|;zI=I2S6UTu1DIEf?vn8sr%^X^=QFKAXMX&6F9pTgW_n9{NZ>+|I}%_Z zQd>^ydNxYQh&^NfI6d$Tc%TZ50xzqnYR<A+P8-MtOMIDVmgW)vW7Qcw*qbm9SRnUe zhFCPFF#j<zOU~&;FjtW<$&~q_1e?tt2aWHmubABQ!t7Y*B_9|Oz>)!`_yleWlyy=Z zi_aEpnygh4ri;v*oUCL1*X=uZT5v*O-(`f6Id0yT42)vp%=ruY)Q}uYXbOpreo|n+ zHsC~bbS8I606R5C4@A*Ob=`M1@5hWKk%f8g{U<O}Z9|zY<w^31prFoZgSJq(zq0j5 zWJ|)KS7<yWC-fq##EpKF=DiCB+=VUtgx+s?_4j3LBD>bD?z<7~`@H_|+b64W9f+H7 zL9|N59#=k&h*5wx!e-H)e1)dq8WLpi1H_fAOJhvHFJ++naIh_DWZ}(!=<-=|;+Xk{ zD|>|$kI}NZ^X3`Q&gulf14m1IH!@0hz1Z)fTB3Shetvv|*@|B8Bh@CV&tGV~!{*s0 zxDZaP46`9*WF#0U0M|PBKPT!r3l}~r*!p7zbnH9|`%87TzYsiC!bO{$-83t5+7K4O z()KarR?x47gERDdOk!olUJ#w|Eim?bXsSVo8w?1j)4bwNy@M1hw5-E^SS+F)YL}j9 zf`m?Mq12tClYV%<yEryQP^5^Ig;fdSj0BeqJtkcO^cZvrI*s^e&N-z`;BK9;+$pP4 zjM^kO5jxHF4pS0mMh)%WeIr;S=lOFf>S^&Xk;LqtZLD3&Z5ZP7^jf9bOIa6yYG5y? zMsP!P9+|_;%xn-S<JK(&1i!m>?UH^ARbB4Y$YN}Iwm>a`xJ%2+>D+i~`yDF|hMJ&o zBesGqgOne=CqDU!+Fm5D%w%Z6%fpKmkUg`(?-~_}j!sSy$ca|2ZYCY5>^w0nLcqlU zi~75j?i?0Tiv0bzDA@e+-nr5=5T>8FD)Sms&T#yhq!*i8m$;Oha;T_h)Fb=rb~ZFL z1Pf-TdU~>m(u7H63Gie&QM7WiD`}HK!(w>Xijx6#+y(z`zW4g*tfk%eWk9Gqif9Ts zyv+AW?~`^i20$|7hKxysZY3o*S)c+jPqFqFW2>%TCR<}yga^->^N*iDA25>&UdJe1 zXYs6AhaS3=QS40Xt1;7J{b49{L~S>uLr4uugE$>l2@dKvUke-EdYi{Yo}c&$P;17! zKGR|UffNGj(Jv@`dRiR4!|@hdHALus>h%hJKDk5o^+X9sr=LufWOr_qU*>C2<xBiN zP!&pAC#gW!i1ZeNF80(kLM5*X5yWu=l3%nvcg)BbvBJ&IyV=Ts%ON8fS%?bRoH&<z z3REP!(6ktYq=#ou)A`$s#&2mz49zcieEFfPiwn#si&(m4x@qW+ylxxOT~}YnFHz-c z50K=`x-1JkexSglsDs-lK677}aRUhO=^T8iK{=TZDEshypbCWOgaKMqThMv{`&diM z%0kfMNvT*>RRxV2)O~7t6SwqewO0>5y>X|we7B?SQ{FPSXYm(v=sttEc@CpS57XS2 zA^ipE(P0Kv!my0Ai`Tqes`>8i+l4MJWEF!7{T}dXglLBK$c?Lhew!w-tzpPGt_$f4 zoQF<8y<lNHR~p<l$<0j*g;<B;?p?3Rug>@$#o}*hZRg_B52fHd4w`OVb)}5-adTqw z+b1FfA;#`JbV!-6rM{VJWpx9@Cu3T|M^P-(1)jTj@h%h}kQp+d%)4H^WXS}jSHr<O z6w9LMr85<X<_h*!_VJ<u2hW-s8g5yz>o7-IQmePOl(mq7T`O+<^f{6PiD%<knnyfP zIV;I>^~Qn+4^Dis0dCW+5hgz-e{C1)A(Ul8ffmq$CV?<7uvhXUI#X<T2R`@hrb-Hs zi8s5|g^dXG1mQi7Z(th(U<E$0Z|pN_O)bn<favOxH4mm*NW+gW1Ql*|EG|pdB6l5} z4lk32E>_wDl(N*N*i*o5g<vy9A9gd$4S${Q?%i1q8_c83Rn%S~8yZ$GoIXzi(iV|= z06|!YQWFqzI{o!w;EYLU8wzgfuxZtoo7)D>P-)$;(5c%ivKzHy?J2d%M#m!6o<1P@ zp}s&EB4=#YEK{Hr1rb>D6Qo^m%{d=y>L6HSc#NsGw&q;g1y|oi#QAjAYdMu0n-yPO zbzX-fnM3o4Eg|ScrR2r3oQtWm;!OftUFO?}XF~K*(x9YWb86t<;IzMBL-N+{VS#%y zZv%anK~N#U=?MNZ2tclCL`B4C70J(J`Zu7G6zsHrp~N+!pQu<t$=TUWTD|(bdaFKC zkpeW4UI!~^t{5j3JU04m+FV0;vATHoaA~)b`2jUT;X<C<d;HMgj7m|>k-}U87x)e5 z${VY<C+R{K{PBnoVKo&JC5SK_d^dS%9LNw5dF9EILu3&?(9l*p_nXXj^6XT1z-N-_ zluJ%Y=g#HgrPUQPn&AsLxfsDFBuuGDk{TMV89D&&3lfn;yUJzRkZuUWgmj|=T?mCo zn^vUKA8C66B~>4eOByR$sUhzf(H!Ykf-<ky%o-4YSZj`{t9Fy2BASM(#*dDx4N79b z8`vQpTgYB);(na~<WV#7L2%G3mO=#h2M56E5-$QgNa(vMcI>$IPa#|Mt-51rX(<DR z_ZWyEhRae4%)a(v6N;h`g&CU^+v_#={_*`gMQm=^J!hkZ#uSGY_nM6|FeU5xesMDn z`PEi%P;F@N%3<ZlA|ke4xbP#jx>B!Y=NgBXr4ex@B@4_SiDZgXYG3`$^UJE*Dwyv~ z256)q3DkDPyob=*8tNEr39RUc#I5x~iXxsiJF0t-`L_KVH*QQ%{t^Xe#-0_wY`;yL z>UHSQfdSba2fzK6ZMb)09ABmZ7y;s^s8=L##K*(XLAX&4DO2JZm#?%|QSJwska&4D zU|A9mj1Te2-tX=tgExCKU(>h|nu=U-kX|ksLqxdTPXGrAuetd8&{_h3(HG$tO~<vT zZQFh63j+SJ=8FDHdx)?l0Iobb?te;Cz?2|K)XTj_{uWNl^aEuaUm5grhPC~z4+{N_ zTc7>u91#}lVb@Uq`x4I1{oLG8BqIk*!t#cVfz>1iUO?~2Zv-Fb9P_aF7(^_XP@FcP z^q2@ZLCq}Nf<PHqB0df4c3!UqiV?B`<RPC6$e7b7Sc|77NbbMEF4BpkzOA>xRl0zp z)Pa-Gt-Pb9_hfvmIRQ!<3Noz2ah<4r^t~~@o^(#;fCj<nmhkk9)(o3_h%;SD+{-0a zLo?9fOv}&j*u42p*IyUwP79TR5$~8WN15nGXbDHv9qk2@q<HE}^NoG}Yo4}HLY_E3 zU{r)kap4Jtk1KT@4lH_RqUh0&pxv-=Z-v6hnqIy?8?cRz`*xFV@QCHF6qrsB<7o6L z%;|o|8y>%=xBGW~L<Asq{BrP_wLmIn6L4|z&m`{QAT6z8-UunqCCQ%<CSsZYINm8> zS|*O2AWPZMU_2c$%o*z1sktE&bjN#)pgX~Lk;y{8xXmOOaYd*kcyNZgN~<?RZsW)y z?p){34_f(lMtOO;?DnJiO*90}8PRj0iUl>$BB6w82$xA{-Z5!->ZaKP>I#%D&_kST zY00VBRB~zQle4=SWSh5OL3mRincKqiBtCvwz$K@p&dwoWVU5(()M8`>3(fh_E1#X@ z)O;bxBHfc>2tla*(_=q-176XZjKqSBT()N3I8!3K^jMLaF>5pdUKzqirl6QTSW&Up zl8`K#Ho@r-yp|*YhE+N-FvGaemAiK*<@{1UXl95GO4cqx9AS&Soo8t}{RIRx0+!Dd z@3QVkCfbZ+N5ixTW5cD9xgFY9ISAxp@;CS~SqJd#!~iJ~p9c1F6es47L>Vs^m@Y9< zU;5;@s_=+bW>nmd6-zJ|7gNl8AyEZ2iK{QFaHxN}OW6I1;UIJb#)l5b6QS5wY;XPS z534dUp><5CzL!G(rna`<F8w4kZdYeXDe7M!C%KkfLab~81eWP7j`SJS^3-|idfG7P zvXl!JMD{78<@B#s>e{|Rg9en6!;bhT8Z$RKfBpoh6P}$-jE1DM%^zJzsLsinDOEY9 zexvU!p_73I4=PoJe^BN$LTyQ=6waIKDux_;*F;^MU|EmBsiQFvmS<y-A3nJ^bw)2n zm}!rnA?b5AWj<82(U8-xmwNtEmg*XP9<xgaWO*BG2{ns{c2C>yD|8<Ie!__3#5P`b zkWc{%5QC#fmT?VjoCO_VbR9A(NSXj}KJ4S7kV+i(MyUZ=t<gyX&7h|7SQACByK@&V z#4u?zSAeLxFv)-RfL<_4ux@17*gPBC-H1M7V}0N&q|hKCNmI$Qu2y^);l9PLh`nCt zT4+MShz?dx2yg2<(*ls#>BLm9<PbJHqcSy}G|A^xMJnk+#EkUbP&^NG-T>bxKU>D9 zV3=sn>^rp*gvr3{D=4Em^h|B+i#yf^`<%|AaFW+0`e3?ff<ZYk@$?9xW{BEvV8K{t z<_nh`AM)!3{2+>;J$v?Cp~}es&q$|{hE2rf%SVwN2XP=Ue!tnR_G1$$b~=FN58NJS zXO9KtmXws(q=pA9&;7T%?ymQ%8UbfM*5&5s_oAebK`vB3lkM&A!6m@yhtp2_TwF%0 zP^7B@UKwvDj2nM;Slv#?z!czZlX|+MG;tcOr6o(SD*q!$tnP(?O6HNfj2H`#49Vb^ zH^#G87txsvN27JvF~HP!tg~}js>-^W-nQ^Y<XkTP#p`z`g}9U|spV4u$|44O(dm4e znOMQ`xUjr94Vf%RRx%RvL%@6)Pe6k4>0{CG9B4k;FyJ0}TOzFC+5GsNIZz@3wX%#a z$(#r}gx|V!emI4+&gc;jb8-x*4ygTY;_?t~5HcfnziZu4{}=Qe1i*gv#D>`nB$Cq* zeyr=E-76|@QCCzM{C;8~Aqop5HiCrlBp`154PHi`Tk8Me4A~q-gUErUcPvZPfdo|S zgW;Yy#`wvki-#%3Tvy!gjZPo_V!hgrd*b;G_*q<#;LUL|c41gjSZKzsIZ8>6`74)S zI85I~ED2yB=!5v5i2dlMGWQU1QH~9ABN=R#>D`kcL}-{Eq%$^Bm0%0t>KaQQsR>0t z5;+J$G49Er!znYGsOiEWq+zh-T+?7;MCWfRozSQ#lh5Cd5E2M8WTf1+F_6~WUUfEV zq2K5?e{*;Db%6Kk_p4GR3|{(tyPr@kg47Yvn+(x9`!B>f=~-s4Nza2QGsy5=FE(#P zdz9!Tb`s!x8(U2}+Kf3cnm+vUhtU6N0VHIRtk50(30c7){xhfx$ksw+ld1e3EOB-g z3J@*?g^~KqN9FI)U2saN!c24gQW6u}L8luV-f!yL3mi>r4%(LjP|BaE=;#ZK=}ET` zs)54`-|;WKN!|imK!wXjZ5BB|tNi6MwSdgQLxvm|2}fD(R$8=E{#XekR4qY(C$2m} zgO}5qly9UzMDa(O+wZ>EXzJ8`j-l$b6NlLzkxmb%i-|I6DbuvKuLy+}FQ0&{NL&R( zHbk<siOHWyw?qagxquLr(hnwY6H3Lw<I0sQuD_l~p`BZ_s0b2TOy(#Yrf`Q5um~iC z)2b~{xP%2x0=q#sZ{92gN8s?KU6BS;C1#AVSLxCPLdB`@nm37GaC=5<{_Eu<sofUH z%paVK=sD>kSol4LZ54t;{3y}4RKoG@v~)ajGPGYQ%%<_giMW9tM&yQ@$s`mkz&&*k zBpi*<e<T7t<q#^5U;n~m6G}b;CSYU>G{3Xq1X{}Yt4W*tJ9niFVwKWB6vZDt49u8u znJX>{u3&85qem0n+|H;cH7uOFEw6>X;!#XxH^Zor6u&?F;E~QO(vE`%I|<2hqT>qc z<x7a>%?^*)3r)R?V-6>;I<v+oL@g0XfdQ-r#Fq^l#Y6vvT&1BN^hxD6K36yr7MeMQ z!4>*`2Tr}G`y?~?s5dpnjIr~w>$(>p20T;ml*E#)EmI=fHTS+2_ptTy<}F)l5KUoN zp^GL^BqF*I)iqP>f#}@YFg7PxoUej_g7JU`xv}oX(qnY-SzN?yg&<W#*2w<lG}77N z6|%w98{Uq`AN2AO{1r?W5(=Z}Hz^E<qAxPOY4b2I577w*7W$<(Iat8eMk4X$5H3tQ zO7#J95swg#Hk!%&nCJE!D;Xt_s7yUG`_k&x#63oDuk%tw)eptYScuL2!Sx5SIt^-- zjK0v>c`k9{63ZEA!pwDc{xLB11$U2cX$;5^^HoVZAiLkv*GHTq<m(OqC7GIm&NNBB zUw~^eXr49|(z4DX`%}Ny4;}~2o9w8hF(<?02&IzjtiRvmtn-2d;|C2mh89=s|Ky?I zAy(v6FPxrE>p4GLdFb?A3knvB6lF1YcO1vhe#4jc6fx;A&@gO<K3%p42M15DZ}vyt zi!6<j&9~}9tu@dWQYr1uol~<mlr($h3-H?f@jCPk7UY<}-l4h|QMCvsY1rqqs-Vsn zS-1?gqh^9SSbM63W#P+dAumM4D(uu3lEtu5g^hj_?mC$k7d5jEYBeF${hrO*OBF;# zz_{z$xAi~RTCH0*iZ}&jHSw{tG4=p2Ae$XrU45v}fZbC6;65v4CSoj10vvc@T=h0^ zJB*f(C&{872_Yg8>GY<5J8U~4{np<!F%SX35QLpSAIM+E+EsJTzThj!F0?><`55w4 z7`29%w`uCLVpj}fq`5zJ4AZxLegC-Sctx)|@r~g+F}aS%OU&hSlnvk@B+v7})BIwl z2`-D4fa^t6Nm!Qzjj)nl@LZHmbf;CAS<TQ%G(o^A1Px>?$`|%;O{?5+6tNB?7~ie( zQ^{v&7I>x2iQFQ?7O_EAmigwmqB@;1%+u^bvLXAy=v%5sHn01Zq{oSnWq}wt3`U?Q z+`I7-cr8&`%d$g66M=f3mrI`(+@K$i#3iKZpabj}<9JX?+z?~{happ_#LL=<zxJK4 zt;^>wipmmH%_S6`Q<P9JY_i^oVCKj<t}4e)d=3jM716@@zB&vNfI#}!tS8IdEGzP> zNM1as_ztRwe{zi!y?X87k8sYE=)>&CM?z-q87B)0c8yVTWdyCGIQl{TE!@-Fn@73z zA}Rz|KXk!bwEnh9rhf>7D4zkQ6cc|KCxMViiN!JjgtYU>GT(_1WpHC00j7zND&Z(V z*SL@2ucp3U+<$T028fFZJ}ks%cvXUm_(`Dx;sZAT3}8@32Ty&(2qj(`LW%3YZV9c< zAW#^qPRRhifDX40&qoW<#G91s$n{1s`Zo=GJd=f12WFFO<~cf6O}zVyXFK$nZ&J*u zQ!NgfecgFvFln!=uC6Wxb}=p|^cztG#N@5z>w4mWPX+HrokUHZWMgrN8%hDQ0MjKA zE&$L$!=gaH$_SuuM1<41mK)s{4|;}27%YH@vT}{_C)y74Qm0eZHz0GnukRZSCyE)O z5kc4--kzWP=powLB{Y9}B6AiCdeMI7_zWWyNDo@LQ<?0>&(PK{Smna(y9}3zEff}2 zs>sEu*`S3zl(DFyWBR9>-on+Cs3YUba;%`L0rT-auV9yzv9VqQ9$)+X<*8%gT<Lkq z^gGR;Vanq!*VV2QpoTi_D$fGClq-N3?E7Tfo!}OhJ}S|VPUsVJ{CIuf3d8x|M=B;K zzF%`gQ2SCYA`H$NB=n+1;;fHB2<$)9`7MUocwcqfP}Q13Q!tosp7~;UupN_3Rr(LX z>oxIm@qeSE_B10UL-RR>f>Q2?JF?6?!0A_)S$JNfYvh+~u^B*xJ{S=5U~R{}u!9h{ z&^>K0DtjAELN?7mP*hBXqkQ+L>9UMr7KSH82I9%4HdKvV<=voeG5p|xu>7Hen!1M? z4-u6Hp+|^yFcho|76J<ZK;mTq?v~awDhgT{WHB7pcE`lLTY5Pz1*Ax$$nR1B-LH-u z@iFTdFr!^6Zg<e2<lV3@zZo}?J&S=7Bj6OC)$ulMz3VEx*1mr_5(P&Z=v@*Z9hJg+ zp0!$t=lMNjo~#^Ew))X!#A2eog6x+u4VHXD7qDmR%GUC}VHkJ(cpV_xC8z>{Fu-o( zgsxo>EMjObvo)TzZ#>mgTmw)%;F&}26iXW5qIfEvI7^-v7ZKQZ5bptGW4bF-_gVA+ zoSJWR<}Qlb2wL+Dbg2kBP$}O57r_*v9Nj`H6KY@kezh_X9yuq<7m(LWS~BfAbPx|s zIaEya%brW7tGd(EgUI4`)>gc<B+;-0;0n$_ezEr`9MDWDA_s}dmzib8V#@E1Q9!?X zce1s0I=_Z&XY029V?Bm&{ZDj!1!E^;_#6v~p^PDE%zU>siTRMD9zUIB^=s|Nt$GW; z++=g^PU*slZ5P1lIQxK-Z2q9Cx{1iV_zvlZLE_4318Dd?xD5J+f2OcK4S8VR#H6s$ z78ha^4d`u28(XG#(}epJi3X(_>Bz69TERk_nN?HM=0ZpOQ7cG%M}4i&f8=1{s<4sg zMYXsCOFX3pUloYWh|(^s{nD2ofnk4u486^kr6pHr%>LJ?2K-PNr2Z^)rKN?VyDsAu z47AW9N&J~a181wS7Z6UOaFr3=kV<~6h-YYLisLi2YVO)Bo|05o2=STE<cJ$p4D04i z)g&7`8MGH~Lp~7gPVtanz~<k5`=*|2*$;kRH0UzSC6m*@K*2vmZJEr0ywb}V_5>U) z%cRN8GJZ(1UE}EaZ6JxY5J6YY`mc?eG;v8Ov4FF={G&vflsXZ2Iqo@k#rPc;g2~3Q z#>P!qME)DrCtnNAhoYpxDk@76MiALwb3I^T*%&i{UL;^#zI5@)9|s7_vXGXuMxiU* z48*vwztRh$35o3p`bbZ!;i0r6MTJ<Q`}l7^^Z!5SY~1Uv!Zpw6b$0sD1=Y={x`pQ< zvR?jK-cP0i_K%!II<fPtS%JdlJBe}O;>G(<eNBVR7&jnbDwEFWMW(yVoG}CT-UwX= zeDVLIvV4hDlGQ;J=qgM)jBs{wksY%lixwel!sI&jveLu{_w%M6qAyM6xXO!iPin1> z&>F2WUXc61sR@Ws#3T~PFU1ln2YTF<?5bh%Cqs6#WZKtWqnc2^aIYd3xXq`K!v?NJ z*EAlI5281_VLh4Og{Oe2lL`d=GJEIi(w}eGVzpw)l5TYawNs4Gb$r{ualiO}=JhTf zzu9?P??>yZ77jHxH=DO}PQ6)+<0nj*+^*f#&6aK3w!c`S6xuswdsU6ct$!_^R~|mR zZ~V9V%c^5D<DR$OpJn6bGxDY{ltOj-=<O6)y!DgQV}kB__QIf8x7&nXI02n})NVo{ zJ@o5HKQT|T`fA9d6Ly57<F#dr|F4?MoO8NHlsRF*Nud|17G&~9rp2H-Ac;=xX=I8x zTEz5p@mWK3gPqyqIj7iRyru?SkA)3;M?Qzy4_UEt<pKobGUr9vZ+qZP8x)uzd+8(U z=-7O5Qk`HaTe)Nimwp~Kh-K1SbTvcZqp9ccF}J-?cd(tOnZ3Q(SrfwqZv%jf#oUe_ z7ti~@$v>InmPmy@M{V?I+dQ{;>)nQ-A;c+pFCa*4>~GL`5cx0CB_Ut|Ih@pkWKJ1T z9X9MstJDaIaPaet+Lm9+rLb?!HcIfW!2wHmgG&l%9=uk^;E5@>6DTTsDqpOx+<o^+ z_c}YEIU_b$rEC&DnpA(%zov(no}z_3x=K0wb&N0FPOMmck%XaN%egj9{DGqGFG>=% zJSOLq|2OF6TJ^KRf}}H!WJE*eA|g$eWmUW)dsMwGXp5>%yxER)9r6ssO{$Znd}zv5 zkBpme5cs3YEQoAoBFBjshnxzNXNYWyADoLv6W|LIw&NxT`VJggKA}3C+JI><F?|Kw ziPHnup1~c5xpVayF)Vu&uSU^{Be(+V?Cau`-KjNXeFe0;PTkYn85vi33nH9{BenWw z?4?-FIzco)Em_RVHJaAP-vT0$qa;3%(xyZ|QLbAVhnpE>hP0Jsdn(>aop(1Tmp$L` z&6e}QINy}{i)YTHx$%a^vA7{f0fXQMFethp0^kWoICKW)i01%LN(Lh_gUE}rS`pOb zBaB)$i@Kt$<0kR@B0to*S3R2Fh{mLxcD|djjfRxFRtfk89IZ10PUNs?*J`=<d*`Ib zZ&U(-Xxq1Kdr1l;=K^NOQ!<Ip6FmwGtxg+wo=wrTiTS#wNqFU(du>~{z6v~8T~#Vt z_MuCkA0`=#B>?ta1ZREA{coPNWEYzFtH2j-o|JzuD98jxn1sjfRYRSM9m`{i4tO+Y zLFnYQ|4M}|v?l$ODYIvvvboF@1oW<vWjm2EtX-SDs9@l=M~{?1>^u_p+M1mFd>pG} z6Aq=9d(iKVz@OHE>k*q{y2riU9A)eOUo1k~G^E2MVTRXyecOrQcAXb{Ht_#Zb|6R2 zEQ#yg5wQlK=L8wfENJL<n1t2{s38M+2R#{=!bW<C<1Ixzd)BZe7u;9K*@8RDG=H0F z9C{yH;;n#Vp357eL6?!sy+G92Sj~!P1QiPxUTou0sGVjIr}oD^Pg#*h&F~j!CHsf| zGDa}Dp}f(P9&`G6O%BEv0WTdHY?D9|HJ=1}5STYT&d%0VCp&;8Ev5I>;8f_ZcN5=I z)SW0a#T|<KPV4wyaOZkeeQ)D=&K;t98k5T8#Ud*@(PGU@FmDWNYZVqfjk%^yNSZ+t z>YAEn2ksj2bll%Q+6%B2HT#h_HT@=7iYE<HRiXMsdY|-W0Lh9xC(sqX4E<W9Uq5#X z%XW}MVuZ_yb)Zm#uA$?PrFzG2A6~q{?UsS5e`U)y0xNcCc-K8{RJ9_!cQXzUNTvyX znp8oOj=9VyXiVsOR0qm)6w8LHvNY+3FdU42cP{6MI3aFFN8+^l_kZ`p&I>B#Zl%}i z)?#v``aQ;Na;irS^rS#*wp`dGy`}$%Q1lTq?I2hOB+9RA!-oG^n}C2$<dIajI+;8( zabN?yxG~sZ<(ek}%K*n;+4s%M6|Y<Lk5NlLvsALB6pb-4GE?S0b8QALkPPiQVSPzv z!DlZb_ss`#4xK4UsAv@Sv|e`nY2Os@BfNbwBL$UgxE1V6{~9ICLY#<r(BffAIL3nI zN8O4BZ9I>#jSA-rGMqTtaTaK(v>-|&H}A%qU}RUUN#&d2t#j9O+|S!9Dla$T{_%Ow zt#@tusk3xqiDFl%%YkRn3BzIUGf;#G4+^b8jURpI>v+?Pd&GHK1y@~mjquUr<8r`` zb6nadSIps@LaOoUmIFFv6$yVQw~Mnk`a_%JXZd@jf5;*%VH>PEElp%tS2SU;a%&jn zx&5l*Zw9J(zN^=+m2IVY1MU%dx#`^m!P0OCghsvEkzo0=#ZOK+)vx^CvQx2t|CUe( z;87W6;4VP|p~SXSO`mhwEbPNn-)?&1ye3x<G{!0^_OPKiseF~uRuCx(*8REhJH7&e zxO62bbTsNbj?dm_+ep>x<+(%3GFD34Mmp&<lx!lrN2EF}UVMjIc-xL0MWX5iEcdmF zI_X!l>cC2yWRIHUyH2xlLUN$x3FXQ4o$}lLTEPl^6gr7rknPl0(_-eZ`8tpQ^7&)o zILb1OMy5J`hY#;M-aE=&&xAx3orgxP*CDUtv-_oZFJUVg`eNkM((`5ft}Vt4$OVEs zYW1I);Du6LR<DV781A+}G#wQcJIg*hHiv|$(%1?AFZaWEBEZ@D=EXOD0?=HUMJQ3X zPo70&<4r>5DZX+u-IhO|ODfA`WX4rPW5R*f%MSFlnnztMMy5jE0_;v+{$P#Y9YFa9 zB()%T9(6dmR7mmGYKGZNE;k$X7$*tHwk&>AmK1B?UP9DhMIdM6{KbpVdUoLfF3Q6e zjgPZSdBm1<xO|2|t=}A^6DAETI*Xs*7HH))+u{+&tT~b!W(UmaQBo35)5vF1h|DU^ zm2g}O?;rPecZ$4X60BeGAaWc5s1pP0+<&@k%P}HDS~HT?Td-&CNT_Az{V-IWKu8)) z;pueUGqh?$6t6)ja&*tzfK&1fYpZ$_SY+~ttQIxo=O-{A@tsxlnaf}F)>rs3o}DBf z>jF!`QuHWb^Y)V(q8|TDU;~nLctw#42nv6C?%7br4j(@bBH$eHP3))A%9^RNDO3C= zoe?i=)tBd5R%2SfjCDjZ&%i6N%DjwhgiQ-40GF^^_DN6karl#+E=UNhZi+ojNbhF! z4iYST+w}o9Q21l2l*VxuZ$!~(^Asqn_CRmZGM2eI^itT^h!%;X#}J9t{9UFKPQbX+ zi-W{ro&6q2_T{MRfVqIWn7+YkdNoyT**(P5$#~<h7}pe*BYD+_yHHew$5V?g;3Iei z!#xOQS$K2A-ba&7$UszGy!Wo%xZ%y{3&Osu@N^RqAV|lLDkK{0%m)DaBtS4oASaEW zn`!}s5dj%ISPs2UqTlW6RU2XLgxCE;-%go4`B>#0E?qWOXP8@`sNC>DZ=S2`T}B#Z zhdVt7U~H6Mbnj*~tz;o6!@>jXE}b-q?Y%B_;PGzsUqr-3fCUy5mz8A@TxAnB`qFej zoDh^kh;d!kl+?A7>}8jt!%<N~?*cP5=GR*-t7h&=HvL&>bmh*SU9<}J|9Epjv2J&} z{!LY{*D=^I2hNwVhtIgfed2=WCA4hOLfG6$d^sV8Uc*XE@BixqOp*+|GlP%N&^;&& z4OU7@O=X&fWETb7OzaJKg|J`Drk%Xqa>VzT%p9^cMJ&c1aZgvhSZ@UeC$0^K^8uW{ zSrgW13b!?9jlW{@@!riCFMbd+D?o%1h&#B#X-Hy~^gMK}qNb^$)n)=kP&21GU3d}( zGqE)~&J6UaR4;2b2X`g;VW1&mmfLgxogV!f21eZLS$$NhYoTB{24SlVGlG-2zY&Xq zpFm*<R2u$#^}kd|iYh8GXEG0CwF^w4dXUx^_e5GCL~5B*fw?<4%%uZSDt1q(1*?xq zVq(WfCKy6D5^az;nLvEWcmlA0YSN40p8oJgxa*6&AH-d%dygSDFf-5a{PNd3?pD@L zq%xAu86+_sCxax@yY%~|@Z?EbH4h*EgNp;wWoex<vI?Q3xZgM}90%1(-o=MW0b_Y7 zL&Sm_u^YhsK>hH#E3ib2+2whpQuYgVJSE14Ee<C`Ou`ih8tlMgwrCYri_%E|JUMdE zqn^Fr^uqALk6*upF9w|9I>xJyo6-($q6r%#-0cz@rat>RrQHPib_0bFHy#&k55OBc zA^U?XW_BJlXY2(X&65*Nb{5h_X9_TXjUCJ;r8dc>Z#%+4U+dUiAS!8T$j(BjDLRvi zJQIe&uaRcUC<;Nb^Jxf4TX$=#Zrq~D?=Ln_y^BI!$Uou;kK^L005z}4mIw&{ET%Qg zo41?1E!a%(^XPTjP-PyGo}MVu1!}OH8L%TJA2j<Vv=gQ^G&NgLobfBoR!vu7ez_8w zx)LknqWACbLJ~@KAf5x@NA6#)jP{Ode237;AgnCy;3v7)wqS4WLN+<mQlnA2zo2Uh zy%#bu+eB#HqUyHPu(oW+RCVd&q<(y4%cRPn-oc1pXj{mBE~pq724`$Luyqhha6Oq1 zi=YN*lw|)GbmobTkzKGCsYi|gXl|t>3HY+y>w8?^=WPQO4KDo!umH{*ktk(~j5c)W zq5|R|5GI$Uq?B(`Q(9%#ikUDk75)0m1DbtU#0WO*OeaIcq8vL+Ape$ty_~}>EFy{W zCT@)fRu;xZ=UiJiY=^(eMV-iDJ0@*QIL79$vuDFWRnpQXD&ZNE&gB&4334=^me#!M zp&OTH{Z9*^fa~*SjOb+6g>CcXmXX=LojiWL?uaO3EGVA(v2Vp|1=VSe827<4%1R+% za#VYl-a9tKIYaurqBf8jf94}P)~;*bteJQc3u!JbZVC)C(97cDam)k>ibbIX#-4U7 zv%WANEKrvn5lG}^6*PE<hb8LO^{~RSwj(Jv!PC0z))1}?HMpUN$K|_P{1gkeKH;-A zbw%g2)a5HzhQl>TnMdY{nqIYpnMB~PWjk+t81kBNS)Jz1+sq^${Xa1Uq8%?A%lYNe z0XR@F05gSqkpPC`YW`yPPNJZI&%z)9_0x=pnXQXb{f-k;zjq`T%_lU2#p2<$tY+aW zGkrH80_bJ-&p)U84xH<0O-s@0L*o9!hc#QBmv@;RDJ?h3dQo=o+qZAg1t~U&FxVf< z5@YLI|L*(T1Ga&LVRbVNr4>!ho=5zzyNt7Jhn~Zk#bkhG?#g~BSc!tj=P0Oz1VEw# z4<VF|n3-V=qpGDf_4&8kn*hK2&=?*%G|T(#h#p?w9d;al$p8aC=h4Mg139u$^Ocp9 z6zP+qq!N*;d_QNz^T&riD)l;IoI(f!COKyK$zHBOs2PL>0Vr`{qWd~*&NQF}s#pE7 z0R+5Mp|I2QK(@pRQ60+rr=fV`%9UfM0)9roChR2dEQd?!s^@X4QkT#r3uQ5lyhFWu z`|S@dsTZU%hlnuRqhCMM1GB+;+)c=5Dn40DZMFPH^bNj@s9IQ2k;#0eIRy(eS_s2c zPqE_Q?d78Vr}-vYB~hWE7|2;>)d-*<;ztsk&dRsFf0-5?nEa`6Wi!?5&8M{U#%T5> z@*mD8`UDw2jhatk87!kG2&lz73VYdU8MV<|)4z^(Y*V&eD;HO--G<{JsNud}*EZfG z2+Yo$BO_zIpxD9CZh5Yuyvle=6}Sa#^L*TA=ERf6WM!&lXk#f0vnUHSdi81oe*z(9 zXNsl3v^cvX6iw_Rg`d#jgvw}yJOIi@v>&hujE?Vxt&+v=P$|Mpw#z!H$;={vij~hs zT+i1V$8F1>OdeOF2xn7ZNp{G%h7B8@{5q3HP=<KS>ec<Q!2D02(H1%>M)q~7-5jK; zi;b}m(FAfFefrWVOLWP9|D*IctFoq*zUYV43TkmLZ&t=ekyrzTrQ63loI+dF`m5VB zCZ70iS#=7nGy%H7J;++8^;{@0>24A|`B5iw@95>QnLuy@r%K!~U}~bON1=ln;_+L~ zB*~Q5`gx36?VkAf!3ZrPsPSbrt#D*SW;Ux`=Y^AZ|0eYeWnCS#MsCWwRYBTIY+Tc) zTrP+A6sJ$J0wihziRpUqlx4x$q}WE7?8s~*r)|dN^%wd+^D>z^YnCW>L~998KJ8sq zmG%A(ZFo5qmuwTEjd)#PO@WTNngXsaT?XKaA30Aw0<a$Sn!i4P3O75^c`7~hkGH$_ zywn%sdo_#@8h!H4kp-CQ?}rxVPOq@*t}%X1MDJ#da*4q@A0vU&hNki^at@3@d!Q6S zRX`VW8#6Nm5E0X2zg4qz#S=wOTV!nls{!Ey&ZNy$9bZ7ca9~D?;#4H8eDrBqtFSPj z70mNKjbMqmQF}UbHy8{wM-Ep6xDYyow84Y#7;R}0gHU~-6O#SReHUMy!UzQI3K`(z z1q;p=mvrbW;FQS!_{o=YJ}41c&?p;*7IIRf-nPmIFcJ~P&IFdtZo$1CASF)U99P## zlPB+q(%UD-;Q%F&E9F>>P3-EVPRh!;$MhS}%P*jelfn_GOkQzgOiy;s%F;Kc4(U6~ zY%Ezj!EU9um<tj>%)k-c0-Kowjkf7cz)MT@dbd*8R#^>88ALH)ly_(XVT76uJSoK_ z`Eb>Rb@7^`SF?d0xH>VSzxS6fU$Cz6WOav7Gez^!qDr?D^vVN?dwkw2XMiaxN!H#6 z{I1u3>GbPwGo^Ulk>88mwP`K2|9Z@9TWTf|3P7KIewl-;6oI|I4l@ED+;hNy_iN7W zf-}gW?x5B#Bf4>}nSM)tnxbYcBbsP%#g>zEd3)_hgKa~mu)1BW!KuFJjbkEepZ6vZ zUil23dEz7o?vSQ123r#><)Ee3{_My7mlP^xE4LYQ3Fn8WI!Q}5Gjk`P`O=i)d$m3& zbE!|6Wn=Bd-|Rq#;UNw%)DZT6?Y)OvmFL#&jlC;i$JkI5AqF*SlvoigU<0vX!-56u zN<^c<h7`pPwunlRCU%l&Kok_CCMqasjJ;voB4R<MoZnbvpYQw+-_G@3*?Ci7t>?M# zImaAx%rR4o4k8}v!T0(3`$g+1gkB_B9|XyhJw=23%gA3nG$EzKr?68j0i-~rSm&U2 z!Q*p})k~%mnFw4?F`Ab(ast-yD{0PMUf^&Jqb_^$&vd8(nSXL$l(Y%Dh6POwkMajq zcm;|sl=SFZ%bj?WUzP!8WvrlZtlZppPq=RS(8Kw7hi)#Fn-^c@!3x>{lHmQ>>>A_t z0~tY-HW5lyAfY%mv}hU=xf!r}yf=F~aQy4Gml(rrsD3qv>}SZwxHQ8SSQn}xwVjw< z=kt3o1LNyi{oJLwMW4MzrZddYp@U0MsH>dGx#XuINa=c<8hng0ay5to#6*#2-?_S9 zL2aNplejH`RnQP3w!}rvpZ_-BE}Gb-WK8Ca(Sq2X+eh?)0^^ACK_!4d6f-p2$<%J^ zKFS)dYb~A(j*YI%mcnqfrwcNPf|rP*N}mOr;z9Wy-Ilzo3{Yg_nYQ+*bS3Pi)_qZE z%?l=0bCo6kVBis$tHXy+GoO3mncKIM?0%}ngKqHM?62_4Z_eUM4%y3Yw6WD#;Pvu3 zJJ9a@=GfrX8jgc;<??GqR@U7{`T6+`DGBM;H|yBZH8F2t_(R;z(dy!(dMBsCK%9>r z;_8IIjMi?WI-9p(K?E7hw)>*E04zP$6X0ko$?opS>#@!OJ<V?vaszu#&y1`hoX<yr z8ho*|`mNmL_t|5hC;WM$+V!$HzI~^5?M`QBe^?xCF^=7sjC`_Gu=(UNDunVf$@>}~ zW#WLtJrc?cx|83uks<-1IP)w+Ek1g03k~fHltC?*y?6w#0k+@u;MmcfKl&AH5q}S$ zM$9Wf%~4g;5<Rd2G~=e+UJWG@Mpc{t%?c{2o2RsYp1i*EY4|*RN=Su$`TjBd1maU= z=XA5qGyecbYv>q$beQ*$IzRnWjd0wKP$iExK>K_=%XvI<<)9Jh!9yhfAH&drm_b1r zd-%$jsE9X^+H#9U9jhb6*tg~bDJs@b#xdzr_rs6OYxn1@P+C0YF2qf-3bNy)Xe*T# zV*z|Yv9X(r4zX_OPhK&lZ&kv;m$V~+HoFk)qDP8wiE^Z907%9;9*p^|jsv660oqB! zQb9=rX$eUh2)jxbs2$Fnd_pYbH1L!|IRw+S?S1B@WR%xrA3T)yLBGRlgudUry5L%* zHftBwuhq1NOx(IHe!E)K*Zj2+*GcO<!&-zOj1nM1<J~^^=D&MBOjr!^jsSP<`G3|k z^dN~E7y@g=DBzmyC6!KRUpjDV841KQu?j0F$Qg0oY0@cZr!)ZpDeR;<a}GJaetCcq zJvsqw&HI|cN<PH0g*zAV@C8el$-ofA(XYF`sa*{UY6^c~+;3F!rJTS@YzL6pvaX`W ztXs!*Pl;JfRQHc^44KmL(H{A%{4*y-*+yGP7<%<cZrR+v>s*R>&I|qV7O)Q-rT9~8 zcs`U{r=hGgZH}muikZTrz-{R%tO4`kf4JS}xdta_W&(ELI7P`kdi?mETX25T!sn(C z9uY{=<O`m7s5>)O=xDH7NN1J6Y3|FV$V-nXXj#vtc?;C*2F77Fr(UiuylBQxVmpTo zP8$Eyy%l)vt><5ns0vU4S)i3(s(eu&d)_!048vd8v#>r{Hym+8Hy{lPn|Rx<eFN$b z&)f4t@QNxam>a*P)Z4+*(sF3qf3TB7o}GVfNKd)OWz8O1*buIVS`eq?nEXcdDAZ-* zljTWD&YWRb);iv1NLaUt#8mEMLl}Xqs-ZLo!~~;F=NsbH6U}QJ9G`{r(UzQXeY|(S zFUXs01W=#SXLvyUNK2V?2~h)IWTsb}au}(Brp4G7(T1LbR9);}uK_Nltm{K|Ajij@ zx|BlncD#9PS}lSmR8pq!&-l&8;Xi9Jj)D?W|A|m*usCt2Dl#j?lNrQKm4ZyYDyWsZ zr`%aY96;1O%7$OkhoCA#GS$S;GulOZ>{!0n@WbVY(w!Hwg7V~_$31ZyJvuL=UsLCl zpO!&2Ffiz|<JC2&oIMD<`Pwz0<D+hw!7Hi|<U9bZ2Y<-%8(es*+%@9b&C<m-Qt6?| z*Qzb5^slJ&Q)$eMVgdx+(#FB@B@skJBA6C4Q;YQm^Icprz^>4u?w1RLDQC)3f6=A^ z!D~|s4JSy*8a4JbokYzO5?{Y83S5-AeBg{vCy5M~FV_TvynP&4N=WB@rZKGwl~^F# z15kOK+XsG~?4LP{A_82lhHuU^_hH6Sh&b${UgEi8yMS#@^gd_I7(jzYPHlkr`)GwE z(}gQ)(qri#6i5mX;K*i(Bxxcn0Bpicw(@UO@`yXN^z8+u8_lNRX`pWvFyAgBqa8M; z6tI0kQ@9S;ytEkZLxm#}0){+;(m_rrsCh~X&i6z@I+4;>TaG<4pG0?KBuk4E$gu$w z;lq!iO8JAD8%C*&6lio2M;49dcid+}f}%=O<SB)3*LwavCn>KY-17qhO5FPB+J~Yu z%kBpsQhEQu4k0JvnOX{j(50jh&An>P4>v_zI9BlkX3u`@^=aLqEKh3o=D>NvZ`_jR zLjtxL=)Q+TVq9ZQp)@2vAeL?1vL(Xp2T+!lU6G8YQg_8&*;vv7kbeKZQLp*)k6zA4 zRDN}O$0u=f4Lem1{X$7XOFM`uFBp^&|4IJ=Oo3Pn1&pz=akC0-t*riYe9FX$`|?+P z${g&(Yzi^_MMpY4yTOH=bcq_co?5TQLZ9;lD`82LF~ICc*tsC(BXxSfixeXMR#w>c zab_ZxGVNH4_EXXOk(50CXtqY%45;jU*)`V1j|?EE2Etb_;=*W~SUb#Aa?rvJ+-+MI zZ8C75jo_WAf6bvP`L~DB0lHCa?8XbgSO>AUc*GVh`XtVDaHh5Qh!vomuGTX7B5=ot zPKcvAWg>Gv1qSm?2i@{EvKW}DGyQf>>6Y!=q5F-aDhxzBAiMW}9kTNv<TFk!`%xWJ zM%xBazN*p9=q5UjM~NpR<sGkoz%imzal|vCg`dxk$mtXn#pU@Z^X8p_E8%^qrIgjg z2kTHg&Lj9fK%BRTCx?aH?wN+qZ{ns|C~2X`2Sgjl{G^V=cSQ3m_}sC#JlgPA<cqgV z1Z9Fio*#`2CyPMj4{zhP@}6zm0U4W(Us!d&8ABmQg(}Yu_02&qU~UbrbfHxOx;Tef zL@E1rnv9}RwZn(sBzC!PiA^8X4-Kh0G|<tukA85T%Bt9wpa3r}{Q_wMnR?PMeqlDd zXe&{#^0lNlqFB@MCw*&(h9lKs)-8@mOx~^f)<xrC_=KJq{m2Te{ASF9%b+3Yq3DIU zgDK+H$6Aj|W1JrYzQ<^jo>C^nd3?vBV`Q%~Vj6z_S`}wU=Q?<^2q5x1rxJHjnQL4N z1*b-SxRK#xWC<tX0D+i;LBoE_PF-QW0~&KF>`{<YwSM#Cz=t6%=Y#_mTcae=0vUd; z7yyXQ;cb8Cy)e0u&*#7&dQFEN%}a8({@~^kKYai?AX=VMiG;NVYz71kA`5ZKHtyIV zCnv-QagRfP7>#56Bu+-A#{ds-B}bp8<-z>$D8P%lE~sJQ6)z5bK0O~E<Zbbn+@2}B zlPT^faeWF4+RMIxXT6^{rGi`FkeUwjJL|_~{3+!*)0(qXFN6|b&8{V*iFFsLL1jCG zIO7OE45J&jY^Nnr6gSxK5>DOGDM-x43BsfPEG%^uwpP%CqeAN6{&@<O+S%W8Ppzf> zOPm|(ZC<wULw-9dG=7miM423k2*7a%_faCVK3W2QnjqnxzeX*(yVzfh0~MieHaeh! zMPvuMT*8e!Uy_#tZ9G^h@ze++zGa0MT81}yc}l26;{?09?VjZ19HYBKp=1x|p^g(^ z!6W(W=Ee0EKQyrmNZAW0(fj4+2>1@4P?<wIK=dXkoCF85Pr*{MmvbF;#>V%b;^noL zSdDu+^23)M4Uw<z1a2t~_-Dc0grNA)A4^>_iAA-k4L3EKYjueV&c<d)$Y3YnA#6}T z_yy<naNkfuEcj|pq01$h3p**%IxR>VX_G<G8sh=G@x0EGtVBif-zOM1u7H>W{5l!1 z0jqi#V8A~fnGJH?x`41FKRkIVk^N(BL*v8Ap+sS+d#JDf;K#!w=rFv(a}9E~-NI)> z3FeO*KS<G9T2P?aLM4*8oPW^&awC-X`EHm%oQV69Mf(B#qxD=G>Ld*hzjScqp(fBv zk7;qt{O6ZJwub`e_b#QKp$#ZoME66^9`?zbM1x<t4tm6N-!U*t11JlU0tgPxEHjMK zly9yPrH-?1ZG{tKqIo!9?ctm)2J*a`5DRY->YAcLur})`BXirk%rh5rI_~#h#@2Za z28_=xqHwN`(Pe2f<gAnCbzr<;kt2Y{aZ~EyY)xH<@~TSZ%BOKQ4jG%5f>8dCOPA6Z zR?nH-S)#1Z?_#aS?Otu{y8!}GG6t#-4Z84cC1GT?r61T*@q(C?28Tk&PHhOh&~Riq zG^NZIZWv_@5kMG8QJv!T$=tD(^CobPq%%|j&OkpL^rpejd^a1q>w!F0(a?}tdhfI= zH7y26ksgIvkjME2L$Hl|z$kJBb!X!i*{-~IvT*{jl8czn{sXOS8}8c*(cNX}IiG?z z&5<s-Ciuj>o1aKgNVDc4@RJ5sKu;&<I^250BqFBcs@=(l7EYm8=`hg%l%+JH58ZX9 zoJSs9E<_4HqLPO{M*T9gAz@ngYJ7m9_dMY`yp=xr;{5$_3vR!E_fBSG9Puf9b-1?y zA-79J)l)~&Y75Wb<c)3sG9SW`hkvaUw_Bb1zp7a?l33i7Vurmn&52}cC-MB!KKq8E zM&PV@yf3@OAD@1Kl$TS%#V(*e<BR^tI$=_$P@<~Y2zO<SaRRA!@!Q8$7;|gGYm0yn z(?kFvj2wPv<iq=?_-g+;KqE5w16EaOg#y4MxnuLQ)~SS`Aw51x>vDu?SERY%!Y6l8 z<v6l78Pxz3<y>B~NIR(An`AHu8HnO-?>kHw0FsI3H&Q!>{#_zzY3(|7w6PR;HJJuV zTv%Obus7+A=4g>1)u-!)3Ngdu>p_|!dGD2#Z_>QD=7I(Jup!#y#u~r-6hcved68_? zh&^rGZ}A%mTvtDhzOnXS*C{^I-YicUxIoivDzeDCSbCGzI!^oUJC=EaO_UF^jxrXs z9a|*Y9lBYPyc{iQO#hMK;M&%0^I#|Sp?n$|B!cWFBTQmqow;~CLrc)gEy&$`hGDTT z7Q3efmBh1~fZoBvu;FgUBm0ILKYU`HystZnUGAk^4sBE<fiNC*3_~_OFS1pGcJ4-? zAknk@(xc-)muw0P)8K@FC`E$y_JFbn)bD~ca|8tsD*u&ixzh?a#AFAyxxOYKs{bGv zvQ}_Vw{i_978d03)Q@5+B*8CE7^7|8hrq_Ci~DTfUOT=JmQsW{I4cHHJ|lPdmO%gp zKH}WIOXq}rix7Zp3)|_Oa21TM(Xn9^R|2enqv03oK6Id}#V)cMNh%%i9T*fei60DV z3D7b#-V>Df8OBA!>bI*~r_R>*NB8{xQ;{t?q(Yo~PqUAd;H}NYIMUzlll1wq?-96- z8nh`Vq5Rh8`)s$@vMQ%cDoCnp41g$Io3gA;dQ*_ZZr@stbCRcec!UhNG(imp*ROk) z6n;zAh*Edq@iGLP^0q>F%oz0JdSe@6#}j?{@X*A;PP}$8R>jGFKIa-XXrOYER^t$k zH7*ZQMB}ai{yL*}iLJL40Rdg!TAbJSAZnu@H+KKz$K)lRk70W>S~Y4Y*}8m-`!lW; zmu8N$3mCaA+>%OE9{!M8=_@N#yXbLb>S%!CV;V}5ccHG>!Uzt!fYX3XDeP3)5IeTk zTx8>n%chQkW+FIp)?3#11lgm=(tH3gN=qTB_gp;w+!}7F0Xd+Tmbv}(`FZQz(?a7= z&_H!byUC$HWje04pJkL~Rn7q<=Vr{~#CD)TEnt`<mW)Pef2G=Xx$tvW31(AwjN9)E z<*OOp)62`y>M)|@=RgPl`s=TCz7DL~r?@qu;d?`G{glY_R(?fw7#BJV;Sod<2bkI` zW?(fR$M4(5I`?<IHAC_{bi%u*8delfvQ92KU|BWTtP{6t{P?>iH#{yd)||8BVTl$0 zEt)F_XV*4v7=J|U-P<dK7Sa;OdxPKxF7qI@jECHgmNp0!sK$we>AdE!4dpoWO*sh1 z;vy~|J9g}E_Rb)U=R$Otezln>IA|Ew0*##27zo-AP)g@TD{myL=OSIZangDTT^wx; z;UdxL7ALP|4~#+ahPq~YulT=O08m{dPx9^G@#Un#LG1#%6Mssv^LvNU{tN-oCDKL4 z?Bm~MPQ%-bCDl&mXKQ2lPen_zPNq_{v`5tpi7i`)sFyo^JVNTVOQg#MW~>cuOU4xZ zgX2^KfUYm(NW&gWCD4_aAg<dDq{xcJ+NerdrD(_?6cth?Y3;;U7FKnH3<6SONkhnx z5gHAq`R-|xLzPP_mwcceG+cSy<Kpk5c86m3KxvabBb0hoy|_fTux^XPOB;EvGo!B5 zR!utw!aEnW4ij>3vd7H9lC@1ECl7mIJ)9EI<#1wR*5YjHjiGh?z{!84oG`Atl^>`x z=$RG7*WftG)cPjQgkTJ%H`2zpj5YypWwK6ugeRp!_>@`eTNwHNg9o?5m{nUAjE#FS z>Y{p<5}yY5g`7>s52N6opOPoe!JR>=C5P@Ff!Kz@(z7i6B99&;*TD9t(Nf}-Orark zJ$_`Z;J(AMof57}Eeq|7nEEM>f4Dg$49vzu@CvFK!>A*u0`ekmVGmm1v`F*#%Jbkp zrE|;w(}iD0w`ou7Az_DSTx*rJ-?{QW>!>Rq0Noz^8XghLlP<Hz$PRi4FI9_n?JyUs z4+OtJ1pSRn>0~3P%Z6f_38e2{-`NE$%IB9HDIHnEyd%r$uiD|=HfGL7Sh1^)gQl+K z(}7B!_P!JG!u3LD&@|S(s_vjeP>m7I{H*>?iALzc3=`_mty?4WyJ25QAswYEd$qC6 z0X8}_v64UH7Q8Lp4p>ad>n}duF{n`6*=R3LW*(BLIry04+E8AtYnyeo?Y4Gza7IrT z$+48?4MtrX$&fW*EY!l*b|-HhEQNn=8=Bq=U*B#BT-@1l2HmZ!doNO*QDZX5OALjx zUVw2YK@wNkGLldL>OmuYYyRbDY%`8Fxi~m2FaqDW!j$qRM?Q1z#D^shfJ-!)!-eh5 zZRR#S%E|G^HJF6FxvX>DHbF9UCAv*So+&WPXjbTj20h62QqH3?hqMAV=&kYL!mo{G zwxQL)?b`e(JrN`y0}rF3cf3it6G{u=Z`_Zl(6c|?uv+crSWSVyANW$3TwX(jKHl|Q z9IdIugm-{tvi{@Cxscp2dyCHUgfV@9s7VS7nBWC;{xRQ@#6cnug0^kSQVaXh1_6yv z8N|iX_rYY!1B{A-q2A#Zzf))^eE>}b%^7WVy-+lgLcua9+${skw-rLCP|JSIs=Wc< z?EdwNP4}Da+O^wDjI#a9v}81;91NLjoa=y`E3cv)oapko#I!o=<;cX7*2Ubu4f!&W zG<Ex=_ga44Jl+vm_&g6#?n+7;l-Js)K!vI$4J%fh$?ub!xqhHqLOmL2R5w827Vs|c zf4n7jEA)!bddRM89<4Yatye`a>G5e6$=f|B{3-%z?N|IhH%XFOiczgdjGOE5Jwtyq z`lK$Aau5+18e$1gsH8KFOzsB*VRidPQJnnBAa8TfOirQn;Rx;j)Alx-h1$cXz;>on z1YDrgE3yUnapU<C8Vk>EpZFGa-cwYF@Y;i>jZT?1XU-7%nXG?wM}zwH=%bMXtER8M z%5YY9a{He8?FNN)`}Apn4^dgeicF8u^Ug%oi77*0`bRONk3G$w_W52(p>>cQPZ^Pr z2o$OriO88Z;M7T$!;4@+ZgtwCy*Oo73ws|nZsq{+%(J8ZN99g|xd74&@jVPuwAJ4b zhvGC4#FFYAh}oAO*ZXy+gA<Afpk+Kun?<Wo;HYg&tAhJ#dj&y7IJ7k~n%z?aOAY|} zQCd?}$w_BMDD@Yk<?zX0w{7dq^p0hTV=Y_Gm=D$~P?FkctB*}f6VagDQKY9MeiJq~ z5Jb_}07;`_VxE24vvOrw3QFXCXYx%JkTc*K8ZcQ&IsLXUb%U|pvz@>cHU?5_p^dtp zv)cpN=IG{CedtgiUYl?eNjn^*gt~lDZA8_;0P7(F**7@aW|$Fm7w=*<TK9IqGbj^# zBE!WgZ8<_>fnh0*vAn6&JSb-H4S{prV~7>mfU^rNB-Mjg$Rr;QC@RvE@-KhS#MIcF z6LwoeGIKuD3(P#}?WOTxir+36H{|z3M@@E?Ei`Q^f}MRtMz@l3SSR&!ammc@-iDgn zcHy(-3>~T9f%3v4wf~XLKC}A6C)y=7<DcVRZ3k(sCB#H(-M5fe`c)LS{7*Xc0wUeW z7mdpD&@6-OFoSkW7!m!6HU%@Vo0-;vTn1j0HtX!q0pge{BO~vwZ%S~Z7uCL9yJmPS zA<KH!aY*42u!a;<qmS*syf)OaTBNwtyh9u*_OZZkX>wSs6f=Vo#L%1*$1F9NrgQh~ z*${4drB)ZR13y-7%y1#}NG6j??8z|ftk||{L38^Z@ZmC@I)1!kkHR;7B&`59F6P)w z_&YTUS)^pJd_C>;peVs0WfcUX%#5IKT7TL6gt-f_YzGuXJ&Fq^>t~=G_3lyc^9Cx& ze0V)ph}q*FOeB*GiV@7+9zW1`B54v!G`0sSx4rbaJE4l-e4fjWBB~q;sE~&<^4u&N zH~;vh?0%$_bJ-$6eJN6ap<|ltLrFZuCSr;aw7di(EFW~Dw>;zCsiJ(RYKLCr4sJev zwV}Fqx=MJFD4FEOfv^Nh#&sLTdlCNN{!=_@GLm|JcTRB_RXBVRIf*0f{W*0u`;8z3 zDU_JZy6|+lG;hVBGz5(JTeer=K-ge*oqYl9U;DYkKV5w9MD5?NH$aP&D}dPT;zd-B zl^Bv2dMoV5DS++i*|f#BUAw+4T{>glyuAE*rcu5$-FY2Uag(`^Xf|`JHoq7~LmD0+ z5_4A~&bJh!%pmll`kt^OZ6whdM@FiLN$^j&>1;xh0|l&-0ufL+f$8muG3%*})O6uL zm!rPk?T&7X=kKU{mHD{Cb065LwOFOfM2xklp@+qfXuJFIXx77^kc6(}$*>T9K+fbN z4}MJzMzmSm%<LkGI}g}Fy<mH#Zg@9Fx6?RbM6(REZTz?kSFS`Wm;_8KxOe0V<qozq z?)<Qnk*kd&qoolp&uwQKy#kXLn%Rb`biMS${P~j@Wl|*#xxwEGckBEn=|4+nd~7ie z%Z+q?1>p~&TIqaZK+s>eZ+~T|F5*TXYei4&K4(&@^&D0?SuY!(;1U&dxz-g#!f4#$ zJB0SG?A%^K08<<~KCq9`eB$c|MsFbo4NYF+O(5(G+R!=|1d}zptTuiUgkusM*<`qL zHTvoPa|FYhUJV_|v4h}P4wEYhts340fa%xvqq3NJpPGh_N;wYur`yXakX2}ehUYwb z2)*KZ&!!|9^sYYVgPfdx&<ad@JVeu(HF`YIMrQp~_XhF(o}Re#a4GuX(8i3MTCSU| z?H7BvyDz8FgD(}(9R;Oar-(8dH{hg_Eegk*JoGIMTrH_Wp_={07L#_f##dJ3<>SX_ zP%`&%J&7-N^O%bmz2o%*mxZRDdd5E?p)Hr}{~?TbG3J7rjWTpp&S<D5I!NIe(>1us z=!5N*Iwd2~gd&o3O>i5YGa3{Ej$Y<*vYK$IU6Lg-W|cIEM5U3IBOII4$L**WT=+fc zk0lz~ERUuLfz0HKTieKzzD&7_T4@U=IY;P6veIkFkoB44Ef6?8VL10Jn|kCw%_KqS zjJ%)eiLsHs3jB^a8*|ixr;oMeYce9}kn=g2)+DCc&sye)!PMl1+wtjVILGKC;;c?^ zqpd0~&ZM;3cJ}mX>|cyTAlWqWy!~5yam2g?=!`yD!A8M-SAhok8F6*mGVl7|Ce>ls zmdT!;7hyYx|9u+nFP-_FQs6xP^_-ta+EYmL{xtNkds;}nwy~QGBeu?AxO{1S0MYq8 z^?d_IHh9zMQ$pTn!huU1!t?=K%vWI#E~PThUP?Tm7}gFOaK%_xu*{EvH8PiG*Fl0@ zD~ISi!Nt{iqx5y9aFNawr2s$8zV&E2t_<xhK%+y=y`Rnn-<C>&5Wtqy{vl&|V~2Ve z%FJysjJf=4&JD{Sd#l=tu&}!&lXFi+grEHN*A+ddO>MAd-$yIUpyhQBFLIcio4%&5 zwej^`?j2iw2)+5c<;p+{&%@^R4jj30v+g-F2V>W`%pF~Gn|{oi@H)9os}2=>dU$y} z+3;i6FAcLVPP*Ln%kSUGW`p@&?d|k|#UAnER6OgqwM0GmI~=u)_)1BO^VbYgt@_Rx zd{iEk&&|XTcif}*7=2Nl*J2wF?i%$-S7wI>l=Mp&k>cBCZ}0#oUYe|Kud(>bB*ckb z7HTp9RLk@>ZU<3Dsn&=VX+Qc@+4=mIiZteYdJdm~xKuqusmp+DboRBhwh!m2`L;`m zVH+I7aA$%bGlm!CmT9yx^Ww65dq~J<_$gO8YVgML4>sFT81HJuC}VXj3@BmTtgSOv z`1bsr+PfOev+6@2x|6kcU_i{f$$U)bDw{7%Y0!CQ1L>cj81(+U60L{Ftw#M`2#Qmt zbhQfMG3`43?&)8Rf)Ckl>faJ)EhOsu#{YbocoUv^i6}`iqTvxVnUNtofz16-0?2cU zB5(ekgnGDqL`Fv91ZYGYF-v&=x_pXdklT!n{P*UWN>{Sd7iWYT<RSfhjY%{7I~Sv+ z;GX@Ke)-T=s}ms%Yf=^4!B-z4t+2>)GT&Or0ds*By;oIah;E1VvP)PYx1bcN!ofaA zA<`a=hOTDEEnF-%p9KJb+^IOw<o(>Yb7$DjO8Ph9@DgojF=bViORkEO^M7Rq2jN}s zo5$_#T~pywOd2!@Afip=1-XsMYPG39ZG0oZE9$>8Xnn6bj*E4z%86mQEP~S+$3vS{ zMtHQsGRQXN3`@_#GY46Pq_VIc9}>gwbIHGB`+!~#;zv_J)|L@BK8H@r-5H8%1IPXY zd2Tl2lQd#Su;}Qv781Vyo&haQA;j6={1xLG{Xir0s3DiK=1o@{h51U7yy=V>{Mv;O z+1;|1FBX9)STj3N2y6JueZ;r|pwm361_n%OL9VT&ld~)2Vi!I<JXB?}%vmbdBLL;# zIn@fRft;g~eDc1eN1+Q&I@@R)KE&WK)-oJ{Kc<tm_1XK9fM%67XasOR41In3)Uq*# zqqea0sBLkKVh33->MbevyDcpk>XkTd?AUfRdpH~HA#<^A-LQObWgdIy>jg2RdmFn? znNr@!wxPu!Zli~Pv&yVcUqv8RSV^qC7o4v#ZJw3NHq`UZUeV((9a|J^5AJ35+%w2B z$S3b%1!}R0o}O_TZu}Jcs1@KHd|Z#rd(;<BqynwR-hgfxl|bl;iBKXKgb|IuW1|Xw z^#^+XY<_4&{3i5hAXw;T^@q+7i`%2TLBU@W-sT)9$fRl04fH>>(4q??A3w2pQA=U! zTDdNFwaR)sXZb>Exf<*d??vBBtg$+RUSp~j2k1=VxJst*Ixz179^cdl=b3?m^@&dW zGMIpbV~r^yj8rDfyUYp<2q@k>@J5+{fQ#W(>sq-pyROb3P**C!gxl4fTAC`*U`3YB zT!^H-*W-peMRdB?$+XJKy?M|3rOa}B7-_-9`#cI{Ja^F|4TOgE^j%L}^o*LV!CQJ* zP=XH`4m;0@K~TFd<kpknVBztnmR13DBy?&EGCe~tDk70X8Q@rrcZE+sRK{Lf5dz(k zy}$*?c0s)`s30VKl@XX=wZ0GWBOu71xW>msGrAJGH|eJ$Gb~<w-oK~|GQ;mk3&c=a zX;b)gvZTTz&mDK21v^dm@vKLkTH00NoW-S8fhrQFw=});*AG57ek*Up-SD>z;x~^D zOxPZJ=?Oy*cHl#{RIa7iNKH@QZ-208TKV3+&~0jIHMDeXzIh*%8J)&&;~Uv@ZfjyP z<Mi)O_i+{;LKH~3j1(;)<QC+K_;xrRoqf4$&p$CXqEm>YMfu)WFTQKxXICcBK6QX0 zg=CO2G<67)eZYNk^K#qVzvVL&R>%^U^EVlZZJ<#fc+BH2Dc!(Hy&#o2cY9r}I=Q_Z zx2n!Ac7pNFw;3WyZ$e)l2FT6uYh#M>EN5lY#*NEi1s{N%wJ!w1pUJ7_LFO$@t3<lA z!S;to&w#*s4$EFJQw(ejkFp#=3n%kGrYwE$P%^-{JOfkJ;YjTW+mvYKK+XJ}fzg9z zrOX-|w0?a>Bg7D2@x?9X7f~ASBL*rp$O(yp$MZ=(?&y=~T(K3gIx6qgP(N=|oH$~A z3aj<Dk8I9=Np0PiGL3V07{M)geR|SC;>F$M@3nfOknVy47-GFc89Q@ZwVe?^V}Mo2 z(HWfgfF3*T&CfuIu0%;Zi53S;%&`%t4wWe>9{epfoZv|mpH+c1{JYC{@7_J)#kTM0 zd(%K!4bDWT--%3UT@9HCqmxq&={aK$440~L9y}vFl?d4UA6eo)K-mF1B%mrra~$gG z)QuEVX>9z1%iic1m0R+lqs3=y)4=j%4F{@YAi)L(N|=CaNLSK!&R93RotFE4_YGMO zllE}?R^MEBGGDhC+&v1akj_J`F=PJOaO(90lk#QI7WAP)R67R7J@ub|#ynDjUYL33 zb|3Tb4zKUj&!?~yE6LzcT(;+!(W9F)+zDAEV=}6hj&4^-tSg)CrDql4z1;WS*s3e{ z<|jWQ+PQXyaIH^xPbF+0$jbFHa;NeGQAa=t!@l-m<b?iR;?8|Z$a3W8iq5A~v7LE~ z7UlQ_j7wiFu(IWyg&(yuE{~lb6)lc?RY~{HvJ)B+k=DSmo8uBIa17+HfV~A?mi%jW zt+pJQ7}#SwmmK-I{4a@~aPXDkqpo>>tzv@CgLIHs&acHBx0`QqlKsJPl!vO6k@!_Z zIy?czx-rQ|Ace4?{yk~mD}gDgkZ)$<_>|d<j76|wuuZG4QN)sjdmCRxNrqOU4maZ* zb!no@$VT?gt1W|;Ht5Y`u}D38wmgIZek18j<L-T*KAqZ`5qo2l%%=&(vV$N`&gj%< z@tc44Tj1a3B)3+|?}FVSx{v*@u<aOaFQeMk5d%v2DD3lcRPM-gH5#-t!X2Ka@%;mD zH!`C##b1hsLtox9{ea<RXO!IfJ=mB;m_{smgX2ZQbqlb8zfh-H%gSX%6j54F#0sSg z4<*}k7t3ua57>Yvg8S~NW${Pc!Y#`#A2I%7QoO~cH$xhLIG1(fYeP#>Ihl9vJfd~< zOcoJoQ5~eU3Pw$MzrL4(__)@xubk^3GANtqCYmJp#*amxJ8_VXy9i<sY<d8oU=W)i zRn#CB5h0?!e?K&-N6<ovuY(8GWk!c|W5cQ01kF6`DjyP_87Rp;U#X}UM84z=2)i{H z^q(rAsNW0Hw*~Z1Lmcr2sb6!fQ0N2p1q_dPQFWyeDn~R7W-v#o^s;zg*SZ+)zT-}c zPr8jt5z3jZYq`u~BP#M9Cf2GmM3WA!I*$>)&fkO>v5y*C@cu1LgNL}8I+)l@I3;?s zG=c`a+fJ<wXSWV)i+Q6#9LkYe*tnXOeqo{phY`SR3L&{5BDxNwhC4BiW=I-=I}cE5 z>i8vxj6q*;=#fbdg(xqU<b5HL7Nzay&u!m){OHeQryv-0ndg6=Y;lRT=YA20p#l7m zf(Bnl0lvmEh|qKOkN3V#yN2!NX~!%zE?))}LT@1>ELL_0C;ZARA`;fM@?w_D1sCYZ zoO?ZR@Z0^kjWy<WJXaQkR;2n2&gP5KConp#55XVZr?JqH!c`Li(kn9`@aFS-uW{#B zf}AivUJEaJU)(9`z&A|uZa6s=(2~L8$FV6tHRknY-}=5Pd0HR>k@y+N<;A`n%#u|) zo^I}*o<S@E;iDiyG$o|E#ovh>P#Z6YCTK5CBX;QI(gH3j+>$$H-{M9|Th^^4R&2v3 zv+BwH5wk}in1nos@rmpKHAywX>PkLfZsgJ{a3^SnGOYFDiz^oma-v|6qGEd6M7LlV zX~?TIWJ#sCBjDL1n3qQg>iQ5>j^Hb)Q%f0ka(xA^Ec26^?>ozZYR|6)a=vLgVMwbj z&FQHTQ+W2LIf9Pu{?oJ+n=a?5DH*YY(lhECB1{uQgxQR!crRE+um<1C1BqLz!&E>` z2ukYJGE`=I2x_bx_i5O$Yo;k5a<i}-c8hf&);#gIH}4I0Pyq(!M3pjl+Gx<TVkhMu z6xn^T4ZMl2jwMZ5O`A%Qhd)(x$o?p_)bL&|)-{UwL0q9c=4~X#RF4b_{2aC#@51L@ zNKGxv*p4nF)sDa3FCna?U<m>#Em7CR3+|c;$q_LwQB`59HK;`6Z(a>s6O*D!2A~tj zStW*HagBOD_Q>#ADbdtZYI*2KGJs*4{0nG0|7i^{j!%n>-`$Klp1QS)M|e?=Mp|1S zi5Okyg`YRNv5^dZ^(Om|nSfcxx75N)rkfsgDN1=xbx7NJ1(}&8;(fJ6os}n5KyZ54 zIwlSrlf#HBkI(w29v!n(gm<0h8x`bsU`HV8KVvhqAb$EpsA4p8CH-!whNXNYJTXHQ zn>gGD3Znu3m^@@*5uBPz<Le5;0d_^hp_vQRiT0FO*@NqltS0eyXms>Jh7ovoovOF! z=sw2fHBocZ+jj#??x8`cO+dYUy@<8WpITHdE7gqZRp7rgP1MPQ^OJTJcI2py{cUa; zIDE;OK5hJX|JBil|J4G_@hL9sO4pp3y2`9A%W#9^k?oZMm6$lUd90~E>yauFCFoGW z1}Dkw#bg17Ydwvi`^4D>ojmLCUf*vxI2>Y82~z^67vBd#HSUEo)LL;$=J1f6fB@UW zgwp<NOG`Fd6f2RlH*4E=kXK?+VWHf*U_`4xCs_P2jtI(wIZY$;(IBUAOY`r)Z)6&{ z`sD*&bpIBdbFD;xj-Ny?^tWYSemU5JZEhymsGUdkFx1s`H6O1TDG`?FtN4;KgegGO z{TDB)_BQV5_7X-Ee#D=hQt2Zzc#1s73xqJ9dKZQmg80}n<aWEW^Nl)n(!<E1f$@y< z_;}5OvPoGs#1gM(Dn@1yno}`)U5f-@(->3erwuL%h-%LMB}ep?FL`Dk2xPcfRS4}o z|Lp7^N!vnVgnT$Fcu&v3u^;bLtqu<woU(oKjpLC+Et&3$F%*lgKP|?LNVgMLCLx&Q zQB}a@k|$yn*;q9)QlAav^ao%_;O2GjZpj~D89xqk+WFz_6DOJo+Jk0VrRfP{ech10 zJo&Q>N?b)JstGKbraoUjBpjSfEma<u#u`LxDYcZ_=n@zG6YRu8>ql_YbPC#<US9qa zAr@EgGqeg&Qz0WfO-(ixKdRl49JGaPTa+gFfSJ%xCuJsN9fZ1Org0TtL5pE6=6~zL zd(ulr&-p0W-YTRj)FDXk{snJtUuJ_q`;|Ph<T+K{aEKoNb6Mhd%!HI4D(En@FH7ap zi*QD>Y9&8p?u*P^;&?hopn2t$BX)+Wc4L$~#87P8M|R~br;|UOqX#zz3ztP<o3*yn z9l92hg1^xiE21!6U*;v>{rb964Yo<~eCdugGdH*MvVH?zfMi)tvkI2$O%tjiBg1iS zO-r^NVi?FdSsc6V`sLm1ck$?pRpSBVH=LRZ|3Oz1-AdUgm(gY0lx%m5O67x2oIJT4 ztaflVUpM^iUp#q40rn)MBNQeSg2TM-{aqYHE?@|51@%2MnQ9j~KpBZJ89eT@4GtR` z3g+xF5!KPnsg48M;t13cOrx14DD2zY?;IKBSeO4jO-;{#F3AWvBI4yJ(wRIFSiBQN zimcw)whmCUXw1h0BtCm&9dohPMV&d+x`sWVp8r(V1eAB1cI=4F<32~0h>waar!a^1 z1;kF=3j_*zCj7#Pq6XVxh)ic}58AMyACR7@0hmN5%O|;)E?*{dRWtyi{?;_^rDLXz z_K5E3r+=bHcDg_zAx49w&rod_p6y;>ga`)7dcLbM;^c@?qXPK2Fm0o)Ykc65U@PCp zuWH>=dMY5G;}GNWh@rG2D7Vozu5(2FU?)tV0aoW==T+>}{Ct4?q3Kc^%WapGm>V=~ zXt>NTbNMbAH20CJ*Wf{9Iu7DM&M_om6Eq=OrYcCnZDtwjahH)+A(J3aV@4e@hpQ`b zt}%>=)uTs~aLaHiCX4NFKhh^-YoSQTv9<c~F3eh2F3X%~02NS+wry+BwDl=0IC5}u zGJjv-1mZ)akX{5}T^24dWe*4}C)dX;pdexyf{1WK;!5^%J9_-MWHW}8U}CcAhsrCB z=FG|c7%Y=8<-+6HkMpNdf0{tuiZKS6C~yN2-=4`eqg?XSyfV<T%e;rHr=}JA&Oh-L z4{nuZ&`p$^*>~3(bF(Lr8aA!(ALSz8jq{5{P>gEDB;Mj~^>ue|#{Uz*M=W{NXcfJ6 zXtzfE7;?YG&u@LBA|ojajWH10*uS9lI>LCzAyy&bywn0#3(RF5G9mV${fJkgE#Zts zXfc+zot-Smp)`>*kzsL>(;CNU>^zNH5h^S`aeoxYEfsy`u-+=r11@g7*ZCW5G-Mq; zt8NaCA2^mZu?<k3vCU@#&=;ozGwdY__f9M3Fi?7J?B6mVD9CR7_^^7W<@oge%y<hr zD`s7XDlIzq-6?x}TQ2fy6fKhZDIJnHDGkgwNolA799osj;UbD6UTSYR5;KfDp(XoN zi7sRUVF1<Oa!j?;m9kBeC$n#he#1oO<J6)h)NTw5JNR-`3HvXo@FlfFaOD6aB;FYz zXEn|Cqv5&u<l=9O;@@&#*fh}5jg8ff;Nw=(<0DP|_uwDLuO7`&4ZH>zxHy9kolaBo z^syaik5i*4xR4LrK^jcJecGEI#TnfPBg4BdFKw9Lad!1t*e-g#j&Fp3shV5t0DJq- zYlT{DTW;!)F+fk<EY8+%i*m!VJ%1+;Q(0m;R(QU~Fr`T*0yD@gw0u09Jt=XHbww}s zjlHuyf}+xo`78wlGZA85)jORpKN?vt&)F_7X|?47^L1;Pp2Wzuih?$5pnBR0+I-ne zZ~KHLbjB&7{r&yZy_o-21xK03%3QNUx?A@4w?6(ed>)_Syh0tv<mD)>mxb(755&2S zit1<2o~6tji%9<rT_XVolIUI~?a?sV)i{DUAw-UCa=5v9c!{B`YK%6s4|-dYtRDbj z#;jZHm)Flk!>=i+X3d*Fm{XMG7_}rN2cO-i5Hx1}Kl#!lo`)eOEJJEm*6`A5;V1RW z>$P<&Ppyd&LlZ+T^1qgH9-mr~t_pf^sPGGq$ocjp%Ol<|N6=#Fd&8vD!I+rJ_(QE} zR@rTao8!QNDlDx=9Qb2+y5XyP-26S=0x8PZV}7YlHo3kw(5b_Y>S7bf)b8|CvCf)A zQ{DH|<$b7)G{}kq&7V5j)543?GZ7m}Y7tyB2U&Llx%A9yW5%tA>=(8}O>h%^DmDlE z5^v>ZUt^BRl$_Vc**T+9$tyCuN&Wgr3o3P-ezn)CHYIJTzv#Bb;4DD)>^Ob{H}u&@ zK)kM}ezg?h%*?)+RqpEVA@kJrgKE+GkLm<;jfiQJn9znzlLKCk5FbSUvJ`62v0h2z zVaEsu%y=El`!~yvL71D{`Ws$Hb;MA;e)!>+gOhs`W+<BQ$8L-%0wQ8nJ9H?EA6%j4 zX$EC9=Wfy&WUM`>C)_@N^zh+cC<+**Sgu5t)WpQ(xq*UxUIqqSM9a6|)<y{NY0O`J znu5%Q;CU+I>gkB~ESLtL70lYfh5xywl{sbuKh5E7^+ov^=NcQHH+-SqlCNwqMZlrs zSnF{qbRtA3(-POc5A<vq;z*la(~*;T1nABxaU}!5L52W`<W;JG#>dXGb>abc2G-o4 zi{96Z?Z)bp8J9N{7yOPV%V|@*eQU?OGhzXMZju}&*wCBl-H{ls2#a)_4q7TsrH7GT z(gQDfT{6MAyox&JBEYGY#wYpg%Uj0*A~5#j@l%6E=Pe=Urx-GSrBdE{C_;N~S|t{c zWV_7*!4hOYFH5_=XZLSDIXo53Ymt015G}*p1?Q{-4sdEUq5j_o(wCTZXnbQn(e&#v zCa5X3r?R4<fc_8-aV)D4B+=%!wr0%YpP{<fPlKj>NWJRe`PK#D0Fp#!tct0kJdck6 zZjg>D>#W$?dLFN*z-#inQg7q?&z}c!063vW&~!@{#5kC55+6+xSP5uTokOp%_`!<0 zoMQv`u&2j41}8g(0Vt5~onhM=1jE%^y=Q|7dKxf6ZTdWv;k~hzz-T#`<d<-L*^PF? zQR)EWYNOoxa%oT3#cx|Oun<H8Jc0>Nvn!)mrNC7yYeb*w-@DNVRY6_er#w>B_2zrB z&w2QbBgLET_VuC$74Im*M~w*CvB34Yt8Kfq;PBmpNngHaAjp}H1w+&#wo4yFHy?Jl zj~raVK+9P5qk8oBuf%!x=evSD%R&+X#?~B+=*^QLCTLYGEk<=K>B;3Tsuj<9Q5NFg z5*!#&^El<{UOT_4g#RXVVqy(PVvpfSwB|@4(aFFfN%uCsg)@UI#+W&yutNR*V#tkE zG$bc-{|U)5BiZU0m7f3P>C=bIf6tvaZw13a=`Z!NmRaIPz(L*%^0~=+UNJK0di&II z7}xKMn%WYo61x-|5ygEaDv&E9#RL3Y4cu$ixFuwJUr!lS#{sEiC3teM2y4$H-Xj9o zv~#D(C0HD<{~ivFMuPRr>a1gXajN*U7g^J^d>Lq|H0rBbJXLL9AgmVNS!Kl!lh2JB zn*fUG-DIeNMLs_`hz?!wjTT^sv*N<KPlBqV9tHorvDxMCnECsfSdimnRKC8yg(;qM z3er)PUu8ZWuGrQ36R&kO-zS`8!wogSPxJ6vPhPwTA~A|aB`~Npt+7ulvu(Umx~9@j zqn1!b$fY|^2x-soATqOx$o|iwMo#Qp<#<a{KdGt=$c$KNcIYE!$pk~W(6hSx(R+a? zs#ZjQRd@$bi82>#KQXm@@~9TyR4yxb2r{Kg2|>&6C>48py`rF3-x7iYOCrz0uo1@P z>8`O&eT>bB7vRy^hC*orsPtcU6<~3WFMRyNQKm1eW46$no*rF7D24+i1^2K)#6>+A z;ia^{5_u6mI)zc)pg=aI=9zx$c&y4zXrpoJ2%lWo1{7sX@00T65g<pDp7-%uQ>RQ> zEv+wYa&<$|X9iQhVL)61syGee(YR5gwfr53mT~8chM@$4$q@pC-|93zmx>Uo8+;d+ z9t}msADfC%DyFG$W=aPy4ih2wqR)w>nbLBD-koNaxmWGz;g)Ql3ytpf>+Bk^fIs(G z=Jv=d&BC+_)dlP4HX&?RdH-)Pou=$$W>(d?j+)&Guhv&A&Rr7;d836|poP`YFF*nq z@p33LQ(;bP(wJ1&oY<c2co1z7zrhR*gWIlG$};bUuqbyTYM4=n-OHeK)qX`rFh_XZ z%W(|iu+rk%K!2CX_uASDNg1ndxw^%8j-^v0&3%wsL3)KJpMQh!RC>YWW_^0=rX(9} z6Dlol{##~#zLJ$ymrrI;ML-`f%{y1$=hNFL!=qv5zJh}Lwf%p6*&lar>Vky}SF@)a z_k%!)^57h#)61#fCQS-g4YR3u^I)u6P9E%IY?9&2Kyxa(ZDC<L$kjNuZe5SG-F8V@ zA+)|NTD6jZ<uv@n5hhsG{i4e^iZ!xy*PCye9-Z3>#jxN2_ZaB+r=cMld4rB5ROkaX zC2^tMiP7r#vZn%KIqs#8?^;(YKVYzmG=$jUWNFy))A}5YQ0R`)0o7hFN^ctf%|jgD zPs$uhXID|Vd7m|VDK5?a+PZC<KcA}wm;ngC8qAySX*fsD&(#X$a4U&RNQ?<n2J|&_ z!!uhmz*2FGe~8Pn7z0GxnQv;wMjG{Uz$QbFO&t_Gb@8XS7D$x>fyd$0w1&6vdBFac zM!fhG2r|W7IOn7}rqGo)9A{wxp!2%m>7QrN@6AONrOp@SiyTJ4um=;@SUA_wd<Y_n zy_h*Hnb${X`rSw#6e~8WQuhwr-mVO9k$%!?W}2{Jh^RlPyDxeOSexav9Jm*2c%7^l ztEzq%#qB)oAR#X$&{SW1=XZ0~Q*EAsxc9o($TuFMf+}aF-M*_AbHBH-sRh4;u~olV zuYp8Q{`hMi`ZCH=9xu4Hri3<(n&2C7-Mgb}%+NCE7?vYgmFkA$uM$B*2Zr<Ek7;c0 z&HIYXOkp7Pg}w9F-XAZCyf!4NXdQpJ9(Uej7wmfobI~C-uU0lY&6qInNc1R^i{)t8 zViG!I*+plVS7J#86n>K3x3)=Es4T7mq<Hiw|5U@J@Peub_^N)K7?u*gw0+oflDoT+ z7z21`q@L-VSGj+|su+Wo6!hIaJSxxw7ssr`gRY*FaWK*U3JFZ^u^4KVC-Kl5gXf_c ztj-#ZO+$W>kcU-zCQvhev^PnHj8O+b?VUb%&f!J|LWclisJ3f^_|<l!Nl@X$*qShF z1e4%tJeiG`o*3E#p959iEpgm8v>8eOPTFZuqiisEd#o~qm8UC|I3o8Wg8{X9XLe|D zg}kqQtx!|48YMBn#-Eof>Qv-{a4X+0m9gI&c|C&c_UXMq0ZF<9v^KESw1wmj2I#=c zy$+n!^t(x289radNupk=+hNDkCjC%)*MjUj4Yirr;nOp|rGoN^1li-1;wEGgDmxI{ zmnW|w<&fJKNUR1=eq2Av7#aFD^0Qk(_7u7`w5W}N?PiB;g3RrmAFuE*51+rz7ctAb z?Sv%?Vn6GV2N60~47Yq?yE$8N7wAdA1Kzvsd8_a2>cZ7W{^3WmWtmzfg+7c7<}w^Z zQ)=9KYZLGi2z*IN*A0!oUqel@msW}7P=E^&q4WgwcaSr+S8s#e+ona01HuEy)O|o= zL>#j@=Cp5Q(`iJ;9r<ssDdyeL#Kd!4Km~N!cc`_*f8^b`nh~eT56#0Qg8I<-ESO+5 zQ<(DDpLa|AKBPCL=g2e|;9)CAh233V+a$z}g1sM?;K8d`>oB4~lG69arsEGEr1@*u z7GmKI@|!gFKHb=)1K$IKi4Hu@<+M-O0$QB}D7^$BYhmMrvw`82X^+93C_gY-c9!ra zck`qr@2djYIGXlk-VD~q0HyZ<A!$b!pO2o&rIO1yp+_yjHSzIYRea-0SW)Unb3vm= z1q@s`7QOr05Ee2ID2wA0quLXZ9FuA_ne`lZzU-UaRcEj4>FMv5um%t@B70|3#y~Ys z4m=PIQVPq`-p}Q%A4EW+w!f+ka1*s%$S3Dm&qOnrC-}8g0O_U2PTly8R&0X(`3)=R z1jx4IMNT7bH38k7x=n6TkuI?ZTZA^~ZQP9N?bWO5m}=uF(1L)5_1Rf;J93X0dunMz z<`oNQP?KV+0&Z3DNcIKOrY=mQM!RZ-ZAXLNM${Q}&l;SB*Ys@8CiXQn%B~-p(3C-z z|8g8ryU0#lwQ?uM%F9c=1nL<ejetCTuSw^E+~QjYnF~r%kR%rrf;1ZaECFFvy&Tw8 z<u_(^j=wG2cN=Q&tL%rMWlckF#{0fv)A~1JwIctZ9hHFUI|jQ7aNTW>T6uoP;iB19 zhf&r-R`_GY@_>IqvLDKUKm<X=9CpMtrmk|}+htI_2~lENhYIo2p1#F|A0~in5d-^T z=cqBZyepE0Vq;)byVbzcw6ZQ0J}7H=+g1&wQsn1roQ!5$IewjktgNzvj$^VSff%x= zv(!q?6kOx_@gFtb`2XRDJ;&Jpi_tD|qY|~LHWK}LH>pnDx({gArjb_KA>E-IKKSQP zBlNCQK-2UD=@nF>K%h-plbMXOB>tf%=6gWTZF^o(Z+cUIM1iX%X5vgpJtVqYk}jYz zuSw~HeOAHTO>M6iKfte=i~C3toXN^&y^PBPI>mA641+$PX3Oswcq}c-!TBsL*|{hQ zFh8irJh@pyDXZn-KlYn`OwT|$YwaJj?$e^<f4_a(Er}9>UTsAq9pSa*x(NYDv=Flu zQn|g*C!r5_FEIIY+s%CuD4Ot6`e1#j@#~v^|NY!nP<m6}<XtB_GT(&}QY|D#3>}^0 zJh@MvJZyH8Q6-_4LBw4`$azKp#c7RAUQ$<1k>oWzsa9d1$LWEYQAXkjtR~V(NlPgA z>^7N`qNvI_R*w%F7{#)psJ(}Fph$QqQLW-bDPb}4o7d$y{u%hFiZ4Qe!pX_-hLFu% zarDQTTLNO%A)(hsh&*&FdX82hL@39xuoNmJ(86dgUlYChkIc=3xAbrM=EH|{^1Re? z8YtlQh+v_WzK$C*uHSWA-s_eNQYH}^CW4K$DU=%`b5LCX89Oj`UkgmYioB8{M?aFJ zmjy#C=9&d%Na-}uQ@j~}#LQ&#`G5N>bSfsQPREJlx@Y3Sh#9vDwfI<;A@x&(zO=0g zI}tE-T2yTl=fF*lQEEitU9e89B&T1?p1cp3wg@s8HI1P`1lfV6_<|E%2HEit->oM> z(+pGhQZC(`5|xL_GQLGGCy1d|jGFvn9jKQ7BU{rix{q-eZ;gsj)I6D!Q5Cl@HL>6r z@c8Ldb$(S$i2T)i+Q8aJI3YSX?Xg~fdND`(t1-Z1UTImLotSG_&O;9;moKf~%ieYU z0Fr!<aW|Sn`K5tjndvhI!mI$UX^d{_Yz=5@7daJ%I|3{=c0LZS$}tT29t?((fFEtg zyd2UH8Qr2Jsz-;Ar4%b%Vjq8OS@>m<MTjF7ij|{WszBE!6pg=|FjqJaWleQSLy<D^ zNBGeJt+t%Ga-|l*O9E}ZY{p;M$&>tNQn`Wz1oxWGF?xd+g7h5cd3XIsUc5V@E0VW? zq+vP~IyMySd62QsY+VB3&{DUy8K!Cz92<53&LDjL6}CP|dd9K}RUveD^<%}max!Gu z_A=m!GAGO9s@vEc>d>iZs}4!P!hYXun+$nA>bJSgDRl6!d-k!?sEeks)b;E80}u8g z?!y3X^T8I}(3<Kd$86OC19-1ZyLSh-8MYq{=I|SvdN@LP$#IZK6%M1Ed;Y#b{=bN) zdFz%LgXt3CuoywqCd#8T#~S1s8JWEsVBgzSQI}*5mAvoZ<WQ%cxKhwQl^l_d*mIpt zy%&>z<qTLp*QCqMt5X@oc+ko9BPLN_ibMpNsyW8Ld2&66#`df-ZPdDEm8JMlZeUot z845X_n~>lh;g*wNK{Tf6OplV{v>r1XC)cZQ899<T91>EOB2I7t(nvnW3dMvUoY5;1 z%Lm6@*PxW@dC-lzMday)jSbf?;G%J$eOZvRy#HYY=&1Ms1R)*E#JW=8HFc=tz><-= z)H70pLygCl4CE%wQ+42471b3RuWCu#3YgzJ)Di}AmCO4l<LhXdV_gJk0#^tIpm6Cg z=!PtDf@ucQsL&Cy%M*2{H7<)uo~FbH#Es52Gj38BNxvqk66s;}z*g5vLzKDIWHegT z;X@<(*7&N&(gsK&sH}QH%R6QLxV+@Ui!5si5x56Vp<h2}KGob@JvrwY9+M`Oh4WY4 z1^1>dC^h0=E_s_Bp}tOfSL5X?6JT!?OtR{2{vg{$S0lxoBAS)uoKWpJRF4M7Xtu^m zVotJv>OAVY)aL71G%?x(o``u(siT+E+x5MoZ)_iF!s#N<BRB2xQ(+ebl+_R&_w1SC zve?Hi%B4AKSlTIy(ixO9E_asmW-a;{J2+qWu8b&mn!WQ`#&p#^CmF);hJ#9$6g{+0 z81V@8f;xj*S4V4eB7l~5HQcp6xJ$n}4oLM?x{1~YqDTnG?kQtJqekf)r8!-tnv#`@ z7*&c<Kc>ZWh4{m{Vf2XjdF)4DXV$5z`V6R--e4WtC)V|a?X7$Bv2O*0RWVYbuPHA> zNN74YlPBG#Rpqjbs8ExwM#v;G3O0haZ}|9AKU<+bfPHF@1EoG2Lxu$p*V;JV`KvC! zbJHobb>vj3p6TY6)wud^^U9&aRZtqA@>2~kBkhQ1Pd=t)^7SW^oV&pGYh)0Mn*N7s zRWk@Tod0gdCqOC;qWZb}kM;NgswgNuiOb%Na}DGw{X;qZN@7UCn%4xOs6na_bG>%? zGJIf-&6F|~Mg&i;Nb<>v3^Gb$ujhbisIinZ<i>qNEf+QpRx;Cn%DlbUd65BJJ{>Hb zHt-wFJAI>C)vB#^InlRQQ@Zu{@zYzwb(4K>8wyLEl}?-$pn*id<S66XwO6qX12|?( zmN~ipV>A+pb{NHpz)=^B5c}KW6#)Tv4O1Hp0bE0o<O)WTSQwiA{tbS?TF(QjwC!0Y z43rF;HHoB-k*C&uy#Z;b66vB(D9~OsV>AFoA{Cod<8TOPDcrPvTas@v*_w4hk%1U0 zKQ}N++uo&&pmn5yQ4Ku$ijL-s4CjmBg$gfyPNWmoZK6yN#w_`<3;3szR2-5L;T!<~ z#x`~EjU!~04PrrK*3lSL@e0E5lT8KjPfcJ=cu}pwv?ol%2=hEr!MsDhMb+3T(?T6a zDpzc9Tv{(Sd>4&5Or5$0ocIv)5I;`5<|g*|7B^&Tl}vz|S1t>M$?NM9S~7&1lCbMe zw^h_6{KUEUrOm>~+I$m6*W0=s*Rn6se;nPt^rn|A+QY_sKR$)#3H8>wcS9LaA9tR= z=&p`vc!$S#)<&Zn0PEjJ7o~m?%_&xo*Fe;g@N;FGufINvaC9X%TyKSv$_|J^_E?WL z>`j!U!ka?jgkdpN41yLU@4=&7CG@LXiPdl>umf6YYzC49|BJ!KpKauS&%}d>4n5p! z*M^nWr2#QN3+N-?oQu28tGmgKxY~V~I0epyznpHg{NGHk;(_4EZCb%Ie`ZT(=y`KV z4?}uWuj`w_3eH21Ai&2#@pFt?36h1J?bP9U3`iS2NGkuV{o=P%#D!4ZrPG>~l=w_` zcBsu6y`Y7_d-_n}&><Q`LPu>xCra+^(iIQsS+rWj<#*rJhn~Vre~nVW%-z<OmZzmF zB=Jk&RHjUsnWtOxxXsOz#TLQ=-{*xG*g_&6@<F(n7q7Y|Sq5ReEe|8jGaa9vQI`H> zZ^nDPH~T|q>}eJh9`n+ebK5Z7@*!tK(rsbOckdR0f+Ki}TEYS~SJT=$-nY<>q#?e8 z-mO~s)OVuZ&>=?9g;bY|OD}t&sRn%2J;EjS4S7ki5a*@SFg~Civ1a-pU=eLFarg47 z#_Jn*KFbzd!^MXj)wW>?GdZT-jZ5X;&w8?d;~|kl14Ba@AXQ>loeDqbxt>X7MLZJF zX}&}T;6&yM)(^m!LkzI!D<WYkuv(D?ml4fK6LjfhGHP8;q!J}v8mHYf@bR)$8NMZB z>Nt>fq}M>D`WuV%<nYg=WCa8p?7j1Y2tvZ4t%->Ij*J$nh^fOrI7ex&fnAY!)ITdY zAlTmur;u(G&*=L;nN)U*Wsof3nI6>h5!B#{WqX%07~%Iqa1n*xQ=q3=(U(*vaSqi< z8lW;Facxl0T&z&#Bmm~Im!kqYU2bOH{YrE_EDR^M1u`S3WngzYIehNpKTMRO38yU5 zU4beDjL*TT3AqBVd>V$06HW~WD{t}oZt_~%)Eai8{k?+jA_oRjp0!X>5y%(DmQ&H` z>KGW#@Y&ZQ3`jLH{342!W45q$>(*+zF^jGpQji`8Hie{}Y!zgVHekiS%3m=hT-8fY zj!Sh-Y296F2;2=c*hlR1r)eeaD&5rxM7~gw7H)^2gaKXlaAYbTIiq@_QU>t$qTde~ z!iTaoyzZY};<K0)Q3w`PhV?UN7>O^_n}QPmROg{XjS}68il;Gsgd`WpxP}uE!6Vf4 z-j*%b`X%fzu*^l2Rb=2`p0n_pWH9=Y&UHk+0;}+IGpS+Lk*;aKz@A1oDnM`%;hQl* zBJePB!ZJUW2O5B~nc#&<MkO4X(xD?{Xrz`5B12JWn$IR}Qw#lc{XKG1grwf0<ax0D z8S9|dG3Er2*w_Jia&-^-Zy}WoQe@&cnUaIb#+drZymCv>+3Q>K&EVa{Ad`=g&p{hL zvo$oTW~@Le?B-@hKUfb3u1ZZmK(fZ&z;BQO!K8b(I@RX1M$LY^A4#In3t~Hd(IiIG znUk8DrV@hB;Yepp053HyP3tG=;)AO9k@08<)l}-zY|_n}lx+`v!#>7mc@hyTYE%$O zNFHfgIyz)5X~Y9j1#~JUKg!(|;`q<9W(43S|Bgm*mscf^X}*XEuDedKv|}a^^o$g? zGK`t>1mYWXO)F^9Vf?+Y@s}aE^|{lGR29LvnQWWskZuip?rg}`u0L^v5q?3JR8(>V zdTeBgD(wPZ*%>M$6u5dQY^dOrkT+=#>mxH{S{BTzhe%!445W;?HVbt`TVV<~6Rs$H zL+Zb?4q(}S$eXyOc<rs@C`y)4;QOCDL%bThHc8KmjvcUZyHljan##q!x42&m&kEXG z?Ow0%PG<OxnXqC`nxFf<71ieDx(qe8I&Nh@$8W3E^t!bxcb>7U|IWvEM-N(*c6#74 zw`o0^cKNa(H0RBeLQrA6+HofsG|+<QsHmu<!nc<eGX=x6dn{*ycldP0;_G*B-~JO& zG#?cg=;q0)T0Q<CcH&)?_a(WLk<s!WpWeUUECnMu=0wj^*K}en?FmjTq<k3jYp-6v zp6ZJoN(UC8(z~i&aaA{bK1Yuqe;GQM)b;kyZ?8ON3h+;A_;L#lmAjwobiBNgkx}7| z^hfjhMmYcS>#qw4D=?p3xxo%=(k3E+JercSheJ%K_c2DOe|jBC4$aESB7by1VU?AU z_9(9l67oN$?O7JeNK`v|4HqexWU!KhO1D$RhDJsOdpbASkbC#R4~rHZJ91=GLPElA zR7w1YB-yU8c_6~qcW=OE*gG2CUJ!1<N4g)@Xv6ug-Mak=K_jy}Sg1C{dXMZIHx|$w zd6k=+Ljqm=`b5rruu9U~i`HFbR*;kPZG-9^x^`WB<zq*);G_I9l6Oa3ubhzwy!;dA zHCW-x_{?r=9p;nTq8q=-Xlp<ye_oz)dwR!{joS0!o}g;IAWxI8YA%57gSKgXjop84 zZWmv?@C@@U{*?4C(}^2)fn(Z)xsQ_RQ~v4M@8&pk7*GlWu$y_r1!_yk=!%;<Yv1p{ zN`6zT`@5?X=6dQk-k)I7whaI49g$&4ALIn%9Xx9c0{{8lYr%qV`CAQx`|e;}1-}pJ zNeJL02X=e$hrg%s#I_Jkes6v)Bg2^$%L{ybwy#>XisR5!9!K-_`e;x9Ef*6gj^c>; z>)j>R_*x7O-L|b{bJN}W{mXra7~cEsMZ5#%gf85@JN~EQPdUiHJ!Z{noA#g`qosW~ z4d0pt&*$)QkiNFD$%%~)yBM*d$Id(-8sfWW&Yt}gmBkfa5H0=re2$FiTlr{7Z&Itt z$|WD`)hYAlWn6L8ubjIl(D0NiW%9X;ardGev1W387)vd_RQFFiaOhAD8RPF;w=VK8 zY@Py+Ty>@ydu$fJI&!`PzJ2f(`V72`#muaK`~CO3=%U`q8K&oG6ga&Ke=ca$)z<dn z>({gSJV%q0cXO|wf^r*HuekW}rhXl|ci)Xb33Te=>FF4$b8l43GQ(8=t3QTznwRoj z>0k2aLf_I?WcVAy4M)=OmwO!zPtNeyu7<B<_{-&1|IZJya4T#0oBS!x-s!)8*(=2G zAr1d;jH%)M8~*x#KV0w5@W=li%l}Txzei!{|1QzLPr~SbvE_du_rGW1f63y1$>QI$ f@c$cV@uKOyCeJ(e$gbqBZ$7|bu>C<h_m%$#kqx!- 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()