organize settings to dedicated sensors folder, json + assets
This commit is contained in:
@@ -10,6 +10,7 @@ import numpy as np
|
||||
from scipy.signal import butter, filtfilt, sosfilt, sosfilt_zi
|
||||
|
||||
# Linear calibration from raw normal-force units to Newtons (ORY-BOX / ORY-MINI).
|
||||
# Prefer sensors/<name>/force_calibration.json when available.
|
||||
NORMAL_FORCE_CAL_SLOPE = 3.92685554668795e-05
|
||||
NORMAL_FORCE_CAL_OFFSET = 0.0217596967278535
|
||||
|
||||
@@ -17,9 +18,28 @@ DEFAULT_SAMPLE_RATE_HZ = 30.0
|
||||
DEFAULT_LOWPASS_ORDER = 2
|
||||
|
||||
|
||||
def calibrate_normal_force(raw_value: float) -> float:
|
||||
def _load_normal_force_coeffs(sensor_name: str | None = None) -> tuple[float, float]:
|
||||
if sensor_name:
|
||||
try:
|
||||
from .configs import load_force_calibration
|
||||
|
||||
data = load_force_calibration(sensor_name)
|
||||
except Exception:
|
||||
data = None
|
||||
if isinstance(data, dict):
|
||||
block = data.get("normal_force", data)
|
||||
if isinstance(block, dict):
|
||||
slope = block.get("slope")
|
||||
offset = block.get("offset")
|
||||
if slope is not None and offset is not None:
|
||||
return float(slope), float(offset)
|
||||
return NORMAL_FORCE_CAL_SLOPE, NORMAL_FORCE_CAL_OFFSET
|
||||
|
||||
|
||||
def calibrate_normal_force(raw_value: float, *, sensor_name: str | None = None) -> float:
|
||||
"""Convert a raw normal-force reading to Newtons using y = mx + c."""
|
||||
return NORMAL_FORCE_CAL_SLOPE * float(raw_value) + NORMAL_FORCE_CAL_OFFSET
|
||||
slope, offset = _load_normal_force_coeffs(sensor_name)
|
||||
return slope * float(raw_value) + offset
|
||||
|
||||
|
||||
def _nyquist_hz(sample_rate_hz: float) -> float:
|
||||
|
||||
Reference in New Issue
Block a user