Next
Define static obstacles
Before you can use the motion planning or navigation with your machine, you need to create a description of your machine’s dimensions and how it is positioned relative to its surroundings. The position and orientation readings returned by a component such as an accelerometer or a robot arm have no meaning without a reference frame.
Use Viam’s frame system to define a coordinate system for your machine, and configure the geometries of your machine’s components. You can also define static obstacles for your machine to avoid.
For complex kinematic chain configuration, useful when creating a module to support an unsupported arm model, see Configure Complex Kinematic Chains.
Imagine you have a robotic arm attached to a table.
Consider one corner of the table the arm is attached to be the origin of the world
, (0, 0, 0)
.
Measure from that point to the base of the arm to get the translation
coordinates.
translation
when configuring the arm component’s frame
information.parent
and orientation
at their default values.To configure your machine following this example:
Navigate to the CONFIGURE tab of your machine’s page in the Viam app.
Select Builder mode and configure your arm.
Select the Frame mode.
From the left-hand menu, select your arm:
Keep the Parent frame as world
and fill in the coordinates for Translation (meters) and Orientation (degrees) according to the position and orientation of the arm in relation to the world
frame’s origin:
{
"components": [
{
"depends_on": [],
"name": "myArm",
"model": "ur5e",
"type": "arm",
"namespace": "rdk",
"attributes": {
"host": "127.0.0.1"
},
"frame": {
"parent": "world",
"translation": {
"x": 100,
"y": -250,
"z": 0
},
"orientation": {
"type": "ov_degrees",
"value": {
"x": 0,
"y": 0,
"z": 1,
"th": 0
}
}
}
}
]
}
Parameter | Required? | Required |
---|---|---|
parent | Required | Default: world . The name of the reference frame you want to act as the parent of this frame. |
translation | Required | Default: (0, 0, 0) . The coordinates that the origin of this component’s reference frame has within its parent reference frame.Units: m in Frame Editor, mm in JSON. |
orientation | Required | Default: (0, 0, 1), 0 . The orientation vector that yields the axes of the component’s reference frame when applied as a rotation to the axes of the parent reference frame.Types: Orientation Vector Degrees ( ov_degrees ), Orientation Vector Radians (ov_radians ), Euler Angles (euler_angles ), and Quaternion (quaternion ). |
geometry | Optional | Default: none . Collision geometries for defining bounds in the environment of the machine.Units: m in Frame Editor, mm in JSON. Types: Sphere ( sphere ), Box (box ), and Capsule (capsule ). |
Imagine you have a robotic arm attached to the actuator (moving part) of a gantry.
Using a nested reference frame allows you to define the reference frame of the arm with respect to the end effector of the gantry.
This allows viam-server
to correctly calculate the position of the end of the arm, taking into account the combined motion of the gantry and the arm.
world
frame will be the same point.
Pick a point on the stationary portion of the gantry and define it as (0,0,0)
.(0,0,0)
of the arm reference frame.parent
of the arm as the gantry, and supply the translation you measured.Since the gantry and world have the same origin, don’t configure a translation between them:
Next, select your arm from the left hand menu.
Select the Parent frame as the gantry, and fill in the coordinates for Translation (m) of the arm in relation to the gantry’s origin:
{
"components": [
{
"name": "myGantry",
"model": "single-axis",
"type": "gantry",
"namespace": "rdk",
"attributes": {},
"depends_on": [],
"frame": {
"parent": "world",
"translation": {
"y": 0,
"z": 0,
"x": 0
},
"orientation": {
"type": "ov_degrees",
"value": {
"x": 0,
"y": 0,
"z": 1,
"th": 0
}
}
}
},
{
"depends_on": [],
"name": "myArm",
"model": "ur5e",
"type": "arm",
"namespace": "rdk",
"attributes": {
"host": "127.0.0.1"
},
"frame": {
"parent": "myGantry",
"translation": {
"x": 0,
"y": 0,
"z": 100
},
"orientation": {
"type": "ov_degrees",
"value": {
"x": 0,
"y": 0,
"z": 1,
"th": 0
}
}
}
}
]
}
Was this page helpful?
Glad to hear it! If you have any other feedback please let us know:
We're sorry about that. To help us improve, please tell us what we can do better:
Thank you!