uncertainty_model — UncertaintyModel
Purpose
Single owner of all injected truth-noise (camera pose, state, actuation force) and the belief
covariance the planner trusts — so the two cannot drift apart.enable=Falseis a strict no-op.
Role in the system
- Constructed by the controller; consulted in breve_controller’s coverage marking
(perturb_camera_pose) and the control loop (force_noise,advance_step). - Closes the perception→planning loop: the camera marks coverage from where it actually points.
Inputs / Outputs
- In:
cfg.uncertainty(enable, seed, per-channel std for camera_pose / state / actuation). - Out: a perturbed
CameraPose, a force-noise column (3×1), and per-step state offsets (p_c,v_c).
Key methods
perturb_camera_pose— position offset + Rodrigues axis tilt —GNC/uncertainty_model.py:38force_noise— actuation force-noise draw (3×1) —:48advance_step— one state-noise realization per control step, held for all consumers —:55_rotate_axis— Rodrigues rotation of a unit axis (helper) —:7
Footguns
enable=Falseis a strict no-op — do not break itUnder
enable=Falsethere are zero RNG draws:perturb_camera_posereturns the pose unchanged,
force_noisereturns zeros,advance_stepreturns immediately. Any draw in this state would desync
the RNG and break baseline byte-identity. (GNC/INSIGHTS.md[baseline])
Three sub-enables, each gated on std > 0
A channel is live only if
enable=Trueand its std> 0(camera_active/state_active/
force_active). Prevents silent zero-noise draws that would still consume the RNG.
One belief draw per step, shared
advance_stepdrawsp_c_offset/v_c_offsetonce per control step and holds them for every
consumer that step — a single consistent belief, not independent per-consumer draws.
Pseudocode
__init__: camera_active = enable and (pos_std>0 or angle_std>0) # likewise state_active, force_active
perturb_camera_pose(pose): return pose unless camera_active; else p_e += N(0,σ), z_e tilted by N(0,σ)
advance_step(): return unless state_active; else draw p_c_offset, v_c_offset once
Equations & references
- Belief / uncertainty model (risk extensions): current_sota.