Releases: AVSLab/basilisk
Basilisk v2.5.0
- Added swirl torque information to
THRConfigMsgPayload
,thrustCMEstimation
, andthrusterPlatformState
- Updated required version of
setuptools
to avoid installation error ("invalid commandbdist_wheel
") on
some environments. - Made the initial Basilisk build more robust in case
de430.bsp
download was interrupted - Enhanced
thrusterDynamicEffector
to allow automatic scaling down of thrust and Isp as fuel mass depletes. - Fixed issue with
vizInterface
not being able to save to file - Fixed issue with
vizInterface
not saving off Vizard protobuffer message on first time step - Created an input device status message to toggle the
constraintDynamicEffector
dynamics module on/off. - Created an output message to record constraint forces and torques acting on separate spacecraft connected using a
constraintDynamicEffector
dynamics module. - Added in a low-pass filter to filter the output forces and torques of the
constraintDynamicEffector
dynamics 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
celestialTwoBodyPoint
PDF documentation - Expanded the GitHub CI tests to run scenario script tests
- Untangled
ClassicElementsMsgPayload
which 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>=22
dependency 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
scenarioOrbitManeuverTH
to do Hohmann transfer using thrusters - Made sure that
astroFunctions
andsimIncludeGravBody
now 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
simIncludeRW
to allow values offCoulomb
,fStatic
andcViscous
to be
specified even if a prebuilt RW data set is used. - If
messaging
was not imported then the msgrecorder()
modules couldn't be setup. Now
messaging
is 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 moduleslambertSolver
to solve Lambert's problem,lambertPlanner
to
set up and define the Lambert problem,lambertValidator
to check if the solution from thelambertSolver
module violates any constraints before a Delta-V is commanded,lambertSurfaceRelativeVelocity
to compute the
inertial velocity required to match the surface velocity of the central body, andlambertSecondDV
to compute
the DV maneuver required to match the surface velocity. - Added
scenarioLambertSolver
scenario to illustrate the Lambert's problem FSW module package - Added
scenario_LambertGuidance
BSK-Sim scenario to illustrate the Lambert modules in different flight modes - Added new scenario
scenarioSweepingSpacecraft
to perform sweeping maneuvers. - Added a new :math:
N
-axis translating effectorlinearTranslationNDOFStateEffector
and a corresponding scenario
scenarioExtendingBoom
.
Basilisk v2.4.0
-
Added a new example scenario
scenarioConstrainedDynamics
demonstrating post-docked spacecraft dynamics -
Created a
constraintDynamicEffector
dynamics module to couple separate spacecraft motion using holonomic
constraints -
Removed the depreciated manner of creating python modules
-
Created a new example scenario
scenarioTempMeasurementAttitude
demonstrating the use of tempMeasurement module and generating random noise in the measurement. -
Uncaught exceptions raised in Python modules are now printed to
stderr
before the program is terminated. -
Updated Basilisk and Vizard logos and provided download links
-
Updated
News and Discussions
menu tab to beExternal Links
to Basilisk related web sites -
Added a new N-axis spinning effector
spinningBodyNDOFStateEffector
. This is an expansion ofspinningBodyOneDOFStateEffector
andspinningBodyTwoDOFStateEffector
to 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
float
in 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
dynamicEffector
andstateEffector
classes 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
sphinx
andsphinx_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
spinningBodyNDOFStateEffector
module.scenarioRoboticArm
simulates
a robotic arm that changes orientation through the use of theprescribedRotation1DOF
profiler module.
scenarioFlexiblePanel
simulates 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
protectAllClasses
method inBasilisk.architecture.swig_common_model
so 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-6
to discuss how to log private C++ module variables that have a getter method -
Updated
cppModuleTemplate
to make user configurable variables private, accessed via setter and getter methods -
Updated
makeDraftModule
to make C++ modules with private module variables using setter/getter methods -
Updated
cppModules-1
to 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
magneticFieldWMM
model. -
Added ability to run the GitHub
pull_request.yml
action on a select branch -
Fixed mass depletion rate bug in
thrusterStateEffector
previously fixed at 100% -
Enhanced
solarArrayReference
with 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.py
installation for now.
- NOTE: This is primarily intended to support pre-compiled releases in the future. All users are recommended to continue
-
The
cmake
command 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
facetSRPDynamicEffector
module. - 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
scenarioHaloOrbit
demonstrating 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.0
releases - updated plotting of
opNav
example scenarios to work again with latest version ofmatplotlib
- fixed a slew of compiler warnings when compiling with Xcode 15
- Refactored the
PrescribedTransMsgPayload
message by renaming the message to
LinearTranslationRigidBodyMsgPayload
and renaming the message variables fromscalarPos
andscalarVel
to
rho
andrhoDot
- Deprecated the
prescribedMotionMsgPayload
message and replaced with two separate
prescribedTranslationMsgPayload
andprescribedRotationMsgPayload
messages. - added support for the new
swig
4.2 version - updated the Windows build to compile properly with
opNav
flag set to true. A
opencv
related flag had to be updated. - added supoport for Vizard 2.1.6
- Created a
prescribedLinearTranslation
dynamics module to profile prescribed linear translation for a
secondary rigid body connected to the spacecraft hub. This new module deprecates theprescribedTrans
module.
To simulate the translation, this module must be connected to theprescribedMotionStateEffector
dynamics module. - Created a
prescribedRotation1DOF
dynamics module to profile a prescribed 1 DOF rotation for a secondary
rigid body connected to the spacecraft hub. This new module deprecates theprescribedRot1DOF
fsw module.
To simulate the rotation, this module must be connected to theprescribedMotionStateEffector
dynamics module. - Created a new example scenario
scenarioDeployingSolarArrays
demonstrating how to simulate hub-relative
multi-body prescribed motion. - Added support for Vizard 2.1.6.1
- Updated
MtbEffector
to 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 variablecoastOptionRampDuration
has 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 variablecoastOptionRampDuration
has 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
scenarioSatelliteConstellation
demonstrating setup of a Walker-Delta constellation - Created a new
pinholeCamera
module to support generation of landmarks-based measurements around a
small body. - Corrected a memory leak in the
swig
access to standard vectors inside messages. - A new integrated example script
scenarioSmallBodyLandmarks
demonstrates the use of the pinhole camera module - Created a new example scenario
scenarioSpinningBodiesTwoDOF
that showcases the different capabilities of the
spinningBodyTwoDOFStateEffector
module. - Corrected an error with
thrusterStateEffector
where 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
magnetometer
where 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-2
for the simple new
syntaxt to add C-modules. - Modified
mrpFeedback
to 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_N
field inSCStatesMsgPayload
that saves the total accumulated velocity of the
spacecraft's center of mass in the inertial frame. - Added prescribed angle and angle rates to
spinningBodyOneDOFStateEffector
andspinningBodyTwoDOFStateEffector
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
scenarioHohmann
that 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.xx
version to provide support for macOS Sonoma - updated macOS
cspice
library to be compiled with Xcode 15. This addresses some errors that appeared
when calling the prior pre-builtcspice
library. The new library is backwards compatible with
prior versions of Xcode. - Fixed a bug in the conanfile where the
stderr
output from asubprocess.Popen
call 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_MEAS
define is increased to 32 matching the maximum number of coarse sun sensors. - mixed bug in time to nano-seconds conversions in
macros.py
support file - Created
thrusterPlatformState
to map the thruster configuration information to body frame given the time-varying platform states. - Updated
thrusterPlatformReference
to 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
thrustCMEstimation
to 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 methoduseSphericalHarmonicsGravityModel
has 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
andusePointMassGravityModel
have been added. - Fixed examples and tests to run even when Basilisk is built with
--vizInterface False
. - Added a new method
setDataBuffer()
tosimpleStorageUnit
andpartitionedStorageUnit
to 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)
(wherescObject
is aspacecraft.Spacecraft
orspacecraftSystem.SpacecraftSystem
, andgravFactory
is asimIncludeGravBody.gravBodyFactory
) - Added condition in
thrustCMEstimation
to avoid measurement updates when inputattGuidInMsg
has not been written. - Added
scenarioSepMomentumManagement
to show how to use a dual-gimbaled electric thruster to perform continuous
momentum management. - Clarified documentation of the input variable
FirstStart
of the methodCreateNewTask()
. - Marked the method
CreateNewTask()
input variableInputDelay
as 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.
Basilisk version 2.2.0
- Created new way to define Python modules by inheriting from
Basilisk.architecture.sysModel.SysModel
.
See :ref:pyModules
for details. - Added the ability to integrate the ODE's of two or more Basilisk modules that are
DynamicObject
class
member at the same time. See :ref:bskPrinciples-9
- updated ZMQ version to 4.5.0. For 2-way communication with
opNav
modules talking to Vizard
then Vizard 2.1.5 or newer should be used. This also removes the need for the legacy bincrafters code repo.
Delete~/.conan
folder if you run intoconan
issues. - The Basilisk project C++ version is advanced from C++11 to C++17
- Disabled the following build options in the conan included OpenCV dependency; with_ffmpeg video frame encoding lib,
with_ade graph manipulations framework, with_tiff generate image in TIFF format, with_openexr generate image in EXR
format, with_quirc QR code lib. Users that have Basilisk control the build of these modules through the External
Modules CMake integration will need to manual toggle these OpenCV build options. - Updated :ref:
SmallBodyNavEKF
with several bug fixes. Removed spacecraft attitude estimation component. - Bug fix made to :ref:
eclipse
: Saturn, Jupiter, Uranus, and Neptune radii were incorrectly being assigned the
radius of Mars. - Added custom planet name to :ref:
eclipse
in case the user wants to use a body not contained within the module. - Removed all instances of using
unitTestSupport.np2EigenVectorXd()
, as this function is now unneeded. - Created a :ref:
facetSRPDynamicEffector
dynamics module to calculate the B frame SRP force and torque acting on a
static spacecraft. - fixed
PCI2PCPF()
andPCPF2PCI
methods in :ref:geodeticConversion
to use the correct DCM - updated :ref:
geodeticConversion
to be able to account for planet ellipsoidal shape if polar radius is provided - Google Test C/C++ testing framework added
- Created a :ref:
prescribedRot2DOF
fsw module to profile a prescribed 2 DOF rotational maneuver for a secondary rigid
body connected to the spacecraft hub. To simulate the maneuver, this module must be connected to the
:ref:prescribedMotionStateEffector
dynamics module. - Corrected default value of
accuracyNanos
in :ref:simSynch
to be 0.01 seconds. - Added a deprecation system for Basilisk. For developers, see :ref:
deprecatingCode
. - Changed the units of plasma flux in :ref:
dentonFluxModel
and :ref:PlasmaFluxMsgPayload
from
[cm^-2 s^-1 sr^-2 eV^-1] to [m^-2 s^-1 sr^-2 eV^-1], because m^-2 is used more frequently in computations - Fixed a bug in eclipse that caused potentially occluding bodies to be skipped if a prior body was closer to the sun
than the spacecraft - fixed the time evaluation in :ref:
msisAtmosphere
- Added an optional
controllerStatus
variable anddeviceStatusInMsg
message to the
:ref:simpleInstrumentController
to match the functionality of the corresponding data and power modules - Corrected tasks priorities in several scenarios and added checks in two modules to ensure that C MSG read errors are
not thrown - Fixed bug where message struct members of bool python types are returned as empty dicts instead of array of boolsgit
- Refactored the :ref:
prescribedMotionStateEffector
dynamics module to vary the prescribed states across the dynamics
integration time step. - The encryption build option for the project's conan zmq dependency is disabled because it is uneeded.
- Added an optional
controllerStatus
variable anddeviceStatusInMsg
message to the :ref:simpleInstrumentController
to
match the functionality of the corresponding data and power modules - Corrected tasks priorities in several scenarios and added checks in two modules to ensure that C MSG read errors are not thrown
- Reworked how integrators are implemented. New Runge-Kutta integrators may
now be added simply by specifying the relevant coefficients. - Added a scenario that showcases differences between integrators. See :ref:
scenarioIntegratorsComparison
BSK v2.1.7
- Fixed
CMake/conan
case sensitivty issue when compiling Basilisk withopNav
flag set toTrue
on Linux platforms - Created fsw :ref:
hingedRigidBodyPIDMotor
to compute the commanded torque to :ref:spinningBodyOneDOFStateEffector
using a proportional-integral-derivative controller. - Added :ref:
torqueScheduler
to combine two :ref:ArrayMotorTorqueMsgPayload
into one and implement effector locking logic. - Refactored how
Custom.cmake
files are included and how they are to be constructed.Custom.cmake
files
should no longer include an include guard (e.g.if(BUILD_OPNAV) ... endif(BUILD_OPNAV)
). Rather, to add
optionally compile a module, its directory name should be added to a list in
src/cmake/bskTargetExcludeBuildOptions.cmake
. Most importantly, the build target is now accessible within the
aCustom.cmake
file as${TARGET_NAME}
. This enables appropriate modularization of build target specific
includes, dependencies, and compiler flags. For an example of the implications of this refactor review the before
and after of thesrc/cmake/usingOpenCV.cmake
file. - updated :ref:
unitTestSupport
to create the file path in a platform agnostic manner - Created a :ref:
sensorThermal
module to model the temperature of a sensor using radiative heat transfer - Created a :ref:
tempMeasurement
module to add sensor noise/bias and fault capabilities to temperature readings - Added a
terminal
flag to the event handlers that cause the simulation to terminate when triggered; demonstrated
use of flag in update to :ref:scenarioDragDeorbit
. - Created a :ref:
prescribedMotionStateEffector
dynamics module for appending rigid bodies with prescribed motion
to the spacecraft hub. - Added :ref:
solarArrayReference
to compute the reference angle and angle rate for a rotating solar array. - Update python dependency documentation and check to not use
conan
version 2.0.0 for now - Changed the
SpinningBodyStateEffector
module name to :ref:spinningBodyOneDOFStateEffector
. - Added the ability to lock the axis on the :ref:
spinningBodyOneDOFStateEffector
module. - Added two new unit tests to :ref:
spinningBodyOneDOFStateEffector
. - Updated :ref:
magneticFieldWMM
to use the latest WMM coefficient file and evaluation software - Added a :ref:
spinningBodyTwoDOFStateEffector
module that simulates a two-axis rotating rigid component. - Created :ref:
oneAxisSolarArrayPoint
to generate the reference attitude for a spacecraft that needs to point a body-fixed
axis along an inertial direction while ensuring maximum power generation on the solar arrays - Added a maximum power parameter
maxPower
to :ref:reactionWheelStateEffector
for limiting supplied
power, independent of the modules in simulation/power. - Added :ref:
thrusterPlatformReference
to align the dual-gimballed thruster with the system's center of mass, or at an offset thereof to perform momentum dumping. - Improved reliability of opNav scenario communication between :ref:
vizInterface
and Vizard - provide support or Vizard 2.1.4 features
Basilisk v2.1.6
- Refactored :ref:
keplerianOrbit
to not depend on thegravityEffector
class - Updated Basilisk install documentation to discuss accessing source code from GitHub.com
- Fixed an issue where attaching a thruster to a body different than the hub when using
zeroBase
would yield very large offsets. - Added documentation in :ref:
bskPrinciples-4
on how to read the current message values - Highlighted the challege of setting up a
recorder
on a re-directed message in :ref:bskPrinciples-7
- added the ability to add a
recorder()
to a C-wrapped module input message - Fix an issue in in :ref:
magneticFieldWMM
where a fixed width array holding a file path would result in a cutoff
path when basilisk is located in a directory path of greater than 100 characters. - Updated the build system to use newer versions of
eigen
,protobuf
,cppzmq
andopencv
. This corrects some build issues with new compilers. - The
linearAlgebra
,rigidBodyKinematics
,orbitalMotion
were mistakenly exposed as part of the
:ref:sim_model
module's API. They have been removed and the functions they provided are still found in
Basilisk.utilities.orbitalMotion
,Basilisk.architecture.linearAlgebra
, and
Basilisk.architecture.rigidBodyKinematics
. - Fixed an issued recording the
timeWritten
information of a C-wrapped message
with arecorder()
module. - Updated :ref:
pullCloneBSK
to ask the user to first installlfs
before pulling a copy
of the Basilisk repo due to some large files being stored in the GitHub large file storage
system. - Updated :ref:
scenarioGroundLocationImaging
to properly save off the ground location
information for Vizard - Added a new helper function to convert C arrays to
Eigen::MRPd
and vice-versa insideavsEigenSupport
. - Updated :ref:
spinningBodyStateEffector
to use the :ref:HingedRigidBodyMsgPayload
output message type for compatibility with other modules - Added the ability to set an inertial heading in the :ref:
boreAngCalc
module. Changed the internal module logic to useEigen
library variables and functions instead of C-style arrays and methods. - Added support for Vizard v2.1.3
- Updated :ref:
simpleInstrumentController
to provide the option to consider the angular velocity tracking error norm
when considering to take an image.