Releases: AVSLab/basilisk
Basilisk v2.10.0
- Stochastic Integration: Added support for stochastic dynamics (dynamics driven by Stochastic Differential Equations).
- Stochastic Integration: Added stochastic dynamics support in core dynamics infrastructure (
DynamicObject,StateData,
andDynParamManager), including diffusion propagation APIs and support for shared noise sources. - Stochastic Integration: Added diffusion dynamics task support to
MJSceneviaAddModelToDiffusionDynamicsTask()for
MuJoCo systems with stochastic state dynamics. - Stochastic Integration: Added stochastic integrator base classes
StateVecStochasticIntegrator. - Stochastic Integration: Added
svIntegratorWeakStochasticRungeKuttato support stochastic integrator implementations. - Stochastic Integration: Added
svStochasticIntegratorMayurama(Euler-Mayurama), a 1-weak/1-strong stochastic integrator. - Stochastic Integration: Added two stochastic integrators:
svStochasticIntegratorW2Ito1andsvStochasticIntegratorW2Ito2.
These are 2-weak-order stochastic integrators. - Stochastic Integration: Added MuJoCo models (
meanRevertingNoise,stochasticAtmDensity, and
stochasticDragCoeff) to model mean-reverting stochastic processes in dynamics-task modules. - Stochastic Integration: Added
meanRevertingNoiseStateEffector, a generic spacecraft state effector that propagates a scalar
Ornstein-Uhlenbeck mean-reverting stochastic state. - Stochastic Integration: Added
scenarioStochasticDragandscenarioStochasticDragSpacecraft, 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. - Stochastic Integration: Added optional density correction support to
dragDynamicEffectorthrough
densityCorrectionStateName, allowing drag density to be computed as
(1 + correction) * neutralDensityusing a user-selected scalar state. - Updated
tleHandlingto 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. - Added a new scenario,
scenario_FaultList, that demonstrates the use of the fault modeling capabilities by selecting faults fromBSK_Faults. - Added a
Dockerfileto build Basilisk container images. - Prebuilt multi-architecture (
linux/amd64,linux/arm64) container images are now published to GHCR on each release tag. - Updated
vizInterfaceto bind to all network interfaces (0.0.0.0) by default, enabling Vizard connectivity when Basilisk is running inside a container. - Added
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
thrOnTimeToForcemodule to convert thruster on-times to thruster forces for use in MuJoCo scenes. - Fixed
reactionWheelStateEffectormixed-model wheel logging so theta outputs are indexed correctly when balanced and jitter wheel models are used together. - Added a new
facetedSpacecraftModelmodule 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
facetedSpacecraftProjectedAreamodule 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. - Fixed
thrJointCompensationhinged joint control sign convention so that the computed compensation torque is applied in the correct direction. - Added
scenarioThrArmControl, a MuJoCo example scenario for spacecraft control using thruster arms. - Added Python 3.14 support across packaging and CI.
- Updated platform install guides to document Basilisk support for Python 3.14.
- Updated
tleHandlingTLE parsing to fail explicitly on unsupported catalog-ID encodings. - Added tests in
test_readTLE.pyto validate rejection of unsupported catalog-ID encoding. - Added
sccachecompiler caching to CI builds to speed up incremental C++ compilation. - Removed deprecated
vizInterface.MultiSphereVectorsupport; usevizInterface.MultiShapeVector. - Removed deprecated
vizInterface.MultiSphereandvizInterface.MultiSphereInfoaliases; usevizInterface.MultiShapeandvizInterface.MultiShapeInfo. dragDynamicEffector,facetDragDynamicEffector, andcannonballDragnow accept an optionalwindVelInMsgto compute atmosphere-relative drag velocity; supersedes the formeruseAtmosphereRelativeVelocity/planetOmega_Nflags.- Updated scenarios to illustrate optional use of wind velocity input.
- Added
windBaseabstract base class andzeroWindModelconcrete implementation. - Removed Python 3.8 support from the build and CI configuration, and marked Python 3.9 support as deprecated for removal after March 2027.
- Added
stripLocationto support the strip imaging mode. - Updated
locationPointingto include the new strip imaging mode. - Added new tests in
test_locationPointing.pyto verify the new strip imaging mode. - Created new message
StripStateMsgPayloadto interfacelocationPointingwithstripLocation. - Added the scenario
scenarioStripImagingshowing how to perform strip imaging tasks. - Updated Python packaging metadata to use the PEP 639 license fields.
- Added optional
sunEclipseInMsginput tofacetSRPDynamicEffectorso that eclipse shadow conditions scale the SRP force and torque by the illumination factor. - Added documentation for the
bsk-sdkplugin system, covering how to install, write, and distribute out-of-tree Basilisk plugins as standard Python wheels. - Added
BSK_SUPPORT_DATA_CACHEenvironment variable todataFetcher.pyto allow overriding the default Pooch cache directory for support data files. - Added missing docstring to
gravBodyFactory.createSpiceInterface()that prevented it from being built. - Added a detailed note for
spicePlanetFramesdescribing defaultIAU_*behavior and supported alternatives. - Added an
examplesoptional dependency set for installing example-only Python packages. - Added a matching
python conanfile.py --examples Truebuild option for source checkouts. - Improved
gravityEffectorgravity-coefficient loading to enforce consistent truncation. - Updated spherical-harmonic coefficient parsing to handle missing entries and reject malformed rows.
- Added
linkBudget, a communication module that computes link Carrier-to-Noise Ratio (CNR) between two antennas. - Fixed
PythonVariableLoggerto resume logging correctly afterReset()and handle edge cases. - Added
spacecraftChargingEquilibriummodule to solve coupled servicer/target equilibrium potentials. - Updated developer workflow for release notes to use snippet files.
- Removed the default
--cleanflag fromsetup.pyto allow incremental pip wheel builds. - TLE parsing fixed to be robust to file ending issues between LF and CRLF.
- Updated
conanfile.pyto passcompiler.cstd=gnu17during Conan builds. - Updated the World Magnetic Model (WMM) coefficients file to the 2025 version.
- 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.
- Warnings for not connected messages in
simpleAntennafor ground-based antennas are no longer raised. - Updated documentation on how to use
bskExamplesto download tutorial examples. - Added
thrJointCompensationmodule for joint torque compensation during thruster firing. - Added
bskPrinciples-6adocumentation entry on importing Basilisk data. - Added
inertialCartFeedbackmodule for inertial-frame relative motion control. - Added
DragGeometryMsgPayloadfor drag computation geometry. - Added
cannonballDragmodel for MuJoCo aerodynamic drag. - Added
linearTimeInvariantSystemmodule for state-space modeling in dynamics tasks. - Added
singleActuatorLTIandforceAtSiteLTIsubclasses. - Fixed grammatical typos in documentation and improved figure consistency.
- Avoided memory leak when saving figures in CI unit tests.
- Deprecated the
pytestoptional flagshow_plots. - Added
orbElemOffsetfor orbital element offsets. - Added
cmdForceInertialToForceAtSitemodule for force frame transformation. - Added
orbitalElementControlmodule for orbital feedback control. - Added
scenarioFormationFlyingWithDragexample scenario.
Basilisk v2.9.1
- Removed the default
--cleanflag fromsetup.pyto allow for incremental pip wheel builds. - TLE parsing fixed to be robust to file ending issues between LF and CRLF.
- Updated
conanfile.pyto passcompiler.cstd=gnu17during Conan build step to avoidcspice/0067
build failures on newer GCC 15 based Linux toolchains. - 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.
- Updated documentation on how to use
bskExamplesto download a copy of the tutorial examples - Added
bskPrinciples-6ato explain how to import Basilisk provided data - 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
- Updated the World Magnetic Model (WMM) Coefficients file to the 2025 version.
Full Changelog: v2.9.0...v2.9.1
Basilisk v2.9.0
- Deploy both release docs at https://avslab.github.io/basilisk and developer beta
docs at https://avslab.github.io/basilisk/developer. - Added
releaseGuideon 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.
- Removed supportData files from wheels and source distributions to reduce package size.
- Added automatic MD5 registry generation via
makeRegistry.pyfor 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.txtand 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
bskPrinciples-11capability. Now enabled forextForceTorque,constraintDynamicEffector,
andthrusterDynamicEffectorattachable tospinningBodyOneDOFStateEffector,
spinningBodyTwoDOFStateEffector, andspinningBodyNDOFStateEffector. - Added support for
linearTranslationOneDOFStateEffectorto attach dependent effectors. - Improved documentation structure by separating build-from-source instructions from
pipinstallation instructions. - Added custom reaction wheel: "NanoAvionics RW0" to
src/utilities/simIncludeRW.py - Added TLE handling utilities in
tleHandlingto parse TLE files and convert to orbital elements - Removed deprecated use of astro constants from
src/utilities/astroFunction.py.
Users should be astrodynamics constants fromBasilisk.architecture.astroConstants. - Made statistical unit tests more robust
- Fix typo in how
gravityEffectorcompute the planets gravity potential contributions - Added fault modeling capability to
magnetometermodule. - Added new module
MJSystemCoMto extract the system center of mass position and velocity from a MuJoCo simulation. - Added new module
MJSystemMassMatrixto extract the system mass matrix from a MuJoCo simulation. - Added new module
MJJointReactionForcesto extract the reaction forces and torques acting on the joints from a MuJoCo simulation. - Added new module
hingedJointArrayMotorto determine the motor torques for an array of hinged joints. - Added new module
jointMotionCompensatorto determine the hub torques required to negate the effect of hinged joint motor torques on the spacecraft hub motion. - Updated
locationPointingmodule to saveomega_RN_Bto theattGuidOutMsg. 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 useClassicalElements()defined inorbitalMotion. - Added documentation to
constraintDynamicEffectorexplaining 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
constraintDynamicEffector. - Added new example scenarios demonstrating extended use of
constraintDynamicEffector:
scenarioConstrainedDynamicsManeuverAnalysis,scenarioConstrainedDynamicsComponentAnalysis,
andscenarioConstrainedDynamicsFrequencyAnalysis. - Added a new stepper motor simulation module
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
spinningBodyNDOFStateEffectorand
linearTranslationNDOFStateEffector. - Capitalized all structures in
linearTranslationOneDOFStateEffectorandlinearTranslationNDOFStateEffector. - 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 thevizSupport.changeLocation()
method. This drastically reduces the Vizard data size. - The support file
vizSupportis updated to only haveenableUnityVisualization()check
ifvizInterfacehas been built or not. Example scripts check ifvizSupport.vizFoundis true
to executevizInterfacerelated code. - In
vizSupport, in the methodsetInstrumentGuiSetting(), corrected the spelling of
showTransceiverFrustrumto beshowTransceiverFrustum. The prior argument name has
been deprecated. - For
vizInterface.settings, changed the name ofviewCameraConeHUDtoviewCameraFrustrumHUD - 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
conditionTimeinstead of aconditionFunction. This is especially useful for large numbers of events. - Added option for
exactRateMatch=Falsewhen creating events which causes events to be checked whenever the
eventRatehas elapsed since the last check (as opposed to only when the current time is an exact multiple of the
eventRate). ConfigureStopTimenow 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
prescribedMotionStateEffectormodule for attachment of other state effectors to it
rather than the spacecraft hub. - Configured the
spinningBodyOneDOFStateEffector,spinningBodyTwoDOFStateEffector, and
linearTranslationOneDOFStateEffectormodules for optional attachment to the prescribed motion state effector. - Added two example branching scenarios to illustrate the prescribed motion branching capability. See
scenarioPrescribedMotionWithTranslationBranchingandscenarioPrescribedMotionWithRotationBranching. - Fixed a bug where
spinningBodyOneDOFStateEffectorandspinningBodyNDOFStateEffector
both registered their states under the same name, resulting in overwriting and aBSK_ERROR. - Added support for
hingedRigidBodyStateEffectorto 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
simpleInstrumentControllermodule. - Added a new scenario that simulates a debris strike on a flexible solar array
scenarioImpact. - Updated
imuSensorto remove deprecated direct setting ofwalkBoundsGyroandwalkBoundsAccel.
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
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
prescribedRotation1DOFkinematic profiler module. - Added a new prescribed helical screw motion example scenario. See
scenarioPrescribedScrewMotion. - Added
SysModelMixin, a utility class inpy_sys_model.ithat can be used for subclasses
ofSysModel(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.ito use this mixin. - Added support for setting the position and velocity of
MJBodywith pure translational motion. - Added
getAxisandisHingetoMJJoint. - Migrated
supportDatahandling to a Pooch-based fetch system. - Removed
supportDatafiles from wheels and source distributions to reduce package size. - Made
FacetSRPDynamicEffectorvariablesnumFacetsandnumArticulatedFacetsprivate
variables. Their use as public variables has been deprecated since December 2024. - Adds support for updating noise parameters in
magnetometerduring simulation - Deprecated use of
shadowFactorin favor ofilluminationFactor - Added
scenarioAttitudeFeedbackRWMuJoCo, similar toscenarioAttitudeFeedbackRWbut using
MuJoCo dynamics. - Added the modules
simpleAntennaandantennaPower.
Basilisk v2.8.0
-
Marked the use of python 3.8 as deprecated
-
Support for
opNavModeflag within vizSupport was removed, as its deprecation period ended -
Demo video was added to
scenarioQuadMapsdocumentation -
Pinned python dependencies to avoid issues with new package versions.
-
Updated
vscmgStateEffectordocumentation. -
Added a new
vscmgGimbalRateServomodule that computes the VSCMG wheel motor torque and gimbal motor torque. -
Added a new
vscmgVelocitySteeringmodule that computes the desired VSCMG wheel accelerations and gimbal rates. -
Added a new github workflow job
canaryto routinely check the compatibility of latest python dependencies with python 3.13 on the latest mac-os. -
Deprecated
SpacecraftSystem. It was never completed and we have other ways to connect spacecraft components -
Allow event conditions and effects to be defined by functions. This is preferred over the old string-based method, as it
enables the use of arbitrary packages and objects in events and allows for event code to be parsed by IDE tools. -
Add a sun message input and
theta_solarthreshold toSpacecraftLocation. -
Fixed an issue where DynamicObject classes computed time steps by differencing double values rather
thanuint64_tvalues in nanoseconds. This could cause micro drifts in the integration process. See
Issue 993 <https://github.com/AVSLab/basilisk/issues/993>_ for more info on this issue. Now the time step is computed
usinguint64_ttime values and then converted to a double. -
Enhance how
uint64_tvalues are converted to doubles. BSK now warns if the time value is large enough such
that the conversion method has a loss of precision in this process. -
Support including an eclipse message in
SpacecraftLocationto more accurately determine illumination. -
Fixed an issue where the
spaceToGroundTransmitterwould check for the amount of data remaining in a different partition than the one being downlinked. -
Fixed an issue where a high baud rate prevented the
spaceToGroundTransmitterfrom downlinking data from thesimpleStorageUnitorpartitionedStorageUnit. -
Updated default Windows compiler to be
Visual Studio 17 2022. The CI test build now occurs on Windows 11... warning::
If you still want to use Visual Studio 16, then be sure to set the generator
usingpython conanfile.py --generator "Visual Studio 16 2019 -
Improve reading speed of recorded messages by about 75%.
-
Added support for Vizard 2.3.0
-
Adds support for updating noise parameters in
simpleNavduring simulation -
Redirected MuJoCo errors and warnings to
bskLogginginstead of printing to file. -
Update
vizSupportfor thesaveFileargument to take an explicit
file path and file name and not auto-generate the_VizFilessub-folder. This provides the
user more direct control where and how the simulation data is saved. -
Support calling
unsubscribeon input messages. -
Fixed an issue where the
forceTorqueThrForceMappingmodule's Reset() function did not zero all thruster settings correctly. -
Updated
canaryworkflow to run on all pull requests to the develop branch, providing feedback on compatibility with latest dependencies. -
Added links to published paper in
oneAxisSolarArrayPointdocumentation. -
Converted RW data structures in
reactionWheelStateEffectorto shared pointers instead of raw pointers. -
The
BSKLoggernow raises aBasiliskError(Basilisk.architecture.bskLogging.BasiliskError)
if something is logged atBSK_ERRORlevel. Certain errors are reduced toBSK_WARNINGto reflect
the new behavior. -
Improve reading speed of recorded messages by 1-4 orders of magnitude.
.. warning::
This is a breaking change, see list of known issues for details. Please report any issues
(at buildtime or runtime) with recorders for custom payloads. -
Support initialization of fields in the constructor of message payloads (in Python).
-
Improve string representation of message payloads (in Python).
-
Add support for pretty-printing message payloads (in Python).
-
Updated documentation and all scenarios to use new payload constructor format.
-
Add
scenarioBranchingPanels, which showcases a branching solar array configuration, staged deployment,
and joint locking when panels are stowed or fully deployed. -
Bugfix: joint velocity not being reported correctly in
MJScalarJoint. -
Add
addJointSingleActuatortoMJScene. This can be used to add actuators acting on joints
to a MuJoCo-based simulation (e.g. motors that produce torque). -
Add method to scalar joints class to get to the equality constraint object that can be used to constrain
the joint to a specific value (MJScalarJoint::getConstrainedEquality). -
Add methods
setSolrefandsetSolimptoMJEqualityto enable control of the solver parameters
that control how the equalities are enforced in MuJoCo. -
Add PID controller models for
MJScene. Currently implementedJointPIDController, which can read the state
of a joint and output a torque to act on said joint to achieve a desired angle and angular velocity.
Basilisk v2.7.0
- Updated Linux and Windows CI builds to use
swig4.2.1 - Updated CI scripts to run on latest macOS and no longer use Ubuntu 20.04
- Updated
makeDraftModuleto remove redundant comments and implementation of the destructor,
using only a header-defaulted destructor with= default;syntax. - Fixed issue where reaction wheels with unlimited torque (
useMaxTorque=False) would end simulation prematurely - Added safety mechanism to limit excessive wheel acceleration and provide warning messages
- Fixed a bug in the
SpacecraftLocationmodule that prevented proper eclipse calculation in some cases. - Added support for Vizard release 2.2.2, including transition from MultiSphere to MultiShape, and SWIG structure deprecation through aliasing.
- Fixed scenario name mismatch in
scenarioRerunMonteCarlothat prevented rerunning example Monte Carlo simulation scenarios. - Fixed bug in
thrusterPlatformReferencewhere a DCM had an incorrect transpose operation. - Memory Leak for
reactionWheelStateEffectorfixed via destructor update, swig update,
and removing.disown()in RW factory classes. - Removed the use of
.disown()in all BSK scripts. Python code is modified to ensure
required message of class instance are retained in memory if needed. This removes
a memory leak issue when running lots of instances of BSK in Monte Carlo runs. - C++ wrapped sensor objects (CSS, thrusters, reaction wheels) must now be stored
on the simulation object to prevent premature garbage collection. This change affects all scenarios
using these components. SeebskKnownIssuesfor detailed explanation and examples. Users
upgrading from previous versions must update their scripts to store these objects on their
simulation instance to prevent segmentation faults. Once again, this change replaces the previous use of
.disown()with a more robust memory management approach. - Added comprehensive unit tests for
avsEigenSupportincluding tests for vector and matrix operations
and conversions. - Updated install requirements to not manually install
cmake, but have it installed with pip by including it
inrequirements_dev.txt. Aconandependency requires Basilisk to usecmake<4.0for now. - Add support for python 3.13 by removing the use of
eval()and mostexec()methods,
rewrotemethodizeEvent()inSimulationBaseClass.py. If you use python 3.13+ the
scope of theeval()method has changed (see https://peps.python.org/pep-0667/). - Added
lla2fixedframe()function invizSupportwhich provides ability to define Locations on a parent body by providing latitude/longitude/altitude relative to reference ellipsoid. - Fixed a bug in
radiationPressurewhereparseAndLoadXML()would raise a ValueError when using VS Code's debugger.
The error occurred in Python 3.10.12 because numpy arrays that reference other arrays cannot be resized
without settingrefcheck=False. This fix allows debugging scenarios that use the radiation pressure module. - Enhanced FSW effector interface modules to zero output messages in their reset methods, ensuring safe management
of effector states when algorithms are disabled. This prevents potential runaway operations by clearing stale
control values. - Updated
scenarioDeployingSolarArraysto use the newP-frame designation for the prescribed motion body - Deleted deprecated
prescribedRot1DOFandprescribedTransmodules. They have been replaced a while ago
withprescribedRotation1DOFandprescribedLinearTranslation. - :beta:
Mujoco Support: Added a newDynamicObjectfor multi-body dynamics that uses theMuJoCo <https://mujoco.org>_ library.
Information about using mujoco is found inmujocoDynObject. This is a work in progress, and is not
yet ready for general use. This system will be expanded to include more features and capabilities in future releases. - Added support for showing
QuadMapquadrilateral surface meshes in Vizard, with scenarioscenarioQuadMapsdetailing usage. Allows users to draw quads on celestial bodies and spacecraft. - Added
fixedframe2lla()function invizSupportwhich is useful for computing QuadMap mesh interpolations - Added QuadMap mesh support functions (
quadMapSupport) for displaying camera FOV boxes as projected on the surface of a reference ellipsoid, and drawing rectangular latitude/longitude defined regions. - Updated
THRSimConfigto use a shared pointer to avoid duplication of configuration data across the simulation and to enable access and updates to the parameters during simulation. This change has been implemented in both thethrusterDynamicsEffectorandthrusterStateEffectormodules. - :beta:
Mujoco Support: AddedStatefulSysModelfor models in the dynamics task ofMJScenethat need to declare
continuous-time states. ModifiedscenarioDeployPanelsto illustrate the use ofStatefulSysModel.
Basilisk v2.6.0
- Build
ubuntu-latestwheels for Python 3.9, 3.10, and 3.11 on GitHub CI, allowing for
other CI systems to use these wheels for testing with Basilisk as a dependency. - updated README file. Links now point to local documentation instead of to the pages
on the AVS lab web page that used to host the documentation. - Updated
scenarioBasicOrbitStreamto add the ability to pause and resume the live BSK stream - Added documenation on installing with
pipvia source code inpipInstall - Updated
scenarioOrbitManeuverto include a SPICE module that rotates the Earth - Changed the way polyhedron gravity is computed to be more computationally efficient
- Updated
vizInterfaceto flush the output buffer when saving binary files to avoid truncation - Updated
examplesto better include folders of scenario tutorial scripts - Updated documentation build to use latest version of
sphinxandsphinx_rtd_theme.
Updated the install documenation and optional package requirements. - Updated
MonteCarloExamplesdirectory with a bokeh plotting feature robust to large Monte Carlo datasets - Updated
scenarioVisualizeMonteCarloto autogenerate live bokeh plots in Sphinx documentation - Updated
scenarioMonteCarloAttRWto include the newuseBokehfeature in therun()method - Updated
scenarioMonteCarloAttRWto use more pythonic OOP for Monte Carlo data retention - Updated
scenarioMonteCarloSpiceto use more pythonic OOP for Monte Carlo data retention - Decreased the Basilisk wheel size by keeping large data files out of the wheel.
- The wheel installs the local command tool
bskLargeDatato executebskLargeData.
The purpose is to install the large Basilisk data files into the local Basilisk
python package. - The wheel installs the local command tool
bskExamplesto executebskExamples. This
tool downloads the Basilisk repoexamplesfolder into the local folder - Removed the now deprecated
datashader_utilities.pyin favor of the new bokeh plotting features inAnalysisBaseClass.py - Upgraded protoc compiler to v3.20.0, added
protobufto optional package install list - Created unit tests for protobuffer packing and saving in
vizInterface - Added YouTube video links of Vizard illustrating the
scenarioFlexiblePaneland
scenarioRoboticArmscenarios. - Fixed issue in which reading
RWModelfrom RW message payloads whenvizInterfacewas also
imported would return a Swig Object instead of an enumerated integer. - Refactored the
GaussMarkovclass to enforce walk bounds and remove the need for the 1.5x noise multiplier.
Note: Existing code that used this multiplier will need to be updated to maintain the same behavior. - Removed the deprecated 1.5x multiplier in
magnetometerandcoarsesunsensorwhen setting 'senNoiseStd' - Updated
starTrackerunit tests to properly convert EP's to rotation vector now that random walk exists - Added
scenarioGaussMarkovRandomWalkto showcaseGaussMarkovclass functionality - Added unit test coverage for
GaussMarkovimplementation intempMeasurement,
simpleNavandplanetNav. - Fixed SWIG array handling for message payloads on macOS, particularly addressing issues with uint8_t arrays and other
array types in message payloads. This resolves compatibility issues between SWIG's array typemaps and builds. - A bug was fixed in the
facetSRPDynamicEffectormodule. A transpose was required to be added to a dcm
in order to correctly express rotated facet normals in the spacecraft body frame. - The
facetSRPDynamicEffectormodule was refactored and setters and getters were added for the module
variablesnumFacetsandnumArticulatedFacets. A deprecation warning is added to the module documentation
stating that these variables will be moved to private module variables in Dec 2025. To access these variables
the added setters and getters must be used. - Fixed a bug in which the
MtbEffector.pymodule was not being imported correctly in Python due to lack ofswig_eigen.i
include file inMtbEffector.i. - Added the capability to simulate a fault in the
simpleBatterymodule that reduces the actual storage capacity without directly altering the stated capacity. - Cleaned up what python packages are required to build BSK (
requirements_dev.txt),
to run BSK (requirements.txt) and to build BSK documentation (requirements_doc.txt). - The BSK install instructions are updated to ask users to install by first
pipinstalling build
required packages throughrequirements_dev.txt. - Update the build process to use
conanversion 2.x
Warning: You have to upgrade your python conan package to be able to build Basilisk. Use python install --upgrade conan.
- Added support for subclassing
StateDataand overloading certain methods. This enables support for custom state
behavior, such as quaternions, which have size 4 but their derivative is size 3. This is done in preparation of
a future MuJoCo integration. Note the warning below regarding SWIG files fordynamicEffectorandstateEffector.
Warning: SWIG files for subclasses of dynamicEffector and stateEffector must now
%include "simulation/dynamics/_GeneralModuleFiles/dynParamManager.i" instead of
%include "simulation/dynamics/_GeneralModuleFiles/dynParamManager.h". See
src/simulation/dynamics/dragEffector/dragDynamicEffector.i for an example.
- Update CI Linux build with
opNavto use Ubuntu 22.04, not latest (i.e. 24.02). The latter does not
support directly Python 3.11, and Basilisk does not support Python 3.13 yet. simIncludeGravBodyset the moon equatorial radius in km, not meters.- fixed
subMRP()routine inRigidBodyKinematics - Updated
solarArrayReferenceto correct the wrong assumption of reflective solar arrays for momentum management pointing mode. - Updated the CI build that includes the documentation to fail if a doxygen warning happens
- Removed deprecated swig code that allowed still importing
sys_model.hinstead ofsys_model.i - Updated
groundMappingto correct behavior ifmaximumRange == -1 - Updated scripts to work with
matplotlibversion 3.10.x without errors or warnings - Add support for Python 3.12
- Resolved inconstencies in sensor noise handling for the
imuSensor,coarseSunsensor,
magnetometer,starTracker, andsimpleVoltEstimatormodules. - Added setter and getter methods for the propagation matrices in the
simpleVoltEstimator
andstarTrackermodules as theirAmatrixattributes were private. - Name change warning added to module documentation for the
imuSensorwalkBoundsattribute toerrorBounds
and a note on specifying sensor properties inscenarioGaussMarkovRandomWalk. - Update
makingModules-2on how to make messages available to Basilisk modules - Support for Vizard release 2.2.1, including rotating frame settings and documentation for support of
.glbshape files vizProtobufferupgraded to use latest C++ compiler,protobufPython/C++ library upgraded- Updated
installLinuxto discuss installing BSK on Fedora Linux systems. - Updated CI scripts to catch cases where tests are skipped that should be. Windows now builds properly with
conan2. - Download
cspiceusingconaninstead of providing custom libraries. This ensures all platforms are using
the same version ofcspice. - Ensured that the ability to designate an external BSK folder still works with
conan2
Basilisk v2.5.0
- Added swirl torque information to
THRConfigMsgPayload,thrustCMEstimation, andthrusterPlatformState - Updated required version of
setuptoolsto avoid installation error ("invalid commandbdist_wheel") on
some environments. - Made the initial Basilisk build more robust in case
de430.bspdownload was interrupted - Enhanced
thrusterDynamicEffectorto allow automatic scaling down of thrust and Isp as fuel mass depletes. - Fixed issue with
vizInterfacenot being able to save to file - Fixed issue with
vizInterfacenot saving off Vizard protobuffer message on first time step - Created an input device status message to toggle the
constraintDynamicEffectordynamics module on/off. - Created an output message to record constraint forces and torques acting on separate spacecraft connected using a
constraintDynamicEffectordynamics module. - Added in a low-pass filter to filter the output forces and torques of the
constraintDynamicEffectordynamics module. - Removed deprecated way to log Basilisk module variables
- Removed deprecated way to create C-wrapped Basilisk modules
- Corrected Equations (11) and (12) in the
celestialTwoBodyPointPDF documentation - Expanded the GitHub CI tests to run scenario script tests
- Untangled
ClassicElementsMsgPayloadwhich was used both as a message payload definition
and as a data structure inside modules. The use ofclassicElements()is now depreciated
for the use ofClassicElements()defined inorbitalMotionutilities. - Added
packaging>=22dependency for installing Basilisk to solve an incompatibility issue withsetuptools. - Added support for macOS to the CI test builds, including opNav for all three platforms
- Added CI support to test Linux on latest Ubuntu with opNav
- Added CI support to build and test Basilisk documentation on the GitHub macOS platform
- Added new scenario
scenarioOrbitManeuverTHto do Hohmann transfer using thrusters - Made sure that
astroFunctionsandsimIncludeGravBodynow all pull from the same set of
astronautical data inastroConstants. These tools now all use a consisten set of planet data
referenced from NASA sources. - Updated
simIncludeRWto allow values offCoulomb,fStaticandcViscousto be
specified even if a prebuilt RW data set is used. - If
messagingwas not imported then the msgrecorder()modules couldn't be setup. Now
messagingis imported as part of the Basilisk package so therecorder()modules always work. - Added the ability for GitHub to rebuild the BSK documentation each time a branch is merged back into develop.
This way the online documentation for develop is up to date for each contribution, not just for the hand-built
documentation we did with major tagged releases. The new Basilisk online documentation list is now
<https://avslab.github.io/basilisk>__. - Small updates to the Cmake build process to remove unneeded policies and python 3 swig overwriting scripts
- Added a Lambert's problem based FSW package to compute the DV maneuver required to get to a desired location at a
desired time. At that location, another maneuver may be performed to match the surface velocity of a celestial body.
This FSW package consists of the moduleslambertSolverto solve Lambert's problem,lambertPlannerto
set up and define the Lambert problem,lambertValidatorto check if the solution from thelambertSolver
module violates any constraints before a Delta-V is commanded,lambertSurfaceRelativeVelocityto compute the
inertial velocity required to match the surface velocity of the central body, andlambertSecondDVto compute
the DV maneuver required to match the surface velocity. - Added
scenarioLambertSolverscenario to illustrate the Lambert's problem FSW module package - Added
scenario_LambertGuidanceBSK-Sim scenario to illustrate the Lambert modules in different flight modes - Added new scenario
scenarioSweepingSpacecraftto perform sweeping maneuvers. - Added a new :math:
N-axis translating effectorlinearTranslationNDOFStateEffectorand a corresponding scenario
scenarioExtendingBoom.
Basilisk v2.4.0
-
Added a new example scenario
scenarioConstrainedDynamicsdemonstrating post-docked spacecraft dynamics -
Created a
constraintDynamicEffectordynamics module to couple separate spacecraft motion using holonomic
constraints -
Removed the depreciated manner of creating python modules
-
Created a new example scenario
scenarioTempMeasurementAttitudedemonstrating the use of tempMeasurement module and generating random noise in the measurement. -
Uncaught exceptions raised in Python modules are now printed to
stderrbefore the program is terminated. -
Updated Basilisk and Vizard logos and provided download links
-
Updated
News and Discussionsmenu tab to beExternal Linksto Basilisk related web sites -
Added a new N-axis spinning effector
spinningBodyNDOFStateEffector. This is an expansion ofspinningBodyOneDOFStateEffector
andspinningBodyTwoDOFStateEffectorto any number of degrees of freedom. -
Update the Windows build to automatically include the Math library defines. This avoids having
to include them in BSK source code files individually. -
Added support for arrays and 2D arrays of 16 and 64 bit integers in message definitions
-
Fixed bug where 2D arrays of 32 bit integers would have elements of type
floatin python. -
Fixed the
Identity()method in avsEigenMRP library. -
Fixed the
SpiceInterface::initTimeData()method to write epoch strings with microsecond precision instead of 0.1 second precision
to prevent SPICE errors when epochs ending with seconds higher than 59.95 seconds got rounded up to 60.0 seconds -
Update
dynamicEffectorandstateEffectorclasses to be able to pull the state engine names of the
spacecraft hub object -
The fuel tank module is refactored to remove the limitation of a only being able to have a single instance of a
specific tank model type. -
Update Basilisk documentation build system to use latest version of
sphinxandsphinx_rtd_theme -
Added time tag to
CSSArraySensorMsgPayload -
updated Eigen library to 3.4.0
-
updated OpenCV library to 4.5.5
-
Added support for Vizard 2.2.0
-
Added documentation on using pre-commit formatters and clang formating
-
Added two new scenarios that use the
spinningBodyNDOFStateEffectormodule.scenarioRoboticArmsimulates
a robotic arm that changes orientation through the use of theprescribedRotation1DOFprofiler module.
scenarioFlexiblePanelsimulates a flexible panel that has torsional and bending modes, which are approximated
though a lumped-mass approach and discretized to as many subpanels as needed. -
Fixed
protectAllClassesmethod inBasilisk.architecture.swig_common_modelso that it actually protects the classes
in the given module (prevents code from setting unknown attributes). This might impact user code that depended on adding
additional attributes to python classes generated by SWIG. -
Updated install instructions to specify python version 3.8 to 3.11 are required. Python 3.12 does yet work.
-
Updated
bskPrinciples-6to discuss how to log private C++ module variables that have a getter method -
Updated
cppModuleTemplateto make user configurable variables private, accessed via setter and getter methods -
Updated
makeDraftModuleto make C++ modules with private module variables using setter/getter methods -
Updated
cppModules-1to discuss the new expectation that C++ modules are all private. This enables
graceful module variable depreciation if needed. -
Added support for numpy 2.0.
-
Fixed use of spherical coordinate system in
magneticFieldWMMmodel. -
Added ability to run the GitHub
pull_request.ymlaction on a select branch -
Fixed mass depletion rate bug in
thrusterStateEffectorpreviously fixed at 100% -
Enhanced
solarArrayReferencewith a mode that can compute the reference for the solar arrays that maximizes SRP torque opposed to current RW net momentum. -
(Beta) Added PEP-517-compliant project specification, providing initial support for installation via
pip install ..- NOTE: This is primarily intended to support pre-compiled releases in the future. All users are recommended to continue
usingpython conanfile.pyinstallation for now.
- NOTE: This is primarily intended to support pre-compiled releases in the future. All users are recommended to continue
-
The
cmakecommand now downloads large Spice data files automatically from the JPL server. -
Updated Conan/CMake build system to avoid unnecessary recompilations and greatly speed up rebuilds.
Basilisk v2.3.0
- Added optional facet articulation to the
facetSRPDynamicEffectormodule. - Fixed a bug where the legacy variable logging API would either, not log at all or log at a rate different to the
requested rate. - Fixed a python version checking bug that prevented Basilisk from compiling on Windows
- Created a new example scenario
scenarioHaloOrbitdemonstrating a near-Halo orbit simulation - Updated versioning to better follow the
semantic versioning <https://semver.org>_ standard, in the format
MAJOR.MINOR.PATCH. Releases will increment the minor version number, while pull requests into develop will
automatically increment the patch number. This allows users to reference/require specific versions of Basilisk
outside of the release cycle.
Online documentation is only built for theMAJOR.MINOR.0releases - updated plotting of
opNavexample scenarios to work again with latest version ofmatplotlib - fixed a slew of compiler warnings when compiling with Xcode 15
- Refactored the
PrescribedTransMsgPayloadmessage by renaming the message to
LinearTranslationRigidBodyMsgPayloadand renaming the message variables fromscalarPosandscalarVelto
rhoandrhoDot - Deprecated the
prescribedMotionMsgPayloadmessage and replaced with two separate
prescribedTranslationMsgPayloadandprescribedRotationMsgPayloadmessages. - added support for the new
swig4.2 version - updated the Windows build to compile properly with
opNavflag set to true. A
opencvrelated flag had to be updated. - added supoport for Vizard 2.1.6
- Created a
prescribedLinearTranslationdynamics module to profile prescribed linear translation for a
secondary rigid body connected to the spacecraft hub. This new module deprecates theprescribedTransmodule.
To simulate the translation, this module must be connected to theprescribedMotionStateEffector
dynamics module. - Created a
prescribedRotation1DOFdynamics module to profile a prescribed 1 DOF rotation for a secondary
rigid body connected to the spacecraft hub. This new module deprecates theprescribedRot1DOFfsw module.
To simulate the rotation, this module must be connected to theprescribedMotionStateEffectordynamics module. - Created a new example scenario
scenarioDeployingSolarArraysdemonstrating how to simulate hub-relative
multi-body prescribed motion. - Added support for Vizard 2.1.6.1
- Updated
MtbEffectorto include missing swig interface file for a message definition and corrected
message table in the module documentation. - Added smoothed bang-bang and smoothed bang-coast-bang profiler options to the
prescribedLinearTranslation
simulation module. Note that the optional module variablecoastOptionRampDurationhas been renamed to
coastOptionBangDuration. The setter and getter methods for this variable are renamed to reflect this change as
setCoastOptionBangDuration()andgetCoastOptionBangDuration(), respectively. See the module documentation
for the current usage of this parameter and these associated methods. - Added a new commanded linear force array
LinearTranslationRigidBodyMsgPayload. - Added a new single-axis translating effector
linearTranslationOneDOFStateEffector. - Added smoothed bang-bang and smoothed bang-coast-bang profiler options to the
prescribedRotation1DOF
simulation module. Note that the optional module variablecoastOptionRampDurationhas been renamed to
coastOptionBangDuration. The setter and getter methods for this variable are renamed to reflect this change as
setCoastOptionBangDuration()andgetCoastOptionBangDuration(), respectively. See the module documentation
for the current usage of this parameter and these associated methods.
Basilisk version 2.2.1
- Created a new example scenario
scenarioSatelliteConstellationdemonstrating setup of a Walker-Delta constellation - Created a new
pinholeCameramodule to support generation of landmarks-based measurements around a
small body. - Corrected a memory leak in the
swigaccess to standard vectors inside messages. - A new integrated example script
scenarioSmallBodyLandmarksdemonstrates the use of the pinhole camera module - Created a new example scenario
scenarioSpinningBodiesTwoDOFthat showcases the different capabilities of the
spinningBodyTwoDOFStateEffectormodule. - Corrected an error with
thrusterStateEffectorwhere if there are multiple instances of the
thruster state effector then the last effector will over-write all the state of the earlier thrusters. - Corrected an error with
magnetometerwhere the RNG seed was passed to the Gauss-Markov noise model within the
constructor and could therefore not be modified after creating the object. Furthermore, the noise model is now only
used if all three components of the standard deviation parameter are initialized to a positive value. - Removed fswAuto and associated documentation, as the tool was outdated.
- Changed how C modules are wrapped as C++ classes. This makes handling C modules the same as C++ modules,
removing the need for "Config" and "Wrap" objects. Updated all scenarios and test files for this new syntax.
To convert prior script to use the new syntax, seebskPrinciples-2for the simple new
syntaxt to add C-modules. - Modified
mrpFeedbackto enable the use of a modified control law, and added the integral control torque
feedback output message. - Resolved a crash, induced by uninitialized memory, in the Camera module. The crash was first seen on Ubuntu 22 with
gcc 9.5 - Implemented new syntax for variable logging. See
bskPrinciples-6. - Basilisk minimum Python version is now formally 3.8.x (checked by build files). Previously, it was indicated to be
3.7.x yet in practice it was 3.8.x. - Added a
TotalAccumDV_CN_Nfield inSCStatesMsgPayloadthat saves the total accumulated velocity of the
spacecraft's center of mass in the inertial frame. - Added prescribed angle and angle rates to
spinningBodyOneDOFStateEffectorandspinningBodyTwoDOFStateEffector
modules. - Created a
scanningInstrumentController, similar tosimpleInstrumentController, but which constantly checks if the attitude error
and angular rate (optional) are within the requirement limits and sends an imaging command to asimpleInstrument. - Added a new scenario
scenarioHohmannthat performs a Hohmann transfer with attitude mode changes.
The basic attitude flight modes are implemented using the Basilisk event system. - updated conan support to latest
1.xxversion to provide support for macOS Sonoma - updated macOS
cspicelibrary to be compiled with Xcode 15. This addresses some errors that appeared
when calling the prior pre-builtcspicelibrary. The new library is backwards compatible with
prior versions of Xcode. - Fixed a bug in the conanfile where the
stderroutput from asubprocess.Popencall was being interpreted as an
error. Rather, the process return code (0 for success, and anything else for failure) indicates the success. - The
MAX_N_CSS_MEASdefine is increased to 32 matching the maximum number of coarse sun sensors. - mixed bug in time to nano-seconds conversions in
macros.pysupport file - Created
thrusterPlatformStateto map the thruster configuration information to body frame given the time-varying platform states. - Updated
thrusterPlatformReferenceto add an input and output thruster config msg, and integral feedback term
which dumps steady-state momentum in case of uncertainties on the CM location. - Created
thrustCMEstimationto perform online estimation of the CM using gimbaled thruster torque measurements. - Refactored
GravityEffector. Adding custom gravity models can now be done by subclassingGravityModel. The
utility methoduseSphericalHarmonicsGravityModelhas been added to planetary body objects, which makes the body
use spherical harmonics and loads them from a file with a single command. Similarly, the methodsusePolyhedralGravityModel
andusePointMassGravityModelhave been added. - Fixed examples and tests to run even when Basilisk is built with
--vizInterface False. - Added a new method
setDataBuffer()tosimpleStorageUnitandpartitionedStorageUnitto add or remove data from specified partitions. - Refactored
simIncludeGravBody. The most notable change for users is that the commonly used line
scObject.gravField.gravBodies = spacecraft.GravBodyVector(list(gravFactory.gravBodies.values()))
can be replaced bygravFactory.addBodiesTo(scObject)(wherescObjectis aspacecraft.Spacecraft
orspacecraftSystem.SpacecraftSystem, andgravFactoryis asimIncludeGravBody.gravBodyFactory) - Added condition in
thrustCMEstimationto avoid measurement updates when inputattGuidInMsghas not been written. - Added
scenarioSepMomentumManagementto show how to use a dual-gimbaled electric thruster to perform continuous
momentum management. - Clarified documentation of the input variable
FirstStartof the methodCreateNewTask(). - Marked the method
CreateNewTask()input variableInputDelayas depreciated. This variable
was never implemented and did nothing. - Fixed terminal events to terminate at the time they are triggered instead of one timestep after.