Asked

Inverse Kinematics Guidance For Cybot3000

I have a question regarding the use of the Inverse Kinematics robot skill in Synthiam ARC. I've managed to create the general arm configuration based on the initial instructions, but I would like to know if there is a comprehensive video tutorial available, along with more detailed instructions on using this skill effectively.

For my setup, which is for the Cybot3000, I have both arms mounted in a downward position on each shoulder. Each arm consists of five servos using EZ-Robot HDD servos and grippers. I've configured them as follows:

  • Right Arm:

    • v4 = Shoulder
    • v5 = Arm
    • v6 = Elbow
    • v7 = Wrist
    • v8 = Gripper
  • Left Arm:

    • v11 = Shoulder
    • v12 = Arm
    • v13 = Elbow
    • v14 = Wrist
    • v15 = Gripper

Any guidance on using Inverse Kinematics with this configuration would be greatly appreciated.



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 Skill (view all robot skills)
Customizable inverse/forward kinematics for robot arms: define joints and bones, move end effector in cm with precise, user-friendly control.

ARC Pro

Upgrade to ARC Pro

Unlock the true power of automation and robotics by becoming a proud subscriber of Synthiam ARC Pro.

Author Avatar
PRO
Canada
Twitter YouTube GitHub
#1  

Thanks - good details. Below is a focused, practical guide for using the Inverse Kinematics (IK) Arm robot skill with your Cybot3000 shouldermounted arms (5 servos each). I also include configuration/checklist items, testing steps, sample JavaScript scripts you can paste into ARC, and follow-up questions so I can give more targeted help.

Helpful links

Quick summary for your hardware

  • EZ-B v4 (EZB Firmware) - EZB index should be 0 for the IK skill unless you have multiple EZBs.
  • Right arm virtual servo ports: v4 (shoulder), v5 (arm), v6 (elbow), v7 (wrist), v8 (gripper).
  • Left arm virtual servo ports: v11..v15 (same order).
  • Each arm is mounted downward on shoulders (this affects joint type/orientation and offsets).

Stepbystep configuration checklist (recommended order)

  1. Add two instances of the IK skill (one per arm).

    • Project Add robot skill search "Inverse Kinematic Arm".
    • Rename the skill instances to something clear (e.g., "IK Right Arm" and "IK Left Arm").
  2. Open skill settings (kebab/hamburger menu - top right of the robot skill window).

    • Use the three-line hamburger to open Configuration.
  3. Create joints in correct mechanical order (base end effector).

    • Add joints in order: Shoulder, Arm, Elbow, Wrist, EndEffector(Gripper).
    • For each joint entry:
      • Set the servo port to the virtual port (v4, v5, etc.). Note: when entering servo constants in scripts you must NOT put them in quotes (i.e. Servo.setPosition(v8, 260)) - same in the config dialogs use the port selector.
      • Set EZB Index to 0 if your EZB is the primary board.
      • Choose Joint Type:
        • Shoulder: Rotation (revolute) if it rotates the whole arm side-to-side.
        • Arm / Elbow / Wrist: Lever (prismatic-style lifting) - the skill calls them Lever/Rotation; use Lever for joints that lift the arm up/down.
      • Length (mm): measure center-to-center of the joint shafts (this is critical for correct IK).
      • Offset (mm): if joint pivot is offset horizontally relative to previous joint.
      • Servo Range & servo Offset (degrees): set realistic min/max travel and physical mounting offsets. Use Invert checkbox if the servo moves opposite to expected.
      • Save each joint.
  4. Configure workspace limits (Range Limits for X/Y/Z) to safely constrain the arm and avoid collisions.

  5. Test and calibrate joint parameters:

    • With servos powered and EZB connected, manually move each servo in the skill UI or using a simple servo control to set comfortable MIN/CENTER/MAX positions.
    • Use the Forward Kinematics display in the IK skill: move servos and watch X/Y/Z displayed. This verifies lengths/offsets alignment.
  6. Home/Initialization:

    • Create an INIT script or a startup script that moves the arm to a known, safe pose at startup (see example below).
    • Don’t rely on assumed positions - always initialize by moving to a safe known pose.
  7. Fine tune:

    • Adjust lengths/offsets and servo offsets until the FK display corresponds to the physical pose.
    • Tune gripper open/close servo positions so gripping does not strain the servo.

Important notes about mounting / mirroring (shoulder on each side)

  • Left arm will be mirrored relative to the right arm. Options:
    • Configure the Left arm skill instance with appropriate servo offsets and/or check Invert for appropriate joints.
    • If a joint physically faces the opposite direction, set servo Offset (deg) or Invert checkbox - better to use offsets for precise mapping.
  • The IK solver treats X/Y/Z in the skill’s coordinate system. If you want both arms to use the same coordinate frame but mirrored, adjust offsets or transform the X value in your scripts (e.g., x -> -x for mirrored side).

Testing procedure (safe order)

  1. Test servos individually with the Vertical/Horizontal servo skill to confirm wiring/port mapping.
  2. With IK skill open and configuration saved, slowly move each joint from the skill UI while watching FK X/Y/Z.
  3. Move the whole arm to a few simple positions with ControlCommand(... "MoveTo" ...) and verify real-world position.
  4. If the arm binds, press PANIC to release servos, correct configuration, then re-test.

Example JavaScript snippets

  • Important: use print() (not console.log()) if you want to log in ARC script panels.
  1. Move an IK skill instance to a Cartesian position (assumes you named the skill "IK Right Arm"):
// Move the right arm end effector to X=10cm, Y=8cm, Z=15cm
ControlCommand("IK Right Arm", "MoveTo", 10, 8, 15);
print("Requested IK Right Arm MoveTo 10,8,15");
  1. Open / close the gripper servo (virtual port v8 for right gripper):
// Open gripper (example position)
Servo.setPosition(v8, 260); // don't put v8 in quotes
sleep(800);
// Close gripper (example)
Servo.setPosition(v8, 190);
  1. Homing both arms at startup (example assumes skill names "IK Right Arm" and "IK Left Arm"):
// Example startup: open grippers, then move arms to safe pose
Servo.setPosition(v8, 260); // right gripper open
Servo.setPosition(v15, 260); // left gripper open
sleep(1000);

// Move both arms to a safe home position (X,Y,Z in cm)
ControlCommand("IK Right Arm", "MoveTo", 10, 10, 12);
ControlCommand("IK Left Arm",  "MoveTo", -10, 10, 12);
sleep(2000);
print("Homing complete");
  1. Camera IK pick example (adapted from the manual). This assumes camera variables $CameraObjectX, $CameraObjectY, $CameraObjectWidth are being set by the Camera Device, and your skill instance is named "IK Right Arm":
// Example: open gripper then move to mapped camera coordinates (Right arm)
Servo.setPosition(v8, 260); // open right gripper
sleep(800);

// map camera pixel coords to CM - adjust ranges for your camera distance/setup
var x = Utility.map(getVar("$CameraObjectX"), 0, 320, -20, 20);
var y = Utility.map(getVar("$CameraObjectY"), 0, 240, 35, 5);
var z = Utility.map(getVar("$CameraObjectWidth"), 40, 100, 20, 30);

// Move the arm (Y is height; modify as needed)
ControlCommand("IK Right Arm", "MoveTo", x, y, z);
sleep(1500);

// Close gripper
Servo.setPosition(v8, 190);

Calibration tips & common pitfalls

  • Lengths (mm) and joint center-to-center measurements are the most critical values for valid IK. Use calipers for accuracy.
  • If FK shows weird behavior when you manually move servos, your joint order, lengths, offsets, or joint types are incorrect.
  • Tune servo ranges so the skill won’t command travel past physical stops.
  • Virtual servo ports (v4, v5, etc.) are constants - use them without quotes in scripts.
  • If the arm jumps to extreme pose when using MoveTo, stop, use Panic, check joint min/max, and re-check mount orientation/offsets.
  • If speed/acceleration available, use small speeds during testing.
  • Always test within the workspace limits you set to avoid collisions with the torso/head.

Video tutorial availability

  • There isn’t a single official stepbystep video that covers every IK configuration variant (arm geometry and mounts vary widely). The support page includes screenshots and examples. The written Inverse Kinematics support article (link above) plus the Camera/Servo docs are the best resources. If you want, I can create a focused step list or Example Project for your exact Cybot3000 setup that you can import into ARC.

A few questions so I can help further (pick the ones you can answer)

  1. Did you add two separate IK skill instances (one per arm), or did you try to configure both arms inside a single skill instance?
  2. For each joint, did you set the joint Type as Rotation or Lever? If not sure, tell me the physical motion axis for each joint (shoulder: rotates left/right? arm: lifts up/down?).
  3. Have you measured and entered the joint lengths in mm (center-to-center)? If not, I can list how to measure each joint for accuracy.
  4. Do you want example homing coordinates and initialization script tuned for Cybot3000 (I can create one if you confirm approximate shoulder mounting offsets and typical arm reach)?
  5. Are you using a camera for pick-and-place, or do you just want manual MoveTo and preset poses now?

Next steps I can provide

  • A tailored init/home script for both arms.
  • A camera-to-IK pick-and-place example tuned to your Cybot3000 (need camera position / mounting height).
  • Help debugging a specific bad behavior (send me the exact symptom: FK numbers behaving oddly, servos moving wrong direction, MoveTo failing, etc.)

Would you like me to produce a ready-to-import Example Project with two IK skill instances and a startup script for Cybot3000? If yes, tell me:

  • the exact skill names you used (or I’ll use "IK Right Arm" and "IK Left Arm"),
  • approximate shoulder mounting X offset in mm (distance from robot center to shoulder), and
  • how far forward the arm should reach (approx reach in cm).

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.