Skip to content

feat: render Q10 map obstacle markers - #938

Open
hCoureau wants to merge 25 commits into
Python-roborock:mainfrom
hCoureau:feat/q10-obstacles
Open

hCoureau wants to merge 25 commits into
Python-roborock:mainfrom
hCoureau:feat/q10-obstacles

Conversation

@hCoureau

@hCoureau hCoureau commented Aug 31, 2026 •

Copy link
Copy Markdown
Contributor

Q10 map packets contain obstacle positions without validated type or photo metadata. This parses their bounded point tables and exposes calibrated, position-only markers on live, saved, and clean-history maps.

Implementation

  • Parse obstacle and skip-clean point tables using their declared counts and section boundaries. Truncated tables do not shift parsing into later sections.
  • Expose typed Q10Obstacle values through the existing map traits, returning copies of their lists.
  • Preserve archive obstacle data alongside the composed clean-record map/path response.
  • Render obstacle positions using their map-header coordinate calibration and honor configured drawable selection.
  • Keep obstacle state on its owning map packet; no additional request lifecycle is introduced.

Dependencies

Depends on #937. Parser support from #936 and the model-conformance fix in #965 are merged. Upstream main through b3a98b9 (7.12.0) is integrated.

Allen’s follow-up feedback on merged #936 is addressed by separate clean-record and saved-map decoder tests, with no conditional assertions.

Validation and limits

Validation of f157a8c:

  • uv run pytest -q on Python 3.13: 1,452 passed, 53 xfailed, 92 snapshots passed.
  • All pre-commit hooks passed, including Ruff, mypy, codespell, and structured-file checks.
  • uv build passed for both wheel and sdist.
  • The affected cumulative protocol suite passed on Python 3.11 and 3.14: 96 passed, 10 snapshots passed on each version. The full cumulative suite passed on both versions before this test-only follow-up and merge.

No physical-device run was performed for this revision.

Tests cover bounded/truncated tables, archive data, marker placement, and drawable configuration. Earlier physical Q10 S5 validation exercised position-only obstacles; those hardware checks have not been rerun for this revision.

Obstacle types, confidence, and photo identifiers are not inferred. Rendering requires usable map-header calibration. Archive requests inherit the bounded lifecycle from #937, including its clean-history ambiguity barrier and same-map freshness limitation.

No private map captures or account data are included. Related: #767.

@lboue

lboue commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

@hCoureau Could you fix the conflict?

@hCoureau

hCoureau commented Sep 8, 2026

Copy link
Copy Markdown
Contributor Author

Resolved the merge conflicts with current main in ded170d by merging main and retaining its accepted 30-second Q10 CLI map-push timeout. The PR's feature changes are preserved. GitHub now reports this PR as conflict-free, and it remains ready for review.

Validation: 1,026 tests passed, 92 snapshots passed, all pre-commit hooks passed, and sdist/wheel builds passed. GitHub CI was triggered for the new head. Required maintainer approval still applies.

The existing stacked dependencies on #936 and #937 still apply; this update does not bypass their review or merge order. Conflict resolution and validation performed with OpenAI Codex assistance.

This branch has not been deployed

No deployments
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