Repository navigation
feat: wave 3 roadmap items (M1, M30, M8, M7, M29) - #34
Merged
Merged
Conversation
…nd armature (M1) JointLink replaces the revolute-only link (RevoluteJointLink stays as an alias, so existing aggregate initializers compile unchanged). FK, IK, RNEA, ABA and CRBA now work through each joint's motion subspace, so revolute and prismatic joints share one code path; armature adds to the joint-space inertia. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014WUWh44uw7k4JjMd6YkAwN
Full tool pose on SE(3) plus every joint origin, axis and type in the base frame, in one O(n) pass over the generic link model. The frame chain is the model-independent input for the geometric Jacobian. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014WUWh44uw7k4JjMd6YkAwN
GeometricJacobian builds the 6xN Jacobian, the bias acceleration and the statics map from any FrameChain, with revolute and prismatic columns. JacobianProvider is the seam for task-space consumers; ChainTaskJacobian and DhTaskJacobian implement it for link models and DH tables. DenavitHartenberg covers standard and modified conventions with constant joint offsets. InverseKinematics now uses the shared Jacobian instead of its private 3xN one. M7 and M8 ship together because each one's tests need the other. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014WUWh44uw7k4JjMd6YkAwN
Adapter from a link chain to the manipulator equation. It implements EulerLagrangeDynamics (M via CRBA, C qdot and g via RNEA) and the new one-call InverseDynamicsModel used by computed-torque control. SetLinks handles payload changes. 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.47s | ||
| ✅ CPP | clang-format | 72 | 0 | 0 | 0 | 0.91s | |
| ✅ CPP | cppcheck | 72 | 0 | 0 | 1.28s | ||
| ✅ DOCKERFILE | hadolint | 1 | 0 | 0 | 0.32s | ||
| ✅ JSON | jsonlint | 8 | 0 | 0 | 0.08s | ||
| ✅ JSON | prettier | 8 | 2 | 0 | 0 | 0.31s | |
| ✅ MARKDOWN | markdownlint | 165 | 0 | 0 | 0 | 2.15s | |
| ✅ MARKDOWN | markdown-table-formatter | 165 | 0 | 0 | 0 | 0.2s | |
| lychee | 207 | 2 | 0 | 2.2s | |||
| ✅ YAML | prettier | 12 | 0 | 0 | 0 | 0.44s | |
| ✅ YAML | yamllint | 12 | 0 | 0 | 0.45s |
Detailed Issues
⚠️ SPELL / lychee - 2 errors
[ERROR] failed to verify TLS certificate: invalid peer certificate: UnknownIssuer
📝 Summary
---------------------
🔍 Total..........196
🔗 Unique..........88
✅ Successful.....184
⏳ 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.



Wave 3 of the roadmap is the manipulator foundation that about 25 later items build on. Like wave 1, each item is one self-contained commit per
roadmap/DEPLOYMENT.md: header, coverage.cpp, the spec's test cases, CMake, doc page and doc-table rows. Each commit also deletes itsroadmap/spec and the matching rows inROADMAP.mdandroadmap/README.md.Items
26ddc25JointLimits, armature,JointTransform(q)and the motion subspace (AngularAxis/LinearAxis). FK, IK, RNEA, ABA and CRBA now go through the motion subspace, so revolute and prismatic joints share one code path. The prismatic Coriolis term and force projection are included, and armature adds to the joint-space inertia.RevoluteJointLinkstays as an alias, so existing aggregate initializers and the simulator compile unchanged.d4106f4math::SE3Transform) plus the model-independentFrameChain: joint origins, axes and types in the base frame.9acd4ccFrameChain, behind theJacobianProviderinterface, withChainTaskJacobian(link model) andDhTaskJacobian(DH) implementations. M7: standard and modified DH tables with constant joint offsets. IK now uses the shared Jacobian instead of its private 3×N one.7bf2027EulerLagrangeDynamics(M via CRBA, C·q̇ and g via RNEA) and the new one-callInverseDynamicsModel, withSetLinksfor payload changes.Changes from the specs
DhTaskJacobianimplements M8's interface, and an M8 test compares a DH arm with a link arm, so neither can ship first.ChainTaskJacobiantest also compares the J̇q̇ rows and the tool pose of the 3-row and 6-row versions.DhTaskJacobian, which exercises the adapter.Verification
host-single-Debugand the coverage build (EMIL_ENABLE_COVERAGE=On): 5/5 test executables pass.DhTaskJacobian::BiasAcceleration(2 lines, which forward to the fully testedGeometricJacobian).-Wall -Wextra -Werrorsyntax check of the new translation units is clean. clang-format andscripts/validate-docs.pypass, and no doc line exceeds markdownlint's 400-character limit.RobotArmSimulator.cpp(which uses the links) still compiles.Not run locally: the full Qt simulator build, cppcheck and SonarCloud. CI covers these.
Next
Wave 4 (M32, M12, M11, M14, M10, P2) needs nothing upstream. Wave 2 (mobile) still waits on SE(2) (NT66) in numerical-toolbox-cpp.
Generated by Claude Code