feat(cam-drive): drive blended passes with fourth-order feed and a world-jerk budget #79

Open
patman wants to merge 1 commit from patman/drive-fourth into patman/blend-junctions AGit
Owner

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

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>
feat(cam-drive): drive blended passes with fourth-order feed and a world-jerk budget
Some checks failed
CI / build-test (pull_request) Has been cancelled
202d38a744
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>
Some checks failed
CI / build-test (pull_request) Has been cancelled
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin +refs/pull/79/head:patman/drive-fourth
git switch patman/drive-fourth

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.

git switch patman/blend-junctions
git merge --no-ff patman/drive-fourth
git switch patman/drive-fourth
git rebase patman/blend-junctions
git switch patman/blend-junctions
git merge --ff-only patman/drive-fourth
git switch patman/drive-fourth
git rebase patman/blend-junctions
git switch patman/blend-junctions
git merge --no-ff patman/drive-fourth
git switch patman/blend-junctions
git merge --squash patman/drive-fourth
git switch patman/blend-junctions
git merge --ff-only patman/drive-fourth
git switch patman/blend-junctions
git merge patman/drive-fourth
git push origin patman/blend-junctions
Sign in to join this conversation.
No description provided.