JSim 2026.06.01-p(1)
Loading...
Searching...
No Matches
frcsim::PhysicsConfig Struct Reference

Global runtime settings for PhysicsWorld dynamics and optional features. More...

#include <physics_world.hpp>

Public Types

enum class  IntegrationMethod { kSemiImplicitEuler , kExplicitEuler , kRK2 }

Public Attributes

double fixed_dt_s {0.01}
 Fixed timestep in seconds used by PhysicsWorld::step.
IntegrationMethod integration_method {IntegrationMethod::kSemiImplicitEuler}
 Integration scheme used for rigid body translational/rotational updates.
bool enable_collision_detection {false}
 Enables broad collision/contact processing.
bool enable_joint_constraints {false}
 Enables joint/constraint solving for rigid assemblies.
bool enable_aerodynamics {false}
 Enables aerodynamic drag and Magnus lift forces.
bool enable_gravity {true}
 Enables gravity contribution during body integration.
double default_drag_coefficient {0.47}
 Default dimensionless drag coefficient (Cd).
double default_drag_reference_area_m2 {0.01}
 Default drag reference area in square meters.
double air_density_kgpm3 {1.225}
 Ambient air density in kilograms per cubic meter.
double linear_drag_coefficient_n_per_mps {0.0}
 Linear drag coefficient in N/(m/s) for optional viscous damping.
double magnus_coefficient {1e-4}
 Magnus lift scaling coefficient.
Vector3 gravity_mps2 {0.0, 0.0, -9.81}
 Gravity acceleration vector in meters per second squared.
double linear_damping_per_s {0.0}
 Linear damping coefficient in 1/s.
double angular_damping_per_s {0.0}
 Angular damping coefficient in 1/s.
enum frcsim::PhysicsConfig::IntegrationMethod kSemiImplicitEuler
double ground_height_m {0.0}
double rolling_friction_per_s {1.5}
double min_bounce_speed_mps {0.06}
double baumgarte_beta {0.2}
double baumgarte_slop_m {0.005}

Detailed Description

Global runtime settings for PhysicsWorld dynamics and optional features.

Configuration parameters for the physics world and simulation.

This structure centralizes tunable simulation constants so callers can choose between physically richer behavior and lighter-weight execution profiles.

Design notes:

  • All values use SI units.
  • Values are consumed every world step; updating them affects subsequent steps.
  • Defaults favor stable behavior for FRC-style simulations.

Member Enumeration Documentation

◆ IntegrationMethod

Integration method used for simulation updates.

Enumerator
kSemiImplicitEuler 
kExplicitEuler 
kRK2 

Member Data Documentation

◆ air_density_kgpm3

double frcsim::PhysicsConfig::air_density_kgpm3 {1.225}

Ambient air density in kilograms per cubic meter.

Air density used in aerodynamic force calculations.

◆ angular_damping_per_s

double frcsim::PhysicsConfig::angular_damping_per_s {0.0}

Angular damping coefficient in 1/s.

Applied as a per-step multiplicative attenuation to angular velocity.

◆ baumgarte_beta

double frcsim::PhysicsConfig::baumgarte_beta {0.2}

Baumgarte stabilization factor to reduce penetration in constraints.

◆ baumgarte_slop_m

double frcsim::PhysicsConfig::baumgarte_slop_m {0.005}

Allowed penetration before Baumgarte stabilization is applied, in meters.

◆ default_drag_coefficient

double frcsim::PhysicsConfig::default_drag_coefficient {0.47}

Default dimensionless drag coefficient (Cd).

Used when a body does not provide an explicit drag coefficient.

Default drag coefficient used for aerodynamic force calculations.

◆ default_drag_reference_area_m2

double frcsim::PhysicsConfig::default_drag_reference_area_m2 {0.01}

Default drag reference area in square meters.

Used when no aerodynamic geometry is provided for a body.

Default reference area for drag force calculations.

◆ enable_aerodynamics

bool frcsim::PhysicsConfig::enable_aerodynamics {false}

Enables aerodynamic drag and Magnus lift forces.

When true, per-body aerodynamic geometry/material metadata is used when available; otherwise world defaults are applied.

Enables aerodynamic forces (drag and lift) on bodies.

◆ enable_collision_detection

bool frcsim::PhysicsConfig::enable_collision_detection {false}

Enables broad collision/contact processing.

This flag is provided for feature gating and future expansion. Some contact paths may still execute depending on world internals and active boundaries.

Enables collision detection between bodies.

◆ enable_gravity

bool frcsim::PhysicsConfig::enable_gravity {true}

Enables gravity contribution during body integration.

Individual bodies can additionally opt in/out via body flags.

◆ enable_joint_constraints

bool frcsim::PhysicsConfig::enable_joint_constraints {false}

Enables joint/constraint solving for rigid assemblies.

Disable for maximum throughput when assemblies are not used.

Enables joint constraint solving for assemblies.

◆ fixed_dt_s

double frcsim::PhysicsConfig::fixed_dt_s {0.01}

Fixed timestep in seconds used by PhysicsWorld::step.

Typical values:

  • 0.02 for 50 Hz simulation loops.
  • 0.01 for higher fidelity at moderate compute cost.
  • 0.005 for tighter contact/aero resolution at higher cost.

Fixed timestep for simulation updates, in seconds.

◆ gravity_mps2

Vector3 frcsim::PhysicsConfig::gravity_mps2 {0.0, 0.0, -9.81}

Gravity acceleration vector in meters per second squared.

Common Earth-like default is {0, 0, -9.81}.

Gravity acceleration vector, in meters per second squared.

◆ ground_height_m

double frcsim::PhysicsConfig::ground_height_m {0.0}

Ground height used for ball-ground collision detection.

◆ integration_method

IntegrationMethod frcsim::PhysicsConfig::integration_method {IntegrationMethod::kSemiImplicitEuler}

Integration scheme used for rigid body translational/rotational updates.

See IntegrationMethod for tradeoffs between speed and numerical behavior.

◆ kSemiImplicitEuler

enum frcsim::PhysicsConfig::IntegrationMethod frcsim::PhysicsConfig::kSemiImplicitEuler

◆ linear_damping_per_s

double frcsim::PhysicsConfig::linear_damping_per_s {0.0}

Linear damping coefficient in 1/s.

Applied as a per-step multiplicative attenuation to translational velocity.

Damping factors applied to linear and angular motion.

◆ linear_drag_coefficient_n_per_mps

double frcsim::PhysicsConfig::linear_drag_coefficient_n_per_mps {0.0}

Linear drag coefficient in N/(m/s) for optional viscous damping.

This term is applied in addition to quadratic drag when enabled.

◆ magnus_coefficient

double frcsim::PhysicsConfig::magnus_coefficient {1e-4}

Magnus lift scaling coefficient.

Magnus force is proportional to this value and typically computed from angular and linear velocity cross terms.

Magnus effect coefficient for spin-induced lift.

◆ min_bounce_speed_mps

double frcsim::PhysicsConfig::min_bounce_speed_mps {0.06}

Minimum bounce speed for balls to regain energy after a bounce.

◆ rolling_friction_per_s

double frcsim::PhysicsConfig::rolling_friction_per_s {1.5}

Rolling friction coefficient applied to balls on the ground.


The documentation for this struct was generated from the following files: