Thumbnail

Servo Recorder

by Synthiam

Record and play back servo movements on your robot at specified speed and direction

Requires ARC v15 (Updated 6/17/2020) Source Code

How to add the Servo Recorder robot skill

  1. Load the most recent release of ARC (Get ARC).
  2. Press the Project tab from the top menu bar in ARC.
  3. Press Add Robot Skill from the button ribbon bar in ARC.
  4. Choose the Servo category tab.
  5. Press the Servo Recorder icon to add the robot skill to your project.

Don't have a robot yet?

Follow the Getting Started Guide to build a robot and use the Servo Recorder robot skill.


How to use the Servo Recorder robot skill

This plugin allows recording and replaying servo movements in specified speeds and direction. Trigger the recording playback and speed using ControlCommand() from scripts.

Realistic Motions For realistic motion recordings, we recommend creating the recordings with the servo Pad Control. Find more information about the servo Pad here: http://www.ez-robot.com/Tutorials/Help.aspx?id=150

Recording You can store multiple recordings in this plugin. Each can be given a unique name that allows the recordings to be differentiated - click on the name to rename a recording. Pressing the Add button will append a new recording instance to the list. You may re-record over existing recordings as well. Press the Record button, which will set the instance to begin recording at the first servo movement.

Playback Individual or multiple recordings can be played back manually by pressing the Play button. Programmatically, you can play recordings using ezscript or Blockly. In Blockly, select the recording from the ControlCommand block located under Utility. With ezscript, the Cheat Sheet shows the ControlCommand() for starting and stopping the playback of each recording.

Playback Speeds & Direction The modifier allows playback of speed and direction. A value of 1 means original playback speed in forward direction. A value of -1 means original playback speed in reverse direction. The ControlCommand() also accepts an optional parameter for speed. You can specify a value between -5 and +5 with 0.1 increments. For example -0.5 is half speed in reverse. Half speed forward is 0.5.

There is also a ControlCommand() to set the speed while a recording is being played back. You can programatically reverse the playback direction with the ControlCommand() speed parameter, or change the speed.


// Play Reverse at half speed
ControlCommand("Servo Recorder", "Play", "No Name", -0.5);

// Wait for 2 seconds
sleep(2000);

// Set the speed to play forward at half speed 
ControlCommand("Servo Recorder", "Speed", "No Name", 0.5);

Variable There is a variable that returns the status of the playback of recordings. If a recording is being played back, the variable $IsServoRecorderRunning will be true. You can wait for a playback to complete by using WaitFor(). See this example code below, which will run Test 1, Test 2 and Test 3 recordings one after another. The WaitFor() will wait to see when the recording has completed, and the Sleep(100) is merely to ensure the recording has started before checking the variable. The sleep(100) is most likely not required, and my tests without it worked - but I put it in for safe practice. Test in your application to see if it's required as well, it may not be.

print("Playing test 1")

ControlCommand("Servo Recorder", Play, "test 1")

# Wait a short while to ensure record is running
sleep(100)

# Wait for the recorder to stop running
waitfor($IsServoRecorderRunning = false)

print("Playing test 2")

ControlCommand("Servo Recorder", Play, "test 2")

# Wait a short while to ensure record is running
sleep(100)

# Wait for the recorder to stop running
waitfor($IsServoRecorderRunning = false)

print("Playing test 3")

ControlCommand("Servo Recorder", Play, "test 3")

# Wait a short while to ensure record is running
sleep(100)

# Wait for the recorder to stop running
waitfor($IsServoRecorderRunning = false)

User-inserted image


ARC Pro

Upgrade to ARC Pro

Your robot can be more than a simple automated machine with the power of ARC Pro!

PRO
USA
#17  

Thank you for this update.

PRO
USA
#18  

Servo Recorder works well, thanks

EzAng

#19   — Edited

I have a few questions about this skill.

I LOVE this skill! It gives my robots more human-like movements. The only thing I do not like is that each time I start to playback a new recording, the servos jump/jerk from the last position to the new position. I am using this skill to animate my fembot's head as she speaks and It is rough on my servos and the jumping when going from one recording to another looks terrible.

  1. is there a way to pause the playback of the recordings while they are playing?
  2. is there a way to get the servo values from as a recording is played back? (In real time.)
  3. is there a way to manually edit the values of the servo recordings? (I want to be able to return the servos to a known position after each recording is finished.)

Thanks,

--Thomas

PRO
Synthiam
#20  

You can get servo positions in real time using servos that support that. I would suggest checking out the support page that explains how servos work, which has info on what a bidirectional servo is: https://synthiam.com/Support/Advanced-Fundamentals/servo-motor

Although if I were to avoid the jump - it would make sense to bring the servos back into a starting position during the creation of each animation. Otherwise, you're asking not to jump - but how can they not flinch when the servos are in different places? If a servo is at position 2, and the next frame is position 175, it will jump because those are two other numbers. And that's what servos do, is they move. So when a servo is instructed to move, it will do what it's designed to do and move. So moving from one position to another will occur. So you'd want the servos not to have such significant gaps between their positions to remove the "jump" effect.

#21  

To separate my questions:

  1. is there a way to PAUSE the playback of the servo recorder, and then continue from the paused location?
#22   — Edited
  1. Can I edit the servo recorder frames? Where are they stored?
#23  
  1. Can I get the servo values recording FROM THE FRAME, in REAL TIME?

for example, the servo recorder is playing back a recording. It tells servo 1 to move to a new position. Can I get THE POSITION that the servo recorder is playing back in real time?

PRO
Synthiam
#24  

I don't know what kind of servos you're using; as I mentioned, it matters. I provided a link that explains what servos are and the different types.

There are two commands that you can look at, which are available in the support section. I use JavaScript, so that's what I'm linking to

1) https://synthiam.com/Support/javascript-api/Servo/getPosition

2) https://synthiam.com/Support/javascript-api/Servo/getPositionRealtime

As for your other questions and multiple posts, you can scroll up to read the manual for this robot skill.