Asked

Auto Position Robot Skill Guidance

I have a question related to the Auto Position robot skill in ARC. I need a refresher on creating various arm movements, one servo at a time. I'm using the latest version of ARC and working on a robot project with two arms, each equipped with 5 EZ-Robot HDD servos (shoulder, arm, elbow, wrist, and gripper). These servos are connected to an SSC-32 controller, although I recently found out that it has been discontinued by LynxMotion.

Previously, I created test auto positions for each arm using EZ-Script. Now, I want to create more movements but face some challenges. I'm trying to move only one servo at a time to achieve the desired position for the entire arm. I recall something about using a "0" or "-1" for the servo position. Is that still correct? When creating a frame for each servo's position, should I set all other servos to 0 or -1 and save each position individually? Currently, I'm experiencing an issue where other servos seem to move slightly when I try to move just one servo on an arm. Additionally, I'm having trouble getting servos to consistently return to their proper positions.

I've already created a servo profile and a servo initialization script to assist with this process.

For Athena or DJ, I've included the test file I created: Cy_armsTesting.EZB



Related Hardware (view all EZB hardware)
EZ-B V4 by EZ-Robot
EZ-B v4/2 robot controller: dual Cortex ARM, Wi-Fi, audio/video, 24 servo/digital ports, I2C/UART, camera and Synthiam ARC control for custom robots
Wi-Fi / USB
Servos 24
Camera
Audio
UART 3
I2C
ADC 8
Digital 24

Related Robot Skills (view all robot skills)
ARC integration for SSC-32 servo controllers via PC COM or EZ-B/Arduino UART; maps V0-V31, configurable baud, enables servos in ARC skills.
Create servo frames and actions to animate gaits and gestures with automatic motion planning, software ramping, movement panel, import/export

ARC Pro

Upgrade to ARC Pro

Experience early access to the latest features and updates. You'll have everything that is needed to unleash your robot's potential.

Author Avatar
PRO
Canada
Twitter YouTube GitHub
#1  

Thanks - good details. Below is a focused refresher and troubleshooting plan for using Auto Position (Gait) to move one servo at a time and to get consistent return-to-home behavior. I can’t open your attached .EZB file here, so please paste your Auto Position frames or initialization script text (or export & paste the .autoposition contents) if you want me to inspect them.

Useful links

Quick answers to your direct questions

  • Use -1 to skip a servo in an Auto Position frame. -1 means "ignore this servo / leave it alone."
  • 0 is not the same as -1. A value of 0 generally means "set the servo to 0 degrees" (or release for some contexts). Do NOT set all other servos to 0 if you want them unchanged - use -1.
  • To move only one servo at a time in a frame: set the target servo to the desired angle and set every other servo to -1 in that frame. Save the frame. Then build an Action with those single-servo frames in sequence so the action moves one servo at a time.
  • If other servos still move slightly when you change one servo, that’s usually: (1) mechanical coupling or gravity load, (2) power supply drop causing twitching, (3) conflicting control from another skill/script, or (4) servo profile offsets / initialization differences. See troubleshooting below.

Step-by-step: build single-servo frames (recommended safe workflow)

  1. Project Open your Auto Position skill CONFIGURE FRAMES.
  2. Turn OFF Realtime Update while editing (safer for recording).
  3. Create a new frame. Name it for the servo and angle (e.g., "RightElbow_110").
  4. For the servo you want to move, enter the desired angle (e.g., 110). Make sure you are editing the correct port type (SSC-32 uses virtual ports v0..v31 - confirm the ports in the Auto Position map).
  5. For every other servo in that frame set the value to -1 (skip). This ensures only the chosen servo is commanded.
    • Tip: If many servos exist and GUI bulk-edit is awkward, create a frame by using Get & Set All Positions, then edit the one servo and then use an editor or export/import to change other values to -1. You can also copy a frame and then manually set the other servos to -1.
  6. Use Jump To to instantly verify the frame (Jump To does an immediate set - no ramps). If you prefer a smooth move for testing use Transition To with Steps/Delay.
  7. Save the frame.
  8. Repeat for all single-servo target poses.
  9. Create an Action and add the single-servo frames in the order you want them executed. When the Action runs, only the servos with non -1 values in each frame will be commanded.

Why other servos might move slightly - checklist & fixes

  • Mechanical coupling / gravity:
    • When shoulder/arm moves it shifts loads on lower joints, so the elbow/wrist may sag or shift slightly. Solution: support the limb while testing or add counterbalance.
  • Power supply sag:
    • Servos draw current when moving. Voltage dips can make adjacent servos twitch. Solution: use a battery/power supply that can supply sufficient current and common ground; add decoupling caps or a beefier battery.
  • Conflicting skills or scripts:
    • Make sure no other robot skill (or your servo initialization script) is simultaneously commanding the same virtual ports. If multiple skills use the same v-ports, they fight each other. Solution: stop/disable other skills while tuning Auto Position. Verify your init script only runs when desired.
  • Servo profile offsets:
    • Confirm servo profile offsets are correct and applied consistently. If offsets are wrong, the visual frame values and the commanded final positions will misalign. If you changed the skill title remember scripts referencing it must use the new title.
    • Re-check Configure servo Profile Configure (use Auto Position layout) to ensure offsets are small and sensible.
  • Auto Position transition interpolation:
    • When you run an Action, Auto Position computes intermediate steps so servos arrive simultaneously. If a frame includes some servos (non -1) and not others, only included servos get commands. If you see movement on excluded servos, it points to hardware or other-skill interference.
  • SSC-32 mapping / V-port confusion:
    • Verify in the SSC-32 skill configuration that channel mapping matches the ports used by Auto Position. SSC-32 creates virtual port constants v0..v31 - ensure Auto Position uses those v constants and not ezb d0 style ports.

Getting servos to reliably return to "home"

  • Best practice: create a dedicated "Home" frame with explicit positions for every servo (no -1s), save it, and use Jump To to force an instant known pose on startup or when needed.
  • Initialization script: run a script at project start that Jump To the Home frame or explicitly sets all servo positions. Example JavaScript initialization snippet you can use in ARC script (place in a startup script or Auto Position Start Script):
// Example startup/initialization script
// Set these to match your home frame and ports (v0..v4 are examples)
Servo.setPosition(v0, 90);   // shoulder
Servo.setPosition(v1, 90);   // arm
Servo.setPosition(v2, 90);   // elbow
Servo.setPosition(v3, 90);   // wrist
Servo.setPosition(v4, 10);   // gripper (open)
sleep(600); // wait 600 ms for servos to move
print("Init home positions set");

Notes:

  • Use virtual servo port constants (v0..v31) without quotes.
  • Use sleep(ms) built-in (milliseconds).
  • If your SSC-32 skill needs time to connect, put a short sleep before sending positions.

If you used EZ-Script before

  • EZ-Script is legacy. If you want, paste the EZ-Script init code here and I’ll convert it to JavaScript for you.

Extra tips for tidy Auto Position frames and actions

  • Realtime Update: disable while editing frames to avoid unexpected motion. Enable only when you want immediate feedback.
  • Jump To vs Transition To:
    • Jump To = instant set (use to verify exact positions).
    • Transition To = interpolated smooth move using the Steps and Delay values defined for that step.
  • Use a "Calibration/Home" frame that you always Jump To at the start of any sequence to be sure offsets are applied and you have a repeatable reference.
  • When making a gait where only one servo moves per step, make Steps small and Delay short so those small single-servo moves don’t take too long - tune Steps/Delay per step when adding to an action.

What I need from you to help more precisely

  1. Are your servos PWM hobby servos or smart serial servos (Dynamixel/LewanSoul/Feetech)? (smart servos can report position)
  2. Confirm the ports used by Auto Position for the left and right arms (list as v# for each joint). Example: Right arm = v0 shoulder, v1 arm, v2 elbow, v3 wrist, v4 gripper.
  3. Paste your servo initialization script (the exact text). I will check for conflicts/timing issues.
  4. Describe the symptom when "servos don’t return to proper positions" - are they off by a consistent offset? random? only after some moves? Does Jump To the Home frame recover them reliably?
  5. If possible, export and paste the Auto Position frames XML or the small .autoposition file text (you can export from the skill Import/Export menu) so I can inspect values and suggest edits.

If you want, I’ll:

  • Convert any EZ-Script initialization code you have into ARC JavaScript and optimize timing.
  • Review a pasted list of Auto Position frames and point out where -1 should be used, or how to re-organize frames/actions for one-at-a-time servo moves.
  • Provide a recommended startup sequence script to apply servo profile offsets and reliably return to Home.

Next step? Please answer items 1-4 above and paste the initialization script (or the exported auto-position frames). I’ll walk through the exact changes to your frames/actions and give a ready-to-copy startup script.


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.