feat(cam-drive): drive blended passes with fourth-order feed and a world-jerk budget #79
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "patman/drive-fourth"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adds drive_plan_fourth: the G3-blend-aware, snap-limited sibling of
drive_plan. Each pass runs through cam-blend's blend_pass before spans are
derived, then chain_fourth/emit_chained_fourth (Milestone 3's fourth-order
stack) replace the double-S chain/emit_chained pair.
Jerk budget (policy, not derived): world jerk r''' = (v̈ - κ²v³)T +
(3κv·v̇ + κ'v³)N. Each of the three path-induced terms is capped against
j/4 using the piece's own κ_max/κ'_max (Host Line: 0/0; Host Arc:
1/radius exact; Blend: Eta3Spline::curvature_extrema); chain_fourth gets
the remaining tangential share, j_chain = (sqrt(3)/2 - 1/4)·j
(TANGENTIAL_JERK_FRAC), landing the commanded world-jerk vector norm on
limits.jerk exactly at each span's speed cap - one order up from the
existing acceleration split.
Retired boundary: G1-junction curvature steps (impulsive world jerk) are
gone wherever a blend lands. New boundary drawn in their place:
limits.snap is unbudgeted against any path-induced term - G3 buys
continuous jerk, not bounded snap, so world-frame snap stays out of
scope here (documented prominently in the rewritten module-doc section,
alongside drive_plan's unchanged third-order contract).
Honesty surfacing: PassProgramFourth carries max_deviation /
max_outward_deviation (verbatim from BlendedPass) and blends_skipped, so
a caller can see exactly how much a pass's blends perturbed the nominal
path and how many junctions fell back to the original corner - never
re-certifying engagement against that deviation, matching BlendedPass's
own contract.
Near-tolerance hosts at rings close to medial-axis collapse are handled
by cam-blend's own absolute host-length floor (100x pass tolerance) and
surface via blends_skipped; the test fixtures run at BlendParams'
natural trim_fraction default (0.25) over pockets built at a physically
sane micrometer tolerance, since the floor is tolerance-scaled.
Co-authored-by: patman-assist patrick-ai@kgroo.co
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.