Floating-base systems¶
Floating-base state is optional and disabled by default. Enable it when the robot mounting should be integrated as part of the system state:
fixed = PCS.from_links(links, base_pose=fixed_mounting)
floating = PCS.from_links(links, floating_base=True)
base_pose is a construction argument for fixed mounting and is stored as
fixed.fixed_base_pose. Floating systems have fixed_base_pose is None and
reject a construction-time base_pose; provide the initial pose when packing
the runtime configuration instead.
Mounting is not physical parameter data. with_params(...) and
update_params(...) therefore leave it unchanged. Use
with_fixed_base_pose(...) to create a differently mounted fixed system.
Named horizontal, upright, and hanging poses are available from
soromox.utils.geometry.poses.
State convention¶
The dimensions are available explicitly as num_internal_dofs,
num_base_coordinates, num_base_velocities, num_coordinates,
num_velocities, num_auxiliary_states, and state_size. Configuration and
velocity dimensions are intentionally separate because a spatial quaternion
adds seven stored base coordinates but only six base velocity coordinates.
Spatial floating systems use
The quaternion is SoRoMoX's scalar-last Hamilton quaternion. Both angular and linear base velocity are expressed in the world frame; linear velocity is at the base-frame origin. Planar systems use
The flat first-order state is always y = [q, v, auxiliary...]. Use
pack_configuration, split_configuration, pack_velocity, split_velocity,
pack_state, and split_state instead of splitting a state in half. These
helpers preserve arbitrary broadcast-compatible leading batch axes.
For spatial systems,
where * is Hamilton multiplication. normalize_configuration preserves the
quaternion hemisphere. retract_configuration left-multiplies a world-frame
rotation increment and re-normalizes the quaternion.
Dynamics and actuation¶
Kinematics, Jacobians, energies, forces, and dynamics accept total q and v.
Actuation and material passive mechanics contribute exactly zero base rows. The
base frame itself is massless: the augmented inertia is generated by link,
continuum, platform, and payload mass, without artificial base regularization.
JAX supports floating execution for every system. GVS, PCS, and PlanarPCS also expose floating Warp dynamics wherever the corresponding fixed system supports Warp. The fixed and floating paths share local continuum operators but use separate statically specialized root and accumulator kernels, so fixed kernels do not receive floating state or allocate base-sized scratch storage.
Controllers remain internal-coordinate controllers. For a floating robot they evaluate a temporary fixed model at the current runtime base pose, so kinematics and gravity use the current mounting. They intentionally ignore base velocity, acceleration, reaction motion, and floating/internal dynamic coupling, and they never actuate the base.