Wrap-up and next steps

Congratulations, you have finished the SO-ARM101 palletizing workshop! Starting from an empty machine, you configured a real desktop arm, taught it the cell by hand, and wrote the code that packs cubes onto a pallet.

What you built

  • Milestone one. You drove the arm through a static bottom-layer pack from your own Python script, proving your connection, your configured resources, and the poses you taught by hand all hold up under real code.
  • Milestone two. You closed the loop with obstacle avoidance: the motion service plans a collision-free path around the cubes already on the pallet and the cube in the gripper, so the second layer stacks cleanly on top of the first.

What you exercised on the platform

This workshop was small on purpose, but it touched most of the moving parts you will use on any Viam machine:

  • Configuration and runtime: the Viam app as the single source of truth (the CONFIGURE tab and its JSON view), viam-server running your resources, and the module system, including a discovery service that suggested the arm and gripper configuration for you.
  • Resources: the arm and gripper components from the SO-ARM101 module, with the gripper attached to the arm through the frame system.
  • Frame system and motion: placing the arm at the world origin so hand-taught poses are measured from its base, teaching real-world gripper anchor poses by back-driving the arm with torque disabled, and letting the motion service plan for the gripper’s fingertips. You also saw how a WorldState of placed cubes and the held cube keeps the planner from routing through the stack.
  • Code: the Python SDK (RobotClient, the typed Gripper and MotionClient, and motion.move), built up one method at a time into palletizer.py.

Where to go next

Everything above is a foundation you can build on. A few directions, each with a starting point in the docs:

When you are ready to build on your own hardware, the Viam documentation and the module registry are where to start.