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/)