Repository navigation
feat(trajectory): add TimeOptimalPathParameterization (M27) - #42
Merged
Merged
Conversation
TOPP-RA: minimum-time timing law along a fixed joint path under torque and velocity limits. Path coefficients come from an inverse-dynamics adapter (three passes per gridpoint); a backward pass builds the controllable sets with exact Fourier-Motzkin projections of each stage polygon, and a greedy forward pass picks the largest admissible control inside them. Stage times are exact for constant path acceleration, and Sample streams the joint state by binary search over stage start times. The spec's JointLimits interface is named PathConstraints to stay distinct from dynamics::JointLimits<T>. This was the last roadmap spec. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014WUWh44uw7k4JjMd6YkAwN
✅
|
| Descriptor | Linter | Files | Fixed | Errors | Max errors | Warnings | Elapsed time |
|---|---|---|---|---|---|---|---|
| ✅ ACTION | actionlint | 7 | 0 | 0 | 0.69s | ||
| ✅ CPP | clang-format | 212 | 0 | 0 | 0 | 2.36s | |
| ✅ CPP | cppcheck | 212 | 0 | 0 | 4.56s | ||
| ✅ DOCKERFILE | hadolint | 1 | 0 | 0 | 0.64s | ||
| ✅ JSON | jsonlint | 8 | 0 | 0 | 0.08s | ||
| ✅ JSON | prettier | 8 | 2 | 0 | 0 | 0.39s | |
| ✅ MARKDOWN | markdownlint | 84 | 0 | 0 | 0 | 2.33s | |
| ✅ MARKDOWN | markdown-table-formatter | 84 | 0 | 0 | 0 | 0.26s | |
| lychee | 132 | 2 | 0 | 2.26s | |||
| ✅ YAML | prettier | 12 | 0 | 0 | 0 | 0.54s | |
| ✅ YAML | yamllint | 12 | 0 | 0 | 0.56s |
Detailed Issues
⚠️ SPELL / lychee - 2 errors
[ERROR] failed to verify TLS certificate: invalid peer certificate: UnknownIssuer
📝 Summary
---------------------
🔍 Total..........379
🔗 Unique.........129
✅ Successful.....367
⏳ Timeouts.........0
🔀 Redirected.......5
👻 Excluded.........9
❓ Unknown..........0
🚫 Errors...........2
⛔ Unsupported......2
Errors in .github/workflows/static-analysis.yml
[403] https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$ (at 37:21) | Rejected status code: 403 Forbidden
Errors in doc/kinematics/InverseKinematics.md
[ERROR] https://mathweb.ucsd.edu/~sbuss/ResearchWeb/ikmethods/iksurvey.pdf (at 125:169) | SSL certificate not trusted. Use --insecure if site is trusted
Hint: Followed 5 redirects. You might want to consider replacing redirecting URLs with the resolved URLs. Use verbose mode (`-v`/`-vv`) to see redirection details.
Hint: You can configure accepted/rejected response codes with `-a` or `--accept`
Notices
REPOSITORY_GITLEAKS, REPOSITORY_KICS. See Removed linters to find their replacements.
See detailed reports in MegaLinter artifacts
Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining FLAVOR_SUGGESTIONS: false)
- Documentation: Custom Flavors
- Command:
npx mega-linter-runner@10.1.0 --custom-flavor-setup --custom-flavor-linters ACTION_ACTIONLINT,CPP_CPPCHECK,CPP_CLANG_FORMAT,DOCKERFILE_HADOLINT,JSON_JSONLINT,JSON_PRETTIER,MARKDOWN_MARKDOWNLINT,MARKDOWN_MARKDOWN_TABLE_FORMATTER,SPELL_LYCHEE,YAML_PRETTIER,YAML_YAMLLINT

Show us your support by starring ⭐ the repository
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Implements roadmap item M27 from
roadmap/trajectory/TimeOptimalPathParameterization: TOPP-RA (Pham and Pham, IEEE T-RO 34(3), 2018). This was the last roadmap spec, soroadmap/now holds no pending specs.What
robotics/trajectory/TimeOptimalPathParameterization.hppcontains:PathGeometry<T, Dof>: an interface for the fixed pathq(s),q'(s)andq''(s)ons ∈ [0, 1].PathCoefficients,JointBoundsandPathConstraints<T, Dof>: the interface for the torque coefficientsτ = a·s̈ + b·ṡ² + cand the joint bounds.InverseDynamicsPathConstraints<T, Dof>: the production adapter. It buildsa,bandcfrom anydynamics::InverseDynamicsModel(M29) with three passes per point.TimeOptimalPathParameterization<T, Dof, Grid>:Parameterize(): a backward pass builds the controllable sets with exact Fourier–Motzkin projections of each stage polygon, with no iterative LP. A greedy forward pass then takes the largest control that stays inside them. It returnsfalseif a set is empty, if0 ∉ K₀, or if the profile cannot leave rest.Sample(t): binary search over the stage start times, then the constant-s̈stage kinematics mapped through the path. It returnsstd::nulloptuntilParameterize()succeeds.TotalTime().There is no heap, no recursion, no exceptions, and every buffer has a compile-time size.
New test doubles in
robotics/trajectory/test_doubles(robotics.trajectory_test_doubles):MockPathGeometryandMockPathConstraints.robotics.trajectorynow linksrobotics.dynamics.Deviations from the spec
JointLimitsinterface is calledPathConstraints, and its adapterInverseDynamicsPathConstraints. This keeps them distinct from M1'sdynamics::JointLimits<T>.stationary_joint_overload_empties_controllable_setcovers an empty controllable set.zero_velocity_bound_stalls_at_restcovers a profile that cannot leave rest.Bounds().ε: a fixed64·numeric_limits<T>::epsilon()instead of a per-row relative scale.roadmap/README.mdindex now say every item has shipped. The canonical-example sentence points to the shipped doc, and its spec stays in the git history.Verification
host-single-Debugand coverage builds:ctest7/7, 12/12 TOPP tests.2.000064and4.000128.2.063492.2.256496, with a0.0178torque excursion between gridpoints.-Wall -Wextra -Werror -Wshadowwith-DROBOTICS_TOOLBOX_COVERAGE_BUILD.clang-format --dry-run --Werrorand the forbidden-pattern check.scripts/validate-docs.pypasses, and no doc line exceeds 400 characters.Generated by Claude Code