Advanced: Using DynamicObject
Basilisk Modules#
Basilisk modules such as spacecraft are members of
the DynamicObject
class. This means they still have the regular Basilisk reset()
and
updateState()
methods, but they also have a state machine and integrator build in as these
modules have to integrate internal ordinate differential equations (ODEs).
Basilisk modules such as spacecraft and spacecraftSystem inherit from the DynamicObject
class. These
modules include the standard reset()
and updateState()
methods, but also incorporate a built-in state machine
and numerical integrator to solve internal ordinary differential equations (ODEs).
A key feature of DynamicObject
is the ability to synchronize integration across multiple instances of these modules.
This is particularly useful in scenarios where dynamics are coupled—such as two spacecraft interacting through
force or torque-based effectors.
Suppose you have two spacecraft instances, scObject
and scObject2
, and you want their dynamic integration to be
synchronized. This can be achieved from Python using the following command:
scObject.syncDynamicsIntegration(scObject2)
This call links the integration of scObject2
to that of scObject
. Even if scObject
is configured to run
in a task executing at 10 Hz using an RK4 integrator, and scObject2
is in a separate task running at 1 Hz with an
RK2 integrator, the integration setup of the primary object (scObject
) overrides the configuration of the secondary
synced object. As a result, both objects are integrated using the RK4 integrator at 10 Hz. However, the
updateState()
method of scObject2
is still called at its task’s update rate of 1 Hz.
Note
The syncDynamicsIntegration()
method is not limited to linking two DynamicObject
instances. The primary
DynamicObject
maintains a list of all synced objects. This allows you to synchronize the integration across
any number of DynamicObject
instances.
The integration algorithm is determined by the integrator assigned to the primary DynamicObject
. By default, this
is the Runge-Kutta 4 (RK4) method. Regardless of the integrator settings on secondary objects, the integration
configuration of the primary object takes precedence.