motion / src /ground-pose.js
harshthedev's picture
SuperHQ Motion experiment: locomotion and action checkpoints, runtime, clips, evaluation
6adbbb1 verified
Raw History Blame Contribute Delete
846 Bytes
/** Bounded display-side floor guard. Does not change the model or host root. */
export function groundPose(positions,{feet=[21,22,26,27],maxLift=.05,clearance=0}={}) {
if(!Array.isArray(positions)||!positions.length||positions.some(p=>!Array.isArray(p)||p.length!==3||!p.every(Number.isFinite))||
!Array.isArray(feet)||!feet.length||feet.some(j=>!Number.isInteger(j)||j<0||j>=positions.length)||
!Number.isFinite(maxLift)||maxLift<0||maxLift>.1||!Number.isFinite(clearance)||clearance<0||clearance>.02)throw Error('Invalid bounded floor guard input.');
const rawMinimum=Math.min(...feet.map(j=>positions[j][1])),requested=Math.max(0,clearance-rawMinimum),lift=Math.min(maxLift,requested);
return {positions:positions.map(p=>[p[0],p[1]+lift,p[2]]),lift,rawMinimum,
minimum:rawMinimum+lift,saturated:requested>maxLift+1e-8};
}