Animate servo groups with frames and actions for waves, nods, gestures, and other robot motions.
How to add the Auto Position robot skill
- Load the most recent release of ARCx on a compatible operating system (Get ARCx).
- Press the + Skills menu from the top menu bar in ARCx.
- Choose the Servo category tab.
- 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
- 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
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
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
| 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
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 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.
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 ManualThis 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).








This robot skill has been updated to v2.
What has changed
First upload
This robot skill has been updated to v3.
What has changed
allow multiple instances changed to true
This robot skill has been updated to v4.
What has changed
loads a correct size to view all options
This robot skill has been updated to v5.
What has changed
Config menu holds new designer and ui fixes