Move an arm | Move an arm

Move an arm

Viam exposes three ways to command an arm. Three questions sort them:

  1. What do you know about the destination? A Cartesian target (a pose in space) calls for the motion service. A specific joint configuration calls for direct joint commands.
  2. Does the shape of the motion matter, or only the endpoint? If you need a straight line, a fixed orientation, or any other rule about the path itself, you need constraints.
  3. Do you want obstacle avoidance and IK picked for you, or fine manual control? The motion service handles both; direct joint commands skip both.
Pattern Input Obstacle avoidance Path-shape control When to pick
Move to a pose Cartesian target Yes No You know where the end effector needs to go and want the planner to figure out how.
Move with constraints Cartesian target + rules Yes Yes The shape of the motion matters (straight-line tool path, level end effector).
Move by joint positions Joint angles No Direct You know the joint angles, need predictable motion between known configurations, or want to avoid the planner picking an unexpected IK solution.

For the four constraint types the planner enforces, see Configure motion constraints.

Pick and place

Pick-and-place is the point where motion planning, vision, and gripper control meet. Each service works on its own, but the failure modes that matter most (the gripper closing on air, a depth estimate that crashes the arm into the table) only appear when all three run together.

The workflow splits into two stages so each can be developed and debugged independently:

Both stages reuse the obstacle definitions and geometry-attachment patterns from Obstacles and the arm-motion patterns from the table above.

How-tos

[Configure constraints

Restrict how the arm moves between poses using linear, orientation, and collision constraints.](https://docs.viam.com/motion-planning/move-an-arm/constraints/)

[Move an arm to a pose

Use the motion service to move a robot arm to a position in 3D space.](https://docs.viam.com/motion-planning/move-an-arm/move-to-pose/)

[Move with constraints

Move an arm along a straight line or with a fixed orientation using motion constraints.](https://docs.viam.com/motion-planning/move-an-arm/move-with-constraints/)

[Move by joint positions

Command an arm directly in joint space using MoveToJointPositions and MoveThroughJointPositions, bypassing the motion planner.](https://docs.viam.com/motion-planning/move-an-arm/move-by-joint-positions/)

[Move through waypoints

Plan a single continuous trajectory through an ordered list of intermediate goals using armplanning.PlanMotion.](https://docs.viam.com/motion-planning/move-an-arm/multiple-waypoints/)

[Pose clouds

Give the planner a region of acceptable destinations instead of a single exact pose, so it can find a solution faster.](https://docs.viam.com/motion-planning/move-an-arm/pose-clouds/)

[Pick an object

Detect, localize, and grasp an object with a robot arm and gripper.](https://docs.viam.com/motion-planning/move-an-arm/pick-an-object/)

[Place an object

Move a grasped object to a target location and release it.](https://docs.viam.com/motion-planning/move-an-arm/place-an-object/)