Motion planning | Viam Documentation
Motion planning
Your robot arm needs to move from one pose to another without colliding with the table, the walls, or itself. To move safely, the planner must reason about the arm’s kinematic model, the workspace geometry, and the motion constraints you impose.
Viam’s motion service plans a collision-free path and executes it, using a frame system you describe and obstacles you declare. You tell it where to go; it handles the search.
This section covers motion planning for arms and gantries.
Start here
New to Viam’s motion service? Work through a short quickstart that uses fake components so you can run it on any machine:
[Move your first arm
From zero to an arm moving under motion service control, using a fake arm that runs on any machine.](https://docs.viam.com/motion-planning/quickstarts/first-arm/)
[Configure a frame system
Set up a table-mounted arm with a gripper and a wrist camera, and verify the frame configuration with TransformPose.](https://docs.viam.com/motion-planning/quickstarts/frame-system/)
How it works
Each Move request to the motion service runs the same pipeline: it reads the frame system to know where every component sits, reads the arm’s kinematic model to know what joint configurations are reachable, applies any obstacles and constraints you declare, and returns a collision-free path from the current pose to your target.
Core topics
[Frame system
Build a unified coordinate tree so all components agree on where things are in physical space.](https://docs.viam.com/motion-planning/frame-system/)
[Obstacles
Define collision geometry so the motion planner computes safe, collision-free paths.](https://docs.viam.com/motion-planning/obstacles/)
[3D scene tab
Visualize your machine's frame system, geometries, and point clouds in an interactive 3D view.](https://docs.viam.com/motion-planning/3d-scene/)
[Move an arm
Command an arm to a target pose, along a constrained path, or directly in joint space. Build pick-and-place flows from those primitives.](https://docs.viam.com/motion-planning/move-an-arm/)
Other how-tos
[Move a gantry
Control gantry axes directly or plan complex gantry motion.](https://docs.viam.com/motion-planning/move-gantry/)
[Verify a plan
Use armplanning.PlanMotion to compute and inspect a trajectory before the arm moves, and learn how to get the same plan over the motion service API.](https://docs.viam.com/motion-planning/verify-a-plan/)
[Debug with the CLI
Diagnose frame configuration and motion issues from the command line using the Viam CLI motion commands.](https://docs.viam.com/motion-planning/debug-motion-with-cli/)
Concept pages
[How planning works
How Viam plans arm motion: the direct joint-space path it tries first, the cBiRRT fallback, and what to try when planning fails.](https://docs.viam.com/motion-planning/how-planning-works/)
Reference
[Reference
Configuration, API, and technical reference for the motion service.](https://docs.viam.com/motion-planning/reference/)