Repository navigation
docs(roadmap): add the wheeled-robot specs (F1, W1–W10) - #28
Merged
Merged
Conversation
Spec triplets for planar odometry (F1) and the wheeled family: differential-drive, car-like, omnidirectional and skid-steer kinematics (W1–W4), pure pursuit with the shared PlanarPath, Stanley and Kanayama trackers (W5–W7), and Dubins paths, the dynamic window approach and Reeds–Shepp paths (W8–W10). They live in the new `mobile` and `planning` modules and build on upstream SE2Transform (NT66, spec in numerical-toolbox-cpp#363). Roadmap changes: - Reeds–Shepp moves out of W8 into a new W10. - W9 computes arc clearance to scan points in closed form, so it no longer depends on P1. - W6 reuses W5's path. - M24 now takes its base pose from NT66 and its wheel speeds from W1. - NT53–NT65 have shipped upstream, so their links now point to the upstream docs instead of the deleted spec folders. The table notes the pin those items need (1f6d717 or later). Every reference value in the test plans was checked in double precision and, where float rounding matters, in float32: closed-loop runs for W5–W7, endpoint integration of every Dubins and Reeds–Shepp candidate, and DWA scoring margins. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mmp77ieEy16GxJL8KsLsVx
✅
|
| Descriptor | Linter | Files | Fixed | Errors | Max errors | Warnings | Elapsed time |
|---|---|---|---|---|---|---|---|
| ✅ ACTION | actionlint | 7 | 0 | 0 | 0.39s | ||
| ✅ CPP | clang-format | 35 | 0 | 0 | 0 | 0.52s | |
| ✅ CPP | cppcheck | 35 | 0 | 0 | 0.64s | ||
| ✅ DOCKERFILE | hadolint | 1 | 0 | 0 | 0.39s | ||
| ✅ JSON | jsonlint | 8 | 0 | 0 | 0.06s | ||
| ✅ JSON | prettier | 8 | 2 | 0 | 0 | 0.29s | |
| ✅ MARKDOWN | markdownlint | 149 | 0 | 0 | 0 | 1.41s | |
| ✅ MARKDOWN | markdown-table-formatter | 149 | 0 | 0 | 0 | 0.15s | |
| lychee | 183 | 3 | 0 | 3.19s | |||
| ✅ YAML | prettier | 12 | 0 | 0 | 0 | 0.35s | |
| ✅ YAML | yamllint | 12 | 0 | 0 | 0.42s |
Detailed Issues
⚠️ SPELL / lychee - 3 errors
📝 Summary
---------------------
🔍 Total..........134
🔗 Unique..........68
✅ Successful.....121
⏳ Timeouts.........0
🔀 Redirected.......5
👻 Excluded.........9
❓ Unknown..........0
🚫 Errors...........3
⛔ Unsupported......3
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 ROADMAP.md
[404] https://github.com/embedded-pro/numerical-toolbox-cpp/blob/main/roadmap/math/SE2Transform/implementation.md (at 61:89) | Rejected status code: 404 Not Found
Errors in roadmap/README.md
[404] https://github.com/embedded-pro/numerical-toolbox-cpp/blob/main/roadmap/math/SE2Transform/implementation.md (at 30:28) | Rejected status code: 404 Not Found
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.



Adds spec triplets (
implementation.md,tests.md,explanation.md) for planar odometry and the whole wheeled family, in two new modules.roadmap/mobile/PlanarOdometry(F1): exact SE(2) arc integration and the odometry increment used by E1/E4.DifferentialDrive(W1): wheel-speed limits that preserve curvature;ScaleToLimitis shared with W4.CarLikeKinematics(W2): kinematic bicycle, angle and rate limits, Ackermann wheel angles.OmnidirectionalKinematics(W3): N Swedish wheels; least-squares forward map plus a slip residual.SkidSteerKinematics(W4): ICR model with a closed-form ICR estimator.PurePursuit(W5): speed-scheduled look-ahead, monotone progress, and the boundedPlanarPathpolyline.StanleyController(W6) andKanayamaController(W7).roadmap/planning/DubinsPath(W8): the sharedCarPathtype, with float-safe existence tests.DynamicWindowApproach(W9): closed-form arc clearance to laser-scan points.ReedsSheppPath(W10): 8 base formulas plus symmetries, 44 evaluations.Roadmap changes
1f6d717. This PR does not bump the pin.Everything builds on NT66
math::SE2Transform, whose spec is in embedded-pro/numerical-toolbox-cpp#363. The[nt66]link resolves once that PR merges.Validation. Every reference value in the test plans was checked in Python, in double precision and, where rounding matters, in float32:
One float edge case is now part of the W8 spec: for an exact single-arc goal, a strict
p² ≥ 0test drops every CSC word and returns a path five times too long. The spec uses a tolerance ε = 1e-5, and a test covers it.Generated by Claude Code