.. Copyright (c) 2026, Autonomous Vehicle Systems Lab, University of Colorado at Boulder Version 2.9 Release Notes ========================= .. _bsk-release-2-9-0: Version 2.9.0 (Jan. 28, 2026) ----------------------------- - Deploy both release docs at https://avslab.github.io/basilisk and developer beta docs at https://avslab.github.io/basilisk/developer. - Added :ref:`releaseGuide` on releasing a new version of Basilisk. - Updated merge workflow to deploy develop branch documentation to https://avslab.github.io/basilisk/develop and master branch documentation to https://avslab.github.io/basilisk. - Migrated supportData handling to a Pooch-based fetch system. .. warning:: This is a breaking change, minor changes were made to how the Denton flux model API is used. See list of known issues for details. - Removed supportData files from wheels and source distributions to reduce package size. - Added automatic MD5 registry generation via ``makeRegistry.py`` for versioned supportData. - Updated documentation to include workflow for adding new supportData files and regenerating the registry. - Removed automated version bumping on merges to develop. Version bumps will be handled manually moving forward. - Added SWIG as a python package dependency in ``requirements_dev.txt`` and updated installation instructions. - Updated CI to no longer automatically publish git tags and publish wheels to PyPI. This process will be handled manually. - Added cp313 wheel builds for Python 3.13 and newer to support updated SWIG and ABI changes. - Added :ref:`bskPrinciples-11` capability. Now enabled for :ref:`extForceTorque`, :ref:`constraintDynamicEffector`, and :ref:`thrusterDynamicEffector` attachable to :ref:`spinningBodyOneDOFStateEffector`, :ref:`spinningBodyTwoDOFStateEffector`, and :ref:`spinningBodyNDOFStateEffector`. - Added support for :ref:`linearTranslationOneDOFStateEffector` to attach dependent effectors. - Improved documentation structure by separating build-from-source instructions from ``pip`` installation instructions. - Added custom reaction wheel: "NanoAvionics RW0" to ``src/utilities/simIncludeRW.py`` - Added TLE handling utilities in :ref:`tleHandling` to parse TLE files and convert to orbital elements - Removed deprecated use of astro constants from ``src/utilities/astroFunction.py``. Users should be astrodynamics constants from ``Basilisk.architecture.astroConstants``. - Made statistical unit tests more robust - Fix typo in how :ref:`gravityEffector` compute the planets gravity potential contributions - Added fault modeling capability to :ref:`magnetometer` module. - Added new module :ref:`MJSystemCoM` to extract the system center of mass position and velocity from a MuJoCo simulation. - Added new module :ref:`MJSystemMassMatrix` to extract the system mass matrix from a MuJoCo simulation. - Added new module :ref:`MJJointReactionForces` to extract the reaction forces and torques acting on the joints from a MuJoCo simulation. - Added new module :ref:`hingedJointArrayMotor` to determine the motor torques for an array of hinged joints. - Added new module :ref:`jointMotionCompensator` to determine the hub torques required to negate the effect of hinged joint motor torques on the spacecraft hub motion. - Updated :ref:`locationPointing` module to save ``omega_RN_B`` to the ``attGuidOutMsg``. This may effect the performance of other modules that use this output message. - Refactored the CI build system scripts - Removed deprecated use of ``Basilisk.simulation.planetEphemeris.ClassicElementsMsgPayload``. Users need to use ``ClassicalElements()`` defined in ``orbitalMotion``. - Added documentation to :ref:`constraintDynamicEffector` explaining the required execution order - Fixed bug with recording message payload entries that are 2D arrays. This bug was introduced with the faster recording strategy added in version 2.8.0. - Add a desired relative attitude between spacecraft in :ref:`constraintDynamicEffector`. - Added new example scenarios demonstrating extended use of :ref:`constraintDynamicEffector`: :ref:`scenarioConstrainedDynamicsManeuverAnalysis`, :ref:`scenarioConstrainedDynamicsComponentAnalysis`, and :ref:`scenarioConstrainedDynamicsFrequencyAnalysis`. - Added a new stepper motor simulation module :ref:`stepperMotor`. This kinematic profiler module is useful to simulate the actuation of motor-driven prescribed spacecraft components. - Made individual structures for each degree of freedom in :ref:`spinningBodyNDOFStateEffector` and :ref:`linearTranslationNDOFStateEffector`. - Capitalized all structures in :ref:`linearTranslationOneDOFStateEffector` and :ref:`linearTranslationNDOFStateEffector`. - The way body-fixed locations are added to Vizard data is changed. Now Vizard retains a copy of the list of locations and only incremental changes have to be sent using the ``vizSupport.changeLocation()`` method. This drastically reduces the Vizard data size. - The support file :ref:`vizSupport` is updated to only have ``enableUnityVisualization()`` check if :ref:`vizInterface` has been built or not. Example scripts check if ``vizSupport.vizFound`` is true to execute ``vizInterface`` related code. - In :ref:`vizSupport`, in the method ``setInstrumentGuiSetting()``, corrected the spelling of ``showTransceiverFrustrum`` to be ``showTransceiverFrustum``. The prior argument name has been deprecated. - For :ref:`vizInterface`.settings, changed the name of ``viewCameraConeHUD`` to ``viewCameraFrustrumHUD`` - Added support for Vizard 2.3.1 features - Refactor and optimize Event checking in ``SimulationBaseClass``. Time-based events can be specified by a more efficient ``conditionTime`` instead of a ``conditionFunction``. This is especially useful for large numbers of events. - Added option for ``exactRateMatch=False`` when creating events which causes events to be checked whenever the ``eventRate`` has elapsed since the last check (as opposed to only when the current time is an exact multiple of the ``eventRate``). - ``ConfigureStopTime`` now supports specifying the stop condition as ``<=`` (default, prior behavior) or ``>=`` (new). The new option is useful when the user wants to ensure that the simulation runs for at least the specified time, instead of at most the specified time. - Fixed documentation quote typos that caused documentation build errors with doxygen version 1.15 and newer. - Configured the :ref:`prescribedMotionStateEffector` module for attachment of other state effectors to it rather than the spacecraft hub. - Configured the :ref:`spinningBodyOneDOFStateEffector`, :ref:`spinningBodyTwoDOFStateEffector`, and :ref:`linearTranslationOneDOFStateEffector` modules for optional attachment to the prescribed motion state effector. - Added two example branching scenarios to illustrate the prescribed motion branching capability. See :ref:`scenarioPrescribedMotionWithTranslationBranching` and :ref:`scenarioPrescribedMotionWithRotationBranching`. - Fixed a bug where :ref:`spinningBodyOneDOFStateEffector` and :ref:`spinningBodyNDOFStateEffector` both registered their states under the same name, resulting in overwriting and a ``BSK_ERROR``. - Added support for :ref:`hingedRigidBodyStateEffector` to be the parent for Dynamic Effectors. - Added SWIG Eigen typemaps for passing Eigen products or returning Eigen products to/from director methods. - Added a required time duration that must be satisfied for the imaging to be considered successful in :ref:`simpleInstrumentController` module. - Added a new scenario that simulates a debris strike on a flexible solar array :ref:`scenarioImpact`. - Updated :ref:`imuSensor` to remove deprecated direct setting of ``walkBoundsGyro`` and ``walkBoundsAccel``. The module now outputs a zero'd output message on the first run. - Updated Basilisk python dependencies to include the latest range of allowable packages - Improved documentation of :ref:`orbitalMotion` - Avoid reloading and re-unloading SPICE kernels when multiple simulations run in the same process. This fixes the problem with Spice becoming very slow when multiple simulation are run in parallel, addresses the Spice kernel load limit of 5000 kernels, and prevents a rare bug where kernels are corrupted when loaded from multiple simulations at the same time. - Added support for Vizard version 2.3.2 - Added optional prescribed 1-DOF helical screw motion to the :ref:`prescribedRotation1DOF` kinematic profiler module. - Added a new prescribed helical screw motion example scenario. See :ref:`scenarioPrescribedScrewMotion`. - Added ``SysModelMixin``, a utility class in ``py_sys_model.i`` that can be used for subclasses of ``SysModel`` (:ref:`sys_model`) that have virtual methods to be implemented in Python. The class will automatically add better error logging for all methods implemented in Python and will add a sanity check that the C++ class constructor is called (otherwise, hard-to-parse errors will be raised). Refactored ``pyStatefulSysModel.i`` to use this mixin. - Added support for setting the position and velocity of :ref:`MJBody` with pure translational motion. - Added ``getAxis`` and ``isHinge`` to :ref:`MJJoint`. - Migrated ``supportData`` handling to a Pooch-based fetch system. .. warning:: This is a breaking change, minor changes were made to how the Denton flux model API is used. See list of known issues for details. - Removed ``supportData`` files from wheels and source distributions to reduce package size. - Made :ref:`FacetSRPDynamicEffector` variables ``numFacets`` and ``numArticulatedFacets`` private variables. Their use as public variables has been deprecated since December 2024. - Adds support for updating noise parameters in :ref:`magnetometer` during simulation - Deprecated use of ``shadowFactor`` in favor of ``illuminationFactor`` - Added :ref:`scenarioAttitudeFeedbackRWMuJoCo`, similar to :ref:`scenarioAttitudeFeedbackRW` but using MuJoCo dynamics. - Added the modules :ref:`simpleAntenna` and :ref:`antennaPower`.