.. Copyright (c) 2026, Autonomous Vehicle Systems Lab, University of Colorado at Boulder Version 2.10 Release Notes ========================== .. _bsk-release-2-10-2: Version 2.10.2 (May 7, 2026) ---------------------------- - Fixed :ref:`linkBudget` pointing-loss frame handling so ``AntennaLogMsgPayload.sigma_AN`` antenna orientations are interpreted consistently with :ref:`simpleAntenna`. - Fixed a :ref:`vizInterface` ``noDisplay`` image request regression that could stop OpNav scenarios when communicating with Vizard. .. _bsk-release-2-10-1: Version 2.10.1 (April 26, 2026) ------------------------------- - Updated SWIG dependency support to allow compatible latest SWIG releases while excluding SWIG 4.4.0 due to compile regressions observed during testing. If you are getting lots of ``builtin type swigvarlink has no __module__ attribute`` warnings upgrade to SWIG 4.4.1 - Cleaned up pytest resource handling so parallel test runs with pytest-xdist and pytest-rerunfailures no longer report unclosed socket warnings. - Fixed a potential stack buffer overflow in :ref:`vizInterface` by rejecting default celestial body names that exceed the fixed SPICE payload name storage. - Fixed a potential heap buffer overflow in :ref:`mappingInstrument` by rejecting mapping point names that exceed the fixed data node name storage. - Fixed a potential format string vulnerability in :ref:`dentonFluxModel` when reporting missing Denton data files. - Hardened Basilisk module string handling and logging against fixed-buffer overflow and format-string misuse. - Hardened build and helper utilities against shell command injection, unsafe temporary file cleanup, unbounded downloads, and malformed image buffer lengths. .. _bsk-release-2-10-0: Version 2.10.0 (April 2, 2026) ------------------------------ Compatibility and migration ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Removed deprecated ``vizInterface.MultiSphereVector`` support; use ``vizInterface.MultiShapeVector``. - Removed deprecated ``vizInterface.MultiSphere`` and ``vizInterface.MultiSphereInfo`` aliases; use ``vizInterface.MultiShape`` and ``vizInterface.MultiShapeInfo``. - ``dragDynamicEffector``, ``facetDragDynamicEffector``, and ``cannonballDrag`` now accept an optional ``windVelInMsg`` (:ref:`WindMsgPayload`) to compute atmosphere-relative drag velocity; supersedes the former ``useAtmosphereRelativeVelocity``/``planetOmega_N`` flags. - Removed Python 3.8 support from the build and CI configuration, and marked Python 3.9 support as deprecated for removal after March 2027. - Deprecated the ``pytest`` optional flag ``show_plots``. Build, installation, and CI ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Added a ``Dockerfile`` to build Basilisk container images. See :ref:`bskContainers` for usage details. - Prebuilt multi-architecture (``linux/amd64``, ``linux/arm64``) container images are now published to GHCR on each release tag. - Added Python 3.14 support across packaging and CI. - Updated platform install guides to document Basilisk support for Python 3.14. - Added ``sccache`` compiler caching to CI builds to speed up incremental C++ compilation. See :ref:`configureBuild` for how to use ``sccache`` locally. - Updated Python packaging metadata to use the PEP 639 license fields and require a newer setuptools version that supports them. - Added an ``examples`` optional dependency set so users can install example-only Python packages with ``pip install "bsk[examples]"`` or ``pip install -e ".[examples]"``. - Added a matching ``python conanfile.py --examples True`` build option for source checkouts, with example dependencies enabled by default and ``--examples False`` available to skip them. - Removed the default ``--clean`` flag from ``setup.py`` to allow for incremental pip wheel builds. - Updated ``conanfile.py`` to pass ``compiler.cstd=gnu17`` during Conan build step to avoid ``cspice/0067`` build failures on newer GCC 15 based Linux toolchains. Simulation framework and module development ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Added documentation for the ``bsk-sdk`` extension system, covering how to install, write, and distribute out-of-tree Basilisk extensions as standard Python wheels. - Fixed ``PythonVariableLogger`` to resume logging correctly after ``Reset()``, reject negative ``min_log_period`` values, and support indexed access for logged names that collide with class attributes such as ``times``. Spacecraft dynamics and effectors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Fixed :ref:`reactionWheelStateEffector` mixed-model wheel logging so theta outputs are indexed correctly when balanced and jitter wheel models are used together. - Added a new :ref:`facetedSpacecraftModel` module to convert spacecraft facet geometry from the local facet frames to the spacecraft hub body frame. The module supports both fixed facets and single-axis articulating facets. - Added a new :ref:`facetedSpacecraftProjectedArea` module to compute the per-facet and total projected area of a faceted spacecraft model using a provided heading direction vector. The module supports three heading configuration options: direct general heading, Sun direction heading, and spacecraft inertial velocity heading. - Added optional ``sunEclipseInMsg`` input to :ref:`facetSRPDynamicEffector` so that eclipse shadow conditions scale the SRP force and torque by the illumination factor. Environment, gravity, and ephemerides ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Updated :ref:`tleHandling` to map TLE mean elements in TEME to Basilisk osculating elements in J2000/ICRS and to generate TLEs using an SGP4-consistent mean-element iteration. - Fixed how the gravity spherical harmonic coefficient are loaded in ``loadGravFromFile()``. They were hard coded to 2nd order. - Updated :ref:`tleHandling` TLE parsing to fail explicitly on unsupported catalog-ID encodings. - Added tests in ``test_readTLE.py`` to validate rejection of unsupported catalog-ID encoding. - Updated :ref:`scenarioDragDeorbit`, :ref:`scenarioDragRendezvous`, :ref:`scenarioAerocapture`, and :ref:`scenarioStochasticDragSpacecraft` to illustrate optional use of wind velocity input. - Added :ref:`windBase` abstract base class and :ref:`zeroWindModel` concrete implementation. The base class now handles co-rotating atmosphere calculations, while the zero wind model represents conditions with no additional wind perturbations beyond atmospheric co-rotation. - Added missing docstring to ``gravBodyFactory.createSpiceInterface()`` that prevented it from being built. - Added a detailed note for ``spicePlanetFrames`` describing default ``IAU_*`` behavior, supported alternatives such as ``ITRF93`` and ``J2000``, and how frame-association FK kernels interact with this setting. - Improved ``gravityEffector`` gravity-coefficient loading to always include the requested highest degree and consistently enforce ``maxDeg`` truncation. - Updated spherical-harmonic coefficient parsing to map values by explicit ``(degree, order)`` indices, handle missing entries as zero-filled terms, and reject duplicate or malformed rows. - Added :ref:`spacecraftChargingEquilibrium` module to solve coupled servicer/target equilibrium potentials with electron-beam current coupling. - TLE parsing fixed to be robust to file ending issues between LF and CRLF. - Updated the World Magnetic Model (WMM) Coefficients file to the 2025 version. Sensors and flight software ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Added :ref:`hillFrameRelativeControl`, a Hill-frame PD controller that computes an inertial force command to track deputy relative position and velocity with respect to a chief spacecraft. - Added :ref:`thrJointCompensation`, a module to compute the motor torques required to prevent joint acceleration during thruster firing for systems with attached thruster arms. - Fixed :ref:`thrJointCompensation` hinged joint control sign convention so that the computed compensation torque is applied in the correct direction. - Added :ref:`stripLocation` to support the strip imaging mode. - Updated :ref:`locationPointing` to include the new strip imaging mode. - Added new tests in ``test_locationPointing.py`` to verify the new strip imaging mode. - Created new message :ref:`StripStateMsgPayload` to interface :ref:`locationPointing` with the new :ref:`stripLocation`. - Added the scenario :ref:`scenarioStripImaging` showing how to perform strip imaging tasks. - Added :ref:`linkBudget`, a communication module that computes link Carrier-to-Noise Ratio (CNR) between two antennas including FSPL and optional atmospheric, pointing, and frequency-offset losses. - Warnings for not connected messages of types: ``sunInMsg``, ``planetInMsg``, ``sunEclipseInMsg`` in the :ref:`simpleAntenna` module for ground based antennas are not raised anymore. - Added :ref:`inertialCartFeedback` module to compute an inertial-frame relative motion feedback control force - Added :ref:`orbElemOffset`, a classical orbital element combiner that applies element offsets to a baseline orbit and supports optional interpretation of the anomaly offset as a mean-anomaly increment. MuJoCo and stochastic integration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :beta:`Stochastic Integration`: Added support for stochastic dynamics (dynamics driven by Stochastic Differential Equations). - :beta:`Stochastic Integration`: Added stochastic dynamics support in core dynamics infrastructure (``DynamicObject``, ``StateData``, and ``DynParamManager``), including diffusion propagation APIs and support for shared noise sources. - :beta:`Stochastic Integration`: Added diffusion dynamics task support to ``MJScene`` via ``AddModelToDiffusionDynamicsTask()`` for MuJoCo systems with stochastic state dynamics. - :beta:`Stochastic Integration`: Added stochastic integrator base classes ``StateVecStochasticIntegrator``. - :beta:`Stochastic Integration`: Added ``svIntegratorWeakStochasticRungeKutta`` to support stochastic integrator implementations. - :beta:`Stochastic Integration`: Added :ref:`svStochasticIntegratorMayurama` (Euler-Mayurama), a 1-weak/1-strong stochastic integrator. - :beta:`Stochastic Integration`: Added two stochastic integrators: :ref:`svStochasticIntegratorW2Ito1` and :ref:`svStochasticIntegratorW2Ito2`. These are 2-weak-order stochastic integrators. - :beta:`Stochastic Integration`: Added MuJoCo models (:ref:`meanRevertingNoise`, :ref:`stochasticAtmDensity`, and :ref:`stochasticDragCoeff`) to model mean-reverting stochastic processes in dynamics-task modules. - :beta:`Stochastic Integration`: Added :ref:`meanRevertingNoiseStateEffector`, a generic spacecraft state effector that propagates a scalar Ornstein-Uhlenbeck mean-reverting stochastic state. - :beta:`Stochastic Integration`: Added :ref:`scenarioStochasticDrag` and :ref:`scenarioStochasticDragSpacecraft`, which illustrate how to use a state driven by stochastic dynamics to model randomly evolving atmospheric density (and thus drag force). The former scenario uses MuJoCo dynamics and the latter spacecraft dynamics. - :beta:`Stochastic Integration`: Added optional density correction support to :ref:`dragDynamicEffector` through ``densityCorrectionStateName``, allowing drag density to be computed as ``(1 + correction) * neutralDensity`` using a user-selected scalar state. - Added :ref:`thrOnTimeToForce` module to convert thruster on-times to thruster forces for use in MuJoCo scenes - Added :ref:`scenarioThrArmControl`, a MuJoCo example scenario for spacecraft control using thruster arms. - Added :ref:`DragGeometryMsgPayload`, which contains geometry information of a body necessary to compute the drag acting on such body. - Added :ref:`cannonballDrag`, a model intended to be used with MuJoCo dynamics to model cannonball aerodynamic drag forces and torques acting on bodies. - Added :ref:`linearTimeInvariantSystem`. This module implements a linear time-invariant system using state-space representation. It can be used to model linear systems in the dynamics task of ``MJScene``. This model is abstract: subclasses must specify how the input vector is read from input messages, and the output vector is written to output messages. Subclasses can be implemented in Python. - Added :ref:`singleActuatorLTI`: a single-input single-output subclass of :ref:`linearTimeInvariantSystem` whose input and output is a :ref:`SingleActuatorMsgPayload`. - Added :ref:`forceAtSiteLTI`: a subclass of :ref:`linearTimeInvariantSystem` whose input vector is read from a :ref:`ForceAtSiteMsgPayload` and output vector is written to a :ref:`ForceAtSiteMsgPayload`. - Added :ref:`CmdForceInertialToForceAtSite`, a module that rotates inertial-frame force commands into a site-fixed :ref:`ForceAtSiteMsgPayload`. - Added :ref:`OrbitalElementControl`, a :ref:`linearTimeInvariantSystem` subclass that computes orbital-element feedback and outputs inertial force commands through :ref:`CmdForceInertialMsgPayload`. - Added :ref:`scenarioFormationFlyingWithDrag`, a MuJoCo example scenario for chief-deputy formation flying in LEO with differential cannonball drag and orbital-element feedback control. Visualization and data handling ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Updated :ref:`vizInterface` to bind to all network interfaces (``0.0.0.0``) by default, enabling Vizard connectivity when Basilisk is running inside a container. - Added ``BSK_SUPPORT_DATA_CACHE`` environment variable to ``dataFetcher.py`` to allow overriding the default Pooch cache directory for support data files. See :ref:`addSupportData` for details. - Local data fetches fall back to using the pooch fetch if local files are not found. - No longer prefetch ephemeris data kernels on initial local builds. The data fetcher will handle it. - Added :ref:`bskPrinciples-6a` to explain how to import Basilisk provided data Documentation, examples, and validation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Added a new scenario, :ref:`scenario_FaultList`, that demonstrates the use of the fault modeling capabilities by selecting faults from :ref:`BSK_Faults`. - Update the developer workflow on how release notes are added. The new method now adds small release notes RST snippets into ``docs/source/Support/bskReleaseNotesSnippets`` folder. A README.md file there explains how to do this. - Updated documentation on how to use ``bskExamples`` to download a copy of the tutorial examples - Fixed range of grammatical typos in the Basilisk documentation - Ensure the HTML documentation figures from the example scenario look more consistent - Avoid a memory leak when saving off figures in the CI Unit tests to build the online documentation