diff --git a/PyFlyt/core/abstractions/boosters.py b/PyFlyt/core/abstractions/boosters.py index 5f07da70..561f0c39 100644 --- a/PyFlyt/core/abstractions/boosters.py +++ b/PyFlyt/core/abstractions/boosters.py @@ -141,7 +141,7 @@ def get_states(self) -> np.ndarray: - (b0, b1, ..., bn) represent the remaining fuel ratio - (c0, c1, ..., cn) represent the current throttle state - Returns + Returns: ------- np.ndarray: A (3 * num_boosters, ) array diff --git a/PyFlyt/core/abstractions/camera.py b/PyFlyt/core/abstractions/camera.py index ce288d0e..52bd7252 100644 --- a/PyFlyt/core/abstractions/camera.py +++ b/PyFlyt/core/abstractions/camera.py @@ -100,7 +100,7 @@ def __init__( def view_mat(self) -> np.ndarray: """Generates the view matrix for the camera depending on the current orientation and implicit parameters. - Returns + Returns: ------- np.ndarray: view matrix. @@ -161,7 +161,7 @@ def physics_update(self): def capture_image(self) -> tuple[np.ndarray, np.ndarray, np.ndarray]: """Captures the 3 relevant images from the camera. - Returns + Returns: ------- tuple[np.ndarray, np.ndarray, np.ndarray]: rgbaImg, depthImg, segImg diff --git a/PyFlyt/core/abstractions/gimbals.py b/PyFlyt/core/abstractions/gimbals.py index f0984a7a..f5f04b1d 100644 --- a/PyFlyt/core/abstractions/gimbals.py +++ b/PyFlyt/core/abstractions/gimbals.py @@ -123,7 +123,7 @@ def reset(self): def get_states(self) -> np.ndarray: """Gets the current state of the components. - Returns + Returns: ------- np.ndarray: a (2 * num_gimbals, ) array where every pair of values represents the current state of the gimbal diff --git a/PyFlyt/core/abstractions/lifting_surfaces.py b/PyFlyt/core/abstractions/lifting_surfaces.py index 148de490..af39b366 100644 --- a/PyFlyt/core/abstractions/lifting_surfaces.py +++ b/PyFlyt/core/abstractions/lifting_surfaces.py @@ -47,7 +47,7 @@ def reset(self): def get_states(self) -> np.ndarray: """Gets the current state of the components. - Returns + Returns: ------- np.ndarray: a (num_surfaces, ) array representing the actuation state for each surface @@ -254,7 +254,7 @@ def reset(self): def get_states(self) -> float: """Gets the current state of the components. - Returns + Returns: ------- float: the level of deflection of the surface. diff --git a/PyFlyt/core/abstractions/motors.py b/PyFlyt/core/abstractions/motors.py index 82c7ff62..eae4bb4b 100644 --- a/PyFlyt/core/abstractions/motors.py +++ b/PyFlyt/core/abstractions/motors.py @@ -98,7 +98,7 @@ def reset(self) -> None: def get_states(self) -> np.ndarray: """Gets the current state of the components. - Returns + Returns: ------- np.ndarray: an (num_motors, ) array for the current throttle level of each motor diff --git a/PyFlyt/core/aviary.py b/PyFlyt/core/aviary.py index 91b29bcb..a487e228 100644 --- a/PyFlyt/core/aviary.py +++ b/PyFlyt/core/aviary.py @@ -38,7 +38,7 @@ def __init__(self, message: str) -> None: def __str__(self) -> str: """__str__. - Returns + Returns: ------- str: @@ -380,7 +380,7 @@ def all_states(self) -> list[np.ndarray]: This function is not very optimized, if you want the state of a single drone, do `state(i)`. - Returns + Returns: ------- np.ndarray: list of states @@ -399,7 +399,7 @@ def all_aux_states(self) -> list[np.ndarray]: This function is not very optimized, if you want the aux state of a single drone, do `aux_state(i)`. - Returns + Returns: ------- np.ndarray: list of auxiliary states diff --git a/PyFlyt/core/drones/quadx.py b/PyFlyt/core/drones/quadx.py index fac7ad1b..cfc44363 100644 --- a/PyFlyt/core/drones/quadx.py +++ b/PyFlyt/core/drones/quadx.py @@ -32,6 +32,7 @@ def __init__( use_gimbal: bool = False, camera_angle_degrees: int = 20, camera_FOV_degrees: int = 90, + camera_position_offset: np.ndarray = np.array([0.0, 0.0, 0.0]), camera_resolution: tuple[int, int] = (128, 128), camera_fps: None | int = None, ): @@ -51,6 +52,7 @@ def __init__( use_gimbal (bool): use_gimbal camera_angle_degrees (int): camera_angle_degrees camera_FOV_degrees (int): camera_FOV_degrees + camera_position_offset (np.ndarray): offset position of the camera camera_resolution (tuple[int, int]): camera_resolution camera_fps (None | int): camera_fps @@ -205,6 +207,7 @@ def __init__( camera_FOV_degrees=camera_FOV_degrees, camera_angle_degrees=camera_angle_degrees, camera_resolution=camera_resolution, + camera_position_offset=camera_position_offset, ) # compute camera fps parameters diff --git a/PyFlyt/gym_envs/fixedwing_envs/fixedwing_waypoints_env.py b/PyFlyt/gym_envs/fixedwing_envs/fixedwing_waypoints_env.py index d6f20980..44a02488 100644 --- a/PyFlyt/gym_envs/fixedwing_envs/fixedwing_waypoints_env.py +++ b/PyFlyt/gym_envs/fixedwing_envs/fixedwing_waypoints_env.py @@ -116,7 +116,6 @@ def reset( super().begin_reset(seed, options) self.waypoints.reset(self.env, self.np_random) self.info["num_targets_reached"] = 0 - self.distance_to_immediate = np.inf super().end_reset() return self.state, self.info @@ -165,12 +164,9 @@ def compute_state(self) -> None: axis=-1, ) - new_state["target_deltas"] = self.waypoints.distance_to_target( + new_state["target_deltas"] = self.waypoints.distance_to_targets( ang_pos, lin_pos, quaternion ) - self.distance_to_immediate = float( - np.linalg.norm(new_state["target_deltas"][0]) - ) self.state: dict[Literal["attitude", "target_deltas"], np.ndarray] = new_state @@ -180,17 +176,17 @@ def compute_term_trunc_reward(self) -> None: # bonus reward if we are not sparse if not self.sparse_reward: - self.reward += max(3.0 * self.waypoints.progress_to_target(), 0.0) - self.reward += 1.0 / self.distance_to_immediate + self.reward += max(3.0 * self.waypoints.progress_to_next_target, 0.0) + self.reward += 1.0 / self.waypoints.distance_to_next_target # target reached - if self.waypoints.target_reached(): + if self.waypoints.target_reached: self.reward = 100.0 # advance the targets self.waypoints.advance_targets() # update infos and dones - self.truncation |= self.waypoints.all_targets_reached() - self.info["env_complete"] = self.waypoints.all_targets_reached() - self.info["num_targets_reached"] = self.waypoints.num_targets_reached() + self.truncation |= self.waypoints.all_targets_reached + self.info["env_complete"] = self.waypoints.all_targets_reached + self.info["num_targets_reached"] = self.waypoints.num_targets_reached diff --git a/PyFlyt/gym_envs/quadx_envs/quadx_base_env.py b/PyFlyt/gym_envs/quadx_envs/quadx_base_env.py index 943327e0..fc406705 100644 --- a/PyFlyt/gym_envs/quadx_envs/quadx_base_env.py +++ b/PyFlyt/gym_envs/quadx_envs/quadx_base_env.py @@ -75,24 +75,30 @@ def __init__( self.auxiliary_space = spaces.Box( low=-np.inf, high=np.inf, shape=(4,), dtype=np.float64 ) - angular_rate_limit = np.pi + + # define the action space + xyz_limit = np.pi thrust_limit = 0.8 - high = np.array( - [ - angular_rate_limit, - angular_rate_limit, - angular_rate_limit, - thrust_limit, - ] - ) - low = np.array( - [ - -angular_rate_limit, - -angular_rate_limit, - -angular_rate_limit, - 0.0, - ] - ) + if flight_mode == -1: + high = np.ones((4,)) * thrust_limit + low = np.zeros((4,)) + else: + high = np.array( + [ + xyz_limit, + xyz_limit, + xyz_limit, + thrust_limit, + ] + ) + low = np.array( + [ + -xyz_limit, + -xyz_limit, + -xyz_limit, + 0.0, + ] + ) self.action_space = spaces.Box(low=low, high=high, dtype=np.float64) # the whole implicit state space = attitude + previous action + auxiliary information diff --git a/PyFlyt/gym_envs/quadx_envs/quadx_pole_balance_env.py b/PyFlyt/gym_envs/quadx_envs/quadx_pole_balance_env.py index 1acc8f04..6d5aaf28 100644 --- a/PyFlyt/gym_envs/quadx_envs/quadx_pole_balance_env.py +++ b/PyFlyt/gym_envs/quadx_envs/quadx_pole_balance_env.py @@ -13,7 +13,7 @@ class QuadXPoleBalanceEnv(QuadXBaseEnv): """Simple Hover Environment with the additional goal of keeping a pole upright. - Actions are vp, vq, vr, T, ie: angular rates and thrust. + Actions are direct motor PWM commands because any underlying controller introduces too much control latency. The target is to not crash and not let the pole hit the ground for the longest time possible. Args: @@ -32,7 +32,7 @@ class QuadXPoleBalanceEnv(QuadXBaseEnv): def __init__( self, sparse_reward: bool = False, - flight_mode: int = 0, + flight_mode: int = -1, flight_dome_size: float = 3.0, max_duration_seconds: float = 20.0, angle_representation: Literal["euler", "quaternion"] = "quaternion", @@ -45,12 +45,12 @@ def __init__( Args: ---- sparse_reward (bool): whether to use sparse rewards or not. - flight_mode (int): the flight mode of the UAV + flight_mode (int): the flight mode of the UAV. flight_dome_size (float): size of the allowable flying area. max_duration_seconds (float): maximum simulation time of the environment. angle_representation (Literal["euler", "quaternion"]): can be "euler" or "quaternion". agent_hz (int): looprate of the agent to environment interaction. - render_mode (None | Literal["human", "rgb_array"]): render_mode + render_mode (None | Literal["human", "rgb_array"]): render_mode. render_resolution (tuple[int, int]): render_resolution. """ @@ -94,7 +94,10 @@ def reset( super().begin_reset( seed, options, - drone_options={"drone_model": "primitive_drone"}, + drone_options={ + "drone_model": "primitive_drone", + "camera_position_offset": np.array([-3.0, 0.0, 1.0]), + }, ) self.pole.reset(p=self.env, start_location=np.array([0.0, 0.0, 1.55])) super().end_reset(seed, options) diff --git a/PyFlyt/gym_envs/quadx_envs/quadx_pole_waypoints_env.py b/PyFlyt/gym_envs/quadx_envs/quadx_pole_waypoints_env.py index 642c632d..07bdaf2c 100644 --- a/PyFlyt/gym_envs/quadx_envs/quadx_pole_waypoints_env.py +++ b/PyFlyt/gym_envs/quadx_envs/quadx_pole_waypoints_env.py @@ -14,7 +14,7 @@ class QuadXPoleWaypointsEnv(QuadXBaseEnv): """QuadX Pole Waypoints Environment. - Actions are vp, vq, vr, T, ie: angular rates and thrust. + Actions are direct motor PWM commands because any underlying controller introduces too much control latency. The target is to get to a set of `[x, y, z]` waypoints in space without dropping the pole. Args: @@ -37,11 +37,11 @@ def __init__( sparse_reward: bool = False, num_targets: int = 4, goal_reach_distance: float = 0.2, - flight_mode: int = 0, + flight_mode: int = -1, flight_dome_size: float = 10.0, - max_duration_seconds: float = 60.0, + max_duration_seconds: float = 20.0, angle_representation: Literal["euler", "quaternion"] = "quaternion", - agent_hz: int = 30, + agent_hz: int = 40, render_mode: None | Literal["human", "rgb_array"] = None, render_resolution: tuple[int, int] = (480, 480), ): @@ -57,12 +57,11 @@ def __init__( max_duration_seconds (float): maximum simulation time of the environment. angle_representation (Literal["euler", "quaternion"]): can be "euler" or "quaternion". agent_hz (int): looprate of the agent to environment interaction. - render_mode (None | Literal["human", "rgb_array"]): render_mode + render_mode (None | Literal["human", "rgb_array"]): render_mode. render_resolution (tuple[int, int]): render_resolution. """ super().__init__( - start_pos=np.array([[0.0, 0.0, 1.0]]), flight_mode=flight_mode, flight_dome_size=flight_dome_size, max_duration_seconds=max_duration_seconds, @@ -126,7 +125,12 @@ def reset( """ super().begin_reset( - seed, options, drone_options={"drone_model": "primitive_drone"} + seed, + options, + drone_options={ + "drone_model": "primitive_drone", + "camera_position_offset": np.array([-3.0, 0.0, 1.0]), + }, ) # spawn in a pole @@ -135,7 +139,6 @@ def reset( # init some other metadata self.waypoints.reset(self.env, self.np_random) self.info["num_targets_reached"] = 0 - self.distance_to_immediate = np.inf super().end_reset() @@ -162,10 +165,10 @@ def compute_state(self) -> None: """ # compute attitude of self ang_vel, ang_pos, lin_vel, lin_pos, quaternion = super().compute_attitude() + aux_state = super().compute_auxiliary() rotation = ( np.array(self.env.getMatrixFromQuaternion(quaternion)).reshape(3, 3).T ) - aux_state = super().compute_auxiliary() # compute the pole's states ( @@ -210,36 +213,34 @@ def compute_state(self) -> None: pole_bot_pos, pole_top_vel, pole_bot_vel, - ] + ], + axis=-1, ) - new_state["target_deltas"] = self.waypoints.distance_to_target( + new_state["target_deltas"] = self.waypoints.distance_to_targets( ang_pos, lin_pos, quaternion ) - self.distance_to_immediate = float( - np.linalg.norm(new_state["target_deltas"][0]) - ) self.state: dict[Literal["attitude", "target_deltas"], np.ndarray] = new_state def compute_term_trunc_reward(self) -> None: - """Computes the termination, trunction, and reward of the current timestep.""" + """Computes the termination, truncation, and reward of the current timestep.""" super().compute_base_term_trunc_reward() # bonus reward if we are not sparse if not self.sparse_reward: - self.reward += max(3.0 * self.waypoints.progress_to_target(), 0.0) - self.reward += 0.1 / self.distance_to_immediate - self.reward -= self.pole.leaningness + self.reward += max(15.0 * self.waypoints.progress_to_next_target, 0.0) + self.reward += 0.5 / self.waypoints.distance_to_next_target + self.reward += (0.5 - self.pole.leaningness) # target reached - if self.waypoints.target_reached(): - self.reward = 100.0 + if self.waypoints.target_reached: + self.reward = 300.0 # advance the targets self.waypoints.advance_targets() # update infos and dones - self.truncation |= self.waypoints.all_targets_reached() - self.info["env_complete"] = self.waypoints.all_targets_reached() - self.info["num_targets_reached"] = self.waypoints.num_targets_reached() + self.truncation |= self.waypoints.all_targets_reached + self.info["env_complete"] = self.waypoints.all_targets_reached + self.info["num_targets_reached"] = self.waypoints.num_targets_reached diff --git a/PyFlyt/gym_envs/quadx_envs/quadx_waypoints_env.py b/PyFlyt/gym_envs/quadx_envs/quadx_waypoints_env.py index bea5d98e..dd565da7 100644 --- a/PyFlyt/gym_envs/quadx_envs/quadx_waypoints_env.py +++ b/PyFlyt/gym_envs/quadx_envs/quadx_waypoints_env.py @@ -122,7 +122,6 @@ def reset( super().begin_reset(seed, options) self.waypoints.reset(self.env, self.np_random) self.info["num_targets_reached"] = 0 - self.distance_to_immediate = np.inf super().end_reset() return self.state, self.info @@ -171,12 +170,9 @@ def compute_state(self) -> None: axis=-1, ) - new_state["target_deltas"] = self.waypoints.distance_to_target( + new_state["target_deltas"] = self.waypoints.distance_to_targets( ang_pos, lin_pos, quaternion ) - self.distance_to_immediate = float( - np.linalg.norm(new_state["target_deltas"][0]) - ) self.state: dict[Literal["attitude", "target_deltas"], np.ndarray] = new_state @@ -186,17 +182,17 @@ def compute_term_trunc_reward(self) -> None: # bonus reward if we are not sparse if not self.sparse_reward: - self.reward += max(3.0 * self.waypoints.progress_to_target(), 0.0) - self.reward += 0.1 / self.distance_to_immediate + self.reward += max(3.0 * self.waypoints.progress_to_next_target, 0.0) + self.reward += 0.1 / self.waypoints.distance_to_next_target # target reached - if self.waypoints.target_reached(): + if self.waypoints.target_reached: self.reward = 100.0 # advance the targets self.waypoints.advance_targets() # update infos and dones - self.truncation |= self.waypoints.all_targets_reached() - self.info["env_complete"] = self.waypoints.all_targets_reached() - self.info["num_targets_reached"] = self.waypoints.num_targets_reached() + self.truncation |= self.waypoints.all_targets_reached + self.info["env_complete"] = self.waypoints.all_targets_reached + self.info["num_targets_reached"] = self.waypoints.num_targets_reached diff --git a/PyFlyt/gym_envs/utils/pole_handler.py b/PyFlyt/gym_envs/utils/pole_handler.py index e2df09ca..f6a62d4b 100644 --- a/PyFlyt/gym_envs/utils/pole_handler.py +++ b/PyFlyt/gym_envs/utils/pole_handler.py @@ -61,7 +61,7 @@ def reset( def leaningness(self) -> float: """The lean of the pole, minimum of 0.0 and maximum of 1.0. - Returns + Returns: ------- float: diff --git a/PyFlyt/gym_envs/utils/waypoint_handler.py b/PyFlyt/gym_envs/utils/waypoint_handler.py index 2feb64d7..cb40deca 100644 --- a/PyFlyt/gym_envs/utils/waypoint_handler.py +++ b/PyFlyt/gym_envs/utils/waypoint_handler.py @@ -64,8 +64,8 @@ def reset( self.np_random = np_random # reset the error - self.new_distance = 0.0 - self.old_distance = 0.0 + self.new_distance = np.inf + self.old_distance = np.inf # we sample from polar coordinates to generate linear targets self.targets = np.zeros(shape=(self.num_targets, 3)) @@ -108,16 +108,26 @@ def reset( rgbaColor=(0, 1 - (i / len(self.target_visual)), 0, 1), ) - def distance_to_target( + @property + def distance_to_next_target(self) -> float: + """distance_to_next_target. + + Returns: + --- + float: + """ + return self.new_distance + + def distance_to_targets( self, ang_pos: np.ndarray, lin_pos: np.ndarray, quaternion: np.ndarray, ): - """distance_to_target. + """distance_to_targets. Args: - ---- + --- ang_pos (np.ndarray): ang_pos lin_pos (np.ndarray): lin_pos quaternion (np.ndarray): quaternion @@ -149,10 +159,14 @@ def distance_to_target( return target_deltas - def progress_to_target(self): + @property + def progress_to_next_target(self): """progress_to_target.""" + if np.any(np.isinf(self.old_distance + self.new_distance)): + return 0.0 return self.old_distance - self.new_distance + @property def target_reached(self): """target_reached.""" if not self.new_distance < self.goal_reach_distance: @@ -190,10 +204,12 @@ def advance_targets(self): rgbaColor=(0, 1 - (i / len(self.target_visual)), 0, 1), ) + @property def num_targets_reached(self): """num_targets_reached.""" return self.num_targets - len(self.targets) + @property def all_targets_reached(self): """all_targets_reached.""" return len(self.targets) == 0 diff --git a/PyFlyt/pz_envs/fixedwing_envs/ma_fixedwing_base_env.py b/PyFlyt/pz_envs/fixedwing_envs/ma_fixedwing_base_env.py index f6ae36dc..b11838dd 100644 --- a/PyFlyt/pz_envs/fixedwing_envs/ma_fixedwing_base_env.py +++ b/PyFlyt/pz_envs/fixedwing_envs/ma_fixedwing_base_env.py @@ -134,7 +134,7 @@ def __init__( def observation_space(self, agent: Any = None) -> Space: """observation_space. - Returns + Returns: ------- Space: @@ -144,7 +144,7 @@ def observation_space(self, agent: Any = None) -> Space: def action_space(self, agent: Any = None) -> spaces.Box: """action_space. - Returns + Returns: ------- spaces.Box: diff --git a/PyFlyt/pz_envs/fixedwing_envs/ma_fixedwing_dogfight_env.py b/PyFlyt/pz_envs/fixedwing_envs/ma_fixedwing_dogfight_env.py index 1425e216..348a832f 100644 --- a/PyFlyt/pz_envs/fixedwing_envs/ma_fixedwing_dogfight_env.py +++ b/PyFlyt/pz_envs/fixedwing_envs/ma_fixedwing_dogfight_env.py @@ -178,7 +178,7 @@ def reset( def _compute_agent_states(self) -> None: """_compute_agent_states. - Returns + Returns: ------- None: diff --git a/docs/_sources/documentation/gym_envs/quadx_pole_balance_env.md.txt b/docs/_sources/documentation/gym_envs/quadx_pole_balance_env.md.txt index 018067b2..be13772a 100644 --- a/docs/_sources/documentation/gym_envs/quadx_pole_balance_env.md.txt +++ b/docs/_sources/documentation/gym_envs/quadx_pole_balance_env.md.txt @@ -1,6 +1,6 @@ # `PyFlyt/QuadX-Pole-Balance-v2` -```{figure} https://raw.githubusercontent.com/jjshoots/PyFlyt/master/readme_assets/pole_balance.gif +```{figure} https://raw.githubusercontent.com/jjshoots/PyFlyt/master/readme_assets/quadx_pole_balance.gif :width: 50% ``` diff --git a/docs/_sources/documentation/gym_envs/quadx_pole_waypoints_env.md.txt b/docs/_sources/documentation/gym_envs/quadx_pole_waypoints_env.md.txt index a318794d..aa196539 100644 --- a/docs/_sources/documentation/gym_envs/quadx_pole_waypoints_env.md.txt +++ b/docs/_sources/documentation/gym_envs/quadx_pole_waypoints_env.md.txt @@ -1,6 +1,6 @@ # `PyFlyt/QuadX-Pole-Waypoints-v2` -```{figure} https://raw.githubusercontent.com/jjshoots/PyFlyt/master/readme_assets/quadx_waypoint.gif +```{figure} https://raw.githubusercontent.com/jjshoots/PyFlyt/master/readme_assets/quadx_pole_waypoint.gif :width: 50% ``` diff --git a/docs/documentation/core/abstractions/boosters.html b/docs/documentation/core/abstractions/boosters.html index fa803fbe..30776569 100644 --- a/docs/documentation/core/abstractions/boosters.html +++ b/docs/documentation/core/abstractions/boosters.html @@ -452,14 +452,12 @@
np.ndarray
-A (3 * num_boosters, ) array
-++np.ndarray: A (3 * num_boosters, ) array
+
Captures the 3 relevant images from the camera.
-tuple[np.ndarray, np.ndarray, np.ndarray]
-rgbaImg, depthImg, segImg
-++tuple[np.ndarray, np.ndarray, np.ndarray]: rgbaImg, depthImg, segImg
+
Generates the view matrix for the camera depending on the current orientation and implicit parameters.
-np.ndarray
-view matrix.
-++np.ndarray: view matrix.
+
Gets the current state of the components.
-np.ndarray
-a (2 * num_gimbals, ) array where every pair of values represents the current state of the gimbal
-++np.ndarray: a (2 * num_gimbals, ) array where every pair of values represents the current state of the gimbal
+
Gets the current state of the components.
-float
-the level of deflection of the surface.
-++float: the level of deflection of the surface.
+
cmd (float): normalized actuation in [-1, 1].
-@@ -470,8 +468,8 @@tuple[np.ndarray, np.ndarray]: vec3 force, vec3 torque
Updates the local surface velocity of the lifting surface.
-@@ -496,14 +494,12 @@surface_velocity (np.ndarray): surface_velocity.
Gets the current state of the components.
-np.ndarray
-a (num_surfaces, ) array representing the actuation state for each surface
-++np.ndarray: a (num_surfaces, ) array representing the actuation state for each surface
+
Gets the current state of the components.
-np.ndarray
-an (num_motors, ) array for the current throttle level of each motor
-++np.ndarray: an (num_motors, ) array for the current throttle level of each motor
+
np.ndarray
-list of states
-++np.ndarray: list of states
+
np.ndarray
-list of auxiliary states
-++np.ndarray: list of auxiliary states
+
QuadX instance that handles everything about a quadrotor in the X configuration.
PyFlyt/QuadX-Pole-Balance-v2
#Simple Hover Environment with the additional goal of keeping a pole upright.
-Actions are vp, vq, vr, T, ie: angular rates and thrust. +
Actions are direct motor PWM commands because any underlying controller introduces too much control latency. The target is to not crash and not let the pole hit the ground for the longest time possible.
PyFlyt/QuadX-Pole-Waypoints-v2
#QuadX Pole Waypoints Environment.
-Actions are vp, vq, vr, T, ie: angular rates and thrust. +
Actions are direct motor PWM commands because any underlying controller introduces too much control latency. The target is to get to a set of [x, y, z] waypoints in space without dropping the pole.
PyFlyt/Fixedwing-Waypoints-v2
", "PyFlyt/QuadX-Hover-v2
", "PyFlyt/QuadX-Pole-Balance-v2
", "PyFlyt/QuadX-Pole-Waypoints-v2
", "PyFlyt/QuadX-Waypoints-v2
", "PyFlyt/Rocket-Landing-v2
", "PettingZoo Environments", "MAFixedwingDogfightEnv
", "MAQuadXHoverEnv
", "PyFlyt - UAV Simulation Environments for Reinforcement Learning Research", "Paper Publication", "Tutorials"], "titleterms": {"abstract": 2, "access": 10, "api": [1, 10], "architectur": 1, "arg": [3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 24, 25], "attribut": [3, 10, 15], "aviari": 10, "axi": 1, "balanc": 19, "base": 3, "bodi": 5, "booster": 4, "bore": 5, "camera": 6, "citat": 27, "class": [3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "complex": 15, "control": [10, 12, 13, 14], "convent": 1, "core": [1, 10], "custom": [10, 15], "default": [3, 15], "descript": [2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 24, 25, 26], "do": 0, "document": 0, "drone": [3, 10, 11], "environ": [0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "exampl": 10, "fixedw": [12, 17], "flatten": [17, 20, 21], "gener": 1, "gimbal": 7, "gymnasium": [0, 16], "hover": 18, "i": 0, "individu": 10, "instal": 0, "land": 22, "learn": 26, "lift": 8, "linux": 0, "looprat": 10, "maco": 0, "mafixedwingdogfightenv": 24, "maquadxhoverenv": 25, "mathemat": 8, "method": [3, 10, 15], "mode": [12, 13, 14], "model": [8, 12, 13, 14, 15], "more": [0, 15], "motor": 9, "multi": 10, "option": [3, 10, 17, 18, 19, 20, 21, 22, 24, 25], "overview": [11, 15], "paper": 27, "pettingzoo": [0, 23], "physic": 10, "pole": [19, 20], "preimplement": 15, "preprint": 27, "public": 27, "pyflyt": [17, 18, 19, 20, 21, 22, 26], "quadx": [13, 18, 19, 20, 21], "reinforc": 26, "requir": [3, 15], "research": 26, "return": [7, 8, 10], "rocket": [14, 22], "rule": 24, "set": 10, "setup": 10, "simpl": 15, "simul": 26, "singl": 10, "spawn": 10, "step": 10, "surfac": 8, "task": [17, 18, 19, 20, 21, 22, 24, 25], "tutori": 28, "type": 10, "uav": 26, "usag": [2, 10, 17, 18, 19, 20, 21, 22, 24, 25], "v2": [17, 18, 19, 20, 21, 22], "variant": 13, "want": 0, "waypoint": [17, 20, 21], "wind": 15, "window": 0}})
\ No newline at end of file
+Search.setIndex({"alltitles": {"Abstractions": [[2, "abstractions"]], "Accessing Individual Drones": [[10, "accessing-individual-drones"]], "Args:": [[3, "args"], [3, "args"], [4, "args"], [4, "id1"], [4, "id2"], [5, "args"], [5, "id1"], [6, "args"], [7, "args"], [7, "id1"], [8, "args"], [8, "id1"], [8, "id3"], [8, "args"], [8, "id1"], [8, "id2"], [9, "args"], [9, "id1"], [10, "args"], [10, "args"], [10, "id1"], [10, "id2"], [10, "id4"], [10, "id5"], [10, "id6"], [10, "id7"], [12, "args"], [12, "id1"], [12, "id2"], [13, "args"], [13, "id1"], [13, "id2"], [13, "id3"], [14, "args"], [14, "id1"], [14, "id2"], [17, "args"], [18, "args"], [19, "args"], [20, "args"], [21, "args"], [22, "args"], [24, "args"], [25, "args"]], "Attributes": [[10, "attributes"]], "Aviary": [[10, "aviary"]], "Axis Conventions": [[1, "axis-conventions"]], "Base Drone Class": [[3, "base-drone-class"]], "Boosters": [[4, "boosters"]], "Boring Bodies": [[5, "boring-bodies"]], "Camera": [[6, "camera"]], "Citation": [[27, "citation"]], "Class Description": [[3, "class-description"], [4, "class-description"], [5, "class-description"], [6, "class-description"], [7, "class-description"], [8, "class-description"], [9, "class-description"], [10, "class-description"], [12, "class-description"], [13, "class-description"], [14, "class-description"]], "Control Mode": [[12, "control-mode"], [14, "control-mode"]], "Control Modes": [[13, "control-modes"]], "Controlling Drone Types": [[10, "controlling-drone-types"]], "Core": [[1, "core"]], "Core API": [[1, "core-api"]], "Core API Example": [[10, "core-api-example"]], "Default Attributes": [[3, "default-attributes"], [15, "default-attributes"]], "Default Methods": [[3, "default-methods"]], "Description": [[2, "description"], [4, "description"], [5, "description"], [6, "description"], [7, "description"], [8, "description"], [9, "description"], [10, "description"], [26, "description"]], "Documentation": [[0, "documentation"]], "Drones": [[11, "drones"]], "Environment Options": [[17, "environment-options"], [18, "environment-options"], [19, "environment-options"], [20, "environment-options"], [21, "environment-options"], [22, "environment-options"], [24, "environment-options"], [25, "environment-options"]], "Environment Rules": [[24, "environment-rules"]], "Fixedwing": [[12, "fixedwing"]], "Flattening the Environment": [[17, "flattening-the-environment"], [20, "flattening-the-environment"], [21, "flattening-the-environment"]], "General Architecture": [[1, "general-architecture"]], "Gimbals": [[7, "gimbals"]], "Gymnasium Environments": [[0, "gymnasium-environments"], [16, "gymnasium-environments"]], "I want to do more!": [[0, "i-want-to-do-more"]], "Installation": [[0, "installation"]], "Lifting Surfaces": [[8, "lifting-surfaces"]], "Linux and MacOS": [[0, "linux-and-macos"]], "Looprates": [[10, "looprates"]], "MAFixedwingDogfightEnv": [[24, "mafixedwingdogfightenv"]], "MAQuadXHoverEnv": [[25, "maquadxhoverenv"]], "Mathematical Model": [[8, "mathematical-model"]], "Methods": [[10, "methods"]], "Model Description": [[12, "model-description"], [13, "model-description"], [14, "model-description"]], "More Complex Custom Wind Modelling": [[15, "more-complex-custom-wind-modelling"]], "Motors": [[9, "motors"]], "Multi Drone Physics Stepping": [[10, "multi-drone-physics-stepping"]], "Multi Drone Setup": [[10, "multi-drone-setup"]], "Optional Attributes": [[3, "optional-attributes"]], "Optional Methods": [[3, "optional-methods"]], "Overview": [[11, "overview"], [15, "overview"]], "Paper Publication": [[27, "paper-publication"]], "PettingZoo Environments": [[0, "pettingzoo-environments"], [23, "pettingzoo-environments"]], "Preimplemented Wind Models": [[15, "preimplemented-wind-models"]], "Preprint": [[27, "preprint"]], "PyFlyt - UAV Simulation Environments for Reinforcement Learning Research": [[26, "pyflyt-uav-simulation-environments-for-reinforcement-learning-research"]], "PyFlyt/Fixedwing-Waypoints-v2": [[17, "pyflyt-fixedwing-waypoints-v2"]], "PyFlyt/QuadX-Hover-v2": [[18, "pyflyt-quadx-hover-v2"]], "PyFlyt/QuadX-Pole-Balance-v2": [[19, "pyflyt-quadx-pole-balance-v2"]], "PyFlyt/QuadX-Pole-Waypoints-v2": [[20, "pyflyt-quadx-pole-waypoints-v2"]], "PyFlyt/QuadX-Waypoints-v2": [[21, "pyflyt-quadx-waypoints-v2"]], "PyFlyt/Rocket-Landing-v2": [[22, "pyflyt-rocket-landing-v2"]], "QuadX": [[13, "quadx"]], "Required Attributes": [[3, "required-attributes"]], "Required Methods": [[3, "required-methods"], [15, "required-methods"]], "Returns:": [[4, "returns"], [6, "returns"], [6, "id1"], [7, "returns"], [7, "id2"], [8, "returns"], [8, "id2"], [8, "returns"], [9, "returns"], [10, "returns"], [10, "id1"], [10, "returns"], [10, "id3"]], "Rocket": [[14, "rocket"]], "Setting Drone Options": [[10, "setting-drone-options"]], "Simple Custom Wind Modelling": [[15, "simple-custom-wind-modelling"]], "Single Drone Physics Stepping": [[10, "single-drone-physics-stepping"]], "Spawning Custom Drones": [[10, "spawning-custom-drones"]], "Task Description": [[17, "task-description"], [18, "task-description"], [19, "task-description"], [20, "task-description"], [21, "task-description"], [22, "task-description"], [24, "task-description"], [25, "task-description"]], "Tutorials": [[28, "tutorials"]], "Usage": [[2, "usage"], [10, "usage"], [17, "usage"], [18, "usage"], [19, "usage"], [20, "usage"], [21, "usage"], [22, "usage"], [24, "usage"], [25, "usage"]], "Variants": [[13, "variants"]], "Wind": [[15, "wind"]], "Windows": [[0, "windows"]]}, "docnames": ["documentation", "documentation/core", "documentation/core/abstractions", "documentation/core/abstractions/base_drone", "documentation/core/abstractions/boosters", "documentation/core/abstractions/boring_bodies", "documentation/core/abstractions/camera", "documentation/core/abstractions/gimbals", "documentation/core/abstractions/lifting_surfaces", "documentation/core/abstractions/motors", "documentation/core/aviary", "documentation/core/drones", "documentation/core/drones/fixedwing", "documentation/core/drones/quadx", "documentation/core/drones/rocket", "documentation/core/wind", "documentation/gym_envs", "documentation/gym_envs/fixedwing_waypoints_env", "documentation/gym_envs/quadx_hover_env", "documentation/gym_envs/quadx_pole_balance_env", "documentation/gym_envs/quadx_pole_waypoints_env", "documentation/gym_envs/quadx_waypoints_env", "documentation/gym_envs/rocket_landing_env", "documentation/pz_envs", "documentation/pz_envs/ma_fixedwing_dogfight_env", "documentation/pz_envs/ma_quadx_hover_env", "index", "paper", "tutorials"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["documentation.md", "documentation/core.md", "documentation/core/abstractions.md", "documentation/core/abstractions/base_drone.md", "documentation/core/abstractions/boosters.md", "documentation/core/abstractions/boring_bodies.md", "documentation/core/abstractions/camera.md", "documentation/core/abstractions/gimbals.md", "documentation/core/abstractions/lifting_surfaces.md", "documentation/core/abstractions/motors.md", "documentation/core/aviary.md", "documentation/core/drones.md", "documentation/core/drones/fixedwing.md", "documentation/core/drones/quadx.md", "documentation/core/drones/rocket.md", "documentation/core/wind.md", "documentation/gym_envs.md", "documentation/gym_envs/fixedwing_waypoints_env.md", "documentation/gym_envs/quadx_hover_env.md", "documentation/gym_envs/quadx_pole_balance_env.md", "documentation/gym_envs/quadx_pole_waypoints_env.md", "documentation/gym_envs/quadx_waypoints_env.md", "documentation/gym_envs/rocket_landing_env.md", "documentation/pz_envs.md", "documentation/pz_envs/ma_fixedwing_dogfight_env.md", "documentation/pz_envs/ma_quadx_hover_env.md", "index.md", "paper.md", "tutorials.md"], "indexentries": {"__call__() (in module pyflyt.core.abstractions.droneclass)": [[15, "PyFlyt.core.abstractions.DroneClass.__call__", false]], "__init__() (in module pyflyt.core.abstractions.windfieldclass)": [[15, "PyFlyt.core.abstractions.WindFieldClass.__init__", false]], "all_aux_states (pyflyt.core.aviary property)": [[10, "PyFlyt.core.Aviary.all_aux_states", false]], "all_states (pyflyt.core.aviary property)": [[10, "PyFlyt.core.Aviary.all_states", false]], "aux_state (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.aux_state", false]], "aux_state() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.aux_state", false]], "aviary (class in pyflyt.core)": [[10, "PyFlyt.core.Aviary", false]], "aviary_steps (pyflyt.core.aviary property)": [[10, "PyFlyt.core.Aviary.aviary_steps", false]], "boosters (class in pyflyt.core.abstractions)": [[4, "PyFlyt.core.abstractions.Boosters", false]], "boringbodies (class in pyflyt.core.abstractions)": [[5, "PyFlyt.core.abstractions.BoringBodies", false]], "camera (class in pyflyt.core.abstractions)": [[6, "PyFlyt.core.abstractions.Camera", false]], "capture_image() (pyflyt.core.abstractions.camera method)": [[6, "PyFlyt.core.abstractions.Camera.capture_image", false]], "compute_rotation() (pyflyt.core.abstractions.gimbals method)": [[7, "PyFlyt.core.abstractions.Gimbals.compute_rotation", false]], "contact_array (pyflyt.core.aviary property)": [[10, "PyFlyt.core.Aviary.contact_array", false]], "control_period (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.control_period", false]], "depthimg (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.depthImg", false]], "disable_artificial_damping() (in module pyflyt.core.abstractions.droneclass)": [[3, "PyFlyt.core.abstractions.DroneClass.disable_artificial_damping", false]], "drone_path (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.drone_path", false]], "droneclass (class in pyflyt.core.abstractions)": [[3, "PyFlyt.core.abstractions.DroneClass", false]], "drones (pyflyt.core.aviary property)": [[10, "PyFlyt.core.Aviary.drones", false]], "elapsed_ime (pyflyt.core.aviary property)": [[10, "PyFlyt.core.Aviary.elapsed_ime", false]], "fixedwing (class in pyflyt.core.drones)": [[12, "PyFlyt.core.drones.Fixedwing", false]], "fixedwingwaypointsenv (class in pyflyt.gym_envs.fixedwing_envs.fixedwing_waypoints_env)": [[17, "PyFlyt.gym_envs.fixedwing_envs.fixedwing_waypoints_env.FixedwingWaypointsEnv", false]], "get_joint_info() (in module pyflyt.core.abstractions.droneclass)": [[3, "PyFlyt.core.abstractions.DroneClass.get_joint_info", false]], "get_states() (pyflyt.core.abstractions.boosters method)": [[4, "PyFlyt.core.abstractions.Boosters.get_states", false]], "get_states() (pyflyt.core.abstractions.boringbodies method)": [[5, "PyFlyt.core.abstractions.BoringBodies.get_states", false]], "get_states() (pyflyt.core.abstractions.camera method)": [[6, "PyFlyt.core.abstractions.Camera.get_states", false]], "get_states() (pyflyt.core.abstractions.gimbals method)": [[7, "PyFlyt.core.abstractions.Gimbals.get_states", false]], "get_states() (pyflyt.core.abstractions.liftingsurface method)": [[8, "PyFlyt.core.abstractions.LiftingSurface.get_states", false]], "get_states() (pyflyt.core.abstractions.liftingsurfaces method)": [[8, "PyFlyt.core.abstractions.LiftingSurfaces.get_states", false]], "get_states() (pyflyt.core.abstractions.motors.motors method)": [[9, "PyFlyt.core.abstractions.motors.Motors.get_states", false]], "gimbals (class in pyflyt.core.abstractions)": [[7, "PyFlyt.core.abstractions.Gimbals", false]], "id (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.Id", false]], "instanced_controllers (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.instanced_controllers", false]], "liftingsurface (class in pyflyt.core.abstractions)": [[8, "PyFlyt.core.abstractions.LiftingSurface", false]], "liftingsurfaces (class in pyflyt.core.abstractions)": [[8, "PyFlyt.core.abstractions.LiftingSurfaces", false]], "mafixedwingdogfightenv (class in pyflyt.pz_envs.fixedwing_envs.ma_fixedwing_dogfight_env)": [[24, "PyFlyt.pz_envs.fixedwing_envs.ma_fixedwing_dogfight_env.MAFixedwingDogfightEnv", false]], "maquadxhoverenv (class in pyflyt.pz_envs.quadx_envs.ma_quadx_hover_env)": [[25, "PyFlyt.pz_envs.quadx_envs.ma_quadx_hover_env.MAQuadXHoverEnv", false]], "motors (class in pyflyt.core.abstractions.motors)": [[9, "PyFlyt.core.abstractions.motors.Motors", false]], "np_random (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.np_random", false]], "np_random (pyflyt.core.abstractions.windfieldclass property)": [[15, "PyFlyt.core.abstractions.WindFieldClass.np_random", false]], "param_path (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.param_path", false]], "physics_period (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.physics_period", false]], "physics_steps (pyflyt.core.aviary property)": [[10, "PyFlyt.core.Aviary.physics_steps", false]], "physics_update() (pyflyt.core.abstractions.boosters method)": [[4, "PyFlyt.core.abstractions.Boosters.physics_update", false]], "physics_update() (pyflyt.core.abstractions.boringbodies method)": [[5, "PyFlyt.core.abstractions.BoringBodies.physics_update", false]], "physics_update() (pyflyt.core.abstractions.camera method)": [[6, "PyFlyt.core.abstractions.Camera.physics_update", false]], "physics_update() (pyflyt.core.abstractions.gimbals method)": [[7, "PyFlyt.core.abstractions.Gimbals.physics_update", false]], "physics_update() (pyflyt.core.abstractions.liftingsurface method)": [[8, "PyFlyt.core.abstractions.LiftingSurface.physics_update", false]], "physics_update() (pyflyt.core.abstractions.liftingsurfaces method)": [[8, "PyFlyt.core.abstractions.LiftingSurfaces.physics_update", false]], "physics_update() (pyflyt.core.abstractions.motors.motors method)": [[9, "PyFlyt.core.abstractions.motors.Motors.physics_update", false]], "print_all_bodies() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.print_all_bodies", false]], "quadx (class in pyflyt.core.drones)": [[13, "PyFlyt.core.drones.QuadX", false]], "quadxhoverenv (class in pyflyt.gym_envs.quadx_envs.quadx_hover_env)": [[18, "PyFlyt.gym_envs.quadx_envs.quadx_hover_env.QuadXHoverEnv", false]], "quadxpolebalanceenv (class in pyflyt.gym_envs.quadx_envs.quadx_pole_balance_env)": [[19, "PyFlyt.gym_envs.quadx_envs.quadx_pole_balance_env.QuadXPoleBalanceEnv", false]], "quadxpolewaypointsenv (class in pyflyt.gym_envs.quadx_envs.quadx_pole_waypoints_env)": [[20, "PyFlyt.gym_envs.quadx_envs.quadx_pole_waypoints_env.QuadXPoleWaypointsEnv", false]], "quadxwaypointsenv (class in pyflyt.gym_envs.quadx_envs.quadx_waypoints_env)": [[21, "PyFlyt.gym_envs.quadx_envs.quadx_waypoints_env.QuadXWaypointsEnv", false]], "register_all_new_bodies() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.register_all_new_bodies", false]], "register_controller() (in module pyflyt.core.abstractions.droneclass)": [[3, "PyFlyt.core.abstractions.DroneClass.register_controller", false]], "register_controller() (pyflyt.core.drones.quadx method)": [[13, "PyFlyt.core.drones.QuadX.register_controller", false]], "registered_base_controllers (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.registered_base_controllers", false]], "registered_controllers (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.registered_controllers", false]], "reset() (in module pyflyt.core.abstractions.droneclass)": [[3, "PyFlyt.core.abstractions.DroneClass.reset", false]], "reset() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.reset", false]], "reset() (pyflyt.core.abstractions.boosters method)": [[4, "PyFlyt.core.abstractions.Boosters.reset", false]], "reset() (pyflyt.core.abstractions.boringbodies method)": [[5, "PyFlyt.core.abstractions.BoringBodies.reset", false]], "reset() (pyflyt.core.abstractions.gimbals method)": [[7, "PyFlyt.core.abstractions.Gimbals.reset", false]], "reset() (pyflyt.core.abstractions.liftingsurface method)": [[8, "PyFlyt.core.abstractions.LiftingSurface.reset", false]], "reset() (pyflyt.core.abstractions.liftingsurfaces method)": [[8, "PyFlyt.core.abstractions.LiftingSurfaces.reset", false]], "reset() (pyflyt.core.abstractions.motors.motors method)": [[9, "PyFlyt.core.abstractions.motors.Motors.reset", false]], "reset() (pyflyt.core.drones.fixedwing method)": [[12, "PyFlyt.core.drones.Fixedwing.reset", false]], "reset() (pyflyt.core.drones.quadx method)": [[13, "PyFlyt.core.drones.QuadX.reset", false]], "reset() (pyflyt.core.drones.rocket method)": [[14, "PyFlyt.core.drones.Rocket.reset", false]], "rgbaimg (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.rgbaImg", false]], "rocket (class in pyflyt.core.drones)": [[14, "PyFlyt.core.drones.Rocket", false]], "rocketlandingenv (class in pyflyt.gym_envs.rocket_envs.rocket_landing_env)": [[22, "PyFlyt.gym_envs.rocket_envs.rocket_landing_env.RocketLandingEnv", false]], "segimg (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.segImg", false]], "set_all_setpoints() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.set_all_setpoints", false]], "set_armed() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.set_armed", false]], "set_mode() (in module pyflyt.core.abstractions.droneclass)": [[3, "PyFlyt.core.abstractions.DroneClass.set_mode", false]], "set_mode() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.set_mode", false]], "set_mode() (pyflyt.core.drones.fixedwing method)": [[12, "PyFlyt.core.drones.Fixedwing.set_mode", false]], "set_mode() (pyflyt.core.drones.quadx method)": [[13, "PyFlyt.core.drones.QuadX.set_mode", false]], "set_mode() (pyflyt.core.drones.rocket method)": [[14, "PyFlyt.core.drones.Rocket.set_mode", false]], "set_setpoint() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.set_setpoint", false]], "setpoint (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.setpoint", false]], "starting_fuel_ratio (pyflyt.core.drones.rocket attribute)": [[14, "PyFlyt.core.drones.Rocket.starting_fuel_ratio", false]], "starting_velocity (pyflyt.core.drones.fixedwing attribute)": [[12, "PyFlyt.core.drones.Fixedwing.starting_velocity", false]], "state (pyflyt.core.abstractions.droneclass property)": [[3, "PyFlyt.core.abstractions.DroneClass.state", false]], "state() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.state", false]], "state_update() (pyflyt.core.abstractions.boosters method)": [[4, "PyFlyt.core.abstractions.Boosters.state_update", false]], "state_update() (pyflyt.core.abstractions.boringbodies method)": [[5, "PyFlyt.core.abstractions.BoringBodies.state_update", false]], "state_update() (pyflyt.core.abstractions.camera method)": [[6, "PyFlyt.core.abstractions.Camera.state_update", false]], "state_update() (pyflyt.core.abstractions.gimbals method)": [[7, "PyFlyt.core.abstractions.Gimbals.state_update", false]], "state_update() (pyflyt.core.abstractions.liftingsurface method)": [[8, "PyFlyt.core.abstractions.LiftingSurface.state_update", false]], "state_update() (pyflyt.core.abstractions.liftingsurfaces method)": [[8, "PyFlyt.core.abstractions.LiftingSurfaces.state_update", false]], "state_update() (pyflyt.core.abstractions.motors.motors method)": [[9, "PyFlyt.core.abstractions.motors.Motors.state_update", false]], "step() (in module pyflyt.core.aviary)": [[10, "PyFlyt.core.Aviary.step", false]], "update_control() (in module pyflyt.core.abstractions.droneclass)": [[3, "PyFlyt.core.abstractions.DroneClass.update_control", false]], "update_control() (pyflyt.core.drones.fixedwing method)": [[12, "PyFlyt.core.drones.Fixedwing.update_control", false]], "update_control() (pyflyt.core.drones.quadx method)": [[13, "PyFlyt.core.drones.QuadX.update_control", false]], "update_control() (pyflyt.core.drones.rocket method)": [[14, "PyFlyt.core.drones.Rocket.update_control", false]], "update_last() (in module pyflyt.core.abstractions.droneclass)": [[3, "PyFlyt.core.abstractions.DroneClass.update_last", false]], "update_last() (pyflyt.core.drones.fixedwing method)": [[12, "PyFlyt.core.drones.Fixedwing.update_last", false]], "update_last() (pyflyt.core.drones.quadx method)": [[13, "PyFlyt.core.drones.QuadX.update_last", false]], "update_last() (pyflyt.core.drones.rocket method)": [[14, "PyFlyt.core.drones.Rocket.update_last", false]], "update_physics() (in module pyflyt.core.abstractions.droneclass)": [[3, "PyFlyt.core.abstractions.DroneClass.update_physics", false]], "update_physics() (pyflyt.core.drones.fixedwing method)": [[12, "PyFlyt.core.drones.Fixedwing.update_physics", false]], "update_physics() (pyflyt.core.drones.quadx method)": [[13, "PyFlyt.core.drones.QuadX.update_physics", false]], "update_physics() (pyflyt.core.drones.rocket method)": [[14, "PyFlyt.core.drones.Rocket.update_physics", false]], "update_state() (in module pyflyt.core.abstractions.droneclass)": [[3, "PyFlyt.core.abstractions.DroneClass.update_state", false]], "update_state() (pyflyt.core.drones.fixedwing method)": [[12, "PyFlyt.core.drones.Fixedwing.update_state", false]], "update_state() (pyflyt.core.drones.quadx method)": [[13, "PyFlyt.core.drones.QuadX.update_state", false]], "update_state() (pyflyt.core.drones.rocket method)": [[14, "PyFlyt.core.drones.Rocket.update_state", false]], "view_mat (pyflyt.core.abstractions.camera property)": [[6, "PyFlyt.core.abstractions.Camera.view_mat", false]], "windfieldclass (class in pyflyt.core.abstractions)": [[15, "PyFlyt.core.abstractions.WindFieldClass", false]]}, "objects": {"PyFlyt.core": [[10, 0, 1, "", "Aviary"]], "PyFlyt.core.Aviary": [[10, 1, 1, "", "all_aux_states"], [10, 1, 1, "", "all_states"], [10, 2, 1, "", "aux_state"], [10, 1, 1, "", "aviary_steps"], [10, 1, 1, "", "contact_array"], [10, 1, 1, "", "drones"], [10, 1, 1, "", "elapsed_ime"], [10, 1, 1, "", "physics_steps"], [10, 2, 1, "", "print_all_bodies"], [10, 2, 1, "", "register_all_new_bodies"], [10, 2, 1, "", "reset"], [10, 2, 1, "", "set_all_setpoints"], [10, 2, 1, "", "set_armed"], [10, 2, 1, "", "set_mode"], [10, 2, 1, "", "set_setpoint"], [10, 2, 1, "", "state"], [10, 2, 1, "", "step"]], "PyFlyt.core.abstractions": [[4, 0, 1, "", "Boosters"], [5, 0, 1, "", "BoringBodies"], [6, 0, 1, "", "Camera"], [3, 0, 1, "", "DroneClass"], [7, 0, 1, "", "Gimbals"], [8, 0, 1, "", "LiftingSurface"], [8, 0, 1, "", "LiftingSurfaces"], [15, 0, 1, "", "WindFieldClass"]], "PyFlyt.core.abstractions.Boosters": [[4, 3, 1, "", "get_states"], [4, 3, 1, "", "physics_update"], [4, 3, 1, "", "reset"], [4, 3, 1, "", "state_update"]], "PyFlyt.core.abstractions.BoringBodies": [[5, 3, 1, "", "get_states"], [5, 3, 1, "", "physics_update"], [5, 3, 1, "", "reset"], [5, 3, 1, "", "state_update"]], "PyFlyt.core.abstractions.Camera": [[6, 3, 1, "", "capture_image"], [6, 3, 1, "", "get_states"], [6, 3, 1, "", "physics_update"], [6, 3, 1, "", "state_update"], [6, 1, 1, "", "view_mat"]], "PyFlyt.core.abstractions.DroneClass": [[3, 1, 1, "", "Id"], [15, 2, 1, "", "__call__"], [3, 1, 1, "", "aux_state"], [3, 1, 1, "", "control_period"], [3, 1, 1, "", "depthImg"], [3, 2, 1, "", "disable_artificial_damping"], [3, 1, 1, "", "drone_path"], [3, 2, 1, "", "get_joint_info"], [3, 1, 1, "", "instanced_controllers"], [3, 1, 1, "", "np_random"], [3, 1, 1, "", "param_path"], [3, 1, 1, "", "physics_period"], [3, 2, 1, "", "register_controller"], [3, 1, 1, "", "registered_base_controllers"], [3, 1, 1, "", "registered_controllers"], [3, 2, 1, "", "reset"], [3, 1, 1, "", "rgbaImg"], [3, 1, 1, "", "segImg"], [3, 2, 1, "", "set_mode"], [3, 1, 1, "", "setpoint"], [3, 1, 1, "", "state"], [3, 2, 1, "", "update_control"], [3, 2, 1, "", "update_last"], [3, 2, 1, "", "update_physics"], [3, 2, 1, "", "update_state"]], "PyFlyt.core.abstractions.Gimbals": [[7, 3, 1, "", "compute_rotation"], [7, 3, 1, "", "get_states"], [7, 3, 1, "", "physics_update"], [7, 3, 1, "", "reset"], [7, 3, 1, "", "state_update"]], "PyFlyt.core.abstractions.LiftingSurface": [[8, 3, 1, "", "get_states"], [8, 3, 1, "", "physics_update"], [8, 3, 1, "", "reset"], [8, 3, 1, "", "state_update"]], "PyFlyt.core.abstractions.LiftingSurfaces": [[8, 3, 1, "", "get_states"], [8, 3, 1, "", "physics_update"], [8, 3, 1, "", "reset"], [8, 3, 1, "", "state_update"]], "PyFlyt.core.abstractions.WindFieldClass": [[15, 2, 1, "", "__init__"], [15, 1, 1, "", "np_random"]], "PyFlyt.core.abstractions.motors": [[9, 0, 1, "", "Motors"]], "PyFlyt.core.abstractions.motors.Motors": [[9, 3, 1, "", "get_states"], [9, 3, 1, "", "physics_update"], [9, 3, 1, "", "reset"], [9, 3, 1, "", "state_update"]], "PyFlyt.core.drones": [[12, 0, 1, "", "Fixedwing"], [13, 0, 1, "", "QuadX"], [14, 0, 1, "", "Rocket"]], "PyFlyt.core.drones.Fixedwing": [[12, 3, 1, "", "reset"], [12, 3, 1, "", "set_mode"], [12, 4, 1, "", "starting_velocity"], [12, 3, 1, "", "update_control"], [12, 3, 1, "", "update_last"], [12, 3, 1, "", "update_physics"], [12, 3, 1, "", "update_state"]], "PyFlyt.core.drones.QuadX": [[13, 3, 1, "", "register_controller"], [13, 3, 1, "", "reset"], [13, 3, 1, "", "set_mode"], [13, 3, 1, "", "update_control"], [13, 3, 1, "", "update_last"], [13, 3, 1, "", "update_physics"], [13, 3, 1, "", "update_state"]], "PyFlyt.core.drones.Rocket": [[14, 3, 1, "", "reset"], [14, 3, 1, "", "set_mode"], [14, 4, 1, "", "starting_fuel_ratio"], [14, 3, 1, "", "update_control"], [14, 3, 1, "", "update_last"], [14, 3, 1, "", "update_physics"], [14, 3, 1, "", "update_state"]], "PyFlyt.gym_envs.fixedwing_envs.fixedwing_waypoints_env": [[17, 0, 1, "", "FixedwingWaypointsEnv"]], "PyFlyt.gym_envs.quadx_envs.quadx_hover_env": [[18, 0, 1, "", "QuadXHoverEnv"]], "PyFlyt.gym_envs.quadx_envs.quadx_pole_balance_env": [[19, 0, 1, "", "QuadXPoleBalanceEnv"]], "PyFlyt.gym_envs.quadx_envs.quadx_pole_waypoints_env": [[20, 0, 1, "", "QuadXPoleWaypointsEnv"]], "PyFlyt.gym_envs.quadx_envs.quadx_waypoints_env": [[21, 0, 1, "", "QuadXWaypointsEnv"]], "PyFlyt.gym_envs.rocket_envs.rocket_landing_env": [[22, 0, 1, "", "RocketLandingEnv"]], "PyFlyt.pz_envs.fixedwing_envs.ma_fixedwing_dogfight_env": [[24, 0, 1, "", "MAFixedwingDogfightEnv"]], "PyFlyt.pz_envs.quadx_envs.ma_quadx_hover_env": [[25, 0, 1, "", "MAQuadXHoverEnv"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "property", "Python property"], "2": ["py", "function", "Python function"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"]}, "objtypes": {"0": "py:class", "1": "py:property", "2": "py:function", "3": "py:method", "4": "py:attribute"}, "terms": {"": [3, 4, 6, 9, 10, 13, 23], "0": [1, 3, 4, 6, 8, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 24, 25], "01305": 27, "02": 24, "05": 14, "1": [1, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 19, 20, 21, 22, 24, 25], "10": [18, 20, 21, 25], "100": 17, "1000": [1, 10, 15], "10th": 14, "120": [3, 10, 12, 13, 14, 15, 17], "128": [3, 12, 13, 14], "15": 24, "150": 24, "2": [1, 3, 5, 7, 10, 12, 13, 14, 15, 17, 20, 21], "20": [12, 13, 19, 20], "200": 22, "2023": 27, "20xx": 0, "225": 5, "2304": 27, "240": [3, 10, 12, 13, 14], "25": 10, "2d": 5, "3": [1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21, 25], "30": [10, 14, 17, 21, 22, 24, 25], "4": [1, 10, 13, 17, 20, 21], "40": [10, 18, 19, 20, 22, 25], "42": 23, "480": [17, 18, 19, 20, 21, 22], "5": [1, 10, 12, 13, 21], "50": 10, "500": 22, "6": [1, 10, 13], "60": [10, 24], "65": 8, "7": [1, 10, 13, 14, 15], "8": [10, 15], "80": 0, "9": 14, "90": [3, 12, 13, 14], "A": [0, 3, 4, 5, 6, 7, 10, 27], "As": 5, "At": 1, "By": [3, 10], "For": [2, 10, 15, 23], "If": [0, 4, 17, 20, 21, 27], "In": [6, 10], "It": [0, 1, 2, 3, 4, 10, 13, 26], "NOT": 4, "OR": 8, "On": [1, 6], "The": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 21, 22, 24, 25], "Then": [1, 15], "These": [10, 11], "To": [10, 15, 26], "_": [17, 18, 19, 20, 21, 22], "__call__": 15, "__file__": 3, "__init__": [3, 15], "_lowercase_": 10, "a0": 4, "a1": 4, "abil": 9, "abl": 10, "about": [7, 12, 13, 14], "abov": 1, "absolut": 22, "abstract": [1, 3, 4, 5, 6, 7, 8, 9, 15], "accept": [4, 9], "access": 3, "accord": 4, "accur": [3, 5], "achiev": 6, "acrow": 24, "act": [4, 9], "action": [17, 18, 19, 20, 21, 22, 23, 24, 25], "action_spac": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "actual": [4, 9], "actual_duty_cycl": [4, 9], "actuat": [3, 7, 8, 12, 24], "addit": [6, 19], "addition": [4, 9], "adjust": 6, "aerial": 24, "aerodynam": [3, 5, 8], "affect": 5, "after": 7, "agent": [17, 18, 19, 20, 21, 22, 23, 24, 25], "agent_hz": [17, 18, 19, 20, 21, 22, 24, 25], "agil": 8, "ai": 24, "aileron": 12, "air": 5, "aircraft": [6, 17, 20, 21, 24], "al": 8, "algorithm": [16, 23, 26], "all": [0, 1, 2, 3, 5, 7, 8, 9, 10, 23, 24, 25], "all_aux_st": 10, "all_param": 3, "all_stat": 10, "allow": [1, 2, 4, 9, 10, 17, 18, 19, 20, 21, 24, 25], "along": [9, 10], "alpha_0_bas": 8, "alpha_stall_n_bas": 8, "alpha_stall_p_bas": 8, "also": [4, 10], "altern": 0, "although": 10, "alwai": 4, "amalgam": 1, "amount": [4, 9, 10], "an": [1, 3, 4, 6, 8, 9, 10, 15, 24, 25], "ang_po": [3, 12, 13, 14], "ang_vel": [3, 12, 13, 14], "angl": [6, 8, 10, 21], "angle_represent": [17, 18, 19, 20, 21, 22, 25], "angular": [10, 13, 18, 21, 25], "ani": [3, 5, 10, 19, 20, 26], "anyth": [24, 26], "api": [23, 24], "append": 10, "appli": 5, "ar": [0, 1, 2, 3, 4, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "arbitrari": [4, 5, 7, 9], "ardupilot": 13, "area": [5, 17, 18, 19, 20, 21, 22, 24, 25], "arg": 15, "argument": [4, 9, 10, 17, 20, 21], "arm": 10, "around": [4, 7, 9], "arrai": [1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 25], "arrang": 10, "articl": 27, "artifici": 3, "arxiv": 27, "ascend": 10, "asid": 3, "assign": 3, "assisted_flight": 24, "assum": 5, "attach": [4, 6, 15], "attack": 8, "attribut": 1, "author": 27, "automat": [10, 24], "aux": 10, "aux_stat": [3, 10], "auxiliari": [3, 10], "avail": [0, 4, 13, 27], "aviari": [1, 3, 12, 13, 14, 15], "aviary_step": 10, "ax": [1, 5, 7], "axi": [3, 4, 7, 9, 14], "b": [1, 24], "b0": 4, "b1": 4, "backend": 3, "balanc": 20, "base": [1, 8, 24], "base_mod": [3, 13], "baselin": [17, 20, 21], "basic": [2, 15], "becaus": [19, 20], "becom": 24, "been": 10, "befor": [3, 21, 24], "begin": 24, "behaviour": 3, "being": [17, 20, 21], "below": [13, 15], "between": [4, 7, 10], "big": 10, "bind": [3, 26], "biplan": 26, "bn": 4, "bodi": [1, 4, 6, 10], "body_id": 5, "bool": [3, 4, 6, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 24, 25], "boolean": [4, 10], "booster": [3, 7, 9, 10, 14, 22], "booster_id": 4, "boringbodi": 5, "bottom": 10, "bound": 24, "breakdown": 13, "briefli": 10, "bring": 0, "brusei": 27, "brushless": 9, "bug": 6, "build": 0, "built": [0, 1, 26], "bullet": 26, "bullet_cli": [3, 4, 5, 6, 7, 8, 9], "bulletcli": [3, 4, 5, 6, 7, 8, 9, 12, 13, 14], "burn": 4, "c": [0, 24], "c0": 4, "c1": 4, "c_d": 5, "calcul": 4, "call": [2, 4, 6, 7, 9, 10, 13, 15], "callabl": 10, "camera": [3, 10], "camera_angle_degre": [3, 6, 12, 13, 14], "camera_fov_degre": [3, 6, 12, 13, 14], "camera_fp": [12, 13, 14], "camera_id": 6, "camera_position_offset": [6, 12, 13, 14], "camera_resolut": [3, 6, 12, 13, 14], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 15, 17, 18, 19, 20, 21, 22, 24, 25, 26], "cannon": 24, "cannot": 4, "capabl": [1, 15], "captur": 6, "capture_imag": [3, 6], "cardin": 1, "cascad": 13, "case": 1, "caus": 5, "caveat": 10, "cd_0": 8, "cdot": 5, "ceil": 22, "center": 6, "cf2x": 13, "chang": [1, 4, 10, 13], "check": [3, 10], "chord": 8, "cinemat": 6, "cite": 27, "cl_alpha_2d": 8, "class": [1, 2, 11, 15, 17, 18, 19, 20, 21, 22, 24, 25], "click": 0, "client": [3, 4, 5, 6, 7, 8, 9], "close": [1, 10, 23, 24, 25], "cmd": [3, 8], "cn": 4, "code": 10, "coeffici": [5, 8, 9], "collis": 10, "command": [3, 4, 8, 9, 12, 17, 19, 20, 24], "command_id": 8, "command_sign": 8, "common": 10, "compat": [17, 20, 21], "complet": [17, 20, 21], "complic": 2, "compon": [1, 2, 3, 4, 5, 6, 7, 8, 9], "comprehens": [2, 3], "comput": [5, 9], "compute_rot": 7, "concaten": 3, "concis": [5, 9], "conda": 0, "condit": 8, "cone": 24, "configur": [2, 10, 13, 26], "consid": [3, 17, 20, 21, 24], "consist": 13, "constant": [4, 7, 8, 9, 17, 20, 21], "construct": [2, 3], "consult": 10, "contact": 10, "contact_arrai": 10, "contain": 10, "context_length": [17, 20, 21], "control": [1, 3, 11, 19, 20, 24], "control_hz": [3, 10, 12, 13, 14], "control_period": 3, "controlclass": [3, 13], "controller_constructor": [3, 13], "controller_id": [3, 13], "conveni": [4, 8, 9], "convert": [4, 8, 9], "core": [3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15], "correct": 8, "correspond": [10, 14], "counter": 9, "coupl": 0, "crash": [18, 19, 25], "creat": 3, "creativ": 10, "crucial": 4, "current": [4, 6, 7, 8, 9, 10, 12, 13, 14], "custom": [2, 3, 17, 20, 21, 26], "cycl": [4, 9], "damag": 24, "damage_per_hit": 24, "damp": 3, "datasheet": 14, "deal": 24, "debug": [3, 10], "def": [3, 15], "default": [10, 11, 13, 16, 23], "defin": [1, 3, 9, 10, 15], "deflect": [8, 10, 14], "deflection_limit": 8, "degre": [6, 7, 8], "denomin": 10, "densiti": 5, "depend": [3, 4, 5, 6, 9, 10, 15], "deplet": 4, "depth": 6, "depthimg": [3, 6], "describ": [1, 13, 14], "descript": 11, "design": 2, "desir": 1, "desktop": 0, "detail": 0, "develop": 0, "diagon": 4, "dict": [3, 10, 15, 17, 20, 21], "dictionari": 10, "differ": [4, 7, 10, 13, 16, 23], "difficult": 5, "direct": [1, 4, 5, 8, 19, 20], "directli": [12, 24], "directori": 3, "dirnam": 3, "disabl": 3, "disable_artificial_damp": 3, "disconnect": 15, "discret": 26, "displai": 3, "distanc": [6, 17, 20, 21, 22], "do": [3, 9, 10, 15], "document": [2, 3, 13, 26], "doe": [4, 5, 6, 7, 9, 10], "dogfight": 24, "domain": 1, "don": [1, 3], "down": 0, "download": 0, "downtilt": 6, "drag": [5, 8], "drag_coef": 5, "driven": 9, "drone": [1, 2, 4, 5, 6, 8, 9, 12, 13, 14, 18, 19, 26], "drone_index": 10, "drone_model": [3, 10, 12, 13, 14], "drone_opt": 10, "drone_path": 3, "drone_typ": [1, 10, 15], "drone_type_map": 10, "droneclass": [3, 10, 15], "drop": 20, "dtype": [3, 15], "duti": [4, 9], "dynam": [9, 13], "each": [1, 2, 3, 4, 5, 7, 8, 9, 10, 24, 25], "easier": [2, 17, 20, 21], "easili": 9, "east": 1, "effect": [6, 8, 21, 24], "elabor": 1, "elaps": 10, "elapsed_im": 10, "electr": 9, "element": [4, 10], "elsewher": 2, "enabl": 3, "encourag": 0, "end": [3, 12, 13, 14], "endpoint": 10, "enemi": 24, "engin": [4, 10, 26], "enough": [3, 10], "entiti": 10, "enu": 1, "env": [1, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "environ": [1, 6, 10, 15, 27], "equat": 5, "equival": 10, "essenti": 1, "et": 8, "eta": 8, "etc": 10, "euler": [3, 10, 17, 18, 19, 20, 21, 22, 25], "even": 10, "everi": [1, 7, 10], "everyth": [0, 12, 13, 14], "exact": [4, 9], "exampl": [0, 2, 3, 15], "except": 9, "exist": 5, "expand": 0, "experienc": [5, 10], "express": 3, "extent": 1, "extinguish": 4, "extract": 14, "f": 3, "f_i": 5, "factor": 8, "falcon": 14, "fall": [5, 22], "fals": [3, 6, 10, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25], "familiar": 5, "fast": [17, 20, 21], "fastest": 23, "featur": 6, "field": [6, 10, 15], "figur": 5, "file": [3, 12, 14], "final": 1, "finlet": 14, "finlet_i": 22, "finlet_rol": 22, "finlet_x": 22, "fire": 24, "first": [0, 1, 7, 10, 14], "fix": [8, 12], "fixedw": [10, 11, 14], "fixedwing_env": [17, 24], "fixedwing_opt": 10, "fixedwing_waypoints_env": 17, "fixedwingwaypointsenv": 17, "flap": 8, "flap_to_chord": 8, "flatten": 2, "flattenwaypointenv": [17, 20, 21], "fledg": 0, "flexibl": [1, 26], "fli": 24, "flight": [1, 3, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21, 25], "flight_dome_s": [17, 18, 19, 20, 21, 24, 25], "flight_mod": [10, 17, 18, 19, 20, 21, 25], "float": [3, 4, 5, 6, 7, 8, 9, 10, 14, 15, 17, 18, 19, 20, 21, 22, 24, 25], "floor": 10, "fluctuat": [4, 9], "fly": [17, 18, 19, 20, 21, 22, 24, 25], "focu": 6, "folder": 3, "follow": [1, 3, 5, 7, 15], "forc": [4, 5, 8, 9], "form": 3, "forward_unit": 8, "found": [2, 3], "four": 13, "fov": 6, "frac": 5, "frame": [1, 3, 4, 5, 10], "from": [1, 3, 4, 6, 7, 9, 10, 14, 15, 17, 20, 21, 23, 24, 25], "front": 1, "frontal": 5, "fuel": [4, 9, 10, 22], "fuel_burn": 4, "fueltank_id": 4, "full": [4, 8, 24], "fulli": 0, "function": [2, 3, 10, 15], "g": 1, "gener": [3, 4, 5, 6, 7, 8, 9], "geometri": 14, "get": [3, 4, 7, 8, 9, 10, 20, 26], "get_joint_info": 3, "get_stat": [2, 3, 4, 5, 6, 7, 8, 9], "getbasepositionandorient": 3, "getbaseveloc": 3, "geteulerfromquaternion": 3, "getmatrixfromquaternion": 3, "gimbal": [4, 6, 9, 14, 22], "gimbal_command": 7, "gimbal_range_degre": 7, "gimbal_tau": 7, "gimbal_unit_1": 7, "gimbal_unit_2": 7, "give": 10, "go": [0, 22], "goal": [17, 18, 19, 20, 21, 22, 25], "goal_reach_angl": 21, "goal_reach_dist": [17, 20, 21], "goe": 10, "gracefulli": [1, 10], "graviti": 1, "ground": [1, 5, 10, 13, 19], "gun": 24, "gym_env": [16, 17, 18, 19, 20, 21, 22], "gymnasium": [17, 18, 19, 20, 21, 22], "ha": [1, 3, 10, 14, 24], "hand": [7, 9], "handl": [1, 8, 10, 12, 13, 14], "handler": [8, 10], "happen": 3, "have": [1, 2, 3, 4, 9, 10, 15, 17, 20, 21], "health": 24, "height": [6, 15], "help": 0, "here": [0, 10, 27, 28], "high": 24, "highli": [0, 1], "hit": [19, 24], "hook": 15, "horizon": 6, "horizont": [1, 12, 22], "horri": 27, "hour": 0, "hover": [16, 19, 25], "how": [10, 16, 17, 20, 21, 23, 24], "howev": [17, 20, 21], "human": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "hz": 10, "i": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "id": [3, 4, 5, 6, 7, 8, 9, 10], "idea": 5, "ie": [18, 21, 25], "ignit": [4, 14, 22], "illustr": 5, "imag": [6, 10], "immedi": [17, 20, 21], "implement": [2, 3, 4, 5, 13, 15], "implicit": 6, "import": [1, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "includ": [12, 13, 14, 17, 20, 21], "index": [1, 4, 10], "indic": 4, "individu": 5, "inertia": 4, "infin": 6, "info": [16, 23, 24, 25], "inform": [2, 3, 10], "inherit": 3, "initi": [3, 12, 13, 14, 15, 16, 23], "innocent": 27, "insert": [23, 24, 25], "inspir": 13, "instanc": [10, 12, 13, 14], "instanced_control": 3, "instanti": [1, 10], "instead": [6, 7, 10, 24], "int": [3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 24, 25], "integ": [3, 4, 6, 8, 9, 10], "interact": [17, 18, 19, 20, 21, 22, 24, 25], "interfac": 3, "interstag": 14, "introduc": [19, 20], "invalid": 10, "invari": 15, "ipsum": 15, "is_tracking_camera": 6, "its": [1, 24], "itself": [1, 3, 5, 6, 13], "jame": 27, "jet": 27, "jim": 27, "joint": 3, "journal": 27, "jun": 27, "just": [0, 1], "keep": 19, "kei": [3, 10], "kg": [5, 12], "khan": 8, "kindli": 28, "king": 27, "kwarg": 15, "lab": 13, "last": 10, "latenc": [19, 20], "later": 10, "latest": 0, "launch": 14, "law": 3, "lead": 10, "learn": [16, 17, 20, 21, 23, 24, 27], "left": [1, 12], "let": 19, "lethal": 24, "lethal_angle_radian": 24, "lethal_dist": 24, "level": [8, 9, 24], "li": 1, "librari": [17, 20, 21, 26], "lift": 2, "lifting_surfac": [3, 8], "lifting_unit": 8, "liftingsurfac": [3, 8], "like": [1, 10, 15, 17, 20, 21], "likewis": 4, "limit": [4, 8], "lin_po": [3, 12, 13, 14], "lin_vel": [3, 12, 13, 14], "linear": [9, 10, 13], "link": [4, 5, 6, 7, 8, 9], "liquid": 4, "list": [4, 5, 8, 9, 10], "lit": 4, "liter": [17, 18, 19, 20, 21, 22], "load": [3, 4, 12, 14], "local": [1, 3, 5, 8, 13], "locat": [3, 4, 9], "lock": 6, "log": 15, "logarithm": 15, "long": [18, 19, 20, 25], "longest": [18, 19, 25], "look": 1, "loop": 10, "looprat": [3, 17, 18, 19, 20, 21, 22, 24, 25], "loos": 1, "lorem": 15, "lose": 24, "lowercas": 10, "m": [5, 10], "m1": 13, "m2": 13, "m3": 13, "m4": 13, "ma_fixedwing_dogfight_env": 24, "ma_quadx_hover_env": 25, "magnitud": 10, "mai": [2, 7, 10, 23], "main": [5, 6, 12], "maintain": 23, "make": [16, 17, 18, 19, 20, 21, 22], "mani": [17, 20, 21, 24], "map": [6, 8, 10, 12], "maquadxhoverenv": 23, "mass": [4, 14], "match": 21, "mathbf": 5, "mathemat": 2, "matmul": 3, "matric": [4, 7, 9], "matrix": [4, 6, 9], "mauro": 27, "max": 4, "max_displac": 22, "max_duration_second": [17, 18, 19, 20, 21, 22, 24, 25], "max_fuel_burn": 4, "max_fuel_r": 4, "max_inertia": 4, "max_rpm": 9, "max_thrust": [4, 9], "maximum": [4, 8, 9, 17, 18, 19, 20, 21, 22, 24, 25], "mean": 24, "meaning": 4, "meter": [1, 19, 20], "method": 2, "microsoft": 0, "min": 4, "min_thrust": 4, "minimum": 4, "missil": 24, "mode": [1, 3, 10, 11, 15, 17, 18, 19, 20, 21, 25], "model": [2, 3, 10, 11, 24], "model_dir": [3, 12, 13, 14], "modern": 24, "modifi": 4, "moment": 4, "more": [2, 3, 4, 5, 9, 10], "most": [17, 20, 21, 23], "motor": [2, 7, 12, 13, 19, 20], "motor_id": 9, "move": 5, "movement": 1, "much": [10, 19, 20, 24], "multi": [1, 23], "multiag": 25, "multipl": [8, 10], "multirotor": 13, "must": [0, 2, 3, 10], "my_paramet": 15, "mycustomdron": 10, "mywindfield": 15, "n": [1, 4, 5, 9, 10, 15], "nadjim": 27, "name": [2, 3, 10], "nativ": 16, "ndarrai": [2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 25], "need": [2, 4, 6, 7, 9], "neg": [8, 9], "net": 9, "new": [0, 10, 13], "nois": [4, 9, 15], "noise_ratio": [4, 9], "non": [17, 20, 21], "none": [3, 4, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 24, 25], "noqa": 16, "normal": [4, 5, 8, 9], "normal_area": 5, "north": 1, "nose": 24, "note": 10, "noth": 10, "now": 0, "np": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 25], "np_random": [3, 4, 5, 7, 8, 9, 12, 13, 14, 15], "num_boost": 4, "num_dron": [10, 25], "num_gimb": 7, "num_motor": 9, "num_surfac": 8, "num_target": [17, 20, 21], "number": [1, 3, 4, 5, 7, 8, 9, 10, 17, 20, 21], "numpi": [0, 1, 10, 15, 25], "o": 3, "ob": [16, 17, 18, 19, 20, 21, 22], "object": [1, 6, 8, 10], "observ": [16, 17, 20, 21, 23, 24, 25], "obtain": [4, 9], "off": 4, "offer": [11, 26], "offset": 6, "oh": 10, "onboard": 3, "one": [10, 12, 14], "onli": [10, 12, 13, 14, 21, 22, 24], "open": 3, "optim": 10, "option": [0, 1, 2, 4, 13, 26], "order": [4, 10], "orient": [1, 3, 6, 10, 15, 25], "orthogon": 7, "other": [3, 7], "otherwis": 3, "our": 27, "out": [1, 10, 24], "output": [3, 4, 9], "outsid": [10, 24], "overrid": 15, "overview": 0, "own": [1, 2, 3, 15], "p": [3, 4, 5, 6, 7, 8, 9, 12, 13, 14], "pad": [17, 20, 21, 22], "page": 10, "pair": 7, "parallelenv": 23, "param": 3, "param_path": 3, "paramet": [3, 4, 6, 10, 12, 13, 14, 15], "parameter": 4, "pass": [1, 8, 10], "path": 3, "per": 24, "percent": 4, "perform": 24, "period": [4, 5, 7, 8, 9], "persist": 1, "pettingzoo": 24, "phang": 27, "phyiscs_hz": 3, "physic": [1, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 24, 26], "physics_camera_ratio": 3, "physics_control_ratio": 3, "physics_hz": [3, 4, 9, 10, 12, 13, 14], "physics_period": [3, 4, 5, 7, 8, 9], "physics_step": [3, 10, 12, 13, 14], "physics_upd": [2, 3, 4, 5, 6, 7, 8, 9], "pid": 13, "pip3": 0, "pitch": [3, 12, 17], "pixel": 6, "place": 8, "plain": 5, "plane": 1, "platform": 11, "plu": [4, 9, 15], "point": [1, 4, 6, 24], "pointer": [3, 10], "polici": [23, 24, 25], "popular": [15, 17, 20, 21], "posit": [1, 3, 8, 10, 13, 15, 25], "possibl": [0, 1, 10, 15, 17, 18, 19, 20, 21, 25], "presenc": 4, "present": [4, 9], "primari": 5, "primitive_dron": [10, 13], "principl": 5, "print": 10, "print_all_bodi": 10, "prior": 0, "produc": [4, 9], "propel": 9, "properti": [3, 4, 6, 10, 14, 15], "proport": 4, "propuls": 4, "provid": [0, 3, 10, 12, 13, 14, 15, 16, 23], "put": 1, "pwm": [4, 9, 19, 20], "px4": 13, "pybullet": [0, 3, 4, 5, 6, 7, 8, 9, 10, 13], "pyflyt": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 23, 24, 25, 27], "python": [0, 1, 15, 26], "pz_env": [23, 24, 25], "q": 13, "quad": 13, "quadcopt": 26, "quadrotor": [13, 18, 19, 20, 21], "quadx": [1, 10, 11, 15, 16], "quadx_env": [18, 19, 20, 21, 25], "quadx_hover_env": 18, "quadx_opt": 10, "quadx_pole_balance_env": 19, "quadx_pole_waypoints_env": 20, "quadx_waypoints_env": 21, "quadxhoverenv": 18, "quadxpolebalanceenv": 19, "quadxpolewaypointsenv": 20, "quadxwaypointsenv": 21, "quaternion": [17, 18, 19, 20, 21, 22, 25], "queri": 10, "r": 13, "radian": [1, 21], "ragdol": 10, "rais": 3, "ramp": [4, 8, 9], "randn": 15, "random": [3, 4, 5, 7, 8, 9, 15], "randomst": [3, 4, 5, 7, 8, 9, 12, 13, 14, 15], "rang": [1, 7, 10, 15, 24], "rate": [3, 4, 18, 21, 25], "ratio": [4, 8, 9], "raw": 10, "rb": 3, "re": 5, "reach": [1, 17, 20, 21], "read": [12, 14], "readabl": [17, 20, 21], "readili": [4, 9], "real": 8, "realpath": 3, "reason": 23, "receiv": [3, 10], "recommend": [0, 10], "redirect": [4, 7, 9], "refer": [1, 2, 5, 15, 28], "referenc": 5, "regist": [10, 13], "register_all_new_bodi": 10, "register_control": [3, 11, 13], "register_wind_field_funct": 15, "registered_base_control": 3, "registered_control": 3, "reignit": 4, "reimplement": 2, "reinforc": [16, 17, 20, 21, 23, 24, 27], "rel": [1, 4], "relev": [1, 2, 3, 6, 10], "reli": 4, "remain": [4, 10, 22], "render": [1, 10, 15, 26], "render_mod": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "render_resolut": [17, 18, 19, 20, 21, 22], "repeatedli": 1, "report": 14, "repositori": 0, "repres": [1, 3, 4, 5, 6, 7, 8, 9, 10], "requir": [2, 9], "research": 27, "reserv": 3, "reset": [2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "resetbasepositionandorient": 3, "reshap": 3, "resolut": 6, "resolv": 5, "result": [5, 17, 20, 21], "return": [2, 3, 15], "revers": 9, "rew": [17, 18, 19, 20, 21, 22], "reward": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "rgb_arrai": [17, 18, 19, 20, 21, 22], "rgba": 6, "rgbaimg": [3, 6], "rgbimg": 10, "rho": 5, "right": [7, 9, 12], "rng": 10, "rocket": [4, 10, 11, 26], "rocket_brick": 3, "rocket_env": 22, "rocket_landing_env": 22, "rocket_opt": 10, "rocketbrick": 10, "rocketlandingenv": 22, "roll": [3, 12, 17], "rosetta": [2, 3], "rotat": [3, 4, 7, 9], "rotation_matrix": [5, 8], "rotation_vector": 7, "round": 10, "rpm": 9, "rpy": [1, 10], "rpyt": 24, "rule": [7, 9], "run": [0, 3, 12, 13, 14], "safe_load": 3, "same": [3, 5, 10], "sampl": [4, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "scale": 14, "scroll": 0, "second": [7, 10, 15], "section": [0, 1, 2, 3, 10], "seed": [10, 23], "segimg": [3, 6], "segment": 6, "select": [0, 13], "self": [3, 10, 15], "sequenc": [5, 10, 17, 20, 21], "seri": [4, 5, 7, 9], "serv": [1, 2, 3], "servo": 7, "set": [0, 1, 2, 3, 4, 7, 12, 13, 14, 15, 17, 20, 21], "set_all_setpoint": 10, "set_arm": 10, "set_mod": [1, 3, 10, 11, 12, 13, 14, 15], "set_setpoint": [1, 10], "setpoint": [1, 3, 10, 12, 14], "setup": 15, "sever": [3, 4, 11, 15], "shape": 15, "ship": 10, "shit": 10, "should": [3, 4], "show": 5, "shown": [1, 5], "sign": 5, "similar": [9, 10, 24], "similarli": [0, 10], "simpl": [0, 18, 19, 25], "simple_wind": 15, "simpli": [8, 10, 15], "simul": [3, 4, 5, 6, 7, 8, 9, 10, 15, 17, 18, 19, 20, 21, 22, 24, 25, 27], "sinc": 10, "singl": [1, 8, 12], "size": [17, 18, 19, 20, 21, 24, 25], "skip": [0, 3], "slope": 8, "small": 12, "so": [10, 15], "solid": 4, "some": [2, 3, 4, 9, 15], "someth": 1, "sourc": [0, 4, 10], "space": [1, 14, 17, 20, 21], "spacex": 14, "span": 8, "spars": [17, 18, 19, 20, 21, 22, 24, 25], "sparse_reward": [17, 18, 19, 20, 21, 22, 24, 25], "spawn": [1, 24], "spawn_height": 24, "special": 2, "specif": 13, "specifi": [3, 4, 17, 20, 21, 25], "stabl": [17, 20, 21], "stack": 3, "stage": 14, "stall": 8, "standard": [4, 9], "start": [1, 3, 10, 15, 24, 25, 26], "start_orn": [1, 3, 10, 12, 13, 14, 15, 25], "start_po": [1, 3, 10, 12, 13, 14, 15, 25], "starting_fuel_ratio": [4, 11, 14], "starting_veloc": [10, 11, 12], "state": [2, 3, 4, 7, 8, 9, 10, 12, 13, 14, 15], "state_upd": [2, 3, 4, 5, 6, 7, 8, 9], "stateless": 15, "step": [1, 3, 4, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "steppabl": 26, "stone": [2, 3], "store": 10, "str": [3, 10, 12, 13, 14, 24, 25], "straight": 0, "strength": 15, "string": [1, 10], "studio": 0, "subclass": 3, "submodul": 2, "subscript": 1, "suggest": 2, "super": [3, 15], "support": [0, 15, 23, 26], "surfac": [2, 5, 10], "surface_id": 8, "surface_veloc": 8, "swee": 27, "system": [13, 24], "t": [1, 3, 10, 13, 18, 21, 25], "tai": 27, "tai2023pyflyt": 27, "tail": 12, "take": 4, "tank": 4, "target": [17, 18, 19, 20, 21, 25], "target_duty_cycl": [4, 9], "task": 10, "tau": [4, 8, 9], "templat": 3, "term": [6, 10, 17, 18, 19, 20, 21, 22], "termin": [16, 22, 23, 24, 25], "test": [16, 23, 26], "text": 5, "th": 10, "theh": 6, "thei": [3, 4, 5, 15], "them": [0, 1, 5, 10, 17, 20, 21], "thermal": 15, "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25], "thing": [1, 3, 10, 12, 13, 14], "think": 26, "those": [17, 20, 21], "three": [1, 5, 10], "throttl": [4, 9, 14, 22], "throttleabl": [4, 14], "through": [0, 1, 5, 8, 10, 12, 13, 14], "throughout": 10, "thrust": [3, 4, 7, 9, 10, 12, 13, 14, 17, 18, 21, 25], "thrust_coef": 9, "thrust_unit": [4, 9], "tilt": 6, "time": [4, 7, 8, 9, 10, 15, 17, 18, 19, 20, 21, 22, 24, 25, 26], "titl": 27, "too": [19, 20], "tool": 0, "toronto": 13, "torqu": [4, 8, 9], "torque_coef": 9, "total_fuel_mass": 4, "toward": [17, 20, 21], "track": [6, 10], "train": 24, "trait": [4, 10], "transform": 4, "travel": 8, "true": [1, 10, 15, 24], "trunc": [17, 18, 19, 20, 21, 22], "truncat": [16, 23, 24, 25], "tube": 12, "tupl": [3, 6, 8, 12, 13, 14, 17, 18, 19, 20, 21, 22], "tutori": [2, 3], "two": [1, 5, 7, 13], "type": [1, 3, 13], "typic": [4, 10], "u": 13, "uav": [8, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 25, 27], "uav_id": [4, 5, 6, 8, 9], "unarm": 10, "under": [8, 10], "underli": [3, 10, 19, 20], "uniformli": 5, "uniqu": [4, 10], "unit": [4, 7, 8, 9], "univers": 13, "unstabl": 10, "up": [1, 4, 9], "updat": [3, 5, 8, 10, 12, 13, 14], "update_control": [3, 11, 12, 13, 14], "update_last": [3, 6, 11, 12, 13, 14], "update_phys": [2, 3, 11, 12, 13, 14], "update_st": [2, 3, 8, 11, 12, 13, 14], "updraft": 15, "upright": 19, "uptil": 6, "upward": 1, "urdf": 3, "us": [0, 1, 3, 4, 5, 7, 8, 9, 10, 13, 15, 17, 18, 19, 20, 21, 22, 24, 25], "usabl": 3, "usag": [4, 15, 16, 23], "use_camera": [3, 10, 12, 13, 14], "use_gimb": [3, 6, 12, 13, 14], "use_yaw_target": 21, "user": [0, 1, 10, 15], "usual": [0, 3, 8, 15], "util": 1, "v": [5, 13], "v1": 14, "v2": 16, "v_i": 5, "v_x": 5, "v_y": 5, "v_z": 5, "valid": 10, "valu": [3, 4, 6, 7, 9, 14], "valueerror": 3, "vari": 15, "variabl": 15, "variant": 11, "varieti": 4, "variou": [1, 2, 10, 13, 15, 16, 23], "vec3": 8, "vector": [4, 5, 7, 8, 9, 10, 14], "vehicl": [3, 12, 13, 14], "vel": 3, "veloc": [5, 8, 10, 13, 15, 22], "veri": [2, 3, 10], "vertic": [12, 15], "via": 10, "view": 6, "view_mat": 6, "virtual": 0, "viscos": 8, "visit": 26, "visual": 0, "vp": [13, 18, 21, 25], "vq": [13, 18, 21, 25], "vr": [13, 18, 21, 25], "vx": 13, "vy": 13, "vz": 13, "w": 13, "wai": 0, "want": 10, "we": [0, 1, 3, 4, 10], "weapon": 24, "well": [1, 15, 23], "were": 14, "what": 10, "wheel": 0, "when": [6, 10, 24], "where": [0, 1, 3, 4, 5, 6, 7, 10, 15, 17, 20, 21, 23, 24, 25], "whether": [3, 4, 6, 10, 17, 18, 19, 20, 21, 22, 24, 25], "which": [5, 10, 17, 20, 21], "while": [0, 2, 3, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "whole": 10, "wide": 23, "width": [6, 24], "wind": 10, "wind_field": 15, "wind_opt": [10, 15], "wind_typ": [10, 15], "windfield": [10, 15], "windfieldclass": [10, 15], "wing": [8, 12], "wish": [0, 10, 27], "within": [2, 6, 10, 24], "without": [2, 17, 20, 21], "won": 10, "wong": 27, "work": 27, "world_scal": 10, "would": [17, 20, 21, 23, 24, 25], "wrapper": [17, 20, 21], "x": [1, 3, 5, 10, 13, 14, 17, 20, 21, 22, 25], "xx": 0, "xy": 15, "xyz": 5, "xz_b": 5, "xz_g": 5, "y": [1, 3, 5, 10, 13, 14, 17, 20, 21, 22], "yaml": [3, 12, 14], "yaw": [1, 3, 12, 14, 17, 21], "year": [0, 27], "ymmv": 0, "you": [0, 1, 10, 17, 20, 21, 23, 24, 25, 26, 27], "your": [2, 3, 23, 24, 25], "z": [1, 3, 5, 10, 13, 15, 17, 20, 21], "zero": [3, 8], "zeros_lik": [10, 15]}, "titles": ["Documentation", "Core", "Abstractions", "Base Drone Class", "Boosters", "Boring Bodies", "Camera", "Gimbals", "Lifting Surfaces", "Motors", "Aviary", "Drones", "Fixedwing", "QuadX", "Rocket", "Wind", "Gymnasium Environments", "PyFlyt/Fixedwing-Waypoints-v2
", "PyFlyt/QuadX-Hover-v2
", "PyFlyt/QuadX-Pole-Balance-v2
", "PyFlyt/QuadX-Pole-Waypoints-v2
", "PyFlyt/QuadX-Waypoints-v2
", "PyFlyt/Rocket-Landing-v2
", "PettingZoo Environments", "MAFixedwingDogfightEnv
", "MAQuadXHoverEnv
", "PyFlyt - UAV Simulation Environments for Reinforcement Learning Research", "Paper Publication", "Tutorials"], "titleterms": {"abstract": 2, "access": 10, "api": [1, 10], "architectur": 1, "arg": [3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 24, 25], "attribut": [3, 10, 15], "aviari": 10, "axi": 1, "balanc": 19, "base": 3, "bodi": 5, "booster": 4, "bore": 5, "camera": 6, "citat": 27, "class": [3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "complex": 15, "control": [10, 12, 13, 14], "convent": 1, "core": [1, 10], "custom": [10, 15], "default": [3, 15], "descript": [2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 17, 18, 19, 20, 21, 22, 24, 25, 26], "do": 0, "document": 0, "drone": [3, 10, 11], "environ": [0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "exampl": 10, "fixedw": [12, 17], "flatten": [17, 20, 21], "gener": 1, "gimbal": 7, "gymnasium": [0, 16], "hover": 18, "i": 0, "individu": 10, "instal": 0, "land": 22, "learn": 26, "lift": 8, "linux": 0, "looprat": 10, "maco": 0, "mafixedwingdogfightenv": 24, "maquadxhoverenv": 25, "mathemat": 8, "method": [3, 10, 15], "mode": [12, 13, 14], "model": [8, 12, 13, 14, 15], "more": [0, 15], "motor": 9, "multi": 10, "option": [3, 10, 17, 18, 19, 20, 21, 22, 24, 25], "overview": [11, 15], "paper": 27, "pettingzoo": [0, 23], "physic": 10, "pole": [19, 20], "preimplement": 15, "preprint": 27, "public": 27, "pyflyt": [17, 18, 19, 20, 21, 22, 26], "quadx": [13, 18, 19, 20, 21], "reinforc": 26, "requir": [3, 15], "research": 26, "return": [4, 6, 7, 8, 9, 10], "rocket": [14, 22], "rule": 24, "set": 10, "setup": 10, "simpl": 15, "simul": 26, "singl": 10, "spawn": 10, "step": 10, "surfac": 8, "task": [17, 18, 19, 20, 21, 22, 24, 25], "tutori": 28, "type": 10, "uav": 26, "usag": [2, 10, 17, 18, 19, 20, 21, 22, 24, 25], "v2": [17, 18, 19, 20, 21, 22], "variant": 13, "want": 0, "waypoint": [17, 20, 21], "wind": 15, "window": 0}})
\ No newline at end of file
diff --git a/docs_source/documentation/gym_envs/quadx_pole_balance_env.md b/docs_source/documentation/gym_envs/quadx_pole_balance_env.md
index 018067b2..be13772a 100644
--- a/docs_source/documentation/gym_envs/quadx_pole_balance_env.md
+++ b/docs_source/documentation/gym_envs/quadx_pole_balance_env.md
@@ -1,6 +1,6 @@
# `PyFlyt/QuadX-Pole-Balance-v2`
-```{figure} https://raw.githubusercontent.com/jjshoots/PyFlyt/master/readme_assets/pole_balance.gif
+```{figure} https://raw.githubusercontent.com/jjshoots/PyFlyt/master/readme_assets/quadx_pole_balance.gif
:width: 50%
```
diff --git a/docs_source/documentation/gym_envs/quadx_pole_waypoints_env.md b/docs_source/documentation/gym_envs/quadx_pole_waypoints_env.md
index a318794d..aa196539 100644
--- a/docs_source/documentation/gym_envs/quadx_pole_waypoints_env.md
+++ b/docs_source/documentation/gym_envs/quadx_pole_waypoints_env.md
@@ -1,6 +1,6 @@
# `PyFlyt/QuadX-Pole-Waypoints-v2`
-```{figure} https://raw.githubusercontent.com/jjshoots/PyFlyt/master/readme_assets/quadx_waypoint.gif
+```{figure} https://raw.githubusercontent.com/jjshoots/PyFlyt/master/readme_assets/quadx_pole_waypoint.gif
:width: 50%
```
diff --git a/pyproject.toml b/pyproject.toml
index 3ff7cdcd..73512851 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "PyFlyt"
-version = "0.23.0"
+version = "0.24.0"
authors = [
{ name="Jet", email="taijunjet@hotmail.com" },
]
@@ -49,5 +49,8 @@ reportMissingImports = "none"
ignore = ["D401", "D404", "D203", "D213"]
select = ["E4", "E7", "E9", "F", "I", "D"]
+[tool.ruff.lint.pydocstyle]
+convention = "google"
+
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"]
diff --git a/readme_assets/pole_balance.gif b/readme_assets/quadx_pole_balance.gif
similarity index 100%
rename from readme_assets/pole_balance.gif
rename to readme_assets/quadx_pole_balance.gif
diff --git a/readme_assets/quadx_pole_waypoint.gif b/readme_assets/quadx_pole_waypoint.gif
new file mode 100644
index 00000000..2f527b91
Binary files /dev/null and b/readme_assets/quadx_pole_waypoint.gif differ