EZ-B Settings icon EZ-B Settings Configures and pushes WiFi SSID, password, system name and channel to EZ-Robot EZ-B v4 from ARC; saves settings with project for quick redeploy. Try it →
Asked
Virtual Robot with two controllers

Virtual Robot With Two Controllers

Running ARC on a LattePanda (Windows) with the onboard Arduino Leonardo flashed with the EZ-Genuino_Leonardo firmware and connected over USB. I checked DTR Enabled in the Connection config so the serial events fire correctly. Two micro servos for head pan/tilt are on the Leonardo (D3 and D5). I also have an external EZ-B v4 over Wi-Fi for the higher-torque arm servos (shoulder on D4, elbow on D5). Both controllers connect fine (Leonardo as EZB index 0 over USB, v4 as EZB index 1 over Wi-Fi), and I can move everything using servo controls and Auto Position frames without issues.

I added the Virtual robot skill to visualize all four joints. Here’s the snag: when I add servo markers, the selector only seems to bind to ports like D3/D4/etc without any obvious way to select the EZB index. The head markers (0.D3/0.D5) update perfectly, but the arm markers follow the Leonardo’s D4/D5 instead of the EZ-B v4’s D4/D5, or sometimes they don’t update at all if those Leonardo ports are unused. I tried renaming servos via the servo config/manager to HeadPan, HeadTilt, ArmShoulder, ArmElbow and then typing those names into Virtual Robot, but the field appears to only accept a port (and flags it invalid if I type a name). I also tried adding a second Virtual Robot instance hoping it would target EZB index 1, but I don’t see a board selection anywhere in the skill.

Is there a way to explicitly bind Virtual Robot servo markers to a specific EZB index (e.g., 1.D4) or reference a named servo rather than just a raw port so I can visualize joints across multiple controllers?



Related Hardware (view all EZB hardware)
Lattepanda by DF Robot
LattePanda runs Windows and Synthiam ARC, with onboard Arduino (EZB firmware) for GPIO and direct EZ‑B v4 hardwire control with low latency.
Wi-Fi / USB
Servos 12
Camera
Audio
UART 1
I2C
ADC 5
Digital 12

Related Robot Skills (view all robot skills)
Create servo frames/actions to animate humanoid, hexapod or custom gaits with smooth transitions, SW ramping and directional control
Virtual Robot by Synthiam
Display robot image with real-time servo position readouts and basic servo management including servo deletion

ARC Pro

Upgrade to ARC Pro

Unleash your robot's full potential with the cutting-edge features and intuitive programming offered by Synthiam ARC Pro.

Author Avatar
PRO
Canada
Twitter YouTube GitHub
#1  

Yes - what you’re seeing is expected behavior in Virtual Robot right now.

Short answer

Virtual Robot servo markers bind to servo ports, not EZB indexes.
So a port like D4 is interpreted as the first matching servo control/board mapping, which is why it appears to follow the Leonardo’s D4/D5 instead of the EZ-B v4’s D4/D5.

What this means

  • Virtual Robot currently does not offer a direct way to specify:
    • 0.D4 vs 1.D4
    • or a named servo like ArmShoulder
  • It uses the servo port mapping from the connected skill, and duplicate port numbers across multiple controllers can become ambiguous.

Best workaround

To visualize joints across multiple controllers, I recommend one of these approaches:

Option 1: Use unique servo mappings

If possible, avoid duplicate port names across controllers in the same project.

For example:

  • Leonardo: D0, D1, D2, D3
  • EZ-B v4: D4, D5, etc.

That way Virtual Robot can resolve each servo unambiguously.

Option 2: Use separate visualization skills

If you need to keep duplicate port assignments, consider:

  • one Virtual Robot skill for the Leonardo-driven joints
  • another visualization approach for the EZ-B v4 joints

However, since Virtual Robot does not expose a board selector, it won’t cleanly split two devices in one instance.

Option 3: Create a custom robot skill

If you need a multi-board visualization that explicitly tracks:

  • board index
  • servo name
  • or a combined robot model

then the right long-term solution is to build a custom robot skill: https://synthiam.com/Support/Create-Robot-Skill/Overview

That would let you map ezbIndex + port exactly the way you want.

Important detail

Renaming the servo to ArmShoulder in ARC is helpful for your project organization, but Virtual Robot’s servo field currently expects a port identifier, not a friendly name. So your test makes sense, but it won’t bind the marker that way.

Recommendation

For your specific setup, I’d suggest:

  1. Keep the Leonardo joints on one set of unique ports
  2. Move the v4 arm servos to a different set of unique ports if possible
  3. Then map those unique ports in Virtual Robot

A couple questions

  • Are both controllers using the same port numbers intentionally because of existing wiring, or could you remap one side?
  • Do you want the Virtual Robot to show both boards in one model, or would separate visualizers be acceptable?

If you want, I can help you design a clean port mapping for both boards in ARC so Virtual Robot can track them reliably.

I am a customer support AI and still learning. Please verify important answers in our support documentation. For advanced AI features, use the AI Script Agent built into ARC.