Skip to content

RSDK-14233: add KinematicModel to GetKinematics and FrameSystemConfig - #899

Draft
JohnN193 wants to merge 1 commit into
viamrobotics:mainfrom
JohnN193:RSDK-14233-kinematic-model
Draft

JohnN193 wants to merge 1 commit into
viamrobotics:mainfrom
JohnN193:RSDK-14233-kinematic-model

Conversation

@JohnN193

@JohnN193 JohnN193 commented Sep 18, 2026

Copy link
Copy Markdown
Member

Prototype for RSDK-14233, the Enhanced Arm Kinematics API scope. Opened as a draft so the field names can be reviewed against a diff while the scope is in review.

GetKinematics returns a format tag plus the bytes of a file today, so every consumer parses kinematics itself and nothing checks its reading of the schema against ours. This adds a typed KinematicModel message and carries it in both GetKinematicsResponse and FrameSystemConfig, which today carry the same model as bytes and as an untyped Struct.

What is in the message and why it is shaped this way

  • Reuses Vector3, Orientation, Geometry and Mesh. Reusing Geometry means the geometry half of SVA's tagged unions is already a oneof.
  • LinkPose is a translation plus a oneof over the orientation representations SVA files already accept, so an existing file converts without loss and the author keeps the representation they wrote.
  • Each joint carries hardware_limits and user_limits separately, so a module can validate one against the other and the motion service sees both.
  • Mesh gains source_path. In a file it is the mesh path relative to that file. On the wire it identifies a mesh whose bytes were left out by the new exclude_collision_meshes and exclude_visual_meshes request flags.
  • KinematicProperties holds component level values, starting with trajectory_sampling_freq_hz.
  • generation is bumped by a component when its model changes. Nothing reads it yet. It is here so a later change detection mechanism does not need another proto revision.
  • The proto JSON encoding of KinematicModel is also the on disk file format, SVA v2.

The bytes fields and the Struct are deprecated rather than removed. The rdk side keeps filling them for older clients during the migration window.

buf lint, buf breaking against main and buf format pass. Only the Go for common.proto and robot.proto is regenerated here, with the pinned protoc-gen-go. Web output and proto docs still need the mise tasks, so expect the generated code check to complain until then.

The rdk side of the prototype is viamrobotics/rdk#6494 and builds against this branch.

🤖 Generated with Claude Code

GetKinematics returns a format tag plus the bytes of a file, so every
consumer parses kinematics by hand and nothing checks their understanding
of the schema against ours. This adds a typed KinematicModel message and
carries it in both GetKinematicsResponse and FrameSystemConfig, which
today carry the same model as bytes and as an untyped Struct respectively.

The message reuses Vector3, Orientation, Geometry and Mesh. Link
orientation is a oneof over the representations SVA files already accept,
so an existing file converts without loss. Each joint carries hardware
limits and user limits separately so a module can validate one against
the other. Mesh gains source_path so a file can reference a mesh by
relative path and a response can identify a mesh whose bytes were left
out by the new exclude flags on the request.

The bytes fields and the Struct are deprecated rather than removed; the
server keeps filling them for older clients during the migration window.

Only the Go for common.proto and robot.proto is regenerated here, with
the pinned protoc-gen-go. Web output and proto docs still need the mise
tasks.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe to test committer is a member of this org

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant