This commit is contained in:
legop3
2026-01-21 02:58:04 -05:00
parent 2564a451b5
commit 720a010973
4 changed files with 23 additions and 15 deletions
+12 -4
View File
@@ -8,9 +8,11 @@ export const OVERCURRENT_GROUPS = [
];
export const DEFAULT_OVERCURRENT_LIMITS = {
heatUpSec: 5,
heatUpSec: 7,
coolDownSec: 12,
curveK: 6,
kneeSec: 4,
curveK: 4,
curvePower: 2,
outputRateMs: 250,
};
@@ -89,9 +91,15 @@ export function useOvercurrentLimiter(roverId, options = {}) {
const scales = useMemo(() => {
const curveK = Number.isFinite(config.curveK) ? Math.max(0, config.curveK) : 0;
const curvePower = Number.isFinite(config.curvePower) ? Math.max(0.1, config.curvePower) : 1;
const kneeSec = Number.isFinite(config.kneeSec) ? Math.max(0, config.kneeSec) : 0;
const heatUpSec = Number.isFinite(config.heatUpSec) ? Math.max(0.001, config.heatUpSec) : 0.001;
const kneeTemp = clampUnit(kneeSec / heatUpSec);
const perGroup = OVERCURRENT_GROUPS.reduce((acc, group) => {
const temp = Number.isFinite(temperatures?.[group.key]) ? temperatures[group.key] : 0;
acc[group.key] = clampUnit(Math.exp(-curveK * temp));
const normalized = kneeTemp >= 1 ? 0 : clampUnit((temp - kneeTemp) / (1 - kneeTemp));
const scaled = Math.exp(-curveK * Math.pow(normalized, curvePower));
acc[group.key] = clampUnit(scaled);
return acc;
}, {});
return {
@@ -106,7 +114,7 @@ export function useOvercurrentLimiter(roverId, options = {}) {
vacuum: 1,
},
};
}, [config.curveK, temperatures]);
}, [config.curveK, config.curvePower, config.heatUpSec, config.kneeSec, temperatures]);
const overcurrent = useMemo(() => {
const motors = {};