Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions docs/source/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,25 @@ Development - |version|
* Allow for a simpler Earth model to be used in Vizard by setting ``use_simple_earth=True``
in the Vizard settings dictionary. This is helpful for when visualizing may Earth-fixed
targets.
* Allow flight software and dynamics models to be specified as lists of classes. This allows
for multiple inheritance to be used for easily creating more complex satellite models.
* The inheritance structure of flight software and dynamics models has changed. Most models
now inherit from :class:`~bsk_rl.sim.fsw.FSWModel` or :class:`~bsk_rl.sim.dyn.DynModel`,
which are instantiable versions of the abstract bases :class:`~bsk_rl.sim.fsw.FSWModelABC` and
:class:`~bsk_rl.sim.dyn.DynModelABC`, instead of from :class:`~bsk_rl.sim.fsw.BasicFSWModel`
or :class:`~bsk_rl.sim.dyn.BasicDynModel`. These are lighter-weight base classes that lack
some functionality that was not always wanted.

.. warning::

If your custom satellite configurations break as a result of this change, add
:class:`~bsk_rl.sim.fsw.BasicFSWModel` and :class:`~bsk_rl.sim.dyn.BasicDynModel`
to your ``fsw_type`` and ``dyn_type`` lists in your satellite classes.

* :class:`~bsk_rl.sim.fsw.FSWModel` implements direct actuator-less attitude control.
By inheriting from a FSW class that overrides the ``MRPControlTask``, such as
:class:`~bsk_rl.sim.fsw.BasicFSWModel` or :class:`~bsk_rl.sim.fsw.SteeringFSWModel`,
users can implement custom attitude control strategies.

Version 1.2.0
-------------
Expand Down
10 changes: 3 additions & 7 deletions examples/cloud_environment.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"from Basilisk.architecture import bskLogging\n",
"from Basilisk.utilities import orbitalMotion\n",
"from bsk_rl import act, obs, sats\n",
"from bsk_rl.sim import dyn, fsw, world\n",
"from bsk_rl.sim import dyn, fsw\n",
"from bsk_rl.utils.orbital import random_orbit\n",
"from bsk_rl.scene.targets import UniformTargets\n",
"from bsk_rl.data.unique_image_data import (\n",
Expand Down Expand Up @@ -92,7 +92,6 @@
" ]\n",
"\n",
" class CustomDynModel(dyn.FullFeaturedDynModel):\n",
"\n",
" @property\n",
" def solar_angle_norm(self) -> float:\n",
" sun_vec_N = (\n",
Expand Down Expand Up @@ -419,8 +418,6 @@
" \"GeneralSatelliteTasking-v1\",\n",
" satellites=satellites,\n",
" terminate_on_time_limit=True,\n",
" world_type=world.GroundStationWorldModel,\n",
" world_args=world.GroundStationWorldModel.default_world_args(),\n",
" scenario=scenario,\n",
" rewarder=rewarder,\n",
" sim_rate=0.5,\n",
Expand Down Expand Up @@ -485,7 +482,6 @@
"source": [
"count = 0\n",
"while True:\n",
"\n",
" if count == 0:\n",
" # Vector with an action for each satellite (we can pass different actions for each satellite)\n",
" # Tasking all satellites to charge (tasking None as the first action will raise a warning)\n",
Expand Down Expand Up @@ -532,7 +528,7 @@
],
"metadata": {
"kernelspec": {
"display_name": ".venv_update_cloud_env_JAIS",
"display_name": ".venv",
"language": "python",
"name": "python3"
},
Expand All @@ -546,7 +542,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
"version": "3.12.10"
}
},
"nbformat": 4,
Expand Down
4 changes: 1 addition & 3 deletions examples/cloud_environment_with_reimaging.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"from Basilisk.architecture import bskLogging\n",
"from Basilisk.utilities import orbitalMotion\n",
"from bsk_rl import act, obs, sats\n",
"from bsk_rl.sim import dyn, fsw, world\n",
"from bsk_rl.sim import dyn, fsw\n",
"from bsk_rl.scene.targets import UniformTargets\n",
"from bsk_rl.data.base import Data, DataStore, GlobalReward\n",
"from bsk_rl.data.unique_image_data import (\n",
Expand Down Expand Up @@ -844,8 +844,6 @@
"\n",
"env = ConstellationTasking(\n",
" satellites=satellites,\n",
" world_type=world.GroundStationWorldModel,\n",
" world_args=world.GroundStationWorldModel.default_world_args(),\n",
" scenario=scenario,\n",
" rewarder=rewarder,\n",
" sat_arg_randomizer=sat_arg_randomizer,\n",
Expand Down
27 changes: 17 additions & 10 deletions examples/curriculum_learning.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"source": [
"import numpy as np\n",
"from bsk_rl import act, data, obs, scene, sats\n",
"from bsk_rl.sim import dyn, fsw, world\n",
"from bsk_rl.sim import dyn, fsw\n",
"from bsk_rl.gym import SatelliteTasking\n",
"from typing import Any, Callable, Optional, TypeVar\n",
"from bsk_rl.utils.rllib.callbacks import WrappedEpisodeDataCallbacks, EpisodeDataWrapper\n",
Expand Down Expand Up @@ -61,7 +61,6 @@
"outputs": [],
"source": [
"class SatelliteTaskingCL(SatelliteTasking):\n",
"\n",
" def __init__(\n",
" self,\n",
" satellite: Satellite,\n",
Expand All @@ -70,7 +69,6 @@
" CL_params={},\n",
" **kwargs,\n",
" ):\n",
"\n",
" super().__init__(\n",
" satellite,\n",
" *args,\n",
Expand All @@ -85,7 +83,6 @@
" seed: Optional[int] = None,\n",
" options=None,\n",
" ) -> tuple[MultiSatObs, dict[str, Any]]:\n",
"\n",
" self.update_sat_params() # Update satellite parameters based on difficulty before resetting\n",
" obs, info = super().reset(seed=seed, options=options)\n",
" return obs, info\n",
Expand Down Expand Up @@ -361,7 +358,6 @@
"outputs": [],
"source": [
"class CLCallbacks(WrappedEpisodeDataCallbacks):\n",
"\n",
" def on_episode_start(\n",
" self,\n",
" *,\n",
Expand All @@ -376,7 +372,6 @@
" env_index,\n",
" **kwargs,\n",
" ) -> None:\n",
"\n",
" try:\n",
" n_steps = metrics_logger.peek(\"num_env_steps_sampled_lifetime\")\n",
" if n_steps is None:\n",
Expand Down Expand Up @@ -627,7 +622,11 @@
" init_val = CL_options[CL_case][key][\"init_val\"]\n",
" final_val = CL_options[CL_case][key][\"final_val\"]\n",
" CL_params[CL_options[CL_case][key][\"var_name\"]] = (\n",
" lambda difficulty, capacity=capacity, init_val=init_val, final_val=final_val, time_seed=current_time: external_disturbance_fn(\n",
" lambda difficulty,\n",
" capacity=capacity,\n",
" init_val=init_val,\n",
" final_val=final_val,\n",
" time_seed=current_time: external_disturbance_fn(\n",
" time_seed,\n",
" capacity * init_val,\n",
" capacity * final_val,\n",
Expand All @@ -644,7 +643,11 @@
" else:\n",
" temp_name = CL_options[CL_case][key][\"name\"]\n",
" CL_params[temp_name] = (\n",
" lambda difficulty, capacity=capacity, init_val=init_val, final_val=final_val, time_seed=current_time: capacity_fn(\n",
" lambda difficulty,\n",
" capacity=capacity,\n",
" init_val=init_val,\n",
" final_val=final_val,\n",
" time_seed=current_time: capacity_fn(\n",
" time_seed,\n",
" capacity * init_val,\n",
" capacity * final_val,\n",
Expand All @@ -658,7 +661,12 @@
" init_val = CL_options[CL_case][key][\"init_val\"]\n",
" final_val = CL_options[CL_case][key][\"final_val\"]\n",
" CL_params[CL_options[CL_case][key][\"name_init\"]] = (\n",
" lambda difficulty, capacity=capacity, init_val=init_val, final_val=final_val, init_range=init_range, time_seed=current_time: capacity_init_fn(\n",
" lambda difficulty,\n",
" capacity=capacity,\n",
" init_val=init_val,\n",
" final_val=final_val,\n",
" init_range=init_range,\n",
" time_seed=current_time: capacity_init_fn(\n",
" time_seed,\n",
" capacity * init_val,\n",
" capacity * final_val,\n",
Expand Down Expand Up @@ -692,7 +700,6 @@
" satellite=sat,\n",
" scenario=scene.UniformNadirScanning(value_per_second=1 / duration),\n",
" rewarder=data.ScanningTimeReward(),\n",
" world_type=world.GroundStationWorldModel,\n",
" time_limit=duration,\n",
" failure_penalty=-1.0,\n",
" difficulty=0.0,\n",
Expand Down
4 changes: 1 addition & 3 deletions examples/fault_environment.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"from Basilisk.fswAlgorithms import rwNullSpace\n",
"from Basilisk.architecture import messaging\n",
"from bsk_rl import SatelliteTasking, act, data, obs, scene, sats\n",
"from bsk_rl.sim import dyn, fsw, world\n",
"from bsk_rl.sim import dyn, fsw\n",
"from bsk_rl.utils.orbital import random_orbit, random_unit_vector\n",
"from bsk_rl.utils.functional import default_args\n",
"\n",
Expand Down Expand Up @@ -477,8 +477,6 @@
"env = SatelliteTasking(\n",
" satellite=satellites,\n",
" terminate_on_time_limit=True,\n",
" world_type=world.GroundStationWorldModel,\n",
" world_args=world.GroundStationWorldModel.default_world_args(),\n",
" scenario=scene.UniformTargets(n_targets=1000),\n",
" rewarder=data.UniqueImageReward(),\n",
" sim_rate=0.5,\n",
Expand Down
46 changes: 11 additions & 35 deletions examples/rso_inspection.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
"from bsk_rl.obs.relative_observations import rso_imaged_regions\n",
"from bsk_rl.utils.orbital import fibonacci_sphere\n",
"from bsk_rl.sim import dyn, fsw\n",
"import types\n",
"import numpy as np\n",
"from Basilisk.architecture import bskLogging\n",
"from functools import partial\n",
Expand Down Expand Up @@ -61,8 +60,7 @@
"source": [
"## Defining the Satellites\n",
"\n",
"First, the RSO satellite is configured. It is given support for nadir pointing through\n",
"the ``ImagingDynModel`` and ``Downlink`` action."
"First, the RSO satellite is configured. A simple model is used that has no actuators modelled and just deterministically points nadir."
]
},
{
Expand All @@ -76,11 +74,9 @@
" observation_spec = [\n",
" obs.SatProperties(dict(prop=\"one\", fn=lambda _: 1.0)),\n",
" ]\n",
" action_spec = [act.Downlink(duration=1e9)]\n",
" dyn_type = types.new_class(\n",
" \"Dyn\", (dyn.ImagingDynModel, dyn.ConjunctionDynModel, dyn.RSODynModel)\n",
" )\n",
" fsw_type = fsw.ContinuousImagingFSWModel\n"
" action_spec = [act.NadirPoint(duration=1e9)]\n",
" dyn_type = (dyn.ConjunctionDynModel, dyn.RSODynModel)\n",
" fsw_type = fsw.FSWModel\n"
]
},
{
Expand All @@ -98,17 +94,7 @@
"metadata": {},
"outputs": [],
"source": [
"rso_sat_args = dict(\n",
" conjunction_radius=2.0,\n",
" K=7.0 / 20,\n",
" P=35.0 / 20,\n",
" Ki=1e-6,\n",
" dragCoeff=0.0,\n",
" batteryStorageCapacity=1e9,\n",
" storedCharge_Init=1e9,\n",
" wheelSpeeds=[0.0, 0.0, 0.0],\n",
" u_max=1.0,\n",
")"
"rso_sat_args = dict(conjunction_radius=2.0)"
]
},
{
Expand Down Expand Up @@ -199,21 +185,11 @@
" fsw_action=\"action_inspect_rso\",\n",
" )\n",
" ]\n",
" dyn_type = types.new_class(\n",
" \"Dyn\",\n",
" (\n",
" dyn.MaxRangeDynModel,\n",
" dyn.ConjunctionDynModel,\n",
" dyn.RSOInspectorDynModel,\n",
" ),\n",
" )\n",
" fsw_type = types.new_class(\n",
" \"FSW\",\n",
" (\n",
" fsw.SteeringFSWModel,\n",
" fsw.MagicOrbitalManeuverFSWModel,\n",
" fsw.RSOInspectorFSWModel,\n",
" ),\n",
" dyn_type = (dyn.MaxRangeDynModel, dyn.ConjunctionDynModel, dyn.RSOInspectorDynModel)\n",
" fsw_type = (\n",
" fsw.SteeringFSWModel,\n",
" fsw.MagicOrbitalManeuverFSWModel,\n",
" fsw.RSOInspectorFSWModel,\n",
" )\n"
]
},
Expand Down Expand Up @@ -452,7 +428,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.11"
"version": "3.12.10"
}
},
"nbformat": 4,
Expand Down
Loading