Skip to content

Add SO-ARM101 miniature palletizing workshop#5181

Open
Nick Hehr (HipsterBrown) wants to merge 29 commits into
mainfrom
so-arm101-palletizing-workshop
Open

Add SO-ARM101 miniature palletizing workshop#5181
Nick Hehr (HipsterBrown) wants to merge 29 commits into
mainfrom
so-arm101-palletizing-workshop

Conversation

@HipsterBrown

Copy link
Copy Markdown
Member

Summary

Adds a new sequential-workshop tutorial, Miniature Palletizing with the SO-ARM101, at docs/tutorials/so-arm101-palletizing/ — the second workshop in the collection seeded by pick-and-place, reusing that format with no new layouts or shortcodes.

An affordable desktop 5-DOF arm packs eight cubes (two layers of four) onto a printed pallet mat:

  • Phase 1 platform mental model (three layers, components/services, the frame-system / motion / WorldState concepts)
  • Phase 2 configure the arm + gripper via the discovery service; place both in the frame system
  • Phase 3 teach two anchor poses by hand (freedrive) and read them from the arm's test card
  • Phase 4 build palletizer.py for a static bottom-layer pack — milestone one
  • Phase 5 model placed cubes as WorldState obstacles and the held cube as a gripper-frame transform for the full collision-free two-layer pack — milestone two
  • Phase 6 (optional) package the loop as an inline module
  • Wrap-up review + next steps

Companion code lives in viam-devrel/mini-palletizer: helpers.py, the finished reference/palletizer.py, a machine-config fragment, and a printable cube + pallet-mat template (20 mm cubes, 30 mm pitch). A rendered isometric grid diagram ships in assets/; the remaining screenshots/videos are marked with <!-- ASSET ... --> placement comments (shot list tracked separately).

Test plan

  • make build-prod passes; the workshop builds into production and the overview appears as a card on /tutorials/
  • prettier, markdownlint, and vale are clean across the workshop
  • Netlify preview: overview + all six phases + wrap-up render; prev/next chain and workshop sidebar intact; the Phase 4 grid-iso diagram renders
  • Follow-ups before the assets and code are final: produce the ASSET screenshots/videos, run the pack on real hardware to validate the caveated approximations (held-cube collision spec, placed-cube z-offset, grasp depth)

Pages are published (draft flag removed) so this content is included in the Netlify preview for review.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EdtYcpEHeA2yvQ2ksBzZHH

Nick Hehr (HipsterBrown) and others added 26 commits July 10, 2026 23:29
…oses are world poses

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EdtYcpEHeA2yvQ2ksBzZHH
… hand)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EdtYcpEHeA2yvQ2ksBzZHH
Structured stubs for the WorldState obstacle-avoidance phase (milestone
two) and the optional inline-module phase, completing the phase 1-6
sidebar chain for the SO-ARM101 palletizing workshop.
…e checkpoint

Phase 3's capture_pose.py is now framed as a self-contained script the
learner saves and runs directly with the SDK, not something pulled from
the companion repo; the learner just records the two anchor poses by
hand. Phase 4 is now the first place the companion repo is cloned, and
is where the recorded poses get pasted into helpers.py. Also reworks
the place() checkpoint to verify against the first cycle of pack()
instead of an unsupported standalone place(0) call.
…module' naming

Capitalizes "Phase N" in body prose across the workshop to match the
sibling workshop's convention, and standardizes on "SO-ARM101 module"
instead of "SO-101 module" when referring to the Viam module.
Immediate consistency fixes from the format audit plus the wrap-up page:
- Use sh code fences (was bash) to match the reference workshop
- Add a "Where to start" routing section to the overview
- Add forward-transition sentences to phases 1 and 3 before workshop-nav
- Add 07-wrap-up.md (what you built / exercised / where to go next),
  wire the overview pointer and phase 6 next link to it
- More engaging, phase-free overview intro (story + audience)
- Host is a personal computer; add printable cube/pallet template
- Drop per-phase time estimates and the core/optional framing
- Remove the overview 5-DOF section (too much upfront context)
- Rename companion repo to viam-devrel/mini-palletizer
- Drop LeRobot install from prerequisites
- Phase 1: adapt the seed's three-layers (ASCII) and SDK-connect
  sections; frame system is part of viam-server, not a service;
  rename to "three robotics concepts"; drop "why a real arm" section;
  fix the checkpoint objective
- Phase 2: use family/model names (so101/arm); remove the calibrate
  section (a prerequisite), the LeRobot mention, "not a simulation",
  and the gripper-frame/TCP asides
- Phase 3: capture poses from the arm test card in the app instead
  of a Python script
- Phase 4: "packing routine"; drop "no obstacle avoidance yet"
- Overview: drop redundant "What you'll build"; require only viam-server
- Phase 1: trim intro; drop viam-agent from the three-layers (not on
  macOS); remove frame-system from components/services; trim motion line
- Phase 2: explain what parenting the arm to the world frame means
- Phase 3: add a DoCommand intro; drop stray lines; move the grid
  derivation out to Phase 4
- Phase 4: add "The pallet grid" section with a stacked-grid diagram
  (plus an isometric ASSET); drop "You do not rewrite any of this"
- Phase 1: motion service is a builtin service (no config); reframe the
  frame system ("where is everything and how is it related") and
  WorldState ("what is in the world": obstacles + transforms), with
  links to the frame-system and obstacles docs
- Phase 3: add mat/staging marker placement (align to arm axes, tape down)
- Phase 4: replace the ASCII grid with a rendered isometric diagram
Phase 5 walks through modeling placed cubes and the held cube in
WorldState so the motion planner routes around the growing stack,
completing the collision-free two-layer pack (milestone two). Phase 6
mirrors the pick-and-place workshop's inline-module pattern, wrapping
the pack loop in a generic-service module with dependency injection
and a do_command entry point.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EdtYcpEHeA2yvQ2ksBzZHH
End-to-end review fixes: drop viam-agent and the calibration sensor from
the wrap-up recap (neither is part of this workshop), remove the untaught
5-DOF-orientation claim, and point Phase 1's frame-system link at the same
overview page Phase 2 uses.
Phase 5: positive reframe ("What the planner already knows") clarifying
the default WorldState is configured components with frames; introduce
geometries before RectangularPrism; split the obstacles method build-up
into an obstacles section and a transforms section; move the cube-center
and held-cube tuning caveats into aside callouts; reword the config-
obstacle line with a table example. Phase 6: reword the dependency-
injection lead-in and rename the run section. Reduce "real hardware".
Mark screenshot/video/diagram placements for the shot list (rig photos,
test-card and 3D-scene UI shots, the teach-by-hand and milestone videos,
inline-module build/trigger shots). Full list in plans/.
…raft flags)

Remove draft: true from the overview and all six phase pages plus the
wrap-up so the workshop builds into production and appears in the Netlify
preview. The headless _phase-template.md stays draft.
@netlify

netlify Bot commented Jul 12, 2026

Copy link
Copy Markdown

Deploy Preview for viam-docs ready!

Name Link
🔨 Latest commit 34364c8
🔍 Latest deploy log https://app.netlify.com/projects/viam-docs/deploys/6a54361ecc3d820008db9973
😎 Deploy Preview https://deploy-preview-5181--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: 41 (🟢 up 4 from production)
Accessibility: 100 (no change from production)
Best Practices: 100 (no change from production)
SEO: 92 (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 Jul 12, 2026
Author diagram-cell-layout as a top-down SVG plan of the cell (arm base at
the world origin, staging spot, 2x2 pallet grid with origin + x/y axes,
pick-then-place flow, and a two-layer inset) and embed it via imgproc,
matching the frame-system docs' SVG-diagram style. grid-iso (phase 4) was
already produced; these are the two DIAGRAM assets from the shot list.
…diagram

Replace the two-stick arm with a base, articulated upper-arm and forearm
(joint circles, tube outline+fill), and a two-finger gripper, matching the
style of the frame-system docs' arm SVGs.
Reroute the arm lower so the forearm clears the 'feed one cube here'
label, and move the two-layer inset caption beside the cube stack instead
of above it.
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