Skip to content

Hardware: end-effector attachment on arm page; frame-config step on camera page#4968

Open
shannonbradshaw wants to merge 1 commit intoviamrobotics:mainfrom
shannonbradshaw:arm-camera-frame-attach
Open

Hardware: end-effector attachment on arm page; frame-config step on camera page#4968
shannonbradshaw wants to merge 1 commit intoviamrobotics:mainfrom
shannonbradshaw:arm-camera-frame-attach

Conversation

@shannonbradshaw
Copy link
Copy Markdown
Collaborator

Summary

Applies the reviewer-feedback playbook. Two small changes bounded by one reviewer ask plus one verified structural gap.

Reviewer feedback addressed

On `/hardware/common-components/add-an-arm/`:

Can we describe the after arm frame here, the json, urdf, etc?

Changes

add-an-arm.md — reviewer ask

Two paragraphs appended inside the existing "Configure a frame (recommended)" step:

  • Paragraph 1 — end-effector attachment: to attach a gripper, camera, or other tool, set the attached component's frame `parent` to the arm's name. Links to the `add-a-gripper` Configure-a-frame step for the JSON example (no duplication). Traces to: "after arm frame."
  • Paragraph 2 — custom kinematics: arm modules implement the `Kinematics` method to return the kinematic model. Links to `/motion-planning/reference/kinematics/` for URDF and SVA JSON formats and `/build-modules/write-a-driver-module/` for the module code. Traces to: "the json, urdf, etc."

add-a-camera.md — structural gap (deliberate scope expansion)

The camera how-to had no Configure-a-frame step. The arm and gripper how-tos both do. Wrist-mounted cameras on arms are a common setup. Flagging as deliberate scope expansion beyond the reviewer's verbatim comment, per the playbook's scope-discipline rule.

New "### 4. Configure a frame (recommended)" inserted between the existing attributes step and save step. Old steps 4 and 5 renumber to 5 and 6. Three patterns:

  • Wrist-mounted on an arm: `parent = `, with JSON example.
  • Fixed in the workspace: `parent = "world"` with absolute translation.
  • Mounted on a mobile base: `parent = ` as a static offset, with the explicit caveat that bases do not contribute a dynamic frame (unlike arms), so live world-space tracking requires a movement sensor or odometry updating the base's frame.

Cross-links to `/hardware/multi-machine/cross-machine-frames/` for remote-part cameras and `/motion-planning/frame-system/` for the full reference.

Verification (full log from Phase 1)

Claim Source
`parent: ` attaches to the arm's end effector and tracks the tip `rdk/robot/impl/local_robot.go:1219` (arm is a ModelFramer), existing `add-a-gripper.md:76`
Arm's `Kinematics` method returns a `referenceframe.Model` `rdk/components/arm/client.go:190`, `rdk/components/arm/fake/fake.go:236`
Viam accepts URDF and SVA JSON for arm kinematics `docs/motion-planning/reference/kinematics.md:47,52,54,75,76,78`
All destination pages exist File-exists checks for each: kinematics.md, write-a-driver-module.md, add-a-gripper.md, cross-machine-frames.md, frame-system/_index.md
Base does not contribute a dynamic frame `rdk/robot/impl/local_robot.go:1219` — arm, gantry, gripper match; base falls in the `default:` case, no ModelFrame extracted

Deliberately out of scope

  • A reference-style description of what frames the arm contributes (`:` naming). Belongs on `/motion-planning/frame-system/`, not a how-to page (Diataxis rule).
  • Any Viam app UI references (tabs, panels, buttons). The playbook requires a flow document for any UI claim; no applicable flow doc exists, and the reviewer's comment doesn't call for UI guidance.
  • `GetFrameSystemConfig` SDK instructions. The method returns parts with embedded kinematics, not a flattened list of link names, so the honest explanation would need caveats this PR doesn't need.
  • Mobile-base live-tracking walkthrough. The mobile-base pattern is noted as a static offset; live tracking requires a movement sensor and is its own topic.

Test plan

  • prettier + vale clean
  • Netlify deploy preview:
    • /hardware/common-components/add-an-arm/ — two new paragraphs render inside "Configure a frame"
    • /hardware/common-components/add-a-camera/ — new step 4 renders; steps 5 and 6 renumber correctly; JSON block renders
    • Internal link to add-a-gripper/#3-configure-a-frame-recommended resolves
    • Internal link to /motion-planning/reference/kinematics/ resolves
    • Internal link to /hardware/multi-machine/cross-machine-frames/ resolves
  • htmltest passes

🤖 Generated with Claude Code

…amera page

Applies playbook-reviewer-feedback. Two small changes bounded by one
reviewer ask plus one verified structural gap.

### add-an-arm.md — answers the reviewer's ask

Reviewer asked:
> Can we describe the after arm frame here, the json, urdf, etc?

Two paragraphs appended inside the existing "Configure a frame
(recommended)" step:

1. Set the attached component's `parent` to the arm's name to attach
   a gripper, camera, or other tool to the end effector. Links to
   add-a-gripper's frame step for a worked example (no JSON
   duplication).
2. Custom arm modules implement the arm's `Kinematics` method to
   return the kinematic model. Links to
   /motion-planning/reference/kinematics/ for URDF and SVA JSON
   formats, and /build-modules/write-a-driver-module/ for the
   module-code side.

### add-a-camera.md — structural gap surfaced while addressing the ask

The camera how-to had no Configure-a-frame step. The arm and gripper
how-tos both do, and wrist-mounted cameras on arms are a common
setup. Deliberate scope expansion beyond the reviewer's literal
comment; consistency fix across peer how-to pages.

New step 4 "Configure a frame (recommended)" inserted between the
existing attributes step and the existing save step (old steps 4 and
5 renumber to 5 and 6). Three patterns:

- Wrist-mounted on an arm (parent = arm name, with JSON example).
- Fixed in the workspace (parent = world).
- Mounted on a mobile base (parent = base name) — called out as a
  static offset, not live tracking, because bases do not contribute
  a dynamic frame. Verified against rdk/robot/impl/local_robot.go
  line 1219, where the frame system extracts a kinematics model only
  for arms, gantries, and grippers; bases fall in the default case.

Cross-links to /hardware/multi-machine/cross-machine-frames/ for
remote-part cameras and /motion-planning/frame-system/ for the full
reference.

### Deliberate non-additions

- No reference-style description of what frames the arm contributes
  (belongs on the frame-system reference page, not a how-to).
- No Viam app UI references. The flow-document requirement from the
  playbook says UI claims need a pre-existing flow doc; no applicable
  doc exists, and the ask does not require one.
- No `GetFrameSystemConfig` SDK guidance. The call returns parts with
  an embedded kinematics model, not a flattened list of link names,
  so the most useful thing I could have said would have required
  caveats this PR does not need.

### Verification log

Every claim traced to source in Phase 1 of the playbook. Key
anchors: rdk/robot/impl/local_robot.go:1219 (arm is a ModelFramer,
base is not); rdk/components/arm/client.go:190 (Kinematics method
signature); docs/motion-planning/reference/kinematics.md covers URDF
and SVA JSON; all link targets confirmed present.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@netlify
Copy link
Copy Markdown

netlify Bot commented Apr 17, 2026

Deploy Preview for viam-docs ready!

Name Link
🔨 Latest commit 5eb6012
🔍 Latest deploy log https://app.netlify.com/projects/viam-docs/deploys/69e28fdd15ce380008241cd6
😎 Deploy Preview https://deploy-preview-4968--viam-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 46 (🟢 up 8 from production)
Accessibility: 99 (no change from production)
Best Practices: 83 (🔴 down 9 from production)
SEO: 89 (no change from production)
PWA: 60 (no change from production)
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

@viambot viambot added the safe to build This pull request is marked safe to build from a trusted zone label Apr 17, 2026
@viamrobotics-overwatch
Copy link
Copy Markdown

Hey @shannonbradshaw — CI is green and no reviewer is assigned yet. Could you request one when you have a chance?

Auto-comment from overwatch. Will not re-nudge for 7 days.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe to build This pull request is marked safe to build from a trusted zone

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants