Skip to content

feat(pj_base): add PJ.PosesInFrame builtin schema (0.8.0)#121

Merged
facontidavide merged 1 commit into
mainfrom
feat/poses-in-frame
Jun 13, 2026
Merged

feat(pj_base): add PJ.PosesInFrame builtin schema (0.8.0)#121
facontidavide merged 1 commit into
mainfrom
feat/poses-in-frame

Conversation

@facontidavide

Copy link
Copy Markdown
Contributor

Summary

New canonical builtin type PJ.PosesInFrame — an array of poses in a single reference frame (geometry_msgs/PoseArray, foxglove.PosesInFrame, AMCL particle clouds). The schema deliberately carries no styling fields: how poses are drawn (arrows vs XYZ triads, size, color) is a viewer-side decision, matching how Foxglove (PosesInFrame + panel settings) and Rerun (InstancePoses3D + instanced geometry) model the same data.

  • Proto mirrors foxglove.PosesInFrame field-for-field (timestamp=1, frame_id=2, poses=3)
  • Owned-values struct PJ::sdk::PosesInFrame + hand-rolled wire codec on the shared builtin_wire Pose/Timestamp helpers
  • kPosesInFrame = 17 in BuiltinObjectType and the C ABI enum, pinned by the layout-sentinel test; PJ_ABI_VERSION untouched (additive)
  • Version 0.7.0 → 0.8.0 (MINOR, additive); abi/baseline.abi untouched — canary DSO verified to carry zero new symbols/DWARF entries, so the abidiff gate outcome is unchanged
  • Docs: builtin_type.md section + type-erasure row, proto README, CLAUDE.md counts

Consumers (separate PRs, dependency-ordered): PJ4 PosesInFrameLayer (instanced arrows/triads with live styling) and pj-official-plugins parsers for geometry_msgs/PoseArray + foxglove.PosesInFrame.

Testing

  • 45/45 tests in both build configs (RelWithDebInfo and Debug+ASAN); codec suite covers schema name, empty buffer, 2-pose round-trip incl. the proto3 w=1 default-quaternion edge, empty poses, and truncated nested-message error
  • pre-commit clean; independently reviewed (spec-compliance + code-quality passes, findings addressed)

🤖 Generated with Claude Code

Canonical array-of-poses type (geometry_msgs/PoseArray,
foxglove.PosesInFrame): timestamp, frame_id, poses[]. Deliberately
carries no styling - arrow/triad shape and scale are viewer-side
decisions. Wire format mirrors foxglove.PosesInFrame field-for-field.

- kPosesInFrame = 17 in BuiltinObjectType and the C ABI enum,
  sentinel-pinned; PJ_ABI_VERSION unchanged (additive change)
- hand-rolled wire codec via the builtin_wire Pose/Timestamp helpers
- version 0.7.0 -> 0.8.0; ABI baseline untouched (additions only)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@facontidavide facontidavide merged commit 62a3b12 into main Jun 13, 2026
4 checks passed
@facontidavide facontidavide deleted the feat/poses-in-frame branch June 13, 2026 09:19
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.

1 participant