Text Overlay icon Text Overlay — Overlay a variable on a processed camera image at X/Y coordinates; name the variable and attach to a specific or any available camera Try it →
 
Auto Position Robot Skill

Auto Position

by Synthiam Inc.

Animate servo groups with frames and actions for waves, nods, gestures, and other robot motions.

Requires ARCx v5 (Updated 10/24/2026)
Tags: Servo
Compatible with: Compatible with Microsoft Windows 10 or 11 Windows Compatible with ARM Linux (Raspberry pi, etc) ARM Compatible with Linux Linux Compatible with MacOS MacOS

How to add the Auto Position robot skill

  1. Load the most recent release of ARCx on a compatible operating system (Get ARCx).
  2. Press the + Skills menu from the top menu bar in ARCx.
  3. Choose the Servo category tab.
  4. Press the Auto Position icon to add the robot skill to your project.

Don't have a robot yet?

Follow the Getting Started Guide to build a robot and use the Auto Position robot skill.


How to use the Auto Position robot skill

Animates a group of servos. Pose the robot, capture the pose as a frame, string frames together into a named action, and the robot waves, nods, points, dances or picks something up.

Use this skill for animations that are not how the robot drives around: an arm, a head, a gripper, or a whole body gesture. A project can have as many Auto Position skills as it needs, for example one per limb. To make a walking robot (a humanoid or hexapod) move when a joystick or script asks it to go forward, use Auto Position (movement Panel) instead. The two skills share the same configuration window and the same configuration format, so a configuration exported from one imports into the other.

Concepts

Term Meaning
Servo One joint. The skill drives a fixed list of servos; every frame holds a position for each of them.
Frame A named pose - one position per servo.
Action A named, ordered list of steps. Each step moves into one frame with its own timing, or pauses. An action can repeat until stopped.
Transition Moving into a frame gradually, described by delay, steps and ramp.
Speed 0 (slow) to 255 (fast). Makes steps that have Variable speed turned on move faster. Steps without it always use their own timing.

The window

Auto Position  <a href='/Support/Skills/Skills-Overview' target='_top'>robot skill</a> window

  • Speed - the skill's speed for steps with Variable speed turned on. It can be changed while an action is running, and it is saved with the project.
  • Panic Stop - stops all movement immediately.
  • Frames list, with Transition To... (move into the selected frame using the delay, steps and ramp below) and Jump To... (snap straight to the frame with no transition). Double click a frame to transition to it.
  • Actions list, with Execute and Stop. Double click an action to execute it. Only actions that have steps are listed.
  • Delay ms, Steps and Ramp - the window's own transition settings, used by Transition To and as the defaults for a frame transition started from a script.
  • Release - stop moving and release every servo so the robot can be posed by hand.

Delay, steps and ramp

Together these decide how a transition looks.

Setting Meaning Effect
Delay ms Milliseconds between each update. Higher is slower.
Steps Servo positions moved per update, on the servo with the farthest to travel. The others move proportionally so they all arrive together. Higher is faster and coarser.
Ramp Updates over which the movement eases in and out. 0 moves at a constant rate. A few updates of ramp makes a motion look much less mechanical.

A slow, smooth move is a large delay with few steps; a snappy one is a small delay with more steps.

Configuration

Frames

Frames configuration tab

Build poses. Set each servo's position with its number control, or press Release, pose the robot by hand and press Capture to store where the servos actually are. Duplicate a frame as the starting point for the next one. Jump To Frame sends the pose to the robot, and Transition To... moves into it with the delay, steps and ramp beside it so you can see how the move will look.

With Realtime Update on, changing a servo's position moves that servo on the robot at once, so the robot follows along while you build the pose.

Add a robot picture and turn on Port Edit Mode to drag each servo's marker over the joint it drives. With twenty servos, a picture is far easier to work with than a list. Marker locations are stored as percentages, so the layout survives the window being resized.

Actions

Actions configuration tab

Assemble frames into a sequence. Pick a frame (or Pause) under Add a step and add it to the end, or insert it after the selected step. Click a step to edit its frame, timing, smart servo velocity and acceleration, Variable speed settings and script. Each step shows an estimated duration.

Turn on Repeats for an animation that should loop until it is stopped. Test Action runs the action from the configuration window at the Test speed, without saving.

Settings

Settings configuration tab

Setting Meaning Default
On start Script that runs when any action begins. empty
On end Script that runs when the auto positioner has finished moving. empty
Frame variable Global variable set to the title of the frame being moved into. AutoPositionFrame
Action variable Global variable set to the title of the running action. AutoPositionAction
Is running variable Global variable that is true while the skill is moving. AutoPositionStatus

With more than one Auto Position skill in a project, give each one its own variable names so they do not overwrite each other. Leave a name empty to not set that variable.

Servos

Servos configuration tab

The servo list: port, board, limits, velocity, acceleration and inversion per joint. Every frame has one position per servo in this list, so adding or removing a servo here changes every frame. Add the servos before building frames where you can.

Import/Export Utilities

Import export utilities configuration tab

Import an ARCx JSON export (from either Auto Position skill) or an ARC Auto Position XML export. Anything that could not be brought across exactly, such as EZ-Script, is kept as an Import Note for review. When a configuration from the Movement Panel is imported, its Forward, Reverse, Left, Right and Stop actions become ordinary actions that can be renamed, run by name or deleted.

The Window tab sets the robot skill's window title, its size on the workspace and notes about what it does in this project.

Window configuration tab

Speed and scripts

A script can start an action by name and give it a speed at the same time. The speed becomes the skill's speed, exactly as if the slider had been moved, and stays until it is changed again. Only steps with Variable speed turned on are affected.

Troubleshooting

Symptom Cause
The motion is jerky Use fewer positions per update with a bigger delay, and add a little ramp.
A servo goes the wrong way Invert it on the Servos tab rather than re-capturing every frame.
A joint slams at the start of an action The first frame is far from where the robot is; add an intermediate frame, or transition into a neutral pose first.
Changing the speed does nothing The action's steps do not have Variable speed turned on.
An action never finishes It repeats. Stop it, or turn repeating off.
An action is missing from the window's list It has no steps yet.
Two Auto Position skills fight over a variable Give each skill its own variable names on the Settings tab.
The servos buzz when idle Press Release.

Control Commands for the Auto Position robot skill

There are Control Commands available for this robot skill which allows the skill to be controlled programmatically from scripts or other robot skills. These commands enable you to automate actions, respond to sensor inputs, and integrate the robot skill with other systems or custom interfaces. If you're new to the concept of Control Commands, we have a comprehensive manual available here that explains how to use them, provides examples to get you started and make the most of this powerful feature.

Control Command Manual

This robot skill has 9 control commands, listed below. Send them from a JavaScript or Python script, from Blockly, or from another robot skill.

The first value is always the window title, which is the name in the title bar of the robot skill on your workspace. It starts out as Auto Position, which is what every example below uses. If you rename the robot skill, or add a second copy of it to the project, use the title as it appears on that window instead.

ControlCommand() can be shortened to CC(), and both spellings work in JavaScript and in Python. The examples are JavaScript; Python is the same call, except that true and false are written True and False.

AutoPositionAction

Execute the action in the background and continue running the script. The speed (0-255) is optional; when given, it becomes the skill's speed for steps that have Variable speed turned on.

Syntax

ControlCommand("Auto Position", "AutoPositionAction", (String)action name, (Number)speed 0-255)

Parameters

# Name Type What to pass
1 action name Text Your text, in quotes
2 speed 0-255 Number A number, without quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Auto Position", "AutoPositionAction", "action name", 0);

AutoPositionActionWait

Execute the action and wait for it to complete before continuing the script. An action that repeats cannot be used, because it would never finish.

Syntax

ControlCommand("Auto Position", "AutoPositionActionWait", (String)action name)

Parameters

# Name Type What to pass
1 action name Text Your text, in quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Auto Position", "AutoPositionActionWait", "action name");

AutoPositionAddFrameToAction

Capture the current servo positions as a new frame and append it to the named action, creating the action if it does not exist.

Syntax

ControlCommand("Auto Position", "AutoPositionAddFrameToAction", (String)action name, (Number)delay, (Number)steps)

Parameters

# Name Type What to pass
1 action name Text Your text, in quotes
2 delay Number A number, without quotes
3 steps Number A number, without quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Auto Position", "AutoPositionAddFrameToAction", "action name", 0, 0);

AutoPositionAddPauseToAction

Append a pause of the specified milliseconds to the named action.

Syntax

ControlCommand("Auto Position", "AutoPositionAddPauseToAction", (Number)delay ms, (String)action name)

Parameters

# Name Type What to pass
1 delay ms Number A number, without quotes
2 action name Text Your text, in quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Auto Position", "AutoPositionAddPauseToAction", 0, "action name");

AutoPositionDeleteActionAndAssociatedFrames

Delete the named action and the frames that only it used.

Syntax

ControlCommand("Auto Position", "AutoPositionDeleteActionAndAssociatedFrames", (String)action name)

Parameters

# Name Type What to pass
1 action name Text Your text, in quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Auto Position", "AutoPositionDeleteActionAndAssociatedFrames", "action name");

AutoPositionFrame

Transition into the frame. Delay, steps and ramp are optional and default to the panel's own settings.

Syntax

ControlCommand("Auto Position", "AutoPositionFrame", (String)frame name, (Number)delay, (Number)steps, (Number)ramp steps)

Parameters

# Name Type What to pass
1 frame name Text Your text, in quotes
2 delay Number A number, without quotes
3 steps Number A number, without quotes
4 ramp steps Number A number, without quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Auto Position", "AutoPositionFrame", "frame name", 0, 0, 0);

AutoPositionFrameJump

Move to the frame immediately with no transition.

Syntax

ControlCommand("Auto Position", "AutoPositionFrameJump", (String)frame name)

Parameters

# Name Type What to pass
1 frame name Text Your text, in quotes

Returns: Boolean [true or false]

Example

var result = ControlCommand("Auto Position", "AutoPositionFrameJump", "frame name");

AutoPositionStop

Stop the current action or frame transition.

Syntax

ControlCommand("Auto Position", "AutoPositionStop")

Returns: Boolean [true or false]

Example

var result = ControlCommand("Auto Position", "AutoPositionStop");

ReleaseServos

Stop moving and release every servo so the robot can be posed by hand.

Syntax

ControlCommand("Auto Position", "ReleaseServos")

Returns: Boolean [true or false]

Example

var result = ControlCommand("Auto Position", "ReleaseServos");

This list is read out of the robot skill itself each time its package is uploaded, so it matches the published version (v5).


ARC Pro

Upgrade to ARC Pro

ARC Pro is more than a tool; it's a creative playground for robot enthusiasts, where you can turn your wildest ideas into reality.