Skip to content

DOCS-4036: Add more frame and geometry content, remove arm no code #4411

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
Open
Binary file added assets/operate/mobility/capsule.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/operate/mobility/gripper-frame.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/dev/reference/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ Organization owners and location owners can now move machines between locations
{{% changelog color="removed" title="Frame tab removed, use Add Frame button" date="2025-05-15" %}}

The frame tab no longer exists.
To add a frame to a component, click the **+ Add Frame** button on the component's configuration card.
To add a frame to a component, click the **+ Add frame** button on the component's configuration card.

{{% /changelog %}}

Expand Down
16 changes: 16 additions & 0 deletions docs/dev/reference/glossary/origin-frame.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
title: Origin frame
id: origin-frame
full_link:
short_description: The origin frame is the frame at the base of an arm or other component that has a complex kinematics chain.
---

The origin frame is the frame at the base of an arm, gantry, or other component that has a complex kinematics chain.
This is typically the point at the center of where the component is mounted to a table or stand.

Every component that has a kinematics chain has an origin frame and an end effector frame, for example `my_arm_origin` and `my_arm`.

If you parent a gripper to the arm's `my_arm` frame, the frame system will know the gripper is at the end of the arm.
If you mistakenly parent the gripper to the arm's `my_arm_origin` frame, the frame system will think the gripper is at the base of the arm, and the gripper will not move when you move the arm.

For more information, see [How the frame system works](/operate/reference/services/frame-system/#how-the-frame-system-works).
14 changes: 14 additions & 0 deletions docs/dev/reference/glossary/world-frame.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
title: World frame
id: world-frame
full_link: /operate/mobility/move-arm/frame-how-to/
short_description: The fixed, user-defined global coordinate system that is the reference point for all other coordinate frames in a robotic system.
aka: world frame, world
---

The world reference [frame](/operate/reference/services/frame-system/) is the fixed, global coordinate system that serves as the reference point for all other coordinate frames in a robotic system.
It provides a consistent basis for describing the position and orientation of robots, components, and objects in the physical space.
All other coordinate frames (like robot frames, component frames, etc.) are defined relative to this world frame, either directly or through a chain of transformations.

The user chooses the world frame, and defines it implicitly.
For example, if you have a robot arm mounted on a table and you define the arm's base frame as the world frame, then the arm's base frame is the origin of the world frame.
3 changes: 2 additions & 1 deletion docs/operate/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,9 @@ To get started, install Viam on any device and integrate your hardware. Then you
{{< /cards >}}
{{< /how-to-expand >}}

{{< how-to-expand "Intelligent actuation and motion planning" "3" "INTERMEDIATE" "" "build-platform-motion" >}}
{{< how-to-expand "Intelligent actuation and motion planning" "4" "INTERMEDIATE" "" "build-platform-motion" >}}
{{< cards >}}
{{% card link="/operate/mobility/motion-concepts/" noimage="true" %}}
{{% card link="/operate/mobility/move-arm/" noimage="true" %}}
{{% card link="/operate/mobility/move-base/" noimage="true" %}}
{{% card link="/operate/mobility/move-gantry/" noimage="true" %}}
Expand Down
1 change: 1 addition & 0 deletions docs/operate/get-started/other-hardware/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ layout: "empty"
type: "docs"
empty_node: true
open_on_desktop: true
description: "Integrate other hardware or software by creating a module."
canonical: "/operate/get-started/other-hardware/create-module/"
---
10 changes: 6 additions & 4 deletions docs/operate/mobility/motion-concepts.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,14 @@ You can use the following components to augment motion planning and navigation:

## The frame system

Viam's [frame system](/operate/reference/services/frame-system/) is a way to describe the spatial relationship between the components in your robot.
The motion service uses the frame system to plan the motion of components.
Viam's [frame system](/operate/reference/services/frame-system/) allows you to describe the spatial relationship between the components in your robot.
You configure your machine's frames once, and Viam keeps track of the frames as they move.
This means you can send motion service commands using a consistent coordinate system, regardless of where the components are at a given time.

For example, if you want to command an arm to move to coordinates of `(300, 0, 0)` millimeters, you first need to define the origin `(0, 0, 0)` of the coordinate system and the directions of the x, y, and z axes to give those coordinates meaning.
You must configure frames before you can use the motion service.
For example, if you want to command an arm to move to coordinates of `(300, 0, 0)` millimeters, you first need to decide on the origin `(0, 0, 0)` and the directions of the x, y, and z axes of the {{< glossary_tooltip term_id="world-frame" text="world" >}} coordinate system to give your coordinates meaning.

To give the necessary context, you define the arm's `frame` to describe its position and orientation relative to the world.
You then define the arm's `frame` to describe its position and orientation relative to the world frame.
If you also have a gripper component, you define the gripper's `frame` to describe its position and orientation relative to the arm, so that when the arm moves, the motion service knows where the gripper is as well.

### Visualize components and frames
Expand Down
5 changes: 3 additions & 2 deletions docs/operate/mobility/move-arm/arm-motion.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ aliases:
- /how-tos/move-robot-arm/
- /tutorials/motion/accessing-and-moving-robot-arm/
- /tutorials/motion/
- /operate/mobility/move-arm/arm-no-code/
date: "2025-05-21"
---

Expand Down Expand Up @@ -142,7 +143,7 @@ The available geometry types are:
| Geometry type | Description | Dimensions to define |
| ------------- | ----------- | ------------------ |
| box | A rectangular prism. | `x`, `y`, `z`: length in each direction in mm. |
| capsule | A cylinder with hemispherical end caps. | `radius` in mm, `length` in mm between the centers of the hemispherical end caps. |
| capsule | A cylinder with hemispherical end caps. | `radius` in mm, overall `length` in mm. |
| sphere | A sphere. | `radius` in mm. |
| mesh | A 3D model defined by a mesh. | `triangles`: a list of triangles, each defined by three vertices. |

Expand Down Expand Up @@ -317,7 +318,7 @@ Follow the steps below to construct the necessary objects and pass them to `Move
{{< /tabs >}}

{{% alert title="Tip" color="tip" %}}
To get a better intuition for poses and where you want the arm to move, try [driving the arm manually with the control interface](/operate/mobility/move-arm/arm-no-code/) and notice how the pose indicated in the control interface corresponds to the arm's position in the real world.
To get a better intuition for poses and where you want the arm to move, try driving the arm manually from the **CONTROL** tab or **TEST** panel and notice how the pose indicated in the control interface corresponds to the arm's position in the real world.

You can also [use the **VISUALIZE** tab](/operate/reference/services/frame-system/#visualize-components-and-frames) to see a representation of your arm's geometry and reference frames.
{{% /alert %}}
Expand Down
76 changes: 0 additions & 76 deletions docs/operate/mobility/move-arm/arm-no-code.md

This file was deleted.

Loading
Loading