Arm Component

The arm component provides an API for linear motion planning, including self-collision prevention and obstacle avoidance.

If you have a physical robotic arm, consisting of a serial chain of joints and links, with a fixed end and an end effector end, use an arm component.

Arms have two ends: one fixed in place, and one with a device you can position. When controlling an arm, you can place its end effector at arbitrary cartesian positions relative to the base of the arm.

Configuration

To use a robotic arm, you need to add it to your machine’s configuration. Go to your machine’s CONFIGURE page, and add a model that supports your arm.

The following list shows the available arm models. For additional configuration information, click on the model name:

Model
Description

API

The arm API supports the following methods:

Method NameDescription
GetEndPositionGet the current position of the arm as a pose.
MoveToPositionMove the end of the arm in a straight line to the desired pose, relative to the base of the arm.
MoveToJointPositionsMove each joint on the arm to the position specified in positions.
MoveThroughJointPositionsMove the arm’s joints through the given positions in the order they are specified.
GetJointPositionsGet the current position of each joint on the arm.
GetKinematicsGet the kinematics information associated with the arm as the format and byte contents of the kinematics file.
IsMovingGet if the arm is currently moving.
StopStop all motion of the arm.
GetGeometriesGet all the geometries associated with the arm in its current configuration, in the frame of the arm.
ReconfigureReconfigure this resource.
DoCommandExecute model-specific commands that are not otherwise defined by the component API.
GetResourceNameGet the ResourceName for this arm with the given name.
CloseSafely shut down the resource and prevent further use.

Motion planning with your arm

The arm API sends requests for the arm to move to a set of joint positions, and reports the arm’s current joint positions. Viam’s motion service provides an API for moving the end of the arm to a given position, around any obstacles.

For each arm model, there is a JSON file that describes the kinematics parameters of the arm. When you configure an arm model, the arm driver parses the kinematics file for the frame system service to use. The frame system allows the motion service to calculate where any component of your machine is relative to any other component, other machine, or object in the environment.

Troubleshooting

If your arm is not working as expected, follow these steps:

  1. Check your machine logs on the LOGS tab to check for errors.
  2. Review your arm model’s documentation to ensure you have configured all required attributes.
  3. Click on the TEST panel on the CONFIGURE or CONTROL tab and test if you can use the arm there.

If none of these steps work, reach out to us on the Community Discord and we will be happy to help.

Next steps

For general configuration, development, and usage info, see:

You can also use the arm component with the following services: