base_controller — BaseController (base-attitude-only diagnostic mode)
Purpose
Base-attitude-only Γ-coordinated controller (
controller.name == "base"): the same circumcentroidal
machinery as breve_controller but with every EE/arm slot zeroed. A diagnostic mode that backs
thebasebaseline and frame A/B smokes — not the live mission controller.
Role in the system
extendsbreve_core_controller (BreveCoreController, the shared base-attitude/breve template) →
com_controller (CC_Controller, the per-step control loop root). Reparented 2026-06-22; sibling of breve_controller.- Reference trajectory comes from the guidance tower → base_guidance → com_guidance (no EE layer;
self.trajis a bareBaseGuidance). - Dynamics (
Γ,M̆,C̆,s_min_G) come fromutils/robot.pyasself.dyn.*. - Selected by
controller.name == "base". The user wants to retire it; it survives as the byte-identical diagnostic.
Inputs / Outputs
- In:
State(q, v, dynamics cache), baseDesired(CoM + base attitude), config gains,s_min_G. - Out: base reduced torque
τ_b⊕, reduced step-integration derivatives (omega_b_dot,nu_e_oplus_dot); EE terms return zeros.
Key methods
Only the forked leaves are defined here; the shared base-attitude/breve methods (incl.
compute_tau_b_oplus, conditioning_scale, x_tilde/J_x, all_control_terms) are now inherited
from breve_core_controller — see that page.
RHS34b— reduced working-control RHS (damping-on-error + K + coupling + posture + FF) —GNC/base_controller.py:66v_breve_dot— reduced accelerationM̆⁻¹ · RHS(base path keeps the explicit solve) —:121calc_posture— joint-space posture regularization towardq_arm_ref—:92reconstruct_generalized_velocity— fullvfrom(v_c, omega_b, nu_e_oplus)via the (damped) Γ solve —:134arm_breve_gains/rhs_feedforward/x_e_rhs— the EE override hooks, inert (zero) here —:58/:62/:44omega_b_damping_error/nu_e_damping_error/x_e_tilde/J_xe— the other EE/arm leaves, all zeroed —:48/:52/:36/:40
Footguns
EE/arm slots are deliberately zero — the override hooks are stubs
arm_breve_gainsreturns(None, None)(zeroing the arm D/K slots in theblock99×9 breve gains),
rhs_feedforwardreturns0.0, andx_e_rhsreturns the rawx_e_tilde(itself zero). These are
the seams the EE layer overrides; here they intentionally do nothing. (GNC/INSIGHTS.md[control])
Base damping rides
τ_b⊕, not the RHS damping term
v_breve_damping_errorreturns[omega_b_err; nu_e_err]with both blocks zero in the base path.
Base angular damping is applied throughcompute_tau_b_oplus(-D_b · omega_b_err), not the RHS
D̆ v̆_errterm. (GNC/INSIGHTS.md[control])
One γ ramp drives every derate mechanism (Option A)
conditioning_scaleis the single rampγ(s_min_G) = scale_by_svd(s_min_G, sigma)— per F4, Γ is
singular iffJ_ν_eis, so all derates key offs_min_Galone. (GNC/INSIGHTS.md[derate] [config])
Do not re-pin — this is a frozen byte-identical baseline
Behaviour is unchanged even though the class shrank on 2026-06-22: the 13 shared methods moved
verbatim up into breve_core_controller (Template Method), leaving only the forked leaves here.
validate_base_baseline.pystill reproduces atmax_abs_diff = 0.000e+00(checked, not re-pinned);
any logic edit — here or in the shared base — breaks that contract.
(GNC/INSIGHTS.md[history] [baseline];generated_reports/GNC/controller_twin_extraction.md)
Pseudocode (one control step)
build_desired_for_step(t) # base reference only (CoM + base attitude); no EE goal
τ_b⊕ = compute_tau_b_oplus(des) # attitude PD, γ-scaled, saturated
γ = conditioning_scale(s_min_G) # single ramp (Option A)
rhs = RHS34b # -C̆v̆ - JᵀK x̃ - D̆ v̆_err + COM coupling (+ posture)
# arm K/D slots = 0, rhs_feedforward = 0 (EE hooks inert)
v̆_dot = M̆⁻¹ · rhs # reduced acceleration → integrate (omega_b, nu_e_oplus)
v = reconstruct_generalized_velocity(st) # damped Γ solve back to full velocity
Equations & references
Key equations mirrored from current_sota — the math source of truth; see there for derivations.
Base attitude error + error-rate Jacobian — §4.1, eqs (4.1–4.2):
Base torque law () — §4.2, eq (4.5):
References:
- Coordinated control + working eq (§4.4–4.12): current_sota > 4.
- Singularity / derate stack (§6): current_sota > 6 · eq↔code in
generated_reports/GNC/cross_check.md.
Related
breve_controller · com_controller · base_guidance · com_guidance · terminology · com_vs_base · circumcentroidal_control