Ultrasonic Radar icon Ultrasonic Radar Ultrasonic on a servo sweeps 180°; radar shows distances and obstacles, integrates with movement panels for automatic avoidance, scriptable GetPing Try it →
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 Skills (view all robot skills)
Camera Device by Synthiam
Use PC or robot cameras for vision tracking: color, QR, glyph, face, object, motion; record video/data, control servos and movement, run scripts
Control robot arms with inverse and forward kinematics, converting X/Y/Z positions into joint motion and reporting end-effector location.

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.

Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#9   — Edited

Two things, according to the debug log...

  1. Your skill is actually titled "Inverse Kinematic Arm", not "IK Right Arm"

  2. You're using two versions of ARC 2026.04.11.00 (which is fine because it's the latest) and 2025.12.21.00 (which is super outdated and should not be used because you'll get a million errors)

#10   — Edited

I named the skill IK Arm Test as show... IK Right Arm

This is the test example from athena as posted above....

// 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");

This is the error I still get...
Start
Execution Error Line 2 Col 0 -  ControlCommand Error for 'IK Right Arm' sending 'MoveTo'. 'ControlCommand' with parameter MoveTo, 10,8,15 is not supported for this control (IK Right Arm)
Done (00:00:00.2294037)

My ARC vers. on this computer at the moment is v2026.04.11.00 I still don't see what's wrong here

#11   — Edited

Athena provided that example code and mentioned that the name of the robot skill will need to be changed in the code. This is because without a screenshot or copy of your cheat sheet, it’s impossible to guess what the name of the robot skill is.

My advice is to upgrade to the latest version of ARC - because we added a more verbose error message to handle this scenario. A failed ControlCommand now provided a very detailed message.

Secondly, Athena asked for a desktop screenshot, which would be incredibly useful. That will give her the information needed to help further with the correct syntax.

Doing that, you’ll be up and running in no time.

#12  

User-inserted image

I hope this can be read,it's the only way I know how to show the contents of the cheat sheet athena requested

Author Avatar
PRO
Canada
Twitter YouTube GitHub
#13  

Perfect - the screenshot explains it.

What’s happening

Your skill name is IK Right Arm, but the Cheat Sheet for that skill shows:

controlCommand("Inverse Kinematic Arm", "MoveTo", x, y, z)

So MoveTo belongs to the built-in skill named Inverse Kinematic Arm, not to your renamed skill IK Right Arm.

That’s why ARC says:

ControlCommand ... MoveTo ... is not supported for this control (IK Right Arm)

The fix

Use the built-in skill name exactly as shown in the Cheat Sheet:

ControlCommand("Inverse Kinematic Arm", "MoveTo", 10, 8, 15);
print("Requested MoveTo 10,8,15");

Important note

Your custom skill title IK Right Arm is valid for commands that the Cheat Sheet shows under that title, such as:

ControlCommand("IK Right Arm", "GetStatus");
ControlCommand("IK Right Arm", "ScriptStart");
ControlCommand("IK Right Arm", "ScriptStartWait");
ControlCommand("IK Right Arm", "ScriptStop");

But not MoveTo.


Why this is confusing

ARC skill titles and command targets can be different:

  • Displayed title: IK Right Arm
  • Command provider for MoveTo: Inverse Kinematic Arm

So when using ControlCommand(), always use the name shown next to the command in the cheat sheet.


What to do next

  1. Replace your test script with:

    ControlCommand("Inverse Kinematic Arm", "MoveTo", 10, 8, 15);
    print("Requested MoveTo 10,8,15");
    
  2. Run it again.

  3. If you want to control the left arm, you likely need the same idea applied there too, but I’d want to see that skill’s Cheat Sheet before guessing.


One more helpful point

The screenshot also confirms you’re in the latest ARC version, so that part is fine.

If you want, I can help you with the next step after MoveTo works - for example:

  • how to make the arm home itself on startup
  • how to move the gripper
  • how to set up both arms cleanly
  • how to use forward kinematics testing so you can verify the arm geometry

If you want, send me a screenshot of the left arm skill Cheat Sheet too, and I’ll tell you exactly which commands to use for both arms.


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.
#14  

ok, some success. I fixed the test script, correcting my text within the sample test script.  Few things happened... The Left arm proceeded to move around backwards getting caught on some wires and even broke a piece of the arm (the panic button did not help). I found I had to inverse servos and that base servo was assigned from one (was set for v11 instead of v4 in the Inverse kinematics setup). Ran it again and the arm move completely different Rotated outward then straight out but nothing broke this time).

Another thing I noticed... For all this arm testing, I am using both the Inverse Kinematics skill and my original Auto Position skill, which also used to move one servo at a time. Within the Auto Position skill, I created a Left and Right arm test. Interestingly and horribly found that the Left Arm test work ways different now because of my IK Left Arm Test and the Right Arm test no longer works. I'm assuming that the Inverse Kinematics skill overrides the Auto position, so I can not have both skills together for this project ? Shown below is my Arm Testing Project for Cybot 3000

User-inserted image

I am also interested on creating a Right Arm test ( using servos v11-v15) and how the camera gets used with this skill.

Author Avatar
PRO
Canada
Twitter YouTube GitHub
#15  

Yes - what you’re seeing makes sense, and your screenshot is very helpful.

Short answer

Yes, the IK skill and Auto Position can both exist in the same project, but they can absolutely fight each other if they are both trying to control the same servo ports.

So if:

  • IK Right Arm is controlling v4 - v8
  • Auto Position is also controlling some of those same ports

then whichever skill sent the most recent command will appear to "override" the other.


What I see in your screenshot

I can see:

  • Inverse Kinematic Arm window
  • IK Right Arm window
  • Auto Position window
  • Camera window
  • Servo control window

That tells me you’re testing multiple behaviors at once, which is fine for development, but it also means you need to make sure each skill owns different servos, or you need to intentionally coordinate them.


Why the arm moved backward and hit wires

That usually means one or more of these are still incorrect:

  • joint order in IK configuration
  • servo direction/invert
  • servo offsets
  • the base servo is wrong
  • left/right arm configuration is mirrored but not compensated
  • the arm is starting from an unsafe pose

You already found one major issue:

base servo was assigned from one and was set for v11 instead of v4

That’s important. For the right arm, the IK skill must be configured with the correct ports:

  • v4 shoulder
  • v5 arm
  • v6 elbow
  • v7 wrist
  • v8 gripper

And for the left arm:

  • v11 shoulder
  • v12 arm
  • v13 elbow
  • v14 wrist
  • v15 gripper

Very important: Auto Position vs IK

If Auto Position is using the same servos

Then yes, it will conflict with IK.

If Auto Position is only using different servos

Then it can coexist just fine.

Best practice

For now, while debugging:

  • disable Auto Position
  • test one IK arm only
  • then test the other arm separately
  • after both work, rebuild Auto Position if you still want it for scripted poses

That is the fastest way to stop the servo "fighting."


About the Panic button not helping

The Panic button on the IK skill should release the servos, but if:

  • another skill immediately re-sends a command
  • the servo is under mechanical load
  • the arm is already bound against wires or frame parts

then it may not feel like it helped.

Also, if a joint is physically pulling the arm into a bad position fast enough, the Panic may happen after the damage starts.

Recommendation

Before every IK test:

  • raise the arm manually to a safe pose
  • remove loose wiring from the motion path
  • keep speed low
  • test one joint at a time

The camera and IK

The camera does not automatically drive the IK arm.

The camera is usually used in a script that:

  1. detects an object
  2. reads object coordinates from camera variables
  3. converts those values into robot X/Y/Z
  4. sends ControlCommand("Inverse Kinematic Arm", "MoveTo", x, y, z)

So the camera is a separate skill, and your script connects the two.


Why your left arm moved differently after you changed IK

That’s expected if:

  • the left arm servos were inverted
  • the base assignment was wrong
  • the arm’s joint offsets were not mirrored correctly
  • Auto Position was also sending commands

Once you corrected the servo orientation, the movement changed, which means the solver is now using a different geometric interpretation.

That’s actually progress.


What I recommend next

1) Test one arm at a time

Disable Auto Position temporarily.

2) Verify right arm only

Use:

  • v4, v5, v6, v7, v8

3) Verify left arm only

Use:

  • v11, v12, v13, v14, v15

4) Do not command both arms from different skills at the same time yet

Until the geometry is correct, it gets confusing fast.


Example: right arm test script

ControlCommand("Inverse Kinematic Arm", "MoveTo", 10, 8, 15);
print("Requested right arm move to 10, 8, 15");

If your right arm skill is actually named differently in the cheat sheet, use that exact command name, but the screenshot you posted earlier showed Inverse Kinematic Arm for MoveTo.


Example: left arm test script

If you have a separate IK skill instance for the left arm and it is the same skill type, it may still use the same command name pattern. The difference is the servo ports inside the configuration.

Example:

ControlCommand("Inverse Kinematic Arm", "MoveTo", -10, 8, 15);
print("Requested left arm move to -10, 8, 15");

But whether that moves the left arm depends on:

  • how the left arm skill is configured
  • which ports it is mapped to
  • whether you made the arm geometry mirror correctly

Camera example concept

Once your arm is stable, I can help you make a simple camera-to-arm script like this:

  • object seen on left side of camera arm moves left
  • object seen higher in image arm lifts
  • object seen larger/closer arm moves closer or adjusts grip

But that should come after the arm is stable and safe.


Best next step

I’d strongly suggest this order:

  1. Turn off Auto Position
  2. Test right arm IK alone
  3. Test left arm IK alone
  4. Then add camera behavior
  5. Then reintroduce Auto Position only if needed

What I need from you

To help you build the right arm test and left arm test correctly, can you tell me:

  1. Do you want the right arm to use v4-v8 and the left arm to use v11-v15 exactly as listed?
  2. Are both IK skill instances currently configured with the correct servo ports?
  3. Do you want me to give you a safe homing script for both arms?
  4. Do you want a camera tracking example next?

If you want, I can write you a clean test plan for Cybot3000 that tests:

  • right arm only
  • left arm only
  • grippers only
  • camera-only tracking
  • then combined operation

That would probably be the safest way forward.


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.
Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#16   — Edited

Also, don't forget that the inverse kinematic Cartesian coordinates must be within the range of your arm. What I mean is, if your arm has a total reach (from base to end effector) of 30 cm, you can't send a coordinate that bends the arm in, because 0,0,0 is the base. So any numbers smaller than the base will try to send the end effector backward toward the base.

Just imagine if your human arm (your arm, as a human) were told to position your fingers at 10, 15, and 10 cm from your shoulder, which is within your actual arm tissue. How the heck would that work? Your arm can't bend to place your fingers inside your arm. So you need to make sure the coordinates you send are not some arbitrary random value.

And that is what forward kinematics does. You do not send the arm into random Cartesian coordinates that you make up in your head. By doing that, you'll break something. Instead, you use forward kinematics. Forward kinematics means manually moving the servos using servo Robot Skills to position the end effector in a safe pose. Take note of the Cartesian coordinates in the inverse kinematic skill. You will see those numbers change when you move the end effector.

Move the servos around to get an idea of your end-effector's reach, and take note of the X, Y, and Z coordinates.

Once you have a better understanding of what the Cartesian limits are of the end effector, you will know what coordinates to send to the inverse kinematic skill.

Summary: You will break things if you're trying to learn limits by using random numbers. Move the arm around to understand its range limits better.

There is an entire section in the manual that you must follow, which tells you how to begin using this. This is an exact direct link to the instructions:  https://synthiam.com/Support/Skills/Servo/Inverse-Kinematic-Arm?id=21839#testing-your-setup-do-this-before-anything-else

Oh, and lastly - DO NOT start merging multiple skills like cameras, auto position, and other scripts while you're learning how to use something new. You will break something on your robot because you've now introduced a dozen unknowns.

User-inserted image