Skip to content

docs(roadmap): add the wheeled-robot specs (F1, W1–W10) - #28

Merged
gabrielfrasantos merged 1 commit into
mainfrom
claude/peaceful-hawking-7sef6o
Oct 24, 2026
Merged

gabrielfrasantos merged 1 commit into
mainfrom
claude/peaceful-hawking-7sef6o

Conversation

@gabrielfrasantos

Copy link
Copy Markdown
Contributor

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; ScaleToLimit is 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 bounded PlanarPath polyline.
  • StanleyController (W6) and KanayamaController (W7).

roadmap/planning/

  • DubinsPath (W8): the shared CarPath type, 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

  • Reeds–Shepp is split out of W8 into a new W10.
  • W9 no longer depends on P1.
  • W6 depends on W5 for the path.
  • M24 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; the old spec folders are gone. The table notes they need a pin at or after 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:

  • W5–W7 closed-loop runs.
  • Every Dubins and Reeds–Shepp candidate integrated to its goal (worst endpoint error 5e-11); Reeds–Shepp length ≤ Dubins length and symmetric over 20 000 random pairs.
  • DWA scoring margins.

One float edge case is now part of the W8 spec: for an exact single-arc goal, a strict p² ≥ 0 test 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

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
@github-actions

Copy link
Copy Markdown

✅⚠️MegaLinter analysis: Success with warnings

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
⚠️ SPELL 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

⚠️ Your configuration references items that have been removed from MegaLinter and are ignored: 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

MegaLinter is provided by OX Security
Show us your support by starring ⭐ the repository

@sonarqubecloud

Copy link
Copy Markdown

@gabrielfrasantos
gabrielfrasantos merged commit 1301492 into main Oct 24, 2026
9 checks passed
@gabrielfrasantos
gabrielfrasantos deleted the claude/peaceful-hawking-7sef6o branch October 24, 2026 09:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants