Stream All The Video Sources icon Stream All The Video Sources Stream video from any URI/protocol (RTMP, RTSP, HTTP, UDP, etc.) to a selected ARC camera device for real-time network feed playback. Try it →
Asked

Servo Recorder Repeatability On Adventurebot

I’m trying to get a repeatable drive pattern out of an AdventureBot using the servo Recorder skill and I’m hitting some oddities with the continuous rotation drive servos (EZ-B v4 on Wi-Fi, stock D0/D1 wheel setup). I recorded a simple "figure 8" by driving with the servo Pad as the docs suggest. During recording I kept the wheels around the usual CR ranges (e.g., ~90 stop, <90 reverse, >90 forward) and made sure both wheels were trimmed so 90 is truly stopped. On playback from the servo Recorder UI, the bot roughly follows the path, but I see brief surges where one wheel jumps to near full speed for a split second, throwing it wide. If I use the speed modifier, e.g., 0.5, the timing slows but the turning radius changes noticeably, almost like the positions are being scaled rather than just the temporal spacing. Using -1 for reverse doesn’t mirror the path; it tends to spin-in-place at segments that were gentle turns forward. I also tried splitting left/right into two recordings and starting them via ControlCommand from a script, but they’re not perfectly synchronized and drift starts to accumulate. I’ve tried AP and client Wi-Fi modes, fresh batteries, and re-trimmed the CR servos; behavior is consistent. Does servo Recorder truly support accurate capture/replay for continuous rotation wheels, and is there a reliable way to start multi-channel playback in perfect sync, or should I switch to a Movement Panel or a scripted array of timed SetServo commands for this use case?



Related Hardware (view all EZB hardware)
Adventurebot by EZ-Robot
Two-wheeled WiFi robot with camera using EZ-B v4 brain-affordable, expandable AdventureBot kit built from EZ-Bits, sold by EZ-Robot.
Wi-Fi / USB
Servos 24
Camera
Audio
UART 3
I2C
ADC 8
Digital 24

Related Robot Skills (view all robot skills)
Servo Recorder by Synthiam
Record and replay named servo movements with adjustable speed/direction (-5 to +5), multiple recordings, ControlCommand triggers and status var
Movement Script by Synthiam
Trigger direction-specific scripts when ARC movement panels change; assign scripts per direction/stop, access direction and speed (JS/Python/EZ).

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  

Servo Recorder can replay servo motion, but for an AdventureBot with continuous-rotation drive servos, it’s usually not the best tool for repeatable drive paths.

What you’re seeing

A few things are happening here:

  • Servo Recorder is position-focused, not motion-odometry focused.
  • With continuous rotation servos, ARC is recording the servo command values over time, not the robot’s actual traveled path.
  • So if battery voltage, floor friction, trim, WiFi latency, or the servo’s deadband changes, the same recording can drift.
  • The speed modifier changes playback timing, but it can also make the motion feel "different" because the servo command pattern is still being played as a sequence of values over time.
  • Reverse playback on CR servos is not a true "mirror the path" operation. It reverses the command sequence, which often produces very different robot motion than retracing a path.
  • Starting two separate recordings from script can absolutely cause sync drift if they aren’t driven from one coordinated source.

Bottom line

For repeatable drive patterns on AdventureBot, I would recommend:

  1. Movement Panel + scripted movement

    • Best if you want a repeatable forward/turn sequence.
    • Good for path-style routines.
    • Easier to tune and debug.
  2. A JavaScript or Python timed script using Servo.setPosition()

    • Best if you want precise control over both wheels.
    • More reliable than servo Recorder for drive choreography.
    • You can explicitly set both wheel commands at the same time.
  3. Servo Recorder

    • Better for arm gestures, head motions, poses, and animations
    • Not ideal for drive-path repeatability on continuous-rotation wheels

Why servo Recorder is a weak fit here

Servo Recorder is great when the output servo motion is:

  • positional
  • repeatable by angle
  • not dependent on external physics

A drive base is different because:

  • the robot’s actual motion depends on the floor
  • wheel slip changes the path
  • CR servos don’t report true position like smart servos
  • "same command" does not equal "same path"

Better approach for your use case

If your goal is something like a repeatable figure-8, I’d suggest a scripted drive routine instead of recording.

For example, in JavaScript:

// Example: coordinated drive sequence for AdventureBot CR servos
// Adjust these values to match your robot's true stop/forward/reverse trim.

function drive(left, right, ms) {
  Servo.setPosition(d0, left);
  Servo.setPosition(d1, right);
  sleep(ms);
}

function stop(ms) {
  drive(90, 90, ms);
}

// Figure-8 style example
drive(120, 120, 1200);  // forward
drive(120, 100, 700);   // curve right
drive(120, 120, 1200);  // forward
drive(100, 120, 700);   // curve left
stop(300);

If your bot uses different port mapping or reversed wheel directions, the numeric values may need to be inverted.

For perfect sync

If you want both wheels to change at the same instant, the best practice is:

  • set both servos in the same script
  • avoid starting separate recorded clips independently
  • use one function that updates both wheel ports together

That gives you much tighter synchronization than two separate playback commands.

One more important note

Because AdventureBot’s wheel servos are continuous rotation, you may get better results by building your motion around:

  • forward/reverse/turn timing
  • not "replaying" a captured path

If you want, ARC’s Movement Panel approach can be combined with scripts so you can press a button or call commands and still keep the drive behavior organized.

My recommendation

For AdventureBot drive patterns, I’d switch to:

  • Movement Panel if you want operator-style driving
  • JavaScript timed servo scripting if you want repeatable autonomous motion

Servo Recorder is fine for testing, but I would not trust it for repeatable path driving on CR wheel servos.

If you want, I can help you write a clean AdventureBot JavaScript figure-8 routine for your exact servo directions and trim values.

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.